diff options
| author | MakotoKurauchi <pluis@me.com> | 2018-08-16 01:30:34 +0900 |
|---|---|---|
| committer | Drashna Jaelre <drashna@live.com> | 2018-08-15 09:30:34 -0700 |
| commit | b3d80d4af011be30e6cdf55230d27e20a34b31a1 (patch) | |
| tree | b6af75e30e2bf6d58a95fcd949e44d5d3c69d6ea | |
| parent | 77b7e2cd59533abb203497cb8b7bb36d5a0086a2 (diff) | |
| download | qmk_firmware-b3d80d4af011be30e6cdf55230d27e20a34b31a1.tar.gz qmk_firmware-b3d80d4af011be30e6cdf55230d27e20a34b31a1.zip | |
Keymap: Helix : Update froggy keymap (#3652)
* led ripple effect
* fix key name
| -rw-r--r-- | keyboards/helix/rev2/keymaps/froggy/keymap.c | 122 |
1 files changed, 101 insertions, 21 deletions
diff --git a/keyboards/helix/rev2/keymaps/froggy/keymap.c b/keyboards/helix/rev2/keymaps/froggy/keymap.c index 5ac927af3..81a28dfa5 100644 --- a/keyboards/helix/rev2/keymaps/froggy/keymap.c +++ b/keyboards/helix/rev2/keymaps/froggy/keymap.c | |||
| @@ -81,7 +81,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 81 | * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| | 81 | * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| |
| 82 | * | Shift| Y | S | N | I | U |Space | | | | | | | | | 82 | * | Shift| Y | S | N | I | U |Space | | | | | | | | |
| 83 | * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| | 83 | * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| |
| 84 | * | Ctrl | Alt | win | Sym | Num | OPT | Ent | | | | | | | | | 84 | * | Ctrl | Alt | Gui | Sym | Num | OPT | Ent | | | | | | | | |
| 85 | * `-------------------------------------------------------------------------------------------------' | 85 | * `-------------------------------------------------------------------------------------------------' |
| 86 | */ | 86 | */ |
| 87 | [_BASE] = LAYOUT( \ | 87 | [_BASE] = LAYOUT( \ |
| @@ -256,8 +256,31 @@ void register_delay_code(uint8_t layer){ | |||
| 256 | } | 256 | } |
| 257 | } | 257 | } |
| 258 | 258 | ||
| 259 | #ifdef RGBLIGHT_ENABLE | ||
| 260 | struct keybuf { | ||
| 261 | char col, row; | ||
| 262 | char frame; | ||
| 263 | }; | ||
| 264 | struct keybuf keybufs[256]; | ||
| 265 | unsigned char keybuf_begin, keybuf_end; | ||
| 266 | |||
| 267 | int col, row; | ||
| 268 | #endif | ||
| 269 | |||
| 259 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | 270 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
| 260 | 271 | ||
| 272 | #ifdef RGBLIGHT_ENABLE | ||
| 273 | col = record->event.key.col; | ||
| 274 | row = record->event.key.row; | ||
| 275 | if (record->event.pressed && ((row < 5 && is_master) || (row >= 5 && !is_master))) { | ||
| 276 | int end = keybuf_end; | ||
| 277 | keybufs[end].col = col; | ||
| 278 | keybufs[end].row = row % 5; | ||
| 279 | keybufs[end].frame = 0; | ||
| 280 | keybuf_end ++; | ||
| 281 | } | ||
| 282 | #endif | ||
| 283 | |||
| 261 | if(tap_timer&&keycode!=OPT_TAP_SP){ | 284 | if(tap_timer&&keycode!=OPT_TAP_SP){ |
| 262 | tapping_key = true; | 285 | tapping_key = true; |
| 263 | } | 286 | } |
| @@ -475,6 +498,61 @@ void music_scale_user(void) | |||
| 475 | #define L_NFNLAYER 192 | 498 | #define L_NFNLAYER 192 |
| 476 | #define L_MOUSECURSOR 256 | 499 | #define L_MOUSECURSOR 256 |
| 477 | 500 | ||
| 501 | // LED Effect | ||
| 502 | #ifdef RGBLIGHT_ENABLE | ||
| 503 | unsigned char rgb[7][5][3]; | ||
| 504 | void led_ripple_effect(char r, char g, char b) { | ||
| 505 | static int scan_count = -10; | ||
| 506 | static int keys[] = { 6, 6, 6, 7, 7 }; | ||
| 507 | static int keys_sum[] = { 0, 6, 12, 18, 25 }; | ||
| 508 | |||
| 509 | if (scan_count == -1) { | ||
| 510 | rgblight_enable_noeeprom(); | ||
| 511 | rgblight_mode(0); | ||
| 512 | } else if (scan_count >= 0 && scan_count < 5) { | ||
| 513 | for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) { | ||
| 514 | int i = c; | ||
| 515 | // FIXME: | ||
| 516 | |||
| 517 | int y = scan_count; | ||
| 518 | int dist_y = abs(y - keybufs[i].row); | ||
| 519 | for (int x=0; x<keys[y]; x++) { | ||
| 520 | int dist = abs(x - keybufs[i].col) + dist_y; | ||
| 521 | if (dist <= keybufs[i].frame) { | ||
| 522 | int elevation = MAX(0, (8 + dist - keybufs[i].frame)) << 2; | ||
| 523 | if (elevation) { | ||
| 524 | if ((rgb[x][y][0] != 255) && r) { rgb[x][y][0] = MIN(255, elevation + rgb[x][y][0]); } | ||
| 525 | if ((rgb[x][y][1] != 255) && g) { rgb[x][y][1] = MIN(255, elevation + rgb[x][y][1]); } | ||
| 526 | if ((rgb[x][y][2] != 255) && b) { rgb[x][y][2] = MIN(255, elevation + rgb[x][y][2]); } | ||
| 527 | } | ||
| 528 | } | ||
| 529 | } | ||
| 530 | } | ||
| 531 | } else if (scan_count == 5) { | ||
| 532 | for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) { | ||
| 533 | int i = c; | ||
| 534 | if (keybufs[i].frame < 18) { | ||
| 535 | keybufs[i].frame ++; | ||
| 536 | } else { | ||
| 537 | keybuf_begin ++; | ||
| 538 | } | ||
| 539 | } | ||
| 540 | } else if (scan_count >= 6 && scan_count <= 10) { | ||
| 541 | int y = scan_count - 6; | ||
| 542 | for (int x=0; x<keys[y]; x++) { | ||
| 543 | int at = keys_sum[y] + ((y & 1) ? x : (keys[y] - x - 1)); | ||
| 544 | led[at].r = rgb[x][y][0]; | ||
| 545 | led[at].g = rgb[x][y][1]; | ||
| 546 | led[at].b = rgb[x][y][2]; | ||
| 547 | } | ||
| 548 | rgblight_set(); | ||
| 549 | } else if (scan_count == 11) { | ||
| 550 | memset(rgb, 0, sizeof(rgb)); | ||
| 551 | } | ||
| 552 | scan_count++; | ||
| 553 | if (scan_count >= 12) { scan_count = 0; } | ||
| 554 | } | ||
| 555 | #endif | ||
| 478 | 556 | ||
| 479 | uint8_t layer_state_old; | 557 | uint8_t layer_state_old; |
| 480 | 558 | ||
| @@ -494,42 +572,44 @@ void matrix_scan_user(void) { | |||
| 494 | if(layer_state_old != layer_state){ | 572 | if(layer_state_old != layer_state){ |
| 495 | switch (layer_state) { | 573 | switch (layer_state) { |
| 496 | case L_BASE: | 574 | case L_BASE: |
| 497 | #ifdef RGBLIGHT_ENABLE | ||
| 498 | if (!RGBAnimation){ | ||
| 499 | rgblight_sethsv(187,255,255); | ||
| 500 | rgblight_mode(1); | ||
| 501 | }else{ | ||
| 502 | rgblight_mode(RGB_current_mode); | ||
| 503 | } | ||
| 504 | #endif | ||
| 505 | break; | 575 | break; |
| 506 | case L_OPT: | 576 | case L_OPT: |
| 507 | register_delay_code(_OPT); | 577 | register_delay_code(_OPT); |
| 508 | break; | 578 | break; |
| 509 | case L_NUM: | 579 | case L_NUM: |
| 510 | register_delay_code(_NUM); | 580 | register_delay_code(_NUM); |
| 511 | #ifdef RGBLIGHT_ENABLE | ||
| 512 | rgblight_sethsv(25,255,255); | ||
| 513 | rgblight_mode(1); | ||
| 514 | #endif | ||
| 515 | break; | 581 | break; |
| 516 | case L_SYM: | 582 | case L_SYM: |
| 517 | register_delay_code(_SYM); | 583 | register_delay_code(_SYM); |
| 518 | #ifdef RGBLIGHT_ENABLE | ||
| 519 | rgblight_sethsv(96,255,255); | ||
| 520 | rgblight_mode(1); | ||
| 521 | #endif | ||
| 522 | break; | 584 | break; |
| 523 | case L_FUNC: | 585 | case L_FUNC: |
| 524 | register_delay_code(_FUNC); | 586 | register_delay_code(_FUNC); |
| 525 | #ifdef RGBLIGHT_ENABLE | ||
| 526 | rgblight_sethsv(331,255,255); | ||
| 527 | rgblight_mode(1); | ||
| 528 | #endif | ||
| 529 | break; | 587 | break; |
| 530 | } | 588 | } |
| 531 | layer_state_old = layer_state; | 589 | layer_state_old = layer_state; |
| 532 | } | 590 | } |
| 591 | |||
| 592 | #ifdef RGBLIGHT_ENABLE | ||
| 593 | if(!RGBAnimation){ | ||
| 594 | switch (layer_state) { | ||
| 595 | case L_BASE: | ||
| 596 | led_ripple_effect(0,112,127); | ||
| 597 | break; | ||
| 598 | case L_OPT: | ||
| 599 | led_ripple_effect(127,0,100); | ||
| 600 | break; | ||
| 601 | case L_NUM: | ||
| 602 | led_ripple_effect(127,23,0); | ||
| 603 | break; | ||
| 604 | case L_SYM: | ||
| 605 | led_ripple_effect(0,127,0); | ||
| 606 | break; | ||
| 607 | case L_FUNC: | ||
| 608 | led_ripple_effect(127,0,61); | ||
| 609 | break; | ||
| 610 | } | ||
| 611 | } | ||
| 612 | #endif | ||
| 533 | } | 613 | } |
| 534 | 614 | ||
| 535 | //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h | 615 | //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h |
