add UBX-MON-VER support and surface device identification in CLI/GUI

Add the Ver message parser and a fixed UbxQuery (was unused and had a
broken semaphore/state bug) to poll MON-VER once on connect. The CLI
prints hw/sw version and extensions; the GUI polls it per receiver,
pre-fills the read-only ID field with a connection counter and
rewrites it from the MOD= extension once the device answers, and
propagates the resolved display name to the Sky and Plot tabs so they
no longer show the stale placeholder ID.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XM4FNUjhu9x8df5Dp1hHvd
This commit is contained in:
2026-07-16 20:22:25 +02:00
co-authored by Claude Sonnet 5
parent d506f9afe0
commit 2dba3a9a2f
8 changed files with 176 additions and 27 deletions
+8 -13
View File
@@ -3,30 +3,25 @@ from ubx.ubx import frame_parse, frame_create
from ubx.messages.msg import UbxMsg
from transceiver import Transceiver
from ubx.listener import UbxListener
from threading import BoundedSemaphore
from threading import Event
class UbxQuery(UbxListener):
def __init__(self, transceiver: Transceiver, msg: UbxMsg):
UbxListener.__init__(self, msg)
self.transceiver = transceiver
self.sema = BoundedSemaphore()
self.result = None
self.event = Event()
def on_recv(self, msg: MsgContainer):
if self.is_msg(msg):
data, hdr = frame_parse(msg.data)
msg_parsed = self.msg.from_bytes(data)
self.msg = msg_parsed
self.sema.release()
self.result = self.msg.from_bytes(data)
self.event.set()
def poll(self):
self.event.clear()
frame = frame_create(self.msg.mclass, self.msg.mid, b'')
self.transceiver.send(frame)
self.sema.acquire()
print(self.msg)
def query(self, data: bytes):
frame = frame_create(0x01, 0x35, b'')
self.transceiver.send(frame)
self.sema.acquire()
print(self.msg)
self.event.wait()
return self.result