v1x.c (2931B)
1 /* Copyright 2020 imchipwood 2 * 3 * This program is free software: you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License as published by 5 * the Free Software Foundation, either version 2 of the License, or 6 * (at your option) any later version. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License 14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 15 */ 16 #include "quantum.h" 17 18 void keyboard_pre_init_kb(void) { 19 // Set LED IO as outputs 20 gpio_set_pin_output(LED_00); 21 gpio_set_pin_output(LED_01); 22 gpio_set_pin_output(LED_02); 23 keyboard_pre_init_user(); 24 } 25 26 bool shutdown_kb(bool jump_to_bootloader) { 27 if (!shutdown_user(jump_to_bootloader)) { 28 return false; 29 } 30 // Shutdown LEDs 31 gpio_write_pin_low(LED_00); 32 gpio_write_pin_low(LED_01); 33 gpio_write_pin_low(LED_02); 34 return true; 35 } 36 37 layer_state_t layer_state_set_kb(layer_state_t state) { 38 // Layer LEDs act as binary indication of current layer 39 uint8_t layer = get_highest_layer(state); 40 gpio_write_pin(LED_00, layer & 0b1); 41 gpio_write_pin(LED_01, (layer >> 1) & 0b1); 42 return layer_state_set_user(state); 43 } 44 45 // Optional override functions below. 46 // You can leave any or all of these undefined. 47 // These are only required if you want to perform custom actions. 48 49 void matrix_init_kb(void) { 50 // put your keyboard start-up code here 51 // runs once when the firmware starts up 52 uint8_t led_delay_ms = 80; 53 for (int i = 0; i < 2; i++) { 54 gpio_write_pin_high(LED_00); 55 gpio_write_pin_high(LED_01); 56 gpio_write_pin_high(LED_02); 57 wait_ms(led_delay_ms); 58 gpio_write_pin_low(LED_00); 59 gpio_write_pin_low(LED_01); 60 gpio_write_pin_low(LED_02); 61 if (i < 1) { 62 wait_ms(led_delay_ms); 63 } 64 } 65 66 matrix_init_user(); 67 } 68 69 bool led_update_kb(led_t led_state) { 70 bool res = led_update_user(led_state); 71 if(res) { 72 gpio_write_pin(LED_02, !led_state.num_lock); 73 } 74 return res; 75 } 76 77 bool encoder_update_kb(uint8_t index, bool clockwise) { 78 if (!encoder_update_user(index, clockwise)) { return false; } 79 80 if (index == 0) { 81 switch (get_highest_layer(layer_state)) { 82 case 0: 83 if (clockwise) { 84 tap_code(MS_RGHT); 85 } else { 86 tap_code(MS_LEFT); 87 } 88 break; 89 90 default: 91 if (clockwise) { 92 tap_code(KC_EQL); 93 } else { 94 tap_code(KC_MINS); 95 } 96 break; 97 } 98 } 99 return true; 100 }