Keymap: Helix : Update froggy keymap (#3652)
* led ripple effect * fix key name
This commit is contained in:
parent
77b7e2cd59
commit
b3d80d4af0
1 changed files with 101 additions and 21 deletions
|
@ -81,7 +81,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
* | Shift| Y | S | N | I | U |Space | | | | | | | |
|
* | Shift| Y | S | N | I | U |Space | | | | | | | |
|
||||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
* | Ctrl | Alt | win | Sym | Num | OPT | Ent | | | | | | | |
|
* | Ctrl | Alt | Gui | Sym | Num | OPT | Ent | | | | | | | |
|
||||||
* `-------------------------------------------------------------------------------------------------'
|
* `-------------------------------------------------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[_BASE] = LAYOUT( \
|
[_BASE] = LAYOUT( \
|
||||||
|
@ -256,8 +256,31 @@ void register_delay_code(uint8_t layer){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
struct keybuf {
|
||||||
|
char col, row;
|
||||||
|
char frame;
|
||||||
|
};
|
||||||
|
struct keybuf keybufs[256];
|
||||||
|
unsigned char keybuf_begin, keybuf_end;
|
||||||
|
|
||||||
|
int col, row;
|
||||||
|
#endif
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
col = record->event.key.col;
|
||||||
|
row = record->event.key.row;
|
||||||
|
if (record->event.pressed && ((row < 5 && is_master) || (row >= 5 && !is_master))) {
|
||||||
|
int end = keybuf_end;
|
||||||
|
keybufs[end].col = col;
|
||||||
|
keybufs[end].row = row % 5;
|
||||||
|
keybufs[end].frame = 0;
|
||||||
|
keybuf_end ++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if(tap_timer&&keycode!=OPT_TAP_SP){
|
if(tap_timer&&keycode!=OPT_TAP_SP){
|
||||||
tapping_key = true;
|
tapping_key = true;
|
||||||
}
|
}
|
||||||
|
@ -475,6 +498,61 @@ void music_scale_user(void)
|
||||||
#define L_NFNLAYER 192
|
#define L_NFNLAYER 192
|
||||||
#define L_MOUSECURSOR 256
|
#define L_MOUSECURSOR 256
|
||||||
|
|
||||||
|
// LED Effect
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
unsigned char rgb[7][5][3];
|
||||||
|
void led_ripple_effect(char r, char g, char b) {
|
||||||
|
static int scan_count = -10;
|
||||||
|
static int keys[] = { 6, 6, 6, 7, 7 };
|
||||||
|
static int keys_sum[] = { 0, 6, 12, 18, 25 };
|
||||||
|
|
||||||
|
if (scan_count == -1) {
|
||||||
|
rgblight_enable_noeeprom();
|
||||||
|
rgblight_mode(0);
|
||||||
|
} else if (scan_count >= 0 && scan_count < 5) {
|
||||||
|
for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) {
|
||||||
|
int i = c;
|
||||||
|
// FIXME:
|
||||||
|
|
||||||
|
int y = scan_count;
|
||||||
|
int dist_y = abs(y - keybufs[i].row);
|
||||||
|
for (int x=0; x<keys[y]; x++) {
|
||||||
|
int dist = abs(x - keybufs[i].col) + dist_y;
|
||||||
|
if (dist <= keybufs[i].frame) {
|
||||||
|
int elevation = MAX(0, (8 + dist - keybufs[i].frame)) << 2;
|
||||||
|
if (elevation) {
|
||||||
|
if ((rgb[x][y][0] != 255) && r) { rgb[x][y][0] = MIN(255, elevation + rgb[x][y][0]); }
|
||||||
|
if ((rgb[x][y][1] != 255) && g) { rgb[x][y][1] = MIN(255, elevation + rgb[x][y][1]); }
|
||||||
|
if ((rgb[x][y][2] != 255) && b) { rgb[x][y][2] = MIN(255, elevation + rgb[x][y][2]); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (scan_count == 5) {
|
||||||
|
for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) {
|
||||||
|
int i = c;
|
||||||
|
if (keybufs[i].frame < 18) {
|
||||||
|
keybufs[i].frame ++;
|
||||||
|
} else {
|
||||||
|
keybuf_begin ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (scan_count >= 6 && scan_count <= 10) {
|
||||||
|
int y = scan_count - 6;
|
||||||
|
for (int x=0; x<keys[y]; x++) {
|
||||||
|
int at = keys_sum[y] + ((y & 1) ? x : (keys[y] - x - 1));
|
||||||
|
led[at].r = rgb[x][y][0];
|
||||||
|
led[at].g = rgb[x][y][1];
|
||||||
|
led[at].b = rgb[x][y][2];
|
||||||
|
}
|
||||||
|
rgblight_set();
|
||||||
|
} else if (scan_count == 11) {
|
||||||
|
memset(rgb, 0, sizeof(rgb));
|
||||||
|
}
|
||||||
|
scan_count++;
|
||||||
|
if (scan_count >= 12) { scan_count = 0; }
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
uint8_t layer_state_old;
|
uint8_t layer_state_old;
|
||||||
|
|
||||||
|
@ -494,42 +572,44 @@ void matrix_scan_user(void) {
|
||||||
if(layer_state_old != layer_state){
|
if(layer_state_old != layer_state){
|
||||||
switch (layer_state) {
|
switch (layer_state) {
|
||||||
case L_BASE:
|
case L_BASE:
|
||||||
#ifdef RGBLIGHT_ENABLE
|
|
||||||
if (!RGBAnimation){
|
|
||||||
rgblight_sethsv(187,255,255);
|
|
||||||
rgblight_mode(1);
|
|
||||||
}else{
|
|
||||||
rgblight_mode(RGB_current_mode);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
case L_OPT:
|
case L_OPT:
|
||||||
register_delay_code(_OPT);
|
register_delay_code(_OPT);
|
||||||
break;
|
break;
|
||||||
case L_NUM:
|
case L_NUM:
|
||||||
register_delay_code(_NUM);
|
register_delay_code(_NUM);
|
||||||
#ifdef RGBLIGHT_ENABLE
|
|
||||||
rgblight_sethsv(25,255,255);
|
|
||||||
rgblight_mode(1);
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
case L_SYM:
|
case L_SYM:
|
||||||
register_delay_code(_SYM);
|
register_delay_code(_SYM);
|
||||||
#ifdef RGBLIGHT_ENABLE
|
|
||||||
rgblight_sethsv(96,255,255);
|
|
||||||
rgblight_mode(1);
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
case L_FUNC:
|
case L_FUNC:
|
||||||
register_delay_code(_FUNC);
|
register_delay_code(_FUNC);
|
||||||
#ifdef RGBLIGHT_ENABLE
|
|
||||||
rgblight_sethsv(331,255,255);
|
|
||||||
rgblight_mode(1);
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
layer_state_old = layer_state;
|
layer_state_old = layer_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
if(!RGBAnimation){
|
||||||
|
switch (layer_state) {
|
||||||
|
case L_BASE:
|
||||||
|
led_ripple_effect(0,112,127);
|
||||||
|
break;
|
||||||
|
case L_OPT:
|
||||||
|
led_ripple_effect(127,0,100);
|
||||||
|
break;
|
||||||
|
case L_NUM:
|
||||||
|
led_ripple_effect(127,23,0);
|
||||||
|
break;
|
||||||
|
case L_SYM:
|
||||||
|
led_ripple_effect(0,127,0);
|
||||||
|
break;
|
||||||
|
case L_FUNC:
|
||||||
|
led_ripple_effect(127,0,61);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
|
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
|
||||||
|
|
Loading…
Reference in a new issue