1 #include "infinity60.h"
2 #include "led_controller.h"
3 #include "keymap_jpetermans.h"
6 #define _______ KC_TRNS
15 /* ==================================
17 * ==================================*/
19 const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 /* Layer 0: Default Layer
21 * ,-----------------------------------------------------------.
22 * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Backs|
23 * |-----------------------------------------------------------|
24 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
25 * |-----------------------------------------------------------|
26 * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Enter |
27 * |-----------------------------------------------------------|
28 * |Shif| | Z| X| C| V| B| N| M| ,| .| /|Shift |
29 * |-----------------------------------------------------------|
30 * |Ctrl|Gui |Alt | Space |Alt |Gui | FN | Ctrl |
31 * `-----------------------------------------------------------'
35 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_NO,\
36 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSPC, \
37 TT(_FNAV), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_ENT, \
38 F(1), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,KC_NO, \
39 KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,TG(_NUMPAD),MO(_MEDIA), KC_RCTL \
42 /* F-, arrow, and media keys */
44 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_NO,\
45 KC_CAPS,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,_______,_______,KC_DEL, \
46 _______,M(0),KC_BTN2,_______,_______,_______,KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_INS,_______,_______, \
47 _______,KC_APP,KC_BTN1,KC_CALC,_______,_______,KC_END,_______,_______,_______,_______,_______,KC_NO, \
48 _______,_______,_______, _______, F(0),KC_NLCK,_______,_______ \
53 _______,_______,_______,_______,_______,_______,_______, KC_P7, KC_P8, KC_P9, KC_PSLS, _______,_______,_______,KC_NO,\
54 _______,_______,_______,_______,_______,_______,_______, KC_P4, KC_P5, KC_P6, KC_PAST, _______,_______,_______, \
55 MO(_FNAV),_______,_______,_______,_______,_______,_______, KC_P1, KC_P2, KC_P3, KC_PMNS, _______,_______, \
56 _______,_______,_______,_______,_______,_______,_______, KC_P0,KC_COMM,KC_PDOT,KC_PPLS, _______,KC_NO, \
57 _______,_______,_______, MO(_BASE), _______,_______,_______,_______ \
62 _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,KC_MUTE, KC_VOLD, KC_VOLU,_______,KC_NO,\
63 _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
64 _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______, \
65 _______,_______,F(2),F(3),F(4),_______,_______, _______, KC_MPRV, KC_MNXT,KC_MSTP, _______,KC_NO, \
66 _______,_______,_______, KC_MPLY, _______,_______, _______,_______ \
70 KC_GRV,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,KC_NO,\
71 _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
72 _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______, \
73 _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,KC_NO, \
74 _______,_______,_______, _______, _______,_______, _______,_______ \
78 _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,KC_NO,\
79 _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
80 _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______, \
81 _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,KC_NO, \
82 _______,_______,_______, _______, _______,_______, _______,_______ \
86 //id for user defined functions and macros
97 /* ==================================
99 * ==================================*/
102 Configuring led control can be done as
103 1. full keyboard at a time - define led array, or
104 2. individual led - send specific led address (defined in keymap.h)
107 11 12 13 14 15 16 17 18 21 22 23 24 25 26 27*
108 28 31 32 33 34 35 36 37 38 41 42 43 44 45
109 46 47 48 51 52 53 54 55 56 57 58 61 62
110 63 64 65 66 67 68 71 72 73 74 75 76 77*
111 78 81 82 83 84 85 86 87
112 *Unused in Alphabet Layout
114 The full keyboard arrays map to the mcu's LED pages
115 (8 available) desribed in led_controller.c
117 0x24 (pcb row 1) is first byte of PWM portion of LED page
118 0x34 (pcb row 2) is 17th byte of PWM portion of LED page
119 array translates to row and column positions
122 //LED Layer indicator (1 per layer 3-7)
123 const uint8_t led_single_layer[5] = {
126 //LED Page 1 - All off
127 //LED Page 2 - All on
129 const uint8_t led_nav[33] = {
130 11,12,13,14,15,16,17,18,21,22,23,24,25,
132 46,47,48, 54,55,56,57,58,
136 //LED Page 4 - _Numpad
137 const uint8_t led_numpad[17] = {
144 //LED Page 5 - _Media
145 const uint8_t led_media[12] = {
153 const uint8_t led_game[5] = {
168 const uint16_t fn_actions[] = {
169 [0] = ACTION_KEY(LALT(LCTL(KC_DEL))),
170 [1] = ACTION_LAYER_MODS(_TILDE, MOD_LSFT),
171 [2] = ACTION_FUNCTION(ACTION_LEDS_ALL),
172 [3] = ACTION_FUNCTION(ACTION_LEDS_GAME),
173 [4] = ACTION_FUNCTION(ACTION_LED_1)
177 /* custom action function */
178 void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
182 case ACTION_LEDS_ALL:
183 if(record->event.pressed) {
184 // signal the LED controller thread
185 msg=(TOGGLE_LED << 8) | 12;
186 chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
189 case ACTION_LEDS_GAME:
190 if(record->event.pressed) {
191 // signal the LED controller thread
192 msg=(TOGGLE_LAYER_LEDS << 8) | 5;
193 chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
197 if(record->event.pressed) {
198 // signal the LED controller thread
199 chMBPost(&led_mailbox, ADDR_LED_1, TIME_IMMEDIATE);
205 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
209 if (record->event.pressed) {
213 if (record->event.pressed) {
221 // Runs just one time when the keyboard initializes.
222 void matrix_init_user(void) {
224 led_controller_init();
226 //TODO: do pages need to be written at init or ok on demand?
228 write_led_page(3, led_nav, 33);
229 chThdSleepMilliseconds(5);
231 write_led_page(4, led_numpad, 17);
232 chThdSleepMilliseconds(5);
234 write_led_page(5, led_media, 12);
235 chThdSleepMilliseconds(5);
237 write_led_page(6, led_game, 5);
238 chThdSleepMilliseconds(5);
241 // Runs constantly in the background, in a loop.
242 void matrix_scan_user(void) {