diff options
-rw-r--r-- | examples/receiver_file.grc | 445 | ||||
-rw-r--r-- | examples/receiver_rtlsdr.grc | 312 | ||||
-rw-r--r-- | examples/receiver_usrp.grc | 420 | ||||
-rw-r--r-- | grc/CMakeLists.txt | 1 | ||||
-rw-r--r-- | grc/demapping/gsm_universal_ctrl_chans_demapper.xml | 32 | ||||
-rw-r--r-- | grc/gsm_block_tree.xml | 1 | ||||
-rw-r--r-- | include/gsm/demapping/CMakeLists.txt | 1 | ||||
-rw-r--r-- | include/gsm/demapping/universal_ctrl_chans_demapper.h | 56 | ||||
-rw-r--r-- | lib/CMakeLists.txt | 1 | ||||
-rw-r--r-- | lib/demapping/universal_ctrl_chans_demapper_impl.cc | 135 | ||||
-rw-r--r-- | lib/demapping/universal_ctrl_chans_demapper_impl.h | 48 | ||||
-rw-r--r-- | swig/gsm_swig.i | 3 |
12 files changed, 1147 insertions, 308 deletions
diff --git a/examples/receiver_file.grc b/examples/receiver_file.grc index af657d8..6bc0516 100644 --- a/examples/receiver_file.grc +++ b/examples/receiver_file.grc @@ -1,63 +1,229 @@ <?xml version='1.0' encoding='ASCII'?> +<?grc format='1' created='3.7.6'?> <flow_graph> - <timestamp>Thu Nov 6 14:42:26 2014</timestamp> + <timestamp>Wed Aug 13 19:03:06 2014</timestamp> <block> - <key>options</key> + <key>parameter</key> <param> <key>id</key> - <value>gsm_receiver_file</value> + <value>input_file_name</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>title</key> + <key>label</key> + <value>input_file_name</value> + </param> + <param> + <key>value</key> + <value>input.cfile</value> + </param> + <param> + <key>type</key> + <value>string</value> + </param> + <param> + <key>short_id</key> + <value>i</value> + </param> + <param> + <key>alias</key> <value></value> </param> <param> - <key>author</key> + <key>_coordinate</key> + <value>(184, -5)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>AGCH</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>4</value> + </param> + <param> + <key>alias</key> <value></value> </param> <param> - <key>description</key> + <key>_coordinate</key> + <value>(808, -5)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>PCH</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>5</value> + </param> + <param> + <key>alias</key> <value></value> </param> <param> - <key>window_size</key> - <value>1280, 1024</value> + <key>_coordinate</key> + <value>(872, -5)</value> </param> <param> - <key>generate_options</key> - <value>wx_gui</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>category</key> - <value>Custom</value> + <key>id</key> + <value>RACH</value> </param> <param> - <key>run_options</key> - <value>run</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>run</key> + <key>value</key> + <value>3</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(744, -5)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>SDCCH</value> + </param> + <param> + <key>_enabled</key> <value>True</value> </param> <param> - <key>max_nouts</key> + <key>value</key> + <value>6</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(936, -5)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>CCCH</value> + </param> <param> - <key>realtime_scheduling</key> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>2</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(680, -5)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>BCCH</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>1</value> + </param> + <param> + <key>alias</key> <value></value> </param> <param> + <key>_coordinate</key> + <value>(616, -5)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>CHANNEL_UNKNOWN</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>0</value> + </param> + <param> <key>alias</key> <value></value> </param> <param> <key>_coordinate</key> - <value>(10, 10)</value> + <value>(480, -5)</value> </param> <param> <key>_rotation</key> @@ -96,7 +262,7 @@ </param> <param> <key>_coordinate</key> - <value>(311, 10)</value> + <value>(296, -5)</value> </param> <param> <key>_rotation</key> @@ -135,7 +301,7 @@ </param> <param> <key>_coordinate</key> - <value>(656, 8)</value> + <value>(376, -5)</value> </param> <param> <key>_rotation</key> @@ -143,61 +309,62 @@ </param> </block> <block> - <key>gsm_message_printer</key> + <key>options</key> <param> <key>id</key> - <value>gsm_message_printer_0</value> + <value>gsm_receiver_file</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>alias</key> + <key>title</key> <value></value> </param> <param> - <key>affinity</key> + <key>author</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(1130, 196)</value> + <key>description</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>window_size</key> + <value>1280, 1024</value> </param> - </block> - <block> - <key>gsm_control_channels_decoder</key> <param> - <key>id</key> - <value>gsm_control_channels_decoder_0</value> + <key>generate_options</key> + <value>no_gui</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>category</key> + <value>Custom</value> </param> <param> - <key>alias</key> - <value></value> + <key>run_options</key> + <value>run</value> </param> <param> - <key>affinity</key> - <value></value> + <key>run</key> + <value>True</value> </param> <param> - <key>minoutbuf</key> + <key>max_nouts</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>realtime_scheduling</key> + <value></value> + </param> + <param> + <key>alias</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(908, 196)</value> + <value>(0, -5)</value> </param> <param> <key>_rotation</key> @@ -205,34 +372,22 @@ </param> </block> <block> - <key>blocks_socket_pdu</key> + <key>gsm_clock_offset_control</key> <param> <key>id</key> - <value>blocks_socket_pdu_0</value> + <value>gsm_clock_offset_control_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>"UDP_CLIENT"</value> - </param> - <param> - <key>host</key> - <value>127.0.0.1</value> - </param> - <param> - <key>port</key> - <value>4729</value> - </param> - <param> - <key>mtu</key> - <value>10000</value> + <key>fc</key> + <value>fc</value> </param> <param> - <key>tcp_no_delay</key> - <value>False</value> + <key>samp_rate</key> + <value>samp_rate</value> </param> <param> <key>alias</key> @@ -252,26 +407,38 @@ </param> <param> <key>_coordinate</key> - <value>(1138, 278)</value> + <value>(240, 219)</value> </param> <param> <key>_rotation</key> - <value>0</value> + <value>180</value> </param> </block> <block> - <key>gsm_get_bcch_or_ccch_bursts</key> + <key>gsm_input</key> <param> <key>id</key> - <value>gsm_get_bcch_or_ccch_bursts_0</value> + <value>gsm_input_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>d_fn51_start</key> - <value>2</value> + <key>ppm</key> + <value>0</value> + </param> + <param> + <key>osr</key> + <value>4</value> + </param> + <param> + <key>fc</key> + <value>fc</value> + </param> + <param> + <key>samp_rate_in</key> + <value>samp_rate</value> </param> <param> <key>alias</key> @@ -291,7 +458,7 @@ </param> <param> <key>_coordinate</key> - <value>(637, 192)</value> + <value>(176, 128)</value> </param> <param> <key>_rotation</key> @@ -299,22 +466,30 @@ </param> </block> <block> - <key>gsm_clock_offset_control</key> + <key>blocks_file_source</key> <param> <key>id</key> - <value>gsm_clock_offset_control_0</value> + <value>blocks_file_source_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>fc</key> - <value>fc</value> + <key>file</key> + <value>input_file_name</value> </param> <param> - <key>samp_rate</key> - <value>samp_rate</value> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>repeat</key> + <value>False</value> + </param> + <param> + <key>vlen</key> + <value>1</value> </param> <param> <key>alias</key> @@ -334,11 +509,11 @@ </param> <param> <key>_coordinate</key> - <value>(261, 307)</value> + <value>(-8, 115)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> </block> <block> @@ -385,7 +560,7 @@ </param> <param> <key>_coordinate</key> - <value>(414, 196)</value> + <value>(352, 112)</value> </param> <param> <key>_rotation</key> @@ -393,30 +568,22 @@ </param> </block> <block> - <key>gsm_input</key> + <key>gsm_universal_ctrl_chans_demapper</key> <param> <key>id</key> - <value>gsm_input_0</value> + <value>gsm_universal_ctrl_chans_demapper_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>ppm</key> - <value>0</value> - </param> - <param> - <key>fc</key> - <value>fc</value> - </param> - <param> - <key>osr</key> - <value>4</value> + <key>starts_fn_mod51</key> + <value>[2,6,12,16,22,26,32,36,42,46]</value> </param> <param> - <key>samp_rate_in</key> - <value>samp_rate</value> + <key>channel_types</key> + <value>[BCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH]</value> </param> <param> <key>alias</key> @@ -436,7 +603,7 @@ </param> <param> <key>_coordinate</key> - <value>(226, 213)</value> + <value>(536, 112)</value> </param> <param> <key>_rotation</key> @@ -444,38 +611,34 @@ </param> </block> <block> - <key>parameter</key> + <key>gsm_control_channels_decoder</key> <param> <key>id</key> - <value>input_file_name</value> + <value>gsm_control_channels_decoder_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>input_file_name</value> - </param> - <param> - <key>value</key> - <value>input.cfile</value> + <key>alias</key> + <value></value> </param> <param> - <key>type</key> - <value>string</value> + <key>affinity</key> + <value></value> </param> <param> - <key>short_id</key> - <value>i</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> <key>_coordinate</key> - <value>(193, 11)</value> + <value>(784, 112)</value> </param> <param> <key>_rotation</key> @@ -483,32 +646,16 @@ </param> </block> <block> - <key>blocks_file_source</key> + <key>gsm_message_printer</key> <param> <key>id</key> - <value>blocks_file_source_0</value> + <value>gsm_message_printer_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>file</key> - <value>input_file_name</value> - </param> - <param> - <key>type</key> - <value>complex</value> - </param> - <param> - <key>repeat</key> - <value>False</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> <key>alias</key> <value></value> </param> @@ -517,16 +664,8 @@ <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(15, 201)</value> + <value>(1000, 112)</value> </param> <param> <key>_rotation</key> @@ -540,44 +679,38 @@ <sink_key>measurements</sink_key> </connection> <connection> - <source_block_id>gsm_receiver_0</source_block_id> - <sink_block_id>gsm_get_bcch_or_ccch_bursts_0</sink_block_id> - <source_key>C0</source_key> - <sink_key>bursts</sink_key> - </connection> - <connection> - <source_block_id>gsm_get_bcch_or_ccch_bursts_0</source_block_id> - <sink_block_id>gsm_control_channels_decoder_0</sink_block_id> - <source_key>bursts</source_key> - <sink_key>bursts</sink_key> - </connection> - <connection> <source_block_id>gsm_control_channels_decoder_0</source_block_id> <sink_block_id>gsm_message_printer_0</sink_block_id> <source_key>msgs</source_key> <sink_key>msgs</sink_key> </connection> <connection> - <source_block_id>gsm_control_channels_decoder_0</source_block_id> - <sink_block_id>blocks_socket_pdu_0</sink_block_id> - <source_key>msgs</source_key> - <sink_key>pdus</sink_key> - </connection> - <connection> - <source_block_id>blocks_file_source_0</source_block_id> - <sink_block_id>gsm_input_0</sink_block_id> + <source_block_id>gsm_input_0</source_block_id> + <sink_block_id>gsm_receiver_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> + <source_block_id>gsm_universal_ctrl_chans_demapper_0</source_block_id> + <sink_block_id>gsm_control_channels_decoder_0</sink_block_id> + <source_key>bursts</source_key> + <sink_key>bursts</sink_key> + </connection> + <connection> + <source_block_id>gsm_receiver_0</source_block_id> + <sink_block_id>gsm_universal_ctrl_chans_demapper_0</sink_block_id> + <source_key>C0</source_key> + <sink_key>bursts</sink_key> + </connection> + <connection> <source_block_id>gsm_clock_offset_control_0</source_block_id> <sink_block_id>gsm_input_0</sink_block_id> <source_key>ppm</source_key> <sink_key>ppm_in</sink_key> </connection> <connection> - <source_block_id>gsm_input_0</source_block_id> - <sink_block_id>gsm_receiver_0</sink_block_id> + <source_block_id>blocks_file_source_0</source_block_id> + <sink_block_id>gsm_input_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/examples/receiver_rtlsdr.grc b/examples/receiver_rtlsdr.grc index beee92d..ae68d08 100644 --- a/examples/receiver_rtlsdr.grc +++ b/examples/receiver_rtlsdr.grc @@ -1,4 +1,5 @@ <?xml version='1.0' encoding='ASCII'?> +<?grc format='1' created='3.7.6'?> <flow_graph> <timestamp>Thu Nov 6 14:43:22 2014</timestamp> <block> @@ -68,7 +69,7 @@ <key>variable</key> <param> <key>id</key> - <value>samp_rate</value> + <value>AGCH</value> </param> <param> <key>_enabled</key> @@ -76,7 +77,7 @@ </param> <param> <key>value</key> - <value>1000000.026491</value> + <value>4</value> </param> <param> <key>alias</key> @@ -84,7 +85,7 @@ </param> <param> <key>_coordinate</key> - <value>(13, 86)</value> + <value>(944, 11)</value> </param> <param> <key>_rotation</key> @@ -92,26 +93,53 @@ </param> </block> <block> - <key>gsm_message_printer</key> + <key>variable</key> <param> <key>id</key> - <value>gsm_message_printer_1</value> + <value>RACH</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>value</key> + <value>3</value> + </param> + <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>_coordinate</key> + <value>(880, 11)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>SDCCH</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>6</value> + </param> + <param> + <key>alias</key> <value></value> </param> <param> <key>_coordinate</key> - <value>(1131, 230)</value> + <value>(1072, 11)</value> </param> <param> <key>_rotation</key> @@ -119,38 +147,53 @@ </param> </block> <block> - <key>gsm_get_bcch_or_ccch_bursts</key> + <key>variable</key> <param> <key>id</key> - <value>gsm_get_bcch_or_ccch_bursts_0</value> + <value>PCH</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>d_fn51_start</key> - <value>2</value> + <key>value</key> + <value>5</value> </param> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>_coordinate</key> + <value>(1008, 11)</value> </param> <param> - <key>minoutbuf</key> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>id</key> + <value>samp_rate</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>1000000.026491</value> + </param> + <param> + <key>alias</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(650, 226)</value> + <value>(13, 86)</value> </param> <param> <key>_rotation</key> @@ -158,34 +201,107 @@ </param> </block> <block> - <key>gsm_control_channels_decoder</key> + <key>variable</key> <param> <key>id</key> - <value>gsm_control_channels_decoder_0</value> + <value>CCCH</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>value</key> + <value>2</value> + </param> + <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>_coordinate</key> + <value>(816, 11)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>CHANNEL_UNKNOWN</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>0</value> + </param> + <param> + <key>alias</key> <value></value> </param> <param> - <key>minoutbuf</key> + <key>_coordinate</key> + <value>(616, 11)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>maxoutbuf</key> + <key>id</key> + <value>BCCH</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>1</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(752, 11)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>gsm_message_printer</key> + <param> + <key>id</key> + <value>gsm_message_printer_1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> <param> <key>_coordinate</key> - <value>(910, 230)</value> + <value>(1131, 230)</value> </param> <param> <key>_rotation</key> @@ -698,6 +814,10 @@ <value>1024</value> </param> <param> + <key>freqhalf</key> + <value>True</value> + </param> + <param> <key>wintype</key> <value>firdes.WIN_BLACKMAN_hARRIS</value> </param> @@ -746,6 +866,22 @@ <value>True</value> </param> <param> + <key>tr_mode</key> + <value>qtgui.TRIG_MODE_FREE</value> + </param> + <param> + <key>tr_level</key> + <value>0.0</value> + </param> + <param> + <key>tr_chan</key> + <value>0</value> + </param> + <param> + <key>tr_tag</key> + <value>""</value> + </param> + <param> <key>label1</key> <value></value> </param> @@ -974,6 +1110,92 @@ </param> </block> <block> + <key>gsm_input</key> + <param> + <key>id</key> + <value>gsm_input_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>ppm</key> + <value>0</value> + </param> + <param> + <key>fc</key> + <value>fc</value> + </param> + <param> + <key>osr</key> + <value>4</value> + </param> + <param> + <key>samp_rate_in</key> + <value>samp_rate</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(268, 247)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>gsm_control_channels_decoder</key> + <param> + <key>id</key> + <value>gsm_control_channels_decoder_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(910, 230)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> <key>gsm_receiver</key> <param> <key>id</key> @@ -1025,30 +1247,22 @@ </param> </block> <block> - <key>gsm_input</key> + <key>gsm_universal_ctrl_chans_demapper</key> <param> <key>id</key> - <value>gsm_input_0</value> + <value>gsm_universal_ctrl_chans_demapper_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>ppm</key> - <value>0</value> + <key>starts_fn_mod51</key> + <value>[2,6,12,16,22,26,32,36,42,46]</value> </param> <param> - <key>fc</key> - <value>fc</value> - </param> - <param> - <key>osr</key> - <value>4</value> - </param> - <param> - <key>samp_rate_in</key> - <value>samp_rate</value> + <key>channel_types</key> + <value>[BCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH]</value> </param> <param> <key>alias</key> @@ -1068,7 +1282,7 @@ </param> <param> <key>_coordinate</key> - <value>(268, 247)</value> + <value>(648, 232)</value> </param> <param> <key>_rotation</key> @@ -1082,12 +1296,6 @@ <sink_key>msgs</sink_key> </connection> <connection> - <source_block_id>gsm_get_bcch_or_ccch_bursts_0</source_block_id> - <sink_block_id>gsm_control_channels_decoder_0</sink_block_id> - <source_key>bursts</source_key> - <sink_key>bursts</sink_key> - </connection> - <connection> <source_block_id>gsm_control_channels_decoder_0</source_block_id> <sink_block_id>blocks_socket_pdu_0</sink_block_id> <source_key>msgs</source_key> @@ -1119,14 +1327,20 @@ </connection> <connection> <source_block_id>gsm_receiver_0</source_block_id> - <sink_block_id>gsm_get_bcch_or_ccch_bursts_0</sink_block_id> - <source_key>C0</source_key> + <sink_block_id>gsm_clock_offset_control_0</sink_block_id> + <source_key>measurements</source_key> + <sink_key>measurements</sink_key> + </connection> + <connection> + <source_block_id>gsm_universal_ctrl_chans_demapper_0</source_block_id> + <sink_block_id>gsm_control_channels_decoder_0</sink_block_id> + <source_key>bursts</source_key> <sink_key>bursts</sink_key> </connection> <connection> <source_block_id>gsm_receiver_0</source_block_id> - <sink_block_id>gsm_clock_offset_control_0</sink_block_id> - <source_key>measurements</source_key> - <sink_key>measurements</sink_key> + <sink_block_id>gsm_universal_ctrl_chans_demapper_0</sink_block_id> + <source_key>C0</source_key> + <sink_key>bursts</sink_key> </connection> </flow_graph> diff --git a/examples/receiver_usrp.grc b/examples/receiver_usrp.grc index 7202f10..82f0109 100644 --- a/examples/receiver_usrp.grc +++ b/examples/receiver_usrp.grc @@ -1,4 +1,5 @@ <?xml version='1.0' encoding='ASCII'?> +<?grc format='1' created='3.7.6'?> <flow_graph> <timestamp>Thu Nov 6 14:43:18 2014</timestamp> <block> @@ -68,6 +69,195 @@ <key>variable</key> <param> <key>id</key> + <value>CHANNEL_UNKNOWN</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>0</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(600, 11)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>CCCH</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>2</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(800, 11)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>AGCH</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>4</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(928, 11)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>BCCH</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>1</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(736, 11)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>PCH</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>5</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(992, 11)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>SDCCH</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>6</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1056, 11)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>RACH</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>3</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(864, 11)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> <value>samp_rate</value> </param> <param> @@ -269,45 +459,6 @@ </param> </block> <block> - <key>gsm_get_bcch_or_ccch_bursts</key> - <param> - <key>id</key> - <value>gsm_get_bcch_or_ccch_bursts_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>d_fn51_start</key> - <value>2</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(674, 268)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> <key>gsm_message_printer</key> <param> <key>id</key> @@ -335,41 +486,6 @@ </param> </block> <block> - <key>gsm_control_channels_decoder</key> - <param> - <key>id</key> - <value>gsm_control_channels_decoder_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(916, 272)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> <key>blocks_socket_pdu</key> <param> <key>id</key> @@ -447,6 +563,10 @@ <value>1024</value> </param> <param> + <key>freqhalf</key> + <value>True</value> + </param> + <param> <key>wintype</key> <value>firdes.WIN_BLACKMAN_hARRIS</value> </param> @@ -495,6 +615,22 @@ <value>True</value> </param> <param> + <key>tr_mode</key> + <value>qtgui.TRIG_MODE_FREE</value> + </param> + <param> + <key>tr_level</key> + <value>0.0</value> + </param> + <param> + <key>tr_chan</key> + <value>0</value> + </param> + <param> + <key>tr_tag</key> + <value>""</value> + </param> + <param> <key>label1</key> <value></value> </param> @@ -1367,30 +1503,65 @@ </param> </block> <block> - <key>gsm_receiver</key> + <key>gsm_input</key> <param> <key>id</key> - <value>gsm_receiver_0</value> + <value>gsm_input_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>ppm</key> + <value>0</value> + </param> + <param> + <key>fc</key> + <value>fc</value> + </param> + <param> <key>osr</key> <value>4</value> </param> <param> - <key>cell_allocation</key> - <value>[0]</value> + <key>samp_rate_in</key> + <value>samp_rate</value> </param> <param> - <key>tseq_nums</key> - <value>[]</value> + <key>alias</key> + <value></value> </param> <param> - <key>num_streams</key> - <value>1</value> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(253, 289)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>gsm_control_channels_decoder</key> + <param> + <key>id</key> + <value>gsm_control_channels_decoder_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>alias</key> @@ -1410,7 +1581,7 @@ </param> <param> <key>_coordinate</key> - <value>(434, 272)</value> + <value>(916, 272)</value> </param> <param> <key>_rotation</key> @@ -1418,30 +1589,73 @@ </param> </block> <block> - <key>gsm_input</key> + <key>gsm_universal_ctrl_chans_demapper</key> <param> <key>id</key> - <value>gsm_input_0</value> + <value>gsm_universal_ctrl_chans_demapper_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>ppm</key> + <key>starts_fn_mod51</key> + <value>[2,6,12,16,22,26,32,36,42,46]</value> + </param> + <param> + <key>channel_types</key> + <value>[BCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH]</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> <value>0</value> </param> <param> - <key>fc</key> - <value>fc</value> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(648, 272)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>gsm_receiver</key> + <param> + <key>id</key> + <value>gsm_receiver_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>osr</key> <value>4</value> </param> <param> - <key>samp_rate_in</key> - <value>samp_rate</value> + <key>cell_allocation</key> + <value>[0]</value> + </param> + <param> + <key>tseq_nums</key> + <value>[]</value> + </param> + <param> + <key>num_streams</key> + <value>1</value> </param> <param> <key>alias</key> @@ -1461,7 +1675,7 @@ </param> <param> <key>_coordinate</key> - <value>(253, 289)</value> + <value>(434, 272)</value> </param> <param> <key>_rotation</key> @@ -1475,12 +1689,6 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gsm_get_bcch_or_ccch_bursts_0</source_block_id> - <sink_block_id>gsm_control_channels_decoder_0</sink_block_id> - <source_key>bursts</source_key> - <sink_key>bursts</sink_key> - </connection> - <connection> <source_block_id>gsm_control_channels_decoder_0</source_block_id> <sink_block_id>gsm_message_printer_0</sink_block_id> <source_key>msgs</source_key> @@ -1493,12 +1701,6 @@ <sink_key>pdus</sink_key> </connection> <connection> - <source_block_id>gsm_receiver_0</source_block_id> - <sink_block_id>gsm_get_bcch_or_ccch_bursts_0</sink_block_id> - <source_key>C0</source_key> - <sink_key>bursts</sink_key> - </connection> - <connection> <source_block_id>uhd_usrp_source_0</source_block_id> <sink_block_id>gsm_input_0</sink_block_id> <source_key>0</source_key> @@ -1510,4 +1712,16 @@ <source_key>0</source_key> <sink_key>0</sink_key> </connection> + <connection> + <source_block_id>gsm_universal_ctrl_chans_demapper_0</source_block_id> + <sink_block_id>gsm_control_channels_decoder_0</sink_block_id> + <source_key>bursts</source_key> + <sink_key>bursts</sink_key> + </connection> + <connection> + <source_block_id>gsm_receiver_0</source_block_id> + <sink_block_id>gsm_universal_ctrl_chans_demapper_0</sink_block_id> + <source_key>C0</source_key> + <sink_key>bursts</sink_key> + </connection> </flow_graph> diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt index ef06807..d1628cc 100644 --- a/grc/CMakeLists.txt +++ b/grc/CMakeLists.txt @@ -25,6 +25,7 @@ install(FILES receiver/gsm_sch_detector.xml receiver/gsm_fcch_detector.xml demapping/gsm_get_bcch_or_ccch_bursts.xml + demapping/gsm_universal_ctrl_chans_demapper.xml decoding/gsm_control_channels_decoder.xml misc_utils/gsm_extract_system_info.xml misc_utils/gsm_controlled_rotator_cc.xml diff --git a/grc/demapping/gsm_universal_ctrl_chans_demapper.xml b/grc/demapping/gsm_universal_ctrl_chans_demapper.xml new file mode 100644 index 0000000..48b0f83 --- /dev/null +++ b/grc/demapping/gsm_universal_ctrl_chans_demapper.xml @@ -0,0 +1,32 @@ +<?xml version="1.0"?> +<block> + <name>Universal ctrl chans demapper</name> + <key>gsm_universal_ctrl_chans_demapper</key> + <import>import gsm</import> + <make>gsm.universal_ctrl_chans_demapper($starts_fn_mod51, $channel_types)</make> + + <param> + <name>starts_fn_mod51</name> + <key>starts_fn_mod51</key> + <value>[2,6,12,16,22,26,32,36,42,46]</value> + <type>int_vector</type> + <hide>part</hide> + </param> + + <param> + <name>channel_types</name> + <key>channel_types</key> + <value>[1,2,2,2,2,2,2,2,2,2]</value> + <type>int_vector</type> + <hide>part</hide> + </param> + + <sink> + <name>bursts</name> + <type>message</type> + </sink> + <source> + <name>bursts</name> + <type>message</type> + </source> +</block> diff --git a/grc/gsm_block_tree.xml b/grc/gsm_block_tree.xml index 789932a..df463b2 100644 --- a/grc/gsm_block_tree.xml +++ b/grc/gsm_block_tree.xml @@ -22,6 +22,7 @@ <cat> <name>Logical channels demapping</name> <block>gsm_get_bcch_or_ccch_bursts</block> + <block>gsm_universal_ctrl_chans_demapper</block> </cat> <cat> <name>Decoding</name> diff --git a/include/gsm/demapping/CMakeLists.txt b/include/gsm/demapping/CMakeLists.txt index bbbbc21..11fa6e5 100644 --- a/include/gsm/demapping/CMakeLists.txt +++ b/include/gsm/demapping/CMakeLists.txt @@ -21,5 +21,6 @@ # Install public header files ######################################################################## install(FILES + universal_ctrl_chans_demapper.h get_bcch_or_ccch_bursts.h DESTINATION include/gsm/demapping ) diff --git a/include/gsm/demapping/universal_ctrl_chans_demapper.h b/include/gsm/demapping/universal_ctrl_chans_demapper.h new file mode 100644 index 0000000..8e8abb5 --- /dev/null +++ b/include/gsm/demapping/universal_ctrl_chans_demapper.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2014 <+YOU OR YOUR COMPANY+>. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + + +#ifndef INCLUDED_GSM_UNIVERSAL_CTRL_CHANS_DEMAPPER_H +#define INCLUDED_GSM_UNIVERSAL_CTRL_CHANS_DEMAPPER_H + +#include <gsm/api.h> +#include <gnuradio/block.h> + +namespace gr { + namespace gsm { + + /*! + * \brief <+description of block+> + * \ingroup gsm + * + */ + class GSM_API universal_ctrl_chans_demapper : virtual public gr::block + { + public: + typedef boost::shared_ptr<universal_ctrl_chans_demapper> sptr; + + /*! + * \brief Return a shared_ptr to a new instance of gsm::universal_ctrl_chans_demapper. + * + * To avoid accidental use of raw pointers, gsm::universal_ctrl_chans_demapper's + * constructor is in a private implementation + * class. gsm::universal_ctrl_chans_demapper::make is the public interface for + * creating new instances. + */ + static sptr make(const std::vector<int> &starts_fn_mod51, const std::vector<int> &channel_types); + }; + + } // namespace gsm +} // namespace gr + +#endif /* INCLUDED_GSM_UNIVERSAL_CTRL_CHANS_DEMAPPER_H */ + diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index e4ed842..f420820 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -31,6 +31,7 @@ list(APPEND gsm_sources receiver/sch.c misc_utils/bursts_printer_impl.cc misc_utils/extract_system_info_impl.cc + demapping/universal_ctrl_chans_demapper_impl.cc demapping/get_bcch_or_ccch_bursts_impl.cc decoding/control_channels_decoder_impl.cc decoding/cch.c diff --git a/lib/demapping/universal_ctrl_chans_demapper_impl.cc b/lib/demapping/universal_ctrl_chans_demapper_impl.cc new file mode 100644 index 0000000..ea9a06e --- /dev/null +++ b/lib/demapping/universal_ctrl_chans_demapper_impl.cc @@ -0,0 +1,135 @@ +/* -*- c++ -*- */ +/* + * Copyright 2014 <+YOU OR YOUR COMPANY+>. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <gnuradio/io_signature.h> +#include "universal_ctrl_chans_demapper_impl.h" +#include <gsm/gsmtap.h> + +namespace gr { + namespace gsm { + + universal_ctrl_chans_demapper::sptr + universal_ctrl_chans_demapper::make(const std::vector<int> &starts_fn_mod51, const std::vector<int> &channel_types) + { + return gnuradio::get_initial_sptr + (new universal_ctrl_chans_demapper_impl(starts_fn_mod51, channel_types)); + } + + /* + * The private constructor + */ + universal_ctrl_chans_demapper_impl::universal_ctrl_chans_demapper_impl(const std::vector<int> &starts_fn_mod51, const std::vector<int> &channel_types) + : gr::block("universal_ctrl_chans_demapper", + gr::io_signature::make(0, 0, 0), + gr::io_signature::make(0, 0, 0)) + { + + d_timeslot=0; + for(int ii=0; ii<51; ii++) + { + d_starts_fn_mod51[ii]=0; + d_channel_types[ii]=0; + } + + std::vector<int>::const_iterator s; + std::vector<int>::const_iterator ch_type; + + for(s=starts_fn_mod51.begin(), ch_type=channel_types.begin();s != starts_fn_mod51.end(); s++) + { + if((*s > 0) and (*s < (51-4))) + { + for(int ii=0; ii<4; ii++){ + d_starts_fn_mod51[*s+ii] = *s; + if(ch_type!=channel_types.end()) + { + d_channel_types[*s+ii] = *ch_type; + } + } + if(ch_type!=channel_types.end()) + { + ch_type++; + } + } + } + + + message_port_register_in(pmt::mp("bursts")); + set_msg_handler(pmt::mp("bursts"), boost::bind(&universal_ctrl_chans_demapper_impl::filter_ctrl_chans, this, _1)); + message_port_register_out(pmt::mp("bursts")); + } + + /* + * Our virtual destructor. + */ + universal_ctrl_chans_demapper_impl::~universal_ctrl_chans_demapper_impl() + { + } + + void universal_ctrl_chans_demapper_impl::filter_ctrl_chans(pmt::pmt_t msg) + { + pmt::pmt_t header_blob = pmt::car(msg); + pmt::pmt_t content = pmt::cdr(msg); + gsmtap_hdr * header = (gsmtap_hdr *)pmt::blob_data(header_blob); + uint32_t frame_nr = be32toh(header->frame_number); + + uint32_t fn_mod51 = frame_nr % 51; + uint32_t fn51_start = d_starts_fn_mod51[fn_mod51]; + uint32_t fn51_stop = fn51_start + 3; + uint32_t ch_type = d_channel_types[fn_mod51]; + header->sub_type = ch_type; + + if(header->timeslot==d_timeslot){ + if(fn_mod51>=fn51_start && fn_mod51<=fn51_stop) + { + uint32_t ii = fn_mod51 - fn51_start; + d_frame_numbers[ii] = frame_nr; + d_bursts[ii] = msg; + } + + if(fn_mod51==fn51_stop) + { + //check for a situation where some bursts were lost + //in this situation frame numbers won't be consecutive + bool frames_are_consecutive = true; + for(int jj=1; jj<4; jj++) + { + if((d_frame_numbers[jj]-d_frame_numbers[jj-1])!=1) + { + frames_are_consecutive = false; + } + } + if(frames_are_consecutive) + { + //send bursts to the output + for(int jj=0; jj<4; jj++) + { + message_port_pub(pmt::mp("bursts"), d_bursts[jj]); + } + } + } + } + } + } /* namespace gsm */ +} /* namespace gr */ + diff --git a/lib/demapping/universal_ctrl_chans_demapper_impl.h b/lib/demapping/universal_ctrl_chans_demapper_impl.h new file mode 100644 index 0000000..472b321 --- /dev/null +++ b/lib/demapping/universal_ctrl_chans_demapper_impl.h @@ -0,0 +1,48 @@ +/* -*- c++ -*- */ +/* + * Copyright 2014 <+YOU OR YOUR COMPANY+>. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef INCLUDED_GSM_UNIVERSAL_CTRL_CHANS_DEMAPPER_IMPL_H +#define INCLUDED_GSM_UNIVERSAL_CTRL_CHANS_DEMAPPER_IMPL_H + +#include <gsm/demapping/universal_ctrl_chans_demapper.h> + +namespace gr { + namespace gsm { + + class universal_ctrl_chans_demapper_impl : public universal_ctrl_chans_demapper + { + private: + unsigned int d_starts_fn_mod51[51]; + unsigned int d_channel_types[51]; + unsigned int d_timeslot; + uint32_t d_frame_numbers[4]; + pmt::pmt_t d_bursts[4]; + public: + universal_ctrl_chans_demapper_impl(const std::vector<int> &starts_fn_mod51, const std::vector<int> &channel_types); + ~universal_ctrl_chans_demapper_impl(); + + void filter_ctrl_chans(pmt::pmt_t msg); + }; + + } // namespace gsm +} // namespace gr + +#endif /* INCLUDED_GSM_UNIVERSAL_CTRL_CHANS_DEMAPPER_IMPL_H */ + diff --git a/swig/gsm_swig.i b/swig/gsm_swig.i index 41acaf6..5f3dcb7 100644 --- a/swig/gsm_swig.i +++ b/swig/gsm_swig.i @@ -10,6 +10,7 @@ %{ #include "gsm/receiver/receiver.h" #include "gsm/demapping/get_bcch_or_ccch_bursts.h" +#include "gsm/demapping/universal_ctrl_chans_demapper.h" #include "gsm/decoding/control_channels_decoder.h" #include "gsm/misc_utils/bursts_printer.h" #include "gsm/misc_utils/controlled_const_source_f.h" @@ -27,6 +28,8 @@ GR_SWIG_BLOCK_MAGIC2(gsm, control_channels_decoder); %include "gsm/demapping/get_bcch_or_ccch_bursts.h" GR_SWIG_BLOCK_MAGIC2(gsm, get_bcch_or_ccch_bursts); +%include "gsm/demapping/universal_ctrl_chans_demapper.h" +GR_SWIG_BLOCK_MAGIC2(gsm, universal_ctrl_chans_demapper); %include "gsm/misc_utils/bursts_printer.h" GR_SWIG_BLOCK_MAGIC2(gsm, bursts_printer); |