From 9b9301163718f6755c0cccab420825c52f63261f Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Thu, 8 Jul 2021 19:27:40 -0400 Subject: [PATCH] vialrgb: initial --- src/main/python/keyboard_comm.py | 25 +++++++++++++- src/main/python/rgb_configurator.py | 51 +++++++++++++++++++++++++++-- 2 files changed, 73 insertions(+), 3 deletions(-) diff --git a/src/main/python/keyboard_comm.py b/src/main/python/keyboard_comm.py index 0eaf7ff..d1ee87d 100644 --- a/src/main/python/keyboard_comm.py +++ b/src/main/python/keyboard_comm.py @@ -41,6 +41,10 @@ QMK_RGBLIGHT_EFFECT = 0x81 QMK_RGBLIGHT_EFFECT_SPEED = 0x82 QMK_RGBLIGHT_COLOR = 0x83 +VIALRGB_GET_MODE = 0x40 + +VIALRGB_SET_MODE = 0x40 + CMD_VIAL_GET_KEYBOARD_ID = 0x00 CMD_VIAL_GET_SIZE = 0x01 CMD_VIAL_GET_DEFINITION = 0x02 @@ -194,10 +198,13 @@ class Keyboard: self.vibl = False self.custom_keycodes = None - self.lighting_qmk_rgblight = self.lighting_qmk_backlight = False + self.lighting_qmk_rgblight = self.lighting_qmk_backlight = self.lighting_vialrgb = False self.underglow_brightness = self.underglow_effect = self.underglow_effect_speed = -1 self.backlight_brightness = self.backlight_effect = -1 self.underglow_color = (0, 0) + # vialrgb + self.rgb_mode = self.rgb_speed = -1 + self.rgb_hsv = (0, 0, 0) self.via_protocol = self.vial_protocol = self.keyboard_id = -1 @@ -364,6 +371,7 @@ class Keyboard: if "lighting" in self.definition: self.lighting_qmk_rgblight = self.definition["lighting"] in ["qmk_rgblight", "qmk_backlight_rgblight"] self.lighting_qmk_backlight = self.definition["lighting"] in ["qmk_backlight", "qmk_backlight_rgblight"] + self.lighting_vialrgb = self.definition["lighting"] == "vialrgb" if self.lighting_qmk_rgblight: self.underglow_brightness = self.usb_send( @@ -383,6 +391,12 @@ class Keyboard: self.backlight_effect = self.usb_send( self.dev, struct.pack(">BB", CMD_VIA_LIGHTING_GET_VALUE, QMK_BACKLIGHT_EFFECT), retries=20)[2] + if self.lighting_vialrgb: + data = self.usb_send(self.dev, struct.pack("BB", CMD_VIA_LIGHTING_GET_VALUE, VIALRGB_GET_MODE))[2:] + self.rgb_mode = data[0] + self.rgb_speed = data[1] + self.rgb_hsv = (data[2], data[3], data[4]) + def reload_settings(self): self.settings = dict() self.supported_settings = set() @@ -782,6 +796,15 @@ class Keyboard: self.usb_send(self.dev, struct.pack("BBBB", CMD_VIA_VIAL_PREFIX, CMD_VIAL_DYNAMIC_ENTRY_OP, DYNAMIC_VIAL_COMBO_SET, idx) + serialized, retries=20) + def _vialrgb_set_mode(self): + self.usb_send(self.dev, struct.pack("BBBBBBB", CMD_VIA_LIGHTING_SET_VALUE, VIALRGB_SET_MODE, + self.rgb_mode, self.rgb_speed, + self.rgb_hsv[0], self.rgb_hsv[1], self.rgb_hsv[2])) + + def set_vialrgb_brightness(self, value): + self.rgb_hsv = (self.rgb_hsv[0], self.rgb_hsv[1], value) + self._vialrgb_set_mode() + class DummyKeyboard(Keyboard): diff --git a/src/main/python/rgb_configurator.py b/src/main/python/rgb_configurator.py index 33475b5..a747e12 100644 --- a/src/main/python/rgb_configurator.py +++ b/src/main/python/rgb_configurator.py @@ -240,6 +240,50 @@ class QmkBacklightHandler(BasicHandler): self.device.keyboard.set_qmk_backlight_effect(int(checked)) +class VialRGBHandler(BasicHandler): + + def __init__(self, container): + super().__init__(container) + + row = container.rowCount() + + self.lbl_rgb_brightness = QLabel(tr("RGBConfigurator", "RGB Brightness")) + container.addWidget(self.lbl_rgb_brightness, row + 1, 0) + self.rgb_brightness = QSlider(QtCore.Qt.Horizontal) + self.rgb_brightness.setMinimum(0) + self.rgb_brightness.setMaximum(255) + self.rgb_brightness.valueChanged.connect(self.on_rgb_brightness_changed) + container.addWidget(self.rgb_brightness, row + 1, 1) + + self.widgets = [self.lbl_rgb_brightness, self.rgb_brightness] + + def on_rgb_brightness_changed(self, value): + self.device.keyboard.set_vialrgb_brightness(value) + + def show(self): + for w in self.widgets: + w.show() + + def hide(self): + for w in self.widgets: + w.hide() + + def block_signals(self): + for w in self.widgets: + w.blockSignals(True) + + def unblock_signals(self): + for w in self.widgets: + w.blockSignals(False) + + def update_from_keyboard(self): + print("hsv", self.device.keyboard.rgb_hsv) + self.rgb_brightness.setValue(self.device.keyboard.rgb_hsv[2]) + + def valid(self): + return isinstance(self.device, VialKeyboard) and self.device.keyboard.lighting_vialrgb + + class RGBConfigurator(BasicEditor): def __init__(self): @@ -258,7 +302,9 @@ class RGBConfigurator(BasicEditor): self.handler_backlight.update.connect(self.update_from_keyboard) self.handler_rgblight = QmkRgblightHandler(self.container) self.handler_rgblight.update.connect(self.update_from_keyboard) - self.handlers = [self.handler_backlight, self.handler_rgblight] + self.handler_vialrgb = VialRGBHandler(self.container) + self.handler_vialrgb.update.connect(self.update_from_keyboard) + self.handlers = [self.handler_backlight, self.handler_rgblight, self.handler_vialrgb] self.addStretch() buttons = QHBoxLayout() @@ -273,7 +319,8 @@ class RGBConfigurator(BasicEditor): def valid(self): return isinstance(self.device, VialKeyboard) and \ - (self.device.keyboard.lighting_qmk_rgblight or self.device.keyboard.lighting_qmk_backlight) + (self.device.keyboard.lighting_qmk_rgblight or self.device.keyboard.lighting_qmk_backlight + or self.device.keyboard.lighting_vialrgb) def block_signals(self): for h in self.handlers: