refactored
This commit is contained in:
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
from abc import ABC
|
from abc import ABC
|
||||||
|
from a_transceiver import ATransceiver
|
||||||
|
|
||||||
class ABackend(ABC):
|
class ABackend(ABC):
|
||||||
def send(self, name: str, data: bytes):
|
def send(self, xcr: ATransceiver, data: bytes):
|
||||||
pass
|
pass
|
||||||
|
|||||||
+1
-7
@@ -1,4 +1,3 @@
|
|||||||
from a_backend import ABackend
|
|
||||||
from msg.listener import MsgListener
|
from msg.listener import MsgListener
|
||||||
|
|
||||||
|
|
||||||
@@ -6,14 +5,9 @@ class ATransceiver(MsgListener):
|
|||||||
def __init__(self, name: str):
|
def __init__(self, name: str):
|
||||||
MsgListener.__init__(self)
|
MsgListener.__init__(self)
|
||||||
self.name = name
|
self.name = name
|
||||||
self.backend = None
|
|
||||||
|
|
||||||
def on_recv(self, msg):
|
def on_recv(self, msg):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def on_register(self, backend: ABackend):
|
|
||||||
self.backend = backend
|
|
||||||
|
|
||||||
def send(self, data: bytes):
|
def send(self, data: bytes):
|
||||||
self.backend.send(self.name, data)
|
pass
|
||||||
|
|
||||||
|
|||||||
+9
-8
@@ -6,7 +6,8 @@ from threading import Thread
|
|||||||
from queue import Queue
|
from queue import Queue
|
||||||
|
|
||||||
from msg.container import MsgContainer
|
from msg.container import MsgContainer
|
||||||
from transceiver import Transceiver
|
from transceiver import Transceiver, ATransceiver
|
||||||
|
|
||||||
from a_backend import ABackend
|
from a_backend import ABackend
|
||||||
|
|
||||||
from nmea.packetizer import NmeaPacketizer
|
from nmea.packetizer import NmeaPacketizer
|
||||||
@@ -25,8 +26,8 @@ class NetworkBackend(ABackend):
|
|||||||
self.thread = Thread(target=self.event_loop)
|
self.thread = Thread(target=self.event_loop)
|
||||||
self.loop_enable = True
|
self.loop_enable = True
|
||||||
|
|
||||||
def send(self, name: str, data: bytes):
|
def send(self, xcvr: ATransceiver, data: bytes):
|
||||||
sock = self.find_by_name(name)
|
sock = self.find_by_name(xcvr.name)
|
||||||
sock['queue'].put(data)
|
sock['queue'].put(data)
|
||||||
if sock is not None:
|
if sock is not None:
|
||||||
self.sel.modify(sock['sock'], selectors.EVENT_READ + selectors.EVENT_WRITE, None)
|
self.sel.modify(sock['sock'], selectors.EVENT_READ + selectors.EVENT_WRITE, None)
|
||||||
@@ -141,12 +142,12 @@ if __name__ == "__main__":
|
|||||||
Gga(grm, 'GN'),
|
Gga(grm, 'GN'),
|
||||||
]
|
]
|
||||||
ubx_rx_list = [
|
ubx_rx_list = [
|
||||||
UbxListener(Sig(), 0x01, 0x43),
|
UbxListener(Sig()),
|
||||||
UbxListener(Sat(), 0x01, 0x35),
|
UbxListener(Sat()),
|
||||||
UbxListener(RawX(), 0x02, 0x15),
|
UbxListener(RawX()),
|
||||||
|
|
||||||
UbxListener(UbxMsg(), 0x05, 0x01),
|
UbxListener(UbxMsg(0x05, 0x01)),
|
||||||
UbxListener(UbxMsg(), 0x05, 0x00),
|
UbxListener(UbxMsg(0x05, 0x00)),
|
||||||
]
|
]
|
||||||
|
|
||||||
# Topology
|
# Topology
|
||||||
|
|||||||
@@ -1,14 +1,21 @@
|
|||||||
from a_transceiver import ATransceiver
|
from a_transceiver import ATransceiver
|
||||||
from msg.container import MsgContainer
|
from msg.container import MsgContainer
|
||||||
from msg.talker import MsgTalker
|
from msg.talker import MsgTalker
|
||||||
|
from a_backend import ABackend
|
||||||
|
|
||||||
|
|
||||||
class Transceiver(ATransceiver, MsgTalker):
|
class Transceiver(ATransceiver, MsgTalker):
|
||||||
def __init__(self, name: str):
|
def __init__(self, name: str):
|
||||||
ATransceiver.__init__(self, name)
|
ATransceiver.__init__(self, name)
|
||||||
MsgTalker.__init__(self)
|
MsgTalker.__init__(self)
|
||||||
|
self.backend = None
|
||||||
|
|
||||||
def on_recv(self, msg: MsgContainer):
|
def on_recv(self, msg: MsgContainer):
|
||||||
msg.transceiver = self
|
msg.transceiver = self
|
||||||
self.call_listener(msg)
|
self.call_listener(msg)
|
||||||
|
|
||||||
|
def on_register(self, backend: ABackend):
|
||||||
|
self.backend = backend
|
||||||
|
|
||||||
|
def send(self, data: bytes):
|
||||||
|
self.backend.send(self, data)
|
||||||
|
|||||||
+5
-7
@@ -4,22 +4,20 @@ from ubx.ubx import frame_parse, frame_parse_hdr
|
|||||||
from ubx.messages.msg import UbxMsg
|
from ubx.messages.msg import UbxMsg
|
||||||
|
|
||||||
class UbxListener(MsgListener):
|
class UbxListener(MsgListener):
|
||||||
def __init__(self, parser: UbxMsg, mclass: int|None = None, mid: int|None = None):
|
def __init__(self, msg: UbxMsg):
|
||||||
MsgListener.__init__(self)
|
MsgListener.__init__(self)
|
||||||
self.parser = parser
|
self.msg = msg
|
||||||
self.mclass = mclass
|
|
||||||
self.mid = mid
|
|
||||||
|
|
||||||
def on_recv(self, msg: MsgContainer):
|
def on_recv(self, msg: MsgContainer):
|
||||||
data, hdr = frame_parse(msg.data)
|
data, hdr = frame_parse(msg.data)
|
||||||
msg_parsed = self.parser.from_bytes(data)
|
msg_parsed = self.msg.from_bytes(data)
|
||||||
print(f"{msg.source.name}:{hdr.mclass}:{hdr.mid}:data({len(data)}):{msg_parsed}")
|
print(f"{msg.source.name}:{hdr.mclass}:{hdr.mid}:data({len(data)}):{msg_parsed}")
|
||||||
|
|
||||||
def is_msg(self, msg: MsgContainer):
|
def is_msg(self, msg: MsgContainer):
|
||||||
hdr = frame_parse_hdr(msg.data)
|
hdr = frame_parse_hdr(msg.data)
|
||||||
if hdr is not None:
|
if hdr is not None:
|
||||||
if self.mclass is not None and self.mid is not None:
|
if self.msg.mclass is not None and self.msg.mid is not None:
|
||||||
return self.mclass == hdr.mclass and self.mid == hdr.mid
|
return self.msg.mclass == hdr.mclass and self.msg.mid == hdr.mid
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
|
|
||||||
|
|
||||||
class UbxMsg:
|
class UbxMsg:
|
||||||
|
def __init__(self, mclass: int, mid: int):
|
||||||
|
self.mclass = mclass
|
||||||
|
self.mid = mid
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_bytes(cls, data: bytes):
|
def from_bytes(cls, data: bytes):
|
||||||
|
|||||||
@@ -2,6 +2,9 @@ import struct
|
|||||||
from ubx.messages.msg import UbxMsg
|
from ubx.messages.msg import UbxMsg
|
||||||
|
|
||||||
class Sig(UbxMsg):
|
class Sig(UbxMsg):
|
||||||
|
def __init__(self):
|
||||||
|
UbxMsg.__init__(self, 0x01, 0x43)
|
||||||
|
|
||||||
class Group1:
|
class Group1:
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_bytes(cls, data: bytes):
|
def from_bytes(cls, data: bytes):
|
||||||
@@ -39,6 +42,9 @@ class Sig(UbxMsg):
|
|||||||
return obj.__dict__
|
return obj.__dict__
|
||||||
|
|
||||||
class Sat(UbxMsg):
|
class Sat(UbxMsg):
|
||||||
|
def __init__(self):
|
||||||
|
UbxMsg.__init__(self, 0x01, 0x35)
|
||||||
|
|
||||||
class Group1:
|
class Group1:
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_bytes(cls, data: bytes):
|
def from_bytes(cls, data: bytes):
|
||||||
|
|||||||
@@ -2,6 +2,9 @@ import struct
|
|||||||
from ubx.messages.msg import UbxMsg
|
from ubx.messages.msg import UbxMsg
|
||||||
|
|
||||||
class RawX(UbxMsg):
|
class RawX(UbxMsg):
|
||||||
|
def __init__(self):
|
||||||
|
UbxMsg.__init__(self, 0x02, 0x15)
|
||||||
|
|
||||||
class Group1:
|
class Group1:
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_bytes(cls, data: bytes):
|
def from_bytes(cls, data: bytes):
|
||||||
|
|||||||
+10
-4
@@ -6,21 +6,27 @@ from ubx.listener import UbxListener
|
|||||||
from threading import BoundedSemaphore
|
from threading import BoundedSemaphore
|
||||||
|
|
||||||
class UbxQuery(UbxListener):
|
class UbxQuery(UbxListener):
|
||||||
def __init__(self, transceiver: Transceiver, parser: UbxMsg, mclass: int|None = None, mid: int|None = None):
|
def __init__(self, transceiver: Transceiver, msg: UbxMsg):
|
||||||
UbxListener.__init__(self, parser, mclass, mid)
|
UbxListener.__init__(self, msg)
|
||||||
self.transceiver = transceiver
|
self.transceiver = transceiver
|
||||||
self.sema = BoundedSemaphore()
|
self.sema = BoundedSemaphore()
|
||||||
self.msg = UbxMsg()
|
|
||||||
|
|
||||||
def on_recv(self, msg: MsgContainer):
|
def on_recv(self, msg: MsgContainer):
|
||||||
if self.is_msg(msg):
|
if self.is_msg(msg):
|
||||||
data, hdr = frame_parse(msg.data)
|
data, hdr = frame_parse(msg.data)
|
||||||
msg_parsed = self.parser.from_bytes(data)
|
msg_parsed = self.msg.from_bytes(data)
|
||||||
self.msg = msg_parsed
|
self.msg = msg_parsed
|
||||||
self.sema.release()
|
self.sema.release()
|
||||||
|
|
||||||
|
def poll(self):
|
||||||
|
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):
|
def query(self, data: bytes):
|
||||||
frame = frame_create(0x01, 0x35, b'')
|
frame = frame_create(0x01, 0x35, b'')
|
||||||
self.transceiver.send(frame)
|
self.transceiver.send(frame)
|
||||||
self.sema.acquire()
|
self.sema.acquire()
|
||||||
print(self.msg)
|
print(self.msg)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user