2 Copyright 2017 Priyadi Iman Nurcahyo
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 2 of the License, or
7 (at your option) any later version.
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12 You should have received a copy of the GNU General Public License
13 along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #if defined(PRIYADI_PROMETHIUM)
17 #include "promethium.h"
18 #elif defined(PRIYADI_PLANCK)
21 #error "no keyboard defined"
24 #include "action_layer.h"
27 #include "musical_notes.h"
30 #include "process_unicode.h"
35 #ifdef PS2_MOUSE_ENABLE
36 #include "ps2_mouse.h"
39 #ifdef FAUXCLICKY_ENABLE
40 #include "fauxclicky.h"
42 #include "outputselect.h"
44 #define COUNT(x) (sizeof (x) / sizeof (*(x)))
46 // Fillers to make layering clearer
47 #define _______ KC_TRNS
50 #define KC_WWWB KC_WWW_BACK
51 #define KC_WWWF KC_WWW_FORWARD
53 // hybrid right-alt & scroll lock (mapped to Compose in OS)
55 #define KC_RALT MT(MOD_RALT, KC_SLCK)
57 bool capslock = false;
58 #ifdef DOUBLESPACE_LAYER_ENABLE
59 bool lspace_active = false;
60 bool rspace_active = false;
61 bool lspace_emitted = false;
62 bool rspace_emitted = false;
63 bool space_layer_entered = false;
72 uint8_t glow_mode = GLOW_MIN;
74 void turn_off_capslock(void);
75 extern keymap_config_t keymap_config;
77 // layers, ordering is important!
84 _DEFAULT_LAYER_MAX = _NORMAN,
102 enum planck_keycodes {
126 #ifndef FAUXCLICKY_ENABLE
129 #ifndef ADAFRUIT_BLE_ENABLE
135 #define EMPTY MO(_EMPTY)
138 #define FUN0 LT(_FUN, KC_0)
143 GRIN, // grinning face 😊
144 TJOY, // tears of joy 😂
145 SMILE, // grining face with smiling eyes 😁
147 EYERT, // smiling face with heart shaped eyes 😍
148 CRY, // crying face 😭
149 SMEYE, // smiling face with smiling eyes 😊
152 HART2, // two hearts 💕
154 OKHND, // ok hand sign 👌
160 THMDN, // thumb down 👎
163 MUSIC, // musical notes
165 CELEB, // celebration 🙌
166 CRY2, // crying face 😢
167 COOL, // smile with sunglasses 😎
168 NOEVS, // see no evil
169 NOEVH, // hear no evil
170 NOEVK, // speak no evil
174 BHART, // broken heart
175 SLEEP, // sleeping face
176 SMIL2, // smiling face with open mouth & sweat
179 TONGU, // face with tongue & winking eye
180 DISAP, // disappointed
181 YUMMY, // face savoring delicious food
182 CLAP, // hand clapping
183 FEAR, // face screaming in fear
184 HORNS, // smiling face with horns
185 HALO, // smiling face with halo
250 const uint32_t PROGMEM unicode_map[] = {
351 [LTEQ] = 0x2264, // less than or equal
352 [GTEQ] = 0x2265, // greater than or equal
353 [NOTEQ] = 0x2260, // not equal
354 [PLMIN] = 0xB1, // plus minus
360 const uint8_t PROGMEM LED_ALNUM[] = {
395 const uint8_t PROGMEM LED_HOMING[] = {
406 const uint8_t PROGMEM LED_MODS[] = {
421 const uint8_t PROGMEM LED_FN[] = {
428 const uint8_t PROGMEM LED_INDICATORS[] = {
437 const uint8_t PROGMEM LED_TRACKPOINT[] = {
443 void led_turnoff_keys(void) {
444 for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
445 rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0);
447 for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
448 rgbsps_set(pgm_read_byte(&LED_MODS[i]), 0, 0, 0);
450 for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
451 rgbsps_set(pgm_read_byte(&LED_FN[i]), 0, 0, 0);
455 void led_reset(void) {
462 for(uint8_t i = 0; i < COUNT(LED_HOMING); i++) {
463 rgbsps_set(pgm_read_byte(&LED_HOMING[i]), 8, 8, 8);
465 rgbsps_set(LED_F, 15, 0, 0);
466 rgbsps_set(LED_J, 15, 0, 0);
469 for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
470 rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 8, 8, 8);
472 for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
473 rgbsps_set(pgm_read_byte(&LED_MODS[i]), 0, 15, 0);
475 for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
476 rgbsps_set(pgm_read_byte(&LED_FN[i]), 0, 0, 15);
478 for(uint8_t i = 0; i < COUNT(LED_HOMING); i++) {
479 rgbsps_set(pgm_read_byte(&LED_HOMING[i]), 15, 0, 0);
481 rgbsps_set(LED_F, 15, 15, 0);
482 rgbsps_set(LED_J, 15, 15, 0);
487 void led_set_layer_indicator(void) {
488 static uint8_t oldlayer = 255;
490 rgbsps_set(LED_IND_FUN, 0, 0, 0);
491 // rgbsps_set(LED_IND_NUM, 0, 0, 0);
492 rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
496 uint8_t layer = biton32(layer_state);
497 if (oldlayer == layer) {
503 if (layer <= _DEFAULT_LAYER_MAX) {
510 rgbsps_set(LED_IND_FUN, 15, 0, 0);
513 // rgbsps_set(LED_IND_NUM, 0, 0, 15);
516 rgbsps_set(LED_IND_EMOJI, 15, 15, 0);
519 rgbsps_set(LED_IND_FUN, 3, 3, 3);
520 // rgbsps_set(LED_IND_NUM, 3, 3, 3);
521 rgbsps_set(LED_IND_EMOJI, 3, 3, 3);
527 void led_set_output_ble(void) {
528 rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15);
529 rgbsps_set(LED_IND_USB, 0, 0, 0);
533 void led_set_output_usb(void) {
534 rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 0);
535 rgbsps_set(LED_IND_USB, 15, 15, 15);
539 void led_set_output_none(void) {
540 rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 0);
541 rgbsps_set(LED_IND_USB, 0, 0, 0);
545 void led_init(void) {
549 // set trackpoint color
550 rgbsps_set(LED_TRACKPOINT1, 15, 0, 0);
551 rgbsps_set(LED_TRACKPOINT2, 0, 0, 15);
552 rgbsps_set(LED_TRACKPOINT3, 15, 0, 0);
554 #endif // RGBSPS_ENABLE
558 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
561 * ,-----------------------------------------------------------------------------------.
562 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
563 * |------+------+------+------+------+-------------+------+------+------+------+------|
564 * | Esc | A | S | D | F | G | H | J | K | L | ' |Enter |
565 * |------+------+------+------+------+------|------+------+------+------+------+------|
566 * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
567 * |------+------+------+------+------+------+------+------+------+------+------+------|
568 * | Ctrl | Alt | GUI | Punc | Num | Space | Fun |Greek | GUI |AltGr | Ctrl |
569 * `-----------------------------------------------------------------------------------'
572 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
573 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT ,
574 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
575 KC_LCTL, KC_LALT, KC_LGUI, EMPTY, NUM, LSPACE, RSPACE, FUN, GREEK, KC_RGUI, KC_RALT, KC_RCTL
579 * ,-----------------------------------------------------------------------------------.
580 * | Tab | ' | , | . | P | Y | F | G | C | R | L | Bksp |
581 * |------+------+------+------+------+-------------+------+------+------+------+------|
582 * | Esc | A | O | E | U | I | D | H | T | N | S |Enter |
583 * |------+------+------+------+------+------|------+------+------+------+------+------|
584 * | Shift| / | Q | J | K | X | B | M | W | V | Z |Shift |
585 * |------+------+------+------+------+------+------+------+------+------+------+------|
586 * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl |
587 * `-----------------------------------------------------------------------------------'
591 _______, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, _______,
592 _______, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, _______,
593 _______, KC_SLSH, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, _______,
594 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
599 * ,-----------------------------------------------------------------------------------.
600 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
601 * |------+------+------+------+------+-------------+------+------+------+------+------|
602 * | Esc | A | R | S | T | D | H | N | E | I | O |Enter |
603 * |------+------+------+------+------+------|------+------+------+------+------+------|
604 * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift |
605 * |------+------+------+------+------+------+------+------+------+------+------+------|
606 * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl |
607 * `-----------------------------------------------------------------------------------'
610 #ifdef LAYOUT_COLEMAK
612 _______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, _______,
613 _______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, _______,
614 _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
615 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
620 * ,-----------------------------------------------------------------------------------.
621 * | Tab | Q | W | D | F | K | J | U | R | L | ; | Bksp |
622 * |------+------+------+------+------+-------------+------+------+------+------+------|
623 * | Esc | A | S | E | T | G | Y | N | I | O | H |Enter |
624 * |------+------+------+------+------+------|------+------+------+------+------+------|
625 * | Shift| Z | X | C | V | B | P | M | , | . | / |Shift |
626 * |------+------+------+------+------+------+------+------+------+------+------+------|
627 * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl |
628 * `-----------------------------------------------------------------------------------'
633 _______, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_J, KC_U, KC_R, KC_L, KC_QUOT, _______,
634 _______, KC_A, KC_S, KC_E, KC_T, KC_G, KC_Y, KC_N, KC_I, KC_O, KC_H, _______,
635 _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
636 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
641 * ,-----------------------------------------------------------------------------------.
642 * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp |
643 * |------+------+------+------+------+-------------+------+------+------+------+------|
644 * | Esc | A | S | H | T | G | Y | N | E | O | I |Enter |
645 * |------+------+------+------+------+------|------+------+------+------+------+------|
646 * | Shift| Z | X | M | C | V | K | K | , | . | / |Shift |
647 * |------+------+------+------+------+------+------+------+------+------+------+------|
648 * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl |
649 * `-----------------------------------------------------------------------------------'
652 #ifdef LAYOUT_WORKMAN
654 _______, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_QUOT, _______,
655 _______, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, _______,
656 _______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, _______,
657 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
662 * ,-----------------------------------------------------------------------------------.
663 * | ~ | ! | @ | # | $ | % | ^ | & | * | ≤ | ≥ | ` |
664 * |------+------+------+------+------+-------------+------+------+------+------+------|
665 * | | * | \ | - | = | / | ≠ | ( | ) | < | > | |
666 * |------+------+------+------+------+------|------+------+------+------+------+------|
667 * | & | ^ | | | _ | + | ? | ± | [ | ] | { | } | : |
668 * |------+------+------+------+------+------+------+------+------+------+------+------|
669 * | | | | | | | | | | | |
670 * `-----------------------------------------------------------------------------------'
673 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, X(LTEQ), X(GTEQ), _______,
674 KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, X(NOTEQ),KC_LPRN, KC_RPRN, KC_LABK, KC_RABK, _______,
675 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, X(PLMIN),KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_COLN,
676 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
680 * ,-----------------------------------------------------------------------------------.
681 * | ~ | ! | @ | # | $ | % | A | 7 | 8 | 9 | D | |
682 * |------+------+------+------+------+-------------+------+------+------+------+------|
683 * | ` | * | \ | - | = | / | B | 4 | 5 | 6 | E | |
684 * |------+------+------+------+------+------|------+------+------+------+------+------|
685 * | & | ^ | | | _ | + | ? | C | 1 | 2 | 3 | F | : |
686 * |------+------+------+------+------+------+------+------+------+------+------+------|
687 * | | | | | | | | 0 | , | . | x | |
688 * `-----------------------------------------------------------------------------------'
691 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, S(KC_A), KC_7, KC_8, KC_9, S(KC_D), _______,
692 KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, S(KC_B), KC_4, KC_5, KC_6, S(KC_E), _______,
693 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, S(KC_C), KC_1, KC_2, KC_3, S(KC_F), KC_COLN,
694 _______, _______, _______, _______, _______, _______, _______, FUN0 , KC_COMM, KC_DOT, KC_X, _______
698 * ,-----------------------------------------------------------------------------------.
699 * | | F1 | F2 | F3 | F4 | | | PgUp | Up | PgDn | PgUp | Del |
700 * |------+------+------+------+------+-------------+------+------+------+------+------|
701 * | | F5 | F6 | F7 | F8 |PrtSc | | Left | Down | Right| PgDn | Ins |
702 * |------+------+------+------+------+------|------+------+------+------+------+------|
703 * | | F9 | F10 | F11 | F12 | | | | Home | End | | |
704 * |------+------+------+------+------+------+------+------+------+------+------+------|
705 * | | | | | | | | | | | |
706 * `-----------------------------------------------------------------------------------'
709 XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL,
710 XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, KC_PSCR, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS,
711 _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______,
712 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
716 * ,-----------------------------------------------------------------------------------.
717 * | | | | | | | | | | | | |
718 * |------+------+------+------+------+-------------+------+------+------+------+------|
719 * | | | | | | | | | | | | |
720 * |------+------+------+------+------+------+------+------+------+------+------+------|
721 * | | | | | | | | | | | | |
722 * |------+------+------+------+------+------+------+------+------+------+------+------|
723 * | | | | | | | | | | | | |
724 * `-----------------------------------------------------------------------------------'
727 _______, XXXXXXX, XXXXXXX,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC), X(UPI), _______,
728 _______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA), X(UXI),X(UKAPP),X(ULAMB), KC_QUOT, _______,
729 _______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA), X(UNU), X(UMU), KC_COMM, KC_DOT, KC_SLSH, _______,
730 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
734 * ,-----------------------------------------------------------------------------------.
735 * | | | | | | | | | | | | |
736 * |------+------+------+------+------+-------------+------+------+------+------+------|
737 * | | | | | | | | | | | | |
738 * |------+------+------+------+------+------+------+------+------+------+------+------|
739 * | | | | | | | | | | | | |
740 * |------+------+------+------+------+------+------+------+------+------+------+------|
741 * | | | | | | | | | | | | |
742 * `-----------------------------------------------------------------------------------'
745 _______, XXXXXXX,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC), X(LPI), _______,
746 _______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA), X(LXI),X(LKAPP),X(LLAMB), KC_QUOT, _______,
747 _______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA), X(LNU), X(LMU), KC_COMM, KC_DOT, KC_SLSH, _______,
748 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
752 * ,-----------------------------------------------------------------------------------.
753 * | | | | | | | | | | | | |
754 * |------+------+------+------+------+-------------+------+------+------+------+------|
755 * | | | | | | | | | | | | |
756 * |------+------+------+------+------+------+------+------+------+------+------+------|
757 * | | | | | | | | | | | | |
758 * |------+------+------+------+------+------+------+------+------+------+------+------|
759 * | | | | | | | | | | | | |
760 * `-----------------------------------------------------------------------------------'
763 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
764 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
765 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
766 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
770 * ,-----------------------------------------------------------------------------------.
771 * | | | | | | | | | | | | |
772 * |------+------+------+------+------+-------------+------+------+------+------+------|
773 * | | | | | | | | | | | | |
774 * |------+------+------+------+------+------+------+------+------+------+------+------|
775 * | | | | | | | | | | | | |
776 * |------+------+------+------+------+------+------+------+------+------+------+------|
777 * | | | | | | | | | | | | |
778 * `-----------------------------------------------------------------------------------'
781 X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW),
782 X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS),
783 X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH),
784 X(POO), X(EYES), X(HUNRD),_______, X(SKULL),X(HORNS), X(HALO), X(FEAR),_______,X(YUMMY),X(DISAP),X(NOEVK)
788 * ,-----------------------------------------------------------------------------------.
789 * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | |
790 * |------+------+------+------+------+-------------+------+------+------+------+------|
791 * | Esc | | Btab | Esc | Tab | | | Prev | | Next | | |
792 * |------+------+------+------+------+------+------+------+------+------+------+------|
793 * | | | Prev | Play | Next | | | | | | | |
794 * |------+------+------+------+------+------+------+------+------+------+------+------|
795 * | | | | | | | | | | | | |
796 * `-----------------------------------------------------------------------------------'
799 XXXXXXX, G(KC_1), G(KC_2), G(KC_3), G(KC_4), G(KC_5), G(KC_6), G(KC_7), G(KC_8), G(KC_9), G(KC_0), XXXXXXX,
800 KC_ESC, XXXXXXX, S(KC_TAB),KC_ESC, KC_TAB, XXXXXXX, XXXXXXX, KC_WWWB, XXXXXXX, KC_WWWF, XXXXXXX, XXXXXXX,
801 XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, KC_SPC, KC_SPC, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,
802 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
806 * ,-----------------------------------------------------------------------------------.
807 * | |Qwerty| Win | |Reset | | | USB | | | | |
808 * |------+------+------+------+------+-------------+------+------+------+------+------|
809 * | |Audio | |Dvorak| | Glow | | |WorkMn|Linux | | |
810 * |------+------+------+------+------+------+------+------+------+------+------+------|
811 * | | | |Colmak| | BLE |Norman|MacOS | | | | |
812 * |------+------+------+------+------+------+------+------+------+------+------+------|
813 * | | | | | | | | | | | | |
814 * `-----------------------------------------------------------------------------------'
817 XXXXXXX, QWERTY, WIN, XXXXXXX, RESET, XXXXXXX, XXXXXXX, OUT_USB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
818 XXXXXXX, FC_TOG, XXXXXXX, DVORAK, XXXXXXX, GLOW, XXXXXXX, XXXXXXX, WORKMAN, LINUX, XXXXXXX, XXXXXXX,
819 XXXXXXX, XXXXXXX, XXXXXXX, COLEMAK, XXXXXXX, OUT_BLE, NORMAN, OSX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
820 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______
826 void persistant_default_layer_set(uint16_t default_layer) {
827 eeconfig_update_default_layer(default_layer);
828 default_layer_set(default_layer);
831 #ifdef DOUBLESPACE_LAYER_ENABLE
832 void process_doublespace(bool pressed, bool *isactive, bool *otheractive, bool *isemitted) {
837 register_code(KC_LALT); // sends alt and enter layer
838 space_layer_entered = true;
842 if (space_layer_entered) {
843 unregister_code(KC_LALT); // release alt and exit layer
846 space_layer_entered = false;
850 register_code(KC_SPC);
851 unregister_code(KC_SPC);
859 uint32_t layer_state_set_kb(uint32_t state)
861 // turn on punc layer if both fun & num are on
862 if ((state & ((1UL<<_NUM) | (1UL<<_FUN))) == ((1UL<<_NUM) | (1UL<<_FUN))) {
863 state |= (1UL<<_PUNC);
865 state &= ~(1UL<<_PUNC);
868 // turn on emoji layer if empty and greek layer are on
870 (state & ((1UL<<_EMPTY) | (1UL<<_GREEKU))) == ((1UL<<_EMPTY) | (1UL<<_GREEKU))
871 || (state & ((1UL<<_EMPTY) | (1UL<<_GREEKL))) == ((1UL<<_EMPTY) | (1UL<<_GREEKL))
873 state |= (1UL<<_EMOJI);
875 state &= ~(1UL<<_EMOJI);
880 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
881 static bool lshift = false;
882 static bool rshift = false;
883 static uint8_t layer = 0;
885 lshift = keyboard_report->mods & MOD_BIT(KC_LSFT);
886 rshift = keyboard_report->mods & MOD_BIT(KC_RSFT);
887 layer = biton32(layer_state);
889 #ifdef DOUBLESPACE_LAYER_ENABLE
890 // double-space: send space immediately if any other key depressed before space is released
891 if ((lspace_active ^ rspace_active)
894 && record->event.pressed)
897 if (!lspace_emitted) {
898 register_code(KC_SPC);
899 unregister_code(KC_SPC);
901 lspace_emitted = true;
904 if (!rspace_emitted) {
905 register_code(KC_SPC);
906 unregister_code(KC_SPC);
908 rspace_emitted = true;
912 if (layer == _SPACE && keycode != S(KC_TAB) && keycode != KC_TAB && keycode != KC_ESC && keycode != XXXXXXX) {
913 if (record->event.pressed) {
914 unregister_code(KC_LALT);
916 register_code(KC_LALT);
923 #ifdef DOUBLESPACE_LAYER_ENABLE
924 // double-space enter space layer
926 process_doublespace(record->event.pressed, &lspace_active, &rspace_active, &lspace_emitted);
930 process_doublespace(record->event.pressed, &rspace_active, &lspace_active, &rspace_emitted);
935 // handle greek layer shift
936 // handle both shift = capslock
940 if (layer == _GREEKU || layer == _GREEKL) {
941 if (record->event.pressed) {
945 if (lshift ^ rshift) { // if only one shift was pressed
951 if (record->event.pressed) {
952 if (lshift ^ rshift) { // if only one shift was pressed
953 register_code(KC_CAPS);
954 unregister_code(KC_CAPS);
961 // press both ctrls to activate SYS layer
965 bool lctrl = keyboard_report->mods & MOD_BIT(KC_LCTL);
966 bool rctrl = keyboard_report->mods & MOD_BIT(KC_RCTL);
967 if (record->event.pressed) {
968 if (lctrl ^ rctrl) { // if only one ctrl was pressed
977 // QWERTZ style comma and dot: semicolon and colon when shifted
979 if (record->event.pressed) {
980 if (lshift || rshift) {
981 if (lshift) unregister_code(KC_LSFT);
982 if (rshift) unregister_code(KC_RSFT);
983 register_code(KC_SCLN);
984 unregister_code(KC_SCLN);
985 if (lshift) register_code(KC_LSFT);
986 if (rshift) register_code(KC_RSFT);
988 register_code(KC_COMM);
989 unregister_code(KC_COMM);
995 if (record->event.pressed) {
996 if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) || (keyboard_report->mods & MOD_BIT(KC_RSFT))) {
997 register_code(KC_SCLN);
998 unregister_code(KC_SCLN);
1000 register_code(KC_DOT);
1001 unregister_code(KC_DOT);
1009 if (record->event.pressed) {
1010 persistant_default_layer_set(1UL<<_QWERTY);
1014 #ifdef LAYOUT_DVORAK
1016 if (record->event.pressed) {
1017 persistant_default_layer_set(1UL<<_DVORAK);
1022 #ifdef LAYOUT_COLEMAK
1024 if (record->event.pressed) {
1025 persistant_default_layer_set(1UL<<_COLEMAK);
1030 #ifdef LAYOUT_WORKMAN
1032 if (record->event.pressed) {
1033 persistant_default_layer_set(1UL<<_WORKMAN);
1038 #ifdef LAYOUT_NORMAN
1040 if (record->event.pressed) {
1041 persistant_default_layer_set(1UL<<_NORMAN);
1050 if (record->event.pressed) {
1051 if (lshift || rshift) {
1067 set_unicode_input_mode(UC_LNX);
1071 set_unicode_input_mode(UC_WINC);
1075 set_unicode_input_mode(UC_OSX);
1079 // glow mode changer
1080 #ifdef RGBSPS_ENABLE
1082 if (record->event.pressed) {
1084 if (glow_mode > GLOW_FULL) {
1085 glow_mode = GLOW_NONE;
1094 // faux clicky indicator
1095 #ifdef FAUXCLICKY_ENABLE
1104 void set_output_user(uint8_t output) {
1105 #ifdef ADAFRUIT_BLE_ENABLE
1108 led_set_output_usb();
1110 case OUTPUT_ADAFRUIT_BLE:
1111 led_set_output_ble();
1114 led_set_output_none();
1119 void matrix_init_user() {
1120 _delay_ms(500); // give time for usb to initialize
1122 set_unicode_input_mode(UC_LNX);
1124 #ifdef RGBSPS_ENABLE
1128 // auto detect output on init
1129 #ifdef ADAFRUIT_BLE_ENABLE
1130 uint8_t output = auto_detect_output();
1131 if (output == OUTPUT_USB) {
1132 set_output(OUTPUT_USB);
1134 set_output(OUTPUT_ADAFRUIT_BLE);
1139 void turn_off_capslock() {
1141 register_code(KC_CAPS);
1142 unregister_code(KC_CAPS);
1146 #ifdef RGBSPS_ENABLE
1147 void matrix_scan_user(void) {
1148 led_set_layer_indicator();
1151 void battery_poll(uint8_t level) {
1152 rgbsps_sethsv(LED_IND_BATTERY, level * 120/255, 255, 15);
1156 void led_set_user(uint8_t usb_led) {
1157 bool new_capslock = usb_led & (1<<USB_LED_CAPS_LOCK);
1158 if (new_capslock ^ capslock) { // capslock state is different
1159 if ((capslock = new_capslock)) {
1160 rgbsps_set(LED_IND_NUM, 15, 0, 0);
1162 rgbsps_set(LED_IND_NUM, 0, 0, 0);
1169 #ifdef PS2_MOUSE_ENABLE
1170 void ps2_mouse_init_user() {
1173 // set TrackPoint sensitivity
1174 PS2_MOUSE_SEND(0xE2, "tpsens: 0xE2");
1175 PS2_MOUSE_SEND(0x81, "tpsens: 0x81");
1176 PS2_MOUSE_SEND(0x4A, "tpsens: 0x4A");
1177 PS2_MOUSE_SEND(0x49, "tpsens: 0x59");
1179 // set TrackPoint Negative Inertia factor
1180 PS2_MOUSE_SEND(0xE2, "tpnegin: 0xE2");
1181 PS2_MOUSE_SEND(0x81, "tpnegin: 0x81");
1182 PS2_MOUSE_SEND(0x4D, "tpnegin: 0x4D");
1183 PS2_MOUSE_SEND(0x06, "tpnegin: 0x06");
1185 // set TrackPoint speed
1186 // (transfer function upper plateau speed)
1187 PS2_MOUSE_SEND(0xE2, "tpsp: 0xE2");
1188 PS2_MOUSE_SEND(0x81, "tpsp: 0x81");
1189 PS2_MOUSE_SEND(0x60, "tpsp: 0x60");
1190 PS2_MOUSE_SEND(0x61, "tpsp: 0x61");
1192 // inquire pts status
1193 rcv = ps2_host_send(0xE2);
1194 rcv = ps2_host_send(0x2C);
1195 rcv = ps2_host_recv_response();
1196 if ((rcv & 1) == 1) {
1197 // if on, disable pts
1198 rcv = ps2_host_send(0xE2);
1199 rcv = ps2_host_send(0x47);
1200 rcv = ps2_host_send(0x2C);
1201 rcv = ps2_host_send(0x01);