Add time-since-last-packet GUI element

pyqt6 v0.3.11
Mark Jessop 2023-07-01 15:22:25 +09:30
rodzic 24497428cc
commit 387d91199f
3 zmienionych plików z 26 dodań i 4 usunięć

Wyświetl plik

@ -1 +1 @@
__version__ = "0.3.10" __version__ = "0.3.11"

Wyświetl plik

@ -18,6 +18,7 @@ import datetime
import glob import glob
import logging import logging
import platform import platform
import time
import pyqtgraph as pg import pyqtgraph as pg
import numpy as np import numpy as np
from queue import Queue from queue import Queue
@ -68,6 +69,8 @@ telemetry_logger = None
decoder_init = False decoder_init = False
last_packet_time = None
# Rotator object # Rotator object
rotator = None rotator = None
@ -515,10 +518,14 @@ widgets["latestRawSentenceData"].setReadOnly(True)
widgets["latestDecodedSentenceLabel"] = QtGui.QLabel("<b>Latest Packet (Decoded):</b>") widgets["latestDecodedSentenceLabel"] = QtGui.QLabel("<b>Latest Packet (Decoded):</b>")
widgets["latestDecodedSentenceData"] = QtGui.QLineEdit("NO DATA") widgets["latestDecodedSentenceData"] = QtGui.QLineEdit("NO DATA")
widgets["latestDecodedSentenceData"].setReadOnly(True) widgets["latestDecodedSentenceData"].setReadOnly(True)
widgets["latestDecodedAgeLabel"] = QtGui.QLabel("<b>Last Packet Age:</b>")
widgets["latestDecodedAgeData"] = QtGui.QLabel("No packet yet!")
w4_data.addWidget(widgets["latestRawSentenceLabel"], 0, 0, 1, 1) w4_data.addWidget(widgets["latestRawSentenceLabel"], 0, 0, 1, 1)
w4_data.addWidget(widgets["latestRawSentenceData"], 0, 1, 1, 6) w4_data.addWidget(widgets["latestRawSentenceData"], 0, 1, 1, 6)
w4_data.addWidget(widgets["latestDecodedSentenceLabel"], 1, 0, 1, 1) w4_data.addWidget(widgets["latestDecodedSentenceLabel"], 1, 0, 1, 1)
w4_data.addWidget(widgets["latestDecodedSentenceData"], 1, 1, 1, 6) w4_data.addWidget(widgets["latestDecodedSentenceData"], 1, 1, 1, 6)
w4_data.addWidget(widgets["latestDecodedAgeLabel"], 2, 0, 1, 1)
w4_data.addWidget(widgets["latestDecodedAgeData"], 2, 1, 1, 2)
d3_data.addWidget(w4_data) d3_data.addWidget(w4_data)
w4_position = pg.LayoutWidget() w4_position = pg.LayoutWidget()
@ -894,6 +901,7 @@ def add_stats_update(frame):
def handle_new_packet(frame): def handle_new_packet(frame):
""" Handle receipt of a newly decoded packet """ """ Handle receipt of a newly decoded packet """
global last_packet_time
if len(frame.data) > 0: if len(frame.data) > 0:
if type(frame.data) == bytes: if type(frame.data) == bytes:
@ -940,6 +948,7 @@ def handle_new_packet(frame):
# If we get here, the string is valid! # If we get here, the string is valid!
widgets["latestRawSentenceData"].setText(f"{_packet} ({_snr:.1f} dB SNR)") widgets["latestRawSentenceData"].setText(f"{_packet} ({_snr:.1f} dB SNR)")
widgets["latestDecodedSentenceData"].setText(f"{_packet}") widgets["latestDecodedSentenceData"].setText(f"{_packet}")
last_packet_time = time.time()
# Upload the string to Sondehub Amateur # Upload the string to Sondehub Amateur
sondehub_uploader.add(_decoded) sondehub_uploader.add(_decoded)
@ -965,6 +974,7 @@ def handle_new_packet(frame):
widgets["latestRawSentenceData"].setText(f"{_packet} ({_snr:.1f} dB SNR)") widgets["latestRawSentenceData"].setText(f"{_packet} ({_snr:.1f} dB SNR)")
widgets["latestDecodedSentenceData"].setText(_decoded['ukhas_str']) widgets["latestDecodedSentenceData"].setText(_decoded['ukhas_str'])
last_packet_time = time.time()
# Upload the string to Sondehub Amateur # Upload the string to Sondehub Amateur
sondehub_uploader.add(_decoded) sondehub_uploader.add(_decoded)
except Exception as e: except Exception as e:
@ -1043,9 +1053,13 @@ def start_decoding():
Start decoding! Start decoding!
(Or, stop decoding) (Or, stop decoding)
""" """
global widgets, audio_stream, fft_process, horus_modem, audio_devices, running, fft_update_queue, status_update_queue global widgets, audio_stream, fft_process, horus_modem, audio_devices, running, fft_update_queue, status_update_queue, last_packet_time
if not running: if not running:
# Reset last packet time
last_packet_time = None
widgets['latestDecodedAgeData'].setText("No packet yet!")
# Grab settings off widgets # Grab settings off widgets
_dev_name = widgets["audioDeviceSelector"].currentText() _dev_name = widgets["audioDeviceSelector"].currentText()
if _dev_name != 'UDP Audio (127.0.0.1:7355)': if _dev_name != 'UDP Audio (127.0.0.1:7355)':
@ -1192,7 +1206,7 @@ def handle_log_update(log_update):
# GUI Update Loop # GUI Update Loop
def processQueues(): def processQueues():
""" Read in data from the queues, this decouples the GUI and async inputs somewhat. """ """ Read in data from the queues, this decouples the GUI and async inputs somewhat. """
global fft_update_queue, status_update_queue, decoder_init, widgets, args global fft_update_queue, status_update_queue, decoder_init, widgets, args, running, last_packet_time
while fft_update_queue.qsize() > 0: while fft_update_queue.qsize() > 0:
_data = fft_update_queue.get() _data = fft_update_queue.get()
@ -1209,6 +1223,14 @@ def processQueues():
handle_log_update(_log) handle_log_update(_log)
if running:
if last_packet_time != None:
_time_delta = int(time.time() - last_packet_time)
_time_delta_seconds = int(_time_delta%60)
_time_delta_minutes = int((_time_delta/60) % 60)
_time_delta_hours = int((_time_delta/3600))
widgets['latestDecodedAgeData'].setText(f"{_time_delta_hours:02d}:{_time_delta_minutes:02d}:{_time_delta_seconds:02d}")
# Try and force a re-draw. # Try and force a re-draw.
QtGui.QApplication.processEvents() QtGui.QApplication.processEvents()

Wyświetl plik

@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "horusgui" name = "horusgui"
version = "0.3.9" version = "0.3.11"
description = "" description = ""
authors = ["Mark Jessop <vk5qi@rfhead.net>"] authors = ["Mark Jessop <vk5qi@rfhead.net>"]