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 * ==================================*/
101 //TODO: ACTION_LED_LAYER which reads current layer and turns on appropriate LED
104 Configuring led control can be done as
105 1. full keyboard at a time - define led array, or
106 2. individual led - send specific led address (defined in keymap.h)
109 11 12 13 14 15 16 17 18 21 22 23 24 25 26 27*
110 28 31 32 33 34 35 36 37 38 41 42 43 44 45
111 46 47 48 51 52 53 54 55 56 57 58 61 62
112 63 64 65 66 67 68 71 72 73 74 75 76 77*
113 78 81 82 83 84 85 86 87
114 *Unused in Alphabet Layout
116 The full keyboard arrays map to the mcu's LED pages
117 (8 available) desribed in led_controller.c
119 0x24 (pcb row 1) is first byte of PWM portion of LED page
120 0x34 (pcb row 2) is 17th byte of PWM portion of LED page
121 array translates to row and column positions
125 const uint8_t led_game[72] = {
127 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
131 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
133 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
135 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
139 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
144 const uint8_t led_all[72] = {
146 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
148 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
150 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
152 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
154 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
156 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
158 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
160 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
163 const uint16_t fn_actions[] = {
164 [0] = ACTION_KEY(LALT(LCTL(KC_DEL))),
165 [1] = ACTION_LAYER_MODS(_TILDE, MOD_LSFT),
166 [2] = ACTION_FUNCTION(ACTION_LEDS_ALL),
167 [3] = ACTION_FUNCTION(ACTION_LEDS_GAME),
168 [4] = ACTION_FUNCTION(ACTION_LED_1)
172 /* custom action function */
173 void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
176 case ACTION_LEDS_ALL:
177 if(record->event.pressed) {
178 // signal the LED controller thread
179 chMBPost(&led_mailbox, 1, TIME_IMMEDIATE);
182 case ACTION_LEDS_GAME:
183 if(record->event.pressed) {
184 // signal the LED controller thread
185 chMBPost(&led_mailbox, 2, TIME_IMMEDIATE);
189 if(record->event.pressed) {
190 // signal the LED controller thread
191 chMBPost(&led_mailbox, ADDR_LED_1, TIME_IMMEDIATE);
197 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
201 if (record->event.pressed) {
205 if (record->event.pressed) {
213 // Runs just one time when the keyboard initializes.
214 void matrix_init_user(void) {
217 led_controller_init();
219 //TODO: do pages need to be written at init or ok on demand?
222 is31_write_data(1,(uint8_t *)(led_game+(9*j)),9);
223 chThdSleepMilliseconds(5);
224 is31_write_data(2,(uint8_t *)(led_all+(9*j)),9);
225 chThdSleepMilliseconds(5);
230 // Runs constantly in the background, in a loop.
231 void matrix_scan_user(void) {