diff options
author | Roman Khassraf <roman@khassraf.at> | 2015-07-13 13:42:57 +0200 |
---|---|---|
committer | Roman Khassraf <roman@khassraf.at> | 2015-07-13 13:42:57 +0200 |
commit | 634449656eb604af8bbd26541969631b65de274b (patch) | |
tree | aa2ccc70143eeeb73a4ec9cda00034803287fe12 /lib/misc_utils/bursts_printer_impl.cc | |
parent | 42411c6ef0e0d3cae3dcdf20b45cbe5fabd0fa64 (diff) |
Added options to burst printer to have partial output compatibility to airprobe. See issue #86
Diffstat (limited to 'lib/misc_utils/bursts_printer_impl.cc')
-rw-r--r-- | lib/misc_utils/bursts_printer_impl.cc | 54 |
1 files changed, 46 insertions, 8 deletions
diff --git a/lib/misc_utils/bursts_printer_impl.cc b/lib/misc_utils/bursts_printer_impl.cc index a22e85f..2c1f197 100644 --- a/lib/misc_utils/bursts_printer_impl.cc +++ b/lib/misc_utils/bursts_printer_impl.cc @@ -44,39 +44,77 @@ namespace gr { gsmtap_hdr * header = (gsmtap_hdr *)pmt::blob_data(header_plus_burst); int8_t * burst = (int8_t *)(pmt::blob_data(header_plus_burst))+sizeof(gsmtap_hdr); size_t burst_len=pmt::blob_length(header_plus_burst)-sizeof(gsmtap_hdr); - uint32_t frame_nr; + uint32_t frame_nr = be32toh(header->frame_number); std::cout << d_prepend_string; if (d_prepend_fnr) { - frame_nr = be32toh(header->frame_number); - std::cout << frame_nr << ":"; + std::cout << frame_nr; } - for(int ii=0; ii<burst_len; ii++) + if (d_prepend_fnr && d_prepend_frame_count) { - std::cout << std::setprecision(1) << static_cast<int>(burst[ii]) << ""; + std::cout << " "; } + + if (d_prepend_frame_count) + { + // calculate frame count for A5 + uint16_t t1 = frame_nr/1326; + uint8_t t2 = frame_nr % 26; + uint8_t t3 = frame_nr % 51; + uint32_t frame_count = (t1<<11)|(t3<<5)|t2; + std::cout << frame_count; + } + + if (d_prepend_fnr || d_prepend_frame_count) + { + std::cout << ":"; + } + + if (d_print_payload_only) + { + for (int ii=0; ii<57; ii++) + { + std::cout << std::setprecision(1) << static_cast<int>(burst[ii + 3]); + } + for (int ii=0; ii<57; ii++) + { + std::cout << std::setprecision(1) << static_cast<int>(burst[ii + 88]); + } + } + else + { + for(int ii=0; ii<burst_len; ii++) + { + std::cout << std::setprecision(1) << static_cast<int>(burst[ii]); + } + } + std::cout << std::endl; } bursts_printer::sptr - bursts_printer::make(pmt::pmt_t prepend_string, bool prepend_fnr) + bursts_printer::make(pmt::pmt_t prepend_string, bool prepend_fnr, + bool prepend_frame_count, bool print_payload_only) { return gnuradio::get_initial_sptr - (new bursts_printer_impl(prepend_string, prepend_fnr)); + (new bursts_printer_impl(prepend_string, prepend_fnr, prepend_frame_count, print_payload_only)); } /* * The private constructor */ - bursts_printer_impl::bursts_printer_impl(pmt::pmt_t prepend_string, bool prepend_fnr) + bursts_printer_impl::bursts_printer_impl(pmt::pmt_t prepend_string, bool prepend_fnr, + bool prepend_frame_count, bool print_payload_only) : gr::block("bursts_printer", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)) { d_prepend_string = prepend_string; d_prepend_fnr = prepend_fnr; + d_prepend_frame_count = prepend_frame_count; + d_print_payload_only = print_payload_only; message_port_register_in(pmt::mp("bursts")); set_msg_handler(pmt::mp("bursts"), boost::bind(&bursts_printer_impl::bursts_print, this, _1)); } |