Browse Source

Tidy up broadcast in python client

zvecr 2 years ago
parent
commit
87fd4b42f5

+ 1 - 0
data/templates/xap/client/python/types.py.j2

@@ -25,6 +25,7 @@ class {{ name }}(namedtuple('{{ name }}', '{{ members }}')):
 {% set type_definitions = [
   {'name':'XAPRequest', 'members': 'token length data', 'fmt':'<HB61s'},
   {'name':'XAPResponse', 'members': 'token flags length data', 'fmt':'<HBB60s'},
+  {'name':'XAPBroadcast', 'members': 'token event length data', 'fmt':'<HBB60s'},
   {'name':'XAPConfigBacklight', 'members': 'enable mode val', 'fmt':'<BBB'},
   {'name':'XAPConfigRgblight', 'members': 'enable mode hue sat val speed', 'fmt':'<BBBBBB'},
   {'name':'XAPConfigRgbMatrix', 'members': 'enable mode hue sat val speed flags', 'fmt':'<BBBBBBB'}

+ 1 - 1
data/xap/xap_0.1.0.hjson

@@ -40,7 +40,7 @@
     type_docs: {
         bool:
             '''
-            Data type that contains values 0 and 1. Implementaed as an alias of `u8`.
+            Data type that contains values 0 and 1. Implemented as an alias of `u8`.
             '''
         u64:
             '''

+ 3 - 3
lib/python/xap_client/device.py

@@ -10,7 +10,7 @@ from typing import Optional
 from struct import pack, unpack
 from platform import platform
 
-from .types import XAPSecureStatus, XAPFlags, XAPRequest, XAPResponse
+from .types import XAPSecureStatus, XAPFlags, XAPRequest, XAPResponse, XAPBroadcast
 from .routes import XAPRoutes, XAPRouteError
 
 
@@ -116,8 +116,8 @@ class XAPDeviceBase:
         while not hasattr(event, '_ret'):
             event.wait(timeout=0.25)
 
-        r = XAPResponse.from_bytes(event._ret)
-        return (r.flags, r.data[:r.length])
+        r = XAPBroadcast.from_bytes(event._ret)
+        return (r.event, r.data[:r.length])
 
 
 class XAPDevice(XAPDeviceBase):

+ 14 - 0
lib/python/xap_client/types.py

@@ -59,6 +59,20 @@ class XAPResponse(namedtuple('XAPResponse', 'token flags length data')):
         return self.fmt.pack(*list(self))
 
 
+class XAPBroadcast(namedtuple('XAPBroadcast', 'token event length data')):
+    fmt = Struct('<HBB60s')
+
+    def __new__(cls, *args):
+        return super().__new__(cls, *args)
+
+    @classmethod
+    def from_bytes(cls, data):
+        return cls._make(cls.fmt.unpack(data))
+
+    def to_bytes(self):
+        return self.fmt.pack(*list(self))
+
+
 class XAPConfigBacklight(namedtuple('XAPConfigBacklight', 'enable mode val')):
     fmt = Struct('<BBB')