summaryrefslogtreecommitdiff
path: root/gr-blocks/lib/message_debug_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-blocks/lib/message_debug_impl.cc')
-rw-r--r--gr-blocks/lib/message_debug_impl.cc93
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 */