keymap.c (8011B)
1 #include QMK_KEYBOARD_H 2 3 enum custom_keycodes { 4 M_TGLHF = SAFE_RANGE, 5 M_TGG 6 }; 7 8 /* 9 * Copy of knopps mini default May 16,2018 10 * Added comments in code to more easilly understand it. 11 * 12 * Key Layout 13 * _____ _____ _____ 14 * | | | | | | 15 * | 1 | | 2 | | 3 | 16 * |_____| |_____| |_____| 17 * _____ _____ _____ 18 * | | | | | | 19 * | 4 | | 5 | | 6 | 20 * |_____| |_____| |_____| 21 * 22 * Each Layout row below keys. 1,2,3,4,5,6 23 * 24 * Hold 3 when powering on for DFU Program Mode 25 */ 26 27 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 28 29 /* 30 * Layer 0 (Default) 31 * _____ _____ _____ 32 * | | | | | | 33 * Stop VolUp Play 34 * |_____| |_____| |_____| 35 * _____ _____ _____ 36 * | | | | | | 37 * Prev VolDwn Next 38 * |_____| |_____| |_____| 39 * 40 * Button 1 (stop) is Held to activate Layer 3 only while held, User then selects the keymap to change to 41 */ 42 LAYOUT( 43 LT(3, KC_MSTP), KC_VOLU, KC_MPLY, KC_MPRV, KC_VOLD, KC_MNXT), 44 45 /* 46 * Layer 1 47 * _____ _____ _____ 48 * | | | | | | 49 * ESC Ctl+Z CSf+Z 50 * |_____| |_____| |_____| 51 * _____ _____ _____ 52 * | | | | | | 53 * Ctl+X Ctl+C Ctl+V 54 * |_____| |_____| |_____| 55 * 56 */ 57 LAYOUT( 58 LT(3, KC_ESC), C(KC_Z), C(S(KC_Z)), C(KC_X), C(KC_C), C(KC_V)), 59 60 /* 61 * Layer 2 62 * _____ _____ _____ 63 * | | | | | | 64 * | 1 | | 2 | | 3 | 65 * |_____| |_____| |_____| 66 * _____ _____ _____ 67 * | | | | | | 68 * | 4 | |Macro0 Macro1 69 * |_____| |_____| |_____| 70 * 71 */ 72 LAYOUT( 73 LT(3, KC_1), KC_2, KC_3, KC_4, M_TGLHF, M_TGG), 74 75 /* 76 * Layer 3 Key Layout 77 * This Layer does the Layer Selection 78 * _____ _____ _____ 79 * | | | | | DFU 80 * |None | |None | | FLash 81 * |_____| |_____| |_____| 82 * _____ _____ _____ 83 * | | | | | | 84 * Layer Layer Layer 85 * 0 1 2 86 * |_____| |_____| |_____| 87 * 88 * Layers 0,1,2 have Button 1 held to activate this layer. Then press the specific layer to switch to it. 89 * 90 */ 91 LAYOUT( 92 KC_TRNS, KC_TRNS, QK_BOOT, TO(0), TO(1), TO(2)), 93 94 // More Layers that can be used, but are not by default 95 96 LAYOUT( 97 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), 98 99 LAYOUT( 100 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), 101 102 LAYOUT( 103 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), 104 105 LAYOUT( 106 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), 107 108 LAYOUT( 109 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), 110 111 LAYOUT( 112 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), 113 114 LAYOUT( 115 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), 116 117 LAYOUT( 118 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), 119 120 LAYOUT( 121 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), 122 123 LAYOUT( 124 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), 125 126 LAYOUT( 127 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), 128 129 LAYOUT( 130 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) 131 132 }; 133 134 void set_switch_led(int ledId, bool state) { 135 if(state) { 136 switch(ledId) { 137 case 1: 138 gpio_write_pin_high(D7); 139 break; 140 case 2: 141 if(gpio_read_pin(B7)) { 142 gpio_write_pin_high(C6); 143 } else { 144 gpio_write_pin_high(C7); 145 } 146 break; 147 case 3: 148 gpio_write_pin_high(D4); 149 break; 150 case 4: 151 gpio_write_pin_high(E6); 152 break; 153 case 5: 154 gpio_write_pin_high(B4); 155 break; 156 case 6: 157 gpio_write_pin_high(D6); 158 break; 159 } 160 } else { 161 switch(ledId) { 162 case 1: 163 gpio_write_pin_low(D7); 164 break; 165 case 2: 166 if(gpio_read_pin(B7)) { 167 gpio_write_pin_low(C6); 168 } else { 169 gpio_write_pin_low(C7); 170 } 171 break; 172 case 3: 173 gpio_write_pin_low(D4); 174 break; 175 case 4: 176 gpio_write_pin_low(E6); 177 break; 178 case 5: 179 gpio_write_pin_low(B4); 180 break; 181 case 6: 182 gpio_write_pin_low(D6); 183 break; 184 } 185 } 186 } 187 188 189 void set_layer_led(int layerId) { 190 gpio_write_pin_high(D5); 191 gpio_write_pin_low(B6); 192 gpio_write_pin_high(B0); 193 switch(layerId) { 194 case 0: 195 gpio_write_pin_low(D5); 196 break; 197 case 1: 198 gpio_write_pin_high(B6); 199 break; 200 case 2: 201 gpio_write_pin_low(B0); 202 break; 203 } 204 } 205 206 void led_init_ports_user(void) { 207 // led voor switch #1 208 gpio_set_pin_output(D7); 209 gpio_write_pin_low(D7); 210 211 // led voor switch #2 212 gpio_set_pin_output(C6); 213 gpio_set_pin_output(C7); 214 gpio_write_pin_low(C6); 215 gpio_write_pin_low(C7); 216 217 // led voor switch #3 218 gpio_set_pin_output(D4); 219 gpio_write_pin_low(D4); 220 221 // led voor switch #4 222 gpio_set_pin_output(E6); 223 gpio_write_pin_low(E6); 224 225 // led voor switch #5 226 gpio_set_pin_output(B4); 227 gpio_write_pin_low(B4); 228 229 // led voor switch #6 230 gpio_set_pin_output(D6); 231 gpio_write_pin_low(D6); 232 233 /* 234 gpio_set_pin_output(D7); 235 gpio_write_pin_high(D7); 236 237 gpio_set_pin_output(C6); 238 gpio_write_pin_high(C6); 239 240 gpio_set_pin_output(D4); 241 gpio_write_pin_high(D4); 242 243 gpio_set_pin_output(E6); 244 gpio_write_pin_high(E6); 245 246 gpio_set_pin_output(B4); 247 gpio_write_pin_high(B4); 248 249 gpio_set_pin_output(D6); 250 gpio_write_pin_high(D6); 251 // */ 252 253 gpio_set_pin_output(D5); 254 gpio_set_pin_output(B6); 255 gpio_set_pin_output(B0); 256 //led_set_layer(0); 257 } 258 259 void matrix_init_user(void) { 260 led_init_ports_user(); 261 262 gpio_write_pin_high(B7); 263 gpio_set_pin_input(B7); 264 265 gpio_write_pin_high(D7); 266 gpio_write_pin_high(C6); 267 gpio_write_pin_high(C7); 268 gpio_write_pin_high(D4); 269 gpio_write_pin_high(E6); 270 gpio_write_pin_high(B4); 271 gpio_write_pin_high(D6); 272 273 set_layer_led(0); 274 } 275 276 /* 277 * NOTE: 278 * 279 * In case you don't understand this coding stuff, please 280 * feel free to mail me or post something 281 * at the /r/knops subreddit and I will configure the code as 282 * you wish for your needs to make the LEDs do what you want :-). 283 * 284 * Contact me at: support@knops.io 285 * 286 * 287 * Knops Mini LED Numbers: 288 * _____ _____ _____ 289 * | | | | | | 290 * | 1 | | 2 | | 3 | <--- 291 * |_____| |_____| |_____| | These LEDs are called 'Switch LEDs' 292 * _____ _____ _____ |----- To turn on/off these leds, use: 293 * | | | | | | | set_switch_led( [1-6], [true/false]); 294 * | 4 | | 5 | | 6 | <--- 295 * |_____| |_____| |_____| 296 * 297 * < 0 > < 1 > < 2 > <--- These front-LEDs are called 'Layer LEDs' 298 * To turn one of them on, use: 299 * set_layer_led( [0-2] ); 300 * 301 */ 302 303 /* 304 * This function led_set_layer gets called when you switch between layers. 305 * It allows you to turn on and off leds for each different layer and do 306 * other cool stuff. Currently the GUI does not have LED support. I am working 307 * on that, but takes time. 308 */ 309 void led_set_layer(int layer) { 310 switch(layer) { 311 312 /** 313 * Here is an example to turn LEDs on and of. By default: 314 * - the LEDs are turned on in layer 0 315 * - the LEDs are turned off in layer 1 316 * - the LEDs don't change from state for layer 2 317 */ 318 319 case 0: 320 set_layer_led(0); // Turn on only the first/left layer indicator 321 set_switch_led(1, true); 322 set_switch_led(2, true); 323 set_switch_led(3, true); 324 set_switch_led(4, true); 325 set_switch_led(5, true); 326 set_switch_led(6, true); 327 break; 328 329 case 1: 330 set_layer_led(1); // Turn on only the second/middle layer indicator 331 set_switch_led(1, false); 332 set_switch_led(2, false); 333 set_switch_led(3, false); 334 set_switch_led(4, false); 335 set_switch_led(5, false); 336 set_switch_led(6, false); 337 break; 338 339 case 2: 340 set_layer_led(2); // Turn on only the third/right layer indicator 341 342 // Keep leds for layer two in their current state, since we don't use set_switch_led(SWITCH_ID, TRUE_OR_FALSE) 343 344 break; 345 } 346 } 347 348 bool process_record_user (uint16_t keycode, keyrecord_t *record) { 349 switch(keycode) { 350 case TO(0): 351 if (record->event.pressed) { 352 led_set_layer(0); 353 } 354 break; 355 case TO(1): 356 if (record->event.pressed) { 357 led_set_layer(1); 358 } 359 break; 360 case TO(2): 361 if (record->event.pressed) { 362 led_set_layer(2); 363 } 364 break; 365 case M_TGLHF: 366 if (record->event.pressed) { 367 SEND_STRING("tglhf"); 368 tap_code(KC_ENT); 369 } 370 case M_TGG: 371 if (record->event.pressed) { 372 SEND_STRING("tgg"); 373 tap_code(KC_ENT); 374 } 375 return false; 376 } 377 return true; 378 }