diff --git a/apps/fft-multi-decoder_fixed_hackrf.grc b/apps/fft-multi-decoder_fixed_hackrf.grc
index dbf98ff..de682fb 100644
--- a/apps/fft-multi-decoder_fixed_hackrf.grc
+++ b/apps/fft-multi-decoder_fixed_hackrf.grc
@@ -3244,7 +3244,7 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
_enabled
- 1
+ 0
_coordinate
diff --git a/apps/ifft-RDS-decoder_hier-block.grc b/apps/ifft-RDS-decoder_hier-block.grc
index 89b3354..d64d01f 100644
--- a/apps/ifft-RDS-decoder_hier-block.grc
+++ b/apps/ifft-RDS-decoder_hier-block.grc
@@ -3488,6 +3488,12 @@
out
in
+
+ multirds_sync_decim_0
+ pad_sink_0_0
+ ctrl
+ in
+
multirds_sync_decim_0
blocks_file_sink_0_0_0
diff --git a/apps/read_fmdec.grc b/apps/read_fmdec.grc
index ce172c0..0a6f2e0 100644
--- a/apps/read_fmdec.grc
+++ b/apps/read_fmdec.grc
@@ -2692,6 +2692,12 @@ class blk(gr.sync_block): # other base classes are basic_block, decim_block, in
tmc_raw
in
+
+ multirds_sync_decim_0
+ multirds_rds_parser_table_qt_0
+ ctrl
+ in
+
multirds_sync_decim_0
digital_binary_slicer_fb_0
diff --git a/grc/multirds_sync_decim.xml b/grc/multirds_sync_decim.xml
index fe71ca4..105540e 100644
--- a/grc/multirds_sync_decim.xml
+++ b/grc/multirds_sync_decim.xml
@@ -58,6 +58,11 @@
* type
* vlen
* optional (set to 1 for optional inputs) -->
+
+ ctrl
+ message
+ 1
+
out
float
diff --git a/lib/rds_decoder_redsea_impl.cc b/lib/rds_decoder_redsea_impl.cc
index 384da0a..8e4aaba 100644
--- a/lib/rds_decoder_redsea_impl.cc
+++ b/lib/rds_decoder_redsea_impl.cc
@@ -187,7 +187,7 @@ uint32_t rds_decoder_redsea_impl::correctBurstErrors(uint32_t block, char offset
if (kErrorLookup.count({syndrome, offset}) > 0) {
uint32_t err = kErrorLookup.at({syndrome, offset});
//dout << "correcting"<1000){
+ if(outbit_counter>4000){
outbit_counter=0;
weakout_counter=0;
lout<<"mode: "<=SYNC_COUNTER_MAX){
@@ -147,9 +154,17 @@ namespace gr {
}
if (skip_is_better_counter>3){//2017-05-02 lowered from 6
mode=SKIP;
+ pmt::pmt_t meta(pmt::from_long(4));
+ pmt::pmt_t data(pmt::from_long(mode));
+ pmt::pmt_t pdu(pmt::cons(meta, data)); // make PDU: (metadata, data) pair
+ message_port_pub(pmt::mp("ctrl"), pdu);
lout<<"switched to skip"<< std::endl;
}
else if (skip_is_better_counter<-3){
+ pmt::pmt_t meta(pmt::from_long(4));
+ pmt::pmt_t data(pmt::from_long(mode));
+ pmt::pmt_t pdu(pmt::cons(meta, data)); // make PDU: (metadata, data) pair
+ message_port_pub(pmt::mp("ctrl"), pdu);
mode=NOSKIP;
lout<<"switched to noskip"<< std::endl;
}
diff --git a/python/rds_parser_table_qt.py b/python/rds_parser_table_qt.py
index 4f44278..ec99247 100644
--- a/python/rds_parser_table_qt.py
+++ b/python/rds_parser_table_qt.py
@@ -90,7 +90,7 @@ class rds_parser_table_qt(gr.sync_block):#START
self.decoder_frequencies={}
self.decoders=[]
for i in range(nPorts):
- self.decoders.append({'synced':False,'freq':None,'PI':"",'pilot_SNR':0})
+ self.decoders.append({'synced':False,'freq':None,'PI':"",'pilot_SNR':0,'decim_mode':0})
#self.decoder_synced={}
#self.colorder=['ID','freq','name','PTY','AF','time','text','quality','buttons']
self.colorder=['ID','freq','name','buttons','PTY','AF','time','text','quality','pilot_SNR','RT+']
@@ -180,12 +180,13 @@ class rds_parser_table_qt(gr.sync_block):#START
for num in self.decoder_frequencies:
freq=self.decoder_frequencies[num]
pilot_SNR=self.decoders[num]['pilot_SNR']
+ decim_mode=self.decoders[num]['decim_mode']
if self.decoders[num]['synced']:
- message_string+=" %i:%0.1fM (%i dB)"% (num,freq/1e6,pilot_SNR)
+ message_string+=" %i:%0.1fM (%i dB, %i)"% (num,freq/1e6,pilot_SNR,decim_mode)
#print("'color:green'>%i:%0.1fM"% (num,freq/1e6))
else:#elif self.decoders[num]['synced']==False:
#print("'color:red'>%i:%0.1fM"% (num,freq/1e6))
- message_string+=" %i:%0.1fM (%i dB)"% (num,freq/1e6,pilot_SNR)
+ message_string+=" %i:%0.1fM (%i dB, %i)"% (num,freq/1e6,pilot_SNR,decim_mode)
message_string+="
tuned frequency:%0.1fM"%(self.tuning_frequency/1e6)
self.signals.DataUpdateEvent.emit({'decoder_frequencies':message_string})
#print(message_string)
@@ -239,7 +240,7 @@ class rds_parser_table_qt(gr.sync_block):#START
self.RDS_data[PI]["time"]={"timestring":"88:88","datestring":"00-00-0000","datetime":None}
self.RDS_data[PI]["wrong_block_ratio"]=1#100%
def handle_msg(self, msg, port):#port from 0 to 3
- if pmt.to_long(pmt.car(msg))==1L:
+ if pmt.to_long(pmt.car(msg))==1L:#sync/desync messages from RDS decoder
synced=pmt.to_python(pmt.cdr(msg))
#print("port:%i, data: %s"%(port,data))
self.decoders[port]['synced']=synced
@@ -250,7 +251,7 @@ class rds_parser_table_qt(gr.sync_block):#START
wrong_block_ratio=1#100%
self.RDS_data[PI]["wrong_block_ratio"]=wrong_block_ratio
self.signals.DataUpdateEvent.emit({'PI':PI,'wrong_block_ratio':wrong_block_ratio,'dots':dots})
- elif pmt.to_long(pmt.car(msg))==2L:
+ elif pmt.to_long(pmt.car(msg))==2L:#wrong_block_ratio messages from RDS decoder
wrong_block_ratio=pmt.to_python(pmt.cdr(msg))
PI=self.decoders[port]['PI']
if self.RDS_data.has_key(PI):
@@ -264,6 +265,10 @@ class rds_parser_table_qt(gr.sync_block):#START
PI=self.decoders[port]['PI']
if self.RDS_data.has_key(PI):
self.signals.DataUpdateEvent.emit({'PI':PI,'pilot_SNR':pilot_SNR})
+ elif pmt.to_long(pmt.car(msg))==4L:#mode messages from RDS sync_decim
+ mode=pmt.to_python(pmt.cdr(msg))
+ self.decoders[port]['decim_mode']=mode
+ self.update_freq()
else: #elif pmt.to_long(pmt.car(msg))==0L
array=pmt.to_python(msg)[1]