Added an option on the UI for turn raw byte print on/off.
The button on the UI sends a message to radio thread for changing the print_raw_data flag. I could have also done this differently by doing the following: change the log message type from RNode to UI to differentiate logs from raw data. do the filtering of whether raw bytes are printed or not on the UI side.pull/6/head
parent
4fc9fce834
commit
347e062026
|
@ -51,7 +51,7 @@ class RNS():
|
||||||
print(logstring)
|
print(logstring)
|
||||||
else:
|
else:
|
||||||
msg_to_ui = {
|
msg_to_ui = {
|
||||||
"type": "FromRadio",
|
"type": "LogMessageFromRadio",
|
||||||
"value": logstring
|
"value": logstring
|
||||||
}
|
}
|
||||||
RNS.queue_to_ui.put(msg_to_ui)
|
RNS.queue_to_ui.put(msg_to_ui)
|
||||||
|
|
|
@ -25,6 +25,9 @@ class LoRaMonUIApp:
|
||||||
#flag that indicates if the output should auto scroll to the bottom
|
#flag that indicates if the output should auto scroll to the bottom
|
||||||
self.auto_scroll_flag = True
|
self.auto_scroll_flag = True
|
||||||
|
|
||||||
|
#flag that indicates if the output should auto scroll to the bottom
|
||||||
|
self.print_raw_data_flag = False
|
||||||
|
|
||||||
# Right pane output list
|
# Right pane output list
|
||||||
self.output_lines = []
|
self.output_lines = []
|
||||||
#scrollable
|
#scrollable
|
||||||
|
@ -74,6 +77,11 @@ class LoRaMonUIApp:
|
||||||
urwid.connect_signal(self.auto_scroll_widget, 'click', self.toggleAutoScroll)
|
urwid.connect_signal(self.auto_scroll_widget, 'click', self.toggleAutoScroll)
|
||||||
menu_widgets.append(self.auto_scroll_widget)
|
menu_widgets.append(self.auto_scroll_widget)
|
||||||
|
|
||||||
|
#widget for turn auto scroll on / off
|
||||||
|
self.print_raw_data_widget = urwid.Button("Print Raw Data: " + str(self.print_raw_data_flag))
|
||||||
|
urwid.connect_signal(self.print_raw_data_widget, 'click', self.togglePrintRawData)
|
||||||
|
menu_widgets.append(self.print_raw_data_widget)
|
||||||
|
|
||||||
# Left-top: Menu
|
# Left-top: Menu
|
||||||
# these are 2 example buttons to put in. i'm using them as a template for other things
|
# these are 2 example buttons to put in. i'm using them as a template for other things
|
||||||
# the first item, kicks off a thread to do background activity
|
# the first item, kicks off a thread to do background activity
|
||||||
|
@ -188,6 +196,15 @@ class LoRaMonUIApp:
|
||||||
self.auto_scroll_flag = True
|
self.auto_scroll_flag = True
|
||||||
self.auto_scroll_widget.set_label("AutoScroll: " + str(self.auto_scroll_flag))
|
self.auto_scroll_widget.set_label("AutoScroll: " + str(self.auto_scroll_flag))
|
||||||
|
|
||||||
|
def togglePrintRawData(self, button):
|
||||||
|
if (self.print_raw_data_flag == True):
|
||||||
|
self.print_raw_data_flag = False
|
||||||
|
else:
|
||||||
|
self.print_raw_data_flag = True
|
||||||
|
self.print_raw_data_widget.set_label("Print Raw Data: " + str(self.print_raw_data_flag))
|
||||||
|
#tell the radio the status of the button
|
||||||
|
self.sendParameterToRadio("print_raw_data", self.print_raw_data_flag)
|
||||||
|
|
||||||
#this routine is called periodicaly to service incoming events for the UI
|
#this routine is called periodicaly to service incoming events for the UI
|
||||||
#currently, there is a message queue from the radio thread
|
#currently, there is a message queue from the radio thread
|
||||||
#that send messages to be shown
|
#that send messages to be shown
|
||||||
|
@ -201,7 +218,7 @@ class LoRaMonUIApp:
|
||||||
|
|
||||||
msg = self.queue_from_radio.get()
|
msg = self.queue_from_radio.get()
|
||||||
match msg['type']:
|
match msg['type']:
|
||||||
case "FromRadio":
|
case "LogMessageFromRadio":
|
||||||
self.appendToOutputWidget(msg["value"])
|
self.appendToOutputWidget(msg["value"])
|
||||||
case "r_frequency":
|
case "r_frequency":
|
||||||
self.caption_text_widgets[0].original_widget.set_text("Radio Freq: " + str(msg["value"]))
|
self.caption_text_widgets[0].original_widget.set_text("Radio Freq: " + str(msg["value"]))
|
||||||
|
@ -215,6 +232,9 @@ class LoRaMonUIApp:
|
||||||
self.battery_text_widget.original_widget.set_text ("Battery: " + str(msg["value"]))
|
self.battery_text_widget.original_widget.set_text ("Battery: " + str(msg["value"]))
|
||||||
case "r_captured_packets":
|
case "r_captured_packets":
|
||||||
self.packets_received_widget.original_widget.set_text("Packets: " + str(msg["value"]))
|
self.packets_received_widget.original_widget.set_text("Packets: " + str(msg["value"]))
|
||||||
|
case "print_raw_data":
|
||||||
|
self.print_raw_data_flag = msg["value"]
|
||||||
|
self.print_raw_data_widget.set_label("Print Raw Data: " + str(self.print_raw_data_flag))
|
||||||
case _:
|
case _:
|
||||||
None
|
None
|
||||||
#set the alarm again, so it calls the routing again
|
#set the alarm again, so it calls the routing again
|
||||||
|
|
|
@ -98,7 +98,7 @@ class RNode():
|
||||||
self.capture_start_time = time.time()
|
self.capture_start_time = time.time()
|
||||||
|
|
||||||
#flag for printing raw bytes from RNode
|
#flag for printing raw bytes from RNode
|
||||||
self.raw_data_enabled = False
|
self.print_raw_data_enabled = False
|
||||||
|
|
||||||
#flag for stopping the thread
|
#flag for stopping the thread
|
||||||
self.thread_continue = None
|
self.thread_continue = None
|
||||||
|
@ -165,6 +165,8 @@ class RNode():
|
||||||
#print(f"UI is requesting coding_rate to change to {msg['value']}")
|
#print(f"UI is requesting coding_rate to change to {msg['value']}")
|
||||||
self.cr = msg['value']
|
self.cr = msg['value']
|
||||||
self.setCodingRate()
|
self.setCodingRate()
|
||||||
|
case "print_raw_data":
|
||||||
|
self.setPrintRawDataBytes(msg['value'])
|
||||||
case _:
|
case _:
|
||||||
None
|
None
|
||||||
|
|
||||||
|
@ -195,7 +197,7 @@ class RNode():
|
||||||
last_read_ms = int(time.time()*1000)
|
last_read_ms = int(time.time()*1000)
|
||||||
|
|
||||||
if (in_frame == True):
|
if (in_frame == True):
|
||||||
if (self.raw_data_enabled == True): #logic to print raw frame data when in frame
|
if (self.print_raw_data_enabled == True): #logic to print raw frame data when in frame
|
||||||
if (byte == KISS.FEND):
|
if (byte == KISS.FEND):
|
||||||
# we have detected end of a frame
|
# we have detected end of a frame
|
||||||
packet_string += str(f"{byte:#0{4}x}")
|
packet_string += str(f"{byte:#0{4}x}")
|
||||||
|
@ -408,7 +410,7 @@ class RNode():
|
||||||
command = KISS.CMD_UNKNOWN
|
command = KISS.CMD_UNKNOWN
|
||||||
data_buffer = b""
|
data_buffer = b""
|
||||||
command_buffer = b""
|
command_buffer = b""
|
||||||
if (self.raw_data_enabled == True):
|
if (self.print_raw_data_enabled == True):
|
||||||
packet_string += "-->"
|
packet_string += "-->"
|
||||||
packet_string += f"{byte:#0{4}x} "
|
packet_string += f"{byte:#0{4}x} "
|
||||||
else:
|
else:
|
||||||
|
@ -537,6 +539,16 @@ class RNode():
|
||||||
if written != len(kiss_command):
|
if written != len(kiss_command):
|
||||||
raise IOError("An IO error occurred while configuring promiscuous mode for "+self(str))
|
raise IOError("An IO error occurred while configuring promiscuous mode for "+self(str))
|
||||||
|
|
||||||
|
def setPrintRawDataBytes(self, state):
|
||||||
|
if state == True:
|
||||||
|
self.print_raw_data_enabled = True
|
||||||
|
# for debugging
|
||||||
|
# RNS.log("setPrintRawDataBytes Received True")
|
||||||
|
else:
|
||||||
|
self.print_raw_data_enabled = False
|
||||||
|
# for debugging
|
||||||
|
# RNS.log("setPrintRawDataBytes Received False")
|
||||||
|
|
||||||
def packet_captured(data, rnode_instance):
|
def packet_captured(data, rnode_instance):
|
||||||
if rnode_instance.console_output:
|
if rnode_instance.console_output:
|
||||||
if rnode_instance.print_hex:
|
if rnode_instance.print_hex:
|
||||||
|
@ -698,7 +710,7 @@ def main():
|
||||||
rnode.promiscuous = False
|
rnode.promiscuous = False
|
||||||
|
|
||||||
if (args.R):
|
if (args.R):
|
||||||
rnode.raw_data_enabled = True
|
rnode.setPrintRawDataBytes(True)
|
||||||
|
|
||||||
if not args.W and not args.console:
|
if not args.W and not args.console:
|
||||||
RNS.log("Warning! No output destination specified! You won't see any captured packets.")
|
RNS.log("Warning! No output destination specified! You won't see any captured packets.")
|
||||||
|
@ -741,6 +753,9 @@ def main():
|
||||||
#initialize the radio
|
#initialize the radio
|
||||||
rnode.initRadio()
|
rnode.initRadio()
|
||||||
|
|
||||||
|
#set the setting for print raw data
|
||||||
|
rnode.updateIUApp("print_raw_data", args.R)
|
||||||
|
|
||||||
loramon_ui_app.run()
|
loramon_ui_app.run()
|
||||||
rnode.thread_continue = False
|
rnode.thread_continue = False
|
||||||
None
|
None
|
||||||
|
|
Loading…
Reference in New Issue