diff options
author | Piotr Krysik <ptrkrysik@gmail.com> | 2017-09-19 08:05:28 +0200 |
---|---|---|
committer | Piotr Krysik <ptrkrysik@gmail.com> | 2017-09-19 08:05:28 +0200 |
commit | 27f003267c044f4d416128fcb5cc40721a9fef77 (patch) | |
tree | 268ce2fc53a0fac047467bbbec1cfbef0ecac5f7 | |
parent | 902f4ebaf0785dd410253e5925770dc9c20b8084 (diff) |
Adding block for tagging bursts
-rw-r--r-- | grc/gsm_block_tree.xml | 4 | ||||
-rw-r--r-- | grc/transmitter/gsm_txtime_bursts_tagger.xml | 20 | ||||
-rwxr-xr-x | python/qa_txtime_bursts_tagger.py | 69 | ||||
-rw-r--r-- | python/transmitter/CMakeLists.txt | 3 | ||||
-rw-r--r-- | python/transmitter/txtime_bursts_tagger.py | 46 |
5 files changed, 124 insertions, 18 deletions
diff --git a/grc/gsm_block_tree.xml b/grc/gsm_block_tree.xml index 85a89c2..0ceec47 100644 --- a/grc/gsm_block_tree.xml +++ b/grc/gsm_block_tree.xml @@ -22,6 +22,10 @@ <block>gsm_input</block> </cat> <cat> + <name>Transmitter</name> + <block>gsm_txtime_bursts_tagger</block> + </cat> + <cat> <name>Logical channels demapping</name> <block>gsm_universal_ctrl_chans_demapper</block> <block>gsm_bcch_ccch_demapper</block> diff --git a/grc/transmitter/gsm_txtime_bursts_tagger.xml b/grc/transmitter/gsm_txtime_bursts_tagger.xml index 6e72e03..8c3a203 100644 --- a/grc/transmitter/gsm_txtime_bursts_tagger.xml +++ b/grc/transmitter/gsm_txtime_bursts_tagger.xml @@ -2,14 +2,14 @@ <block> <name>txtime_bursts_tagger</name> <key>gsm_txtime_bursts_tagger</key> - <category>GSM</category> <import>import grgsm</import> - <make>grgsm.txtime_bursts_tagger()</make> + <make>grgsm.txtime_bursts_tagger($init_fn, $init_time, $time_hint)</make> + <callback>set_time_hint($time_hint)</callback> <param> <name>init_fn</name> <key>init_fn</key> - <value>20</value> + <value>0</value> <type>int</type> <hide>part</hide> </param> @@ -17,8 +17,16 @@ <param> <name>init_time</name> <key>init_time</key> - <value>[10 0.1]</value> - <type>none</type> + <value>0</value> + <type>float</type> + <hide>part</hide> + </param> + + <param> + <name>time_hint</name> + <key>time_hint</key> + <value>0</value> + <type>float</type> <hide>part</hide> </param> @@ -28,6 +36,8 @@ <optional>1</optional> </sink> + + <sink> <name>bursts</name> <type>message</type> diff --git a/python/qa_txtime_bursts_tagger.py b/python/qa_txtime_bursts_tagger.py index 80257fa..bdbf1af 100755 --- a/python/qa_txtime_bursts_tagger.py +++ b/python/qa_txtime_bursts_tagger.py @@ -24,6 +24,14 @@ from gnuradio import gr, gr_unittest from gnuradio import blocks from txtime_bursts_tagger import txtime_bursts_tagger +#from transmitter.txtime_bursts_tagger import txtime_bursts_tagger +from pmt import * + +def make_time_hint_msg(time_hint): + return cons( dict_add(make_dict(), intern("time_hint"), from_double(time_hint)),PMT_NIL) + +def make_fn_time_msg(fn_ref, time_ref): + return cons( dict_add(make_dict(), intern("fn_time"), cons(from_uint64(fn_ref), from_double(time_ref))),PMT_NIL) class qa_txtime_bursts_tagger (gr_unittest.TestCase): @@ -34,9 +42,64 @@ class qa_txtime_bursts_tagger (gr_unittest.TestCase): self.tb = None def test_001_t (self): - # set up fg - self.tb.run () - # check data + tb = self.tb + time_ref = 0 + fn_ref = 0 + dut = txtime_bursts_tagger(fn_ref, time_ref) + + framenumbers_input = [1259192, 1076346, 1076242, 235879, 1259218] + timeslots_input = [6, 3, 4, 3, 5] + bursts_input = [ + "0001100001000111100111101111100101000100101011000010011110011101001111101100010100111111100000110100011111101011101100100111110011000100010001010000", + "0001000101000000001001111110000110010110110111110111101000001101001111101100010100111111001110001001110101110001010001000111011010010001011011000000", + "0001001101101101000111001000101011001101001110110001001100111101001111101100010100111111111001001010011010011111010010010101011001001011011100110000", + "0000010010100000001001101010100001011100010001101100111111101101001111101100010100111111101101001110100010101110010110101111100010010000110010110000", + ] + + src = grgsm.burst_source(framenumbers_input, timeslots_input, bursts_input) + sink = grgsm.burst_sink() + + self.tb.msg_connect(src, "out", dut, "bursts") + self.tb.msg_connect(dut, "bursts", sink, "in") + + tb.start() + tb.wait() + print "Dupa" + print sink + + +# msg1 = make_msg(1,"lol1") +# msg2 = make_msg(1,"lol2") +# msg3 = make_msg(2,"lol1") +# msg4 = make_msg(2,"lol1") +# +# port = intern("msgs") + +# tb.msg_connect(g,"msgs",dbg,"store") +# #tb.msg_connect(g,"msgs",dbg,"print_pdu") + +# tb.start() + +# g.to_basic_block()._post(port, msg1) +# g.to_basic_block()._post(port, msg3) +# g.to_basic_block()._post(port, msg2) +# g.to_basic_block()._post(port, msg4) + + + +# while dbg.num_messages() < 4: +# time.sleep(0.1) + +# tb.stop() +# tb.wait() +# print dbg.get_message(0) +# print get_id(dbg.get_message(0)) +# +# self.assertEqual(get_id(dbg.get_message(0)),1) +# self.assertEqual(get_id(dbg.get_message(1)),1) +# self.assertEqual(get_id(dbg.get_message(2)),2) +# self.assertEqual(get_id(dbg.get_message(3)),2) + if __name__ == '__main__': diff --git a/python/transmitter/CMakeLists.txt b/python/transmitter/CMakeLists.txt index 38a8c39..121ac8a 100644 --- a/python/transmitter/CMakeLists.txt +++ b/python/transmitter/CMakeLists.txt @@ -17,6 +17,7 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. -install(FILES +GR_PYTHON_INSTALL( + FILES txtime_bursts_tagger.py DESTINATION ${GR_PYTHON_DIR}/grgsm ) diff --git a/python/transmitter/txtime_bursts_tagger.py b/python/transmitter/txtime_bursts_tagger.py index ce57e55..41cb53b 100644 --- a/python/transmitter/txtime_bursts_tagger.py +++ b/python/transmitter/txtime_bursts_tagger.py @@ -21,27 +21,55 @@ # # -import numpy from gnuradio import gr +from fn_time import fn_time_delta +import pmt +import numpy class txtime_bursts_tagger(gr.basic_block): """ A block that adds txtime metadata to a burst """ - def __init__(self): + def __init__(self, init_fn=0, init_time=0, time_hint=None): gr.basic_block.__init__(self, name="txtime_bursts_tagger", in_sig=[], out_sig=[]) + self.set_fn_time_reference(init_fn, init_time) + if time_hint is not None: + self.set_time_hint(time_hint) + self.message_port_register_in(pmt.intern("fn_time")) self.message_port_register_in(pmt.intern("bursts")) self.message_port_register_out(pmt.intern("bursts")) - - self.set_msg_handler(pmt.intern("fn_time"), self.set_fn_time_reference) - self.set_msg_handler(pmt.intern("bursts"), self.set_txtime_of_burst) + + self.set_msg_handler(pmt.intern("fn_time"), self.process_fn_time_reference) + self.set_msg_handler(pmt.intern("bursts"), self.process_txtime_of_burst) - def set_fn_time_reference(self, msg): - pass + def process_fn_time_reference(self, msg): + time_hint = pmt.to_python(pmt.dict_ref(pmt.car(msg), (pmt.intern("time_hint"),PMT_NIL))) + fn_time = pmt.to_python(pmt.dict_ref(pmt.car(msg), (pmt.intern("fn_time"),PMT_NIL))) + if time_hint is not None: + self.time_hint = time_hint + elif fn_time is not None: + self.fn_ref = pmt.car(fn_time) + self.time_ref = pmt.cdr(fn_time) + self.time_hint = self.time_ref + + def process_txtime_of_burst(self, msg): + burst_with_header = pmt.to_python(pmt.cdr(msg)) + fn = burst_with_header[11]+burst_with_header[10]*2**8+burst_with_header[9]*2**16+burst_with_header[8]*2**24 + ts_num = burst_with_header[3] + fn_delta, txtime = fn_time_delta(self.fn_ref, self.time_ref, fn, self.time_hint, ts_num) + tags_dict = pmt.dict_add(pmt.make_dict(), pmt.intern("txtime"), pmt.from_double(txtime)) + new_msg = pmt.cons(tags_dict, pmt.cdr(msg)) + self.message_port_pub(pmt.intern("bursts"), new_msg) - def set_txtime_of_burst() - pass + def set_fn_time_reference(self, init_fn, init_time): + self.fn_ref = init_fn + self.time_ref = init_time + self.set_time_hint(init_time) + + def set_time_hint(self, time_hint): + self.time_hint = time_hint + |