qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

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 }