keyboard_comm: add cache to bring settings api in line with others

main
Ilya Zhuravlev 2021-07-05 23:42:03 -04:00
parent 1ce89e49e5
commit 02043c8c11
1 changed files with 27 additions and 16 deletions

View File

@ -215,6 +215,7 @@ class Keyboard:
self.reload_keymap()
self.reload_macros()
self.reload_rgb()
self.reload_settings()
self.reload_dynamic()
def reload_layers(self):
@ -383,6 +384,29 @@ class Keyboard:
self.backlight_effect = self.usb_send(
self.dev, struct.pack(">BB", CMD_VIA_LIGHTING_GET_VALUE, QMK_BACKLIGHT_EFFECT), retries=20)[2]
def reload_settings(self):
self.settings = dict()
self.supported_settings = set()
if self.vial_protocol < 4:
return
cur = 0
while cur != 0xFFFF:
data = self.usb_send(self.dev, struct.pack("<BBH", CMD_VIA_VIAL_PREFIX, CMD_VIAL_QMK_SETTINGS_QUERY, cur),
retries=20)
for x in range(0, len(data), 2):
qsid = int.from_bytes(data[x:x+2], byteorder="little")
cur = max(cur, qsid)
if qsid != 0xFFFF:
self.supported_settings.add(qsid)
for qsid in self.supported_settings:
data = self.usb_send(self.dev, struct.pack("<BBH", CMD_VIA_VIAL_PREFIX, CMD_VIAL_QMK_SETTINGS_GET, qsid),
retries=20)
if data[0] != 0:
self.settings[qsid] = b""
else:
self.settings[qsid] = data[1:]
def reload_dynamic(self):
if self.vial_protocol < 4:
self.tap_dance_count = 0
@ -691,26 +715,13 @@ class Keyboard:
return [self.macro_deserialize(x) for x in macros]
def qmk_settings_query(self):
cur = 0
supported_settings = []
while cur != 0xFFFF:
data = self.usb_send(self.dev, struct.pack("<BBH", CMD_VIA_VIAL_PREFIX, CMD_VIAL_QMK_SETTINGS_QUERY, cur),
retries=20)
for x in range(0, len(data), 2):
qsid = int.from_bytes(data[x:x+2], byteorder="little")
cur = max(cur, qsid)
if qsid != 0xFFFF:
supported_settings.append(qsid)
return supported_settings
return self.supported_settings
def qmk_settings_get(self, qsid):
data = self.usb_send(self.dev, struct.pack("<BBH", CMD_VIA_VIAL_PREFIX, CMD_VIAL_QMK_SETTINGS_GET, qsid),
retries=20)
if data[0] != 0:
return b""
return data[1:]
return self.settings[qsid]
def qmk_settings_set(self, qsid, value):
self.settings[qsid] = value
data = self.usb_send(self.dev, struct.pack("<BBH", CMD_VIA_VIAL_PREFIX, CMD_VIAL_QMK_SETTINGS_SET, qsid) + value,
retries=20)
return data[0]