]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/infinity60/keymaps/jpetermans/keymap.c
remove breath functions from keymap
[qmk_firmware.git] / keyboards / infinity60 / keymaps / jpetermans / keymap.c
1 #include "infinity60.h"
2 #include "led_controller.h"
3
4 //Helpful Defines
5 #define _______ KC_TRNS
6
7 //Define Layer Names
8 #define _BASE 0
9 #define _NUMPAD 1
10 #define _FNAV 2
11 #define _MEDIA 3
12 #define _TILDE 4
13
14 //IS31 chip has 8 available led pages, using 0 for all leds and 7 for single toggles
15 #define max_pages 6 
16
17 enum ic60_keycodes {
18   NUMPAD,
19   FNAV,
20   MEDIA,
21   TILDE,
22   CTLALTDEL,
23   BACKLIGHT,
24   BRIGHT,
25   DIM,
26   ALL,
27   GAME,
28   MODE_SINGLE,
29   MODE_PAGE,
30   MODE_FLASH
31 };
32
33 uint8_t current_layer_global = 0;
34 uint8_t led_mode_global = MODE_SINGLE;
35 uint8_t backlight_status_global = 1; //init on/off state of backlight
36 uint32_t led_layer_state = 0;
37
38 /* ==================================
39  *             KEYMAPS
40  * ==================================*/
41
42 const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
43     /* Layer 0: Default Layer
44      * ,-----------------------------------------------------------.
45      * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|  Backs|
46      * |-----------------------------------------------------------|
47      * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|
48      * |-----------------------------------------------------------|
49      * |CapsLo|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Enter   |
50      * |-----------------------------------------------------------|
51      * |Shif|   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift     |
52      * |-----------------------------------------------------------|
53      * |Ctrl|Gui |Alt |         Space    |Alt |Gui |  FN  | Ctrl   |
54      * `-----------------------------------------------------------'
55      */
56     /* default */
57     [_BASE] = KEYMAP( \
58         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,\
59         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,   \
60         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,         \
61         KC_LSFT,   KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,F(TILDE),KC_NO,          \
62         KC_LCTL,   KC_LGUI,KC_LALT,               KC_SPC,          KC_RALT,TG(_NUMPAD),MO(_MEDIA), KC_RCTL         \
63     ),
64
65     /* numpad */
66     [_NUMPAD] = KEYMAP( \
67         _______,_______,_______,_______,_______,_______,_______, KC_P7, KC_P8, KC_P9, KC_PSLS, _______,_______,_______,KC_NO,\
68         _______,_______,_______,_______,_______,_______,_______, KC_P4, KC_P5, KC_P6, KC_PAST, _______,_______,_______, \
69         MO(_FNAV),_______,_______,_______,_______,_______,_______, KC_P1, KC_P2, KC_P3, KC_PMNS, _______,_______,      \
70         _______,_______,_______,_______,_______,_______,_______, KC_P0,KC_COMM,KC_PDOT,KC_PPLS, _______,KC_NO,      \
71         _______,_______,_______,               MO(_BASE),           _______,_______,_______,_______   \
72     ),
73
74     /* F-, arrow, and media keys */
75     [_FNAV] = KEYMAP( \
76         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,\
77         KC_CAPS,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,_______,_______,KC_DEL,  \
78         _______,M(0),KC_BTN2,_______,_______,_______,KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_INS,_______,_______,     \
79         _______,KC_APP,KC_BTN1,KC_CALC,_______,_______,KC_END,_______,_______,_______,_______,_______,KC_NO,         \
80         _______,_______,_______,               _______,         F(CTLALTDEL),KC_NLCK,_______,_______   \
81     ),
82
83     /* media */
84     [_MEDIA] = KEYMAP( \
85         _______,F(MODE_SINGLE),F(MODE_PAGE),F(MODE_FLASH),_______,_______,_______, _______, _______, _______,KC_MUTE, KC_VOLD, KC_VOLU,_______,KC_NO,\
86         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
87         _______,_______,_______,_______,_______,F(GAME),_______, _______, _______, _______,_______, _______,_______,     \
88         _______,_______,F(ALL) ,F(BRIGHT),F(DIM),F(BACKLIGHT),_______, _______, KC_MPRV, KC_MNXT,KC_MSTP, _______,KC_NO,       \
89         _______,_______,_______,               KC_MPLY,             _______,_______, _______,_______      \
90     ),
91     /* ~ */
92     [_TILDE] = KEYMAP( \
93         KC_GRV,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,KC_NO,\
94         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
95         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,     \
96         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,KC_NO,       \
97         _______,_______,_______,               _______,             _______,_______, _______,_______      \
98     ),
99     /* template */
100     [5] = KEYMAP( \
101         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,KC_NO,\
102         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
103         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,     \
104         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,KC_NO,       \
105         _______,_______,_______,               _______,             _______,_______, _______,_______      \
106     ),
107 };
108
109 //id for user defined functions and macros
110 enum function_id {
111     NONE,
112 };
113
114 enum macro_id {
115     ACTION_LEDS_ALL,
116     ACTION_LEDS_GAME,
117     ACTION_LEDS_BACKLIGHT,
118     ACTION_LEDS_BRIGHT,
119     ACTION_LEDS_DIM,
120     ACTION_LEDS_SINGLE,
121     ACTION_LEDS_PAGE,
122     ACTION_LEDS_FLASH,
123 };
124
125 /* ==================================
126  *          LED MAPPING
127  * ==================================*/
128
129 /*
130     Infinity60 LED MAP
131     11 12 13 14 15 16 17 18 21 22 23 24 25  26 27*
132      28 31 32 33 34 35 36 37 38 41 42 43 44 45
133      46 47 48 51 52 53 54 55 56 57 58 61    62
134       63 64 65 66 67 68 71 72 73 74 75      76 77*
135     78  81  82       83         84  85  86  87
136     *Unused in Alphabet Layout
137 */
138
139 //======== full page arrays =========
140 //LED Page 1 - _Numpad
141 //any change in array size needs to be mirrored in matrix_init_user
142 uint8_t led_numpad[16] = { 
143   18,21,22,23,
144   37,38,41,42,
145   55,56,57,58,
146   72,73,74,75
147 };
148 //LED Page 2 - _Nav
149 uint8_t led_nav[12] = {
150                         38,
151   47,48,              55,56,57,
152      64,65,66
153 };
154 //LED Page 3 - _Media
155 uint8_t led_media[15] = {
156   12,13,14,           23,24,25,
157      65,66,67,68,    73,74,75,
158            83,          86
159 };
160 //LED Page 4 - _Game "WASD"
161 uint8_t led_game[5] = {
162   11,
163         32,
164      47,48,51
165 };
166
167 //======== qmk functions =========
168 const uint16_t fn_actions[] = {
169     [CTLALTDEL] = ACTION_KEY(LALT(LCTL(KC_DEL))),
170     [TILDE] = ACTION_LAYER_MODS(_TILDE, MOD_LSFT),
171     [ALL] = ACTION_FUNCTION(ACTION_LEDS_ALL),
172     [GAME] = ACTION_FUNCTION(ACTION_LEDS_GAME),
173     [BACKLIGHT] = ACTION_FUNCTION(ACTION_LEDS_BACKLIGHT),
174     [BRIGHT] = ACTION_FUNCTION(ACTION_LEDS_BRIGHT),
175     [DIM] = ACTION_FUNCTION(ACTION_LEDS_DIM),
176     [MODE_SINGLE] = ACTION_FUNCTION(ACTION_LEDS_SINGLE),
177     [MODE_PAGE] = ACTION_FUNCTION(ACTION_LEDS_PAGE),
178     [MODE_FLASH] = ACTION_FUNCTION(ACTION_LEDS_FLASH),
179 };
180
181 /* custom action function */
182 void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
183   msg_t msg;
184
185   switch(id) {
186     case ACTION_LEDS_ALL:
187       if(record->event.pressed) {
188         led_mode_global = led_mode_global == ALL ? MODE_SINGLE : ALL;
189         msg=(TOGGLE_ALL << 8) | 0;
190         chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
191       }
192       break;
193
194     case ACTION_LEDS_BACKLIGHT:
195       if(record->event.pressed) {
196         backlight_status_global ^= 1;
197         msg=(TOGGLE_BACKLIGHT << 8) | (backlight_status_global);
198         chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
199       }
200       break;
201
202     case ACTION_LEDS_GAME:
203       if(record->event.pressed) {
204         led_mode_global = led_mode_global == GAME ? MODE_SINGLE : GAME;
205
206         msg=(DISPLAY_PAGE << 8) | 4;
207         chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
208       }
209       break;
210
211     case ACTION_LEDS_BRIGHT:
212       if(record->event.pressed) {
213         msg=(STEP_BRIGHTNESS << 8) | 1;
214         chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
215       }
216       break;
217
218     case ACTION_LEDS_DIM:
219       if(record->event.pressed) {
220         msg=(STEP_BRIGHTNESS << 8) | 0;
221         chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
222       }
223       break;
224
225     //set led_mode for matrix_scan to toggle leds
226     case ACTION_LEDS_SINGLE:
227       led_mode_global = MODE_SINGLE;
228       break;
229     case ACTION_LEDS_PAGE:
230       led_mode_global = MODE_PAGE;
231       break;
232     case ACTION_LEDS_FLASH:
233       led_mode_global = MODE_FLASH;
234       break;
235
236   }
237 }
238
239 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
240 {
241     return MACRO_NONE;
242 };
243
244
245 bool process_record_user (uint16_t keycode, keyrecord_t *record) {
246   return true;
247 }
248
249 // Runs just one time when the keyboard initializes.
250 void matrix_init_user(void) {
251     xprintf("init start");
252
253     led_controller_init();
254
255     // Write predefined led pages.
256     write_led_page(_NUMPAD, led_numpad, 16);
257     chThdSleepMilliseconds(10);
258
259     write_led_page(_FNAV, led_nav, 12);
260     chThdSleepMilliseconds(10);
261
262     write_led_page(_MEDIA, led_media, 15);
263     chThdSleepMilliseconds(10);
264
265     write_led_page(4, led_game, 5);
266     chThdSleepMilliseconds(1000);
267 };
268
269 // Loops constantly in the background.
270 void matrix_scan_user(void) {
271   uint8_t page;
272   uint8_t led_pin_byte;
273   msg_t msg;
274
275   if (backlight_status_global == 0) {//backlight is off, skip the rest
276     return;
277   }
278
279   if (led_layer_state != layer_state && led_mode_global != GAME && led_mode_global != ALL) {
280     //check mode
281     //Turn on layer indicator or page depending on mode
282     switch(led_mode_global) {
283       case MODE_FLASH: //flash preset page leds then single indicator
284         page = biton32(layer_state) > max_pages ? 7 : biton32(layer_state);
285         msg=(DISPLAY_PAGE << 8) | (page);
286         chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
287         chThdSleepMilliseconds(500);
288         //flow to display single layer leds
289
290       case MODE_SINGLE: //light layer indicators for all active layers
291         led_pin_byte = layer_state & 0xFF;
292         msg=(DISPLAY_PAGE << 8) | 7;
293         chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
294         msg=(1<<16) | (SET_FULL_ROW << 8) | (led_pin_byte);
295         chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
296         break;
297
298       case MODE_PAGE: //display pre-defined led page
299         page = biton32(layer_state) > max_pages ? 7 : biton32(layer_state);
300         msg=(DISPLAY_PAGE << 8) | (page);
301         chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
302         break;
303       }
304   led_layer_state = layer_state;
305   }
306 }
307