]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/infinity60/keymaps/jpetermans/keymap.c
led init code missing pwm writes for Frame 1
[qmk_firmware.git] / keyboards / infinity60 / keymaps / jpetermans / keymap.c
1 #include "infinity60.h"
2 #include "led_controller.h"
3 #include "keymap_jpetermans.h"
4
5 //Helpful Defines
6 #define _______ KC_TRNS
7
8 //Define Layer Names
9 #define _BASE 0
10 #define _NUMPAD 1
11 #define _FNAV 2
12 #define _MEDIA 3
13 #define _TILDE 4
14
15 /* ==================================
16  *             KEYMAPS 
17  * ==================================*/
18
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      * `-----------------------------------------------------------'
32      */
33     /* default */
34     [_BASE] = KEYMAP( \
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         \
40     ),
41
42     /* F-, arrow, and media keys */
43     [_FNAV] = KEYMAP( \
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,_______,_______   \
49     ),
50
51     /* numpad */
52     [_NUMPAD] = KEYMAP( \
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),           _______,_______,_______,_______   \
58     ),
59
60     /* media */
61     [_MEDIA] = KEYMAP( \
62         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,KC_MUTE, KC_VOLD, KC_VOLU,_______,KC_NO,\
63         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
64         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,     \
65         _______,_______,F(2),F(3),F(4),F(5),F(6),F(7), KC_MPRV, KC_MNXT,KC_MSTP, _______,KC_NO,       \
66         _______,_______,_______,               KC_MPLY,             _______,_______, _______,_______      \
67     ),
68     /* ~ */
69     [_TILDE] = KEYMAP( \
70         KC_GRV,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,KC_NO,\
71         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
72         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,     \
73         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,KC_NO,       \
74         _______,_______,_______,               _______,             _______,_______, _______,_______      \
75     ),
76     /* template */
77     [5] = KEYMAP( \
78         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,KC_NO,\
79         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
80         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,     \
81         _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,KC_NO,       \
82         _______,_______,_______,               _______,             _______,_______, _______,_______      \
83     ),
84 };
85
86 //id for user defined functions and macros
87 enum function_id {
88     NONE,
89 };
90
91 enum macro_id {
92     ACTION_LEDS_ALL,
93     ACTION_LEDS_GAME,
94     ACTION_LEDS_NAV,
95     ACTION_LEDS_MEDIA,
96     ACTION_LEDS_NUMPAD
97 };
98         
99 /* ==================================
100  *          LED MAPPING 
101  * ==================================*/
102
103 /*
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)
107
108     Infinity60 LED MAP
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
115
116     The full keyboard arrays map to the mcu's LED pages 
117     (8 available) desribed in led_controller.c
118    
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
122 */
123
124 //LED Layer indicator (1 per layer 3-7)
125 const uint8_t led_single_layer[5] = {
126   12,13,14,15,16
127 };
128 //LED Page 1 - All off
129 //LED Page 2 - All on
130 //LED Page 3 - _Nav
131 const uint8_t led_nav[33] = {
132   11,12,13,14,15,16,17,18,21,22,23,24,25,
133   28,                   37,38,41,42,45,
134   46,47,48,            54,55,56,57,58,
135      64,65,66,      71,
136                                   84,85
137 };
138 //LED Page 4 - _Numpad
139 const uint8_t led_numpad[17] = {
140   18,21,22,23,
141   37,38,41,42,
142   55,56,57,58,
143   72,73,74,75,
144            85
145 };
146 //LED Page 5 - _Media
147 const uint8_t led_media[12] = {
148              23,24,25,
149      38,
150   55,56,57,
151       73,74,75,
152   83,          86
153 };
154 //LED Page 6 - _Game
155 const uint8_t led_game[5] = {
156   //row 1
157   11,
158   //row 2
159   //row 3
160   32,
161   //row 4
162   47, 48,
163   //row 5
164   51
165   //row 6
166   //row 7
167   //row 8
168 };
169
170 const uint16_t fn_actions[] = {
171     [0] = ACTION_KEY(LALT(LCTL(KC_DEL))),
172     [1] = ACTION_LAYER_MODS(_TILDE, MOD_LSFT),
173     [2] = ACTION_FUNCTION(ACTION_LEDS_ALL),
174     [3] = ACTION_FUNCTION(ACTION_LEDS_GAME),
175     [4] = ACTION_FUNCTION(ACTION_LEDS_MEDIA),
176     [5] = ACTION_FUNCTION(ACTION_LEDS_NAV),
177     [6] = ACTION_FUNCTION(ACTION_LEDS_NUMPAD)
178
179 };
180
181 /* custom action function */
182 void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
183   (void)opt;
184   msg_t msg;
185   switch(id) {
186     case ACTION_LEDS_ALL:
187       if(record->event.pressed) {
188         // signal the LED controller thread
189         msg=(TOGGLE_ALL << 8) | 0;
190         chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
191       }
192       break;
193     case ACTION_LEDS_GAME:
194       if(record->event.pressed) {
195         // signal the LED controller thread
196         msg=(TOGGLE_LED << 8) | 11;
197         chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
198       }
199       break;
200     case ACTION_LEDS_NAV:
201       if(record->event.pressed) {
202         // signal the LED controller thread
203         msg=(TOGGLE_LAYER_LEDS << 8) | 3;
204         chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
205       }
206     case ACTION_LEDS_NUMPAD:
207       if(record->event.pressed) {
208         // signal the LED controller thread
209         msg=(TOGGLE_LAYER_LEDS << 8) | 4;
210         chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
211       }
212     case ACTION_LEDS_MEDIA:
213       if(record->event.pressed) {
214         // signal the LED controller thread
215         msg=(TOGGLE_LAYER_LEDS << 8) | 5;
216         chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
217       }
218   }
219 }
220
221 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
222 {
223     switch(id) {
224       case 0: 
225         if (record->event.pressed) {
226         }
227         break;
228       case 1:
229         if (record->event.pressed) {
230         }
231         break;
232     }
233     return MACRO_NONE;
234 };
235
236
237 // Runs just one time when the keyboard initializes.
238 void matrix_init_user(void) {
239
240     led_controller_init();
241
242 //TODO: do pages need to be written at init or ok on demand?
243 /* Write pages */
244     write_led_page(3, led_nav, 33);
245     chThdSleepMilliseconds(5);
246
247     write_led_page(4, led_numpad, 17);
248     chThdSleepMilliseconds(5);
249
250     write_led_page(5, led_media, 12);
251     chThdSleepMilliseconds(5);
252
253     write_led_page(6, led_game, 5);
254     chThdSleepMilliseconds(5);
255 };
256
257 // Runs constantly in the background, in a loop.
258 void matrix_scan_user(void) {
259
260 };
261