diff --git a/src/main/python/keyboard_comm.py b/src/main/python/keyboard_comm.py index 6d3e775..82772f1 100644 --- a/src/main/python/keyboard_comm.py +++ b/src/main/python/keyboard_comm.py @@ -14,6 +14,8 @@ CMD_VIA_GET_KEYCODE = 0x04 CMD_VIA_SET_KEYCODE = 0x05 CMD_VIA_MACRO_GET_COUNT = 0x0C CMD_VIA_MACRO_GET_BUFFER_SIZE = 0x0D +CMD_VIA_MACRO_GET_BUFFER = 0x0E +CMD_VIA_MACRO_SET_BUFFER = 0x0F CMD_VIA_GET_LAYER_COUNT = 0x11 CMD_VIA_VIAL_PREFIX = 0xFE @@ -47,6 +49,7 @@ class Keyboard: self.sideload = False self.macro_count = 0 self.macro_memory = 0 + self.macro = b"" self.vial_protocol = self.keyboard_id = -1 @@ -173,6 +176,14 @@ class Keyboard: data = self.usb_send(self.dev, struct.pack("B", CMD_VIA_MACRO_GET_BUFFER_SIZE)) self.macro_memory = struct.unpack(">H", data[1:3])[0] + self.macro = b"" + # now retrieve the entire buffer, 28 bytes at a time, as that is what fits into a packet + chunk = 28 + for x in range(0, self.macro_memory, chunk): + sz = min(chunk, self.macro_memory - x) + data = self.usb_send(self.dev, struct.pack(">BHB", CMD_VIA_MACRO_GET_BUFFER, x, sz)) + self.macro += data[4:4+sz] + def set_key(self, layer, row, col, code): key = (layer, row, col) if self.layout[key] != code: