class VialKeyboard(VialDevice): def __init__(self, dev, sideload=False, via_stack=False): super().__init__(dev) self.via_id = str(dev["vendor_id"] * 65536 + dev["product_id"]) self.sideload = sideload self.via_stack = via_stack self.keyboard = None def open(self, override_json=None): super().open(override_json) self.keyboard = Keyboard(self.dev) self.keyboard.reload(override_json) def title(self): s = "{} {}".format(self.desc["manufacturer_string"], self.desc["product_string"]) if self.sideload: s += " [sideload]" elif self.via_stack: s += " [VIA]" return s def get_uid(self): try: super().open() except OSError: return b"" self.send(b"\xFE\x00" + b"\x00" * 30) data = self.recv(MSG_LEN, timeout_ms=500) super().close() return data[4:12]
def prepare_keyboard(layout, keymap, encoders=None): dev = SimulatedDevice() dev.expect_keyboard_id(0) dev.expect_layout(layout) dev.expect_layers(len(keymap)) dev.expect_keymap(keymap) if encoders is not None: dev.expect_encoders(encoders) # macro count dev.expect("0C", "0C00") # macro buffer size dev.expect("0D", "0D0000") kb = Keyboard(dev, dev.sim_send) kb.reload() return kb, dev