diff --git a/data/pty-list.csv b/data/pty-list.csv
index 944dba4..9ad622c 100644
--- a/data/pty-list.csv
+++ b/data/pty-list.csv
@@ -17,7 +17,7 @@ PTY code,RDS program type (EU),RBDS program type (North America)
15,Other music,Classical
16,Weather,Rhythm and blues
17,Finance,Soft rhythm and blues
-18,Children’s programmes,Language
+18,Children's programmes,Language
19,Social affairs,Religious music
20,Religion,Religious talk
21,Phone-in,Personality
diff --git a/lib/rds_decoder_redsea_impl.cc b/lib/rds_decoder_redsea_impl.cc
index fbc8e73..1aec52b 100644
--- a/lib/rds_decoder_redsea_impl.cc
+++ b/lib/rds_decoder_redsea_impl.cc
@@ -135,7 +135,8 @@ static const char * const offset_name[]={"A","B","C","D","c"};*/
// restricted by attempting to correct bursts of errors spanning one or two
// bits."
// Kopitz & Marks 1999: "RDS: The Radio Data System", p. 224
- for (uint32_t e=0x1;e <= 0x3;e+=0x2) {//for (uint32_t e : {0x1, 0x3}) {
+ //for (uint32_t e=0x1;e <= 0x3;e+=0x2) {//for (uint32_t e : {0x1, 0x3}) {
+ for (uint32_t e : {0x1, 0x3, 0x7,0x15,0x31}) {//0x1, 0x3, 0x7,0x15,0x31
for (int shift=0; shift < 26; shift++) {
uint32_t errvec = ((e << shift) & kBitmask26);
uint16_t sy = calc_syndrome(errvec ^ offset_word[offset_num],26);
@@ -316,9 +317,9 @@ int rds_decoder_redsea_impl::work (int noutput_items,
block_number=(block_number+1) % 4;
blocks_counter++;
/* 1187.5 bps / 104 bits = 11.4 groups/sec, or 45.7 blocks/sec */
- if (blocks_counter==30) {//reduced from 50
+ if (blocks_counter==40) {//reduced from 50
last_wrong_blocks_counter=wrong_blocks_counter;
- if (wrong_blocks_counter>21) {//reduced from 35
+ if (wrong_blocks_counter>28) {//reduced from 35
lout << "@@@@@ Lost Sync (Got " << wrong_blocks_counter
<< " bad blocks on " << blocks_counter
<< " total)" << std::endl;
diff --git a/python/rds_parser_table_qt.py b/python/rds_parser_table_qt.py
index dd3163c..a13f1fa 100644
--- a/python/rds_parser_table_qt.py
+++ b/python/rds_parser_table_qt.py
@@ -163,7 +163,7 @@ class rds_parser_table_qt(gr.sync_block):#START
f=open(self.workdir+'pty-list.csv')
reader = csv.reader(f, delimiter=',', quotechar='"')
reader.next()#skip header
- self.pty_dict=dict((int(rows[0]),rows[1]) for rows in reader)
+ self.pty_dict=dict((int(rows[0]),unicode(rows[1],errors='ignore')) for rows in reader)
f.close()
self.minute_count=0
self.minute_count_max=0
@@ -925,9 +925,13 @@ class rds_parser_table_qt(gr.sync_block):#START
#formatted_text="%s"%("purple",PS_ON_str)
self.signals.DataUpdateEvent.emit({'PI':PI_ON,'PSN':formatted_text})
try:
- t=(PI_ON,str(self.RDS_data[PI_ON]["PSN"]),float(self.RDS_data[PI_ON]["AF"]["main"]),str(self.RDS_data[PI_ON]["PTY"]),int(self.RDS_data[PI_ON]["TP"]))
+ t=(PI_ON,self.RDS_data[PI_ON]["PSN"],float(self.RDS_data[PI_ON]["AF"]["main"]),self.RDS_data[PI_ON]["PTY"],int(self.RDS_data[PI_ON]["TP"]))
if self.writeDB:
- db.execute("INSERT OR REPLACE INTO stations (PI,PSN,freq,PTY,TP) VALUES (?,?,?,?,?)",t)
+ try:
+ db.execute("INSERT OR REPLACE INTO stations (PI,PSN,freq,PTY,TP) VALUES (?,?,?,?,?)",t)
+ except Exception as e:
+ print(e)
+ code.interact(local=locals())
except KeyError:
#not all info present -> no db update
pass
@@ -1015,7 +1019,7 @@ class rds_parser_table_qt(gr.sync_block):#START
0b1111:u"ãåæœŵýõøþŋŕćśźŧ "}#0xff should not occur (not in standard) (but occured 2017-03-04-9:18 , probably transmission error)
#charlist=list(charstring)
- return_string=""
+ return_string=u""
for i,char in enumerate(charstring):
#split byte
alnr=(ord(char)&0xF0 )>>4 #upper 4 bit
@@ -1023,9 +1027,9 @@ class rds_parser_table_qt(gr.sync_block):#START
if ord(char)<= 0b00011111:#control code
if ord(char)==0x0D or ord(char)==0x00:#end of message SWR uses: \r\0\0\0 for last block (\0 fill 4 char segment)
#return_string+="\r"
- return_string+=char
+ return_string+=unichr(ord(char))
else:
- return_string+="{%02X}"%ord(char)#output control code
+ return_string+=u"{%02X}"%ord(char)#output control code
# elif ord(char)<= 0b01111111: #real encoding slightly different from ascii
# return_string+=char#use ascii
else:
@@ -1033,9 +1037,11 @@ class rds_parser_table_qt(gr.sync_block):#START
return_string+=alphabet[alnr][index]
#return_string+=unichr(ord(char))#TODO: properly decide for UTF8 or EBU charset
except KeyError:
- return_string+="?%02X?"%ord(char)#symbol not decoded
+ return_string+=u"?%02X?"%ord(char)#symbol not decoded
print("symbol not decoded: "+"?%02X?"%ord(char)+"in string:"+return_string)
pass
+ if not type(return_string)==unicode:
+ code.interact(local=locals())
return return_string
def color_text(self, text, start,end,textcolor,segmentcolor):
#formatted_text="%s%s%s"% (textcolor,text[:start],segmentcolor,text[start:end],textcolor,text[end:])