]> average.org Git - loctrkd.git/blobdiff - loctrkd/beesure.py
beesure: decode wifi aps
[loctrkd.git] / loctrkd / beesure.py
index a0d802bb1df306e888e87218028241210ffd5695..e535b76d1c56420c72b77433ee8078f7a8a5d61e 100755 (executable)
@@ -26,9 +26,9 @@ __all__ = (
     "class_by_prefix",
     "enframe",
     "inline_response",
+    "proto_handled",
     "parse_message",
     "probe_buffer",
-    "proto_by_name",
     "proto_name",
     "DecodeError",
     "Respond",
@@ -320,7 +320,10 @@ class LK(BeeSurePkt):
 
 class CONFIG(BeeSurePkt):
     PROTO = "CONFIG"
-    RESPOND = Respond.INL
+
+
+class ICCID(BeeSurePkt):
+    PROTO = "ICCID"
 
 
 class UD(BeeSurePkt):
@@ -348,11 +351,12 @@ class UD(BeeSurePkt):
         ) = args[:17]
         rest_args = args[17:]
         self.base_stations_number = int(rest_args[0])
+        # ???, mcc, net, (area, cell, strength)*
         self.base_stations = rest_args[1 : 4 + 3 * self.base_stations_number]
         rest_args = rest_args[3 + 3 * self.base_stations_number + 1 :]
         self.wifi_ap_number = int(rest_args[0])
-        self.wifi_ap = rest_args[1 : self.wifi_ap_number]
-        # rest_args = rest_args[self_wifi_ap_number+1:]
+        # (SSID, MAC, strength)*
+        self.wifi_ap = rest_args[1 : 1 + 3 * self.wifi_ap_number]
         self.positioning_accuracy = rest_args[-1]
 
 
@@ -405,16 +409,16 @@ def class_by_prefix(
     return CLASSES[proto]
 
 
+def proto_handled(proto: str) -> bool:
+    return proto.startswith(PROTO_PREFIX)
+
+
 def proto_name(obj: Union[MetaPkt, BeeSurePkt]) -> str:
     return PROTO_PREFIX + (
         obj.__class__.__name__ if isinstance(obj, BeeSurePkt) else obj.__name__
     )
 
 
-def proto_by_name(name: str) -> str:
-    return PROTO_PREFIX + PROTOS.get(name, "UNKNOWN")
-
-
 def proto_of_message(packet: bytes) -> str:
     return PROTO_PREFIX + packet[20:-1].split(b",")[0].decode()