From cb4dac9d6b2964b0ec2e9fb627d0669c4b17be62 Mon Sep 17 00:00:00 2001 From: Lucas Oskorep Date: Tue, 20 Sep 2022 01:38:32 -0400 Subject: [PATCH] adding macro_utils and then implementing them in the default numpad app. --- macropad_apps/python/numpad.py | 78 +++++++++++++++++++--------- macropad_os/app_utils/__init__.py | 3 +- macropad_os/app_utils/key.py | 6 --- macropad_os/app_utils/macro_utils.py | 20 +++++++ 4 files changed, 76 insertions(+), 31 deletions(-) delete mode 100644 macropad_os/app_utils/key.py create mode 100644 macropad_os/app_utils/macro_utils.py diff --git a/macropad_apps/python/numpad.py b/macropad_apps/python/numpad.py index 4429de3..db46493 100644 --- a/macropad_apps/python/numpad.py +++ b/macropad_apps/python/numpad.py @@ -8,25 +8,12 @@ from adafruit_hid.keycode import Keycode from rainbowio import colorwheel from macropad_os import App -from macropad_os.app_utils import rgb_from_int +from macropad_os.app_utils import rgb_from_int, MacroSet, Macro +COLOR_UPDATE_RATE = 33000000 # .033 seconds -labels = [ - "7", "8", "9", - "4", "5", "6", - "1", "2", "3", - "0", ".", "SHIFT" -] +SWAP_MODE = lambda x: not x -modified_labels = [ - "<", ">", "&", - "(", ")", "%", - "/", "+", "-", - "*", "=", "SHIFT" -] - - -COLOR_UPDATE_RATE = 33000000 # .033 seconds class NumpadApp(App): @@ -39,6 +26,40 @@ class NumpadApp(App): self.title = "Numpad" self.modifier_pressed = False self.last_color_update = 0 + self.modifier_pressed = False + self.macros = MacroSet( + [ + Macro("7", Keycode.KEYPAD_SEVEN), Macro("8", Keycode.KEYPAD_EIGHT), Macro("9", Keycode.KEYPAD_NINE), + Macro("4", Keycode.KEYPAD_FOUR), Macro("5", Keycode.KEYPAD_FIVE), Macro("6", Keycode.KEYPAD_SIX), + Macro("1", Keycode.KEYPAD_ONE), Macro("2", Keycode.KEYPAD_TWO), Macro("3", Keycode.KEYPAD_THREE), + Macro("0", Keycode.KEYPAD_ZERO), Macro(".", Keycode.KEYPAD_PERIOD), + Macro("Mod", self.swap_modifier, released=self.swap_modifier) + ], + encoder_up=Macro("+", Keycode.KEYPAD_PLUS), + encoder_down=Macro("-", Keycode.KEYPAD_MINUS), + ) + self.mod_macros = MacroSet([ + Macro("<", Keycode.LEFT_ARROW), Macro(">", Keycode.RIGHT_ARROW), Macro("&", Keycode.SHIFT, Keycode.SEVEN), + + Macro("(", Keycode.SHIFT, Keycode.NINE), Macro(")", Keycode.SHIFT, Keycode.ZERO),Macro("%", Keycode.SHIFT, Keycode.FIVE), + + Macro("/", Keycode.FORWARD_SLASH), Macro("+", Keycode.KEYPAD_PLUS), Macro("-", Keycode.MINUS), + + Macro("*", Keycode.SHIFT, Keycode.EIGHT), Macro("=", Keycode.EQUALS), Macro("Mod", self.swap_modifier, released=self.swap_modifier) + ], + encoder_up=Macro("+", Keycode.KEYPAD_PLUS), + encoder_down=Macro("-", Keycode.KEYPAD_MINUS), + ) + self.active_macros = self.macros + + def swap_modifier(self): + self.modifier_pressed = not self.modifier_pressed + if self.modifier_pressed: + self.active_macros = self.mod_macros + else: + self.active_macros = self.macros + for i in range(12): + self.labels[i].text = self.active_macros.get_macro_from_key(i).name def on_start(self): print("on start from the app!") @@ -46,7 +67,7 @@ class NumpadApp(App): self.set_title(self.title) self.lit_keys = [True] * 12 for i in range(12): - self.labels.append(Label(terminalio.FONT, text=labels[i])) + self.labels.append(Label(terminalio.FONT, text=self.active_macros.get_macro_from_key(i).name)) for index in range(12): x = index % 3 y = index // 3 @@ -82,12 +103,21 @@ class NumpadApp(App): colors.append((0, 0, 0)) self.set_colors(colors) - def process_keys_pressed_callback(self, keyevent): - print(keyevent) - self.keyboard.send(Keycode.SHIFT,Keycode.SHIFT,Keycode.SHIFT, Keycode.A) + def process_keys_pressed_callback(self, key_event): + for code in self.active_macros.get_macro_from_key(key_event).codes: + if code: + if callable(code): + code() + else: + self.keyboard.send(code) - def process_keys_released_callback(self, keyevent): - print(keyevent) + def process_keys_released_callback(self, key_event): + release_action = self.active_macros.get_macro_from_key(key_event).released + if release_action: + if callable(release_action): + release_action() + else: + self.keyboard.send(release_action) - def process_enbcoder_changed(self, keyevent): - print(keyevent) \ No newline at end of file + def process_enbcoder_changed(self, key_event): + print(key_event) diff --git a/macropad_os/app_utils/__init__.py b/macropad_os/app_utils/__init__.py index ec5c657..ed7bcf3 100644 --- a/macropad_os/app_utils/__init__.py +++ b/macropad_os/app_utils/__init__.py @@ -1,2 +1,3 @@ from .static_lighting import * -from .helpers import * \ No newline at end of file +from .helpers import * +from .macro_utils import * \ No newline at end of file diff --git a/macropad_os/app_utils/key.py b/macropad_os/app_utils/key.py deleted file mode 100644 index 163f4a6..0000000 --- a/macropad_os/app_utils/key.py +++ /dev/null @@ -1,6 +0,0 @@ -from adafruit_hid.keycode import Keycode - -class Key(object): - def __init__(self, name, keycode:Keycodes): - self.name = name - self.code = keycode \ No newline at end of file diff --git a/macropad_os/app_utils/macro_utils.py b/macropad_os/app_utils/macro_utils.py new file mode 100644 index 0000000..571a965 --- /dev/null +++ b/macropad_os/app_utils/macro_utils.py @@ -0,0 +1,20 @@ +class Macro(object): + def __init__(self, name, *codes, released = None): + self.name = name + self.codes = codes + self.released = released + + +class MacroSet(object): + def __init__(self, key_macros: [Macro], encoder_up: Macro, encoder_down: Macro): + if len(key_macros) != 12: + raise ValueError("12 keys must be passed to a keyset") + self._key_macros = key_macros + self.encoder_up = encoder_up + self.encoder_down = encoder_down + + def get_macro_from_key(self, key_index) -> Macro: + if key_index < 0 or key_index > 11: + raise ValueError("Invalid key index") + return self._key_macros[key_index] +