Browse Source

fixed pmt.is_dict in max_freq

correctly decode block 2 grouptype info in redsea decoder (error correction still not working correctly :( )
dev
Clemens Richter 9 years ago
parent
commit
8762aba6f3
  1. 300
      apps/fft-multi-decoder_auto_freqs_slider-update.grc
  2. 54
      lib/rds_decoder_redsea_impl.cc
  3. 4
      lib/rds_decoder_redsea_impl.h
  4. 11
      python/max_freq.py
  5. 2
      python/rds_parser_table_qt.py

300
apps/fft-multi-decoder_auto_freqs_slider-update.grc

@ -1382,7 +1382,7 @@
</param>
<param>
<key>label</key>
<value></value>
<value>volumeLR</value>
</param>
<param>
<key>min_len</key>
@ -1445,7 +1445,7 @@
</param>
<param>
<key>label</key>
<value></value>
<value>volumeC</value>
</param>
<param>
<key>min_len</key>
@ -1496,7 +1496,7 @@
</param>
<param>
<key>_coordinate</key>
<value>(1333, 27)</value>
<value>(1637, 1385)</value>
</param>
<param>
<key>_rotation</key>
@ -1504,7 +1504,7 @@
</param>
<param>
<key>id</key>
<value>analog_fm_deemph_0_0</value>
<value>analog_fm_deemph_0_0_0_0_0</value>
</param>
<param>
<key>maxoutbuf</key>
@ -1543,7 +1543,7 @@
</param>
<param>
<key>_coordinate</key>
<value>(1333, 83)</value>
<value>(1637, 1441)</value>
</param>
<param>
<key>_rotation</key>
@ -1551,7 +1551,7 @@
</param>
<param>
<key>id</key>
<value>analog_fm_deemph_0_0_0</value>
<value>analog_fm_deemph_0_0_0_1</value>
</param>
<param>
<key>maxoutbuf</key>
@ -1590,7 +1590,7 @@
</param>
<param>
<key>_coordinate</key>
<value>(1333, 139)</value>
<value>(1637, 1329)</value>
</param>
<param>
<key>_rotation</key>
@ -1598,7 +1598,7 @@
</param>
<param>
<key>id</key>
<value>analog_fm_deemph_0_0_0_0</value>
<value>analog_fm_deemph_0_0_1</value>
</param>
<param>
<key>maxoutbuf</key>
@ -1641,7 +1641,7 @@
</param>
<param>
<key>_coordinate</key>
<value>(1837, 39)</value>
<value>(2140, 1349)</value>
</param>
<param>
<key>_rotation</key>
@ -1649,7 +1649,7 @@
</param>
<param>
<key>id</key>
<value>audio_sink_0</value>
<value>audio_sink_0_0</value>
</param>
<param>
<key>num_inputs</key>
@ -1684,7 +1684,7 @@
</param>
<param>
<key>_coordinate</key>
<value>(1725, 87)</value>
<value>(2028, 1333)</value>
</param>
<param>
<key>_rotation</key>
@ -1692,7 +1692,7 @@
</param>
<param>
<key>id</key>
<value>blocks_add_xx_0</value>
<value>blocks_add_xx_0_0_0</value>
</param>
<param>
<key>type</key>
@ -1735,7 +1735,7 @@
</param>
<param>
<key>_coordinate</key>
<value>(1701, 15)</value>
<value>(2028, 1397)</value>
</param>
<param>
<key>_rotation</key>
@ -1743,7 +1743,7 @@
</param>
<param>
<key>id</key>
<value>blocks_add_xx_0_0</value>
<value>blocks_add_xx_0_1</value>
</param>
<param>
<key>type</key>
@ -1934,7 +1934,7 @@
</param>
<param>
<key>const</key>
<value>volume</value>
<value>volume2/2</value>
</param>
<param>
<key>affinity</key>
@ -1946,7 +1946,7 @@
</param>
<param>
<key>_coordinate</key>
<value>(1493, 35)</value>
<value>(1821, 1401)</value>
</param>
<param>
<key>_rotation</key>
@ -1954,7 +1954,7 @@
</param>
<param>
<key>id</key>
<value>blocks_multiply_const_vxx_0</value>
<value>blocks_multiply_const_vxx_0_0_0_0</value>
</param>
<param>
<key>type</key>
@ -1997,7 +1997,7 @@
</param>
<param>
<key>_coordinate</key>
<value>(1517, 99)</value>
<value>(1821, 1449)</value>
</param>
<param>
<key>_rotation</key>
@ -2005,7 +2005,7 @@
</param>
<param>
<key>id</key>
<value>blocks_multiply_const_vxx_0_0</value>
<value>blocks_multiply_const_vxx_0_0_1</value>
</param>
<param>
<key>type</key>
@ -2036,7 +2036,7 @@
</param>
<param>
<key>const</key>
<value>volume2/2</value>
<value>volume</value>
</param>
<param>
<key>affinity</key>
@ -2048,7 +2048,7 @@
</param>
<param>
<key>_coordinate</key>
<value>(1517, 155)</value>
<value>(1821, 1337)</value>
</param>
<param>
<key>_rotation</key>
@ -2056,7 +2056,7 @@
</param>
<param>
<key>id</key>
<value>blocks_multiply_const_vxx_0_0_0</value>
<value>blocks_multiply_const_vxx_0_1</value>
</param>
<param>
<key>type</key>
@ -2320,7 +2320,7 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
</param>
<param>
<key>_coordinate</key>
<value>(1094, 67)</value>
<value>(1397, 1385)</value>
</param>
<param>
<key>_rotation</key>
@ -2328,7 +2328,7 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
</param>
<param>
<key>id</key>
<value>fir_filter_xxx_0_0</value>
<value>fir_filter_xxx_0_0_0_0_0</value>
</param>
<param>
<key>maxoutbuf</key>
@ -2375,7 +2375,7 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
</param>
<param>
<key>_coordinate</key>
<value>(1094, 123)</value>
<value>(1397, 1441)</value>
</param>
<param>
<key>_rotation</key>
@ -2383,7 +2383,7 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
</param>
<param>
<key>id</key>
<value>fir_filter_xxx_0_0_0</value>
<value>fir_filter_xxx_0_0_0_1</value>
</param>
<param>
<key>maxoutbuf</key>
@ -2430,7 +2430,7 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
</param>
<param>
<key>_coordinate</key>
<value>(1094, 179)</value>
<value>(1397, 1329)</value>
</param>
<param>
<key>_rotation</key>
@ -2438,7 +2438,7 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
</param>
<param>
<key>id</key>
<value>fir_filter_xxx_0_0_0_0</value>
<value>fir_filter_xxx_0_0_1</value>
</param>
<param>
<key>maxoutbuf</key>
@ -3064,41 +3064,6 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
<value>samp_rate</value>
</param>
</block>
<block>
<key>multirds_decoder_compare</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>0</value>
</param>
<param>
<key>_coordinate</key>
<value>(1757, 231)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>multirds_decoder_compare_0</value>
</param>
<param>
<key>nPorts</key>
<value>6</value>
</param>
</block>
<block>
<key>multirds_max_freq</key>
<param>
@ -3233,6 +3198,57 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
<value>True</value>
</param>
</block>
<block>
<key>multirds_stream_router</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(1198, 1254)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>multirds_stream_router_0</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>ninputs</key>
<value>9</value>
</param>
<param>
<key>noutputs</key>
<value>3</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
</block>
<block>
<key>multirds_tmc_parser</key>
<param>
@ -6809,34 +6825,34 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
</param>
</block>
<connection>
<source_block_id>analog_fm_deemph_0_0</source_block_id>
<sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
<source_block_id>analog_fm_deemph_0_0_0_0_0</source_block_id>
<sink_block_id>blocks_multiply_const_vxx_0_0_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>analog_fm_deemph_0_0_0</source_block_id>
<sink_block_id>blocks_multiply_const_vxx_0_0</sink_block_id>
<source_block_id>analog_fm_deemph_0_0_0_1</source_block_id>
<sink_block_id>blocks_multiply_const_vxx_0_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>analog_fm_deemph_0_0_0_0</source_block_id>
<sink_block_id>blocks_multiply_const_vxx_0_0_0</sink_block_id>
<source_block_id>analog_fm_deemph_0_0_1</source_block_id>
<sink_block_id>blocks_multiply_const_vxx_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_add_xx_0</source_block_id>
<sink_block_id>audio_sink_0</sink_block_id>
<source_block_id>blocks_add_xx_0_0_0</source_block_id>
<sink_block_id>audio_sink_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>1</sink_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_add_xx_0_0</source_block_id>
<sink_block_id>audio_sink_0</sink_block_id>
<source_block_id>blocks_add_xx_0_1</source_block_id>
<sink_block_id>audio_sink_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
<sink_key>1</sink_key>
</connection>
<connection>
<source_block_id>blocks_complex_to_mag_squared_0</source_block_id>
@ -6851,29 +6867,29 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_multiply_const_vxx_0</source_block_id>
<sink_block_id>blocks_add_xx_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_multiply_const_vxx_0_0</source_block_id>
<sink_block_id>blocks_add_xx_0</sink_block_id>
<source_block_id>blocks_multiply_const_vxx_0_0_0_0</source_block_id>
<sink_block_id>blocks_add_xx_0_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>1</sink_key>
</connection>
<connection>
<source_block_id>blocks_multiply_const_vxx_0_0_0</source_block_id>
<sink_block_id>blocks_add_xx_0</sink_block_id>
<source_block_id>blocks_multiply_const_vxx_0_0_0_0</source_block_id>
<sink_block_id>blocks_add_xx_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_multiply_const_vxx_0_0_0</source_block_id>
<sink_block_id>blocks_add_xx_0_0</sink_block_id>
<source_block_id>blocks_multiply_const_vxx_0_0_1</source_block_id>
<sink_block_id>blocks_add_xx_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>1</sink_key>
</connection>
<connection>
<source_block_id>blocks_multiply_const_vxx_0_1</source_block_id>
<sink_block_id>blocks_add_xx_0_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_stream_to_vector_0</source_block_id>
<sink_block_id>fft_vxx_0</sink_block_id>
@ -6947,26 +6963,26 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>fir_filter_xxx_0_0</source_block_id>
<sink_block_id>analog_fm_deemph_0_0</sink_block_id>
<source_block_id>fir_filter_xxx_0_0_0_0_0</source_block_id>
<sink_block_id>analog_fm_deemph_0_0_0_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>fir_filter_xxx_0_0_0</source_block_id>
<sink_block_id>analog_fm_deemph_0_0_0</sink_block_id>
<source_block_id>fir_filter_xxx_0_0_0_1</source_block_id>
<sink_block_id>analog_fm_deemph_0_0_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>fir_filter_xxx_0_0_0_0</source_block_id>
<sink_block_id>analog_fm_deemph_0_0_0_0</sink_block_id>
<source_block_id>fir_filter_xxx_0_0_1</source_block_id>
<sink_block_id>analog_fm_deemph_0_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0</source_block_id>
<sink_block_id>fir_filter_xxx_0_0</sink_block_id>
<sink_block_id>multirds_stream_router_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
@ -6988,12 +7004,6 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
<source_key>2</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0</source_block_id>
<sink_block_id>multirds_decoder_compare_0</sink_block_id>
<source_key>rds</source_key>
<sink_key>in0</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0</source_block_id>
<sink_block_id>multirds_rds_parser_table_qt_0_0</sink_block_id>
@ -7002,9 +7012,9 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_0</source_block_id>
<sink_block_id>fir_filter_xxx_0_0_0</sink_block_id>
<sink_block_id>multirds_stream_router_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
<sink_key>1</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_0</source_block_id>
@ -7024,12 +7034,6 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
<source_key>2</source_key>
<sink_key>1</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_0</source_block_id>
<sink_block_id>multirds_decoder_compare_0</sink_block_id>
<source_key>rds</source_key>
<sink_key>in1</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_0</source_block_id>
<sink_block_id>multirds_rds_parser_table_qt_0_0</sink_block_id>
@ -7038,9 +7042,9 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1</source_block_id>
<sink_block_id>fir_filter_xxx_0_0_0_0</sink_block_id>
<sink_block_id>multirds_stream_router_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
<sink_key>2</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1</source_block_id>
@ -7062,15 +7066,15 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1</source_block_id>
<sink_block_id>multirds_decoder_compare_0</sink_block_id>
<sink_block_id>multirds_rds_parser_table_qt_0_0</sink_block_id>
<source_key>rds</source_key>
<sink_key>in2</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1</source_block_id>
<sink_block_id>multirds_rds_parser_table_qt_0_0</sink_block_id>
<source_key>rds</source_key>
<sink_key>in2</sink_key>
<source_block_id>hier_ifft_decoder_0_1_0</source_block_id>
<sink_block_id>multirds_stream_router_0</sink_block_id>
<source_key>0</source_key>
<sink_key>3</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1_0</source_block_id>
@ -7092,15 +7096,15 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1_0</source_block_id>
<sink_block_id>multirds_decoder_compare_0</sink_block_id>
<sink_block_id>multirds_rds_parser_table_qt_0_0</sink_block_id>
<source_key>rds</source_key>
<sink_key>in3</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1_0</source_block_id>
<sink_block_id>multirds_rds_parser_table_qt_0_0</sink_block_id>
<source_key>rds</source_key>
<sink_key>in3</sink_key>
<source_block_id>hier_ifft_decoder_0_1_1</source_block_id>
<sink_block_id>multirds_stream_router_0</sink_block_id>
<source_key>0</source_key>
<sink_key>4</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1_1</source_block_id>
@ -7122,15 +7126,15 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1_1</source_block_id>
<sink_block_id>multirds_decoder_compare_0</sink_block_id>
<sink_block_id>multirds_rds_parser_table_qt_0_0</sink_block_id>
<source_key>rds</source_key>
<sink_key>in4</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1_1</source_block_id>
<sink_block_id>multirds_rds_parser_table_qt_0_0</sink_block_id>
<source_key>rds</source_key>
<sink_key>in4</sink_key>
<source_block_id>hier_ifft_decoder_0_1_2</source_block_id>
<sink_block_id>multirds_stream_router_0</sink_block_id>
<source_key>0</source_key>
<sink_key>5</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1_2</source_block_id>
@ -7152,15 +7156,15 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1_2</source_block_id>
<sink_block_id>multirds_decoder_compare_0</sink_block_id>
<sink_block_id>multirds_rds_parser_table_qt_0_0</sink_block_id>
<source_key>rds</source_key>
<sink_key>in5</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1_2</source_block_id>
<sink_block_id>multirds_rds_parser_table_qt_0_0</sink_block_id>
<source_key>rds</source_key>
<sink_key>in5</sink_key>
<source_block_id>hier_ifft_decoder_0_1_2_0</source_block_id>
<sink_block_id>multirds_stream_router_0</sink_block_id>
<source_key>0</source_key>
<sink_key>6</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1_2_0</source_block_id>
@ -7168,12 +7172,24 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
<source_key>rds</source_key>
<sink_key>in6</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1_2_0_0</source_block_id>
<sink_block_id>multirds_stream_router_0</sink_block_id>
<source_key>0</source_key>
<sink_key>7</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1_2_0_0</source_block_id>
<sink_block_id>multirds_rds_parser_table_qt_0_0</sink_block_id>
<source_key>rds</source_key>
<sink_key>in7</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1_2_0_0_0</source_block_id>
<sink_block_id>multirds_stream_router_0</sink_block_id>
<source_key>0</source_key>
<sink_key>8</sink_key>
</connection>
<connection>
<source_block_id>hier_ifft_decoder_0_1_2_0_0_0</source_block_id>
<sink_block_id>multirds_rds_parser_table_qt_0_0</sink_block_id>
@ -7246,12 +7262,36 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
<source_key>ctrl</source_key>
<sink_key>ctrl</sink_key>
</connection>
<connection>
<source_block_id>multirds_rds_parser_table_qt_0_0</source_block_id>
<sink_block_id>multirds_stream_router_0</sink_block_id>
<source_key>ctrl</source_key>
<sink_key>ctrl</sink_key>
</connection>
<connection>
<source_block_id>multirds_rds_parser_table_qt_0_0</source_block_id>
<sink_block_id>multirds_tmc_parser_0</sink_block_id>
<source_key>tmc_raw</source_key>
<sink_key>in</sink_key>
</connection>
<connection>
<source_block_id>multirds_stream_router_0</source_block_id>
<sink_block_id>fir_filter_xxx_0_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>multirds_stream_router_0</source_block_id>
<sink_block_id>fir_filter_xxx_0_0_0_0_0</sink_block_id>
<source_key>1</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>multirds_stream_router_0</source_block_id>
<sink_block_id>fir_filter_xxx_0_0_0_1</sink_block_id>
<source_key>2</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>osmosdr_source_0</source_block_id>
<sink_block_id>blocks_stream_to_vector_0</sink_block_id>

54
lib/rds_decoder_redsea_impl.cc

@ -205,7 +205,7 @@ int rds_decoder_redsea_impl::work (int noutput_items,
uint16_t block_calculated_crc, block_received_crc, checkword,dataword;
uint16_t reg_syndrome;
uint8_t offset_char('x'); // x = error while decoding the word offset
uint8_t variant;
/* the synchronization process is described in Annex C, page 66 of the standard */
while (i<noutput_items) {
@ -241,6 +241,7 @@ int rds_decoder_redsea_impl::work (int noutput_items,
if (block_bit_counter<25) block_bit_counter++;
else {
good_block=false;
block_was_corrected=false;
dataword=(reg>>10) & 0xffff;//data part of received block (upper 16 bits)
block_calculated_crc=calc_syndrome(dataword,16);
@ -262,6 +263,8 @@ int rds_decoder_redsea_impl::work (int noutput_items,
uint32_t corrected_block= correctBurstErrors(reg,offset_char);
if(corrected_block != reg){
good_block=true;
block_was_corrected=true;
group_corrected_blocks_counter++;
dataword=(corrected_block>>10) & 0xffff;
checkword=corrected_block & 0x3ff;
//dout << "corrected error"<<std::endl;
@ -271,34 +274,6 @@ int rds_decoder_redsea_impl::work (int noutput_items,
}
}
/*block_received_crc=checkword^offset_word[block_number];
if (block_received_crc==block_calculated_crc) {
good_block=true;
offset_char = 'C';
} else {
//try correcting:
//uint32_t corrected_block= correctBurstErrors(reg,'C');
uint32_t corrected_block = reg;//2017-04-24 disabled correction for third block
//-> errors if corrected with wrong offset
if(corrected_block != reg){
good_block=true;
dataword=(corrected_block>>10) & 0xffff;
checkword=corrected_block & 0x3ff;
offset_char = 'C';
//dout << "corrected error"<<std::endl;
}
else{
block_received_crc=checkword^offset_word[4];
if (block_received_crc==block_calculated_crc) {
good_block=true;
offset_char = 'c'; // C' (C-Tag)
} else {
wrong_blocks_counter++;
good_block=false;
}
}
}*/
}
else {
block_received_crc=checkword^offset_word[block_number];
@ -313,13 +288,15 @@ int rds_decoder_redsea_impl::work (int noutput_items,
uint32_t corrected_block= correctBurstErrors(reg,expected_offset_char[block_number]);
if(corrected_block != reg) {//syndrome found in table == correction worked
good_block=true;
block_was_corrected=true;
group_corrected_blocks_counter++;
dataword=(corrected_block>>10) & 0xffff;
checkword=corrected_block & 0x3ff;
//dout << "corrected error"<<std::endl;
//dout << "old: rx:"<<block_received_crc<<"\tcalc:"<<block_calculated_crc<<std::endl;
//block_received_crc=checkword^offset_word[block_number];
//block_calculated_crc=calc_syndrome(dataword,16);
//dout << "new: rx:"<<block_received_crc<<"\tcalc:"<<block_calculated_crc<<std::endl;
//dout << "corrected error"<<std::endl;
//dout << "old: rx:"<<block_received_crc<<"\tcalc:"<<block_calculated_crc<<std::endl;
//block_received_crc=checkword^offset_word[block_number];
//block_calculated_crc=calc_syndrome(dataword,16);
//dout << "new: rx:"<<block_received_crc<<"\tcalc:"<<block_calculated_crc<<std::endl;
offset_char=expected_offset_char[block_number];
}
else{
@ -332,10 +309,17 @@ int rds_decoder_redsea_impl::work (int noutput_items,
/* done checking CRC */
if (block_number==0 && good_block) {
group_assembly_started=true;
//group_corrected_blocks_counter=block_was_corrected;
group_corrected_blocks_counter=0;
group_good_blocks_counter=1;
}
if (block_number==1 && good_block) {//2nd block - > read group type variant
variant=(dataword>>12)& 0x1;
variant=(dataword>>11)& 0x1;
// uint8_t group=(dataword>>12)& 0xf;
// dout << "group:"<< unsigned(group);
// dout << "\tvariant:" << unsigned(variant);
// dout << "\twas_corrected: "<<block_was_corrected<< std::endl;
}
if (group_assembly_started) {
if (!good_block) group_assembly_started=false;

4
lib/rds_decoder_redsea_impl.h

@ -55,7 +55,11 @@ private:
bool log;
bool presync;
bool good_block;
bool block_was_corrected;
uint8_t group_corrected_blocks_counter;
bool group_assembly_started;
uint8_t variant;
uint8_t last_wrong_blocks_counter;
uint8_t lastseen_offset;
uint8_t block_number;

11
python/max_freq.py

@ -57,7 +57,8 @@ class max_freq(gr.sync_block):
return freq
def handle_ctrl_msg(self,msg):
if pmt.is_dict(msg):
#if pmt.is_dict(msg):#check doesnt work, since pairs pass is_dict
try:
m = pmt.pmt_to_python.pmt_to_dict(msg)
if m.has_key("cmd") and m["cmd"]=="set_audio_freq":
#print(m)
@ -80,9 +81,11 @@ class max_freq(gr.sync_block):
self.index_fixed[1]=True
print("decoder 1 fixed to %i"%m["freq"])
#print(self.last_station_indices)
if m.has_key("cmd") and m["cmd"]=="switch mode":
self.searchMode=not self.searchMode
print("searchMode: %s"%self.searchMode)
if m.has_key("cmd") and m["cmd"]=="switch mode":
self.searchMode=not self.searchMode
print("searchMode: %s"%self.searchMode)
except RuntimeError:
pass#message was pair
def set_center_freq(self, freq=None):
self.index_fixed=[False]*self.num_decoders#free all decoders (freq wouldn't match anyways)
if freq is not None:

2
python/rds_parser_table_qt.py

@ -546,7 +546,7 @@ class rds_parser_table_qt(gr.sync_block):#START
text_list=['_']*64 #clear text
text_list[adr*4:adr*4+4]=segment
#reset stored text:
self.RDS_data[PI]["RT_"+str(ab_flag)]["RT"]="_"*64
#self.RDS_data[PI]["RT_"+str(ab_flag)]["RT"]="_"*64 #done in text_list
self.RDS_data[PI]["RT_"+str(ab_flag)]["RT_valid"]=[False]*64
#predict RT from last texts:
for rt in self.RDS_data[PI]["internals"]["RT_history"]:

Loading…
Cancel
Save