diff --git a/grc/crfa_max_freq.xml b/grc/crfa_max_freq.xml
index c71786c..378ab4d 100644
--- a/grc/crfa_max_freq.xml
+++ b/grc/crfa_max_freq.xml
@@ -64,6 +64,11 @@
float
$fft_len
+
+ ctrl
+ message
+ 1
+
out
message
diff --git a/grc/crfa_rds_parser_table_qt.xml b/grc/crfa_rds_parser_table_qt.xml
index 2ea56ba..c27a4cf 100644
--- a/grc/crfa_rds_parser_table_qt.xml
+++ b/grc/crfa_rds_parser_table_qt.xml
@@ -34,7 +34,7 @@ $(gui_hint()($win))
workdir
string
- #if $workdir() then 'part' else 'none'#
+ part
GUI Hint
@@ -89,5 +89,10 @@ $(gui_hint()($win))
message
1
+
+ ctrl
+ message
+ 1
+
diff --git a/python/max_freq.py b/python/max_freq.py
index c2cbdc6..3056484 100644
--- a/python/max_freq.py
+++ b/python/max_freq.py
@@ -38,8 +38,14 @@ class max_freq(gr.sync_block):
self.samp_rate=samp_rate
self.snapto=round_to
self.debug=debug
- self.last_station_freqs=[]
+ self.last_station_indices=[0]*self.num_decoders
self.message_port_register_out(pmt.intern('out'))
+ self.counter=0
+ self.message_port_register_in(pmt.intern('ctrl'))
+ self.set_msg_handler(pmt.intern('ctrl'), self.handle_ctrl_msg)
+ def handle_ctrl_msg(self,msg):
+ m = pmt.pmt_to_python.pmt_to_dict(msg)
+ print(m)
def set_center_freq(self, freq=None):
if freq is not None:
if isinstance(freq, float) or isinstance(freq, int):
@@ -47,6 +53,11 @@ class max_freq(gr.sync_block):
else:
self.center_freq = int(freq)
def work(self, input_items, output_items):
+ if self.counter<5:
+ self.counter+=1
+ return len(input_items[0])
+ else:
+ self.counter=0
#in0 = input_items[0]
#ii=input_items
carrier_width=2
@@ -96,10 +107,85 @@ class max_freq(gr.sync_block):
station_indices_sorted=sorted(station_indices,reverse=True,key=lambda elem:numbers[elem])
#prevents back and forth switching if two station have similar signal strength
- station_indices_tune=list(station_indices_sorted)#copy list
- del station_indices_tune[self.num_decoders:]#remove non decodable incidices
- station_indices_tune.sort()
+ station_indices_trunc=list(station_indices_sorted)#copy list
+ del station_indices_trunc[self.num_decoders:]#remove non decodable incidices
+ ###############################
+ #comparelist=[]
+ #for freq in station_indices_trunc:
+ #comparelist.append({"freq":freq,"decoder":None,"new":True})#new detected-> no assigned decoder
+ #for decnum,freq in enumerate(self.last_station_indices):
+ #comparelist.append({"freq":freq,"decoder":decnum,"new":False})
+ ##comparelist.sort()
+ #comparelist_sorted=sorted(comparelist, key=lambda k: k['freq'])
+ #print(comparelist_sorted)
+
+ #differences=[]
+ #station_indices_tune=[0]*4#TODO what if < 4 max freqs?
+ #last_elem=None
+ #same_station_threshold=2
+ #new_freqs=[]
+ ##for elem in comparelist_sorted:
+ #while len(comparelist_sorted)>0:
+ #elem=comparelist_sorted.pop(0)#get and remove first
+ #freq=elem["freq"]
+ #if not last_elem==None and not elem["freq"]==0:
+ #fdiff=abs(freq-last_elem["freq"])
+ #differences.append(fdiff)
+ #if fdiff use old decoder
+ #if elem["new"]:#if elem is new last_elem must be old
+ #decnum=last_elem["decoder"]
+ #freq=elem["freq"]#use new freq
+ #else:
+ #decnum=elem["decoder"]
+ #freq=last_elem["freq"]#use new freq
+ #station_indices_tune[decnum]=freq
+ #else:#stations different -> save last_elem and compare with next
+ #if last_elem["new"]:#save new
+ #new_freqs.append(last_elem["freq"])
+ #last_elem=elem
+ #if last_elem["new"]:#save new
+ #new_freqs.append(last_elem["freq"])
+ #station_indices_tune=list(set(station_indices_tune))#remove duplicates
+ #for i,freq in enumerate(station_indices_tune):
+ #if freq==0 and len(new_freqs)>0:#decoder unused
+ #station_indices_tune[i]=new_freqs.pop()#assign new freq
+
+ #print("diff %s"%differences)
+
+ #print("tune:%s"%station_indices_tune)
+ #print("nomatch:%s"%new_freqs)
+ ###############################
+ #problems:
+ #very slow, sometimes switches
+
+
+ ###############################
+ #station_indices_tune.sort()
+ ###############################
+ #problems: swtiching
+ station_indices_tune=[0]*self.num_decoders
+ same_station_threshold=3
+ new_stations=[]
+ for new_freq in station_indices_trunc:
+ added=False
+ for i,old_freq in enumerate(self.last_station_indices):
+ if abs(old_freq-new_freq)0:
+ station_indices_tune[i]=new_stations.pop()
+ #print("tune2:%s"%station_indices_tune)
+ #print("new_2 %s"%new_stations)
+
+ self.last_station_indices=station_indices_tune#save current stations to compare againts next
+
station_strength=[]
station_freqs=[]
#index to freq:
@@ -119,7 +205,6 @@ class max_freq(gr.sync_block):
print(station_indices_tune)
print(station_strength)
print(station_freqs)
-
- self.last_station_freqs=station_freqs
+
return len(input_items[0])
diff --git a/python/rds_parser_table_qt.py b/python/rds_parser_table_qt.py
index 40b11b8..1e45dc3 100644
--- a/python/rds_parser_table_qt.py
+++ b/python/rds_parser_table_qt.py
@@ -48,16 +48,86 @@ def ordinal(num):
suffix = SUFFIXES.get(num % 10, 'th')
return str(num) + suffix
class tmc_event:
- def __init__(self,ecn,tableobj,tags=[]):
- self.text_raw=""
+ def __repr__(self):
+ return self.ecn
+ def __init__(self,ecn,tableobj):
+ self.tableobj=tableobj
+ self.ecn=ecn
+ self.text_raw="##Error##"
+ self.name="##Error##"
try:
#Code,Text CEN-English,Text (German),Text (German) kein Quantifier,Text (Quantifier = 1),Text (Quantifier >1),N,Q,T,D,U,C,R ,Comment
- event_array=tableobj.ecl_dict[ecn]
+ event_array=self.tableobj.ecl_dict[ecn]
self.text_raw=event_array[1]
+ self.text_noQ=event_array[2]
+ self.text_singleQ=event_array[3]
+ self.text_pluralQ=event_array[4]
+ self.name=self.text_noQ
+ self.nature=event_array[5]#N:nature (blank): information, F:forecast, S:silent
+ self.quantifierType=event_array[6]#Q:quantifier type: (0..12) or blank (no quantifier)
+ self.durationType=event_array[7]#T:duration type: D:dynamic, L:long lasting, in brackets or if time-of-day quantifier (no 7) is used in message -> no display, only for management
+ self.direction=event_array[8]#D:direction: 1:unidirectional, 2:bidirectional
+ self.urgency=event_array[9]#U:urgency: blank: normal, X:extremely urgent, U:urgent
+ self.updateClass=int(event_array[10])#C: update class:
+ self.updateClassName=self.tableobj.tmc_update_class_names[self.updateClass]
+ self.phrase_code=event_array[11]#R: phrase code
+ #04789
+ #if not self.quantifierType=="" and not self.quantifierType=="0" and not self.quantifierType=="4":
+ #print("type: %s, C:%s"%(self.quantifierType,self.updateClassName))
self.is_valid=True
except KeyError:
print("event '%i' not found"%ecn)
self.is_valid=False
+ def add_quantifier(self,data,bitLength):
+ self.name=self.text_raw#default
+ Q_raw=data.uint
+ if Q_raw==0:#binary zero represents highest value
+ Q=32
+ else:
+ Q=Q_raw
+ quantifier_string="type:%s,raw:%i"%(self.quantifierType,Q)
+ #print(str(self.ecn)+", "+quantifier_string+", "+str(bitLength)+", "+str(data)+", "+self.text_raw)
+ if self.quantifierType=="":
+ print("cannot add quantifier %i to event ecn:%i"%(Q_raw,self.ecn))
+ elif self.quantifierType=="0":#small numbers
+ if(Q <= 28):
+ quantifier_string=str(Q)
+ else:
+ quantifier_string=str(30+(Q-29)*2)#30,32,34,36
+ #print(quantifier_string)
+ self.name=self.text_pluralQ.replace("(Q)",quantifier_string)
+ elif self.quantifierType=="1":#numbers
+ numbers=[1,2,3,4,10,20,30,40,50,60,70,80,90,100,150,200,250,300,350,400,450,500,550,600,650,700,750,800,850,900,950,1000]
+ quantifier_string=str(numbers[Q-1])
+ elif self.quantifierType=="2":#z.b. für sichtweiten, e.g. for visibility #TODO translate
+ quantifier_string="%i Metern"
+ self.name=self.text_pluralQ.replace("(Q)",quantifier_string)
+ elif self.quantifierType=="4":
+ speed=Q*5#in kmh
+ quantifier_string="von bis zu %i km/h"%speed
+ elif self.quantifierType=="7":
+ hours=int((Q-1)/6)
+ minutes=((Q-1)%6)*10
+ quantifier_string="%i:%i"%(hours,minutes)
+ #print(quantifier_string)
+ elif self.quantifierType=="8":
+ if Q<=100:
+ weight=Q*0.1
+ else:
+ weight=10+0.5*(Q-100)
+ quantifier_string="%it"%weight
+ self.name=self.text_pluralQ.replace("(Q)",quantifier_string)
+ #print(quantifier_string)
+ elif self.quantifierType=="9":
+ if Q<=100:
+ length=Q*0.1
+ else:
+ length=10+0.5*(Q-100)
+ quantifier_string="%.1fm"%length
+ #print(quantifier_string)
+ self.name=self.text_pluralQ.replace("(Q)",quantifier_string)
+ #print(self.name)
+ self.name=self.text_raw+"; Q="+quantifier_string
def __repr__(self):
return self.text_raw
def __add_tag(self,tag):
@@ -143,11 +213,12 @@ class tmc_message:
def __repr__(self):
#event_name=self.ecl_dict[self.tmc_event][1]
#message_string="TMC-message,event:%s location:%i,reflocs:%s, station:%s"%(event_name,self.tmc_location,self.ref_locs(self.tmc_location,""),self.RDS_data[PI]["PSN"])
- return "single:%i,complete:%i,event:%i location:%s"%(self.is_single,self.is_complete,self.event,self.location)
+ return "single:%i,complete:%i,event:%i location:%s"%(self.is_single,self.is_complete,self.event.ecn,self.location)
def __init__(self,PI,tmc_x,tmc_y,tmc_z,tableobj):#TODO handle out of sequence data
self.debug_data=""
self.tableobj=tableobj
+ self.isCancelled=False
self.tmc_hash=hash((PI,tmc_x,tmc_y,tmc_z))
tmc_T=tmc_x>>4 #0:TMC-message 1:tuning info/service provider name
assert tmc_T==0, "this is tuning info and no alert_c message"
@@ -171,12 +242,13 @@ class tmc_message:
self.mgm_list=[]
self.location=tmc_location(tmc_z,tableobj)
self.tmc_location=self.location#decrepated
- self.event=int(tmc_y&0x7ff) #Y10-Y0
- self.tmc_event=self.event#decrepated
- try:
- self.event_name = self.tableobj.ecl_dict[self.event][1]
- except KeyError:
- self.event_name="##Error##"
+ #self.event=int(tmc_y&0x7ff) #Y10-Y0
+ self.event=tmc_event(int(tmc_y&0x7ff),self.tableobj) #Y10-Y0
+ self.events=[self.event]
+ #try:
+ #self.event_name = self.tableobj.ecl_dict[self.event][1]
+ #except KeyError:
+ #self.event_name="##Error##"
self.tmc_extent=int((tmc_y>>11)&0x7) #3 bits (Y13-Y11)
self.tmc_dir=int((tmc_y>>14)&0x1) #+-direction bit (Y14)
else:#subsequent groups in multigroup -> Y0..Y11 and Z0..Z15 are special format
@@ -200,6 +272,7 @@ class tmc_message:
if self.count==0:#last group
self.is_complete=True
self.debug_data=copy.deepcopy(self.data_arr)
+ last_event=self.event
while len(self.data_arr)>4:#decode mgm
label=self.data_arr[0:4].uint
del self.data_arr[0:4]
@@ -212,6 +285,15 @@ class tmc_message:
self.tmc_DP=data.uint
elif label==1 and data.uint==5:
self.tmc_D=1#set diversion bit
+ elif label==4:#5 bit quantifier
+ last_event.add_quantifier(data,5)
+ elif label==5:#8 bit quantifier
+ last_event.add_quantifier(data,8)
+ elif label==9:#additional event
+ last_event=tmc_event(data.uint,self.tableobj)
+ self.events.append(last_event)
+
+
self.count-=1
except AttributeError:
#3rd or later group receiver before second
@@ -221,30 +303,31 @@ class tmc_message:
class mgm_tag:#mgm=multi group message
field_lengths=[3, 3, 5, 5, 5, 8, 8, 8, 8, 11, 16, 16, 16, 16, 0, 0]
field_names={0:"Duration (value 000 is not allowed)"
-,1:"Control code."
-,2:"Length of route affected."
-,3:"Speed limit advice."
-,4:"quantifier (5 bit field)"
-,5:"quantifier (8 bit field)"
-,6:"Supplementary information code."
-,7:"Explicit start time (or time when problem was reported) for driver information only."
-,8:"Explicit stop time for driver information and message management."
-,9:"Additional event."
-,10:"Detailed diversion instructions."
-,11:"Destination."
-,12:"Reserved for future use"
-,13:"Cross linkage to source of problem, on another route."
-,14:"Content Separator."
-,15:"Reserved for future use."}
+ ,1:"Control code."
+ ,2:"Length of route affected."
+ ,3:"Speed limit advice."
+ ,4:"quantifier (5 bit field)"
+ ,5:"quantifier (8 bit field)"
+ ,6:"Supplementary information code."
+ ,7:"Explicit start time (or time when problem was reported) for driver information only."
+ ,8:"Explicit stop time for driver information and message management."
+ ,9:"Additional event."
+ ,10:"Detailed diversion instructions."
+ ,11:"Destination."
+ ,12:"Reserved for future use"
+ ,13:"Cross linkage to source of problem , on another route."
+ ,14:"Content Separator."
+ ,15:"Reserved for future use."}
control_codes={0:"Default urgency increased by one level."
-,1: "Default urgency reduced by one level."
-,2:" Default directionality of message changed."
-,3:" Default 'dynamic' or 'longer-lasting' provision interchanged."
-,4:" Default spoken or unspoken duration interchanged."
-,5:" Equivalent of diversion bit set to '1'."
-,6:" Increase the number of steps in the problem extent by 8."
-,7:" Increase the number of steps in the problem extent by 16."}
- def decode_time_date(self,raw):#label7/8 raw to datestring
+ ,1: "Default urgency reduced by one level."
+ ,2:" Default directionality of message changed."
+ ,3:" Default 'dynamic' or 'longer-lasting' provision interchanged."
+ ,4:" Default spoken or unspoken duration interchanged."
+ ,5:" Equivalent of diversion bit set to '1'."
+ ,6:" Increase the number of steps in the problem extent by 8."
+ ,7:" Increase the number of steps in the problem extent by 16."}
+ @staticmethod
+ def decode_time_date(raw):#label7/8 raw to datestring
if raw<=95:
hrs=int(raw/4)#takes floor
mns=(95%4)*15
@@ -257,7 +340,8 @@ class mgm_tag:#mgm=multi group message
return "%s months"%((raw-231)/2.0)
else:
raise ValueError, "label7/8 time must be between 0 and 255"
- def length_to_km(self,raw):#label2 raw to km
+ @staticmethod
+ def length_to_km(raw):#label2 raw to km
if raw==0:
return 100
elif raw <=10:
@@ -290,8 +374,10 @@ class mgm_tag:#mgm=multi group message
elif(self.label==8):
return "stop: %s"%self.decode_time_date(self.data.uint)
elif(self.label==9):
- event_string="event: %s"%self.tableobj.ecl_dict[self.data.uint][1]
- return event_string
+ event=tmc_event(self.data.uint,self.tableobj)
+ #event_string="event: %s"%self.tableobj.ecl_dict[self.data.uint][1]
+ #return event_string
+ return "event: %s"%event.name
elif(self.label==10):
#location_string="divert via: %s"%",".join(self.tableobj.lcl_dict[self.data.uint][3:5])#roadname(col3) and firstname (col4)
location_string="divert via: %s"%tmc_location(self.data.uint,self.tableobj)
@@ -338,6 +424,7 @@ class rds_parser_table_qt(gr.sync_block):
self.set_msg_handler(pmt.intern('in%d'%i), functools.partial(self.handle_msg, port=i))
self.message_port_register_in(pmt.intern('freq'))
self.set_msg_handler(pmt.intern('freq'), self.set_freq)
+ self.message_port_register_out(pmt.intern('ctrl'))
self.log=log
self.debug=debug
self.signals=signals
@@ -401,6 +488,7 @@ class rds_parser_table_qt(gr.sync_block):
#read TMC-event list
reader = csv.reader(open(self.workdir+'event-list_with_forecast_sort.csv'), delimiter=',', quotechar='"')
reader.next()#skip header
+ self.ecl_dict=dict((int(rows[0]),rows[1:]) for rows in reader)
#Code,Text CEN-English,Text (German),Text (German) kein Quantifier,Text (Quantifier = 1),Text (Quantifier >1),N,Q,T,D,U,C,R ,Comment
#N:nature (blank): information, F:forecast, S:silent
#Q:quantifier type: (0..12) or blank (no quantifier)
@@ -408,39 +496,12 @@ class rds_parser_table_qt(gr.sync_block):
#D:direction: 1:unidirectional, 2:bidirectional
#U:urgency: blank: normal, X:extremely urgent, U:urgent
#C: update class:
-#1. LEVEL OF SERVICE Verkehrslage
-#2. EXPECTED LEVEL OF SERVICE Erwartete Verkehrslage
-#3. ACCIDENTS Unfälle
-#4. INCIDENTS Vorfälle
-#5. CLOSURES AND LANE RESTRICTIONS Straßen- und Fahrbahnsperrungen Straßen- und Fahrbahnsperrungen
-#6. CARRIAGEWAY RESTRICTIONS Fahrbahnbeschränkungen
-#7. EXIT RESTRICTIONS Beschränkungen der Ausfahrt
-#8. ENTRY RESTRICTIONS Beschränkungen der Einfahrt
-#9. TRAFFIC RESTRICTIONS Verkehrsbeschränkungen
-#10. CARPOOL INFORMATION Informationen für Fahrgemeinschaften
-#11. ROADWORKS Bauarbeiten
-#12. OBSTRUCTION HAZARDS Behinderungen auf der Fahrbahn
-#13. DANGEROUS SITUATIONS Gefährliche Situationen
-#14. ROAD CONDITIONS Straßenzustand
-#15.TEMPERATURES Temperaturen
-#16. PRECIPITATION AND VISIBILITY Niederschlag und Sichtbehinderungen
-#17. WIND AND AIR QUALITY Wind und Luftqualität
-#18. ACTIVITIES Veranstaltungen
-#19. SECURITY ALERTS Sicherheitsvorfälle
-#20. DELAYS Zeitverluste
-#21. CANCELLATIONS Ausfälle
-#22. TRAVEL TIME INFORMATION Reiseinformationen
-#23. DANGEROUS VEHICLES Gefährliche Fahrzeuge
-#24. EXCEPTIONAL LOADS/VEHICLES Außergewöhnliche Ladungen und Fahrzeuge
-#25. TRAFFIC EQUIPMENT STATUS Störungen an Lichtsignalanlagen und sonstigen Straßenausrüstungen
-#26. SIZE AND WEIGHT LIMITS Beschränkung der Fahrzeugmaße und -gewichte
-#27. PARKING RESTRICTIONS Parkregelungen
-#28. PARKING Parken
-#29. REFERENCE TO AUDIO BROADCASTS Information
-#30. SERVICE MESSAGES Service Meldungen
-#31. SPECIAL MESSAGES Spezielle Meldungen
-
- self.ecl_dict=dict((int(rows[0]),rows[1:]) for rows in reader)
+
+ #read update classes
+ reader = csv.reader(open(self.workdir+'tmc_update_class_names.csv'), delimiter=',', quotechar='"')
+ reader.next()#skip header, "code(C),english,german"
+ self.tmc_update_class_names=dict((int(rows[0]),rows[1]) for rows in reader)#only use german name
+
#read supplementary information code list
reader = csv.reader(open(self.workdir+'label6-supplementary-information-codes.csv'), delimiter=',', quotechar='"')
reader.next()#skip header
@@ -513,7 +574,7 @@ class rds_parser_table_qt(gr.sync_block):
self.RDS_data[PI]["DI"]=[2,2,2,2]
self.RDS_data[PI]["internals"]={"last_rt_tooltip":"","unfinished_TMC":{},"last_valid_rt":"","last_valid_psn":""}
def handle_msg(self, msg, port):#port from 0 to 3
- if time.time()-self.save_data_timer > 2:#every 10 seconds #TODO lower frequency (high freq for testing)
+ if time.time()-self.save_data_timer > 10:#every 10 seconds
self.save_data_timer=time.time()
self.clean_data_and_commit_db()
pr.enable()
@@ -1093,18 +1154,18 @@ class rds_parser_table_qt(gr.sync_block):
else:
#multi_str="length:%i, list:%s"%(tmc_msg.length,str(tmc_msg.mgm_list))
multi_str="%i:%s"%(tmc_msg.length,str(tmc_msg.mgm_list))
- message_string="TMC-message,event:%s lcn:%i,location:%s,reflocs:%s, station:%s"%(tmc_msg.event_name,tmc_msg.location.lcn,tmc_msg.location,reflocs,self.RDS_data[PI]["PSN"])
+ message_string="TMC-message,event:%s lcn:%i,location:%s,reflocs:%s, station:%s"%(tmc_msg.event.name,tmc_msg.location.lcn,tmc_msg.location,reflocs,self.RDS_data[PI]["PSN"])
self.TMC_data[tmc_hash]=tmc_msg
self.signals.DataUpdateEvent.emit({'TMC_log':tmc_msg,'multi_str':multi_str})
#t=(str(datetime.now()),PI,self.RDS_data[PI]["PSN"],"ALERT-C",message_string.decode("utf-8"))
#self.db.execute("INSERT INTO data (time,PI,PSN,dataType,data) VALUES (?,?,?,?,?)",t)
- message_string="%s ,locname:%s, reflocs:%s"%(tmc_msg.event_name,tmc_msg.location,reflocs)
- t=(tmc_hash,str(datetime.now()),PI, tmc_F,tmc_msg.event,int(tmc_msg.location.lcn),tmc_msg.tmc_DP,tmc_msg.tmc_D,tmc_msg.tmc_dir,tmc_msg.tmc_extent,message_string.decode("utf-8"),multi_str.decode("utf-8"),str(tmc_msg.debug_data))
+ message_string="%s ,locname:%s, reflocs:%s"%(tmc_msg.event.name,tmc_msg.location,reflocs)
+ t=(tmc_hash,str(datetime.now()),PI, tmc_F,tmc_msg.event.ecn,int(tmc_msg.location.lcn),tmc_msg.tmc_DP,tmc_msg.tmc_D,tmc_msg.tmc_dir,tmc_msg.tmc_extent,message_string.decode("utf-8"),multi_str.decode("utf-8"),str(tmc_msg.debug_data))
self.db.execute("INSERT INTO TMC (hash,time,PI, F,event,location,DP,div,dir,extent,text,multi,rawmgm) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)",t)
#self.signals.DataUpdateEvent.emit({'TMC_log_str':multi_str})
if tmc_msg.location.has_koord:#show on map
- map_tag=tmc_msg.event_name+"; "+multi_str
+ map_tag=tmc_msg.event.name+"; "+multi_str
#print to osm map (disabled because slow)
#folium.Marker([tmc_msg.location.ykoord,tmc_msg.location.xkoord], popup=map_tag.decode("utf-8")).add_to(self.osm_map)
@@ -1117,7 +1178,7 @@ class rds_parser_table_qt(gr.sync_block):
except Exception as e:
print(e)
- pass
+ raise
#print("line 1064")
#code.interact(local=locals())
except KeyError:
@@ -1246,6 +1307,12 @@ class rds_parser_table_qt_Widget(QtGui.QWidget):
save_button = QtGui.QPushButton("save")
save_button.clicked.connect(self.saveData)
button_layout.addWidget(save_button)
+ print_button = QtGui.QPushButton("print profile")
+ print_button.clicked.connect(self.printProfile)
+ button_layout.addWidget(print_button)
+ mode_button = QtGui.QPushButton("mode")
+ mode_button.clicked.connect(self.switchMode)
+ button_layout.addWidget(mode_button)
layout.addLayout(button_layout)
self.freq_label=QtGui.QLabel("decoder frequencies:")
@@ -1288,9 +1355,9 @@ class rds_parser_table_qt_Widget(QtGui.QWidget):
lf=unicode(self.location_filter.text().toUtf8(), encoding="UTF-8").lower()
reflocs=tmc_msg.location.reflocs
reflocs_cmp=unicode(reflocs, encoding="UTF-8").lower()
- event_cmp=unicode(tmc_msg.event_name, encoding="UTF-8").lower()
+ event_cmp=unicode(tmc_msg.event.name, encoding="UTF-8").lower()
if not reflocs_cmp.find(lf)==-1 and not event_cmp.find(ef)==-1:
- message_string="TMC-message,event:%s lcn:%i,location:%s,reflocs:%s, station:%s"%(tmc_msg.event_name,tmc_msg.location.lcn,tmc_msg.location,reflocs,self.tableobj.RDS_data[tmc_msg.PI]["PSN"])
+ message_string="TMC-message,event:%s lcn:%i,location:%s,reflocs:%s, station:%s"%(tmc_msg.event.name,tmc_msg.location.lcn,tmc_msg.location,reflocs,self.tableobj.RDS_data[tmc_msg.PI]["PSN"])
self.logOutput.append(Qt.QString.fromUtf8(message_string))
if event.has_key('multi_str'):
self.logOutput.append(Qt.QString.fromUtf8(event['multi_str']))
@@ -1344,6 +1411,13 @@ class rds_parser_table_qt_Widget(QtGui.QWidget):
self.table.resizeColumnsToContents()
self.lastResizeTime=time.time()
#end of display-data
+ def printProfile(self):
+ self.tableobj.print_results()
+ def switchMode(self):
+ #print("mode switch message sent")
+ send_pmt = pmt.pmt_to_python.pmt_from_dict({"cmd":"switch mode"})
+ #send_pmt = pmt.string_to_symbol("switch mode")
+ self.tableobj.message_port_pub(pmt.intern('ctrl'), send_pmt)
def saveData(self):
filename="RDS_data_"+str(datetime.now())+".txt"
f=open(self.tableobj.workdir+filename,"w")
@@ -1403,12 +1477,8 @@ class rds_parser_table_qt_Widget(QtGui.QWidget):
#code.interact(local=locals())
view.exec_()
def onCLick(self):
- print("button clicked")
- self.tableobj.print_results()
- #code.interact(local=locals())
- #self.logOutput.clear()
- #self.reset_color()
- #pp.pprint(event)
+ print("button clicked")
+ code.interact(local=locals())
if __name__ == "__main__":
from PyQt4 import Qt
import sys
@@ -1428,3 +1498,4 @@ if __name__ == "__main__":
sys.exit(app.exec_())
widget = None
+