qmk_firmware

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

keymap.c (6406B)


      1 #include QMK_KEYBOARD_H
      2 
      3 enum custom_keycodes {
      4 	M_TGLHF = SAFE_RANGE,
      5 	M_TGG
      6 };
      7 
      8 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
      9 
     10 	LAYOUT(
     11 		LT(3, KC_MSTP), KC_VOLU, KC_MPLY, KC_MPRV, KC_VOLD, KC_MNXT),
     12 
     13 	LAYOUT(
     14 		LT(3, KC_ESC), C(KC_Z), C(S(KC_Z)), C(KC_X), C(KC_C), C(KC_V)),
     15 
     16 	LAYOUT(
     17 		LT(3, KC_1), KC_2, KC_3, KC_4, M_TGLHF, M_TGG),
     18 
     19 	LAYOUT(
     20 		KC_TRNS, KC_TRNS, QK_BOOT, TO(0), TO(1), TO(2)),
     21 
     22 	LAYOUT(
     23 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
     24 
     25 	LAYOUT(
     26 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
     27 
     28 	LAYOUT(
     29 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
     30 
     31 	LAYOUT(
     32 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
     33 
     34 	LAYOUT(
     35 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
     36 
     37 	LAYOUT(
     38 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
     39 
     40 	LAYOUT(
     41 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
     42 
     43 	LAYOUT(
     44 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
     45 
     46 	LAYOUT(
     47 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
     48 
     49 	LAYOUT(
     50 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
     51 
     52 	LAYOUT(
     53 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
     54 
     55 	LAYOUT(
     56 		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
     57 
     58 };
     59 
     60 void set_switch_led(int ledId, bool state) {
     61 	if(state) {
     62 		switch(ledId) {
     63 			case 1:
     64 				gpio_write_pin_high(D7);
     65 				break;
     66 			case 2:
     67 				if(gpio_read_pin(B7)) {
     68 					gpio_write_pin_high(C6);
     69 				} else {
     70 					gpio_write_pin_high(C7);
     71 				}
     72 				break;
     73 			case 3:
     74 				gpio_write_pin_high(D4);
     75 				break;
     76 			case 4:
     77 				gpio_write_pin_high(E6);
     78 				break;
     79 			case 5:
     80 				gpio_write_pin_high(B4);
     81 				break;
     82 			case 6:
     83 				gpio_write_pin_high(D6);
     84 				break;
     85 		}
     86 	} else {
     87 		switch(ledId) {
     88 			case 1:
     89 				gpio_write_pin_low(D7);
     90 				break;
     91 			case 2:
     92 				if(gpio_read_pin(B7)) {
     93 					gpio_write_pin_low(C6);
     94 				} else {
     95 					gpio_write_pin_low(C7);
     96 				}
     97 				break;
     98 			case 3:
     99 				gpio_write_pin_low(D4);
    100 				break;
    101 			case 4:
    102 				gpio_write_pin_low(E6);
    103 				break;
    104 			case 5:
    105 				gpio_write_pin_low(B4);
    106 				break;
    107 			case 6:
    108 				gpio_write_pin_low(D6);
    109 				break;
    110 		}
    111 	}
    112 }
    113 
    114 
    115 void set_layer_led(int layerId) {
    116 	gpio_write_pin_high(D5);
    117 	gpio_write_pin_low(B6);
    118 	gpio_write_pin_high(B0);
    119 	switch(layerId) {
    120 		case 0:
    121 			gpio_write_pin_low(D5);
    122 			break;
    123 		case 1:
    124 			gpio_write_pin_high(B6);
    125 			break;
    126 		case 2:
    127 			gpio_write_pin_low(B0);
    128 			break;
    129 	}
    130 }
    131 
    132 void led_init_ports_user(void) {
    133   // led voor switch #1
    134 	gpio_set_pin_output(D7);
    135 	gpio_write_pin_low(D7);
    136 
    137   // led voor switch #2
    138 	gpio_set_pin_output(C6);
    139 	gpio_set_pin_output(C7);
    140 	gpio_write_pin_low(C6);
    141 	gpio_write_pin_low(C7);
    142 
    143   // led voor switch #3
    144 	gpio_set_pin_output(D4);
    145 	gpio_write_pin_low(D4);
    146 
    147   // led voor switch #4
    148 	gpio_set_pin_output(E6);
    149 	gpio_write_pin_low(E6);
    150 
    151   // led voor switch #5
    152 	gpio_set_pin_output(B4);
    153 	gpio_write_pin_low(B4);
    154 
    155   // led voor switch #6
    156 	gpio_set_pin_output(D6);
    157 	gpio_write_pin_low(D6);
    158 
    159 	/*
    160 	gpio_set_pin_output(D7);
    161 	gpio_write_pin_high(D7);
    162 
    163 	gpio_set_pin_output(C6);
    164 	gpio_write_pin_high(C6);
    165 
    166 	gpio_set_pin_output(D4);
    167 	gpio_write_pin_high(D4);
    168 
    169 	gpio_set_pin_output(E6);
    170 	gpio_write_pin_high(E6);
    171 
    172 	gpio_set_pin_output(B4);
    173 	gpio_write_pin_high(B4);
    174 
    175 	gpio_set_pin_output(D6);
    176 	gpio_write_pin_high(D6);
    177 	// */
    178 
    179 	gpio_set_pin_output(D5);
    180 	gpio_set_pin_output(B6);
    181 	gpio_set_pin_output(B0);
    182 	//led_set_layer(0);
    183 }
    184 
    185 void matrix_init_user(void) {
    186 	led_init_ports_user();
    187 
    188 	gpio_write_pin_high(B7);
    189 	gpio_set_pin_input(B7);
    190 
    191 	gpio_write_pin_high(D7);
    192 	gpio_write_pin_high(C6);
    193 	gpio_write_pin_high(C7);
    194 	gpio_write_pin_high(D4);
    195 	gpio_write_pin_high(E6);
    196 	gpio_write_pin_high(B4);
    197 	gpio_write_pin_high(D6);
    198 
    199 	set_layer_led(0);
    200 }
    201 
    202 /*
    203 *   NOTE:
    204 *
    205 *   In case you don't understand this coding stuff, please
    206 *   feel free to mail me or post something
    207 *   at the /r/knops subreddit and I will configure the code as
    208 *   you wish for your needs to make the LEDs do what you want :-).
    209 *
    210 *   Contact me at:    support@knops.io
    211 *
    212 *
    213 *	Knops Mini LED Numbers:
    214 *	 _____	 _____	 _____
    215 *	| 	  | | 	  | | 	  |
    216 *	|  1  | |  2  | |  3  |    <---
    217 *	|_____| |_____| |_____|       |      These LEDs are called 'Switch LEDs'
    218 *	 _____	 _____	 _____        |----- To turn on/off these leds, use:
    219 *	| 	  | | 	  | | 	  |       |	  set_switch_led( [1-6], [true/false]);
    220 *	|  4  | |  5  | |  6  |    <---
    221 *	|_____| |_____| |_____|
    222 *
    223 *	 < 0 >   < 1 >   < 2 >     <---      These front-LEDs are called 'Layer LEDs'
    224 *							             To turn one of them on, use:
    225 *										 set_layer_led( [0-2] );
    226 *
    227 */
    228 
    229 /*
    230 * This function led_set_layer gets called when you switch between layers.
    231 * It allows you to turn on and off leds for each different layer and do
    232 * other cool stuff. Currently the GUI does not have LED support. I am working
    233 * on that, but takes time.
    234 */
    235 void led_set_layer(int layer) {
    236 	switch(layer) {
    237 
    238 			/**
    239 			*   Here is an example to turn LEDs on and of. By default:
    240 			*   - the LEDs are turned on in layer 0
    241 			*   - the LEDs are turned off in layer 1
    242 			*   - the LEDs don't change from state for layer 2
    243 			*/
    244 
    245 		case 0:
    246 			set_layer_led(0); // Turn on only the first/left layer indicator
    247 			set_switch_led(1, true);
    248 			set_switch_led(2, true);
    249 			set_switch_led(3, true);
    250 			set_switch_led(4, true);
    251 			set_switch_led(5, true);
    252 			set_switch_led(6, true);
    253 			break;
    254 
    255 		case 1:
    256 			set_layer_led(1); // Turn on only the second/middle layer indicator
    257 			set_switch_led(1, false);
    258 			set_switch_led(2, false);
    259 			set_switch_led(3, false);
    260 			set_switch_led(4, false);
    261 			set_switch_led(5, false);
    262 			set_switch_led(6, false);
    263 			break;
    264 
    265 		case 2:
    266 			set_layer_led(2); // Turn on only the third/right layer indicator
    267 
    268 			// Keep leds for layer two in their current state, since we don't use set_switch_led(SWITCH_ID, TRUE_OR_FALSE)
    269 
    270 			break;
    271 	}
    272 }
    273 
    274 bool process_record_user (uint16_t keycode, keyrecord_t *record) {
    275   switch(keycode) {
    276   case TO(0):
    277       if (record->event.pressed) {
    278         led_set_layer(0);
    279      }
    280      break;
    281   case TO(1):
    282       if (record->event.pressed) {
    283         led_set_layer(1);
    284      }
    285      break;
    286   case TO(2):
    287       if (record->event.pressed) {
    288         led_set_layer(2);
    289      }
    290      break;
    291   case M_TGLHF:
    292     if (record->event.pressed) {
    293       SEND_STRING("tglhf");
    294       tap_code(KC_ENT);
    295     }
    296     return false;
    297   case M_TGG:
    298     if (record->event.pressed) {
    299       SEND_STRING("tgg");
    300       tap_code(KC_ENT);
    301     }
    302     return false;
    303   }
    304   return true;
    305 }