diff options
author | Piotr Krysik <ptrkrysik@gmail.com> | 2017-08-02 12:41:34 +0200 |
---|---|---|
committer | Piotr Krysik <ptrkrysik@gmail.com> | 2017-08-02 12:41:34 +0200 |
commit | 45f99291a4f67713f5a3d794d30a647bccdec825 (patch) | |
tree | 41e4a35b982f51485fd61506d1fb70b1ba707d46 /lib | |
parent | 2770fc485c7f3ba95856a1d5d7c9243c9744fd5c (diff) | |
parent | 04536ab41ca48051dfcc895279769424a1131c5e (diff) |
Merge branch 'fixeria/api' of https://github.com/axilirator/gr-gsm into axilirator-fixeria/api
Diffstat (limited to 'lib')
-rw-r--r-- | lib/flow_control/burst_fnr_filter_impl.cc | 56 | ||||
-rw-r--r-- | lib/flow_control/burst_fnr_filter_impl.h | 15 | ||||
-rw-r--r-- | lib/flow_control/burst_sdcch_subslot_filter_impl.cc | 57 | ||||
-rw-r--r-- | lib/flow_control/burst_sdcch_subslot_filter_impl.h | 12 | ||||
-rw-r--r-- | lib/flow_control/burst_sdcch_subslot_splitter_impl.cc | 15 | ||||
-rw-r--r-- | lib/flow_control/burst_sdcch_subslot_splitter_impl.h | 4 | ||||
-rw-r--r-- | lib/flow_control/burst_timeslot_filter_impl.cc | 44 | ||||
-rw-r--r-- | lib/flow_control/burst_timeslot_filter_impl.h | 9 | ||||
-rw-r--r-- | lib/flow_control/dummy_burst_filter_impl.cc | 25 | ||||
-rw-r--r-- | lib/flow_control/dummy_burst_filter_impl.h | 6 |
10 files changed, 239 insertions, 4 deletions
diff --git a/lib/flow_control/burst_fnr_filter_impl.cc b/lib/flow_control/burst_fnr_filter_impl.cc index e665acf..5d1ffbc 100644 --- a/lib/flow_control/burst_fnr_filter_impl.cc +++ b/lib/flow_control/burst_fnr_filter_impl.cc @@ -49,7 +49,8 @@ namespace gr { gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), d_mode(mode), - d_framenr(fnr) + d_framenr(fnr), + d_filter_policy(FILTER_POLICY_DEFAULT) { message_port_register_in(pmt::mp("in")); message_port_register_out(pmt::mp("out")); @@ -64,6 +65,14 @@ namespace gr { void burst_fnr_filter_impl::process_burst(pmt::pmt_t msg) { + if (d_filter_policy == FILTER_POLICY_DROP_ALL) + return; + + if (d_filter_policy == FILTER_POLICY_PASS_ALL) { + message_port_pub(pmt::mp("out"), msg); + return; + } + pmt::pmt_t header_plus_burst = pmt::cdr(msg); gsmtap_hdr * header = (gsmtap_hdr *)pmt::blob_data(header_plus_burst); @@ -75,5 +84,50 @@ namespace gr { message_port_pub(pmt::mp("out"), msg); } } + + /* External API */ + unsigned int + burst_fnr_filter_impl::get_fn(void) + { + return d_framenr; + } + + unsigned int + burst_fnr_filter_impl::set_fn(unsigned int fn) + { + if (fn <= GSM_HYPERFRAME) + d_framenr = fn; + + return d_framenr; + } + + + filter_mode + burst_fnr_filter_impl::get_mode(void) + { + return d_mode; + } + + filter_mode + burst_fnr_filter_impl::set_mode(filter_mode mode) + { + d_mode = mode; + return d_mode; + } + + /* Filtering policy */ + filter_policy + burst_fnr_filter_impl::get_policy(void) + { + return d_filter_policy; + } + + filter_policy + burst_fnr_filter_impl::set_policy(filter_policy policy) + { + d_filter_policy = policy; + return d_filter_policy; + } + } /* namespace gsm */ } /* namespace gr */ diff --git a/lib/flow_control/burst_fnr_filter_impl.h b/lib/flow_control/burst_fnr_filter_impl.h index 5d9850d..9d13825 100644 --- a/lib/flow_control/burst_fnr_filter_impl.h +++ b/lib/flow_control/burst_fnr_filter_impl.h @@ -25,18 +25,33 @@ #include <grgsm/flow_control/burst_fnr_filter.h> +#define GSM_SUPERFRAME (26 * 51) +#define GSM_HYPERFRAME (2048 * GSM_SUPERFRAME) + namespace gr { namespace gsm { class burst_fnr_filter_impl : public burst_fnr_filter { private: + filter_policy d_filter_policy; unsigned int d_framenr; filter_mode d_mode; public: burst_fnr_filter_impl(filter_mode mode, unsigned int fnr); ~burst_fnr_filter_impl(); void process_burst(pmt::pmt_t msg); + + /* External API */ + unsigned int get_fn(void); + unsigned int set_fn(unsigned int fn); + + filter_mode get_mode(void); + filter_mode set_mode(filter_mode mode); + + /* Filtering policy */ + filter_policy get_policy(void); + filter_policy set_policy(filter_policy policy); }; } // namespace gsm diff --git a/lib/flow_control/burst_sdcch_subslot_filter_impl.cc b/lib/flow_control/burst_sdcch_subslot_filter_impl.cc index 31e2989..80e7c89 100644 --- a/lib/flow_control/burst_sdcch_subslot_filter_impl.cc +++ b/lib/flow_control/burst_sdcch_subslot_filter_impl.cc @@ -48,7 +48,8 @@ namespace gr { gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), d_mode(mode), - d_subslot(subslot) + d_subslot(subslot), + d_filter_policy(FILTER_POLICY_DEFAULT) { message_port_register_in(pmt::mp("in")); message_port_register_out(pmt::mp("out")); @@ -73,6 +74,14 @@ namespace gr { 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,-1,-1,-1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,-1,-1,-1 }; + + if (d_filter_policy == FILTER_POLICY_DROP_ALL) + return; + + if (d_filter_policy == FILTER_POLICY_PASS_ALL) { + message_port_pub(pmt::mp("out"), msg); + return; + } pmt::pmt_t header_plus_burst = pmt::cdr(msg); gsmtap_hdr * header = (gsmtap_hdr *)pmt::blob_data(header_plus_burst); @@ -101,5 +110,51 @@ namespace gr { message_port_pub(pmt::mp("out"), msg); } } + + /* External API */ + unsigned int + burst_sdcch_subslot_filter_impl::get_ss(void) + { + return d_subslot; + } + + unsigned int + burst_sdcch_subslot_filter_impl::set_ss(unsigned int ss) + { + if ((d_mode == SS_FILTER_SDCCH8 && ss < 8) + || (d_mode == SS_FILTER_SDCCH4 && ss < 4)) + d_subslot = ss; + + return d_subslot; + } + + + subslot_filter_mode + burst_sdcch_subslot_filter_impl::get_mode(void) + { + return d_mode; + } + + subslot_filter_mode + burst_sdcch_subslot_filter_impl::set_mode(subslot_filter_mode mode) + { + d_mode = mode; + return d_mode; + } + + /* Filtering policy */ + filter_policy + burst_sdcch_subslot_filter_impl::get_policy(void) + { + return d_filter_policy; + } + + filter_policy + burst_sdcch_subslot_filter_impl::set_policy(filter_policy policy) + { + d_filter_policy = policy; + return d_filter_policy; + } + } /* namespace gsm */ } /* namespace gr */ diff --git a/lib/flow_control/burst_sdcch_subslot_filter_impl.h b/lib/flow_control/burst_sdcch_subslot_filter_impl.h index 40a603e..85a392f 100644 --- a/lib/flow_control/burst_sdcch_subslot_filter_impl.h +++ b/lib/flow_control/burst_sdcch_subslot_filter_impl.h @@ -31,12 +31,24 @@ namespace gr { class burst_sdcch_subslot_filter_impl : public burst_sdcch_subslot_filter { private: + filter_policy d_filter_policy; subslot_filter_mode d_mode; unsigned int d_subslot; public: burst_sdcch_subslot_filter_impl(subslot_filter_mode mode, unsigned int subslot); ~burst_sdcch_subslot_filter_impl(); void process_burst(pmt::pmt_t msg); + + /* External API */ + unsigned int get_ss(void); + unsigned int set_ss(unsigned int ss); + + subslot_filter_mode get_mode(void); + subslot_filter_mode set_mode(subslot_filter_mode mode); + + /* Filtering policy */ + filter_policy get_policy(void); + filter_policy set_policy(filter_policy policy); }; } // namespace gsm diff --git a/lib/flow_control/burst_sdcch_subslot_splitter_impl.cc b/lib/flow_control/burst_sdcch_subslot_splitter_impl.cc index 90237d9..46177c1 100644 --- a/lib/flow_control/burst_sdcch_subslot_splitter_impl.cc +++ b/lib/flow_control/burst_sdcch_subslot_splitter_impl.cc @@ -141,5 +141,20 @@ namespace gr { message_port_pub(pmt::mp(port), msg); } + + /* External API */ + splitter_mode + burst_sdcch_subslot_splitter_impl::get_mode(void) + { + return d_mode; + } + + splitter_mode + burst_sdcch_subslot_splitter_impl::set_mode(splitter_mode mode) + { + d_mode = mode; + return d_mode; + } + } /* namespace gsm */ } /* namespace gr */ diff --git a/lib/flow_control/burst_sdcch_subslot_splitter_impl.h b/lib/flow_control/burst_sdcch_subslot_splitter_impl.h index b8eaaea..50aa028 100644 --- a/lib/flow_control/burst_sdcch_subslot_splitter_impl.h +++ b/lib/flow_control/burst_sdcch_subslot_splitter_impl.h @@ -36,6 +36,10 @@ namespace gr { burst_sdcch_subslot_splitter_impl(splitter_mode mode); ~burst_sdcch_subslot_splitter_impl(); void process_burst(pmt::pmt_t msg); + + /* External API */ + splitter_mode get_mode(void); + splitter_mode set_mode(splitter_mode mode); }; } // namespace gsm diff --git a/lib/flow_control/burst_timeslot_filter_impl.cc b/lib/flow_control/burst_timeslot_filter_impl.cc index ccf4d4c..c93bc60 100644 --- a/lib/flow_control/burst_timeslot_filter_impl.cc +++ b/lib/flow_control/burst_timeslot_filter_impl.cc @@ -48,7 +48,8 @@ namespace gr { : gr::block("burst_timeslot_filter", gr::io_signature::make(0, 0, 0), gr::io_signature::make(0, 0, 0)), - d_timeslot(timeslot) + d_timeslot(timeslot), + d_filter_policy(FILTER_POLICY_DEFAULT) { message_port_register_in(pmt::mp("in")); message_port_register_out(pmt::mp("out")); @@ -63,6 +64,14 @@ namespace gr { void burst_timeslot_filter_impl::process_burst(pmt::pmt_t msg) { + if (d_filter_policy == FILTER_POLICY_DROP_ALL) + return; + + if (d_filter_policy == FILTER_POLICY_PASS_ALL) { + message_port_pub(pmt::mp("out"), msg); + return; + } + pmt::pmt_t header_plus_burst = pmt::cdr(msg); gsmtap_hdr * header = (gsmtap_hdr *)pmt::blob_data(header_plus_burst); @@ -73,5 +82,38 @@ namespace gr { message_port_pub(pmt::mp("out"), msg); } } + + /* + * External API + */ + unsigned int + burst_timeslot_filter_impl::get_tn(void) + { + return d_timeslot; + } + + unsigned int + burst_timeslot_filter_impl::set_tn(unsigned int tn) + { + if (tn < 8) + d_timeslot = tn; + + return d_timeslot; + } + + /* Filtering policy */ + filter_policy + burst_timeslot_filter_impl::get_policy(void) + { + return d_filter_policy; + } + + filter_policy + burst_timeslot_filter_impl::set_policy(filter_policy policy) + { + d_filter_policy = policy; + return d_filter_policy; + } + } /* namespace gsm */ } /* namespace gr */ diff --git a/lib/flow_control/burst_timeslot_filter_impl.h b/lib/flow_control/burst_timeslot_filter_impl.h index f7b0b2d..fa54ef4 100644 --- a/lib/flow_control/burst_timeslot_filter_impl.h +++ b/lib/flow_control/burst_timeslot_filter_impl.h @@ -31,11 +31,20 @@ namespace gr { class burst_timeslot_filter_impl : public burst_timeslot_filter { private: + filter_policy d_filter_policy; unsigned int d_timeslot; public: burst_timeslot_filter_impl(unsigned int timeslot); ~burst_timeslot_filter_impl(); void process_burst(pmt::pmt_t msg); + + /* External API */ + unsigned int get_tn(void); + unsigned int set_tn(unsigned int tn); + + /* Filtering policy */ + filter_policy get_policy(void); + filter_policy set_policy(filter_policy policy); }; } // namespace gsm diff --git a/lib/flow_control/dummy_burst_filter_impl.cc b/lib/flow_control/dummy_burst_filter_impl.cc index 33c24cb..4241111 100644 --- a/lib/flow_control/dummy_burst_filter_impl.cc +++ b/lib/flow_control/dummy_burst_filter_impl.cc @@ -60,7 +60,8 @@ namespace gr { dummy_burst_filter_impl::dummy_burst_filter_impl() : gr::block("dummy_burst_filter", gr::io_signature::make(0, 0, 0), - gr::io_signature::make(0, 0, 0)) + gr::io_signature::make(0, 0, 0)), + d_filter_policy(FILTER_POLICY_DEFAULT) { message_port_register_in(pmt::mp("in")); message_port_register_out(pmt::mp("out")); @@ -75,6 +76,14 @@ namespace gr { void dummy_burst_filter_impl::process_burst(pmt::pmt_t msg) { + if (d_filter_policy == FILTER_POLICY_DROP_ALL) + return; + + if (d_filter_policy == FILTER_POLICY_PASS_ALL) { + message_port_pub(pmt::mp("out"), msg); + return; + } + pmt::pmt_t header_plus_burst = pmt::cdr(msg); 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); @@ -100,6 +109,20 @@ namespace gr { } return true; } + + /* Filtering policy */ + filter_policy + dummy_burst_filter_impl::get_policy(void) + { + return d_filter_policy; + } + + filter_policy + dummy_burst_filter_impl::set_policy(filter_policy policy) + { + d_filter_policy = policy; + return d_filter_policy; + } } /* namespace gsm */ } /* namespace gr */ diff --git a/lib/flow_control/dummy_burst_filter_impl.h b/lib/flow_control/dummy_burst_filter_impl.h index ce9c741..953ae94 100644 --- a/lib/flow_control/dummy_burst_filter_impl.h +++ b/lib/flow_control/dummy_burst_filter_impl.h @@ -35,10 +35,16 @@ namespace gr { private: bool is_dummy_burst(int8_t *burst, size_t burst_len); static const int8_t d_dummy_burst[]; + filter_policy d_filter_policy; public: dummy_burst_filter_impl(); ~dummy_burst_filter_impl(); void process_burst(pmt::pmt_t msg); + + /* External API */ + /* Filtering policy */ + filter_policy get_policy(void); + filter_policy set_policy(filter_policy policy); }; } // namespace gsm |