c2_pro.c (4320B)
1 /* Copyright 2023 @ Keychron (https://www.keychron.com) 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 17 #include "quantum.h" 18 19 #ifdef DIP_SWITCH_ENABLE 20 21 bool dip_switch_update_kb(uint8_t index, bool active) { 22 if (!dip_switch_update_user(index, active)) { 23 return false; 24 } 25 if (index == 0) { 26 default_layer_set(1UL << (active ? 2 : 0)); 27 } 28 return true; 29 } 30 31 #endif // DIP_SWITCH_ENABLE 32 33 # ifdef RGB_MATRIX_ENABLE 34 # define LED_TOGGLE_KEYCODE QK_RGB_MATRIX_TOGGLE 35 # define LED_SET_FLAGS rgb_matrix_set_flags 36 # define LED_GET_FLAGS rgb_matrix_get_flags 37 # define LED_SET_ALL_OFF rgb_matrix_set_color_all(COLOR_BLACK) 38 # define LED_IS_ENABLED rgb_matrix_is_enabled 39 # define LED_ENABLE rgb_matrix_enable 40 # define LED_MATRIX_INDICATORS_KB rgb_matrix_indicators_kb 41 # define LED_MATRIX_INDICATORS_USER rgb_matrix_indicators_user 42 # define LED_MATRIX_SET_COLOR rgb_matrix_set_color 43 # define LED_MATRIX_UPDATE_PWN_BUFFERS rgb_matrix_update_pwm_buffers 44 # define LED_MATRIX_INDICATORS_NONE_KB rgb_matrix_indicators_none_kb 45 # define LED_MATRIX_IS_ENABLED rgb_matrix_is_enabled 46 # define COLOR_WHITE 255, 255, 255 47 # define COLOR_BLACK 0, 0, 0 48 # endif 49 50 # ifdef LED_MATRIX_ENABLE 51 # define LED_TOGGLE_KEYCODE QK_LED_MATRIX_TOGGLE 52 # define LED_SET_FLAGS led_matrix_set_flags 53 # define LED_GET_FLAGS led_matrix_get_flags 54 # define LED_SET_ALL_OFF led_matrix_set_value_all(COLOR_BLACK) 55 # define LED_IS_ENABLED led_matrix_is_enabled 56 # define LED_ENABLE led_matrix_enable 57 # define LED_MATRIX_INDICATORS_KB led_matrix_indicators_kb 58 # define LED_MATRIX_INDICATORS_USER led_matrix_indicators_user 59 # define LED_MATRIX_SET_COLOR led_matrix_set_value 60 # define LED_MATRIX_UPDATE_PWN_BUFFERS led_matrix_update_pwm_buffers 61 # define LED_MATRIX_INDICATORS_NONE_KB led_matrix_indicators_none_kb 62 # define LED_MATRIX_IS_ENABLED led_matrix_is_enabled 63 # define COLOR_WHITE 255 64 # define COLOR_BLACK 0 65 66 bool process_record_kb(uint16_t keycode, keyrecord_t *record) { 67 if (!process_record_user(keycode, record)) { 68 return false; 69 } 70 switch (keycode) { 71 case LED_TOGGLE_KEYCODE: 72 if (record->event.pressed) { 73 switch (LED_GET_FLAGS()) { 74 case LED_FLAG_ALL: { 75 LED_SET_FLAGS(LED_FLAG_NONE); 76 LED_SET_ALL_OFF; 77 } break; 78 default: { 79 LED_SET_FLAGS(LED_FLAG_ALL); 80 } break; 81 } 82 } 83 if (!LED_IS_ENABLED()) { 84 LED_SET_FLAGS(LED_FLAG_ALL); 85 LED_ENABLE(); 86 } 87 return false; 88 } 89 return true; 90 } 91 92 bool LED_MATRIX_INDICATORS_KB(void) { 93 if (!LED_MATRIX_INDICATORS_USER()) { 94 return false; 95 } 96 if (host_keyboard_led_state().caps_lock) { 97 LED_MATRIX_SET_COLOR(CAPS_LED_INDEX, COLOR_WHITE); 98 } else { 99 LED_MATRIX_SET_COLOR(CAPS_LED_INDEX, COLOR_BLACK); 100 } 101 if (host_keyboard_led_state().num_lock) { 102 LED_MATRIX_SET_COLOR(NUM_LED_INDEX, COLOR_WHITE); 103 } else { 104 LED_MATRIX_SET_COLOR(NUM_LED_INDEX, COLOR_BLACK); 105 } 106 if (default_layer_state == (1 << 0)) { 107 LED_MATRIX_SET_COLOR(MAC_LED_INDEX, COLOR_WHITE); 108 } else { 109 LED_MATRIX_SET_COLOR(MAC_LED_INDEX, COLOR_BLACK); 110 } 111 if (default_layer_state == (1 << 2)) { 112 LED_MATRIX_SET_COLOR(WIN_LED_INDEX, COLOR_WHITE); 113 } else { 114 LED_MATRIX_SET_COLOR(WIN_LED_INDEX, COLOR_BLACK); 115 } 116 return true; 117 } 118 119 #endif