macro_recorder: read macro memory/count from the keyboard
parent
63fe1aa6f6
commit
d4e3d1c225
|
|
@ -12,6 +12,8 @@ CMD_VIA_GET_KEYBOARD_VALUE = 0x02
|
|||
CMD_VIA_SET_KEYBOARD_VALUE = 0x03
|
||||
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_GET_LAYER_COUNT = 0x11
|
||||
CMD_VIA_VIAL_PREFIX = 0xFE
|
||||
|
||||
|
|
@ -43,6 +45,8 @@ class Keyboard:
|
|||
self.keys = []
|
||||
self.encoders = []
|
||||
self.sideload = False
|
||||
self.macro_count = 0
|
||||
self.macro_memory = 0
|
||||
|
||||
self.vial_protocol = self.keyboard_id = -1
|
||||
|
||||
|
|
@ -57,6 +61,7 @@ class Keyboard:
|
|||
self.reload_layout(sideload_json)
|
||||
self.reload_layers()
|
||||
self.reload_keymap()
|
||||
self.reload_macros()
|
||||
|
||||
def reload_layers(self):
|
||||
""" Get how many layers the keyboard has """
|
||||
|
|
@ -161,6 +166,13 @@ class Keyboard:
|
|||
data = self.usb_send(self.dev, struct.pack("BB", CMD_VIA_GET_KEYBOARD_VALUE, VIA_LAYOUT_OPTIONS))
|
||||
self.layout_options = struct.unpack(">I", data[2:6])[0]
|
||||
|
||||
def reload_macros(self):
|
||||
""" Loads macro information from the keyboard """
|
||||
data = self.usb_send(self.dev, struct.pack("B", CMD_VIA_MACRO_GET_COUNT))
|
||||
self.macro_count = data[1]
|
||||
data = self.usb_send(self.dev, struct.pack(">H", CMD_VIA_MACRO_GET_BUFFER_SIZE))
|
||||
self.macro_memory = struct.unpack(">H", data[1:3])[0]
|
||||
|
||||
def set_key(self, layer, row, col, code):
|
||||
key = (layer, row, col)
|
||||
if self.layout[key] != code:
|
||||
|
|
|
|||
|
|
@ -132,8 +132,11 @@ class MacroRecorder(BasicEditor):
|
|||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
self.keyboard = None
|
||||
|
||||
self.keystrokes = []
|
||||
self.macro_tabs = []
|
||||
self.macro_tab_w = []
|
||||
|
||||
self.recorder = LinuxRecorder()
|
||||
self.recorder.keystroke.connect(self.on_keystroke)
|
||||
|
|
@ -152,7 +155,7 @@ class MacroRecorder(BasicEditor):
|
|||
self.macro_tabs.append(tab)
|
||||
w = QWidget()
|
||||
w.setLayout(tab)
|
||||
self.tabs.addTab(w, "Macro {}".format(x + 1))
|
||||
self.macro_tab_w.append(w)
|
||||
|
||||
self.lbl_memory = QLabel()
|
||||
|
||||
|
|
@ -165,8 +168,6 @@ class MacroRecorder(BasicEditor):
|
|||
self.addWidget(self.tabs)
|
||||
self.addLayout(buttons)
|
||||
|
||||
self.on_change()
|
||||
|
||||
def valid(self):
|
||||
return isinstance(self.device, VialKeyboard)
|
||||
|
||||
|
|
@ -174,6 +175,15 @@ class MacroRecorder(BasicEditor):
|
|||
super().rebuild(device)
|
||||
if not self.valid():
|
||||
return
|
||||
self.keyboard = self.device.keyboard
|
||||
|
||||
# only show the number of macro editors that keyboard supports
|
||||
for x in range(self.tabs.count()):
|
||||
self.tabs.removeTab(x)
|
||||
for x, w in enumerate(self.macro_tab_w[:self.keyboard.macro_count]):
|
||||
self.tabs.addTab(w, "Macro {}".format(x + 1))
|
||||
|
||||
self.on_change()
|
||||
|
||||
def on_record(self, tab, append):
|
||||
self.recording_tab = tab
|
||||
|
|
@ -181,7 +191,7 @@ class MacroRecorder(BasicEditor):
|
|||
|
||||
self.recording_tab.pre_record()
|
||||
|
||||
for x, w in enumerate(self.macro_tabs):
|
||||
for x, w in enumerate(self.macro_tabs[:self.keyboard.macro_count]):
|
||||
if tab != w:
|
||||
self.tabs.tabBar().setTabEnabled(x, False)
|
||||
|
||||
|
|
@ -193,7 +203,7 @@ class MacroRecorder(BasicEditor):
|
|||
self.recorder.stop()
|
||||
|
||||
def on_stop(self):
|
||||
for x in range(len(self.macro_tabs)):
|
||||
for x in range(self.keyboard.macro_count):
|
||||
self.tabs.tabBar().setTabEnabled(x, True)
|
||||
|
||||
if not self.recording_append:
|
||||
|
|
@ -216,4 +226,4 @@ class MacroRecorder(BasicEditor):
|
|||
memory = 0
|
||||
for x, macro in enumerate(self.macro_tabs):
|
||||
memory += len(macro.serialize())
|
||||
self.lbl_memory.setText("Memory used by macros: {}/345".format(memory))
|
||||
self.lbl_memory.setText("Memory used by macros: {}/{}".format(memory, self.keyboard.macro_memory))
|
||||
|
|
|
|||
Loading…
Reference in New Issue