diff options
Diffstat (limited to 'gr-blocks/lib/message_debug_impl.cc')
-rw-r--r-- | gr-blocks/lib/message_debug_impl.cc | 93 |
1 files changed, 58 insertions, 35 deletions
diff --git a/gr-blocks/lib/message_debug_impl.cc b/gr-blocks/lib/message_debug_impl.cc index 299dd47d09..fa0f66d973 100644 --- a/gr-blocks/lib/message_debug_impl.cc +++ b/gr-blocks/lib/message_debug_impl.cc @@ -20,16 +20,36 @@ namespace gr { namespace blocks { -message_debug::sptr message_debug::make() +message_debug::sptr message_debug::make(bool en_uvec) { - return gnuradio::make_block_sptr<message_debug_impl>(); + return gnuradio::make_block_sptr<message_debug_impl>(en_uvec); } +message_debug_impl::message_debug_impl(bool en_uvec) + : block("message_debug", io_signature::make(0, 0, 0), io_signature::make(0, 0, 0)), + d_en_uvec(en_uvec) +{ + message_port_register_in(pmt::mp("print")); + set_msg_handler(pmt::mp("print"), [this](pmt::pmt_t msg) { this->print(msg); }); + + message_port_register_in(pmt::mp("store")); + set_msg_handler(pmt::mp("store"), [this](pmt::pmt_t msg) { this->store(msg); }); + + message_port_register_in(pmt::mp("print_pdu")); + set_msg_handler(pmt::mp("print_pdu"), + [this](pmt::pmt_t msg) { this->print_pdu(msg); }); +} + +message_debug_impl::~message_debug_impl() {} + void message_debug_impl::print(pmt::pmt_t msg) { - std::cout << "******* MESSAGE DEBUG PRINT ********\n"; - pmt::print(msg); - std::cout << "************************************\n"; + std::stringstream sout; + + sout << "******* MESSAGE DEBUG PRINT ********" << std::endl + << pmt::write_string(msg) << std::endl + << "************************************" << std::endl; + std::cout << sout.str(); } void message_debug_impl::store(pmt::pmt_t msg) @@ -40,25 +60,44 @@ void message_debug_impl::store(pmt::pmt_t msg) void message_debug_impl::print_pdu(pmt::pmt_t pdu) { + if (pmt::is_null(pdu) || !pmt::is_pair(pdu)) { + return; + } + + std::stringstream sout; + pmt::pmt_t meta = pmt::car(pdu); pmt::pmt_t vector = pmt::cdr(pdu); - std::cout << "* MESSAGE DEBUG PRINT PDU VERBOSE *\n"; - pmt::print(meta); - size_t len = pmt::blob_length(vector); - std::cout << "pdu_length = " << len << std::endl; - std::cout << "contents = " << std::endl; - size_t offset(0); - const uint8_t* d = (const uint8_t*)pmt::uniform_vector_elements(vector, offset); - for (size_t i = 0; i < len; i += 16) { - printf("%04x: ", ((unsigned int)i)); - for (size_t j = i; j < std::min(i + 16, len); j++) { - printf("%02x ", d[j]); - } - std::cout << std::endl; + sout << "***** VERBOSE PDU DEBUG PRINT ******" << std::endl + << pmt::write_string(meta) << std::endl; + + if (pmt::is_uniform_vector(vector)) { + size_t len = pmt::blob_length(vector); + if (d_en_uvec) { + sout << "pdu length = " << len << " bytes" << std::endl + << "pdu vector contents = " << std::endl; + size_t offset(0); + const uint8_t* d = + (const uint8_t*)pmt::uniform_vector_elements(vector, offset); + for (size_t i = 0; i < len; i += 16) { + sout << std::hex << std::setw(4) << std::setfill('0') + << static_cast<unsigned int>(i) << ": "; + for (size_t j = i; j < std::min(i + 16, len); j++) { + sout << std::hex << std::setw(2) << std::setfill('0') + << static_cast<unsigned int>(d[j]) << " "; + } + sout << std::endl; + } + } else { + sout << "pdu length = " << len << " bytes (printing disabled)" << std::endl; + } + } else { + sout << "Message CDR is not a uniform vector..." << std::endl; } - std::cout << "***********************************\n"; + sout << "************************************" << std::endl; + std::cout << sout.str(); } int message_debug_impl::num_messages() { return (int)d_messages.size(); } @@ -74,21 +113,5 @@ pmt::pmt_t message_debug_impl::get_message(int i) return d_messages[i]; } -message_debug_impl::message_debug_impl() - : block("message_debug", io_signature::make(0, 0, 0), io_signature::make(0, 0, 0)) -{ - message_port_register_in(pmt::mp("print")); - set_msg_handler(pmt::mp("print"), [this](pmt::pmt_t msg) { this->print(msg); }); - - message_port_register_in(pmt::mp("store")); - set_msg_handler(pmt::mp("store"), [this](pmt::pmt_t msg) { this->store(msg); }); - - message_port_register_in(pmt::mp("print_pdu")); - set_msg_handler(pmt::mp("print_pdu"), - [this](pmt::pmt_t msg) { this->print_pdu(msg); }); -} - -message_debug_impl::~message_debug_impl() {} - } /* namespace blocks */ } /* namespace gr */ |