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