aboutsummaryrefslogtreecommitdiff
path: root/keyboards/handwired/promethium
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/handwired/promethium')
-rw-r--r--keyboards/handwired/promethium/config.h37
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/Makefile2
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/README.md4
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/keymap.c192
-rw-r--r--keyboards/handwired/promethium/matrix.c306
-rw-r--r--keyboards/handwired/promethium/promethium.c5
-rw-r--r--keyboards/handwired/promethium/rules.mk6
7 files changed, 499 insertions, 53 deletions
diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h
index 24f02993f..a13406b0d 100644
--- a/keyboards/handwired/promethium/config.h
+++ b/keyboards/handwired/promethium/config.h
@@ -35,12 +35,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
35#define DESCRIPTION 35#define DESCRIPTION
36 36
37/* key matrix size */ 37/* key matrix size */
38#define MATRIX_ROWS 8
39#define MATRIX_COLS 6 38#define MATRIX_COLS 6
39#define MATRIX_ROWS 9
40 40
41/* default pin-out */ 41/* default pin-out */
42#define MATRIX_COL_PINS { B6, B7, D6, C7, F6, F7 } 42#define MATRIX_COL_PINS { F4, F1, F0, D6, D0, D1 }
43#define MATRIX_ROW_PINS { D7, C6, D0, D1, F5, F4, F1, F0 } 43#define MATRIX_ROW_PINS { F5, F6, F7 }
44#define TRACKPOINT_PINS { B7, B6, D7 }
44#define UNUSED_PINS 45#define UNUSED_PINS
45 46
46/* 47/*
@@ -152,17 +153,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
152//#define NO_ACTION_MACRO 153//#define NO_ACTION_MACRO
153//#define NO_ACTION_FUNCTION 154//#define NO_ACTION_FUNCTION
154 155
155#define PS2_INIT_DELAY 2000 156#define PS2_INIT_DELAY 3000
156#define BATTERY_PIN 9 157#define BATTERY_PIN 9
157#define BATTERY_POLL 30000 158#define BATTERY_POLL 30000
158#define MAX_VOLTAGE 4.2 159#define MAX_VOLTAGE 4.2
159#define MIN_VOLTAGE 3.2 160#define MIN_VOLTAGE 3.2
160 161
162#define ___ KC_NO
163
161#define KEYMAP( \ 164#define KEYMAP( \
162 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \ 165 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
163 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \ 166 k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
164 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \ 167 k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
165 k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c \ 168 k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, \
169 tp1, tp2, tp3 \
166) \ 170) \
167{ \ 171{ \
168 {k11, k12, k13, k14, k15, k16}, \ 172 {k11, k12, k13, k14, k15, k16}, \
@@ -172,18 +176,29 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
172 {k17, k18, k19, k1a, k1b, k1c}, \ 176 {k17, k18, k19, k1a, k1b, k1c}, \
173 {k27, k28, k29, k2a, k2b, k2c}, \ 177 {k27, k28, k29, k2a, k2b, k2c}, \
174 {k37, k38, k39, k3a, k3b, k3c}, \ 178 {k37, k38, k39, k3a, k3b, k3c}, \
175 {k47, k48, k49, k4a, k4b, k4c} \ 179 {k47, k48, k49, k4a, k4b, k4c}, \
180 {tp1, tp2, tp3, ___, ___, ___} \
176} 181}
177 182
178#ifndef __ASSEMBLER__ // assembler doesn't like enum in .h file 183#ifndef __ASSEMBLER__ // assembler doesn't like enum in .h file
179enum led_sequence { 184enum led_sequence {
185 LED_IND_LINUX,
186 LED_IND_APPLE,
187 LED_IND_WINDOWS,
188 LED_IND_QWERTY,
189 LED_IND_ALT,
190 LED_IND_AUDIO,
180 LED_IND_BLUETOOTH, 191 LED_IND_BLUETOOTH,
181 LED_IND_USB, 192 LED_IND_USB,
182 LED_IND_BATTERY,
183 193
194 LED_IND_BATTERY,
195 LED_IND_CAPSLOCK,
196 LED_IND_GUI,
184 LED_IND_FUN, 197 LED_IND_FUN,
185 LED_IND_NUM, 198 LED_IND_NUM,
199 LED_IND_PUNC,
186 LED_IND_EMOJI, 200 LED_IND_EMOJI,
201 LED_IND_GREEK,
187 202
188 LED_BKSP, 203 LED_BKSP,
189 LED_ENT, 204 LED_ENT,
@@ -261,7 +276,7 @@ enum led_sequence {
261# define PS2_CLOCK_PORT PORTD 276# define PS2_CLOCK_PORT PORTD
262# define PS2_CLOCK_PIN PIND 277# define PS2_CLOCK_PIN PIND
263# define PS2_CLOCK_DDR DDRD 278# define PS2_CLOCK_DDR DDRD
264# define PS2_CLOCK_BIT 1 279# define PS2_CLOCK_BIT 3
265# define PS2_DATA_PORT PORTD 280# define PS2_DATA_PORT PORTD
266# define PS2_DATA_PIN PIND 281# define PS2_DATA_PIN PIND
267# define PS2_DATA_DDR DDRD 282# define PS2_DATA_DDR DDRD
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/Makefile b/keyboards/handwired/promethium/keymaps/priyadi/Makefile
index 46fdfa011..bd1a06734 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/Makefile
+++ b/keyboards/handwired/promethium/keymaps/priyadi/Makefile
@@ -19,6 +19,8 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
19RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. 19RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
20PS2_MOUSE_ENABLE = yes 20PS2_MOUSE_ENABLE = yes
21PS2_USE_INT = yes 21PS2_USE_INT = yes
22FAUXCLICKY_ENABLE = yes
23BLUETOOTH = AdafruitBLE
22 24
23# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE 25# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
24SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend 26SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/README.md b/keyboards/handwired/promethium/keymaps/priyadi/README.md
index ddeaed939..48824b9f7 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/README.md
+++ b/keyboards/handwired/promethium/keymaps/priyadi/README.md
@@ -37,8 +37,8 @@ On Promethium, USB or Bluetooth output is detected on startup. If USB is connect
37 37
38SYS-W, SYS-L, SYS-M switch Unicode input method. SYS-Q, SYS-D, SYS-C, SYS-K, SYS-N switch to QWERTY, DVORAK, Colemak, Workman and Norman, respectively. 38SYS-W, SYS-L, SYS-M switch Unicode input method. SYS-Q, SYS-D, SYS-C, SYS-K, SYS-N switch to QWERTY, DVORAK, Colemak, Workman and Norman, respectively.
39 39
40On Planck, SYS-A (mnemonic: audio) toggles faux clicky: use buzzer to emit clicks on key presses and releases. 40SYS-A (mnemonic: audio) toggles faux clicky: use buzzer to emit clicks on key presses and releases.
41 41
42On Promethium there are 6 indicator LEDs, and under switch LEDs on each switches, including Trackpoint buttons. Totaling 57 LEDs. Output is limited to 0xF for each LEDs to conserve power. SYS-G (mnemonic: glow) toggles various backlighting modes. 42On Promethium there are 16 indicator LEDs, and under switch LEDs on each switches, including Trackpoint buttons. Totaling 67 LEDs. Output is limited to 0xF for each LEDs to conserve power. SYS-G (mnemonic: glow) toggles various backlighting modes.
43 43
44On Promethium, there's a LED to indicate battery level. Hue indicates level: green is full, red is empty. \ No newline at end of file 44On Promethium, there's a LED to indicate battery level. Hue indicates level: green is full, red is empty. \ No newline at end of file
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
index cf7c67339..efa5d9756 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
+++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
@@ -38,6 +38,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
38#endif 38#endif
39#ifdef FAUXCLICKY_ENABLE 39#ifdef FAUXCLICKY_ENABLE
40#include "fauxclicky.h" 40#include "fauxclicky.h"
41#ifdef RGBSPS_ENABLE
42#undef FAUXCLICKY_OFF
43#define FAUXCLICKY_OFF do { \
44 fauxclicky_enabled = false; \
45 rgbsps_set(LED_AUDIO, 0, 0, 0); \
46 fauxclicky_stop(); \
47} while (0)
48#undef FAUXCLICKY_ON
49#define FAUXCLICKY_ON do { \
50 fauxclicky_enabled = true; \
51 rgbsps_set(LED_AUDIO, 8, 0, 8); \
52} while (0)
53#endif
41#endif 54#endif
42#include "outputselect.h" 55#include "outputselect.h"
43#include "led.h" 56#include "led.h"
@@ -128,8 +141,8 @@ enum planck_keycodes {
128#ifndef FAUXCLICKY_ENABLE 141#ifndef FAUXCLICKY_ENABLE
129 FC_TOG, 142 FC_TOG,
130#endif 143#endif
131#ifndef ADAFRUIT_BLE_ENABLE 144#ifndef MODULE_ADAFRUIT_BLE
132 OUT_BLE, 145 OUT_BT,
133#endif 146#endif
134 KEYCODE_END 147 KEYCODE_END
135}; 148};
@@ -428,12 +441,23 @@ const uint8_t PROGMEM LED_FN[] = {
428}; 441};
429 442
430const uint8_t PROGMEM LED_INDICATORS[] = { 443const uint8_t PROGMEM LED_INDICATORS[] = {
431 LED_IND_EMOJI, 444 LED_IND_LINUX,
432 LED_IND_NUM, 445 LED_IND_APPLE,
433 LED_IND_FUN, 446 LED_IND_WINDOWS,
434 LED_IND_BATTERY, 447 LED_IND_QWERTY,
435 LED_IND_USB, 448 LED_IND_ALT,
449 LED_IND_AUDIO,
436 LED_IND_BLUETOOTH, 450 LED_IND_BLUETOOTH,
451 LED_IND_USB,
452
453 LED_IND_BATTERY,
454 LED_IND_CAPSLOCK,
455 LED_IND_GUI,
456 LED_IND_FUN,
457 LED_IND_NUM,
458 LED_IND_PUNC,
459 LED_IND_EMOJI,
460 LED_IND_GREEK,
437}; 461};
438 462
439const uint8_t PROGMEM LED_TRACKPOINT[] = { 463const uint8_t PROGMEM LED_TRACKPOINT[] = {
@@ -486,15 +510,31 @@ void led_reset(void) {
486 } 510 }
487} 511}
488 512
513void led_set_default_layer_indicator(void) {
514 uint8_t default_layer = biton32(default_layer_state);
515 if (default_layer == _QWERTY) {
516 rgbsps_set(LED_IND_QWERTY, 15, 10, 0);
517 rgbsps_set(LED_IND_ALT, 0, 0, 0);
518 } else {
519 rgbsps_set(LED_IND_QWERTY, 0, 0, 0);
520 rgbsps_set(LED_IND_ALT, 15, 10, 0);
521 }
522 rgbsps_send();
523 return;
524}
525
489void led_set_layer_indicator(void) { 526void led_set_layer_indicator(void) {
490 static uint8_t oldlayer = 255; 527 static uint8_t oldlayer = 255;
491 528
529 led_reset();
530
531 rgbsps_set(LED_IND_GUI, 0, 0, 0);
492 rgbsps_set(LED_IND_FUN, 0, 0, 0); 532 rgbsps_set(LED_IND_FUN, 0, 0, 0);
493 // rgbsps_set(LED_IND_NUM, 0, 0, 0); 533 rgbsps_set(LED_IND_NUM, 0, 0, 0);
534 rgbsps_set(LED_IND_PUNC, 0, 0, 0);
535 rgbsps_set(LED_IND_GREEK, 0, 0, 0);
494 rgbsps_set(LED_IND_EMOJI, 0, 0, 0); 536 rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
495 537
496 led_reset();
497
498 uint8_t layer = biton32(layer_state); 538 uint8_t layer = biton32(layer_state);
499 if (oldlayer == layer) { 539 if (oldlayer == layer) {
500 return; 540 return;
@@ -508,24 +548,57 @@ void led_set_layer_indicator(void) {
508 } 548 }
509 549
510 switch(layer) { 550 switch(layer) {
551 case _GUI:
552 rgbsps_set(LED_IND_GUI, 15, 0, 15);
553 break;
511 case _FUN: 554 case _FUN:
512 rgbsps_set(LED_IND_FUN, 15, 0, 0); 555 rgbsps_set(LED_IND_FUN, 15, 0, 0);
513 break; 556 break;
514 // case _NUM: 557 case _NUM:
515 // rgbsps_set(LED_IND_NUM, 0, 0, 15); 558 rgbsps_set(LED_IND_NUM, 0, 0, 15);
516 // break; 559 break;
560 case _PUNC:
561 rgbsps_set(LED_IND_PUNC, 0, 15, 0);
562 break;
563 case _GREEKL:
564 case _GREEKU:
565 rgbsps_set(LED_IND_GREEK, 0, 15, 15);
566 break;
517 case _EMOJI: 567 case _EMOJI:
518 rgbsps_set(LED_IND_EMOJI, 15, 15, 0); 568 rgbsps_set(LED_IND_EMOJI, 15, 15, 0);
519 break; 569 break;
520 default: 570 default:
571 rgbsps_set(LED_IND_GUI, 3, 3, 3);
521 rgbsps_set(LED_IND_FUN, 3, 3, 3); 572 rgbsps_set(LED_IND_FUN, 3, 3, 3);
522 // rgbsps_set(LED_IND_NUM, 3, 3, 3); 573 rgbsps_set(LED_IND_NUM, 3, 3, 3);
574 rgbsps_set(LED_IND_PUNC, 3, 3, 3);
575 rgbsps_set(LED_IND_GREEK, 3, 3, 3);
523 rgbsps_set(LED_IND_EMOJI, 3, 3, 3); 576 rgbsps_set(LED_IND_EMOJI, 3, 3, 3);
524 } 577 }
525 578
526 rgbsps_send(); 579 rgbsps_send();
527} 580}
528 581
582void led_set_unicode_input_mode(void) {
583 rgbsps_set(LED_IND_LINUX, 0, 0, 0);
584 rgbsps_set(LED_IND_APPLE, 0, 0, 0);
585 rgbsps_set(LED_IND_WINDOWS, 0, 0, 0);
586
587 switch (get_unicode_input_mode()) {
588 case UC_LNX:
589 rgbsps_set(LED_IND_LINUX, 15, 15, 15);
590 break;
591 case UC_OSX:
592 rgbsps_set(LED_IND_APPLE, 15, 15, 15);
593 break;
594 case UC_WIN:
595 case UC_WINC:
596 rgbsps_set(LED_IND_WINDOWS, 15, 15, 15);
597 break;
598 }
599 rgbsps_send();
600}
601
529void led_set_output_ble(void) { 602void led_set_output_ble(void) {
530 rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15); 603 rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15);
531 rgbsps_set(LED_IND_USB, 0, 0, 0); 604 rgbsps_set(LED_IND_USB, 0, 0, 0);
@@ -552,7 +625,16 @@ void led_init(void) {
552 rgbsps_set(LED_TRACKPOINT1, 15, 0, 0); 625 rgbsps_set(LED_TRACKPOINT1, 15, 0, 0);
553 rgbsps_set(LED_TRACKPOINT2, 0, 0, 15); 626 rgbsps_set(LED_TRACKPOINT2, 0, 0, 15);
554 rgbsps_set(LED_TRACKPOINT3, 15, 0, 0); 627 rgbsps_set(LED_TRACKPOINT3, 15, 0, 0);
628
629 // unicode input mode
630 led_set_unicode_input_mode();
631
632 // layer indicator
633 led_set_layer_indicator();
634 led_set_default_layer_indicator();
555} 635}
636
637
556#endif // RGBSPS_ENABLE 638#endif // RGBSPS_ENABLE
557 639
558// keymaps 640// keymaps
@@ -574,7 +656,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
574 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, 656 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
575 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT , 657 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT ,
576 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, 658 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
577 KC_LCTL, KC_LALT, KC_LGUI, EMPTY, NUM, LSPACE, RSPACE, FUN, GREEK, KC_RGUI, C_RALT, KC_RCTL 659 KC_LCTL, KC_LALT, KC_LGUI, EMPTY, NUM, LSPACE, RSPACE, FUN, GREEK, KC_RGUI, C_RALT, KC_RCTL,
660 _______, _______, _______
578), 661),
579 662
580/* Dvorak 663/* Dvorak
@@ -593,7 +676,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
593 _______, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, _______, 676 _______, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, _______,
594 _______, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, _______, 677 _______, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, _______,
595 _______, KC_SLSH, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, _______, 678 _______, KC_SLSH, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, _______,
596 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 679 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
680 _______, _______, _______
597), 681),
598#endif 682#endif
599 683
@@ -614,7 +698,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
614 _______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, _______, 698 _______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, _______,
615 _______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, _______, 699 _______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, _______,
616 _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, 700 _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
617 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 701 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
702 _______, _______, _______
618), 703),
619#endif 704#endif
620 705
@@ -635,7 +720,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
635 _______, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_J, KC_U, KC_R, KC_L, KC_QUOT, _______, 720 _______, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_J, KC_U, KC_R, KC_L, KC_QUOT, _______,
636 _______, KC_A, KC_S, KC_E, KC_T, KC_G, KC_Y, KC_N, KC_I, KC_O, KC_H, _______, 721 _______, KC_A, KC_S, KC_E, KC_T, KC_G, KC_Y, KC_N, KC_I, KC_O, KC_H, _______,
637 _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, 722 _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
638 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 723 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
724 _______, _______, _______
639), 725),
640#endif 726#endif
641 727
@@ -656,7 +742,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
656 _______, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_QUOT, _______, 742 _______, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_QUOT, _______,
657 _______, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, _______, 743 _______, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, _______,
658 _______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, _______, 744 _______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, _______,
659 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 745 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
746 _______, _______, _______
660), 747),
661#endif 748#endif
662 749
@@ -675,7 +762,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
675 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, X(LTEQ), X(GTEQ), _______, 762 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, X(LTEQ), X(GTEQ), _______,
676 KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, X(NOTEQ),KC_LPRN, KC_RPRN, KC_LABK, KC_RABK, _______, 763 KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, X(NOTEQ),KC_LPRN, KC_RPRN, KC_LABK, KC_RABK, _______,
677 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, X(PLMIN),KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______, 764 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, X(PLMIN),KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______,
678 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_COLN, _______ 765 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_COLN, _______,
766 _______, _______, _______
679), 767),
680 768
681/* Num 769/* Num
@@ -690,10 +778,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
690 * `-----------------------------------------------------------------------------------' 778 * `-----------------------------------------------------------------------------------'
691 */ 779 */
692[_NUM] = KEYMAP( 780[_NUM] = KEYMAP(
693 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, S(KC_A), KC_7, KC_8, KC_9, S(KC_D), _______, 781 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, S(KC_A), KC_1, KC_2, KC_3, S(KC_D), _______,
694 KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, S(KC_B), KC_4, KC_5, KC_6, S(KC_E), _______, 782 KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, S(KC_B), KC_4, KC_5, KC_6, S(KC_E), _______,
695 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, S(KC_C), KC_1, KC_2, KC_3, S(KC_F), _______, 783 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, S(KC_C), KC_7, KC_8, KC_9, S(KC_F), _______,
696 _______, _______, KC_X, _______, _______, _______, _______, FUN0 , KC_COMM, KC_DOT, KC_COLN, _______ 784 _______, _______, KC_X, _______, _______, _______, _______, FUN0 , KC_COMM, KC_DOT, KC_COLN, _______,
785 _______, _______, _______
697), 786),
698 787
699/* Func 788/* Func
@@ -711,7 +800,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
711 XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_INS, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL, 800 XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_INS, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL,
712 KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, KC_PSCR, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, 801 KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, KC_PSCR, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______,
713 _______, KC_F9, KC_F10, KC_F11, KC_F12, KC_PAUS, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______, 802 _______, KC_F9, KC_F10, KC_F11, KC_F12, KC_PAUS, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______,
714 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 803 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
804 _______, _______, _______
715), 805),
716 806
717/* Uppercase Greek 807/* Uppercase Greek
@@ -729,7 +819,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
729 _______, XXXXXXX, XXXXXXX,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC), X(UPI), _______, 819 _______, XXXXXXX, XXXXXXX,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC), X(UPI), _______,
730 _______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA), X(UXI),X(UKAPP),X(ULAMB), KC_QUOT, _______, 820 _______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA), X(UXI),X(UKAPP),X(ULAMB), KC_QUOT, _______,
731 _______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA), X(UNU), X(UMU), KC_COMM, KC_DOT, KC_SLSH, _______, 821 _______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA), X(UNU), X(UMU), KC_COMM, KC_DOT, KC_SLSH, _______,
732 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 822 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
823 _______, _______, _______
733), 824),
734 825
735/* Lowercase Greek 826/* Lowercase Greek
@@ -747,7 +838,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
747 _______, XXXXXXX,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC), X(LPI), _______, 838 _______, XXXXXXX,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC), X(LPI), _______,
748 _______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA), X(LXI),X(LKAPP),X(LLAMB), KC_QUOT, _______, 839 _______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA), X(LXI),X(LKAPP),X(LLAMB), KC_QUOT, _______,
749 _______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA), X(LNU), X(LMU), KC_COMM, KC_DOT, KC_SLSH, _______, 840 _______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA), X(LNU), X(LMU), KC_COMM, KC_DOT, KC_SLSH, _______,
750 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 841 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
842 _______, _______, _______
751), 843),
752 844
753/* Empty 845/* Empty
@@ -765,7 +857,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
765 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 857 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
766 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 858 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
767 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 859 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
768 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 860 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
861 _______, _______, _______
769), 862),
770 863
771/* Emoji 864/* Emoji
@@ -783,7 +876,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
783 X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW), 876 X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW),
784 X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS), 877 X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS),
785 X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH), 878 X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH),
786 X(POO), X(EYES), X(HUNRD),_______, X(SKULL),X(HORNS), X(HALO), X(FEAR),_______,X(YUMMY),X(DISAP),X(NOEVK) 879 X(POO), X(EYES), X(HUNRD),_______, X(SKULL),X(HORNS), X(HALO), X(FEAR),_______,X(YUMMY),X(DISAP),X(NOEVK),
880 _______, _______, _______
787), 881),
788 882
789/* GUI 883/* GUI
@@ -801,7 +895,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
801 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, 895 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,
802 KC_ESC, XXXXXXX, S(KC_TAB),KC_ESC, KC_TAB, XXXXXXX, XXXXXXX, KC_WWWB, XXXXXXX, KC_WWWF, XXXXXXX, XXXXXXX, 896 KC_ESC, XXXXXXX, S(KC_TAB),KC_ESC, KC_TAB, XXXXXXX, XXXXXXX, KC_WWWB, XXXXXXX, KC_WWWF, XXXXXXX, XXXXXXX,
803 XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, KC_SPC, KC_SPC, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, 897 XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, KC_SPC, KC_SPC, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,
804 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX 898 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
899 _______, _______, _______
805), 900),
806 901
807/* Sys 902/* Sys
@@ -816,10 +911,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
816 * `-----------------------------------------------------------------------------------' 911 * `-----------------------------------------------------------------------------------'
817 */ 912 */
818[_SYS] = KEYMAP( 913[_SYS] = KEYMAP(
819 XXXXXXX, QWERTY, WIN, XXXXXXX, RESET, XXXXXXX, XXXXXXX, OUT_USB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 914 DEBUG, QWERTY, WIN, XXXXXXX, RESET, XXXXXXX, XXXXXXX, OUT_USB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
820 XXXXXXX, FC_TOG, XXXXXXX, DVORAK, XXXXXXX, GLOW, XXXXXXX, XXXXXXX, WORKMAN, LINUX, XXXXXXX, XXXXXXX, 915 XXXXXXX, FC_TOG, XXXXXXX, DVORAK, XXXXXXX, GLOW, XXXXXXX, XXXXXXX, WORKMAN, LINUX, XXXXXXX, XXXXXXX,
821 XXXXXXX, XXXXXXX, XXXXXXX, COLEMAK, XXXXXXX, OUT_BLE, NORMAN, OSX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 916 XXXXXXX, XXXXXXX, XXXXXXX, COLEMAK, XXXXXXX, OUT_BT, NORMAN, OSX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
822 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______ 917 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
918 _______, _______, _______
823), 919),
824 920
825 921
@@ -828,6 +924,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
828void persistant_default_layer_set(uint16_t default_layer) { 924void persistant_default_layer_set(uint16_t default_layer) {
829 eeconfig_update_default_layer(default_layer); 925 eeconfig_update_default_layer(default_layer);
830 default_layer_set(default_layer); 926 default_layer_set(default_layer);
927#ifdef RGBSPS_ENABLE
928 led_set_default_layer_indicator();
929#endif
831} 930}
832 931
833#ifdef DOUBLESPACE_LAYER_ENABLE 932#ifdef DOUBLESPACE_LAYER_ENABLE
@@ -1072,14 +1171,23 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
1072 // OS switchers 1171 // OS switchers
1073 case LINUX: 1172 case LINUX:
1074 set_unicode_input_mode(UC_LNX); 1173 set_unicode_input_mode(UC_LNX);
1174#ifdef RGBSPS_ENABLE
1175 led_set_unicode_input_mode();
1176#endif
1075 return false; 1177 return false;
1076 break; 1178 break;
1077 case WIN: 1179 case WIN:
1078 set_unicode_input_mode(UC_WINC); 1180 set_unicode_input_mode(UC_WINC);
1181#ifdef RGBSPS_ENABLE
1182 led_set_unicode_input_mode();
1183#endif
1079 return false; 1184 return false;
1080 break; 1185 break;
1081 case OSX: 1186 case OSX:
1082 set_unicode_input_mode(UC_OSX); 1187 set_unicode_input_mode(UC_OSX);
1188#ifdef RGBSPS_ENABLE
1189 led_set_unicode_input_mode();
1190#endif
1083 return false; 1191 return false;
1084 break; 1192 break;
1085 1193
@@ -1101,6 +1209,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
1101 // faux clicky indicator 1209 // faux clicky indicator
1102#ifdef FAUXCLICKY_ENABLE 1210#ifdef FAUXCLICKY_ENABLE
1103 case FC_TOG: 1211 case FC_TOG:
1212#ifdef RGBSPS_ENABLE
1213 if (fauxclicky_enabled) {
1214 rgbsps_set(LED_IND_AUDIO, 0, 0, 0);
1215 } else {
1216 rgbsps_set(LED_IND_AUDIO, 5, 11, 13);
1217 }
1218 rgbsps_send();
1219#endif
1104 return true; 1220 return true;
1105 break; 1221 break;
1106#endif 1222#endif
@@ -1109,12 +1225,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
1109} 1225}
1110 1226
1111void set_output_user(uint8_t output) { 1227void set_output_user(uint8_t output) {
1112#ifdef ADAFRUIT_BLE_ENABLE 1228#ifdef MODULE_ADAFRUIT_BLE
1113 switch(output) { 1229 switch(output) {
1114 case OUTPUT_USB: 1230 case OUTPUT_USB:
1115 led_set_output_usb(); 1231 led_set_output_usb();
1116 break; 1232 break;
1117 case OUTPUT_ADAFRUIT_BLE: 1233 case OUTPUT_BLUETOOTH:
1118 led_set_output_ble(); 1234 led_set_output_ble();
1119 break; 1235 break;
1120 default: 1236 default:
@@ -1133,12 +1249,12 @@ void matrix_init_user() {
1133#endif 1249#endif
1134 1250
1135 // auto detect output on init 1251 // auto detect output on init
1136#ifdef ADAFRUIT_BLE_ENABLE 1252#ifdef MODULE_ADAFRUIT_BLE
1137 uint8_t output = auto_detect_output(); 1253 uint8_t output = auto_detect_output();
1138 if (output == OUTPUT_USB) { 1254 if (output == OUTPUT_USB) {
1139 set_output(OUTPUT_USB); 1255 set_output(OUTPUT_USB);
1140 } else { 1256 } else {
1141 set_output(OUTPUT_ADAFRUIT_BLE); 1257 set_output(OUTPUT_BLUETOOTH);
1142 } 1258 }
1143#endif 1259#endif
1144} 1260}
@@ -1164,9 +1280,9 @@ void turn_off_capslock() {
1164 bool new_capslock = usb_led & (1<<USB_LED_CAPS_LOCK); 1280 bool new_capslock = usb_led & (1<<USB_LED_CAPS_LOCK);
1165 if (new_capslock ^ capslock) { // capslock state is different 1281 if (new_capslock ^ capslock) { // capslock state is different
1166 if ((capslock = new_capslock)) { 1282 if ((capslock = new_capslock)) {
1167 rgbsps_set(LED_IND_NUM, 15, 0, 0); 1283 rgbsps_set(LED_IND_CAPSLOCK, 15, 0, 0);
1168 } else { 1284 } else {
1169 rgbsps_set(LED_IND_NUM, 0, 0, 0); 1285 rgbsps_set(LED_IND_CAPSLOCK, 0, 0, 0);
1170 } 1286 }
1171 rgbsps_send(); 1287 rgbsps_send();
1172 } 1288 }
diff --git a/keyboards/handwired/promethium/matrix.c b/keyboards/handwired/promethium/matrix.c
new file mode 100644
index 000000000..2b7ce2bf5
--- /dev/null
+++ b/keyboards/handwired/promethium/matrix.c
@@ -0,0 +1,306 @@
1/*
2Copyright 2012 Jun Wako
3Copyright 2014 Jack Humbert
4Copyright 2017 Priyadi Iman Nurcahyo
5
6This program is free software: you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation, either version 2 of the License, or
9(at your option) any later version.
10
11This program is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with this program. If not, see <http://www.gnu.org/licenses/>.
18*/
19#include <stdint.h>
20#include <stdbool.h>
21#if defined(__AVR__)
22#include <avr/io.h>
23#endif
24#include "wait.h"
25#include "print.h"
26#include "debug.h"
27#include "util.h"
28#include "matrix.h"
29#include "timer.h"
30
31
32/* Set 0 if debouncing isn't needed */
33
34#ifndef DEBOUNCING_DELAY
35# define DEBOUNCING_DELAY 5
36#endif
37
38#if (DEBOUNCING_DELAY > 0)
39 static uint16_t debouncing_time;
40 static bool debouncing = false;
41#endif
42
43#if (MATRIX_COLS <= 8)
44# define print_matrix_header() print("\nr/c 01234567\n")
45# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
46# define matrix_bitpop(i) bitpop(matrix[i])
47# define ROW_SHIFTER ((uint8_t)1)
48#elif (MATRIX_COLS <= 16)
49# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
50# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
51# define matrix_bitpop(i) bitpop16(matrix[i])
52# define ROW_SHIFTER ((uint16_t)1)
53#elif (MATRIX_COLS <= 32)
54# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
55# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
56# define matrix_bitpop(i) bitpop32(matrix[i])
57# define ROW_SHIFTER ((uint32_t)1)
58#endif
59
60#ifdef MATRIX_MASKED
61 extern const matrix_row_t matrix_mask[];
62#endif
63
64static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
65static const uint8_t tp_pins[3] = TRACKPOINT_PINS;
66
67/* matrix state(1:on, 0:off) */
68static matrix_row_t matrix[MATRIX_ROWS];
69static matrix_row_t matrix_debouncing[MATRIX_ROWS];
70
71static void init_cols(void);
72static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
73static void unselect_rows(void);
74static void select_row(uint8_t row);
75static void unselect_row(uint8_t row);
76
77__attribute__ ((weak))
78void matrix_init_quantum(void) {
79 matrix_init_kb();
80}
81
82__attribute__ ((weak))
83void matrix_scan_quantum(void) {
84 matrix_scan_kb();
85}
86
87__attribute__ ((weak))
88void matrix_init_kb(void) {
89 matrix_init_user();
90}
91
92__attribute__ ((weak))
93void matrix_scan_kb(void) {
94 matrix_scan_user();
95}
96
97__attribute__ ((weak))
98void matrix_init_user(void) {
99}
100
101__attribute__ ((weak))
102void matrix_scan_user(void) {
103}
104
105inline
106uint8_t matrix_rows(void) {
107 return MATRIX_ROWS;
108}
109
110inline
111uint8_t matrix_cols(void) {
112 return MATRIX_COLS;
113}
114
115void matrix_init(void) {
116
117 // To use PORTF disable JTAG with writing JTD bit twice within four cycles.
118 #if (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || defined(__AVR_ATmega32U4__))
119 MCUCR |= _BV(JTD);
120 MCUCR |= _BV(JTD);
121 #endif
122
123 // initialize row and col
124 unselect_rows();
125 init_cols();
126
127 // initialize matrix state: all keys off
128 for (uint8_t i=0; i < MATRIX_ROWS; i++) {
129 matrix[i] = 0;
130 matrix_debouncing[i] = 0;
131 }
132
133 matrix_init_quantum();
134}
135
136uint8_t matrix_scan(void
137){
138 // Set row, read cols
139 for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
140# if (DEBOUNCING_DELAY > 0)
141 bool matrix_changed = read_cols_on_row(matrix_debouncing, current_row);
142
143 if (matrix_changed) {
144 debouncing = true;
145 debouncing_time = timer_read();
146 }
147
148# else
149 read_cols_on_row(matrix, current_row);
150# endif
151
152 }
153
154# if (DEBOUNCING_DELAY > 0)
155 if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
156 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
157 matrix[i] = matrix_debouncing[i];
158 }
159 debouncing = false;
160 }
161# endif
162
163 matrix_scan_quantum();
164 return 1;
165}
166
167bool matrix_is_modified(void)
168{
169#if (DEBOUNCING_DELAY > 0)
170 if (debouncing) return false;
171#endif
172 return true;
173}
174
175inline
176bool matrix_is_on(uint8_t row, uint8_t col)
177
178{
179 return (matrix[row] & ((matrix_row_t)1<col));
180}
181
182inline
183matrix_row_t matrix_get_row(uint8_t row)
184{
185 // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
186 // switch blocker installed and the switch is always pressed.
187#ifdef MATRIX_MASKED
188 return matrix[row] & matrix_mask[row];
189#else
190 return matrix[row];
191#endif
192}
193
194void matrix_print(void)
195{
196 print_matrix_header();
197
198 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
199 phex(row); print(": ");
200 print_matrix_row(row);
201 print("\n");
202 }
203}
204
205uint8_t matrix_key_count(void)
206{
207 uint8_t count = 0;
208 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
209 count += matrix_bitpop(i);
210 }
211 return count;
212}
213
214
215#define ROW_MASK 0b11100000
216
217static const uint8_t row_bit[MATRIX_ROWS] = {
218 // 76543210
219 0b00000000,
220 0b00100000,
221 0b01000000,
222 0b01100000,
223 0b10000000,
224 0b10100000,
225 0b11000000,
226 0b11100000,
227};
228
229static void init_cols(void)
230{
231 // columns
232 for(uint8_t x = 0; x < MATRIX_COLS; x++) {
233 uint8_t pin = col_pins[x];
234 _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
235 _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
236 }
237
238 // rows
239 DDRF |= ROW_MASK;
240 PORTF &= ~ROW_MASK;
241
242 // trackpoint
243 for(uint8_t x = 0; x < 3; x++) {
244 uint8_t pin = tp_pins[x];
245 _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
246 _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
247 }
248}
249
250static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
251 {
252 // Store last value of row prior to reading
253 matrix_row_t last_row_value = current_matrix[current_row];
254
255 // Clear data in matrix row
256 current_matrix[current_row] = 0;
257
258 // special case for trackpoint
259 if (current_row == 8) {
260 for(uint8_t tp_index = 0; tp_index < 3; tp_index++) {
261
262 // Select the TP pin to read (active low)
263 uint8_t pin = tp_pins[tp_index];
264 uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
265
266 // Populate the matrix row with the state of the col pin
267 current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << tp_index);
268 }
269 return (last_row_value != current_matrix[current_row]);
270 }
271
272 // Select row and wait for row selecton to stabilize
273 select_row(current_row);
274 _delay_us(5); // without this wait it won't read stable value.
275 // wait_us(50);
276
277 // For each col...
278 for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
279
280 // Select the col pin to read (active low)
281 uint8_t pin = col_pins[col_index];
282 uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
283
284 // Populate the matrix row with the state of the col pin
285 current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
286 }
287
288 // Unselect row
289 unselect_row(current_row);
290
291 return (last_row_value != current_matrix[current_row]);
292}
293
294static void select_row(uint8_t row)
295{
296 PORTF = row_bit[row] | (PORTF & ~ROW_MASK);
297}
298
299static void unselect_row(uint8_t row)
300{
301}
302
303static void unselect_rows(void)
304{
305}
306
diff --git a/keyboards/handwired/promethium/promethium.c b/keyboards/handwired/promethium/promethium.c
index 4943f8c9f..8b1a0c71f 100644
--- a/keyboards/handwired/promethium/promethium.c
+++ b/keyboards/handwired/promethium/promethium.c
@@ -2,6 +2,11 @@
2#include "analog.h" 2#include "analog.h"
3#include "timer.h" 3#include "timer.h"
4#include "matrix.h" 4#include "matrix.h"
5#include "musical_notes.h"
6
7float fauxclicky_pressed_note[2] = MUSICAL_NOTE(_F3, .03125);
8float fauxclicky_released_note[2] = MUSICAL_NOTE(_C3, .03125);
9float fauxclicky_beep_note[2] = MUSICAL_NOTE(_C3, .03125);
5 10
6// cubic fit {3.3, 0}, {3.5, 2.9}, {3.6, 5}, {3.7, 8.6}, {3.8, 36}, {3.9, 62}, {4.0, 73}, {4.05, 83}, {4.1, 89}, {4.15, 94}, {4.2, 100} 11// cubic fit {3.3, 0}, {3.5, 2.9}, {3.6, 5}, {3.7, 8.6}, {3.8, 36}, {3.9, 62}, {4.0, 73}, {4.05, 83}, {4.1, 89}, {4.15, 94}, {4.2, 100}
7 12
diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk
index e75cf4dde..a6dd43b85 100644
--- a/keyboards/handwired/promethium/rules.mk
+++ b/keyboards/handwired/promethium/rules.mk
@@ -65,12 +65,14 @@ BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
65RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. 65RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
66PS2_MOUSE_ENABLE ?= yes 66PS2_MOUSE_ENABLE ?= yes
67PS2_USE_INT ?= yes 67PS2_USE_INT ?= yes
68ADAFRUIT_BLE_ENABLE ?= yes
69API_SYSEX_ENABLE ?= no 68API_SYSEX_ENABLE ?= no
69CUSTOM_MATRIX ?= yes
70BLUETOOTH ?= AdafruitBLE
70 71
71# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE 72# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
72SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend 73SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
73 74
74SRC += $(QUANTUM_DIR)/light_ws2812.c 75SRC += $(QUANTUM_DIR)/light_ws2812.c
75SRC += rgbsps.c 76SRC += rgbsps.c
76SRC += $(QUANTUM_DIR)/analog.c \ No newline at end of file 77SRC += $(QUANTUM_DIR)/analog.c
78SRC += matrix.c