vialrgb: convert between vialrgb id and qmk id for modes
This commit is contained in:
parent
5bc1373a27
commit
1d5ed0b24a
4 changed files with 105 additions and 3 deletions
|
@ -1,4 +1,5 @@
|
|||
#ifndef DISABLE_RGB_MATRIX_ALPHAS_MODS
|
||||
#define RGB_MATRIX_EFFECT_ALPHAS_MODS
|
||||
RGB_MATRIX_EFFECT(ALPHAS_MODS)
|
||||
# ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#define RGB_MATRIX_EFFECT_SOLID_COLOR
|
||||
RGB_MATRIX_EFFECT(SOLID_COLOR)
|
||||
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
|
||||
|
||||
|
|
|
@ -1,12 +1,107 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* Based on https://github.com/qmk/qmk_firmware/pull/13036 */
|
||||
|
||||
#include "vialrgb.h"
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <string.h>
|
||||
#include "rgb_matrix.h"
|
||||
#include "vial.h"
|
||||
|
||||
/* Based on https://github.com/qmk/qmk_firmware/pull/13036 */
|
||||
/* Note - never reorder or remove these, only add new animations at the end */
|
||||
enum {
|
||||
VIALRGB_EFFECT_OFF = 0,
|
||||
VIALRGB_EFFECT_DIRECT,
|
||||
VIALRGB_EFFECT_SOLID_COLOR,
|
||||
VIALRGB_EFFECT_ALPHAS_MODS,
|
||||
VIALRGB_EFFECT_GRADIENT_UP_DOWN_ANIM,
|
||||
VIALRGB_EFFECT_GRADIENT_LEFT_RIGHT_ANIM,
|
||||
VIALRGB_EFFECT_BREATHING_ANIM,
|
||||
VIALRGB_EFFECT_COLORBAND_SAT_ANIM,
|
||||
VIALRGB_EFFECT_COLORBAND_VAL_ANIM,
|
||||
VIALRGB_EFFECT_COLORBAND_PINWHEEL_SAT_ANIM,
|
||||
VIALRGB_EFFECT_COLORBAND_PINWHEEL_VAL_ANIM,
|
||||
VIALRGB_EFFECT_COLORBAND_SPIRAL_SAT_ANIM,
|
||||
VIALRGB_EFFECT_COLORBAND_SPIRAL_VAL_ANIM,
|
||||
VIALRGB_EFFECT_CYCLE_ALL_ANIM,
|
||||
VIALRGB_EFFECT_CYCLE_LEFT_RIGHT_ANIM,
|
||||
VIALRGB_EFFECT_CYCLE_UP_DOWN_ANIM,
|
||||
VIALRGB_EFFECT_RAINBOW_MOVING_CHEVRON_ANIM,
|
||||
VIALRGB_EFFECT_CYCLE_OUT_IN_ANIM,
|
||||
VIALRGB_EFFECT_CYCLE_OUT_IN_DUAL_ANIM,
|
||||
VIALRGB_EFFECT_CYCLE_PINWHEEL_ANIM,
|
||||
VIALRGB_EFFECT_CYCLE_SPIRAL_ANIM,
|
||||
VIALRGB_EFFECT_DUAL_BEACON_ANIM,
|
||||
VIALRGB_EFFECT_RAINBOW_BEACON_ANIM,
|
||||
VIALRGB_EFFECT_RAINBOW_PINWHEELS_ANIM,
|
||||
VIALRGB_EFFECT_RAINDROPS_ANIM,
|
||||
VIALRGB_EFFECT_JELLYBEAN_RAINDROPS_ANIM,
|
||||
VIALRGB_EFFECT_HUE_BREATHING_ANIM,
|
||||
VIALRGB_EFFECT_HUE_PENDULUM_ANIM,
|
||||
VIALRGB_EFFECT_HUE_WAVE_ANIM,
|
||||
VIALRGB_EFFECT_TYPING_HEATMAP_ANIM,
|
||||
VIALRGB_EFFECT_DIGITAL_RAIN_ANIM,
|
||||
VIALRGB_EFFECT_SOLID_REACTIVE_SIMPLE_ANIM,
|
||||
VIALRGB_EFFECT_SOLID_REACTIVE_ANIM,
|
||||
VIALRGB_EFFECT_SOLID_REACTIVE_WIDE,
|
||||
VIALRGB_EFFECT_SOLID_REACTIVE_CROSS,
|
||||
VIALRGB_EFFECT_SOLID_REACTIVE_NEXUS,
|
||||
VIALRGB_EFFECT_SPLASH_ANIM,
|
||||
VIALRGB_EFFECT_SOLID_SPLASH_ANIM,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
uint16_t vialrgb_id;
|
||||
uint16_t qmk_id;
|
||||
} vialrgb_supported_mode_t;
|
||||
|
||||
static const PROGMEM vialrgb_supported_mode_t supported_modes[] = {
|
||||
{ VIALRGB_EFFECT_OFF, 0 },
|
||||
// { VIALRGB_EFFECT_DIRECT, 0 }, TODO
|
||||
#ifdef RGB_MATRIX_EFFECT_SOLID_COLOR
|
||||
{ VIALRGB_EFFECT_SOLID_COLOR, RGB_MATRIX_SOLID_COLOR },
|
||||
#endif
|
||||
#ifdef RGB_MATRIX_EFFECT_ALPHAS_MODS
|
||||
{ VIALRGB_EFFECT_ALPHAS_MODS, RGB_MATRIX_ALPHAS_MODS },
|
||||
#endif
|
||||
};
|
||||
|
||||
#define SUPPORTED_MODES_LENGTH (sizeof(supported_modes)/sizeof(*supported_modes))
|
||||
|
||||
static void get_supported(uint8_t *args, uint8_t length) {
|
||||
/* retrieve supported effects (VialRGB IDs) with ID > gt */
|
||||
uint16_t gt;
|
||||
memcpy(>, args, sizeof(gt));
|
||||
memset(args, 0xFF, length);
|
||||
for (size_t i = 0; i < SUPPORTED_MODES_LENGTH; ++i) {
|
||||
uint16_t id = pgm_read_word(&supported_modes[i].vialrgb_id);
|
||||
if (id > gt && length >= sizeof(id)) {
|
||||
memcpy(args, &id, sizeof(id));
|
||||
length -= sizeof(id);
|
||||
args += sizeof(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static uint16_t qmk_id_to_vialrgb_id(uint16_t id) {
|
||||
for (size_t i = 0; i < SUPPORTED_MODES_LENGTH; ++i) {
|
||||
uint16_t qmk_id = pgm_read_word(&supported_modes[i].qmk_id);
|
||||
uint16_t vialrgb_id = pgm_read_word(&supported_modes[i].vialrgb_id);
|
||||
if (qmk_id == id)
|
||||
return vialrgb_id;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static uint16_t vialrgb_id_to_qmk_id(uint16_t id) {
|
||||
for (size_t i = 0; i < SUPPORTED_MODES_LENGTH; ++i) {
|
||||
uint16_t qmk_id = pgm_read_word(&supported_modes[i].qmk_id);
|
||||
uint16_t vialrgb_id = pgm_read_word(&supported_modes[i].vialrgb_id);
|
||||
if (vialrgb_id == id)
|
||||
return qmk_id;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void vialrgb_get_value(uint8_t *data, uint8_t length) {
|
||||
if (length != VIAL_RAW_EPSIZE) return;
|
||||
|
@ -21,13 +116,17 @@ void vialrgb_get_value(uint8_t *data, uint8_t length) {
|
|||
args[2] = RGB_MATRIX_MAXIMUM_BRIGHTNESS;
|
||||
break;
|
||||
case vialrgb_get_mode: {
|
||||
args[0] = rgb_matrix_get_mode();
|
||||
args[0] = qmk_id_to_vialrgb_id(rgb_matrix_get_mode());
|
||||
args[1] = rgb_matrix_get_speed();
|
||||
args[2] = rgb_matrix_get_hue();
|
||||
args[3] = rgb_matrix_get_sat();
|
||||
args[4] = rgb_matrix_get_val();
|
||||
break;
|
||||
}
|
||||
case vialrgb_get_supported: {
|
||||
get_supported(args, length - 2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -39,7 +138,7 @@ void vialrgb_set_value(uint8_t *data, uint8_t length) {
|
|||
uint8_t *args = &data[2];
|
||||
switch (cmd) {
|
||||
case vialrgb_set_mode: {
|
||||
rgb_matrix_mode_noeeprom(args[0]);
|
||||
rgb_matrix_mode_noeeprom(vialrgb_id_to_qmk_id(args[0]));
|
||||
rgb_matrix_set_speed_noeeprom(args[1]);
|
||||
rgb_matrix_sethsv_noeeprom(args[2], args[3], args[4]);
|
||||
break;
|
||||
|
|
|
@ -13,6 +13,7 @@ enum {
|
|||
enum {
|
||||
vialrgb_get_info = 0x40,
|
||||
vialrgb_get_mode = 0x41,
|
||||
vialrgb_get_supported = 0x42,
|
||||
};
|
||||
|
||||
void vialrgb_get_value(uint8_t *data, uint8_t length);
|
||||
|
|
Loading…
Add table
Reference in a new issue