]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/infinity60/keymaps/jpetermans/keymap.c
revised led controller code to allow for more options
[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),_______,_______, _______, 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_LED_1
95 };
96         
97 /* ==================================
98  *          LED MAPPING 
99  * ==================================*/
100
101 /*
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)
105
106     Infinity60 LED MAP
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
113
114     The full keyboard arrays map to the mcu's LED pages 
115     (8 available) desribed in led_controller.c
116    
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
120 */
121
122 //LED Layer indicator (1 per layer 3-7)
123 const uint8_t led_single_layer[5] = {
124   12,13,14,15,16
125 };
126 //LED Page 1 - All off
127 //LED Page 2 - All on
128 //LED Page 3 - _Nav
129 const uint8_t led_nav[33] = {
130   11,12,13,14,15,16,17,18,21,22,23,24,25,
131   28,                   37,38,41,42,45,
132   46,47,48,            54,55,56,57,58,
133      64,65,66,      71,
134                                   84,85
135 };
136 //LED Page 4 - _Numpad
137 const uint8_t led_numpad[17] = {
138   18,21,22,23,
139   37,38,41,42,
140   55,56,57,58,
141   72,73,74,75,
142            85
143 };
144 //LED Page 5 - _Media
145 const uint8_t led_media[12] = {
146              23,24,25,
147      38,
148   55,56,57,
149       73,74,75,
150   83,          86
151 };
152 //LED Page 6 - _Game
153 const uint8_t led_game[5] = {
154   //row 1
155   11,
156   //row 2
157   //row 3
158   32,
159   //row 4
160   47, 48,
161   //row 5
162   51
163   //row 6
164   //row 7
165   //row 8
166 };
167
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)
174
175 };
176
177 /* custom action function */
178 void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
179   (void)opt;
180   msg_t msg;
181   switch(id) {
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);
187       }
188       break;
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);
194       }
195       break;
196     case ACTION_LED_1:
197       if(record->event.pressed) {
198         // signal the LED controller thread
199         chMBPost(&led_mailbox, ADDR_LED_1, TIME_IMMEDIATE);
200       }
201       break;
202   }
203 }
204
205 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
206 {
207     switch(id) {
208       case 0: 
209         if (record->event.pressed) {
210         }
211         break;
212       case 1:
213         if (record->event.pressed) {
214         }
215         break;
216     }
217     return MACRO_NONE;
218 };
219
220
221 // Runs just one time when the keyboard initializes.
222 void matrix_init_user(void) {
223
224     led_controller_init();
225
226 //TODO: do pages need to be written at init or ok on demand?
227 /* Write pages */
228     write_led_page(3, led_nav, 33);
229     chThdSleepMilliseconds(5);
230
231     write_led_page(4, led_numpad, 17);
232     chThdSleepMilliseconds(5);
233
234     write_led_page(5, led_media, 12);
235     chThdSleepMilliseconds(5);
236
237     write_led_page(6, led_game, 5);
238     chThdSleepMilliseconds(5);
239 };
240
241 // Runs constantly in the background, in a loop.
242 void matrix_scan_user(void) {
243
244 };
245