keyboard_comm: add cache to bring settings api in line with others
parent
1ce89e49e5
commit
02043c8c11
|
|
@ -215,6 +215,7 @@ class Keyboard:
|
||||||
self.reload_keymap()
|
self.reload_keymap()
|
||||||
self.reload_macros()
|
self.reload_macros()
|
||||||
self.reload_rgb()
|
self.reload_rgb()
|
||||||
|
self.reload_settings()
|
||||||
self.reload_dynamic()
|
self.reload_dynamic()
|
||||||
|
|
||||||
def reload_layers(self):
|
def reload_layers(self):
|
||||||
|
|
@ -383,6 +384,29 @@ class Keyboard:
|
||||||
self.backlight_effect = self.usb_send(
|
self.backlight_effect = self.usb_send(
|
||||||
self.dev, struct.pack(">BB", CMD_VIA_LIGHTING_GET_VALUE, QMK_BACKLIGHT_EFFECT), retries=20)[2]
|
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):
|
def reload_dynamic(self):
|
||||||
if self.vial_protocol < 4:
|
if self.vial_protocol < 4:
|
||||||
self.tap_dance_count = 0
|
self.tap_dance_count = 0
|
||||||
|
|
@ -691,26 +715,13 @@ class Keyboard:
|
||||||
return [self.macro_deserialize(x) for x in macros]
|
return [self.macro_deserialize(x) for x in macros]
|
||||||
|
|
||||||
def qmk_settings_query(self):
|
def qmk_settings_query(self):
|
||||||
cur = 0
|
return self.supported_settings
|
||||||
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
|
|
||||||
|
|
||||||
def qmk_settings_get(self, qsid):
|
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),
|
return self.settings[qsid]
|
||||||
retries=20)
|
|
||||||
if data[0] != 0:
|
|
||||||
return b""
|
|
||||||
return data[1:]
|
|
||||||
|
|
||||||
def qmk_settings_set(self, qsid, value):
|
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,
|
data = self.usb_send(self.dev, struct.pack("<BBH", CMD_VIA_VIAL_PREFIX, CMD_VIAL_QMK_SETTINGS_SET, qsid) + value,
|
||||||
retries=20)
|
retries=20)
|
||||||
return data[0]
|
return data[0]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue