diff --git a/data/constants/led_matrix_0.0.1.json b/data/constants/led_matrix_0.0.1.json new file mode 100644 index 00000000000..89373f58c2c --- /dev/null +++ b/data/constants/led_matrix_0.0.1.json @@ -0,0 +1,80 @@ +{ + "groups": { + "reactive": {} + }, + "effects": { + "0x01": { + "key": "SOLID" + }, + "0x02": { + "key": "ALPHAS_MODS" + }, + "0x03": { + "key": "BREATHING" + }, + "0x04": { + "key": "BAND" + }, + "0x05": { + "key": "BAND_PINWHEEL" + }, + "0x06": { + "key": "BAND_SPIRAL" + }, + "0x07": { + "key": "CYCLE_LEFT_RIGHT" + }, + "0x08": { + "key": "CYCLE_UP_DOWN" + }, + "0x09": { + "key": "CYCLE_OUT_IN" + }, + "0x0A": { + "key": "DUAL_BEACON" + }, + "0x0B": { + "key": "WAVE_LEFT_RIGHT" + }, + "0x0C": { + "key": "WAVE_UP_DOWN" + }, + + "0x0D": { + "key": "SOLID_REACTIVE_SIMPLE", + "group": "reactive" + }, + "0x0E": { + "key": "SOLID_REACTIVE_WIDE", + "group": "reactive" + }, + "0x0F": { + "key": "SOLID_REACTIVE_MULTIWIDE", + "group": "reactive" + }, + "0x10": { + "key": "SOLID_REACTIVE_CROSS", + "group": "reactive" + }, + "0x11": { + "key": "SOLID_REACTIVE_MULTICROSS", + "group": "reactive" + }, + "0x12": { + "key": "SOLID_REACTIVE_NEXUS", + "group": "reactive" + }, + "0x13": { + "key": "SOLID_REACTIVE_MULTINEXUS", + "group": "reactive" + }, + "0x14": { + "key": "SOLID_SPLASH", + "group": "reactive" + }, + "0x15": { + "key": "SOLID_MULTISPLASH", + "group": "reactive" + } + } +} diff --git a/data/constants/rgb_matrix_0.0.1.json b/data/constants/rgb_matrix_0.0.1.json new file mode 100644 index 00000000000..51c1b72cb8f --- /dev/null +++ b/data/constants/rgb_matrix_0.0.1.json @@ -0,0 +1,156 @@ +{ + "groups": { + "framebuffer": {}, + "reactive": {} + }, + "effects": { + "0x01": { + "key": "SOLID_COLOR" + }, + "0x02": { + "key": "ALPHAS_MODS" + }, + "0x03": { + "key": "GRADIENT_UP_DOWN" + }, + "0x04": { + "key": "GRADIENT_LEFT_RIGHT" + }, + "0x05": { + "key": "BREATHING" + }, + "0x06": { + "key": "BAND_SAT" + }, + "0x07": { + "key": "BAND_VAL" + }, + "0x08": { + "key": "BAND_PINWHEEL_SAT" + }, + "0x09": { + "key": "BAND_PINWHEEL_VAL" + }, + "0x0A": { + "key": "BAND_SPIRAL_SAT" + }, + "0x0B": { + "key": "BAND_SPIRAL_VAL" + }, + "0x0C": { + "key": "CYCLE_ALL" + }, + "0x0D": { + "key": "CYCLE_LEFT_RIGHT" + }, + "0x0E": { + "key": "CYCLE_UP_DOWN" + }, + "0x0F": { + "key": "CYCLE_OUT_IN" + }, + "0x10": { + "key": "CYCLE_OUT_IN_DUAL" + }, + "0x11": { + "key": "RAINBOW_MOVING_CHEVRON" + }, + "0x12": { + "key": "CYCLE_PINWHEEL" + }, + "0x13": { + "key": "CYCLE_SPIRAL" + }, + "0x14": { + "key": "DUAL_BEACON" + }, + "0x15": { + "key": "RAINBOW_BEACON" + }, + "0x16": { + "key": "RAINBOW_PINWHEELS" + }, + "0x17": { + "key": "RAINDROPS" + }, + "0x18": { + "key": "JELLYBEAN_RAINDROPS" + }, + "0x19": { + "key": "HUE_BREATHING" + }, + "0x1A": { + "key": "HUE_PENDULUM" + }, + "0x1B": { + "key": "HUE_WAVE" + }, + "0x1C": { + "key": "PIXEL_FRACTAL" + }, + "0x1D": { + "key": "PIXEL_FLOW" + }, + "0x1E": { + "key": "PIXEL_RAIN" + }, + + "0x1F": { + "key": "TYPING_HEATMAP", + "group": "framebuffer" + }, + "0x20": { + "key": "DIGITAL_RAIN", + "group": "framebuffer" + }, + + "0x21": { + "key": "SOLID_REACTIVE_SIMPLE", + "group": "reactive" + }, + "0x22": { + "key": "RGB_MATRIX_SOLID_REACTIVE", + "group": "reactive" + }, + "0x23": { + "key": "RGB_MATRIX_SOLID_REACTIVE_WIDE", + "group": "reactive" + }, + "0x24": { + "key": "SOLID_REACTIVE_MULTIWIDE", + "group": "reactive" + }, + "0x25": { + "key": "SOLID_REACTIVE_CROSS", + "group": "reactive" + }, + "0x26": { + "key": "SOLID_REACTIVE_MULTICROSS", + "group": "reactive" + }, + "0x27": { + "key": "SOLID_REACTIVE_NEXUS", + "group": "reactive" + }, + "0x28": { + "key": "SOLID_REACTIVE_MULTINEXUS", + "group": "reactive" + }, + "0x29": { + "key": "SPLASH", + "group": "reactive" + }, + "0x2A": { + "key": "MULTISPLASH", + "group": "reactive" + }, + "0x2B": { + "key": "SOLID_SPLASH", + "group": "reactive" + }, + "0x2C": { + "key": "SOLID_MULTISPLASH", + "group": "reactive" + } + } +} diff --git a/data/constants/rgblight_0.0.1.json b/data/constants/rgblight_0.0.1.json new file mode 100644 index 00000000000..20344b42d57 --- /dev/null +++ b/data/constants/rgblight_0.0.1.json @@ -0,0 +1,130 @@ +{ + "effects": { + "0x01": { + "key": "STATIC_LIGHT" + }, + "0x02": { + "key": "BREATHING" + }, + "0x03": { + "key": "BREATHING_2" + }, + "0x04": { + "key": "BREATHING_3" + }, + "0x05": { + "key": "BREATHING_4" + }, + "0x06": { + "key": "RAINBOW_MOOD" + }, + "0x07": { + "key": "RAINBOW_MOOD_2" + }, + "0x08": { + "key": "RAINBOW_MOOD_3" + }, + "0x09": { + "key": "RAINBOW_SWIRL" + }, + "0x0A": { + "key": "RAINBOW_SWIRL_2" + }, + "0x0B": { + "key": "RAINBOW_SWIRL_3" + }, + "0x0C": { + "key": "RAINBOW_SWIRL_4" + }, + "0x0D": { + "key": "RAINBOW_SWIRL_5" + }, + "0x0E": { + "key": "RAINBOW_SWIRL_6" + }, + "0x0F": { + "key": "SNAKE" + }, + "0x10": { + "key": "SNAKE_2" + }, + "0x11": { + "key": "SNAKE_3" + }, + "0x12": { + "key": "SNAKE_4" + }, + "0x13": { + "key": "SNAKE_5" + }, + "0x14": { + "key": "SNAKE_6" + }, + "0x15": { + "key": "KNIGHT" + }, + "0x16": { + "key": "KNIGHT_2" + }, + "0x17": { + "key": "KNIGHT_3" + }, + "0x18": { + "key": "CHRISTMAS" + }, + "0x19": { + "key": "STATIC_GRADIENT" + }, + "0x1A": { + "key": "STATIC_GRADIENT_2" + }, + "0x1B": { + "key": "STATIC_GRADIENT_3" + }, + "0x1C": { + "key": "STATIC_GRADIENT_4" + }, + "0x1D": { + "key": "STATIC_GRADIENT_5" + }, + "0x1E": { + "key": "STATIC_GRADIENT_6" + }, + "0x1F": { + "key": "STATIC_GRADIENT_7" + }, + "0x20": { + "key": "STATIC_GRADIENT_8" + }, + "0x21": { + "key": "STATIC_GRADIENT_9" + }, + "0x22": { + "key": "STATIC_GRADIENT_10" + }, + "0x23": { + "key": "TEST" + }, + "0x24": { + "key": "ALTERNATING" + }, + "0x25": { + "key": "TWINKLE" + }, + "0x26": { + "key": "TWINKLE_2" + }, + "0x27": { + "key": "TWINKLE_3" + }, + "0x28": { + "key": "TWINKLE_4" + }, + "0x29": { + "key": "TWINKLE_5" + }, + "0x2A": { + "key": "TWINKLE_6" + } + } +} diff --git a/data/templates/xap/client/python/types.py.j2 b/data/templates/xap/client/python/types.py.j2 index 8ed0e624da9..808f25bef26 100644 --- a/data/templates/xap/client/python/types.py.j2 +++ b/data/templates/xap/client/python/types.py.j2 @@ -22,7 +22,9 @@ class {{ name }}(namedtuple('{{ name }}', '{{ members }}')): {% set type_definitions = [ {'name':'XAPRequest', 'members': 'token length data', 'fmt':'    * enable: `u8`
    * mode: `u8`
    * val: `u8`| Query the current config.| + #### rgblight - `0x06 0x03` This subsystem allows for control over the rgblight subsystem. @@ -161,6 +170,15 @@ This subsystem allows for control over the rgblight subsystem. | Get Enabled Effects | `0x06 0x03 0x02` | |__Response:__ `u64`| Each bit should be considered as a "usable" effect id| | Get Config | `0x06 0x03 0x03` | |__Response:__
    * enable: `u8`
    * mode: `u8`
    * hue: `u8`
    * sat: `u8`
    * val: `u8`
    * speed: `u8`| Query the current config.| +#### rgbmatrix - `0x06 0x04` +This subsystem allows for control over the rgb matrix subsystem. + +| Name | Route | Tags | Payloads | Description | +| -- | -- | -- | -- | -- | +| Capabilities Query | `0x06 0x04 0x01` | |__Response:__ `u32`| rgb matrix subsystem capabilities query. Each bit should be considered as a "usable" route within this subsystem.| +| Get Enabled Effects | `0x06 0x04 0x02` | |__Response:__ `u64`| Each bit should be considered as a "usable" effect id| +| Get Config | `0x06 0x04 0x03` | |__Response:__
    * enable: `u8`
    * mode: `u8`
    * hue: `u8`
    * sat: `u8`
    * val: `u8`
    * speed: `u8`
    * flags: `u8`| Query the current config.| + ## Broadcast messages diff --git a/lib/python/qmk/cli/xap/xap.py b/lib/python/qmk/cli/xap/xap.py index 767ccf7b251..f1f28f86ce0 100644 --- a/lib/python/qmk/cli/xap/xap.py +++ b/lib/python/qmk/cli/xap/xap.py @@ -7,7 +7,7 @@ from milc import cli from qmk.keyboard import render_layout from qmk.xap.common import get_xap_keycodes -from xap_client import XAPClient, XAPEventType, XAPSecureStatus, XAPConfigRgblight +from xap_client import XAPClient, XAPEventType, XAPSecureStatus, XAPConfigRgblight, XAPConfigBacklight, XAPConfigRgbMatrix, XAPRoutes KEYCODE_MAP = get_xap_keycodes('latest') @@ -188,12 +188,31 @@ class XAPShell(cmd.Cmd): return False def do_dump(self, line): - ret = self.device.transaction(b'\x06\x03\x03') - ret = XAPConfigRgblight.from_bytes(ret) - print(ret) + caps = self.device.int_transaction(XAPRoutes.LIGHTING_CAPABILITIES_QUERY) - ret = self.device.int_transaction(b'\x06\x03\x02') - print(f'XAPEffectRgblight(enabled={bin(ret)})') + if caps & (1 << XAPRoutes.LIGHTING_BACKLIGHT[-1]): + ret = self.device.transaction(XAPRoutes.LIGHTING_BACKLIGHT_GET_CONFIG) + ret = XAPConfigBacklight.from_bytes(ret) + print(ret) + + ret = self.device.int_transaction(XAPRoutes.LIGHTING_BACKLIGHT_GET_ENABLED_EFFECTS) + print(f'XAPEffectBacklight(enabled={bin(ret)})') + + if caps & (1 << XAPRoutes.LIGHTING_RGBLIGHT[-1]): + ret = self.device.transaction(XAPRoutes.LIGHTING_RGBLIGHT_GET_CONFIG) + ret = XAPConfigRgblight.from_bytes(ret) + print(ret) + + ret = self.device.int_transaction(XAPRoutes.LIGHTING_RGBLIGHT_GET_ENABLED_EFFECTS) + print(f'XAPEffectRgblight(enabled={bin(ret)})') + + if caps & (1 << XAPRoutes.LIGHTING_RGB_MATRIX[-1]): + ret = self.device.transaction(XAPRoutes.LIGHTING_RGB_MATRIX_GET_CONFIG) + ret = XAPConfigRgbMatrix.from_bytes(ret) + print(ret) + + ret = self.device.int_transaction(XAPRoutes.LIGHTING_RGB_MATRIX_GET_ENABLED_EFFECTS) + print(f'XAPEffectRgbMatrix(enabled={bin(ret)})') @cli.argument('-v', '--verbose', arg_only=True, action='store_true', help='Turns on verbose output.') diff --git a/lib/python/xap_client/routes.py b/lib/python/xap_client/routes.py index e5a0891bced..c8ebb415f89 100644 --- a/lib/python/xap_client/routes.py +++ b/lib/python/xap_client/routes.py @@ -61,7 +61,15 @@ class XAPRoutes(): REMAPPING_SET_ENCODER_KEYCODE = b'\x05\x04' # LIGHTING LIGHTING_CAPABILITIES_QUERY = b'\x06\x01' + LIGHTING_BACKLIGHT = b'\x06\x02' + LIGHTING_BACKLIGHT_CAPABILITIES_QUERY = b'\x06\x02\x01' + LIGHTING_BACKLIGHT_GET_ENABLED_EFFECTS = b'\x06\x02\x02' + LIGHTING_BACKLIGHT_GET_CONFIG = b'\x06\x02\x03' LIGHTING_RGBLIGHT = b'\x06\x03' LIGHTING_RGBLIGHT_CAPABILITIES_QUERY = b'\x06\x03\x01' LIGHTING_RGBLIGHT_GET_ENABLED_EFFECTS = b'\x06\x03\x02' LIGHTING_RGBLIGHT_GET_CONFIG = b'\x06\x03\x03' + LIGHTING_RGB_MATRIX = b'\x06\x04' + LIGHTING_RGB_MATRIX_CAPABILITIES_QUERY = b'\x06\x04\x01' + LIGHTING_RGB_MATRIX_GET_ENABLED_EFFECTS = b'\x06\x04\x02' + LIGHTING_RGB_MATRIX_GET_CONFIG = b'\x06\x04\x03' diff --git a/lib/python/xap_client/types.py b/lib/python/xap_client/types.py index edb19dc62a3..60416795ce2 100644 --- a/lib/python/xap_client/types.py +++ b/lib/python/xap_client/types.py @@ -59,6 +59,20 @@ class XAPResponse(namedtuple('XAPResponse', 'token flags length data')): return self.fmt.pack(*list(self)) +class XAPConfigBacklight(namedtuple('XAPConfigBacklight', 'enable mode val')): + fmt = Struct('