diff --git a/lib/python/qmk/cli/__init__.py b/lib/python/qmk/cli/__init__.py index 191eda2f642..23bfe2b8416 100644 --- a/lib/python/qmk/cli/__init__.py +++ b/lib/python/qmk/cli/__init__.py @@ -81,6 +81,7 @@ subcommands = [ 'qmk.cli.xap', 'qmk.cli.xap.generate_docs', 'qmk.cli.xap.generate_json', + 'qmk.cli.xap.generate_lighting', 'qmk.cli.xap.generate_python', 'qmk.cli.xap.generate_qmk', ] diff --git a/lib/python/qmk/cli/xap/generate_lighting.py b/lib/python/qmk/cli/xap/generate_lighting.py new file mode 100644 index 00000000000..1716056489c --- /dev/null +++ b/lib/python/qmk/cli/xap/generate_lighting.py @@ -0,0 +1,128 @@ +from milc import cli + +from qmk.path import normpath +from qmk.commands import dump_lines +from qmk.xap.common import load_lighting_spec +from qmk.constants import GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE + +PREFIX_MAP = { + 'rgblight': { + 'ifdef': 'RGBLIGHT_EFFECT', + 'def': 'RGBLIGHT_MODE', + }, + 'rgb_matrix': { + 'ifdef': 'ENABLE_RGB_MATRIX', + 'def': 'RGB_MATRIX', + }, + 'led_matrix': { + 'ifdef': 'ENABLE_LED_MATRIX', + 'def': 'LED_MATRIX', + }, +} + + +def _append_lighting_map(lines, feature, spec): + """TODO: + """ + groups = spec.get('groups', {}) + ifdef_prefix = PREFIX_MAP[feature]['ifdef'] + def_prefix = PREFIX_MAP[feature]['def'] + + lines.append(f'static uint8_t {feature}_effect_map[][2] = {{') + for id, obj in spec.get('effects', {}).items(): + define = obj['define'] + offset = f' + {obj["offset"]}' if obj['offset'] else '' + + line = f''' +#ifdef {ifdef_prefix}_{define} + {{ {id}, {def_prefix}_{define}{offset}}}, +#endif''' + + group = groups.get(obj.get('group', None), {}).get('define', None) + if group: + line = f''' +#ifdef {group} +{line} +#endif''' + + lines.append(line) + + lines.append('};') + + # add helper funcs + lines.append( + f''' +uint8_t {feature}2xap(uint8_t val) {{ + for(uint8_t i = 0; i < ARRAY_SIZE({feature}_effect_map); i++) {{ + if ({feature}_effect_map[i][1] == val) + return {feature}_effect_map[i][0]; + }} + return 0xFF; +}} + +uint8_t xap2{feature}(uint8_t val) {{ + for(uint8_t i = 0; i < ARRAY_SIZE({feature}_effect_map); i++) {{ + if ({feature}_effect_map[i][0] == val) + return {feature}_effect_map[i][1]; + }} + return 0xFF; +}}''' + ) + + +def _append_lighting_bitmask(lines, feature, spec): + """TODO: + """ + groups = spec.get('groups', {}) + ifdef_prefix = PREFIX_MAP[feature]['ifdef'] + + lines.append(f'enum {{ ENABLED_{feature.upper()}_EFFECTS = 0') + for id, obj in spec.get('effects', {}).items(): + define = obj['define'] + + line = f''' +#ifdef {ifdef_prefix}_{define} + | (1ULL << {id}) +#endif''' + + group = groups.get(obj.get('group', None), {}).get('define', None) + if group: + line = f''' +#ifdef {group} +{line} +#endif''' + + lines.append(line) + + lines.append('};') + + +def _append_lighting_mapping(lines): + """TODO: + """ + # TODO: remove bodge for always enabled effects + lines.append(''' +#define RGBLIGHT_EFFECT_STATIC_LIGHT +#define ENABLE_RGB_MATRIX_SOLID_COLOR +#define ENABLE_LED_MATRIX_SOLID +''') + + for feature in PREFIX_MAP.keys(): + spec = load_lighting_spec(feature) + + lines.append(f'#ifdef {feature.upper()}_ENABLE') + _append_lighting_map(lines, feature, spec) + _append_lighting_bitmask(lines, feature, spec) + lines.append(f'#endif //{feature.upper()}_ENABLE') + + +@cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to') +@cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages") +@cli.subcommand('Generates effect header.') +def xap_generate_lighting_map(cli): + # Preamble + lines = [GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE, '#pragma once', '// clang-format off'] + + _append_lighting_mapping(lines) + + dump_lines(cli.args.output, lines, cli.args.quiet) diff --git a/lib/python/qmk/xap/gen_firmware/inline_generator.py b/lib/python/qmk/xap/gen_firmware/inline_generator.py index 78ceb2aa1d3..1dd72233a84 100755 --- a/lib/python/qmk/xap/gen_firmware/inline_generator.py +++ b/lib/python/qmk/xap/gen_firmware/inline_generator.py @@ -3,22 +3,7 @@ from qmk.casing import to_snake from qmk.commands import dump_lines from qmk.constants import GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE -from qmk.xap.common import merge_xap_defs, route_conditions, load_lighting_spec - -PREFIX_MAP = { - 'rgblight': { - 'ifdef': 'RGBLIGHT_EFFECT', - 'def': 'RGBLIGHT_MODE', - }, - 'rgb_matrix': { - 'ifdef': 'ENABLE_RGB_MATRIX', - 'def': 'RGB_MATRIX', - }, - 'led_matrix': { - 'ifdef': 'ENABLE_LED_MATRIX', - 'def': 'LED_MATRIX', - }, -} +from qmk.xap.common import merge_xap_defs, route_conditions def _get_c_type(xap_type): @@ -298,101 +283,6 @@ def _append_broadcast_messages(lines, container): lines.append(f'void {name}(const void *data, size_t length){{ xap_broadcast({key}, data, length); }}') -def _append_lighting_map(lines, feature, spec): - """TODO: - """ - groups = spec.get('groups', {}) - ifdef_prefix = PREFIX_MAP[feature]['ifdef'] - def_prefix = PREFIX_MAP[feature]['def'] - - lines.append(f'static uint8_t {feature}_effect_map[][2] = {{') - for id, obj in spec.get('effects', {}).items(): - define = obj['define'] - offset = f' + {obj["offset"]}' if obj['offset'] else '' - - line = f''' -#ifdef {ifdef_prefix}_{define} - {{ {id}, {def_prefix}_{define}{offset}}}, -#endif''' - - group = groups.get(obj.get('group', None), {}).get('define', None) - if group: - line = f''' -#ifdef {group} -{line} -#endif''' - - lines.append(line) - - lines.append('};') - - # add helper funcs - lines.append( - f''' -uint8_t {feature}2xap(uint8_t val) {{ - for(uint8_t i = 0; i < ARRAY_SIZE({feature}_effect_map); i++) {{ - if ({feature}_effect_map[i][1] == val) - return {feature}_effect_map[i][0]; - }} - return 0xFF; -}} - -uint8_t xap2{feature}(uint8_t val) {{ - for(uint8_t i = 0; i < ARRAY_SIZE({feature}_effect_map); i++) {{ - if ({feature}_effect_map[i][0] == val) - return {feature}_effect_map[i][1]; - }} - return 0xFF; -}}''' - ) - - -def _append_lighting_bitmask(lines, feature, spec): - """TODO: - """ - groups = spec.get('groups', {}) - ifdef_prefix = PREFIX_MAP[feature]['ifdef'] - - lines.append(f'enum {{ ENABLED_{feature.upper()}_EFFECTS = 0') - for id, obj in spec.get('effects', {}).items(): - define = obj['define'] - - line = f''' -#ifdef {ifdef_prefix}_{define} - | (1ULL << {id}) -#endif''' - - group = groups.get(obj.get('group', None), {}).get('define', None) - if group: - line = f''' -#ifdef {group} -{line} -#endif''' - - lines.append(line) - - lines.append('};') - - -def _append_lighting_mapping(lines, xap_defs): - """TODO: - """ - # TODO: remove bodge for always enabled effects - lines.append(''' -#define RGBLIGHT_EFFECT_STATIC_LIGHT -#define ENABLE_RGB_MATRIX_SOLID_COLOR -#define ENABLE_LED_MATRIX_SOLID -''') - - for feature in PREFIX_MAP.keys(): - spec = load_lighting_spec(feature) - - lines.append(f'#ifdef {feature.upper()}_ENABLE') - _append_lighting_map(lines, feature, spec) - _append_lighting_bitmask(lines, feature, spec) - lines.append(f'#endif //{feature.upper()}_ENABLE') - - def generate_inline(output_file, keyboard, keymap): """Generates the XAP protocol header file, generated during normal build. """ @@ -401,9 +291,6 @@ def generate_inline(output_file, keyboard, keymap): # Preamble lines = [GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE, ''] - # TODO: gen somewhere else? - _append_lighting_mapping(lines, xap_defs) - # Add all the generated code _append_broadcast_messages(lines, xap_defs) _append_routing_tables(lines, xap_defs) diff --git a/quantum/xap/lighting_map.h b/quantum/xap/lighting_map.h new file mode 100644 index 00000000000..420cb7e2b99 --- /dev/null +++ b/quantum/xap/lighting_map.h @@ -0,0 +1,1092 @@ +// Copyright 2022 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +/******************************************************************************* + 88888888888 888 d8b .d888 d8b 888 d8b + 888 888 Y8P d88P" Y8P 888 Y8P + 888 888 888 888 + 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b + 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K + 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b. + 888 888 888 888 X88 888 888 888 Y8b. 888 X88 + 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P' + 888 888 + 888 888 + 888 888 + .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888 + d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888 + 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888 + Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888 + "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888 + 888 + Y8b d88P + "Y88P" +*******************************************************************************/ + +#pragma once +// clang-format off + +#define RGBLIGHT_EFFECT_STATIC_LIGHT +#define ENABLE_RGB_MATRIX_SOLID_COLOR +#define ENABLE_LED_MATRIX_SOLID + +#ifdef RGBLIGHT_ENABLE +static uint8_t rgblight_effect_map[][2] = { + +#ifdef RGBLIGHT_EFFECT_STATIC_LIGHT + { 0x00, RGBLIGHT_MODE_STATIC_LIGHT}, +#endif + +#ifdef RGBLIGHT_EFFECT_BREATHING + { 0x01, RGBLIGHT_MODE_BREATHING}, +#endif + +#ifdef RGBLIGHT_EFFECT_BREATHING + { 0x02, RGBLIGHT_MODE_BREATHING + 1}, +#endif + +#ifdef RGBLIGHT_EFFECT_BREATHING + { 0x03, RGBLIGHT_MODE_BREATHING + 2}, +#endif + +#ifdef RGBLIGHT_EFFECT_BREATHING + { 0x04, RGBLIGHT_MODE_BREATHING + 3}, +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD + { 0x05, RGBLIGHT_MODE_RAINBOW_MOOD}, +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD + { 0x06, RGBLIGHT_MODE_RAINBOW_MOOD + 1}, +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD + { 0x07, RGBLIGHT_MODE_RAINBOW_MOOD + 2}, +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL + { 0x08, RGBLIGHT_MODE_RAINBOW_SWIRL}, +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL + { 0x09, RGBLIGHT_MODE_RAINBOW_SWIRL + 1}, +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL + { 0x0A, RGBLIGHT_MODE_RAINBOW_SWIRL + 2}, +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL + { 0x0B, RGBLIGHT_MODE_RAINBOW_SWIRL + 3}, +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL + { 0x0C, RGBLIGHT_MODE_RAINBOW_SWIRL + 4}, +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL + { 0x0D, RGBLIGHT_MODE_RAINBOW_SWIRL + 5}, +#endif + +#ifdef RGBLIGHT_EFFECT_SNAKE + { 0x0E, RGBLIGHT_MODE_SNAKE}, +#endif + +#ifdef RGBLIGHT_EFFECT_SNAKE + { 0x0F, RGBLIGHT_MODE_SNAKE + 1}, +#endif + +#ifdef RGBLIGHT_EFFECT_SNAKE + { 0x10, RGBLIGHT_MODE_SNAKE + 2}, +#endif + +#ifdef RGBLIGHT_EFFECT_SNAKE + { 0x11, RGBLIGHT_MODE_SNAKE + 3}, +#endif + +#ifdef RGBLIGHT_EFFECT_SNAKE + { 0x12, RGBLIGHT_MODE_SNAKE + 4}, +#endif + +#ifdef RGBLIGHT_EFFECT_SNAKE + { 0x13, RGBLIGHT_MODE_SNAKE + 5}, +#endif + +#ifdef RGBLIGHT_EFFECT_KNIGHT + { 0x14, RGBLIGHT_MODE_KNIGHT}, +#endif + +#ifdef RGBLIGHT_EFFECT_KNIGHT + { 0x15, RGBLIGHT_MODE_KNIGHT + 1}, +#endif + +#ifdef RGBLIGHT_EFFECT_KNIGHT + { 0x16, RGBLIGHT_MODE_KNIGHT + 2}, +#endif + +#ifdef RGBLIGHT_EFFECT_CHRISTMAS + { 0x17, RGBLIGHT_MODE_CHRISTMAS}, +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + { 0x18, RGBLIGHT_MODE_STATIC_GRADIENT}, +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + { 0x19, RGBLIGHT_MODE_STATIC_GRADIENT + 1}, +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + { 0x1A, RGBLIGHT_MODE_STATIC_GRADIENT + 2}, +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + { 0x1B, RGBLIGHT_MODE_STATIC_GRADIENT + 3}, +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + { 0x1C, RGBLIGHT_MODE_STATIC_GRADIENT + 4}, +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + { 0x1D, RGBLIGHT_MODE_STATIC_GRADIENT + 5}, +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + { 0x1E, RGBLIGHT_MODE_STATIC_GRADIENT + 6}, +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + { 0x1F, RGBLIGHT_MODE_STATIC_GRADIENT + 7}, +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + { 0x20, RGBLIGHT_MODE_STATIC_GRADIENT + 8}, +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + { 0x21, RGBLIGHT_MODE_STATIC_GRADIENT + 9}, +#endif + +#ifdef RGBLIGHT_EFFECT_RGB_TEST + { 0x22, RGBLIGHT_MODE_RGB_TEST}, +#endif + +#ifdef RGBLIGHT_EFFECT_ALTERNATING + { 0x23, RGBLIGHT_MODE_ALTERNATING}, +#endif + +#ifdef RGBLIGHT_EFFECT_TWINKLE + { 0x24, RGBLIGHT_MODE_TWINKLE}, +#endif + +#ifdef RGBLIGHT_EFFECT_TWINKLE + { 0x25, RGBLIGHT_MODE_TWINKLE + 1}, +#endif + +#ifdef RGBLIGHT_EFFECT_TWINKLE + { 0x26, RGBLIGHT_MODE_TWINKLE + 2}, +#endif + +#ifdef RGBLIGHT_EFFECT_TWINKLE + { 0x27, RGBLIGHT_MODE_TWINKLE + 3}, +#endif + +#ifdef RGBLIGHT_EFFECT_TWINKLE + { 0x28, RGBLIGHT_MODE_TWINKLE + 4}, +#endif + +#ifdef RGBLIGHT_EFFECT_TWINKLE + { 0x29, RGBLIGHT_MODE_TWINKLE + 5}, +#endif +}; + +uint8_t rgblight2xap(uint8_t val) { + for(uint8_t i = 0; i < ARRAY_SIZE(rgblight_effect_map); i++) { + if (rgblight_effect_map[i][1] == val) + return rgblight_effect_map[i][0]; + } + return 0xFF; +} + +uint8_t xap2rgblight(uint8_t val) { + for(uint8_t i = 0; i < ARRAY_SIZE(rgblight_effect_map); i++) { + if (rgblight_effect_map[i][0] == val) + return rgblight_effect_map[i][1]; + } + return 0xFF; +} +enum { ENABLED_RGBLIGHT_EFFECTS = 0 + +#ifdef RGBLIGHT_EFFECT_STATIC_LIGHT + | (1ULL << 0x00) +#endif + +#ifdef RGBLIGHT_EFFECT_BREATHING + | (1ULL << 0x01) +#endif + +#ifdef RGBLIGHT_EFFECT_BREATHING + | (1ULL << 0x02) +#endif + +#ifdef RGBLIGHT_EFFECT_BREATHING + | (1ULL << 0x03) +#endif + +#ifdef RGBLIGHT_EFFECT_BREATHING + | (1ULL << 0x04) +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD + | (1ULL << 0x05) +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD + | (1ULL << 0x06) +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD + | (1ULL << 0x07) +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL + | (1ULL << 0x08) +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL + | (1ULL << 0x09) +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL + | (1ULL << 0x0A) +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL + | (1ULL << 0x0B) +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL + | (1ULL << 0x0C) +#endif + +#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL + | (1ULL << 0x0D) +#endif + +#ifdef RGBLIGHT_EFFECT_SNAKE + | (1ULL << 0x0E) +#endif + +#ifdef RGBLIGHT_EFFECT_SNAKE + | (1ULL << 0x0F) +#endif + +#ifdef RGBLIGHT_EFFECT_SNAKE + | (1ULL << 0x10) +#endif + +#ifdef RGBLIGHT_EFFECT_SNAKE + | (1ULL << 0x11) +#endif + +#ifdef RGBLIGHT_EFFECT_SNAKE + | (1ULL << 0x12) +#endif + +#ifdef RGBLIGHT_EFFECT_SNAKE + | (1ULL << 0x13) +#endif + +#ifdef RGBLIGHT_EFFECT_KNIGHT + | (1ULL << 0x14) +#endif + +#ifdef RGBLIGHT_EFFECT_KNIGHT + | (1ULL << 0x15) +#endif + +#ifdef RGBLIGHT_EFFECT_KNIGHT + | (1ULL << 0x16) +#endif + +#ifdef RGBLIGHT_EFFECT_CHRISTMAS + | (1ULL << 0x17) +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + | (1ULL << 0x18) +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + | (1ULL << 0x19) +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + | (1ULL << 0x1A) +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + | (1ULL << 0x1B) +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + | (1ULL << 0x1C) +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + | (1ULL << 0x1D) +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + | (1ULL << 0x1E) +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + | (1ULL << 0x1F) +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + | (1ULL << 0x20) +#endif + +#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT + | (1ULL << 0x21) +#endif + +#ifdef RGBLIGHT_EFFECT_RGB_TEST + | (1ULL << 0x22) +#endif + +#ifdef RGBLIGHT_EFFECT_ALTERNATING + | (1ULL << 0x23) +#endif + +#ifdef RGBLIGHT_EFFECT_TWINKLE + | (1ULL << 0x24) +#endif + +#ifdef RGBLIGHT_EFFECT_TWINKLE + | (1ULL << 0x25) +#endif + +#ifdef RGBLIGHT_EFFECT_TWINKLE + | (1ULL << 0x26) +#endif + +#ifdef RGBLIGHT_EFFECT_TWINKLE + | (1ULL << 0x27) +#endif + +#ifdef RGBLIGHT_EFFECT_TWINKLE + | (1ULL << 0x28) +#endif + +#ifdef RGBLIGHT_EFFECT_TWINKLE + | (1ULL << 0x29) +#endif +}; +#endif //RGBLIGHT_ENABLE +#ifdef RGB_MATRIX_ENABLE +static uint8_t rgb_matrix_effect_map[][2] = { + +#ifdef ENABLE_RGB_MATRIX_SOLID_COLOR + { 0x00, RGB_MATRIX_SOLID_COLOR}, +#endif + +#ifdef ENABLE_RGB_MATRIX_ALPHAS_MODS + { 0x01, RGB_MATRIX_ALPHAS_MODS}, +#endif + +#ifdef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN + { 0x02, RGB_MATRIX_GRADIENT_UP_DOWN}, +#endif + +#ifdef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT + { 0x03, RGB_MATRIX_GRADIENT_LEFT_RIGHT}, +#endif + +#ifdef ENABLE_RGB_MATRIX_BREATHING + { 0x04, RGB_MATRIX_BREATHING}, +#endif + +#ifdef ENABLE_RGB_MATRIX_BAND_SAT + { 0x05, RGB_MATRIX_BAND_SAT}, +#endif + +#ifdef ENABLE_RGB_MATRIX_BAND_VAL + { 0x06, RGB_MATRIX_BAND_VAL}, +#endif + +#ifdef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT + { 0x07, RGB_MATRIX_BAND_PINWHEEL_SAT}, +#endif + +#ifdef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL + { 0x08, RGB_MATRIX_BAND_PINWHEEL_VAL}, +#endif + +#ifdef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT + { 0x09, RGB_MATRIX_BAND_SPIRAL_SAT}, +#endif + +#ifdef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL + { 0x0A, RGB_MATRIX_BAND_SPIRAL_VAL}, +#endif + +#ifdef ENABLE_RGB_MATRIX_CYCLE_ALL + { 0x0B, RGB_MATRIX_CYCLE_ALL}, +#endif + +#ifdef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT + { 0x0C, RGB_MATRIX_CYCLE_LEFT_RIGHT}, +#endif + +#ifdef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN + { 0x0D, RGB_MATRIX_CYCLE_UP_DOWN}, +#endif + +#ifdef ENABLE_RGB_MATRIX_CYCLE_OUT_IN + { 0x0E, RGB_MATRIX_CYCLE_OUT_IN}, +#endif + +#ifdef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL + { 0x0F, RGB_MATRIX_CYCLE_OUT_IN_DUAL}, +#endif + +#ifdef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + { 0x10, RGB_MATRIX_RAINBOW_MOVING_CHEVRON}, +#endif + +#ifdef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL + { 0x11, RGB_MATRIX_CYCLE_PINWHEEL}, +#endif + +#ifdef ENABLE_RGB_MATRIX_CYCLE_SPIRAL + { 0x12, RGB_MATRIX_CYCLE_SPIRAL}, +#endif + +#ifdef ENABLE_RGB_MATRIX_DUAL_BEACON + { 0x13, RGB_MATRIX_DUAL_BEACON}, +#endif + +#ifdef ENABLE_RGB_MATRIX_RAINBOW_BEACON + { 0x14, RGB_MATRIX_RAINBOW_BEACON}, +#endif + +#ifdef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS + { 0x15, RGB_MATRIX_RAINBOW_PINWHEELS}, +#endif + +#ifdef ENABLE_RGB_MATRIX_RAINDROPS + { 0x16, RGB_MATRIX_RAINDROPS}, +#endif + +#ifdef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + { 0x17, RGB_MATRIX_JELLYBEAN_RAINDROPS}, +#endif + +#ifdef ENABLE_RGB_MATRIX_HUE_BREATHING + { 0x18, RGB_MATRIX_HUE_BREATHING}, +#endif + +#ifdef ENABLE_RGB_MATRIX_HUE_PENDULUM + { 0x19, RGB_MATRIX_HUE_PENDULUM}, +#endif + +#ifdef ENABLE_RGB_MATRIX_HUE_WAVE + { 0x1A, RGB_MATRIX_HUE_WAVE}, +#endif + +#ifdef ENABLE_RGB_MATRIX_PIXEL_FRACTAL + { 0x1B, RGB_MATRIX_PIXEL_FRACTAL}, +#endif + +#ifdef ENABLE_RGB_MATRIX_PIXEL_FLOW + { 0x1C, RGB_MATRIX_PIXEL_FLOW}, +#endif + +#ifdef ENABLE_RGB_MATRIX_PIXEL_RAIN + { 0x1D, RGB_MATRIX_PIXEL_RAIN}, +#endif + +#ifdef RGB_MATRIX_FRAMEBUFFER_EFFECTS + +#ifdef ENABLE_RGB_MATRIX_TYPING_HEATMAP + { 0x1E, RGB_MATRIX_TYPING_HEATMAP}, +#endif +#endif + +#ifdef RGB_MATRIX_FRAMEBUFFER_EFFECTS + +#ifdef ENABLE_RGB_MATRIX_DIGITAL_RAIN + { 0x1F, RGB_MATRIX_DIGITAL_RAIN}, +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE + { 0x20, RGB_MATRIX_SOLID_REACTIVE_SIMPLE}, +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE + { 0x21, RGB_MATRIX_SOLID_REACTIVE}, +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE + { 0x22, RGB_MATRIX_SOLID_REACTIVE_WIDE}, +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE + { 0x23, RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE}, +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS + { 0x24, RGB_MATRIX_SOLID_REACTIVE_CROSS}, +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS + { 0x25, RGB_MATRIX_SOLID_REACTIVE_MULTICROSS}, +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS + { 0x26, RGB_MATRIX_SOLID_REACTIVE_NEXUS}, +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS + { 0x27, RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS}, +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SPLASH + { 0x28, RGB_MATRIX_SPLASH}, +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_MULTISPLASH + { 0x29, RGB_MATRIX_MULTISPLASH}, +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_SPLASH + { 0x2A, RGB_MATRIX_SOLID_SPLASH}, +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH + { 0x2B, RGB_MATRIX_SOLID_MULTISPLASH}, +#endif +#endif +}; + +uint8_t rgb_matrix2xap(uint8_t val) { + for(uint8_t i = 0; i < ARRAY_SIZE(rgb_matrix_effect_map); i++) { + if (rgb_matrix_effect_map[i][1] == val) + return rgb_matrix_effect_map[i][0]; + } + return 0xFF; +} + +uint8_t xap2rgb_matrix(uint8_t val) { + for(uint8_t i = 0; i < ARRAY_SIZE(rgb_matrix_effect_map); i++) { + if (rgb_matrix_effect_map[i][0] == val) + return rgb_matrix_effect_map[i][1]; + } + return 0xFF; +} +enum { ENABLED_RGB_MATRIX_EFFECTS = 0 + +#ifdef ENABLE_RGB_MATRIX_SOLID_COLOR + | (1ULL << 0x00) +#endif + +#ifdef ENABLE_RGB_MATRIX_ALPHAS_MODS + | (1ULL << 0x01) +#endif + +#ifdef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN + | (1ULL << 0x02) +#endif + +#ifdef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT + | (1ULL << 0x03) +#endif + +#ifdef ENABLE_RGB_MATRIX_BREATHING + | (1ULL << 0x04) +#endif + +#ifdef ENABLE_RGB_MATRIX_BAND_SAT + | (1ULL << 0x05) +#endif + +#ifdef ENABLE_RGB_MATRIX_BAND_VAL + | (1ULL << 0x06) +#endif + +#ifdef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT + | (1ULL << 0x07) +#endif + +#ifdef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL + | (1ULL << 0x08) +#endif + +#ifdef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT + | (1ULL << 0x09) +#endif + +#ifdef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL + | (1ULL << 0x0A) +#endif + +#ifdef ENABLE_RGB_MATRIX_CYCLE_ALL + | (1ULL << 0x0B) +#endif + +#ifdef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT + | (1ULL << 0x0C) +#endif + +#ifdef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN + | (1ULL << 0x0D) +#endif + +#ifdef ENABLE_RGB_MATRIX_CYCLE_OUT_IN + | (1ULL << 0x0E) +#endif + +#ifdef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL + | (1ULL << 0x0F) +#endif + +#ifdef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + | (1ULL << 0x10) +#endif + +#ifdef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL + | (1ULL << 0x11) +#endif + +#ifdef ENABLE_RGB_MATRIX_CYCLE_SPIRAL + | (1ULL << 0x12) +#endif + +#ifdef ENABLE_RGB_MATRIX_DUAL_BEACON + | (1ULL << 0x13) +#endif + +#ifdef ENABLE_RGB_MATRIX_RAINBOW_BEACON + | (1ULL << 0x14) +#endif + +#ifdef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS + | (1ULL << 0x15) +#endif + +#ifdef ENABLE_RGB_MATRIX_RAINDROPS + | (1ULL << 0x16) +#endif + +#ifdef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + | (1ULL << 0x17) +#endif + +#ifdef ENABLE_RGB_MATRIX_HUE_BREATHING + | (1ULL << 0x18) +#endif + +#ifdef ENABLE_RGB_MATRIX_HUE_PENDULUM + | (1ULL << 0x19) +#endif + +#ifdef ENABLE_RGB_MATRIX_HUE_WAVE + | (1ULL << 0x1A) +#endif + +#ifdef ENABLE_RGB_MATRIX_PIXEL_FRACTAL + | (1ULL << 0x1B) +#endif + +#ifdef ENABLE_RGB_MATRIX_PIXEL_FLOW + | (1ULL << 0x1C) +#endif + +#ifdef ENABLE_RGB_MATRIX_PIXEL_RAIN + | (1ULL << 0x1D) +#endif + +#ifdef RGB_MATRIX_FRAMEBUFFER_EFFECTS + +#ifdef ENABLE_RGB_MATRIX_TYPING_HEATMAP + | (1ULL << 0x1E) +#endif +#endif + +#ifdef RGB_MATRIX_FRAMEBUFFER_EFFECTS + +#ifdef ENABLE_RGB_MATRIX_DIGITAL_RAIN + | (1ULL << 0x1F) +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE + | (1ULL << 0x20) +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE + | (1ULL << 0x21) +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE + | (1ULL << 0x22) +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE + | (1ULL << 0x23) +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS + | (1ULL << 0x24) +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS + | (1ULL << 0x25) +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS + | (1ULL << 0x26) +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS + | (1ULL << 0x27) +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SPLASH + | (1ULL << 0x28) +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_MULTISPLASH + | (1ULL << 0x29) +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_SPLASH + | (1ULL << 0x2A) +#endif +#endif + +#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH + | (1ULL << 0x2B) +#endif +#endif +}; +#endif //RGB_MATRIX_ENABLE +#ifdef LED_MATRIX_ENABLE +static uint8_t led_matrix_effect_map[][2] = { + +#ifdef ENABLE_LED_MATRIX_SOLID + { 0x00, LED_MATRIX_SOLID}, +#endif + +#ifdef ENABLE_LED_MATRIX_ALPHAS_MODS + { 0x01, LED_MATRIX_ALPHAS_MODS}, +#endif + +#ifdef ENABLE_LED_MATRIX_BREATHING + { 0x02, LED_MATRIX_BREATHING}, +#endif + +#ifdef ENABLE_LED_MATRIX_BAND + { 0x03, LED_MATRIX_BAND}, +#endif + +#ifdef ENABLE_LED_MATRIX_BAND_PINWHEEL + { 0x04, LED_MATRIX_BAND_PINWHEEL}, +#endif + +#ifdef ENABLE_LED_MATRIX_BAND_SPIRAL + { 0x05, LED_MATRIX_BAND_SPIRAL}, +#endif + +#ifdef ENABLE_LED_MATRIX_CYCLE_LEFT_RIGHT + { 0x06, LED_MATRIX_CYCLE_LEFT_RIGHT}, +#endif + +#ifdef ENABLE_LED_MATRIX_CYCLE_UP_DOWN + { 0x07, LED_MATRIX_CYCLE_UP_DOWN}, +#endif + +#ifdef ENABLE_LED_MATRIX_CYCLE_OUT_IN + { 0x08, LED_MATRIX_CYCLE_OUT_IN}, +#endif + +#ifdef ENABLE_LED_MATRIX_DUAL_BEACON + { 0x09, LED_MATRIX_DUAL_BEACON}, +#endif + +#ifdef ENABLE_LED_MATRIX_WAVE_LEFT_RIGHT + { 0x0A, LED_MATRIX_WAVE_LEFT_RIGHT}, +#endif + +#ifdef ENABLE_LED_MATRIX_WAVE_UP_DOWN + { 0x0B, LED_MATRIX_WAVE_UP_DOWN}, +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_SIMPLE + { 0x0C, LED_MATRIX_SOLID_REACTIVE_SIMPLE}, +#endif +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_WIDE + { 0x0D, LED_MATRIX_SOLID_REACTIVE_WIDE}, +#endif +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTIWIDE + { 0x0E, LED_MATRIX_SOLID_REACTIVE_MULTIWIDE}, +#endif +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_CROSS + { 0x0F, LED_MATRIX_SOLID_REACTIVE_CROSS}, +#endif +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTICROSS + { 0x10, LED_MATRIX_SOLID_REACTIVE_MULTICROSS}, +#endif +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_NEXUS + { 0x11, LED_MATRIX_SOLID_REACTIVE_NEXUS}, +#endif +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTINEXUS + { 0x12, LED_MATRIX_SOLID_REACTIVE_MULTINEXUS}, +#endif +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_SPLASH + { 0x13, LED_MATRIX_SOLID_SPLASH}, +#endif +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_MULTISPLASH + { 0x14, LED_MATRIX_SOLID_MULTISPLASH}, +#endif +#endif +}; + +uint8_t led_matrix2xap(uint8_t val) { + for(uint8_t i = 0; i < ARRAY_SIZE(led_matrix_effect_map); i++) { + if (led_matrix_effect_map[i][1] == val) + return led_matrix_effect_map[i][0]; + } + return 0xFF; +} + +uint8_t xap2led_matrix(uint8_t val) { + for(uint8_t i = 0; i < ARRAY_SIZE(led_matrix_effect_map); i++) { + if (led_matrix_effect_map[i][0] == val) + return led_matrix_effect_map[i][1]; + } + return 0xFF; +} +enum { ENABLED_LED_MATRIX_EFFECTS = 0 + +#ifdef ENABLE_LED_MATRIX_SOLID + | (1ULL << 0x00) +#endif + +#ifdef ENABLE_LED_MATRIX_ALPHAS_MODS + | (1ULL << 0x01) +#endif + +#ifdef ENABLE_LED_MATRIX_BREATHING + | (1ULL << 0x02) +#endif + +#ifdef ENABLE_LED_MATRIX_BAND + | (1ULL << 0x03) +#endif + +#ifdef ENABLE_LED_MATRIX_BAND_PINWHEEL + | (1ULL << 0x04) +#endif + +#ifdef ENABLE_LED_MATRIX_BAND_SPIRAL + | (1ULL << 0x05) +#endif + +#ifdef ENABLE_LED_MATRIX_CYCLE_LEFT_RIGHT + | (1ULL << 0x06) +#endif + +#ifdef ENABLE_LED_MATRIX_CYCLE_UP_DOWN + | (1ULL << 0x07) +#endif + +#ifdef ENABLE_LED_MATRIX_CYCLE_OUT_IN + | (1ULL << 0x08) +#endif + +#ifdef ENABLE_LED_MATRIX_DUAL_BEACON + | (1ULL << 0x09) +#endif + +#ifdef ENABLE_LED_MATRIX_WAVE_LEFT_RIGHT + | (1ULL << 0x0A) +#endif + +#ifdef ENABLE_LED_MATRIX_WAVE_UP_DOWN + | (1ULL << 0x0B) +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_SIMPLE + | (1ULL << 0x0C) +#endif +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_WIDE + | (1ULL << 0x0D) +#endif +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTIWIDE + | (1ULL << 0x0E) +#endif +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_CROSS + | (1ULL << 0x0F) +#endif +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTICROSS + | (1ULL << 0x10) +#endif +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_NEXUS + | (1ULL << 0x11) +#endif +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTINEXUS + | (1ULL << 0x12) +#endif +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_SPLASH + | (1ULL << 0x13) +#endif +#endif + +#ifdef LED_MATRIX_KEYREACTIVE_ENABLED + +#ifdef ENABLE_LED_MATRIX_SOLID_MULTISPLASH + | (1ULL << 0x14) +#endif +#endif +}; +#endif //LED_MATRIX_ENABLE diff --git a/quantum/xap/xap.c b/quantum/xap/xap.c index 62e4590ac26..6222a091dc0 100644 --- a/quantum/xap/xap.c +++ b/quantum/xap/xap.c @@ -18,6 +18,7 @@ #include #include "secure.h" +#include "lighting_map.h" #include "config_blob_gz.h" bool get_config_blob_chunk(uint16_t offset, uint8_t *data, uint8_t data_len) { if (offset + data_len > CONFIG_BLOB_GZ_LEN) {