aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2017-02-11 11:49:00 -0500
committerGitHub <noreply@github.com>2017-02-11 11:49:00 -0500
commit6bb479ea45183cd2d9966ef660f8126cbfd3d849 (patch)
treece8b552f58b3c4887225f4a4b808045252deee0c
parent5bdddb7821a229470d9895ace8686b9fcf37494a (diff)
parent4163a3819ee4cdd49446da612a6ef3f74091ede1 (diff)
downloadqmk_firmware-6bb479ea45183cd2d9966ef660f8126cbfd3d849.tar.gz
qmk_firmware-6bb479ea45183cd2d9966ef660f8126cbfd3d849.zip
Merge pull request #1085 from priyadi/promethium
Promethium keyboard layout update
-rw-r--r--keyboards/handwired/promethium/config.h89
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/config.h7
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/keymap.c875
-rw-r--r--keyboards/handwired/promethium/promethium.c36
-rw-r--r--keyboards/handwired/promethium/promethium.h9
-rw-r--r--keyboards/handwired/promethium/rgbsps.c51
-rw-r--r--keyboards/handwired/promethium/rgbsps.h3
-rw-r--r--keyboards/handwired/promethium/rules.mk3
8 files changed, 780 insertions, 293 deletions
diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h
index 23fbfd0b9..fd45c2bfe 100644
--- a/keyboards/handwired/promethium/config.h
+++ b/keyboards/handwired/promethium/config.h
@@ -43,38 +43,107 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
43#define MATRIX_ROW_PINS { D7, C6, D0, D1, F5, F4, F1, F0 } 43#define MATRIX_ROW_PINS { D7, C6, D0, D1, F5, F4, F1, F0 }
44#define UNUSED_PINS 44#define UNUSED_PINS
45 45
46/* COL2ROW or ROW2COL */ 46/*
47 * Keyboard Matrix Assignments
48 *
49 * Change this to how you wired your keyboard
50 * COLS: AVR pins used for columns, left to right
51 * ROWS: AVR pins used for rows, top to bottom
52 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
53 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
54 *
55*/
47#define DIODE_DIRECTION COL2ROW 56#define DIODE_DIRECTION COL2ROW
48 57
49/* define if matrix has ghost */ 58// #define BACKLIGHT_PIN B7
59// #define BACKLIGHT_BREATHING
60// #define BACKLIGHT_LEVELS 3
61
62/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
63#define DEBOUNCING_DELAY 5
64
65/* define if matrix has ghost (lacks anti-ghosting diodes) */
50//#define MATRIX_HAS_GHOST 66//#define MATRIX_HAS_GHOST
51 67
52/* number of backlight levels */ 68/* number of backlight levels */
53#define BACKLIGHT_LEVELS 3
54
55/* Set 0 if debouncing isn't needed */
56#define DEBOUNCING_DELAY 5
57 69
58/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ 70/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
59#define LOCKING_SUPPORT_ENABLE 71// #define LOCKING_SUPPORT_ENABLE
60/* Locking resynchronize hack */ 72/* Locking resynchronize hack */
61#define LOCKING_RESYNC_ENABLE 73// #define LOCKING_RESYNC_ENABLE
74
75/*
76 * Force NKRO
77 *
78 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
79 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
80 * makefile for this to work.)
81 *
82 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
83 * until the next keyboard reset.
84 *
85 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
86 * fully operational during normal computer usage.
87 *
88 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
89 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
90 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
91 * power-up.
92 *
93 */
94//#define FORCE_NKRO
62 95
63/* key combination for command */ 96/* key combination for command */
64#define IS_COMMAND() ( \ 97#define IS_COMMAND() ( \
65 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT) | MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RCTRL)) \ 98 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT) | MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RCTRL)) \
66) 99)
67 100
101/* control how magic key switches layers */
102//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
103//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
104//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
105
106/* override magic key keymap */
107//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
108//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
109//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
110//#define MAGIC_KEY_HELP1 H
111//#define MAGIC_KEY_HELP2 SLASH
112//#define MAGIC_KEY_DEBUG D
113//#define MAGIC_KEY_DEBUG_MATRIX X
114//#define MAGIC_KEY_DEBUG_KBD K
115//#define MAGIC_KEY_DEBUG_MOUSE M
116//#define MAGIC_KEY_VERSION V
117//#define MAGIC_KEY_STATUS S
118//#define MAGIC_KEY_CONSOLE C
119//#define MAGIC_KEY_LAYER0_ALT1 ESC
120//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
121//#define MAGIC_KEY_LAYER0 0
122//#define MAGIC_KEY_LAYER1 1
123//#define MAGIC_KEY_LAYER2 2
124//#define MAGIC_KEY_LAYER3 3
125//#define MAGIC_KEY_LAYER4 4
126//#define MAGIC_KEY_LAYER5 5
127//#define MAGIC_KEY_LAYER6 6
128//#define MAGIC_KEY_LAYER7 7
129//#define MAGIC_KEY_LAYER8 8
130//#define MAGIC_KEY_LAYER9 9
131//#define MAGIC_KEY_BOOTLOADER PAUSE
132//#define MAGIC_KEY_LOCK CAPS
133//#define MAGIC_KEY_EEPROM E
134//#define MAGIC_KEY_NKRO N
135//#define MAGIC_KEY_SLEEP_LED Z
136
68/* 137/*
69 * Feature disable options 138 * Feature disable options
70 * These options are also useful to firmware size reduction. 139 * These options are also useful to firmware size reduction.
71 */ 140 */
72 141
73/* disable debug print */ 142/* disable debug print */
74//#define NO_DEBUG 143// #define NO_DEBUG
75 144
76/* disable print */ 145/* disable print */
77//#define NO_PRINT 146// #define NO_PRINT
78 147
79/* disable action features */ 148/* disable action features */
80//#define NO_ACTION_LAYER 149//#define NO_ACTION_LAYER
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/config.h b/keyboards/handwired/promethium/keymaps/priyadi/config.h
index 8b78c0dc4..53059ca7d 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/config.h
+++ b/keyboards/handwired/promethium/keymaps/priyadi/config.h
@@ -14,4 +14,11 @@
14#define RGB_DI_PIN B5 14#define RGB_DI_PIN B5
15#define RGBSPS_NUM 57 15#define RGBSPS_NUM 57
16 16
17#define LAYOUT_DVORAK
18#define LAYOUT_COLEMAK
19#define LAYOUT_NORMAN
20#define LAYOUT_WORKMAN
21
22#define DOUBLESPACE_LAYER_ENABLE
23
17#endif 24#endif
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
index 7ae269563..1ad34612e 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
+++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
@@ -3,40 +3,75 @@
3 3
4#include "promethium.h" 4#include "promethium.h"
5#include "action_layer.h" 5#include "action_layer.h"
6#ifdef AUDIO_ENABLE
7 #include "audio.h"
8 #include "musical_notes.h"
9#endif
10#include "eeconfig.h" 6#include "eeconfig.h"
11#include "process_unicode.h" 7#include "process_unicode.h"
12#include "quantum.h" 8#include "quantum.h"
13#include "rgbsps.h" 9#include "rgbsps.h"
14#include "ps2_mouse.h" 10#include "ps2_mouse.h"
15#include "ps2.h" 11#include "ps2.h"
12#include "outputselect.h"
13#include "led.h"
16#define COUNT(x) (sizeof (x) / sizeof (*(x))) 14#define COUNT(x) (sizeof (x) / sizeof (*(x)))
17 15
18// #define RGBLED_NUM 5 16// Fillers to make layering clearer
19// struct cRGB led[RGBLED_NUM]; 17#define _______ KC_TRNS
18#define XXXXXXX KC_NO
19#define G(x) LGUI(x)
20#define KC_WWWB KC_WWW_BACK
21#define KC_WWWF KC_WWW_FORWARD
22
23// hybrid right-alt & scroll lock (mapped to Compose in OS)
24#undef KC_RALT
25#define KC_RALT MT(MOD_RALT, KC_SLCK)
26
27bool capslock = false;
28#ifdef DOUBLESPACE_LAYER_ENABLE
29bool lspace_active = false;
30bool rspace_active = false;
31bool lspace_emitted = false;
32bool rspace_emitted = false;
33bool space_layer_entered = false;
34#endif
20 35
36// glow
37enum glow_modes {
38 GLOW_NONE,
39 GLOW_MIN,
40 GLOW_FULL
41};
42uint8_t glow_mode = GLOW_MIN;
21 43
22extern keymap_config_t keymap_config; 44extern keymap_config_t keymap_config;
23 45
24enum layers { 46enum layers {
25 _QWERTY, 47 _QWERTY,
48 _DVORAK,
26 _COLEMAK, 49 _COLEMAK,
27 _WORKMAN, 50 _WORKMAN,
51 _NORMAN,
52
28 _PUNC, 53 _PUNC,
29 _NUM, 54 _NUM,
30 _FUNC, 55 _FUNC,
56
57 _GREEKU,
58 _GREEKL,
59
31 _EMOJI, 60 _EMOJI,
32 _GUI, 61 _GUI,
62 _SYS,
33}; 63};
34 64
65// double-space layer
66#define _SPACE _GUI
67
35enum planck_keycodes { 68enum planck_keycodes {
36 // layouts 69 // layouts
37 QWERTY = SAFE_RANGE, 70 QWERTY = SAFE_RANGE,
71 DVORAK,
38 COLEMAK, 72 COLEMAK,
39 WORKMAN, 73 WORKMAN,
74 NORMAN,
40 75
41 // layer switchers 76 // layer switchers
42 PUNC, 77 PUNC,
@@ -44,17 +79,19 @@ enum planck_keycodes {
44 FUNC, 79 FUNC,
45 EMOJI, 80 EMOJI,
46 GUI, 81 GUI,
82 GREEK,
47 83
48 // os switchers 84 // os switchers
49 LINUX, 85 LINUX,
50 WIN, 86 WIN,
51 OSX, 87 OSX,
52};
53 88
54// Fillers to make layering clearer 89 // others
55 90 LSPACE,
56#define _______ KC_TRNS 91 RSPACE,
57#define XXXXXXX KC_NO 92 GLOW,
93 AUDIO
94};
58 95
59// unicode map 96// unicode map
60 97
@@ -106,6 +143,59 @@ enum unicode_name {
106 SUN, // sun 143 SUN, // sun
107 MOON, // moon 144 MOON, // moon
108 SKULL, // skull 145 SKULL, // skull
146
147 // greek letters
148 UALPH,
149 UBETA,
150 UGAMM,
151 UDELT,
152 UEPSI,
153 UZETA,
154 UETA,
155 UTHET,
156 UIOTA,
157 UKAPP,
158 ULAMB,
159 UMU,
160 UNU,
161 UXI,
162 UOMIC,
163 UPI,
164 URHO,
165 USIGM,
166 UTAU,
167 UUPSI,
168 UPHI,
169 UCHI,
170 UPSI,
171 UOMEG,
172
173 LALPH,
174 LBETA,
175 LGAMM,
176 LDELT,
177 LEPSI,
178 LZETA,
179 LETA,
180 LTHET,
181 LIOTA,
182 LKAPP,
183 LLAMB,
184 LMU,
185 LNU,
186 LXI,
187 LOMIC,
188 LPI,
189 LRHO,
190 LSIGM,
191 LTAU,
192 LUPSI,
193 LPHI,
194 LCHI,
195 LPSI,
196 LOMEG,
197
198 FSIGM,
109}; 199};
110 200
111const uint32_t PROGMEM unicode_map[] = { 201const uint32_t PROGMEM unicode_map[] = {
@@ -156,19 +246,58 @@ const uint32_t PROGMEM unicode_map[] = {
156 [SUN] = 0x2600, 246 [SUN] = 0x2600,
157 [MOON] = 0x1F314, 247 [MOON] = 0x1F314,
158 [SKULL] = 0x1F480, 248 [SKULL] = 0x1F480,
159};
160
161 249
162// hybrid shift - = 250 // greek letters
163// #undef KC_LSFT 251 [UALPH] = 0x0391,
164// #define KC_LSFT MT(MOD_LSFT, KC_MINS) 252 [UBETA] = 0x0392,
165// #undef KC_RSFT 253 [UGAMM] = 0x0393,
166// #define KC_RSFT MT(MOD_LSFT, KC_EQL) 254 [UDELT] = 0x0394,
167 255 [UEPSI] = 0x0395,
168 256 [UZETA] = 0x0396,
169// hybrid right-gui & scroll lock (mapped to Compose in OS) 257 [UETA] = 0x0397,
170#undef KC_RCTL 258 [UTHET] = 0x0398,
171#define KC_RCTL MT(MOD_LCTL, KC_SLCK) 259 [UIOTA] = 0x0399,
260 [UKAPP] = 0x039A,
261 [ULAMB] = 0x039B,
262 [UMU] = 0x039C,
263 [UNU] = 0x039D,
264 [UXI] = 0x039E,
265 [UOMIC] = 0x039F,
266 [UPI] = 0x03A0,
267 [URHO] = 0x03A1,
268 [USIGM] = 0x03A3,
269 [UTAU] = 0x03A4,
270 [UUPSI] = 0x03A5,
271 [UPHI] = 0x03A6,
272 [UCHI] = 0x03A7,
273 [UPSI] = 0x03A8,
274 [UOMEG] = 0x03A9,
275 [LALPH] = 0x03B1,
276 [LBETA] = 0x03B2,
277 [LGAMM] = 0x03B3,
278 [LDELT] = 0x03B4,
279 [LEPSI] = 0x03B5,
280 [LZETA] = 0x03B6,
281 [LETA] = 0x03B7,
282 [LTHET] = 0x03B8,
283 [LIOTA] = 0x03B9,
284 [LKAPP] = 0x03BA,
285 [LLAMB] = 0x03BB,
286 [LMU] = 0x03BC,
287 [LNU] = 0x03BD,
288 [LXI] = 0x03BE,
289 [LOMIC] = 0x03BF,
290 [LPI] = 0x03C0,
291 [LRHO] = 0x03C1,
292 [LSIGM] = 0x03C3,
293 [LTAU] = 0x03C4,
294 [LUPSI] = 0x03C5,
295 [LPHI] = 0x03C6,
296 [LCHI] = 0x03C7,
297 [LPSI] = 0x03C8,
298 [LOMEG] = 0x03C9,
299 [FSIGM] = 0x03C2,
300};
172 301
173// RGBSPS 302// RGBSPS
174 303
@@ -207,6 +336,17 @@ const uint8_t PROGMEM LED_ALNUM[] = {
207 LED_RSPC 336 LED_RSPC
208}; 337};
209 338
339const uint8_t PROGMEM LED_HOMING[] = {
340 LED_A,
341 LED_S,
342 LED_D,
343 LED_F,
344 LED_J,
345 LED_K,
346 LED_L,
347 LED_SCLN
348};
349
210const uint8_t PROGMEM LED_MODS[] = { 350const uint8_t PROGMEM LED_MODS[] = {
211 LED_TAB, 351 LED_TAB,
212 LED_ESC, 352 LED_ESC,
@@ -244,149 +384,105 @@ const uint8_t PROGMEM LED_TRACKPOINT[] = {
244 LED_TRACKPOINT3, 384 LED_TRACKPOINT3,
245}; 385};
246 386
247void led_reset(void) { 387void led_turnoff_keys(void) {
248 for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) { 388 for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
249 rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 15, 6, 0); 389 rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0);
250 } 390 }
251
252 for(uint8_t i = 0; i < COUNT(LED_MODS); i++) { 391 for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
253 rgbsps_set(pgm_read_byte(&LED_MODS[i]), 15, 0, 0); 392 rgbsps_set(pgm_read_byte(&LED_MODS[i]), 0, 0, 0);
254 } 393 }
255
256 for(uint8_t i = 0; i < COUNT(LED_FN); i++) { 394 for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
257 rgbsps_set(pgm_read_byte(&LED_FN[i]), 15, 15, 15); 395 rgbsps_set(pgm_read_byte(&LED_FN[i]), 0, 0, 0);
258 } 396 }
259} 397}
260 398
261void led_layer_normal(void) { 399void led_reset(void) {
262 rgbsps_set(LED_IND_FUNC, 0, 0, 0); 400 switch (glow_mode) {
263 rgbsps_set(LED_IND_NUM, 0, 0, 0); 401 case GLOW_NONE:
264 rgbsps_set(LED_IND_EMOJI, 0, 0, 0); 402 led_turnoff_keys();
265 403 break;
266 led_reset(); 404 case GLOW_MIN:
267 405 led_turnoff_keys();
268 rgbsps_send(); 406 for(uint8_t i = 0; i < COUNT(LED_HOMING); i++) {
269} 407 rgbsps_set(pgm_read_byte(&LED_HOMING[i]), 8, 8, 8);
270 408 }
271void led_layer_func(void) { 409 rgbsps_set(LED_F, 15, 0, 0);
272 rgbsps_set(LED_IND_FUNC, 0, 15, 0); 410 rgbsps_set(LED_J, 15, 0, 0);
273 rgbsps_set(LED_IND_NUM, 0, 0, 0); 411 break;
274 rgbsps_set(LED_IND_EMOJI, 0, 0, 0); 412 case GLOW_FULL:
275 413 for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
276 led_reset(); 414 rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 8, 8, 8);
277 415 }
278 for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) { 416 for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
279 rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0); 417 rgbsps_set(pgm_read_byte(&LED_MODS[i]), 0, 15, 0);
418 }
419 for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
420 rgbsps_set(pgm_read_byte(&LED_FN[i]), 0, 0, 15);
421 }
422 for(uint8_t i = 0; i < COUNT(LED_HOMING); i++) {
423 rgbsps_set(pgm_read_byte(&LED_HOMING[i]), 15, 0, 0);
424 }
425 rgbsps_set(LED_F, 15, 15, 0);
426 rgbsps_set(LED_J, 15, 15, 0);
427 break;
280 } 428 }
281
282 rgbsps_set(LED_I, 15, 0, 15);
283 rgbsps_set(LED_J, 15, 0, 15);
284 rgbsps_set(LED_K, 15, 0, 15);
285 rgbsps_set(LED_L, 15, 0, 15);
286
287 rgbsps_set(LED_U, 15, 0, 0);
288 rgbsps_set(LED_O, 15, 0, 0);
289 rgbsps_set(LED_COMM, 15, 0, 0);
290 rgbsps_set(LED_DOT, 15, 0, 0);
291 rgbsps_set(LED_SCLN, 15, 0, 0);
292 rgbsps_set(LED_P, 15, 0, 0);
293
294 rgbsps_set(LED_Q, 0, 15, 0);
295 rgbsps_set(LED_W, 0, 15, 0);
296 rgbsps_set(LED_E, 0, 15, 0);
297 rgbsps_set(LED_R, 0, 15, 0);
298 rgbsps_set(LED_A, 0, 15, 0);
299 rgbsps_set(LED_S, 0, 15, 0);
300 rgbsps_set(LED_D, 0, 15, 0);
301 rgbsps_set(LED_F, 0, 15, 0);
302 rgbsps_set(LED_Z, 0, 15, 0);
303 rgbsps_set(LED_X, 0, 15, 0);
304 rgbsps_set(LED_C, 0, 15, 0);
305 rgbsps_set(LED_V, 0, 15, 0);
306
307 rgbsps_send();
308} 429}
309 430
310void led_layer_punc(void) { 431void led_set_layer_indicator(void) {
311 rgbsps_set(LED_IND_FUNC, 0, 15, 0); 432 static uint8_t oldlayer = 255;
312 rgbsps_set(LED_IND_NUM, 0, 0, 15);
313 rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
314
315 led_reset();
316
317 rgbsps_send();
318}
319 433
320void led_layer_num(void) {
321 rgbsps_set(LED_IND_FUNC, 0, 0, 0); 434 rgbsps_set(LED_IND_FUNC, 0, 0, 0);
322 rgbsps_set(LED_IND_NUM, 0, 0, 15); 435 // rgbsps_set(LED_IND_NUM, 0, 0, 0);
323 rgbsps_set(LED_IND_EMOJI, 0, 0, 0); 436 rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
324 437
325 led_reset(); 438 led_reset();
326 439
327 for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) { 440 uint8_t layer = biton32(layer_state);
328 rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0); 441 if (oldlayer == layer) {
442 return;
329 } 443 }
330 444
331 rgbsps_set(LED_U, 0, 5, 15); 445 oldlayer = layer;
332 rgbsps_set(LED_I, 0, 5, 15);
333 rgbsps_set(LED_O, 0, 5, 15);
334 rgbsps_set(LED_J, 0, 5, 15);
335 rgbsps_set(LED_K, 0, 5, 15);
336 rgbsps_set(LED_L, 0, 5, 15);
337 rgbsps_set(LED_M, 0, 5, 15);
338 rgbsps_set(LED_COMM, 0, 5, 15);
339 rgbsps_set(LED_DOT, 0, 5, 15);
340 rgbsps_set(LED_FUNC, 0, 5, 15);
341
342 rgbsps_set(LED_EMOJI, 0, 10, 15);
343 rgbsps_set(LED_RALT, 0, 10, 15);
344
345 rgbsps_set(LED_Q, 0, 10, 15);
346 rgbsps_set(LED_W, 0, 10, 15);
347 rgbsps_set(LED_E, 0, 10, 15);
348 rgbsps_set(LED_R, 0, 10, 15);
349 rgbsps_set(LED_T, 0, 10, 15);
350 rgbsps_set(LED_Y, 0, 10, 15);
351 rgbsps_set(LED_P, 0, 10, 15);
352
353 rgbsps_set(LED_A, 0, 15, 15);
354 rgbsps_set(LED_S, 0, 15, 15);
355 rgbsps_set(LED_D, 0, 15, 15);
356 rgbsps_set(LED_F, 0, 15, 15);
357 rgbsps_set(LED_Z, 0, 15, 15);
358 rgbsps_set(LED_X, 0, 15, 15);
359 rgbsps_set(LED_C, 0, 15, 15);
360 rgbsps_set(LED_V, 0, 15, 15);
361
362 rgbsps_send();
363}
364 446
365void led_layer_emoji(void) { 447 if (layer <= _NORMAN) {
366 for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) { 448 rgbsps_send();
367 rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 15, 15, 0); 449 return;
368 }
369 for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
370 rgbsps_set(pgm_read_byte(&LED_MODS[i]), 15, 15, 0);
371 } 450 }
372 for(uint8_t i = 0; i < COUNT(LED_FN); i++) { 451
373 rgbsps_set(pgm_read_byte(&LED_FN[i]), 15, 15, 0); 452 switch(layer) {
453 case _FUNC:
454 rgbsps_set(LED_IND_FUNC, 15, 0, 0);
455 break;
456 // case _NUM:
457 // rgbsps_set(LED_IND_NUM, 0, 0, 15);
458 // break;
459 case _EMOJI:
460 rgbsps_set(LED_IND_EMOJI, 15, 15, 0);
461 break;
462 default:
463 rgbsps_set(LED_IND_FUNC, 3, 3, 3);
464 rgbsps_set(LED_IND_NUM, 3, 3, 3);
465 rgbsps_set(LED_IND_EMOJI, 3, 3, 3);
374 } 466 }
375 467
376 rgbsps_set(LED_IND_FUNC, 0, 0, 0); 468 rgbsps_send();
377 rgbsps_set(LED_IND_NUM, 0, 0, 0); 469}
378 rgbsps_set(LED_IND_EMOJI, 15, 15, 0);
379 470
380 rgbsps_set(LED_PUNC, 15, 15, 15); 471void led_set_output_ble(void) {
381 rgbsps_set(LED_EMOJI, 15, 15, 15); 472 rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15);
473 rgbsps_set(LED_IND_USB, 0, 0, 0);
474 rgbsps_send();
475}
382 476
477void led_set_output_usb(void) {
478 rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 0);
479 rgbsps_set(LED_IND_USB, 15, 15, 15);
383 rgbsps_send(); 480 rgbsps_send();
384} 481}
385 482
386void led_layer_gui(void) { 483void led_set_output_none(void) {
387 rgbsps_set(LED_IND_FUNC, 15, 10, 15); 484 rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 0);
388 rgbsps_set(LED_IND_NUM, 15, 10, 15); 485 rgbsps_set(LED_IND_USB, 0, 0, 0);
389 rgbsps_set(LED_IND_EMOJI, 15, 10, 15);
390 rgbsps_send(); 486 rgbsps_send();
391} 487}
392 488
@@ -398,13 +494,6 @@ void led_init(void) {
398 rgbsps_set(LED_TRACKPOINT1, 15, 0, 0); 494 rgbsps_set(LED_TRACKPOINT1, 15, 0, 0);
399 rgbsps_set(LED_TRACKPOINT2, 0, 0, 15); 495 rgbsps_set(LED_TRACKPOINT2, 0, 0, 15);
400 rgbsps_set(LED_TRACKPOINT3, 15, 0, 0); 496 rgbsps_set(LED_TRACKPOINT3, 15, 0, 0);
401
402 // // hardcode indicator for now
403 rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15);
404 rgbsps_set(LED_IND_USB, 15, 15, 15);
405 rgbsps_set(LED_IND_BATTERY, 0, 15, 0);
406
407 led_layer_normal();
408} 497}
409 498
410 499
@@ -416,20 +505,40 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
416 * ,-----------------------------------------------------------------------------------. 505 * ,-----------------------------------------------------------------------------------.
417 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | 506 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
418 * |------+------+------+------+------+-------------+------+------+------+------+------| 507 * |------+------+------+------+------+-------------+------+------+------+------+------|
419 * | Esc | A | S | D | F | G | H | J | K | L | ; |Enter | 508 * | Esc | A | S | D | F | G | H | J | K | L | ' |Enter |
420 * |------+------+------+------+------+------|------+------+------+------+------+------| 509 * |------+------+------+------+------+------|------+------+------+------+------+------|
421 * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift | 510 * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
422 * |------+------+------+------+------+------+------+------+------+------+------+------| 511 * |------+------+------+------+------+------+------+------+------+------+------+------|
423 * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl | 512 * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl |
424 * `-----------------------------------------------------------------------------------' 513 * `-----------------------------------------------------------------------------------'
425 */ 514 */
426[_QWERTY] = KEYMAP( 515[_QWERTY] = KEYMAP(
427 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, 516 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
428 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT , 517 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT ,
429 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, 518 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
430 KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL 519 KC_LCTL, KC_LALT, KC_LGUI, PUNC, NUM, LSPACE, RSPACE, FUNC, GREEK, KC_RGUI, KC_RALT, KC_RCTL
431), 520),
432 521
522/* Dvorak
523 * ,-----------------------------------------------------------------------------------.
524 * | Tab | ' | , | . | P | Y | F | G | C | R | L | Bksp |
525 * |------+------+------+------+------+-------------+------+------+------+------+------|
526 * | Esc | A | O | E | U | I | D | H | T | N | S |Enter |
527 * |------+------+------+------+------+------|------+------+------+------+------+------|
528 * | Shift| / | Q | J | K | X | B | M | W | V | Z |Shift |
529 * |------+------+------+------+------+------+------+------+------+------+------+------|
530 * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl |
531 * `-----------------------------------------------------------------------------------'
532 */
533#ifdef LAYOUT_DVORAK
534[_DVORAK] = KEYMAP(
535 _______, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, _______,
536 _______, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, _______,
537 _______, KC_SLSH, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, _______,
538 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
539),
540#endif
541
433/* Colemak 542/* Colemak
434 * ,-----------------------------------------------------------------------------------. 543 * ,-----------------------------------------------------------------------------------.
435 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | 544 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
@@ -438,15 +547,39 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
438 * |------+------+------+------+------+------|------+------+------+------+------+------| 547 * |------+------+------+------+------+------|------+------+------+------+------+------|
439 * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | 548 * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift |
440 * |------+------+------+------+------+------+------+------+------+------+------+------| 549 * |------+------+------+------+------+------+------+------+------+------+------+------|
441 * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl | 550 * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl |
442 * `-----------------------------------------------------------------------------------' 551 * `-----------------------------------------------------------------------------------'
443 */ 552 */
553
554#ifdef LAYOUT_COLEMAK
444[_COLEMAK] = KEYMAP( 555[_COLEMAK] = KEYMAP(
445 _______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, _______, 556 _______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, _______,
446 _______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, _______, 557 _______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, _______,
447 _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, 558 _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
448 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 559 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
449), 560),
561#endif
562
563/* Norman
564 * ,-----------------------------------------------------------------------------------.
565 * | Tab | Q | W | D | F | K | J | U | R | L | ; | Bksp |
566 * |------+------+------+------+------+-------------+------+------+------+------+------|
567 * | Esc | A | S | E | T | G | Y | N | I | O | H |Enter |
568 * |------+------+------+------+------+------|------+------+------+------+------+------|
569 * | Shift| Z | X | C | V | B | P | M | , | . | / |Shift |
570 * |------+------+------+------+------+------+------+------+------+------+------+------|
571 * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl |
572 * `-----------------------------------------------------------------------------------'
573 */
574
575#ifdef LAYOUT_NORMAN
576[_NORMAN] = KEYMAP(
577 _______, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_J, KC_U, KC_R, KC_L, KC_QUOT, _______,
578 _______, KC_A, KC_S, KC_E, KC_T, KC_G, KC_Y, KC_N, KC_I, KC_O, KC_H, _______,
579 _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
580 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
581),
582#endif
450 583
451/* Workman 584/* Workman
452 * ,-----------------------------------------------------------------------------------. 585 * ,-----------------------------------------------------------------------------------.
@@ -456,50 +589,53 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
456 * |------+------+------+------+------+------|------+------+------+------+------+------| 589 * |------+------+------+------+------+------|------+------+------+------+------+------|
457 * | Shift| Z | X | M | C | V | K | K | , | . | / |Shift | 590 * | Shift| Z | X | M | C | V | K | K | , | . | / |Shift |
458 * |------+------+------+------+------+------+------+------+------+------+------+------| 591 * |------+------+------+------+------+------+------+------+------+------+------+------|
459 * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl | 592 * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl |
460 * `-----------------------------------------------------------------------------------' 593 * `-----------------------------------------------------------------------------------'
461 */ 594 */
595
596#ifdef LAYOUT_WORKMAN
462[_WORKMAN] = KEYMAP( 597[_WORKMAN] = KEYMAP(
463 _______, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_QUOT, _______, 598 _______, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_QUOT, _______,
464 _______, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, _______, 599 _______, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, _______,
465 _______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, _______, 600 _______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, _______,
466 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 601 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
467), 602),
603#endif
468 604
469/* Punc 605/* Punc
470 * ,-----------------------------------------------------------------------------------. 606 * ,-----------------------------------------------------------------------------------.
471 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` | 607 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` |
472 * |------+------+------+------+------+-------------+------+------+------+------+------| 608 * |------+------+------+------+------+-------------+------+------+------+------+------|
473 * | | | \ | - | = | < | > | ( | ) | ' | | | 609 * | | * | \ | - | = | / | | ( | ) | < | > | |
474 * |------+------+------+------+------+------|------+------+------+------+------+------| 610 * |------+------+------+------+------+------|------+------+------+------+------+------|
475 * | | | | | _ | + | { | } | [ | ] | " | | | 611 * | & | ^ | | | _ | + | ? | | [ | ] | { | } | : |
476 * |------+------+------+------+------+------+------+------+------+------+------+------| 612 * |------+------+------+------+------+------+------+------+------+------+------+------|
477 * | | | | | | | | | | | | 613 * | | | | | | | | | | | |
478 * `-----------------------------------------------------------------------------------' 614 * `-----------------------------------------------------------------------------------'
479 */ 615 */
480[_PUNC] = KEYMAP( 616[_PUNC] = KEYMAP(
481 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV , 617 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV ,
482 XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL, KC_LABK, KC_RABK, KC_LPRN, KC_RPRN, KC_QUOT, XXXXXXX, XXXXXXX, 618 XXXXXXX, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, XXXXXXX, KC_LPRN, KC_RPRN, KC_LABK, KC_RABK, XXXXXXX,
483 XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_DQUO, XXXXXXX, XXXXXXX, 619 KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, XXXXXXX, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_COLN,
484 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 620 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
485), 621),
486 622
487/* Num 623/* Num
488 * ,-----------------------------------------------------------------------------------. 624 * ,-----------------------------------------------------------------------------------.
489 * | ^ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | 625 * | ~ | ! | @ | # | $ | % | A | 7 | 8 | 9 | D | ` |
490 * |------+------+------+------+------+-------------+------+------+------+------+------| 626 * |------+------+------+------+------+-------------+------+------+------+------+------|
491 * | Esc | @ | A | B | C | ( | ) | 4 | 5 | 6 | : |Enter | 627 * | | * | \ | - | = | / | B | 4 | 5 | 6 | E | |
492 * |------+------+------+------+------+------|------+------+------+------+------+------| 628 * |------+------+------+------+------+------|------+------+------+------+------+------|
493 * | & | # | D | E | F | [ | ] | 1 | 2 | 3 | / | * | 629 * | & | ^ | | | _ | + | ? | C | 1 | 2 | 3 | F | : |
494 * |------+------+------+------+------+------+------+------+------+------+------+------| 630 * |------+------+------+------+------+------+------+------+------+------+------+------|
495 * | | | | x | | | 0 | , | . | + | - | 631 * | | | | | | | x | 0 | , | . | | |
496 * `-----------------------------------------------------------------------------------' 632 * `-----------------------------------------------------------------------------------'
497 */ 633 */
498[_NUM] = KEYMAP( 634[_NUM] = KEYMAP(
499 KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, 635 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, S(KC_A), KC_7, KC_8, KC_9, S(KC_D), KC_GRV,
500 KC_ESC, KC_AT, S(KC_A), S(KC_B), S(KC_C), KC_LPRN, KC_RPRN, KC_4, KC_5, KC_6, KC_COLN, KC_ENT, 636 XXXXXXX, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, S(KC_B), KC_4, KC_5, KC_6, S(KC_E), _______,
501 KC_AMPR, KC_HASH, S(KC_D), S(KC_E), S(KC_F), KC_LBRC, KC_RBRC, KC_1, KC_2, KC_3, KC_SLSH, KC_ASTR, 637 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,
502 _______, _______, _______, KC_X, _______, KC_SPC, KC_SPC, KC_0, KC_COMM, KC_DOT, KC_PLUS, KC_MINS 638 _______, _______, _______, _______, _______, _______, _______, KC_0, KC_COMM, KC_DOT, KC_X, _______
503), 639),
504 640
505/* Func 641/* Func
@@ -520,6 +656,42 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
520 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 656 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
521), 657),
522 658
659/* Uppercase Greek
660 * ,-----------------------------------------------------------------------------------.
661 * | | | | | | | | | | | | |
662 * |------+------+------+------+------+-------------+------+------+------+------+------|
663 * | | | | | | | | | | | | |
664 * |------+------+------+------+------+------+------+------+------+------+------+------|
665 * | | | | | | | | | | | | |
666 * |------+------+------+------+------+------+------+------+------+------+------+------|
667 * | | | | | | | | | | | | |
668 * `-----------------------------------------------------------------------------------'
669 */
670[_GREEKU] = KEYMAP(
671 _______, _______, _______,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC), X(UPI), _______,
672 _______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA), X(UXI),X(UKAPP),X(ULAMB), _______, _______,
673 _______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA), X(UNU), X(UMU), _______, _______, _______, _______,
674 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
675),
676
677/* Lowercase Greek
678 * ,-----------------------------------------------------------------------------------.
679 * | | | | | | | | | | | | |
680 * |------+------+------+------+------+-------------+------+------+------+------+------|
681 * | | | | | | | | | | | | |
682 * |------+------+------+------+------+------+------+------+------+------+------+------|
683 * | | | | | | | | | | | | |
684 * |------+------+------+------+------+------+------+------+------+------+------+------|
685 * | | | | | | | | | | | | |
686 * `-----------------------------------------------------------------------------------'
687 */
688[_GREEKL] = KEYMAP(
689 _______, _______,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC), X(LPI), _______,
690 _______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA), X(LXI),X(LKAPP),X(LLAMB), _______, _______,
691 _______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA), X(LNU), X(LMU), _______, _______, _______, _______,
692 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
693),
694
523/* Emoji 695/* Emoji
524 * ,-----------------------------------------------------------------------------------. 696 * ,-----------------------------------------------------------------------------------.
525 * | | | | | | | | | | | | | 697 * | | | | | | | | | | | | |
@@ -535,40 +707,46 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
535 X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW), 707 X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW),
536 X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS), 708 X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS),
537 X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH), 709 X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH),
538 X(POO), X(EYES),X(HUNRD), _______,X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK) 710 X(POO), X(EYES), _______,X(HUNRD), X(SKULL),X(HORNS), X(HALO), X(FEAR),X(YUMMY),_______,X(DISAP),X(NOEVK)
539), 711),
540 712
541/* GUI 713/* GUI
542 * ,-----------------------------------------------------------------------------------. 714 * ,-----------------------------------------------------------------------------------.
543 * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | | 715 * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | |
544 * |------+------+------+------+------+-------------+------+------+------+------+------| 716 * |------+------+------+------+------+-------------+------+------+------+------+------|
545 * |Linux | | Vol- | Mute | Vol+ | | | D- | | D+ | |Qwerty| 717 * | | | Vol- | Mute | Vol+ | | | Prev | | Next | | |
546 * |------+------+------+------+------+------+------+------+------+------+------+------| 718 * |------+------+------+------+------+------+------+------+------+------+------+------|
547 * | Win | | Prev | Play | Next | | | | | | |Colmak| 719 * | | | Prev | Play | Next | | | | | | | |
548 * |------+------+------+------+------+------+------+------+------+------+------+------| 720 * |------+------+------+------+------+------+------+------+------+------+------+------|
549 * | OSX | | | | | BL- | BL+ | | | | |Workmn| 721 * | | | | | | | | | | | | |
550 * `-----------------------------------------------------------------------------------' 722 * `-----------------------------------------------------------------------------------'
551 */ 723 */
552[_GUI] = KEYMAP( 724[_GUI] = KEYMAP(
553 _______, LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5),LGUI(KC_6),LGUI(KC_7),LGUI(KC_8),LGUI(KC_9),LGUI(KC_0), _______, 725 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,
554 LINUX, _______, KC_VOLD, KC_MUTE, KC_VOLU,_______,_______,KC_WWW_BACK,_______,KC_WWW_FORWARD,KC_PAUS, QWERTY, 726 XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX, KC_WWWB, XXXXXXX, KC_WWWF, XXXXXXX, XXXXXXX,
555 WIN, _______, KC_MPRV, KC_MPLY, KC_MNXT, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, COLEMAK, 727 XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, KC_SPC, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
556 OSX, _______, _______, _______, _______, BL_DEC, BL_INC, _______, _______, RGB_VAI, RGB_VAD, WORKMAN 728 XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX
557), 729),
558 730
559}; 731/* Sys
732 * ,-----------------------------------------------------------------------------------.
733 * | |Qwerty| Win | |Reset | | | USB | | | | |
734 * |------+------+------+------+------+-------------+------+------+------+------+------|
735 * | |Audio | |Dvorak| | Glow | | |WorkMn|Linux | | |
736 * |------+------+------+------+------+------+------+------+------+------+------+------|
737 * | | | |Colmak| | BLE |Norman|MacOS | | | | |
738 * |------+------+------+------+------+------+------+------+------+------+------+------|
739 * | | | | | | | | | | | | |
740 * `-----------------------------------------------------------------------------------'
741 */
742[_SYS] = KEYMAP(
743 XXXXXXX, QWERTY, WIN, XXXXXXX, RESET, XXXXXXX, XXXXXXX, OUT_USB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
744 XXXXXXX, AUDIO, XXXXXXX, DVORAK, XXXXXXX, GLOW, XXXXXXX, XXXXXXX, WORKMAN, LINUX, XXXXXXX, XXXXXXX,
745 XXXXXXX, XXXXXXX, XXXXXXX, COLEMAK, XXXXXXX, OUT_BLE, NORMAN, OSX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
746 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______
747),
560 748
561#ifdef AUDIO_ENABLE 749};
562float tone_startup[][2] = SONG(STARTUP_SOUND);
563float tone_qwerty[][2] = SONG(QWERTY_SOUND);
564float tone_colemak[][2] = SONG(COLEMAK_SOUND);
565float tone_workman[][2] = SONG(DVORAK_SOUND);
566float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
567float tone_linux[][2] = SONG(CAPS_LOCK_ON_SOUND);
568float tone_windows[][2] = SONG(SCROLL_LOCK_ON_SOUND);
569float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND);
570float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2));
571#endif
572 750
573void persistant_default_layer_set(uint16_t default_layer) { 751void persistant_default_layer_set(uint16_t default_layer) {
574 eeconfig_update_default_layer(default_layer); 752 eeconfig_update_default_layer(default_layer);
@@ -576,24 +754,140 @@ void persistant_default_layer_set(uint16_t default_layer) {
576} 754}
577 755
578bool process_record_user(uint16_t keycode, keyrecord_t *record) { 756bool process_record_user(uint16_t keycode, keyrecord_t *record) {
579 #ifdef AUDIO_ENABLE 757 bool lshift = keyboard_report->mods & MOD_BIT(KC_LSFT);
580 // faux clicky 758 bool rshift = keyboard_report->mods & MOD_BIT(KC_RSFT);
581 if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0); 759
582 #endif 760#ifdef DOUBLESPACE_LAYER_ENABLE
761 // double-space: send space immediately if any other key depressed before space is released
762 if ((lspace_active ^ rspace_active)
763 && keycode != LSPACE
764 && keycode != RSPACE
765 && record->event.pressed)
766 {
767 if (lspace_active) {
768 if (!lspace_emitted) {
769 register_code(KC_SPC);
770 unregister_code(KC_SPC);
771 }
772 lspace_emitted = true;
773 }
774 if (rspace_active) {
775 if (!rspace_emitted) {
776 register_code(KC_SPC);
777 unregister_code(KC_SPC);
778 }
779 rspace_emitted = true;
780 }
781 }
782#endif
583 783
584 switch (keycode) { 784 switch (keycode) {
785
786#ifdef DOUBLESPACE_LAYER_ENABLE
787 // double-space enter space layer
788 case LSPACE:
789 if (record->event.pressed) {
790 lspace_active = true;
791 if (rspace_active) {
792 layer_on(_SPACE);
793 space_layer_entered = true;
794 }
795 } else {
796 lspace_active = false;
797 if (space_layer_entered) {
798 layer_off(_SPACE);
799 if (!rspace_active) {
800 space_layer_entered = false;
801 }
802 } else {
803 if (!lspace_emitted) {
804 register_code(KC_SPC);
805 unregister_code(KC_SPC);
806 }
807 lspace_emitted = false;
808 }
809 }
810 return false;
811 break;
812 case RSPACE:
813 if (record->event.pressed) {
814 rspace_active = true;
815 if (lspace_active) {
816 layer_on(_SPACE);
817 space_layer_entered = true;
818 }
819 } else {
820 rspace_active = false;
821 if (space_layer_entered) {
822 layer_off(_SPACE);
823 if (!lspace_active) {
824 space_layer_entered = false;
825 }
826 } else {
827 if (!rspace_emitted) {
828 register_code(KC_SPC);
829 unregister_code(KC_SPC);
830 }
831 rspace_emitted = false;
832 }
833 }
834 return false;
835 break;
836#endif
837
838 // handle greek layer shift
839 // handle both shift = capslock
840 case KC_LSFT:
841 case KC_RSFT:
842 ;
843 uint8_t layer = biton32(layer_state);
844 if (layer == _GREEKU || layer == _GREEKL) {
845 if (record->event.pressed) {
846 layer_on(_GREEKU);
847 layer_off(_GREEKL);
848 } else {
849 if (lshift ^ rshift) { // if only one shift was pressed
850 layer_on(_GREEKL);
851 layer_off(_GREEKU);
852 }
853 }
854 } else {
855 if (record->event.pressed) {
856 if (lshift ^ rshift) { // if only one shift was pressed
857 register_code(KC_CAPS);
858 unregister_code(KC_CAPS);
859 }
860 }
861 }
862 return true;
863 break;
864
865 // press both ctrls to activate SYS layer
866 case KC_LCTL:
867 case KC_RCTL:
868 ;
869 bool lctrl = keyboard_report->mods & MOD_BIT(KC_LCTL);
870 bool rctrl = keyboard_report->mods & MOD_BIT(KC_RCTL);
871 if (record->event.pressed) {
872 if (lctrl ^ rctrl) { // if only one ctrl was pressed
873 layer_on(_SYS);
874 }
875 } else {
876 layer_off(_SYS);
877 }
878 return true;
879 break;
880
585 // QWERTZ style comma and dot: semicolon and colon when shifted 881 // QWERTZ style comma and dot: semicolon and colon when shifted
586 case KC_COMM: 882 case KC_COMM:
587 if (record->event.pressed) { 883 if (record->event.pressed) {
588 bool lshifted = keyboard_report->mods & MOD_BIT(KC_LSFT); 884 if (lshift || rshift) {
589 bool rshifted = keyboard_report->mods & MOD_BIT(KC_RSFT); 885 if (lshift) unregister_code(KC_LSFT);
590 if (lshifted || rshifted) { 886 if (rshift) unregister_code(KC_RSFT);
591 if (lshifted) unregister_code(KC_LSFT);
592 if (rshifted) unregister_code(KC_RSFT);
593 register_code(KC_SCLN); 887 register_code(KC_SCLN);
594 unregister_code(KC_SCLN); 888 unregister_code(KC_SCLN);
595 if (lshifted) register_code(KC_LSFT); 889 if (lshift) register_code(KC_LSFT);
596 if (rshifted) register_code(KC_RSFT); 890 if (rshift) register_code(KC_RSFT);
597 } else { 891 } else {
598 register_code(KC_COMM); 892 register_code(KC_COMM);
599 unregister_code(KC_COMM); 893 unregister_code(KC_COMM);
@@ -617,90 +911,88 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
617 // layout switchers 911 // layout switchers
618 case QWERTY: 912 case QWERTY:
619 if (record->event.pressed) { 913 if (record->event.pressed) {
620 #ifdef AUDIO_ENABLE
621 PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
622 #endif
623 persistant_default_layer_set(1UL<<_QWERTY); 914 persistant_default_layer_set(1UL<<_QWERTY);
624 } 915 }
625 return false; 916 return false;
626 break; 917 break;
918#ifdef LAYOUT_DVORAK
919 case DVORAK:
920 if (record->event.pressed) {
921 persistant_default_layer_set(1UL<<_DVORAK);
922 }
923 return false;
924 break;
925#endif
926#ifdef LAYOUT_COLEMAK
627 case COLEMAK: 927 case COLEMAK:
628 if (record->event.pressed) { 928 if (record->event.pressed) {
629 #ifdef AUDIO_ENABLE
630 PLAY_NOTE_ARRAY(tone_colemak, false, 0);
631 #endif
632 persistant_default_layer_set(1UL<<_COLEMAK); 929 persistant_default_layer_set(1UL<<_COLEMAK);
633 } 930 }
634 return false; 931 return false;
635 break; 932 break;
933#endif
934#ifdef LAYOUT_WORKMAN
636 case WORKMAN: 935 case WORKMAN:
637 if (record->event.pressed) { 936 if (record->event.pressed) {
638 #ifdef AUDIO_ENABLE
639 PLAY_NOTE_ARRAY(tone_workman, false, 0);
640 #endif
641 persistant_default_layer_set(1UL<<_WORKMAN); 937 persistant_default_layer_set(1UL<<_WORKMAN);
642 } 938 }
643 return false; 939 return false;
644 break; 940 break;
941#endif
942#ifdef LAYOUT_NORMAN
943 case NORMAN:
944 if (record->event.pressed) {
945 persistant_default_layer_set(1UL<<_NORMAN);
946 }
947 return false;
948 break;
949#endif
645 950
646 // layer switcher 951 // layer switcher
647 case PUNC: 952 case PUNC:
648 if (record->event.pressed) { 953 if (record->event.pressed) {
649 layer_on(_PUNC); 954 layer_on(_PUNC);
650 update_tri_layer(_PUNC, _EMOJI, _GUI); 955 update_tri_layer(_PUNC, _GREEKL, _EMOJI);
651 if (IS_LAYER_ON(_GUI)) {
652 led_layer_gui();
653 } else {
654 led_layer_punc();;
655 }
656 } else { 956 } else {
657 layer_off(_PUNC); 957 layer_off(_PUNC);
658 update_tri_layer(_PUNC, _EMOJI, _GUI); 958 update_tri_layer(_PUNC, _GREEKL, _EMOJI);
659 if (IS_LAYER_ON(_EMOJI)) {
660 led_layer_emoji();
661 } else {
662 led_layer_normal();;
663 }
664 } 959 }
665 return false; 960 return false;
666 break; 961 break;
667 case EMOJI: 962
963 case GREEK:
668 if (record->event.pressed) { 964 if (record->event.pressed) {
669 layer_on(_EMOJI); 965 if (lshift || rshift) {
670 update_tri_layer(_PUNC, _EMOJI, _GUI); 966 layer_on(_GREEKU);
671 if (IS_LAYER_ON(_GUI)) { 967 layer_off(_GREEKL);
672 led_layer_gui();
673 } else { 968 } else {
674 led_layer_emoji();; 969 layer_on(_GREEKL);
970 layer_off(_GREEKU);
971 update_tri_layer(_PUNC, _GREEKL, _EMOJI);
675 } 972 }
676 } else { 973 } else {
677 layer_off(_EMOJI); 974 layer_off(_GREEKU);
678 update_tri_layer(_PUNC, _EMOJI, _GUI); 975 layer_off(_GREEKL);
679 if (IS_LAYER_ON(_PUNC)) { 976 update_tri_layer(_PUNC, _GREEKL, _EMOJI);
680 led_layer_punc();
681 } else {
682 led_layer_normal();;
683 }
684 } 977 }
685 return false; 978 return false;
686 break; 979 break;
980
687 case NUM: 981 case NUM:
688 if (record->event.pressed) { 982 if (record->event.pressed) {
983 turn_off_capslock();
689 layer_on(_NUM); 984 layer_on(_NUM);
690 led_layer_num();
691 } else { 985 } else {
692 layer_off(_NUM); 986 layer_off(_NUM);
693 led_layer_normal();
694 } 987 }
695 return false; 988 return false;
696 break; 989 break;
990
697 case FUNC: 991 case FUNC:
698 if (record->event.pressed) { 992 if (record->event.pressed) {
699 layer_on(_FUNC); 993 layer_on(_FUNC);
700 led_layer_func();
701 } else { 994 } else {
702 layer_off(_FUNC); 995 layer_off(_FUNC);
703 led_layer_normal();
704 } 996 }
705 return false; 997 return false;
706 break; 998 break;
@@ -708,86 +1000,115 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
708 // OS switchers 1000 // OS switchers
709 case LINUX: 1001 case LINUX:
710 set_unicode_input_mode(UC_LNX); 1002 set_unicode_input_mode(UC_LNX);
711 #ifdef AUDIO_ENABLE
712 PLAY_NOTE_ARRAY(tone_linux, false, 0);
713 #endif
714 return false; 1003 return false;
715 break; 1004 break;
716 case WIN: 1005 case WIN:
717 set_unicode_input_mode(UC_WINC); 1006 set_unicode_input_mode(UC_WINC);
718 #ifdef AUDIO_ENABLE
719 PLAY_NOTE_ARRAY(tone_windows, false, 0);
720 #endif
721 return false; 1007 return false;
722 break; 1008 break;
723 case OSX: 1009 case OSX:
724 set_unicode_input_mode(UC_OSX); 1010 set_unicode_input_mode(UC_OSX);
725 #ifdef AUDIO_ENABLE 1011 return false;
726 PLAY_NOTE_ARRAY(tone_osx, false, 0); 1012 break;
727 #endif 1013
1014 // glow mode changer
1015 case GLOW:
1016 if (record->event.pressed) {
1017 glow_mode++;
1018 if (glow_mode > GLOW_FULL) {
1019 glow_mode = GLOW_NONE;
1020 }
1021 led_reset();
1022 rgbsps_send();
1023 }
1024 return false;
1025 break;
1026
1027 // faux clicky toggle, TBD
1028 case AUDIO:
728 return false; 1029 return false;
729 break; 1030 break;
730 } 1031 }
731 return true; 1032 return true;
732} 1033}
733 1034
734void matrix_init_user(void) { 1035void set_output_user(uint8_t output) {
735 #ifdef AUDIO_ENABLE 1036 switch(output) {
736 startup_user(); 1037 case OUTPUT_USB:
737 #endif 1038 led_set_output_usb();
738 set_unicode_input_mode(UC_LNX); 1039 break;
739 led_init(); 1040 case OUTPUT_ADAFRUIT_BLE:
1041 led_set_output_ble();
1042 break;
1043 default:
1044 led_set_output_none();
1045 }
740} 1046}
741 1047
742// void init_rgblight(void) { 1048void matrix_init_user(void) {
743// for (uint8_t i = 0; i < RGBLED_NUM; i++) { 1049 _delay_ms(500); // give time for usb to initialize
744// led[i].r = 255;
745// led[i].g = 85;
746// led[i].b = 0;
747// }
748// ws2812_setleds(led, RGBLED_NUM);
749// }
750 1050
1051 set_unicode_input_mode(UC_LNX);
1052 led_init();
751 1053
752#ifdef AUDIO_ENABLE 1054 // auto detect output on init
1055 uint8_t output = auto_detect_output();
1056 if (output == OUTPUT_USB) {
1057 set_output(OUTPUT_USB);
1058 } else {
1059 set_output(OUTPUT_ADAFRUIT_BLE);
1060 }
1061}
753 1062
754void startup_user() 1063void matrix_scan_user(void) {
755{ 1064 led_set_layer_indicator();
756 _delay_ms(20); // gets rid of tick
757 PLAY_NOTE_ARRAY(tone_startup, false, 0);
758} 1065}
759 1066
760void shutdown_user() 1067void battery_poll(uint8_t level) {
761{ 1068 rgbsps_sethsv(LED_IND_BATTERY, level * 120/255, 255, 15);
762 PLAY_NOTE_ARRAY(tone_goodbye, false, 0); 1069 rgbsps_send();
763 _delay_ms(150);
764 stop_all_notes();
765} 1070}
766 1071
767#endif 1072void led_set_user(uint8_t usb_led) {
1073 bool new_capslock = usb_led & (1<<USB_LED_CAPS_LOCK);
1074 if (new_capslock ^ capslock) { // capslock state is different
1075 if (capslock = new_capslock) {
1076 rgbsps_set(LED_IND_NUM, 15, 0, 0);
1077 } else {
1078 rgbsps_set(LED_IND_NUM, 0, 0, 0);
1079 }
1080 rgbsps_send();
1081 }
1082}
768 1083
1084void turn_off_capslock() {
1085 if (capslock) {
1086 register_code(KC_CAPS);
1087 unregister_code(KC_CAPS);
1088 }
1089}
769 1090
770void ps2_mouse_init_user() { 1091void ps2_mouse_init_user() {
771 uint8_t rcv; 1092 uint8_t rcv;
772 1093
773 // set TrackPoint sensitivity 1094 // set TrackPoint sensitivity
774 PS2_MOUSE_SEND(0xE2, "set trackpoint sensitivity: 0xE2"); 1095 PS2_MOUSE_SEND(0xE2, "tpsens: 0xE2");
775 PS2_MOUSE_SEND(0x81, "set trackpoint sensitivity: 0x81"); 1096 PS2_MOUSE_SEND(0x81, "tpsens: 0x81");
776 PS2_MOUSE_SEND(0x4A, "set trackpoint sensitivity: 0x4A"); 1097 PS2_MOUSE_SEND(0x4A, "tpsens: 0x4A");
777 PS2_MOUSE_SEND(0x49, "set trackpoint sensitivity: 0x59"); 1098 PS2_MOUSE_SEND(0x49, "tpsens: 0x59");
778 1099
779 // set TrackPoint Negative Inertia factor 1100 // set TrackPoint Negative Inertia factor
780 PS2_MOUSE_SEND(0xE2, "set negative inertia factor: 0xE2"); 1101 PS2_MOUSE_SEND(0xE2, "tpnegin: 0xE2");
781 PS2_MOUSE_SEND(0x81, "set negative inertia factor: 0x81"); 1102 PS2_MOUSE_SEND(0x81, "tpnegin: 0x81");
782 PS2_MOUSE_SEND(0x4D, "set negative inertia factor: 0x4D"); 1103 PS2_MOUSE_SEND(0x4D, "tpnegin: 0x4D");
783 PS2_MOUSE_SEND(0x06, "set negative inertia factor: 0x06"); 1104 PS2_MOUSE_SEND(0x06, "tpnegin: 0x06");
784 1105
785 // set TrackPoint speed 1106 // set TrackPoint speed
786 // (transfer function upper plateau speed) 1107 // (transfer function upper plateau speed)
787 PS2_MOUSE_SEND(0xE2, "set trackpoint speed: 0xE2"); 1108 PS2_MOUSE_SEND(0xE2, "tpsp: 0xE2");
788 PS2_MOUSE_SEND(0x81, "set trackpoint speed: 0x81"); 1109 PS2_MOUSE_SEND(0x81, "tpsp: 0x81");
789 PS2_MOUSE_SEND(0x60, "set trackpoint speed: 0x60"); 1110 PS2_MOUSE_SEND(0x60, "tpsp: 0x60");
790 PS2_MOUSE_SEND(0x61, "set trackpoint speed: 0x61"); 1111 PS2_MOUSE_SEND(0x61, "tpsp: 0x61");
791 1112
792 // inquire pts status 1113 // inquire pts status
793 rcv = ps2_host_send(0xE2); 1114 rcv = ps2_host_send(0xE2);
diff --git a/keyboards/handwired/promethium/promethium.c b/keyboards/handwired/promethium/promethium.c
index a0035cce1..62e2281fa 100644
--- a/keyboards/handwired/promethium/promethium.c
+++ b/keyboards/handwired/promethium/promethium.c
@@ -1,6 +1,38 @@
1#include "promethium.h" 1#include "promethium.h"
2#include "analog.h"
3#include "timer.h"
4#include "matrix.h"
2 5
3void matrix_init_kb(void) { 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}
7
8uint8_t battery_level(void) {
9 float voltage = analogRead(BATTERY_PIN) * 2 * 3.3 / 1024;
10 if (voltage < MIN_VOLTAGE) return 0;
11 if (voltage > MAX_VOLTAGE) return 255;
12 return (voltage - MIN_VOLTAGE) / (MAX_VOLTAGE - MIN_VOLTAGE) * 255;
13}
14
15__attribute__ ((weak))
16void battery_poll(uint8_t level) {
17}
4 18
19void matrix_init_kb(void) {
5 matrix_init_user(); 20 matrix_init_user();
6} \ No newline at end of file 21}
22
23void matrix_scan_kb(void) {
24 static uint16_t counter = BATTERY_POLL;
25 counter++;
26
27 if (counter > BATTERY_POLL) {
28 counter = 0;
29 battery_poll(battery_level());
30 }
31
32 matrix_scan_user();
33}
34
35void led_set_kb(uint8_t usb_led) {
36 led_set_user(usb_led);
37}
38
diff --git a/keyboards/handwired/promethium/promethium.h b/keyboards/handwired/promethium/promethium.h
index 662eeab99..da37e5c56 100644
--- a/keyboards/handwired/promethium/promethium.h
+++ b/keyboards/handwired/promethium/promethium.h
@@ -4,6 +4,11 @@
4#include "quantum.h" 4#include "quantum.h"
5 5
6#define PS2_INIT_DELAY 2000 6#define PS2_INIT_DELAY 2000
7#define UNICODE_TYPE_DELAY 0
8#define BATTERY_PIN 9
9#define BATTERY_POLL 30000
10#define MAX_VOLTAGE 4.2
11#define MIN_VOLTAGE 3.2
7 12
8#define KEYMAP( \ 13#define KEYMAP( \
9 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \ 14 k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
@@ -22,6 +27,8 @@
22 {k47, k48, k49, k4a, k4b, k4c} \ 27 {k47, k48, k49, k4a, k4b, k4c} \
23} 28}
24 29
30
31
25enum led_sequence { 32enum led_sequence {
26 LED_IND_BLUETOOTH, 33 LED_IND_BLUETOOTH,
27 LED_IND_USB, 34 LED_IND_USB,
@@ -98,4 +105,4 @@ enum led_sequence {
98 105
99#endif 106#endif
100 107
101 108void battery_poll(uint8_t level); \ No newline at end of file
diff --git a/keyboards/handwired/promethium/rgbsps.c b/keyboards/handwired/promethium/rgbsps.c
index ea922ec3f..f30badd35 100644
--- a/keyboards/handwired/promethium/rgbsps.c
+++ b/keyboards/handwired/promethium/rgbsps.c
@@ -21,4 +21,53 @@ void rgbsps_turnoff(void) {
21 21
22void rgbsps_send(void) { 22void rgbsps_send(void) {
23 ws2812_setleds(led, RGBSPS_NUM); 23 ws2812_setleds(led, RGBSPS_NUM);
24} \ No newline at end of file 24}
25
26void rgbsps_sethsv(uint8_t index, uint16_t hue, uint8_t sat, uint8_t val) {
27 uint8_t r = 0, g = 0, b = 0, base, color;
28
29 if (sat == 0) { // Acromatic color (gray). Hue doesn't mind.
30 r = val;
31 g = val;
32 b = val;
33 } else {
34 base = ((255 - sat) * val) >> 8;
35 color = (val - base) * (hue % 60) / 60;
36
37 switch (hue / 60) {
38 case 0:
39 r = val;
40 g = base + color;
41 b = base;
42 break;
43 case 1:
44 r = val - color;
45 g = val;
46 b = base;
47 break;
48 case 2:
49 r = base;
50 g = val;
51 b = base + color;
52 break;
53 case 3:
54 r = base;
55 g = val - color;
56 b = val;
57 break;
58 case 4:
59 r = base + color;
60 g = base;
61 b = val;
62 break;
63 case 5:
64 r = val;
65 g = base;
66 b = val - color;
67 break;
68 }
69 }
70
71 rgbsps_set(index, r, g, b);
72}
73
diff --git a/keyboards/handwired/promethium/rgbsps.h b/keyboards/handwired/promethium/rgbsps.h
index 6da197f75..72612a7a8 100644
--- a/keyboards/handwired/promethium/rgbsps.h
+++ b/keyboards/handwired/promethium/rgbsps.h
@@ -1,4 +1,5 @@
1void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b); 1void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b);
2void rgbsps_setall(uint8_t r, uint8_t g, uint8_t b); 2void rgbsps_setall(uint8_t r, uint8_t g, uint8_t b);
3void rgbsps_turnoff(void); 3void rgbsps_turnoff(void);
4void rgbsps_send(void); \ No newline at end of file 4void rgbsps_send(void);
5void rgbsps_sethsv(uint8_t index, uint16_t hue, uint8_t sat, uint8_t val); \ No newline at end of file
diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk
index 465ef3359..e75cf4dde 100644
--- a/keyboards/handwired/promethium/rules.mk
+++ b/keyboards/handwired/promethium/rules.mk
@@ -72,4 +72,5 @@ API_SYSEX_ENABLE ?= no
72SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend 72SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
73 73
74SRC += $(QUANTUM_DIR)/light_ws2812.c 74SRC += $(QUANTUM_DIR)/light_ws2812.c
75SRC += rgbsps.c \ No newline at end of file 75SRC += rgbsps.c
76SRC += $(QUANTUM_DIR)/analog.c \ No newline at end of file