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
28 lines
757 B
Python
28 lines
757 B
Python
from msg.container import MsgContainer
|
|
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 Event
|
|
|
|
class UbxQuery(UbxListener):
|
|
def __init__(self, transceiver: Transceiver, msg: UbxMsg):
|
|
UbxListener.__init__(self, msg)
|
|
self.transceiver = transceiver
|
|
self.result = None
|
|
self.event = Event()
|
|
|
|
def on_recv(self, msg: MsgContainer):
|
|
if self.is_msg(msg):
|
|
data, hdr = frame_parse(msg.data)
|
|
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.event.wait()
|
|
return self.result
|
|
|