mirror of
https://github.com/zsa/qmk_firmware.git
synced 2026-01-08 22:52:28 +00:00
Implement RGB Matrix Effects as custom animation
This commit is contained in:
@@ -24,12 +24,14 @@
|
||||
#define ES_BSLS_MAC ALGR(KC_6)
|
||||
|
||||
enum custom_keycodes {
|
||||
RGB_SLD = EZ_SAFE_RANGE,
|
||||
HSV_172_255_255,
|
||||
HSV_86_255_128,
|
||||
HSV_27_255_255,
|
||||
RGB_SLD = EZ_SAFE_RANGE,
|
||||
HSV_172_255_255,
|
||||
HSV_86_255_128,
|
||||
HSV_27_255_255,
|
||||
};
|
||||
|
||||
static uint8_t rgb_matrix_mode_temp = 0;
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = LAYOUT_ergodox_pretty(
|
||||
WEBUSB_PAIR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_RIGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
|
||||
@@ -63,85 +65,100 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
),
|
||||
};
|
||||
|
||||
|
||||
bool suspended = false;
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case RGB_SLD:
|
||||
if (record->event.pressed) {
|
||||
switch (keycode) {
|
||||
case RGB_SLD:
|
||||
if (record->event.pressed) {
|
||||
rgblight_mode(1);
|
||||
}
|
||||
return false;
|
||||
case HSV_172_255_255:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_enable();
|
||||
rgblight_mode(1);
|
||||
rgblight_sethsv(172,255,255);
|
||||
#endif
|
||||
}
|
||||
return false;
|
||||
case HSV_86_255_128:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_enable();
|
||||
rgblight_mode(1);
|
||||
rgblight_sethsv(86,255,128);
|
||||
#endif
|
||||
}
|
||||
return false;
|
||||
case HSV_27_255_255:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_enable();
|
||||
rgblight_mode(1);
|
||||
rgblight_sethsv(27,255,255);
|
||||
#endif
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
case HSV_172_255_255:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_enable();
|
||||
rgblight_mode(1);
|
||||
rgblight_sethsv(172, 255, 255);
|
||||
#endif
|
||||
}
|
||||
return false;
|
||||
case HSV_86_255_128:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_enable();
|
||||
rgblight_mode(1);
|
||||
rgblight_sethsv(86, 255, 128);
|
||||
#endif
|
||||
}
|
||||
return false;
|
||||
case HSV_27_255_255:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_enable();
|
||||
rgblight_mode(1);
|
||||
rgblight_sethsv(27, 255, 255);
|
||||
#endif
|
||||
}
|
||||
return false;
|
||||
case RGB_MOD:
|
||||
case RGB_RMOD:
|
||||
case RGB_MODE_PLAIN ... RGB_MODE_RGBTEST:
|
||||
if (!record->event.pressed) {
|
||||
rgb_matrix_mode_temp = rgb_matrix_get_mode();
|
||||
}
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
void keyboard_post_init_user(void) {
|
||||
rgb_matrix_mode_temp = rgb_matrix_get_mode();
|
||||
}
|
||||
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
|
||||
uint8_t layer = biton32(state);
|
||||
uint8_t layer = get_highest_layer(state);
|
||||
|
||||
ergodox_board_led_off();
|
||||
ergodox_right_led_1_off();
|
||||
ergodox_right_led_2_off();
|
||||
ergodox_right_led_3_off();
|
||||
switch (layer) {
|
||||
case 1:
|
||||
case 1:
|
||||
ergodox_right_led_1_on();
|
||||
rgb_matrix_mode_noeeprom(RGB_MATRIX_CUSTOM_ORYX_FX);
|
||||
break;
|
||||
case 2:
|
||||
case 2:
|
||||
ergodox_right_led_2_on();
|
||||
rgb_matrix_mode_noeeprom(RGB_MATRIX_CUSTOM_ORYX_FX);
|
||||
break;
|
||||
case 3:
|
||||
case 3:
|
||||
rgb_matrix_mode_noeeprom(rgb_matrix_mode_temp);
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
case 4:
|
||||
case 4:
|
||||
rgb_matrix_mode_noeeprom(rgb_matrix_mode_temp);
|
||||
ergodox_right_led_1_on();
|
||||
ergodox_right_led_2_on();
|
||||
break;
|
||||
case 5:
|
||||
case 5:
|
||||
rgb_matrix_mode_noeeprom(rgb_matrix_mode_temp);
|
||||
ergodox_right_led_1_on();
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
case 6:
|
||||
case 6:
|
||||
rgb_matrix_mode_noeeprom(rgb_matrix_mode_temp);
|
||||
ergodox_right_led_2_on();
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
case 7:
|
||||
case 7:
|
||||
rgb_matrix_mode_noeeprom(rgb_matrix_mode_temp);
|
||||
ergodox_right_led_1_on();
|
||||
ergodox_right_led_2_on();
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
default:
|
||||
default:
|
||||
rgb_matrix_mode_noeeprom(rgb_matrix_mode_temp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return state;
|
||||
|
||||
};
|
||||
|
||||
47
keyboards/ergodox_ez/keymaps/oryx/rgb_matrix_user.inc
Normal file
47
keyboards/ergodox_ez/keymaps/oryx/rgb_matrix_user.inc
Normal file
@@ -0,0 +1,47 @@
|
||||
RGB_MATRIX_EFFECT(ORYX_FX)
|
||||
|
||||
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
|
||||
|
||||
const uint8_t PROGMEM ledmap[][DRIVER_LED_TOTAL][3] = {
|
||||
[1] = { {14,255,255}, {14,255,255}, {14,255,255}, {14,255,255}, {0,0,0}, {14,255,255}, {14,255,255}, {14,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {141,255,233}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {14,255,255}, {14,255,255}, {14,255,255}, {14,255,255}, {14,255,255}, {14,255,255}, {14,255,255}, {14,255,255}, {14,255,255}, {14,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
|
||||
|
||||
[2] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {86,255,255}, {86,255,255}, {86,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {86,255,255}, {0,0,0}, {0,0,0}, {172,255,255}, {172,255,255}, {0,0,0}, {172,255,255}, {172,255,255}, {172,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,255,255}, {0,255,255}, {0,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,255,255}, {0,255,255}, {0,0,0}, {0,0,0} },
|
||||
|
||||
};
|
||||
|
||||
void set_layer_color(uint8_t layer, uint8_t i) {
|
||||
HSV hsv = {
|
||||
.h = pgm_read_byte(&ledmap[layer][i][0]),
|
||||
.s = pgm_read_byte(&ledmap[layer][i][1]),
|
||||
.v = pgm_read_byte(&ledmap[layer][i][2]),
|
||||
};
|
||||
if (!hsv.h && !hsv.s && !hsv.v) {
|
||||
rgb_matrix_set_color( i, 0, 0, 0 );
|
||||
} else {
|
||||
RGB rgb = hsv_to_rgb( hsv );
|
||||
float f = (float)rgb_matrix_config.hsv.v / UINT8_MAX;
|
||||
rgb_matrix_set_color( i, f * rgb.r, f * rgb.g, f * rgb.b );
|
||||
}
|
||||
}
|
||||
|
||||
static bool ORYX_FX(effect_params_t* params) {
|
||||
RGB_MATRIX_USE_LIMITS(led_min, led_max);
|
||||
for (uint8_t i = led_min; i < led_max; i++) {
|
||||
switch (get_highest_layer(layer_state)) {
|
||||
case 1:
|
||||
set_layer_color(1, i);
|
||||
break;
|
||||
case 2:
|
||||
set_layer_color(2, i);
|
||||
break;
|
||||
default:
|
||||
if (rgb_matrix_get_flags() == LED_FLAG_NONE)
|
||||
rgb_matrix_set_color(i, 0, 0, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return led_max < DRIVER_LED_TOTAL;
|
||||
}
|
||||
|
||||
|
||||
#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
|
||||
@@ -1 +1,3 @@
|
||||
ORYX_ENABLE = yes
|
||||
RGB_MATRIX_CUSTOM_USER = yes
|
||||
RGB_MATRIX_ENABLE = yes
|
||||
|
||||
Reference in New Issue
Block a user