"proto_handled",
"parse_message",
"probe_buffer",
- "proto_name",
"DecodeError",
"Respond",
)
-PROTO_PREFIX = "ZX:"
+PROTO_PREFIX: str = "ZX:"
### Deframer ###
# Overridden in subclasses, otherwise make empty payload
return b""
+ @classmethod
+ def proto_name(cls) -> str:
+ """Name of the command as used externally"""
+ return (PROTO_PREFIX + cls.__name__)[:16]
+
@property
def packed(self) -> bytes:
payload = self.encode()
def rectified(self) -> CoordReport: # JSON-able dict
return CoordReport(
devtime=str(self.devtime),
- battery_percentage=-1,
- accuracy=-1.0,
- altitude=-1.0,
+ battery_percentage=None,
+ accuracy=None,
+ altitude=None,
speed=self.speed,
direction=self.heading,
latitude=self.latitude,
def rectified(self) -> HintReport:
return HintReport(
devtime=str(self.devtime),
- battery_percentage=-1,
+ battery_percentage=None,
mcc=self.mcc,
mnc=self.mnc,
gsm_cells=self.gsm_cells,
return proto.startswith(PROTO_PREFIX)
-def proto_name(obj: Union[Type[GPS303Pkt], GPS303Pkt]) -> str:
- return PROTO_PREFIX + (
- obj.__class__.__name__ if isinstance(obj, GPS303Pkt) else obj.__name__
- )
-
-
def proto_of_message(packet: bytes) -> str:
- return proto_name(CLASSES.get(packet[1], UNKNOWN))
+ return CLASSES.get(packet[1], UNKNOWN).proto_name()
def imei_from_packet(packet: bytes) -> Optional[str]:
def exposed_protos() -> List[Tuple[str, bool]]:
return [
- (proto_name(cls)[:16], cls.RESPOND is Respond.EXT)
+ (cls.proto_name(), cls.RESPOND is Respond.EXT)
for cls in CLASSES.values()
if hasattr(cls, "rectified")
]