Added options to print frame number and A5 frame count in message printer. Issue #127
diff --git a/lib/misc_utils/message_printer_impl.cc b/lib/misc_utils/message_printer_impl.cc
index 2599f65..1da65e9 100644
--- a/lib/misc_utils/message_printer_impl.cc
+++ b/lib/misc_utils/message_printer_impl.cc
@@ -28,6 +28,9 @@
#include <stdio.h>
#include "message_printer_impl.h"
#include "grgsm/gsmtap.h"
+extern "C" {
+ #include <osmocom/gsm/a5.h>
+}
namespace gr {
namespace gsm {
@@ -37,10 +40,30 @@
pmt::pmt_t message_plus_header_blob = pmt::cdr(msg);
uint8_t * message_plus_header = (uint8_t *)pmt::blob_data(message_plus_header_blob);
size_t message_plus_header_len=pmt::blob_length(message_plus_header_blob);
-
gsmtap_hdr * header = (gsmtap_hdr *)message_plus_header;
+ uint32_t frame_nr = be32toh(header->frame_number);
std::cout << d_prepend_string;
+ if (d_prepend_fnr)
+ {
+ std::cout << frame_nr;
+ }
+
+ if (d_prepend_fnr && d_prepend_frame_count)
+ {
+ std::cout << " ";
+ }
+
+ if (d_prepend_frame_count)
+ {
+ // calculate fn count using libosmogsm
+ std::cout << osmo_a5_fn_count(frame_nr);
+ }
+
+ if (d_prepend_fnr || d_prepend_frame_count)
+ {
+ std::cout << ": ";
+ }
int start_index = sizeof(gsmtap_hdr);
@@ -57,21 +80,26 @@
}
message_printer::sptr
- message_printer::make(pmt::pmt_t prepend_string, bool print_gsmtap_header)
+ message_printer::make(pmt::pmt_t prepend_string, bool prepend_fnr,
+ bool prepend_frame_count, bool print_gsmtap_header)
{
return gnuradio::get_initial_sptr
- (new message_printer_impl(prepend_string, print_gsmtap_header));
+ (new message_printer_impl(prepend_string, prepend_fnr,
+ prepend_frame_count, print_gsmtap_header));
}
/*
* The private constructor
*/
- message_printer_impl::message_printer_impl(pmt::pmt_t prepend_string, bool print_gsmtap_header)
+ message_printer_impl::message_printer_impl(pmt::pmt_t prepend_string, bool prepend_fnr,
+ bool prepend_frame_count, bool print_gsmtap_header)
: gr::block("message_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_gsmtap_header = print_gsmtap_header;
message_port_register_in(pmt::mp("msgs"));
set_msg_handler(pmt::mp("msgs"), boost::bind(&message_printer_impl::message_print, this, _1));
diff --git a/lib/misc_utils/message_printer_impl.h b/lib/misc_utils/message_printer_impl.h
index e44288b..86d27d7 100644
--- a/lib/misc_utils/message_printer_impl.h
+++ b/lib/misc_utils/message_printer_impl.h
@@ -33,9 +33,12 @@
private:
void message_print(pmt::pmt_t msg);
pmt::pmt_t d_prepend_string;
+ bool d_prepend_fnr;
+ bool d_prepend_frame_count;
bool d_print_gsmtap_header;
public:
- message_printer_impl(pmt::pmt_t prepend_string, bool print_gsmtap_header=false);
+ message_printer_impl(pmt::pmt_t prepend_string, bool prepend_fnr=false,
+ bool prepend_frame_count=false, bool print_gsmtap_header=false);
~message_printer_impl();
};