From d6581b5a38ecc36a612fb8560c077c23a47695be Mon Sep 17 00:00:00 2001 From: Ezri Brimhall Date: Wed, 5 Nov 2025 10:08:30 -0700 Subject: [PATCH] Removed firmware for keyboards I do not have --- .../keychron/bluetooth/bat_level_animation.c | 142 --- .../keychron/bluetooth/bat_level_animation.h | 23 - keyboards/keychron/bluetooth/battery.c | 140 --- keyboards/keychron/bluetooth/battery.h | 60 -- keyboards/keychron/bluetooth/bluetooth.c | 493 ---------- keyboards/keychron/bluetooth/bluetooth.h | 89 -- keyboards/keychron/bluetooth/bluetooth.mk | 23 - .../keychron/bluetooth/bluetooth_config.h | 38 - .../keychron/bluetooth/bluetooth_event_type.h | 44 - keyboards/keychron/bluetooth/bluetooth_main.c | 37 - keyboards/keychron/bluetooth/ckbt51.c | 606 ------------ keyboards/keychron/bluetooth/ckbt51.h | 157 ---- keyboards/keychron/bluetooth/factory_test.c | 343 ------- keyboards/keychron/bluetooth/factory_test.h | 24 - keyboards/keychron/bluetooth/indicator.c | 607 ------------ keyboards/keychron/bluetooth/indicator.h | 118 --- keyboards/keychron/bluetooth/lpm.c | 92 -- keyboards/keychron/bluetooth/lpm.h | 30 - keyboards/keychron/bluetooth/lpm_stm32l432.c | 330 ------- keyboards/keychron/bluetooth/lpm_stm32l432.h | 19 - keyboards/keychron/bluetooth/report_buffer.c | 141 --- keyboards/keychron/bluetooth/report_buffer.h | 56 -- keyboards/keychron/bluetooth/rtc_timer.c | 43 - keyboards/keychron/bluetooth/rtc_timer.h | 43 - keyboards/keychron/bluetooth/transport.c | 190 ---- keyboards/keychron/bluetooth/transport.h | 39 - keyboards/keychron/common/common.mk | 6 - .../common/debounce/asym_eager_defer_pk.c | 170 ---- .../keychron/common/debounce/debounce.mk | 14 - .../common/debounce/eeconfig_debounce.h | 20 - .../common/debounce/keychron_debounce.c | 214 ----- .../common/debounce/keychron_debounce.h | 56 -- keyboards/keychron/common/debounce/none.c | 36 - keyboards/keychron/common/debounce/none.h | 36 - .../keychron/common/debounce/sym_defer_g.c | 51 - .../keychron/common/debounce/sym_defer_pk.c | 137 --- .../keychron/common/debounce/sym_defer_pr.c | 80 -- .../keychron/common/debounce/sym_eager_pk.c | 142 --- .../keychron/common/debounce/sym_eager_pr.c | 134 --- keyboards/keychron/common/dfu_info.c | 49 - keyboards/keychron/common/eeconfig_kb.c | 35 - keyboards/keychron/common/eeconfig_kb.h | 61 -- keyboards/keychron/common/factory_test.c | 465 --------- keyboards/keychron/common/factory_test.h | 34 - keyboards/keychron/common/keychron_common.c | 184 ---- keyboards/keychron/common/keychron_common.h | 96 -- keyboards/keychron/common/keychron_common.mk | 31 - keyboards/keychron/common/keychron_raw_hid.c | 203 ---- keyboards/keychron/common/keychron_raw_hid.h | 65 -- keyboards/keychron/common/keychron_task.c | 141 --- keyboards/keychron/common/keychron_task.h | 25 - .../common/language/eeconfig_language.h | 20 - keyboards/keychron/common/language/language.c | 60 -- keyboards/keychron/common/language/language.h | 21 - .../keychron/common/language/language.mk | 7 - keyboards/keychron/common/matrix.c | 218 ----- .../keychron/common/rgb/eeconfig_custom_rgb.h | 39 - keyboards/keychron/common/rgb/keychron_rgb.c | 494 ---------- .../keychron/common/rgb/keychron_rgb_type.h | 59 -- keyboards/keychron/common/rgb/mixed_rgb.c | 191 ---- keyboards/keychron/common/rgb/per_key_rgb.c | 160 ---- keyboards/keychron/common/rgb/retail_demo.c | 185 ---- keyboards/keychron/common/rgb/retail_demo.h | 25 - keyboards/keychron/common/rgb/rgb.mk | 14 - .../keychron/common/rgb/rgb_matrix_kb.inc | 39 - .../common/rgb/rgb_matrix_kb_config.h | 26 - .../common/snap_click/eeconfig_snap_click.h | 26 - .../keychron/common/snap_click/snap_click.c | 201 ---- .../keychron/common/snap_click/snap_click.h | 43 - .../keychron/common/snap_click/snap_click.mk | 7 - .../common/wireless/bat_level_animation.c | 163 ---- .../common/wireless/bat_level_animation.h | 23 - keyboards/keychron/common/wireless/battery.c | 229 ----- keyboards/keychron/common/wireless/battery.h | 61 -- .../common/wireless/eeconfig_wireless.h | 20 - .../keychron/common/wireless/indicator.c | 773 --------------- .../keychron/common/wireless/indicator.h | 114 --- .../wireless/keychron_wireless_common.c | 156 ---- .../wireless/keychron_wireless_common.h | 26 - keyboards/keychron/common/wireless/lkbt51.c | 875 ----------------- keyboards/keychron/common/wireless/lkbt51.h | 131 --- keyboards/keychron/common/wireless/lpm.c | 298 ------ keyboards/keychron/common/wireless/lpm.h | 36 - .../keychron/common/wireless/lpm_stm32f401.c | 114 --- .../keychron/common/wireless/lpm_stm32f401.h | 33 - .../keychron/common/wireless/report_buffer.c | 144 --- .../keychron/common/wireless/report_buffer.h | 61 -- .../keychron/common/wireless/rtc_timer.c | 43 - .../keychron/common/wireless/rtc_timer.h | 35 - .../keychron/common/wireless/transport.c | 259 ----- .../keychron/common/wireless/transport.h | 42 - keyboards/keychron/common/wireless/wireless.c | 657 ------------- keyboards/keychron/common/wireless/wireless.h | 106 --- .../keychron/common/wireless/wireless.mk | 21 - .../common/wireless/wireless_config.h | 31 - .../common/wireless/wireless_event_type.h | 45 - .../keychron/common/wireless/wireless_main.c | 36 - keyboards/keychron/k10_max/ansi/rgb/config.h | 48 - keyboards/keychron/k10_max/ansi/rgb/info.json | 40 - .../k10_max/ansi/rgb/keymaps/default/keymap.c | 67 -- .../k10_max/ansi/rgb/keymaps/via/keymap.c | 67 -- .../k10_max/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k10_max/ansi/rgb/rgb.c | 175 ---- keyboards/keychron/k10_max/ansi/rgb/rules.mk | 1 - .../keychron/k10_max/ansi/white/config.h | 48 - .../keychron/k10_max/ansi/white/info.json | 34 - .../ansi/white/keymaps/default/keymap.c | 67 -- .../k10_max/ansi/white/keymaps/via/keymap.c | 67 -- .../k10_max/ansi/white/keymaps/via/rules.mk | 1 - .../keychron/k10_max/ansi/white/rules.mk | 1 - keyboards/keychron/k10_max/ansi/white/white.c | 172 ---- keyboards/keychron/k10_max/board.h | 225 ----- keyboards/keychron/k10_max/config.h | 95 -- .../keychron_k10_max_ansi_rgb_via.bin | Bin 95608 -> 0 bytes .../keychron_k10_max_ansi_white_via.bin | Bin 86896 -> 0 bytes .../firmware/keychron_k10_max_iso_rgb_via.bin | Bin 95616 -> 0 bytes .../keychron_k10_max_iso_white_via.bin | Bin 86904 -> 0 bytes keyboards/keychron/k10_max/halconf.h | 28 - keyboards/keychron/k10_max/info.json | 281 ------ keyboards/keychron/k10_max/iso/rgb/config.h | 48 - keyboards/keychron/k10_max/iso/rgb/info.json | 36 - .../k10_max/iso/rgb/keymaps/default/keymap.c | 67 -- .../k10_max/iso/rgb/keymaps/via/keymap.c | 67 -- .../k10_max/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k10_max/iso/rgb/rgb.c | 176 ---- keyboards/keychron/k10_max/iso/rgb/rules.mk | 1 - keyboards/keychron/k10_max/iso/white/config.h | 48 - .../keychron/k10_max/iso/white/info.json | 33 - .../iso/white/keymaps/default/keymap.c | 68 -- .../k10_max/iso/white/keymaps/via/keymap.c | 68 -- .../k10_max/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k10_max/iso/white/rules.mk | 1 - keyboards/keychron/k10_max/iso/white/white.c | 173 ---- keyboards/keychron/k10_max/k10_max.c | 96 -- keyboards/keychron/k10_max/mcuconf.h | 37 - keyboards/keychron/k10_max/readme.md | 29 - keyboards/keychron/k10_max/rules.mk | 4 - .../k10_max/via_json/k10_max_ansi_rgb.json | 345 ------- .../k10_max/via_json/k10_max_ansi_white.json | 284 ------ .../k10_max/via_json/k10_max_iso_rgb.json | 347 ------- .../k10_max/via_json/k10_max_iso_white.json | 286 ------ keyboards/keychron/k10_pro/ansi/rgb/config.h | 56 -- keyboards/keychron/k10_pro/ansi/rgb/info.json | 150 --- .../k10_pro/ansi/rgb/keymaps/default/keymap.c | 56 -- .../k10_pro/ansi/rgb/keymaps/via/keymap.c | 57 -- .../k10_pro/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k10_pro/ansi/rgb/rgb.c | 171 ---- keyboards/keychron/k10_pro/ansi/rgb/rules.mk | 1 - .../keychron/k10_pro/ansi/white/config.h | 51 - .../keychron/k10_pro/ansi/white/info.json | 145 --- .../ansi/white/keymaps/default/keymap.c | 56 -- .../k10_pro/ansi/white/keymaps/via/keymap.c | 56 -- .../k10_pro/ansi/white/keymaps/via/rules.mk | 1 - .../keychron/k10_pro/ansi/white/rules.mk | 1 - keyboards/keychron/k10_pro/ansi/white/white.c | 140 --- keyboards/keychron/k10_pro/config.h | 102 -- keyboards/keychron/k10_pro/halconf.h | 29 - keyboards/keychron/k10_pro/info.json | 388 -------- keyboards/keychron/k10_pro/iso/rgb/config.h | 54 -- keyboards/keychron/k10_pro/iso/rgb/info.json | 151 --- .../k10_pro/iso/rgb/keymaps/default/keymap.c | 59 -- .../k10_pro/iso/rgb/keymaps/via/keymap.c | 59 -- .../k10_pro/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k10_pro/iso/rgb/rgb.c | 143 --- keyboards/keychron/k10_pro/iso/rgb/rules.mk | 1 - keyboards/keychron/k10_pro/iso/white/config.h | 51 - .../keychron/k10_pro/iso/white/info.json | 146 --- .../iso/white/keymaps/default/keymap.c | 59 -- .../k10_pro/iso/white/keymaps/via/keymap.c | 59 -- .../k10_pro/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k10_pro/iso/white/rules.mk | 1 - keyboards/keychron/k10_pro/iso/white/white.c | 141 --- keyboards/keychron/k10_pro/jis/rgb/config.h | 53 -- keyboards/keychron/k10_pro/jis/rgb/info.json | 154 --- .../k10_pro/jis/rgb/keymaps/default/keymap.c | 59 -- .../k10_pro/jis/rgb/keymaps/via/keymap.c | 59 -- .../k10_pro/jis/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k10_pro/jis/rgb/rgb.c | 146 --- keyboards/keychron/k10_pro/jis/rgb/rules.mk | 1 - keyboards/keychron/k10_pro/jis/white/config.h | 52 -- .../keychron/k10_pro/jis/white/info.json | 149 --- .../jis/white/keymaps/default/keymap.c | 59 -- .../k10_pro/jis/white/keymaps/via/keymap.c | 59 -- .../k10_pro/jis/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k10_pro/jis/white/rules.mk | 1 - keyboards/keychron/k10_pro/jis/white/white.c | 144 --- keyboards/keychron/k10_pro/k10_pro.c | 328 ------- keyboards/keychron/k10_pro/k10_pro.h | 57 -- keyboards/keychron/k10_pro/matrix.c | 170 ---- keyboards/keychron/k10_pro/mcuconf.h | 36 - keyboards/keychron/k10_pro/readme.md | 31 - keyboards/keychron/k10_pro/rules.mk | 6 - .../k10_pro/via_json/k10_pro_ansi_rgb.json | 344 ------- .../k10_pro/via_json/k10_pro_ansi_white.json | 284 ------ .../k10_pro/via_json/k10_pro_iso_rgb.json | 350 ------- .../k10_pro/via_json/k10_pro_iso_white.json | 289 ------ .../k10_pro/via_json/k10_pro_jis_rgb.json | 351 ------- .../k10_pro/via_json/k10_pro_jis_white.json | 290 ------ .../k10_pro_se2/ansi_lightless/config.h | 23 - .../k10_pro_se2/ansi_lightless/info.json | 6 - .../ansi_lightless/keymaps/default/keymap.c | 68 -- .../ansi_lightless/keymaps/via/keymap.c | 68 -- .../ansi_lightless/keymaps/via/rules.mk | 1 - .../k10_pro_se2/ansi_lightless/rules.mk | 1 - keyboards/keychron/k10_pro_se2/board.h | 225 ----- keyboards/keychron/k10_pro_se2/config.h | 57 -- keyboards/keychron/k10_pro_se2/halconf.h | 28 - keyboards/keychron/k10_pro_se2/info.json | 157 ---- keyboards/keychron/k10_pro_se2/k10_pro_se2.c | 215 ----- keyboards/keychron/k10_pro_se2/mcuconf.h | 37 - keyboards/keychron/k10_pro_se2/readme.md | 23 - keyboards/keychron/k10_pro_se2/rules.mk | 4 - .../via_json/k10_pro_se2_ansi.json | 285 ------ .../k11_max/ansi_encoder/rgb/config.h | 57 -- .../k11_max/ansi_encoder/rgb/info.json | 36 - .../ansi_encoder/rgb/keymaps/default/keymap.c | 82 -- .../ansi_encoder/rgb/keymaps/via/keymap.c | 82 -- .../ansi_encoder/rgb/keymaps/via/rules.mk | 1 - .../keychron/k11_max/ansi_encoder/rgb/rgb.c | 131 --- .../k11_max/ansi_encoder/rgb/rules.mk | 1 - .../k11_max/ansi_encoder/white/config.h | 55 -- .../k11_max/ansi_encoder/white/info.json | 30 - .../white/keymaps/default/keymap.c | 83 -- .../ansi_encoder/white/keymaps/via/keymap.c | 83 -- .../ansi_encoder/white/keymaps/via/rules.mk | 1 - .../k11_max/ansi_encoder/white/rules.mk | 1 - .../k11_max/ansi_encoder/white/white.c | 129 --- keyboards/keychron/k11_max/board.h | 226 ----- keyboards/keychron/k11_max/config.h | 85 -- .../keychron_k11_max_ansi_encoder_rgb_via.bin | Bin 95904 -> 0 bytes ...eychron_k11_max_ansi_encoder_white_via.bin | Bin 87244 -> 0 bytes .../keychron_k11_max_iso_encoder_rgb_via.bin | Bin 95916 -> 0 bytes ...keychron_k11_max_iso_encoder_white_via.bin | Bin 87252 -> 0 bytes keyboards/keychron/k11_max/halconf.h | 31 - keyboards/keychron/k11_max/info.json | 290 ------ .../keychron/k11_max/iso_encoder/rgb/config.h | 57 -- .../k11_max/iso_encoder/rgb/info.json | 36 - .../iso_encoder/rgb/keymaps/default/keymap.c | 82 -- .../iso_encoder/rgb/keymaps/via/keymap.c | 82 -- .../iso_encoder/rgb/keymaps/via/rules.mk | 1 - .../keychron/k11_max/iso_encoder/rgb/rgb.c | 132 --- .../keychron/k11_max/iso_encoder/rgb/rules.mk | 1 - .../k11_max/iso_encoder/white/config.h | 55 -- .../k11_max/iso_encoder/white/info.json | 30 - .../white/keymaps/default/keymap.c | 83 -- .../iso_encoder/white/keymaps/via/keymap.c | 83 -- .../iso_encoder/white/keymaps/via/rules.mk | 1 - .../k11_max/iso_encoder/white/rules.mk | 1 - .../k11_max/iso_encoder/white/white.c | 130 --- .../keychron/k11_max/jis_encoder/rgb/config.h | 46 - .../k11_max/jis_encoder/rgb/info.json | 35 - .../jis_encoder/rgb/keymaps/default/keymap.c | 81 -- .../jis_encoder/rgb/keymaps/via/keymap.c | 81 -- .../jis_encoder/rgb/keymaps/via/rules.mk | 1 - .../keychron/k11_max/jis_encoder/rgb/rgb.c | 135 --- .../keychron/k11_max/jis_encoder/rgb/rules.mk | 1 - .../k11_max/jis_encoder/white/config.h | 51 - .../k11_max/jis_encoder/white/info.json | 29 - .../white/keymaps/default/keymap.c | 82 -- .../jis_encoder/white/keymaps/via/keymap.c | 82 -- .../jis_encoder/white/keymaps/via/rules.mk | 1 - .../k11_max/jis_encoder/white/rules.mk | 1 - .../k11_max/jis_encoder/white/white.c | 133 --- keyboards/keychron/k11_max/k11_max.c | 82 -- keyboards/keychron/k11_max/mcuconf.h | 37 - keyboards/keychron/k11_max/readme.md | 23 - keyboards/keychron/k11_max/rules.mk | 4 - .../via_json/k11_max_ansi_rgb_encoder.json | 350 ------- .../via_json/k11_max_ansi_white_encoder.json | 289 ------ .../via_json/k11_max_iso_rgb_encoder.json | 356 ------- .../via_json/k11_max_iso_white_encoder.json | 295 ------ .../via_json/k11_max_jis_rgb_encoder.json | 358 ------- .../via_json/k11_max_jis_white_encoder.json | 297 ------ keyboards/keychron/k11_pro/ansi/rgb/config.h | 57 -- keyboards/keychron/k11_pro/ansi/rgb/info.json | 189 ---- .../k11_pro/ansi/rgb/keymaps/default/keymap.c | 63 -- .../k11_pro/ansi/rgb/keymaps/via/keymap.c | 63 -- .../k11_pro/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k11_pro/ansi/rgb/rgb.c | 102 -- keyboards/keychron/k11_pro/ansi/rgb/rules.mk | 1 - .../keychron/k11_pro/ansi/white/config.h | 53 -- .../keychron/k11_pro/ansi/white/info.json | 184 ---- .../ansi/white/keymaps/default/keymap.c | 63 -- .../k11_pro/ansi/white/keymaps/via/keymap.c | 63 -- .../k11_pro/ansi/white/keymaps/via/rules.mk | 1 - .../keychron/k11_pro/ansi/white/rules.mk | 1 - keyboards/keychron/k11_pro/ansi/white/white.c | 100 -- .../k11_pro/ansi_encoder/rgb/config.h | 57 -- .../k11_pro/ansi_encoder/rgb/info.json | 195 ---- .../ansi_encoder/rgb/keymaps/default/keymap.c | 73 -- .../ansi_encoder/rgb/keymaps/default/rules.mk | 1 - .../ansi_encoder/rgb/keymaps/via/keymap.c | 73 -- .../ansi_encoder/rgb/keymaps/via/rules.mk | 2 - .../keychron/k11_pro/ansi_encoder/rgb/rgb.c | 102 -- .../k11_pro/ansi_encoder/rgb/rules.mk | 1 - .../k11_pro/ansi_encoder/white/config.h | 53 -- .../k11_pro/ansi_encoder/white/info.json | 190 ---- .../white/keymaps/default/keymap.c | 73 -- .../white/keymaps/default/rules.mk | 1 - .../ansi_encoder/white/keymaps/via/keymap.c | 73 -- .../ansi_encoder/white/keymaps/via/rules.mk | 2 - .../k11_pro/ansi_encoder/white/rules.mk | 1 - .../k11_pro/ansi_encoder/white/white.c | 100 -- keyboards/keychron/k11_pro/config.h | 86 -- keyboards/keychron/k11_pro/halconf.h | 32 - keyboards/keychron/k11_pro/info.json | 31 - keyboards/keychron/k11_pro/k11_pro.c | 325 ------- keyboards/keychron/k11_pro/k11_pro.h | 55 -- keyboards/keychron/k11_pro/matrix.c | 190 ---- keyboards/keychron/k11_pro/mcuconf.h | 37 - keyboards/keychron/k11_pro/readme.md | 23 - keyboards/keychron/k11_pro/rules.mk | 7 - .../via_json/k11_pro_ansi_encoder_rgb.json | 356 ------- .../via_json/k11_pro_ansi_encoder_white.json | 295 ------ .../k11_pro/via_json/k11_pro_ansi_rgb.json | 356 ------- .../k11_pro/via_json/k11_pro_ansi_white.json | 295 ------ keyboards/keychron/k12_pro/ansi/rgb/config.h | 48 - keyboards/keychron/k12_pro/ansi/rgb/info.json | 102 -- .../k12_pro/ansi/rgb/keymaps/default/keymap.c | 63 -- .../k12_pro/ansi/rgb/keymaps/via/keymap.c | 63 -- .../k12_pro/ansi/rgb/keymaps/via/rules.mk | 2 - keyboards/keychron/k12_pro/ansi/rgb/rgb.c | 94 -- keyboards/keychron/k12_pro/ansi/rgb/rules.mk | 1 - .../keychron/k12_pro/ansi/white/config.h | 49 - .../keychron/k12_pro/ansi/white/info.json | 97 -- .../ansi/white/keymaps/default/keymap.c | 63 -- .../k12_pro/ansi/white/keymaps/via/keymap.c | 63 -- .../k12_pro/ansi/white/keymaps/via/rules.mk | 2 - .../keychron/k12_pro/ansi/white/rules.mk | 1 - keyboards/keychron/k12_pro/ansi/white/white.c | 92 -- keyboards/keychron/k12_pro/config.h | 93 -- keyboards/keychron/k12_pro/halconf.h | 29 - keyboards/keychron/k12_pro/info.json | 99 -- keyboards/keychron/k12_pro/k12_pro.c | 312 ------- keyboards/keychron/k12_pro/k12_pro.h | 55 -- keyboards/keychron/k12_pro/matrix.c | 190 ---- keyboards/keychron/k12_pro/mcuconf.h | 36 - keyboards/keychron/k12_pro/readme.md | 23 - keyboards/keychron/k12_pro/rules.mk | 8 - .../k12_pro/via_json/k12_pro_ansi_rgb.json | 225 ----- .../k12_pro/via_json/k12_pro_ansi_white.json | 164 ---- keyboards/keychron/k13_max/ansi/rgb/config.h | 55 -- keyboards/keychron/k13_max/ansi/rgb/info.json | 36 - .../k13_max/ansi/rgb/keymaps/default/keymap.c | 67 -- .../k13_max/ansi/rgb/keymaps/via/keymap.c | 67 -- .../k13_max/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k13_max/ansi/rgb/rgb.c | 156 ---- keyboards/keychron/k13_max/ansi/rgb/rules.mk | 1 - .../keychron/k13_max/ansi/white/config.h | 52 -- .../keychron/k13_max/ansi/white/info.json | 30 - .../ansi/white/keymaps/default/keymap.c | 67 -- .../k13_max/ansi/white/keymaps/via/keymap.c | 67 -- .../k13_max/ansi/white/keymaps/via/rules.mk | 1 - .../keychron/k13_max/ansi/white/rules.mk | 1 - keyboards/keychron/k13_max/ansi/white/white.c | 154 --- keyboards/keychron/k13_max/board.h | 226 ----- keyboards/keychron/k13_max/config.h | 94 -- .../keychron_k13_max_ansi_rgb_via.bin | Bin 95556 -> 0 bytes .../keychron_k13_max_ansi_white_via.bin | Bin 86848 -> 0 bytes .../firmware/keychron_k13_max_iso_rgb_via.bin | Bin 95564 -> 0 bytes .../keychron_k13_max_iso_white_via.bin | Bin 86856 -> 0 bytes keyboards/keychron/k13_max/halconf.h | 31 - keyboards/keychron/k13_max/info.json | 236 ----- keyboards/keychron/k13_max/iso/rgb/config.h | 55 -- keyboards/keychron/k13_max/iso/rgb/info.json | 36 - .../k13_max/iso/rgb/keymaps/default/keymap.c | 67 -- .../k13_max/iso/rgb/keymaps/via/keymap.c | 67 -- .../k13_max/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k13_max/iso/rgb/rgb.c | 157 ---- keyboards/keychron/k13_max/iso/rgb/rules.mk | 1 - keyboards/keychron/k13_max/iso/white/config.h | 52 -- .../keychron/k13_max/iso/white/info.json | 30 - .../iso/white/keymaps/default/keymap.c | 67 -- .../k13_max/iso/white/keymaps/via/keymap.c | 67 -- .../k13_max/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k13_max/iso/white/rules.mk | 1 - keyboards/keychron/k13_max/iso/white/white.c | 155 --- keyboards/keychron/k13_max/k13_max.c | 101 -- keyboards/keychron/k13_max/mcuconf.h | 37 - keyboards/keychron/k13_max/readme.md | 22 - keyboards/keychron/k13_max/rules.mk | 4 - .../k13_max/via_json/k13_max_ansi_rgb.json | 300 ------ .../k13_max/via_json/k13_max_ansi_white.json | 239 ----- .../k13_max/via_json/k13_max_iso_rgb.json | 301 ------ .../k13_max/via_json/k13_max_iso_white.json | 240 ----- keyboards/keychron/k13_pro/ansi/rgb/config.h | 52 -- keyboards/keychron/k13_pro/ansi/rgb/info.json | 35 - .../k13_pro/ansi/rgb/keymaps/default/keymap.c | 59 -- .../k13_pro/ansi/rgb/keymaps/via/keymap.c | 59 -- .../k13_pro/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k13_pro/ansi/rgb/rgb.c | 156 ---- keyboards/keychron/k13_pro/ansi/rgb/rules.mk | 1 - .../keychron/k13_pro/ansi/white/config.h | 49 - .../keychron/k13_pro/ansi/white/info.json | 30 - .../ansi/white/keymaps/default/keymap.c | 59 -- .../k13_pro/ansi/white/keymaps/via/keymap.c | 59 -- .../k13_pro/ansi/white/keymaps/via/rules.mk | 1 - .../keychron/k13_pro/ansi/white/rules.mk | 1 - keyboards/keychron/k13_pro/ansi/white/white.c | 154 --- keyboards/keychron/k13_pro/config.h | 93 -- keyboards/keychron/k13_pro/halconf.h | 29 - keyboards/keychron/k13_pro/info.json | 227 ----- keyboards/keychron/k13_pro/iso/rgb/config.h | 49 - keyboards/keychron/k13_pro/iso/rgb/info.json | 35 - .../k13_pro/iso/rgb/keymaps/default/keymap.c | 59 -- .../k13_pro/iso/rgb/keymaps/via/keymap.c | 59 -- .../k13_pro/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k13_pro/iso/rgb/rgb.c | 158 ---- keyboards/keychron/k13_pro/iso/rgb/rules.mk | 1 - keyboards/keychron/k13_pro/iso/white/config.h | 44 - .../keychron/k13_pro/iso/white/info.json | 30 - .../iso/white/keymaps/default/keymap.c | 59 -- .../k13_pro/iso/white/keymaps/via/keymap.c | 59 -- .../k13_pro/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k13_pro/iso/white/rules.mk | 1 - keyboards/keychron/k13_pro/iso/white/white.c | 155 --- keyboards/keychron/k13_pro/k13_pro.c | 308 ------ keyboards/keychron/k13_pro/k13_pro.h | 55 -- keyboards/keychron/k13_pro/matrix.c | 213 ----- keyboards/keychron/k13_pro/mcuconf.h | 39 - keyboards/keychron/k13_pro/readme.md | 21 - keyboards/keychron/k13_pro/rules.mk | 7 - .../k13_pro/via_json/k13_pro_ansi_rgb.json | 294 ------ .../k13_pro/via_json/k13_pro_ansi_white.json | 233 ----- .../k13_pro/via_json/k13_pro_iso_rgb.json | 296 ------ .../k13_pro/via_json/k13_pro_iso_white.json | 235 ----- keyboards/keychron/k14_pro/ansi/rgb/config.h | 52 -- keyboards/keychron/k14_pro/ansi/rgb/info.json | 195 ---- .../k14_pro/ansi/rgb/keymaps/default/keymap.c | 63 -- .../k14_pro/ansi/rgb/keymaps/via/keymap.c | 63 -- .../k14_pro/ansi/rgb/keymaps/via/rules.mk | 2 - keyboards/keychron/k14_pro/ansi/rgb/rgb.c | 105 --- keyboards/keychron/k14_pro/ansi/rgb/rules.mk | 1 - .../keychron/k14_pro/ansi/white/config.h | 54 -- .../keychron/k14_pro/ansi/white/info.json | 190 ---- .../ansi/white/keymaps/default/keymap.c | 63 -- .../k14_pro/ansi/white/keymaps/via/keymap.c | 63 -- .../k14_pro/ansi/white/keymaps/via/rules.mk | 2 - .../keychron/k14_pro/ansi/white/rules.mk | 1 - keyboards/keychron/k14_pro/ansi/white/white.c | 103 -- keyboards/keychron/k14_pro/config.h | 90 -- keyboards/keychron/k14_pro/halconf.h | 29 - keyboards/keychron/k14_pro/info.json | 28 - keyboards/keychron/k14_pro/k14_pro.c | 316 ------- keyboards/keychron/k14_pro/k14_pro.h | 55 -- keyboards/keychron/k14_pro/matrix.c | 190 ---- keyboards/keychron/k14_pro/mcuconf.h | 37 - keyboards/keychron/k14_pro/readme.md | 23 - keyboards/keychron/k14_pro/rules.mk | 7 - .../k14_pro/via_json/k14_pro_ansi_rgb.json | 239 ----- .../k14_pro_ansi_rgb_v1.00_20230330.json | 239 ----- .../k14_pro/via_json/k14_pro_ansi_white.json | 178 ---- .../k14_pro_ansi_white_v1.00_20230330.json | 178 ---- .../k15_max/ansi_encoder/rgb/config.h | 55 -- .../k15_max/ansi_encoder/rgb/info.json | 36 - .../ansi_encoder/rgb/keymaps/default/keymap.c | 76 -- .../ansi_encoder/rgb/keymaps/via/keymap.c | 76 -- .../ansi_encoder/rgb/keymaps/via/rules.mk | 1 - .../keychron/k15_max/ansi_encoder/rgb/rgb.c | 155 --- .../k15_max/ansi_encoder/rgb/rules.mk | 1 - .../k15_max/ansi_encoder/white/config.h | 54 -- .../k15_max/ansi_encoder/white/info.json | 30 - .../white/keymaps/default/keymap.c | 77 -- .../ansi_encoder/white/keymaps/via/keymap.c | 77 -- .../ansi_encoder/white/keymaps/via/rules.mk | 1 - .../k15_max/ansi_encoder/white/rules.mk | 1 - .../k15_max/ansi_encoder/white/white.c | 153 --- keyboards/keychron/k15_max/board.h | 226 ----- keyboards/keychron/k15_max/config.h | 89 -- .../keychron_k15_max_ansi_encoder_rgb_via.bin | Bin 96024 -> 0 bytes ...eychron_k15_max_ansi_encoder_white_via.bin | Bin 87324 -> 0 bytes .../keychron_k15_max_iso_encoder_rgb_via.bin | Bin 96032 -> 0 bytes ...keychron_k15_max_iso_encoder_white_via.bin | Bin 87328 -> 0 bytes keyboards/keychron/k15_max/halconf.h | 31 - keyboards/keychron/k15_max/info.json | 351 ------- .../keychron/k15_max/iso_encoder/rgb/config.h | 55 -- .../k15_max/iso_encoder/rgb/info.json | 36 - .../iso_encoder/rgb/keymaps/default/keymap.c | 76 -- .../iso_encoder/rgb/keymaps/via/keymap.c | 76 -- .../iso_encoder/rgb/keymaps/via/rules.mk | 1 - .../keychron/k15_max/iso_encoder/rgb/rgb.c | 156 ---- .../keychron/k15_max/iso_encoder/rgb/rules.mk | 1 - .../k15_max/iso_encoder/white/config.h | 54 -- .../k15_max/iso_encoder/white/info.json | 30 - .../white/keymaps/default/keymap.c | 77 -- .../iso_encoder/white/keymaps/via/keymap.c | 77 -- .../iso_encoder/white/keymaps/via/rules.mk | 1 - .../k15_max/iso_encoder/white/rules.mk | 1 - .../k15_max/iso_encoder/white/white.c | 154 --- keyboards/keychron/k15_max/k15_max.c | 70 -- keyboards/keychron/k15_max/mcuconf.h | 37 - keyboards/keychron/k15_max/readme.md | 24 - keyboards/keychron/k15_max/rules.mk | 4 - .../via_json/k15_max_ansi_knob_rgb.json | 397 -------- .../via_json/k15_max_ansi_knob_white.json | 336 ------- .../via_json/k15_max_iso_knob_rgb.json | 400 -------- .../via_json/k15_max_iso_knob_white.json | 338 ------- .../via_json/k15_max_jis_knob_rgb.json | 395 -------- .../via_json/k15_max_jis_knob_white.json | 334 ------- .../k15_pro/ansi_encoder/rgb/config.h | 56 -- .../k15_pro/ansi_encoder/rgb/info.json | 131 --- .../ansi_encoder/rgb/keymaps/default/keymap.c | 68 -- .../ansi_encoder/rgb/keymaps/default/rules.mk | 1 - .../ansi_encoder/rgb/keymaps/via/keymap.c | 68 -- .../ansi_encoder/rgb/keymaps/via/rules.mk | 2 - .../keychron/k15_pro/ansi_encoder/rgb/rgb.c | 123 --- .../k15_pro/ansi_encoder/rgb/rules.mk | 1 - .../k15_pro/ansi_encoder/white/config.h | 51 - .../k15_pro/ansi_encoder/white/info.json | 126 --- .../white/keymaps/default/keymap.c | 68 -- .../white/keymaps/default/rules.mk | 1 - .../ansi_encoder/white/keymaps/via/keymap.c | 68 -- .../ansi_encoder/white/keymaps/via/rules.mk | 2 - .../k15_pro/ansi_encoder/white/rules.mk | 1 - .../k15_pro/ansi_encoder/white/white.c | 121 --- keyboards/keychron/k15_pro/config.h | 87 -- keyboards/keychron/k15_pro/halconf.h | 29 - keyboards/keychron/k15_pro/info.json | 140 --- keyboards/keychron/k15_pro/k15_pro.c | 342 ------- keyboards/keychron/k15_pro/k15_pro.h | 57 -- keyboards/keychron/k15_pro/mcuconf.h | 39 - keyboards/keychron/k15_pro/readme.md | 23 - keyboards/keychron/k15_pro/rules.mk | 6 - .../via_json/k15_pro_ansi_encoder_rgb.json | 396 -------- .../via_json/k15_pro_ansi_encoder_white.json | 335 ------- .../k17_max/ansi_encoder/rgb/config.h | 54 -- .../k17_max/ansi_encoder/rgb/info.json | 155 --- .../ansi_encoder/rgb/keymaps/default/keymap.c | 77 -- .../ansi_encoder/rgb/keymaps/via/keymap.c | 77 -- .../ansi_encoder/rgb/keymaps/via/rules.mk | 1 - .../keychron/k17_max/ansi_encoder/rgb/rgb.c | 169 ---- .../k17_max/ansi_encoder/rgb/rules.mk | 1 - .../k17_max/ansi_encoder/white/config.h | 53 -- .../k17_max/ansi_encoder/white/info.json | 154 --- .../white/keymaps/default/keymap.c | 77 -- .../ansi_encoder/white/keymaps/via/keymap.c | 77 -- .../ansi_encoder/white/keymaps/via/rules.mk | 1 - .../k17_max/ansi_encoder/white/rules.mk | 1 - .../k17_max/ansi_encoder/white/white.c | 168 ---- keyboards/keychron/k17_max/board.h | 226 ----- keyboards/keychron/k17_max/config.h | 81 -- keyboards/keychron/k17_max/halconf.h | 31 - keyboards/keychron/k17_max/info.json | 44 - .../keychron/k17_max/iso_encoder/rgb/config.h | 54 -- .../k17_max/iso_encoder/rgb/info.json | 156 ---- .../iso_encoder/rgb/keymaps/default/keymap.c | 74 -- .../iso_encoder/rgb/keymaps/via/keymap.c | 74 -- .../iso_encoder/rgb/keymaps/via/rules.mk | 1 - .../keychron/k17_max/iso_encoder/rgb/rgb.c | 170 ---- .../keychron/k17_max/iso_encoder/rgb/rules.mk | 1 - .../k17_max/iso_encoder/white/config.h | 54 -- .../k17_max/iso_encoder/white/info.json | 155 --- .../white/keymaps/default/keymap.c | 77 -- .../iso_encoder/white/keymaps/via/keymap.c | 77 -- .../iso_encoder/white/keymaps/via/rules.mk | 1 - .../k17_max/iso_encoder/white/rules.mk | 1 - .../k17_max/iso_encoder/white/white.c | 169 ---- .../keychron/k17_max/jis_encoder/rgb/config.h | 54 -- .../k17_max/jis_encoder/rgb/info.json | 159 ---- .../jis_encoder/rgb/keymaps/default/keymap.c | 74 -- .../jis_encoder/rgb/keymaps/via/keymap.c | 74 -- .../jis_encoder/rgb/keymaps/via/rules.mk | 1 - .../keychron/k17_max/jis_encoder/rgb/rgb.c | 174 ---- .../keychron/k17_max/jis_encoder/rgb/rules.mk | 1 - .../k17_max/jis_encoder/white/config.h | 54 -- .../k17_max/jis_encoder/white/info.json | 158 ---- .../white/keymaps/default/keymap.c | 77 -- .../jis_encoder/white/keymaps/via/keymap.c | 77 -- .../jis_encoder/white/keymaps/via/rules.mk | 1 - .../k17_max/jis_encoder/white/rules.mk | 1 - .../k17_max/jis_encoder/white/white.c | 172 ---- keyboards/keychron/k17_max/k17_max.c | 57 -- keyboards/keychron/k17_max/mcuconf.h | 37 - keyboards/keychron/k17_max/readme.md | 35 - keyboards/keychron/k17_max/rules.mk | 4 - .../via_json/k17_max_ansi_knob_rgb.json | 335 ------- .../via_json/k17_max_ansi_knob_white.json | 274 ------ .../via_json/k17_max_iso_knob_rgb.json | 337 ------- .../via_json/k17_max_iso_knob_white.json | 276 ------ .../via_json/k17_max_jis_knob_rgb.json | 339 ------- .../via_json/k17_max_jis_knob_white.json | 277 ------ .../k17_pro/ansi_encoder/rgb/config.h | 49 - .../k17_pro/ansi_encoder/rgb/info.json | 146 --- .../ansi_encoder/rgb/keymaps/default/keymap.c | 65 -- .../ansi_encoder/rgb/keymaps/default/rules.mk | 1 - .../ansi_encoder/rgb/keymaps/via/keymap.c | 65 -- .../ansi_encoder/rgb/keymaps/via/rules.mk | 2 - .../keychron/k17_pro/ansi_encoder/rgb/rgb.c | 137 --- .../k17_pro/ansi_encoder/rgb/rules.mk | 1 - .../k17_pro/ansi_encoder/white/config.h | 51 - .../k17_pro/ansi_encoder/white/info.json | 141 --- .../white/keymaps/default/keymap.c | 65 -- .../white/keymaps/default/rules.mk | 1 - .../ansi_encoder/white/keymaps/via/keymap.c | 65 -- .../ansi_encoder/white/keymaps/via/rules.mk | 2 - .../k17_pro/ansi_encoder/white/rules.mk | 1 - .../k17_pro/ansi_encoder/white/white.c | 135 --- keyboards/keychron/k17_pro/config.h | 82 -- keyboards/keychron/k17_pro/halconf.h | 32 - keyboards/keychron/k17_pro/info.json | 268 ------ .../keychron/k17_pro/iso_encoder/rgb/config.h | 49 - .../k17_pro/iso_encoder/rgb/info.json | 147 --- .../iso_encoder/rgb/keymaps/default/keymap.c | 65 -- .../iso_encoder/rgb/keymaps/default/rules.mk | 1 - .../iso_encoder/rgb/keymaps/via/keymap.c | 65 -- .../iso_encoder/rgb/keymaps/via/rules.mk | 2 - .../keychron/k17_pro/iso_encoder/rgb/rgb.c | 138 --- .../keychron/k17_pro/iso_encoder/rgb/rules.mk | 1 - .../k17_pro/iso_encoder/white/config.h | 50 - .../k17_pro/iso_encoder/white/info.json | 142 --- .../white/keymaps/default/keymap.c | 65 -- .../white/keymaps/default/rules.mk | 1 - .../iso_encoder/white/keymaps/via/keymap.c | 65 -- .../iso_encoder/white/keymaps/via/rules.mk | 2 - .../k17_pro/iso_encoder/white/rules.mk | 1 - .../k17_pro/iso_encoder/white/white.c | 136 --- keyboards/keychron/k17_pro/k17_pro.c | 353 ------- keyboards/keychron/k17_pro/k17_pro.h | 57 -- keyboards/keychron/k17_pro/matrix.c | 212 ----- keyboards/keychron/k17_pro/mcuconf.h | 36 - keyboards/keychron/k17_pro/readme.md | 28 - keyboards/keychron/k17_pro/rules.mk | 7 - .../via_json/k17_pro_ansi_encoder_rgb.json | 335 ------- .../via_json/k17_pro_ansi_encoder_white.json | 274 ------ .../via_json/k17_pro_iso_encoder_rgb.json | 340 ------- .../via_json/k17_pro_iso_encoder_white.json | 279 ------ keyboards/keychron/k1_max/ansi/rgb/config.h | 46 - keyboards/keychron/k1_max/ansi/rgb/info.json | 36 - .../k1_max/ansi/rgb/keymaps/default/keymap.c | 67 -- .../k1_max/ansi/rgb/keymaps/via/keymap.c | 67 -- .../k1_max/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k1_max/ansi/rgb/rgb.c | 153 --- keyboards/keychron/k1_max/ansi/rgb/rules.mk | 1 - keyboards/keychron/k1_max/ansi/white/config.h | 44 - .../keychron/k1_max/ansi/white/info.json | 30 - .../ansi/white/keymaps/default/keymap.c | 67 -- .../k1_max/ansi/white/keymaps/via/keymap.c | 67 -- .../k1_max/ansi/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k1_max/ansi/white/rules.mk | 1 - keyboards/keychron/k1_max/ansi/white/white.c | 151 --- keyboards/keychron/k1_max/board.h | 226 ----- keyboards/keychron/k1_max/config.h | 99 -- .../firmware/keychron_k1_max_ansi_rgb_via.bin | Bin 95536 -> 0 bytes .../keychron_k1_max_ansi_white_via.bin | Bin 86836 -> 0 bytes .../firmware/keychron_k1_max_jis_rgb_via.bin | Bin 95560 -> 0 bytes .../keychron_k1_max_jis_white_via.bin | Bin 86860 -> 0 bytes keyboards/keychron/k1_max/halconf.h | 28 - keyboards/keychron/k1_max/info.json | 334 ------- keyboards/keychron/k1_max/iso/rgb/config.h | 46 - keyboards/keychron/k1_max/iso/rgb/info.json | 36 - .../k1_max/iso/rgb/keymaps/default/keymap.c | 67 -- .../k1_max/iso/rgb/keymaps/via/keymap.c | 67 -- .../k1_max/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k1_max/iso/rgb/rgb.c | 154 --- keyboards/keychron/k1_max/iso/rgb/rules.mk | 1 - keyboards/keychron/k1_max/iso/white/config.h | 44 - keyboards/keychron/k1_max/iso/white/info.json | 30 - .../k1_max/iso/white/keymaps/default/keymap.c | 67 -- .../k1_max/iso/white/keymaps/via/keymap.c | 67 -- .../k1_max/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k1_max/iso/white/rules.mk | 1 - keyboards/keychron/k1_max/iso/white/white.c | 152 --- keyboards/keychron/k1_max/jis/rgb/config.h | 46 - keyboards/keychron/k1_max/jis/rgb/info.json | 36 - .../k1_max/jis/rgb/keymaps/default/keymap.c | 67 -- .../k1_max/jis/rgb/keymaps/via/keymap.c | 67 -- .../k1_max/jis/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k1_max/jis/rgb/rgb.c | 157 ---- keyboards/keychron/k1_max/jis/rgb/rules.mk | 1 - keyboards/keychron/k1_max/jis/white/config.h | 46 - keyboards/keychron/k1_max/jis/white/info.json | 30 - .../k1_max/jis/white/keymaps/default/keymap.c | 67 -- .../k1_max/jis/white/keymaps/via/keymap.c | 67 -- .../k1_max/jis/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k1_max/jis/white/rules.mk | 1 - keyboards/keychron/k1_max/jis/white/white.c | 155 --- keyboards/keychron/k1_max/k1_max.c | 96 -- keyboards/keychron/k1_max/mcuconf.h | 37 - keyboards/keychron/k1_max/readme.md | 23 - keyboards/keychron/k1_max/rules.mk | 4 - .../k1_max/via_json/k1_max_ansi_rgb.json | 293 ------ .../k1_max/via_json/k1_max_ansi_white.json | 232 ----- .../k1_max/via_json/k1_max_jis_rgb .json | 294 ------ .../k1_max/via_json/k1_max_jis_white.json | 233 ----- keyboards/keychron/k1_pro/ansi/rgb/config.h | 53 -- keyboards/keychron/k1_pro/ansi/rgb/info.json | 129 --- .../k1_pro/ansi/rgb/keymaps/default/keymap.c | 59 -- .../k1_pro/ansi/rgb/keymaps/via/keymap.c | 59 -- .../k1_pro/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k1_pro/ansi/rgb/rgb.c | 121 --- keyboards/keychron/k1_pro/ansi/rgb/rules.mk | 1 - keyboards/keychron/k1_pro/ansi/white/config.h | 49 - .../keychron/k1_pro/ansi/white/info.json | 124 --- .../ansi/white/keymaps/default/keymap.c | 59 -- .../k1_pro/ansi/white/keymaps/via/keymap.c | 59 -- .../k1_pro/ansi/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k1_pro/ansi/white/rules.mk | 1 - keyboards/keychron/k1_pro/ansi/white/white.c | 119 --- keyboards/keychron/k1_pro/config.h | 95 -- keyboards/keychron/k1_pro/halconf.h | 29 - keyboards/keychron/k1_pro/info.json | 225 ----- keyboards/keychron/k1_pro/iso/rgb/config.h | 51 - keyboards/keychron/k1_pro/iso/rgb/info.json | 130 --- .../k1_pro/iso/rgb/keymaps/default/keymap.c | 59 -- .../k1_pro/iso/rgb/keymaps/via/keymap.c | 59 -- .../k1_pro/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k1_pro/iso/rgb/rgb.c | 122 --- keyboards/keychron/k1_pro/iso/rgb/rules.mk | 1 - keyboards/keychron/k1_pro/iso/white/config.h | 52 -- keyboards/keychron/k1_pro/iso/white/info.json | 125 --- .../k1_pro/iso/white/keymaps/default/keymap.c | 59 -- .../k1_pro/iso/white/keymaps/via/keymap.c | 59 -- .../k1_pro/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k1_pro/iso/white/rules.mk | 1 - keyboards/keychron/k1_pro/iso/white/white.c | 120 --- keyboards/keychron/k1_pro/k1_pro.c | 325 ------- keyboards/keychron/k1_pro/k1_pro.h | 55 -- keyboards/keychron/k1_pro/matrix.c | 190 ---- keyboards/keychron/k1_pro/mcuconf.h | 39 - keyboards/keychron/k1_pro/readme.md | 27 - keyboards/keychron/k1_pro/rules.mk | 7 - .../k1_pro/via_json/k1_pro_ansi_rgb.json | 287 ------ .../k1_pro/via_json/k1_pro_ansi_white.json | 226 ----- .../k1_pro/via_json/k1_pro_iso_rgb.json | 292 ------ .../k1_pro/via_json/k1_pro_iso_white.json | 231 ----- keyboards/keychron/k2_max/ansi/info.json | 10 - keyboards/keychron/k2_max/ansi/rgb/config.h | 48 - keyboards/keychron/k2_max/ansi/rgb/info.json | 36 - .../k2_max/ansi/rgb/keymaps/default/keymap.c | 68 -- .../k2_max/ansi/rgb/keymaps/via/keymap.c | 68 -- .../k2_max/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k2_max/ansi/rgb/rgb.c | 147 --- keyboards/keychron/k2_max/ansi/rgb/rules.mk | 1 - keyboards/keychron/k2_max/ansi/white/config.h | 47 - .../keychron/k2_max/ansi/white/info.json | 30 - .../ansi/white/keymaps/default/keymap.c | 68 -- .../k2_max/ansi/white/keymaps/via/keymap.c | 68 -- .../k2_max/ansi/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k2_max/ansi/white/rules.mk | 1 - keyboards/keychron/k2_max/ansi/white/white.c | 149 --- keyboards/keychron/k2_max/board.h | 226 ----- keyboards/keychron/k2_max/config.h | 85 -- keyboards/keychron/k2_max/halconf.h | 31 - keyboards/keychron/k2_max/info.json | 319 ------- keyboards/keychron/k2_max/iso/info.json | 10 - keyboards/keychron/k2_max/iso/rgb/config.h | 47 - keyboards/keychron/k2_max/iso/rgb/info.json | 36 - .../k2_max/iso/rgb/keymaps/default/keymap.c | 67 -- .../k2_max/iso/rgb/keymaps/via/keymap.c | 67 -- .../k2_max/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k2_max/iso/rgb/rgb.c | 148 --- keyboards/keychron/k2_max/iso/rgb/rules.mk | 1 - keyboards/keychron/k2_max/iso/white/config.h | 47 - keyboards/keychron/k2_max/iso/white/info.json | 30 - .../k2_max/iso/white/keymaps/default/keymap.c | 67 -- .../k2_max/iso/white/keymaps/via/keymap.c | 67 -- .../k2_max/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k2_max/iso/white/rules.mk | 1 - keyboards/keychron/k2_max/iso/white/white.c | 151 --- keyboards/keychron/k2_max/jis/info.json | 10 - keyboards/keychron/k2_max/jis/rgb/config.h | 47 - keyboards/keychron/k2_max/jis/rgb/info.json | 36 - .../k2_max/jis/rgb/keymaps/default/keymap.c | 67 -- .../k2_max/jis/rgb/keymaps/via/keymap.c | 67 -- .../k2_max/jis/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k2_max/jis/rgb/rgb.c | 154 --- keyboards/keychron/k2_max/jis/rgb/rules.mk | 1 - keyboards/keychron/k2_max/jis/white/config.h | 47 - keyboards/keychron/k2_max/jis/white/info.json | 30 - .../k2_max/jis/white/keymaps/default/keymap.c | 67 -- .../k2_max/jis/white/keymaps/via/keymap.c | 67 -- .../k2_max/jis/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k2_max/jis/white/rules.mk | 1 - keyboards/keychron/k2_max/jis/white/white.c | 151 --- keyboards/keychron/k2_max/k2_max.c | 56 -- keyboards/keychron/k2_max/mcuconf.h | 37 - keyboards/keychron/k2_max/readme.md | 35 - keyboards/keychron/k2_max/rules.mk | 4 - .../k2_max/via_json/k2_max_ansi_rgb.json | 266 ------ .../k2_max/via_json/k2_max_ansi_white.json | 205 ---- .../k2_max/via_json/k2_max_iso_rgb.json | 269 ------ .../k2_max/via_json/k2_max_iso_white.json | 208 ----- .../k2_max/via_json/k2_max_jis_rgb.json | 261 ------ .../k2_max/via_json/k2_max_jis_white.json | 200 ---- keyboards/keychron/k2_pro/ansi/rgb/config.h | 53 -- keyboards/keychron/k2_pro/ansi/rgb/info.json | 35 - .../k2_pro/ansi/rgb/keymaps/default/keymap.c | 59 -- .../k2_pro/ansi/rgb/keymaps/via/keymap.c | 59 -- .../k2_pro/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k2_pro/ansi/rgb/rgb.c | 145 --- keyboards/keychron/k2_pro/ansi/rgb/rules.mk | 1 - keyboards/keychron/k2_pro/ansi/white/config.h | 49 - .../keychron/k2_pro/ansi/white/info.json | 30 - .../ansi/white/keymaps/candysign/config.h | 20 - .../ansi/white/keymaps/candysign/keymap.c | 59 -- .../ansi/white/keymaps/candysign/rules.mk | 1 - .../ansi/white/keymaps/default/keymap.c | 59 -- .../k2_pro/ansi/white/keymaps/via/keymap.c | 59 -- .../k2_pro/ansi/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k2_pro/ansi/white/rules.mk | 1 - keyboards/keychron/k2_pro/ansi/white/white.c | 155 --- keyboards/keychron/k2_pro/config.h | 91 -- keyboards/keychron/k2_pro/halconf.h | 29 - keyboards/keychron/k2_pro/info.json | 315 ------- keyboards/keychron/k2_pro/iso/rgb/config.h | 53 -- keyboards/keychron/k2_pro/iso/rgb/info.json | 35 - .../k2_pro/iso/rgb/keymaps/default/keymap.c | 59 -- .../k2_pro/iso/rgb/keymaps/via/keymap.c | 59 -- .../k2_pro/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k2_pro/iso/rgb/rgb.c | 146 --- keyboards/keychron/k2_pro/iso/rgb/rules.mk | 1 - keyboards/keychron/k2_pro/iso/white/config.h | 49 - keyboards/keychron/k2_pro/iso/white/info.json | 30 - .../k2_pro/iso/white/keymaps/default/keymap.c | 59 -- .../k2_pro/iso/white/keymaps/via/keymap.c | 59 -- .../k2_pro/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k2_pro/iso/white/rules.mk | 1 - keyboards/keychron/k2_pro/iso/white/white.c | 155 --- keyboards/keychron/k2_pro/jis/rgb/config.h | 53 -- keyboards/keychron/k2_pro/jis/rgb/info.json | 35 - .../k2_pro/jis/rgb/keymaps/default/keymap.c | 59 -- .../k2_pro/jis/rgb/keymaps/via/keymap.c | 59 -- .../k2_pro/jis/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k2_pro/jis/rgb/rgb.c | 153 --- keyboards/keychron/k2_pro/jis/rgb/rules.mk | 1 - keyboards/keychron/k2_pro/jis/white/config.h | 50 - keyboards/keychron/k2_pro/jis/white/info.json | 30 - .../k2_pro/jis/white/keymaps/default/keymap.c | 59 -- .../k2_pro/jis/white/keymaps/via/keymap.c | 59 -- .../k2_pro/jis/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k2_pro/jis/white/rules.mk | 1 - keyboards/keychron/k2_pro/jis/white/white.c | 151 --- keyboards/keychron/k2_pro/k2_pro.c | 296 ------ keyboards/keychron/k2_pro/k2_pro.h | 55 -- keyboards/keychron/k2_pro/matrix.c | 173 ---- keyboards/keychron/k2_pro/mcuconf.h | 37 - keyboards/keychron/k2_pro/readme.md | 21 - keyboards/keychron/k2_pro/rules.mk | 9 - .../k2_pro/via_json/k2_pro_ansi_rgb.json | 263 ------ .../k2_pro/via_json/k2_pro_ansi_white.json | 202 ---- .../k2_pro/via_json/k2_pro_iso_rgb.json | 271 ------ .../k2_pro/via_json/k2_pro_iso_white.json | 210 ----- keyboards/keychron/k3_max/ansi/rgb/config.h | 57 -- keyboards/keychron/k3_max/ansi/rgb/info.json | 36 - .../k3_max/ansi/rgb/keymaps/default/keymap.c | 68 -- .../k3_max/ansi/rgb/keymaps/via/keymap.c | 68 -- .../k3_max/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k3_max/ansi/rgb/rgb.c | 150 --- keyboards/keychron/k3_max/ansi/rgb/rules.mk | 1 - keyboards/keychron/k3_max/ansi/white/config.h | 54 -- .../keychron/k3_max/ansi/white/info.json | 30 - .../ansi/white/keymaps/default/keymap.c | 68 -- .../k3_max/ansi/white/keymaps/via/keymap.c | 68 -- .../k3_max/ansi/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k3_max/ansi/white/rules.mk | 1 - keyboards/keychron/k3_max/ansi/white/white.c | 149 --- keyboards/keychron/k3_max/board.h | 226 ----- keyboards/keychron/k3_max/config.h | 84 -- .../firmware/keychron_k3_max_ansi_rgb_via.bin | Bin 94888 -> 0 bytes .../keychron_k3_max_ansi_white_via.bin | Bin 86196 -> 0 bytes .../firmware/keychron_k3_max_iso_rgb_via.bin | Bin 94900 -> 0 bytes .../keychron_k3_max_iso_white_via.bin | Bin 86204 -> 0 bytes .../firmware/keychron_k3_max_jis_rgb_via.bin | Bin 94916 -> 0 bytes .../keychron_k3_max_jis_white_via.bin | Bin 86220 -> 0 bytes keyboards/keychron/k3_max/halconf.h | 31 - keyboards/keychron/k3_max/info.json | 321 ------- keyboards/keychron/k3_max/iso/rgb/config.h | 56 -- keyboards/keychron/k3_max/iso/rgb/info.json | 36 - .../k3_max/iso/rgb/keymaps/default/keymap.c | 67 -- .../k3_max/iso/rgb/keymaps/via/keymap.c | 67 -- .../k3_max/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k3_max/iso/rgb/rgb.c | 148 --- keyboards/keychron/k3_max/iso/rgb/rules.mk | 1 - keyboards/keychron/k3_max/iso/white/config.h | 54 -- keyboards/keychron/k3_max/iso/white/info.json | 30 - .../k3_max/iso/white/keymaps/default/keymap.c | 67 -- .../k3_max/iso/white/keymaps/via/keymap.c | 67 -- .../k3_max/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k3_max/iso/white/rules.mk | 1 - keyboards/keychron/k3_max/iso/white/white.c | 148 --- keyboards/keychron/k3_max/jis/rgb/config.h | 56 -- keyboards/keychron/k3_max/jis/rgb/info.json | 36 - .../k3_max/jis/rgb/keymaps/default/keymap.c | 67 -- .../k3_max/jis/rgb/keymaps/via/keymap.c | 67 -- .../k3_max/jis/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k3_max/jis/rgb/rgb.c | 154 --- keyboards/keychron/k3_max/jis/rgb/rules.mk | 1 - keyboards/keychron/k3_max/jis/white/config.h | 54 -- keyboards/keychron/k3_max/jis/white/info.json | 30 - .../k3_max/jis/white/keymaps/default/keymap.c | 67 -- .../k3_max/jis/white/keymaps/via/keymap.c | 67 -- .../k3_max/jis/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k3_max/jis/white/rules.mk | 1 - keyboards/keychron/k3_max/jis/white/white.c | 151 --- keyboards/keychron/k3_max/k3_max.c | 83 -- keyboards/keychron/k3_max/mcuconf.h | 37 - keyboards/keychron/k3_max/readme.md | 23 - keyboards/keychron/k3_max/rules.mk | 4 - .../k3_max/via_json/k3_max_ansi_rgb.json | 273 ------ .../k3_max/via_json/k3_max_ansi_white.json | 212 ----- .../k3_max/via_json/k3_max_iso_rgb.json | 279 ------ .../k3_max/via_json/k3_max_iso_white.json | 218 ----- .../k3_max/via_json/k3_max_jis_rgb.json | 267 ------ .../k3_max/via_json/k3_max_jis_white.json | 205 ---- keyboards/keychron/k3_pro/ansi/rgb/config.h | 58 -- keyboards/keychron/k3_pro/ansi/rgb/info.json | 35 - .../k3_pro/ansi/rgb/keymaps/default/keymap.c | 59 -- .../k3_pro/ansi/rgb/keymaps/via/keymap.c | 59 -- .../k3_pro/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k3_pro/ansi/rgb/rgb.c | 147 --- keyboards/keychron/k3_pro/ansi/rgb/rules.mk | 1 - keyboards/keychron/k3_pro/ansi/white/config.h | 50 - .../keychron/k3_pro/ansi/white/info.json | 30 - .../ansi/white/keymaps/default/keymap.c | 59 -- .../k3_pro/ansi/white/keymaps/via/keymap.c | 59 -- .../k3_pro/ansi/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k3_pro/ansi/white/rules.mk | 1 - keyboards/keychron/k3_pro/ansi/white/white.c | 144 --- keyboards/keychron/k3_pro/config.h | 98 -- keyboards/keychron/k3_pro/halconf.h | 30 - keyboards/keychron/k3_pro/info.json | 315 ------- keyboards/keychron/k3_pro/iso/rgb/config.h | 58 -- keyboards/keychron/k3_pro/iso/rgb/info.json | 35 - .../k3_pro/iso/rgb/keymaps/default/keymap.c | 59 -- .../k3_pro/iso/rgb/keymaps/via/keymap.c | 59 -- .../k3_pro/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k3_pro/iso/rgb/rgb.c | 148 --- keyboards/keychron/k3_pro/iso/rgb/rules.mk | 1 - keyboards/keychron/k3_pro/iso/white/config.h | 50 - keyboards/keychron/k3_pro/iso/white/info.json | 30 - .../k3_pro/iso/white/keymaps/default/keymap.c | 59 -- .../k3_pro/iso/white/keymaps/via/keymap.c | 59 -- .../k3_pro/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k3_pro/iso/white/rules.mk | 1 - keyboards/keychron/k3_pro/iso/white/white.c | 145 --- keyboards/keychron/k3_pro/jis/rgb/config.h | 54 -- keyboards/keychron/k3_pro/jis/rgb/info.json | 35 - .../k3_pro/jis/rgb/keymaps/default/keymap.c | 59 -- .../k3_pro/jis/rgb/keymaps/via/keymap.c | 59 -- .../k3_pro/jis/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k3_pro/jis/rgb/rgb.c | 153 --- keyboards/keychron/k3_pro/jis/rgb/rules.mk | 1 - keyboards/keychron/k3_pro/jis/white/config.h | 50 - keyboards/keychron/k3_pro/jis/white/info.json | 30 - .../k3_pro/jis/white/keymaps/default/keymap.c | 59 -- .../k3_pro/jis/white/keymaps/via/keymap.c | 59 -- .../k3_pro/jis/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k3_pro/jis/white/rules.mk | 1 - keyboards/keychron/k3_pro/jis/white/white.c | 151 --- keyboards/keychron/k3_pro/k3_pro.c | 301 ------ keyboards/keychron/k3_pro/k3_pro.h | 55 -- keyboards/keychron/k3_pro/matrix.c | 197 ---- keyboards/keychron/k3_pro/mcuconf.h | 39 - keyboards/keychron/k3_pro/readme.md | 21 - keyboards/keychron/k3_pro/rules.mk | 9 - .../k3_pro/via_json/k3_pro_ansi_rgb.json | 263 ------ .../k3_pro/via_json/k3_pro_ansi_white.json | 202 ---- .../k3_pro/via_json/k3_pro_iso_rgb .json | 211 ----- .../k3_pro/via_json/k3_pro_iso_white.json | 210 ----- .../k3_pro/via_json/k3_pro_jis_rgb .json | 263 ------ .../k3_pro/via_json/k3_pro_jis_white.json | 202 ---- keyboards/keychron/k4_pro/ansi/rgb/config.h | 58 -- keyboards/keychron/k4_pro/ansi/rgb/info.json | 35 - .../k4_pro/ansi/rgb/keymaps/default/keymap.c | 56 -- .../k4_pro/ansi/rgb/keymaps/via/keymap.c | 56 -- .../k4_pro/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k4_pro/ansi/rgb/rgb.c | 163 ---- keyboards/keychron/k4_pro/ansi/rgb/rules.mk | 1 - keyboards/keychron/k4_pro/ansi/white/config.h | 50 - .../keychron/k4_pro/ansi/white/info.json | 30 - .../ansi/white/keymaps/default/keymap.c | 56 -- .../k4_pro/ansi/white/keymaps/via/keymap.c | 56 -- .../k4_pro/ansi/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k4_pro/ansi/white/rules.mk | 1 - keyboards/keychron/k4_pro/ansi/white/white.c | 161 ---- keyboards/keychron/k4_pro/config.h | 87 -- keyboards/keychron/k4_pro/halconf.h | 29 - keyboards/keychron/k4_pro/info.json | 251 ----- keyboards/keychron/k4_pro/iso/rgb/config.h | 54 -- keyboards/keychron/k4_pro/iso/rgb/info.json | 35 - .../k4_pro/iso/rgb/keymaps/default/keymap.c | 56 -- .../k4_pro/iso/rgb/keymaps/via/keymap.c | 56 -- .../k4_pro/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k4_pro/iso/rgb/rgb.c | 167 ---- keyboards/keychron/k4_pro/iso/rgb/rules.mk | 1 - keyboards/keychron/k4_pro/iso/white/config.h | 46 - keyboards/keychron/k4_pro/iso/white/info.json | 30 - .../k4_pro/iso/white/keymaps/default/keymap.c | 56 -- .../k4_pro/iso/white/keymaps/via/keymap.c | 56 -- .../k4_pro/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k4_pro/iso/white/rules.mk | 1 - keyboards/keychron/k4_pro/iso/white/white.c | 165 ---- keyboards/keychron/k4_pro/k4_pro.c | 296 ------ keyboards/keychron/k4_pro/k4_pro.h | 55 -- keyboards/keychron/k4_pro/matrix.c | 170 ---- keyboards/keychron/k4_pro/mcuconf.h | 36 - keyboards/keychron/k4_pro/readme.md | 21 - keyboards/keychron/k4_pro/rules.mk | 9 - .../k4_pro/via_json/k4_pro_ansi_rgb.json | 318 ------- .../k4_pro/via_json/k4_pro_ansi_white.json | 257 ----- .../k4_pro/via_json/k4_pro_iso_rgb.json | 324 ------- .../k4_pro/via_json/k4_pro_iso_white.json | 264 ------ keyboards/keychron/k5_max/ansi/rgb/config.h | 55 -- keyboards/keychron/k5_max/ansi/rgb/info.json | 36 - .../k5_max/ansi/rgb/keymaps/default/keymap.c | 68 -- .../ansi/rgb/keymaps/infraviolet/config.h | 23 - .../ansi/rgb/keymaps/infraviolet/keymap.c | 93 -- .../ansi/rgb/keymaps/infraviolet/rules.mk | 1 - .../k5_max/ansi/rgb/keymaps/via/keymap.c | 68 -- .../k5_max/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k5_max/ansi/rgb/rgb.c | 174 ---- keyboards/keychron/k5_max/ansi/rgb/rules.mk | 1 - keyboards/keychron/k5_max/ansi/white/config.h | 52 -- .../keychron/k5_max/ansi/white/info.json | 30 - .../ansi/white/keymaps/default/keymap.c | 68 -- .../k5_max/ansi/white/keymaps/via/keymap.c | 68 -- .../k5_max/ansi/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k5_max/ansi/white/rules.mk | 1 - keyboards/keychron/k5_max/ansi/white/white.c | 172 ---- keyboards/keychron/k5_max/board.h | 226 ----- keyboards/keychron/k5_max/config.h | 93 -- .../firmware/keychron_k5_max_ansi_rgb_via.bin | Bin 95948 -> 0 bytes .../keychron_k5_max_ansi_white_via.bin | Bin 87200 -> 0 bytes .../firmware/keychron_k5_max_iso_rgb_via.bin | Bin 95956 -> 0 bytes .../keychron_k5_max_iso_white_via.bin | Bin 87208 -> 0 bytes keyboards/keychron/k5_max/halconf.h | 31 - keyboards/keychron/k5_max/info.json | 272 ------ keyboards/keychron/k5_max/iso/rgb/config.h | 55 -- keyboards/keychron/k5_max/iso/rgb/info.json | 36 - .../k5_max/iso/rgb/keymaps/default/keymap.c | 68 -- .../k5_max/iso/rgb/keymaps/via/keymap.c | 68 -- .../k5_max/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k5_max/iso/rgb/rgb.c | 175 ---- keyboards/keychron/k5_max/iso/rgb/rules.mk | 1 - keyboards/keychron/k5_max/iso/white/config.h | 52 -- keyboards/keychron/k5_max/iso/white/info.json | 30 - .../k5_max/iso/white/keymaps/default/keymap.c | 68 -- .../k5_max/iso/white/keymaps/via/keymap.c | 68 -- .../k5_max/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k5_max/iso/white/rules.mk | 1 - keyboards/keychron/k5_max/iso/white/white.c | 173 ---- keyboards/keychron/k5_max/k5_max.c | 97 -- keyboards/keychron/k5_max/mcuconf.h | 37 - keyboards/keychron/k5_max/readme.md | 23 - keyboards/keychron/k5_max/rules.mk | 4 - .../k5_max/via_json/k5_max_ansi_rgb.json | 342 ------- .../k5_max/via_json/k5_max_ansi_white.json | 281 ------ keyboards/keychron/k5_pro/ansi/rgb/config.h | 52 -- keyboards/keychron/k5_pro/ansi/rgb/info.json | 150 --- .../k5_pro/ansi/rgb/keymaps/default/keymap.c | 59 -- .../k5_pro/ansi/rgb/keymaps/via/keymap.c | 59 -- .../k5_pro/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k5_pro/ansi/rgb/rgb.c | 142 --- keyboards/keychron/k5_pro/ansi/rgb/rules.mk | 1 - keyboards/keychron/k5_pro/ansi/white/config.h | 52 -- .../keychron/k5_pro/ansi/white/info.json | 145 --- .../ansi/white/keymaps/default/keymap.c | 59 -- .../k5_pro/ansi/white/keymaps/via/keymap.c | 59 -- .../k5_pro/ansi/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k5_pro/ansi/white/rules.mk | 1 - keyboards/keychron/k5_pro/ansi/white/white.c | 140 --- keyboards/keychron/k5_pro/config.h | 98 -- keyboards/keychron/k5_pro/halconf.h | 32 - keyboards/keychron/k5_pro/info.json | 388 -------- keyboards/keychron/k5_pro/iso/rgb/config.h | 53 -- keyboards/keychron/k5_pro/iso/rgb/info.json | 151 --- .../k5_pro/iso/rgb/keymaps/default/keymap.c | 59 -- .../k5_pro/iso/rgb/keymaps/via/keymap.c | 59 -- .../k5_pro/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k5_pro/iso/rgb/rgb.c | 143 --- keyboards/keychron/k5_pro/iso/rgb/rules.mk | 1 - keyboards/keychron/k5_pro/iso/white/config.h | 53 -- keyboards/keychron/k5_pro/iso/white/info.json | 146 --- .../k5_pro/iso/white/keymaps/default/keymap.c | 59 -- .../k5_pro/iso/white/keymaps/via/keymap.c | 59 -- .../k5_pro/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k5_pro/iso/white/rules.mk | 1 - keyboards/keychron/k5_pro/iso/white/white.c | 141 --- keyboards/keychron/k5_pro/jis/rgb/config.h | 53 -- keyboards/keychron/k5_pro/jis/rgb/info.json | 154 --- .../k5_pro/jis/rgb/keymaps/default/keymap.c | 59 -- .../k5_pro/jis/rgb/keymaps/via/keymap.c | 59 -- .../k5_pro/jis/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k5_pro/jis/rgb/rgb.c | 146 --- keyboards/keychron/k5_pro/jis/rgb/rules.mk | 1 - keyboards/keychron/k5_pro/jis/white/config.h | 53 -- keyboards/keychron/k5_pro/jis/white/info.json | 149 --- .../k5_pro/jis/white/keymaps/default/keymap.c | 60 -- .../k5_pro/jis/white/keymaps/via/keymap.c | 59 -- .../k5_pro/jis/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k5_pro/jis/white/rules.mk | 1 - keyboards/keychron/k5_pro/jis/white/white.c | 144 --- keyboards/keychron/k5_pro/k5_pro.c | 342 ------- keyboards/keychron/k5_pro/k5_pro.h | 57 -- keyboards/keychron/k5_pro/matrix.c | 190 ---- keyboards/keychron/k5_pro/mcuconf.h | 36 - keyboards/keychron/k5_pro/readme.md | 31 - keyboards/keychron/k5_pro/rules.mk | 7 - .../k5_pro/via_json/k5_pro_ansi_rgb.json | 342 ------- .../via_json/k5_pro_ansi_rgb_v1.00.json | 342 ------- .../k5_pro/via_json/k5_pro_ansi_white.json | 281 ------ .../via_json/k5_pro_ansi_white_v1.00.json | 281 ------ .../k5_pro/via_json/k5_pro_iso_rgb.json | 348 ------- .../k5_pro/via_json/k5_pro_iso_white.json | 287 ------ .../k5_pro/via_json/k5_pro_jis_rgb.json | 345 ------- .../k5_pro/via_json/k5_pro_jis_white.json | 284 ------ keyboards/keychron/k6_pro/ansi/rgb/config.h | 53 -- keyboards/keychron/k6_pro/ansi/rgb/info.json | 35 - .../k6_pro/ansi/rgb/keymaps/default/keymap.c | 63 -- .../k6_pro/ansi/rgb/keymaps/via/keymap.c | 63 -- .../k6_pro/ansi/rgb/keymaps/via/rules.mk | 2 - keyboards/keychron/k6_pro/ansi/rgb/rgb.c | 125 --- keyboards/keychron/k6_pro/ansi/rgb/rules.mk | 1 - keyboards/keychron/k6_pro/ansi/white/config.h | 49 - .../keychron/k6_pro/ansi/white/info.json | 30 - .../ansi/white/keymaps/default/keymap.c | 63 -- .../k6_pro/ansi/white/keymaps/via/keymap.c | 63 -- .../k6_pro/ansi/white/keymaps/via/rules.mk | 2 - keyboards/keychron/k6_pro/ansi/white/rules.mk | 1 - keyboards/keychron/k6_pro/ansi/white/white.c | 124 --- keyboards/keychron/k6_pro/config.h | 91 -- keyboards/keychron/k6_pro/halconf.h | 29 - keyboards/keychron/k6_pro/info.json | 264 ------ keyboards/keychron/k6_pro/iso/rgb/config.h | 50 - keyboards/keychron/k6_pro/iso/rgb/info.json | 35 - .../k6_pro/iso/rgb/keymaps/default/keymap.c | 63 -- .../k6_pro/iso/rgb/keymaps/via/keymap.c | 63 -- .../k6_pro/iso/rgb/keymaps/via/rules.mk | 2 - keyboards/keychron/k6_pro/iso/rgb/rgb.c | 126 --- keyboards/keychron/k6_pro/iso/rgb/rules.mk | 1 - keyboards/keychron/k6_pro/iso/white/config.h | 46 - keyboards/keychron/k6_pro/iso/white/info.json | 30 - .../k6_pro/iso/white/keymaps/default/keymap.c | 63 -- .../k6_pro/iso/white/keymaps/via/keymap.c | 63 -- .../k6_pro/iso/white/keymaps/via/rules.mk | 2 - keyboards/keychron/k6_pro/iso/white/rules.mk | 1 - keyboards/keychron/k6_pro/iso/white/white.c | 125 --- keyboards/keychron/k6_pro/jis/rgb/config.h | 49 - keyboards/keychron/k6_pro/jis/rgb/info.json | 35 - .../k6_pro/jis/rgb/keymaps/default/keymap.c | 63 -- .../k6_pro/jis/rgb/keymaps/via/keymap.c | 64 -- .../k6_pro/jis/rgb/keymaps/via/rules.mk | 2 - keyboards/keychron/k6_pro/jis/rgb/rgb.c | 133 --- keyboards/keychron/k6_pro/jis/rgb/rules.mk | 1 - keyboards/keychron/k6_pro/k6_pro.c | 293 ------ keyboards/keychron/k6_pro/k6_pro.h | 55 -- keyboards/keychron/k6_pro/matrix.c | 152 --- keyboards/keychron/k6_pro/mcuconf.h | 37 - keyboards/keychron/k6_pro/readme.md | 21 - keyboards/keychron/k6_pro/rules.mk | 9 - .../k6_pro/via_json/k6_pro_ansi_rgb.json | 239 ----- .../k6_pro/via_json/k6_pro_ansi_white.json | 178 ---- .../k6_pro/via_json/k6_pro_iso_rgb.json | 243 ----- .../k6_pro/via_json/k6_pro_iso_white.json | 182 ---- .../k6_pro/via_json/k6_pro_jis_rgb.json | 241 ----- keyboards/keychron/k7_max/ansi/rgb/config.h | 51 - keyboards/keychron/k7_max/ansi/rgb/info.json | 36 - .../k7_max/ansi/rgb/keymaps/default/keymap.c | 72 -- .../k7_max/ansi/rgb/keymaps/via/keymap.c | 72 -- .../k7_max/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k7_max/ansi/rgb/rgb.c | 130 --- keyboards/keychron/k7_max/ansi/rgb/rules.mk | 1 - keyboards/keychron/k7_max/ansi/white/config.h | 51 - .../keychron/k7_max/ansi/white/info.json | 30 - .../ansi/white/keymaps/default/keymap.c | 72 -- .../k7_max/ansi/white/keymaps/via/keymap.c | 72 -- .../k7_max/ansi/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k7_max/ansi/white/rules.mk | 1 - keyboards/keychron/k7_max/ansi/white/white.c | 128 --- keyboards/keychron/k7_max/board.h | 225 ----- keyboards/keychron/k7_max/config.h | 76 -- .../firmware/keychron_k7_max_ansi_rgb_via.bin | Bin 94748 -> 0 bytes .../keychron_k7_max_ansi_white_via.bin | Bin 86096 -> 0 bytes .../firmware/keychron_k7_max_iso_rgb_via.bin | Bin 94760 -> 0 bytes .../keychron_k7_max_iso_white_via.bin | Bin 86104 -> 0 bytes .../firmware/keychron_k7_max_jis_rgb_via.bin | Bin 94772 -> 0 bytes .../keychron_k7_max_jis_white_via.bin | Bin 86112 -> 0 bytes keyboards/keychron/k7_max/halconf.h | 28 - keyboards/keychron/k7_max/info.json | 277 ------ keyboards/keychron/k7_max/iso/rgb/config.h | 53 -- keyboards/keychron/k7_max/iso/rgb/info.json | 37 - .../k7_max/iso/rgb/keymaps/default/keymap.c | 72 -- .../k7_max/iso/rgb/keymaps/via/keymap.c | 72 -- .../k7_max/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k7_max/iso/rgb/rgb.c | 131 --- keyboards/keychron/k7_max/iso/rgb/rules.mk | 1 - keyboards/keychron/k7_max/iso/white/config.h | 51 - keyboards/keychron/k7_max/iso/white/info.json | 30 - .../k7_max/iso/white/keymaps/default/keymap.c | 72 -- .../k7_max/iso/white/keymaps/via/keymap.c | 72 -- .../k7_max/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k7_max/iso/white/rules.mk | 1 - keyboards/keychron/k7_max/iso/white/white.c | 129 --- keyboards/keychron/k7_max/jis/rgb/config.h | 51 - keyboards/keychron/k7_max/jis/rgb/info.json | 36 - .../k7_max/jis/rgb/keymaps/default/keymap.c | 72 -- .../k7_max/jis/rgb/keymaps/via/keymap.c | 72 -- .../k7_max/jis/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k7_max/jis/rgb/rgb.c | 134 --- keyboards/keychron/k7_max/jis/rgb/rules.mk | 1 - keyboards/keychron/k7_max/jis/white/config.h | 51 - keyboards/keychron/k7_max/jis/white/info.json | 30 - .../k7_max/jis/white/keymaps/default/keymap.c | 72 -- .../k7_max/jis/white/keymaps/via/keymap.c | 72 -- .../k7_max/jis/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k7_max/jis/white/rules.mk | 1 - keyboards/keychron/k7_max/jis/white/white.c | 132 --- keyboards/keychron/k7_max/k7_max.c | 77 -- keyboards/keychron/k7_max/mcuconf.h | 37 - keyboards/keychron/k7_max/readme.md | 31 - keyboards/keychron/k7_max/rules.mk | 4 - .../k7_max/via_json/k7_max_ansi_rgb_v1.0.json | 240 ----- .../via_json/k7_max_ansi_white_v1.0.json | 179 ---- .../k7_max/via_json/k7_max_iso_rgb_v1.0.json | 245 ----- .../via_json/k7_max_iso_white_v1.0.json | 184 ---- .../k7_max/via_json/k7_max_jis_rgb_v1.0.json | 237 ----- .../via_json/k7_max_jis_white_v1.0.json | 176 ---- keyboards/keychron/k7_pro/ansi/rgb/config.h | 53 -- keyboards/keychron/k7_pro/ansi/rgb/info.json | 35 - .../k7_pro/ansi/rgb/keymaps/default/keymap.c | 63 -- .../k7_pro/ansi/rgb/keymaps/via/keymap.c | 63 -- .../k7_pro/ansi/rgb/keymaps/via/rules.mk | 2 - keyboards/keychron/k7_pro/ansi/rgb/rgb.c | 127 --- keyboards/keychron/k7_pro/ansi/rgb/rules.mk | 1 - keyboards/keychron/k7_pro/ansi/white/config.h | 49 - .../keychron/k7_pro/ansi/white/info.json | 30 - .../ansi/white/keymaps/default/keymap.c | 63 -- .../k7_pro/ansi/white/keymaps/via/keymap.c | 63 -- .../k7_pro/ansi/white/keymaps/via/rules.mk | 2 - keyboards/keychron/k7_pro/ansi/white/rules.mk | 1 - keyboards/keychron/k7_pro/ansi/white/white.c | 125 --- keyboards/keychron/k7_pro/config.h | 94 -- keyboards/keychron/k7_pro/halconf.h | 30 - keyboards/keychron/k7_pro/info.json | 188 ---- keyboards/keychron/k7_pro/iso/rgb/config.h | 54 -- keyboards/keychron/k7_pro/iso/rgb/info.json | 110 --- .../k7_pro/iso/rgb/keymaps/default/keymap.c | 63 -- .../k7_pro/iso/rgb/keymaps/via/keymap.c | 63 -- .../k7_pro/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k7_pro/iso/rgb/rgb.c | 102 -- keyboards/keychron/k7_pro/iso/rgb/rules.mk | 1 - keyboards/keychron/k7_pro/iso/white/config.h | 53 -- keyboards/keychron/k7_pro/iso/white/info.json | 105 --- .../k7_pro/iso/white/keymaps/default/keymap.c | 63 -- .../k7_pro/iso/white/keymaps/via/keymap.c | 63 -- .../k7_pro/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k7_pro/iso/white/rules.mk | 1 - keyboards/keychron/k7_pro/iso/white/white.c | 100 -- keyboards/keychron/k7_pro/k7_pro.c | 312 ------- keyboards/keychron/k7_pro/k7_pro.h | 55 -- keyboards/keychron/k7_pro/matrix.c | 198 ---- keyboards/keychron/k7_pro/mcuconf.h | 40 - keyboards/keychron/k7_pro/readme.md | 27 - keyboards/keychron/k7_pro/rules.mk | 9 - .../k7_pro/via_json/k7_pro_ansi_rgb.json | 233 ----- .../k7_pro/via_json/k7_pro_ansi_white.json | 172 ---- .../k7_pro/via_json/k7_pro_iso_rgb.json | 241 ----- .../k7_pro/via_json/k7_pro_iso_white.json | 180 ---- keyboards/keychron/k8_max/ansi/rgb/config.h | 53 -- keyboards/keychron/k8_max/ansi/rgb/info.json | 36 - .../k8_max/ansi/rgb/keymaps/default/keymap.c | 67 -- .../k8_max/ansi/rgb/keymaps/via/keymap.c | 67 -- .../k8_max/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k8_max/ansi/rgb/rgb.c | 153 --- keyboards/keychron/k8_max/ansi/rgb/rules.mk | 1 - keyboards/keychron/k8_max/ansi/white/config.h | 54 -- .../keychron/k8_max/ansi/white/info.json | 30 - .../ansi/white/keymaps/default/keymap.c | 67 -- .../k8_max/ansi/white/keymaps/via/keymap.c | 67 -- .../k8_max/ansi/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k8_max/ansi/white/rules.mk | 1 - keyboards/keychron/k8_max/ansi/white/white.c | 152 --- keyboards/keychron/k8_max/board.h | 226 ----- keyboards/keychron/k8_max/config.h | 84 -- .../firmware/keychron_k8_max_ansi_rgb_via.bin | Bin 95216 -> 0 bytes .../keychron_k8_max_ansi_white_via.bin | Bin 86524 -> 0 bytes .../firmware/keychron_k8_max_iso_rgb_via.bin | Bin 95224 -> 0 bytes .../keychron_k8_max_iso_white_via.bin | Bin 86528 -> 0 bytes .../firmware/keychron_k8_max_jis_rgb_via.bin | Bin 95244 -> 0 bytes .../keychron_k8_max_jis_white_via.bin | Bin 86544 -> 0 bytes keyboards/keychron/k8_max/halconf.h | 28 - keyboards/keychron/k8_max/info.json | 337 ------- keyboards/keychron/k8_max/iso/rgb/config.h | 55 -- keyboards/keychron/k8_max/iso/rgb/info.json | 36 - .../k8_max/iso/rgb/keymaps/default/keymap.c | 67 -- .../k8_max/iso/rgb/keymaps/via/keymap.c | 67 -- .../k8_max/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k8_max/iso/rgb/rgb.c | 155 --- keyboards/keychron/k8_max/iso/rgb/rules.mk | 1 - keyboards/keychron/k8_max/iso/white/config.h | 54 -- keyboards/keychron/k8_max/iso/white/info.json | 30 - .../k8_max/iso/white/keymaps/default/keymap.c | 67 -- .../k8_max/iso/white/keymaps/via/keymap.c | 67 -- .../k8_max/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k8_max/iso/white/rules.mk | 1 - keyboards/keychron/k8_max/iso/white/white.c | 153 --- keyboards/keychron/k8_max/jis/rgb/config.h | 53 -- keyboards/keychron/k8_max/jis/rgb/info.json | 36 - .../k8_max/jis/rgb/keymaps/default/keymap.c | 67 -- .../k8_max/jis/rgb/keymaps/via/keymap.c | 67 -- .../k8_max/jis/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k8_max/jis/rgb/rgb.c | 159 ---- keyboards/keychron/k8_max/jis/rgb/rules.mk | 1 - keyboards/keychron/k8_max/jis/white/config.h | 54 -- keyboards/keychron/k8_max/jis/white/info.json | 30 - .../k8_max/jis/white/keymaps/default/keymap.c | 67 -- .../k8_max/jis/white/keymaps/via/keymap.c | 67 -- .../k8_max/jis/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k8_max/jis/white/rules.mk | 1 - keyboards/keychron/k8_max/jis/white/white.c | 156 ---- keyboards/keychron/k8_max/k8_max.c | 94 -- keyboards/keychron/k8_max/mcuconf.h | 37 - keyboards/keychron/k8_max/readme.md | 31 - keyboards/keychron/k8_max/rules.mk | 4 - .../k8_max/via_json/k8_max_ansi_rgb.json | 290 ------ .../k8_max/via_json/k8_max_ansi_white.json | 229 ----- .../k8_max/via_json/k8_max_iso_rgb.json | 292 ------ .../k8_max/via_json/k8_max_iso_white.json | 231 ----- .../k8_max/via_json/k8_max_jis_rgb.json | 291 ------ .../k8_max/via_json/k8_max_jis_white.json | 230 ----- keyboards/keychron/k8_pro/ansi/rgb/config.h | 49 - keyboards/keychron/k8_pro/ansi/rgb/info.json | 35 - .../k8_pro/ansi/rgb/keymaps/default/keymap.c | 60 -- .../k8_pro/ansi/rgb/keymaps/via/keymap.c | 60 -- .../k8_pro/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k8_pro/ansi/rgb/rgb.c | 148 --- keyboards/keychron/k8_pro/ansi/rgb/rules.mk | 1 - keyboards/keychron/k8_pro/ansi/white/config.h | 44 - .../keychron/k8_pro/ansi/white/info.json | 30 - .../ansi/white/keymaps/default/keymap.c | 60 -- .../k8_pro/ansi/white/keymaps/via/keymap.c | 60 -- .../k8_pro/ansi/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k8_pro/ansi/white/rules.mk | 1 - keyboards/keychron/k8_pro/ansi/white/white.c | 148 --- keyboards/keychron/k8_pro/config.h | 95 -- keyboards/keychron/k8_pro/halconf.h | 29 - keyboards/keychron/k8_pro/info.json | 325 ------- keyboards/keychron/k8_pro/iso/rgb/config.h | 46 - keyboards/keychron/k8_pro/iso/rgb/info.json | 35 - .../k8_pro/iso/rgb/keymaps/default/keymap.c | 60 -- .../k8_pro/iso/rgb/keymaps/via/keymap.c | 60 -- .../k8_pro/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k8_pro/iso/rgb/rgb.c | 149 --- keyboards/keychron/k8_pro/iso/rgb/rules.mk | 1 - keyboards/keychron/k8_pro/iso/white/config.h | 44 - keyboards/keychron/k8_pro/iso/white/info.json | 30 - .../k8_pro/iso/white/keymaps/default/keymap.c | 59 -- .../k8_pro/iso/white/keymaps/via/keymap.c | 59 -- .../k8_pro/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k8_pro/iso/white/rules.mk | 1 - keyboards/keychron/k8_pro/iso/white/white.c | 149 --- keyboards/keychron/k8_pro/jis/rgb/config.h | 47 - keyboards/keychron/k8_pro/jis/rgb/info.json | 133 --- .../k8_pro/jis/rgb/keymaps/default/keymap.c | 60 -- .../k8_pro/jis/rgb/keymaps/via/keymap.c | 59 -- .../k8_pro/jis/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k8_pro/jis/rgb/rgb.c | 125 --- keyboards/keychron/k8_pro/jis/rgb/rules.mk | 1 - keyboards/keychron/k8_pro/jis/white/config.h | 45 - keyboards/keychron/k8_pro/jis/white/info.json | 128 --- .../k8_pro/jis/white/keymaps/default/keymap.c | 59 -- .../k8_pro/jis/white/keymaps/via/keymap.c | 59 -- .../k8_pro/jis/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k8_pro/jis/white/rules.mk | 1 - keyboards/keychron/k8_pro/jis/white/white.c | 123 --- keyboards/keychron/k8_pro/k8_pro.c | 322 ------- keyboards/keychron/k8_pro/k8_pro.h | 55 -- keyboards/keychron/k8_pro/matrix.c | 173 ---- keyboards/keychron/k8_pro/mcuconf.h | 36 - keyboards/keychron/k8_pro/readme.md | 31 - keyboards/keychron/k8_pro/rules.mk | 9 - .../k8_pro/via_json/k8_pro_ansi_rgb.json | 287 ------ .../k8_pro/via_json/k8_pro_ansi_white.json | 226 ----- .../k8_pro/via_json/k8_pro_iso_rgb.json | 292 ------ .../k8_pro/via_json/k8_pro_iso_white.json | 231 ----- .../k8_pro/via_json/k8_pro_jis_rgb.json | 292 ------ .../k8_pro/via_json/k8_pro_jis_white.json | 231 ----- keyboards/keychron/k9_pro/ansi/info.json | 83 -- keyboards/keychron/k9_pro/ansi/rgb/config.h | 52 -- keyboards/keychron/k9_pro/ansi/rgb/info.json | 102 -- .../k9_pro/ansi/rgb/keymaps/default/keymap.c | 63 -- .../k9_pro/ansi/rgb/keymaps/via/keymap.c | 63 -- .../k9_pro/ansi/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k9_pro/ansi/rgb/rgb.c | 94 -- keyboards/keychron/k9_pro/ansi/rgb/rules.mk | 1 - keyboards/keychron/k9_pro/ansi/white/config.h | 51 - .../keychron/k9_pro/ansi/white/info.json | 97 -- .../ansi/white/keymaps/default/keymap.c | 63 -- .../k9_pro/ansi/white/keymaps/via/keymap.c | 57 -- .../k9_pro/ansi/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k9_pro/ansi/white/rules.mk | 1 - keyboards/keychron/k9_pro/ansi/white/white.c | 92 -- keyboards/keychron/k9_pro/config.h | 91 -- keyboards/keychron/k9_pro/halconf.h | 29 - keyboards/keychron/k9_pro/info.json | 23 - keyboards/keychron/k9_pro/iso/info.json | 84 -- keyboards/keychron/k9_pro/iso/rgb/config.h | 51 - keyboards/keychron/k9_pro/iso/rgb/info.json | 103 -- .../k9_pro/iso/rgb/keymaps/default/keymap.c | 63 -- .../k9_pro/iso/rgb/keymaps/via/keymap.c | 63 -- .../k9_pro/iso/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k9_pro/iso/rgb/rgb.c | 95 -- keyboards/keychron/k9_pro/iso/rgb/rules.mk | 1 - keyboards/keychron/k9_pro/iso/white/config.h | 54 -- keyboards/keychron/k9_pro/iso/white/info.json | 98 -- .../k9_pro/iso/white/keymaps/default/keymap.c | 63 -- .../k9_pro/iso/white/keymaps/via/keymap.c | 63 -- .../k9_pro/iso/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k9_pro/iso/white/rules.mk | 1 - keyboards/keychron/k9_pro/iso/white/white.c | 93 -- keyboards/keychron/k9_pro/jis/info.json | 87 -- keyboards/keychron/k9_pro/jis/rgb/config.h | 62 -- keyboards/keychron/k9_pro/jis/rgb/info.json | 106 --- .../k9_pro/jis/rgb/keymaps/default/keymap.c | 63 -- .../k9_pro/jis/rgb/keymaps/via/keymap.c | 63 -- .../k9_pro/jis/rgb/keymaps/via/rules.mk | 1 - keyboards/keychron/k9_pro/jis/rgb/rgb.c | 98 -- keyboards/keychron/k9_pro/jis/rgb/rules.mk | 1 - keyboards/keychron/k9_pro/jis/white/config.h | 59 -- keyboards/keychron/k9_pro/jis/white/info.json | 101 -- .../k9_pro/jis/white/keymaps/default/keymap.c | 63 -- .../k9_pro/jis/white/keymaps/via/keymap.c | 63 -- .../k9_pro/jis/white/keymaps/via/rules.mk | 1 - keyboards/keychron/k9_pro/jis/white/rules.mk | 1 - keyboards/keychron/k9_pro/jis/white/white.c | 96 -- keyboards/keychron/k9_pro/k9_pro.c | 308 ------ keyboards/keychron/k9_pro/k9_pro.h | 55 -- keyboards/keychron/k9_pro/matrix.c | 213 ----- keyboards/keychron/k9_pro/mcuconf.h | 37 - keyboards/keychron/k9_pro/readme.md | 31 - keyboards/keychron/k9_pro/rules.mk | 7 - keyboards/keychron/q0_max/board.h | 226 ----- keyboards/keychron/q0_max/config.h | 82 -- keyboards/keychron/q0_max/encoder/config.h | 58 -- keyboards/keychron/q0_max/encoder/encoder.c | 94 -- keyboards/keychron/q0_max/encoder/info.json | 44 - .../q0_max/encoder/keymaps/default/keymap.c | 76 -- .../q0_max/encoder/keymaps/via/keymap.c | 76 -- .../q0_max/encoder/keymaps/via/rules.mk | 1 - keyboards/keychron/q0_max/encoder/rules.mk | 1 - .../firmware/keychron_q0_max_encoder_via.bin | Bin 94124 -> 0 bytes keyboards/keychron/q0_max/halconf.h | 31 - keyboards/keychron/q0_max/info.json | 74 -- keyboards/keychron/q0_max/mcuconf.h | 37 - keyboards/keychron/q0_max/q0_max.c | 50 - keyboards/keychron/q0_max/readme.md | 21 - keyboards/keychron/q0_max/rules.mk | 4 - .../q0_max/via_json/q0_max_encoder.json | 137 --- .../q10_max/ansi_encoder/ansi_encoder.c | 156 ---- .../keychron/q10_max/ansi_encoder/config.h | 47 - .../keychron/q10_max/ansi_encoder/info.json | 107 --- .../ansi_encoder/keymaps/default/keymap.c | 77 -- .../q10_max/ansi_encoder/keymaps/via/keymap.c | 77 -- .../q10_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/q10_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/q10_max/board.h | 226 ----- keyboards/keychron/q10_max/config.h | 88 -- .../keychron_q10_max_ansi_encoder_via.bin | Bin 95988 -> 0 bytes keyboards/keychron/q10_max/halconf.h | 31 - keyboards/keychron/q10_max/info.json | 80 -- .../keychron/q10_max/iso_encoder/config.h | 47 - .../keychron/q10_max/iso_encoder/info.json | 108 --- .../q10_max/iso_encoder/iso_encoder.c | 157 ---- .../iso_encoder/keymaps/default/keymap.c | 77 -- .../q10_max/iso_encoder/keymaps/via/keymap.c | 77 -- .../q10_max/iso_encoder/keymaps/via/rules.mk | 1 - .../keychron/q10_max/iso_encoder/rules.mk | 1 - keyboards/keychron/q10_max/mcuconf.h | 37 - keyboards/keychron/q10_max/q10_max.c | 61 -- keyboards/keychron/q10_max/readme.md | 23 - keyboards/keychron/q10_max/rules.mk | 4 - .../via_json/q10_max_ansi_encoder.json | 406 -------- .../q10_max/via_json/q10_max_iso_encoder.json | 399 -------- .../q10_pro/ansi_encoder/ansi_encoder.c | 123 --- .../keychron/q10_pro/ansi_encoder/config.h | 59 -- .../keychron/q10_pro/ansi_encoder/info.json | 205 ---- .../ansi_encoder/keymaps/default/keymap.c | 68 -- .../ansi_encoder/keymaps/default/rules.mk | 1 - .../q10_pro/ansi_encoder/keymaps/via/keymap.c | 68 -- .../q10_pro/ansi_encoder/keymaps/via/rules.mk | 2 - .../keychron/q10_pro/ansi_encoder/rules.mk | 1 - keyboards/keychron/q10_pro/config.h | 84 -- keyboards/keychron/q10_pro/halconf.h | 29 - keyboards/keychron/q10_pro/info.json | 64 -- .../keychron/q10_pro/iso_encoder/config.h | 59 -- .../keychron/q10_pro/iso_encoder/info.json | 207 ---- .../q10_pro/iso_encoder/iso_encoder.c | 124 --- .../iso_encoder/keymaps/default/keymap.c | 69 -- .../iso_encoder/keymaps/default/rules.mk | 1 - .../q10_pro/iso_encoder/keymaps/via/keymap.c | 68 -- .../q10_pro/iso_encoder/keymaps/via/rules.mk | 2 - .../keychron/q10_pro/iso_encoder/rules.mk | 1 - keyboards/keychron/q10_pro/mcuconf.h | 36 - keyboards/keychron/q10_pro/q10_pro.c | 326 ------- keyboards/keychron/q10_pro/q10_pro.h | 57 -- keyboards/keychron/q10_pro/readme.md | 23 - keyboards/keychron/q10_pro/rules.mk | 6 - .../via_json/q10_pro_ansi_encoder.json | 395 -------- .../q10_pro/via_json/q10_pro_iso_encoder.json | 399 -------- .../q12_max/ansi_encoder/ansi_encoder.c | 169 ---- .../keychron/q12_max/ansi_encoder/config.h | 57 -- .../keychron/q12_max/ansi_encoder/info.json | 120 --- .../ansi_encoder/keymaps/default/keymap.c | 76 -- .../q12_max/ansi_encoder/keymaps/via/keymap.c | 76 -- .../q12_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/q12_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/q12_max/board.h | 226 ----- keyboards/keychron/q12_max/config.h | 82 -- .../keychron_q12_max_ansi_encoder_via.bin | Bin 96328 -> 0 bytes keyboards/keychron/q12_max/halconf.h | 31 - keyboards/keychron/q12_max/info.json | 80 -- keyboards/keychron/q12_max/mcuconf.h | 37 - keyboards/keychron/q12_max/q12_max.c | 61 -- keyboards/keychron/q12_max/readme.md | 21 - keyboards/keychron/q12_max/rules.mk | 4 - .../q12_max/via_json/q12_max_ansi_knob.json | 337 ------- .../q13_max/ansi_encoder/ansi_encoder.c | 172 ---- .../keychron/q13_max/ansi_encoder/config.h | 56 -- .../keychron/q13_max/ansi_encoder/info.json | 124 --- .../ansi_encoder/keymaps/default/keymap.c | 77 -- .../ansi_encoder/keymaps/default/rules.mk | 0 .../q13_max/ansi_encoder/keymaps/via/keymap.c | 77 -- .../q13_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/q13_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/q13_max/board.h | 226 ----- keyboards/keychron/q13_max/config.h | 84 -- .../keychron_q13_max_ansi_encoder_via.bin | Bin 96488 -> 0 bytes keyboards/keychron/q13_max/halconf.h | 30 - keyboards/keychron/q13_max/info.json | 80 -- keyboards/keychron/q13_max/mcuconf.h | 37 - keyboards/keychron/q13_max/q13_max.c | 61 -- keyboards/keychron/q13_max/readme.md | 21 - keyboards/keychron/q13_max/rules.mk | 4 - .../via_json/q13_max_ansi_encoder.json | 431 --------- .../q13_pro/ansi_encoder/ansi_encoder.c | 140 --- .../keychron/q13_pro/ansi_encoder/config.h | 57 -- .../keychron/q13_pro/ansi_encoder/info.json | 239 ----- .../ansi_encoder/keymaps/default/keymap.c | 68 -- .../ansi_encoder/keymaps/default/rules.mk | 1 - .../q13_pro/ansi_encoder/keymaps/via/keymap.c | 68 -- .../q13_pro/ansi_encoder/keymaps/via/rules.mk | 2 - .../keychron/q13_pro/ansi_encoder/rules.mk | 1 - keyboards/keychron/q13_pro/config.h | 85 -- keyboards/keychron/q13_pro/halconf.h | 29 - keyboards/keychron/q13_pro/info.json | 64 -- .../keychron/q13_pro/iso_encoder/config.h | 57 -- .../keychron/q13_pro/iso_encoder/info.json | 241 ----- .../q13_pro/iso_encoder/iso_encoder.c | 141 --- .../iso_encoder/keymaps/default/keymap.c | 68 -- .../iso_encoder/keymaps/default/rules.mk | 1 - .../q13_pro/iso_encoder/keymaps/via/keymap.c | 68 -- .../q13_pro/iso_encoder/keymaps/via/rules.mk | 2 - .../keychron/q13_pro/iso_encoder/rules.mk | 1 - keyboards/keychron/q13_pro/mcuconf.h | 36 - keyboards/keychron/q13_pro/q13_pro.c | 327 ------- keyboards/keychron/q13_pro/q13_pro.h | 57 -- keyboards/keychron/q13_pro/readme.md | 21 - keyboards/keychron/q13_pro/rules.mk | 6 - .../via_json/q13_pro_ansi_encoder.json | 432 --------- .../q13_pro/via_json/q13_pro_iso_encoder.json | 437 --------- .../q14_max/ansi_encoder/ansi_encoder.c | 171 ---- .../keychron/q14_max/ansi_encoder/config.h | 54 -- .../keychron/q14_max/ansi_encoder/info.json | 122 --- .../ansi_encoder/keymaps/default/keymap.c | 73 -- .../q14_max/ansi_encoder/keymaps/via/keymap.c | 73 -- .../q14_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/q14_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/q14_max/board.h | 226 ----- keyboards/keychron/q14_max/config.h | 82 -- .../keychron_q14_max_ansi_encoder_via.bin | Bin 96484 -> 0 bytes keyboards/keychron/q14_max/halconf.h | 31 - keyboards/keychron/q14_max/info.json | 81 -- keyboards/keychron/q14_max/mcuconf.h | 37 - keyboards/keychron/q14_max/q14_max.c | 61 -- keyboards/keychron/q14_max/readme.md | 21 - keyboards/keychron/q14_max/rules.mk | 4 - .../via_json/q14_max_ansi_encoder.json | 466 --------- .../q14_pro/ansi_encoder/ansi_encoder.c | 138 --- .../keychron/q14_pro/ansi_encoder/config.h | 53 -- .../keychron/q14_pro/ansi_encoder/info.json | 235 ----- .../ansi_encoder/keymaps/default/keymap.c | 66 -- .../ansi_encoder/keymaps/default/rules.mk | 1 - .../q14_pro/ansi_encoder/keymaps/via/keymap.c | 66 -- .../q14_pro/ansi_encoder/keymaps/via/rules.mk | 2 - .../keychron/q14_pro/ansi_encoder/rules.mk | 1 - keyboards/keychron/q14_pro/config.h | 90 -- keyboards/keychron/q14_pro/halconf.h | 29 - keyboards/keychron/q14_pro/info.json | 64 -- .../keychron/q14_pro/iso_encoder/config.h | 53 -- .../keychron/q14_pro/iso_encoder/info.json | 237 ----- .../q14_pro/iso_encoder/iso_encoder.c | 139 --- .../iso_encoder/keymaps/default/keymap.c | 66 -- .../iso_encoder/keymaps/default/rules.mk | 1 - .../q14_pro/iso_encoder/keymaps/via/keymap.c | 66 -- .../q14_pro/iso_encoder/keymaps/via/rules.mk | 2 - .../keychron/q14_pro/iso_encoder/rules.mk | 1 - keyboards/keychron/q14_pro/mcuconf.h | 36 - keyboards/keychron/q14_pro/q14_pro.c | 313 ------- keyboards/keychron/q14_pro/q14_pro.h | 55 -- keyboards/keychron/q14_pro/readme.md | 23 - keyboards/keychron/q14_pro/rules.mk | 6 - .../via_json/q14_pro_ansi_encoder.json | 461 --------- .../q14_pro/via_json/q14_pro_iso_encoder.json | 472 ---------- .../q15_max/ansi_encoder/ansi_encoder.c | 127 --- .../keychron/q15_max/ansi_encoder/config.h | 55 -- .../keychron/q15_max/ansi_encoder/info.json | 82 -- .../ansi_encoder/keymaps/default/keymap.c | 82 -- .../q15_max/ansi_encoder/keymaps/via/keymap.c | 82 -- .../q15_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/q15_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/q15_max/board.h | 226 ----- keyboards/keychron/q15_max/config.h | 79 -- .../keychron_q15_max_ansi_encoder_via.bin | Bin 95928 -> 0 bytes keyboards/keychron/q15_max/halconf.h | 31 - keyboards/keychron/q15_max/info.json | 87 -- keyboards/keychron/q15_max/mcuconf.h | 37 - keyboards/keychron/q15_max/q15_max.c | 61 -- keyboards/keychron/q15_max/readme.md | 21 - keyboards/keychron/q15_max/rules.mk | 4 - .../via_json/q15_max_ansi_encoder.json | 223 ----- .../q1_max/ansi_encoder/ansi_encoder.c | 148 --- .../keychron/q1_max/ansi_encoder/config.h | 54 -- .../keychron/q1_max/ansi_encoder/info.json | 99 -- .../ansi_encoder/keymaps/default/keymap.c | 77 -- .../q1_max/ansi_encoder/keymaps/via/keymap.c | 77 -- .../q1_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/q1_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/q1_max/board.h | 226 ----- keyboards/keychron/q1_max/config.h | 82 -- .../keychron_q1_max_ansi_encoder_via.bin | Bin 95880 -> 0 bytes .../keychron_q1_max_iso_encoder_via.bin | Bin 95880 -> 0 bytes .../keychron_q1_max_jis_encoder_via.bin | Bin 95908 -> 0 bytes keyboards/keychron/q1_max/halconf.h | 31 - keyboards/keychron/q1_max/info.json | 77 -- .../keychron/q1_max/iso_encoder/config.h | 54 -- .../keychron/q1_max/iso_encoder/info.json | 100 -- .../keychron/q1_max/iso_encoder/iso_encoder.c | 149 --- .../iso_encoder/keymaps/default/keymap.c | 77 -- .../q1_max/iso_encoder/keymaps/via/keymap.c | 77 -- .../q1_max/iso_encoder/keymaps/via/rules.mk | 1 - .../keychron/q1_max/iso_encoder/rules.mk | 1 - .../keychron/q1_max/jis_encoder/config.h | 55 -- .../keychron/q1_max/jis_encoder/info.json | 103 -- .../keychron/q1_max/jis_encoder/jis_encoder.c | 152 --- .../jis_encoder/keymaps/default/keymap.c | 76 -- .../q1_max/jis_encoder/keymaps/via/keymap.c | 76 -- .../q1_max/jis_encoder/keymaps/via/rules.mk | 1 - .../keychron/q1_max/jis_encoder/rules.mk | 1 - keyboards/keychron/q1_max/mcuconf.h | 37 - keyboards/keychron/q1_max/q1_max.c | 61 -- keyboards/keychron/q1_max/readme.md | 21 - keyboards/keychron/q1_max/rules.mk | 4 - .../q1_max/via_json/q1_max_ansi_encoder.json | 285 ------ .../q1_max/via_json/q1_max_iso_encoder.json | 287 ------ .../q1_max/via_json/q1_max_jis_encoder.json | 285 ------ .../keychron/q1_pro/ansi_knob/ansi_knob.c | 144 --- keyboards/keychron/q1_pro/ansi_knob/config.h | 56 -- keyboards/keychron/q1_pro/ansi_knob/info.json | 99 -- .../q1_pro/ansi_knob/keymaps/default/keymap.c | 68 -- .../q1_pro/ansi_knob/keymaps/via/keymap.c | 69 -- .../q1_pro/ansi_knob/keymaps/via/rules.mk | 1 - keyboards/keychron/q1_pro/ansi_knob/rules.mk | 1 - keyboards/keychron/q1_pro/config.h | 83 -- keyboards/keychron/q1_pro/halconf.h | 29 - keyboards/keychron/q1_pro/info.json | 64 -- keyboards/keychron/q1_pro/iso_knob/config.h | 57 -- keyboards/keychron/q1_pro/iso_knob/info.json | 100 -- keyboards/keychron/q1_pro/iso_knob/iso_knob.c | 146 --- .../q1_pro/iso_knob/keymaps/default/keymap.c | 68 -- .../q1_pro/iso_knob/keymaps/via/keymap.c | 68 -- .../q1_pro/iso_knob/keymaps/via/rules.mk | 1 - keyboards/keychron/q1_pro/iso_knob/rules.mk | 1 - .../keychron/q1_pro/jis_encoder/config.h | 58 -- .../keychron/q1_pro/jis_encoder/info.json | 198 ---- .../keychron/q1_pro/jis_encoder/jis_encoder.c | 120 --- .../jis_encoder/keymaps/default/keymap.c | 68 -- .../jis_encoder/keymaps/default/rules.mk | 1 - .../q1_pro/jis_encoder/keymaps/via/keymap.c | 68 -- .../q1_pro/jis_encoder/keymaps/via/rules.mk | 2 - .../keychron/q1_pro/jis_encoder/rules.mk | 1 - keyboards/keychron/q1_pro/matrix.c | 176 ---- keyboards/keychron/q1_pro/mcuconf.h | 36 - keyboards/keychron/q1_pro/q1_pro.c | 311 ------ keyboards/keychron/q1_pro/q1_pro.h | 55 -- keyboards/keychron/q1_pro/readme.md | 21 - keyboards/keychron/q1_pro/rules.mk | 6 - .../q1_pro/via_json/q1_pro_ansi_knob.json | 282 ------ .../q1_pro/via_json/q1_pro_iso_knob.json | 292 ------ .../q2_max/ansi_encoder/ansi_encoder.c | 129 --- .../keychron/q2_max/ansi_encoder/config.h | 53 -- .../keychron/q2_max/ansi_encoder/info.json | 83 -- .../ansi_encoder/keymaps/default/keymap.c | 82 -- .../q2_max/ansi_encoder/keymaps/via/keymap.c | 82 -- .../q2_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/q2_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/q2_max/board.h | 226 ----- keyboards/keychron/q2_max/config.h | 80 -- .../keychron_q2_max_ansi_encoder_via.bin | Bin 95784 -> 0 bytes .../keychron_q2_max_iso_encoder_via.bin | Bin 95792 -> 0 bytes keyboards/keychron/q2_max/halconf.h | 31 - keyboards/keychron/q2_max/info.json | 80 -- .../keychron/q2_max/iso_encoder/config.h | 53 -- .../keychron/q2_max/iso_encoder/info.json | 84 -- .../keychron/q2_max/iso_encoder/iso_encoder.c | 130 --- .../iso_encoder/keymaps/default/keymap.c | 82 -- .../q2_max/iso_encoder/keymaps/via/keymap.c | 82 -- .../q2_max/iso_encoder/keymaps/via/rules.mk | 1 - .../keychron/q2_max/iso_encoder/rules.mk | 1 - keyboards/keychron/q2_max/mcuconf.h | 37 - keyboards/keychron/q2_max/q2_max.c | 61 -- keyboards/keychron/q2_max/readme.md | 21 - keyboards/keychron/q2_max/rules.mk | 4 - .../q2_max/via_json/q2_ansi_encoder.json | 250 ----- .../q2_pro/ansi_encoder/ansi_encoder.c | 98 -- .../keychron/q2_pro/ansi_encoder/config.h | 55 -- .../keychron/q2_pro/ansi_encoder/info.json | 157 ---- .../ansi_encoder/keymaps/default/keymap.c | 73 -- .../ansi_encoder/keymaps/default/rules.mk | 1 - .../q2_pro/ansi_encoder/keymaps/via/keymap.c | 74 -- .../q2_pro/ansi_encoder/keymaps/via/rules.mk | 2 - .../keychron/q2_pro/ansi_encoder/rules.mk | 1 - keyboards/keychron/q2_pro/config.h | 86 -- keyboards/keychron/q2_pro/halconf.h | 29 - keyboards/keychron/q2_pro/info.json | 66 -- .../keychron/q2_pro/iso_encoder/config.h | 55 -- .../keychron/q2_pro/iso_encoder/info.json | 160 ---- .../keychron/q2_pro/iso_encoder/iso_encoder.c | 99 -- .../iso_encoder/keymaps/default/keymap.c | 73 -- .../iso_encoder/keymaps/default/rules.mk | 1 - .../q2_pro/iso_encoder/keymaps/via/keymap.c | 73 -- .../q2_pro/iso_encoder/keymaps/via/rules.mk | 2 - .../keychron/q2_pro/iso_encoder/rules.mk | 1 - keyboards/keychron/q2_pro/matrix.c | 213 ----- keyboards/keychron/q2_pro/mcuconf.h | 41 - keyboards/keychron/q2_pro/q2_pro.c | 311 ------ keyboards/keychron/q2_pro/q2_pro.h | 53 -- keyboards/keychron/q2_pro/readme.md | 23 - keyboards/keychron/q2_pro/rules.mk | 6 - .../q2_pro/via_json/q2_pro_ansi_encoder.json | 250 ----- .../q2_pro/via_json/q2_pro_iso_encoder.json | 254 ----- .../q3_max/ansi_encoder/ansi_encoder.c | 154 --- .../keychron/q3_max/ansi_encoder/config.h | 51 - .../keychron/q3_max/ansi_encoder/info.json | 105 --- .../ansi_encoder/keymaps/default/keymap.c | 77 -- .../q3_max/ansi_encoder/keymaps/via/keymap.c | 77 -- .../q3_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/q3_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/q3_max/board.h | 226 ----- keyboards/keychron/q3_max/config.h | 84 -- .../keychron_q3_max_ansi_encoder_via.bin | Bin 96040 -> 0 bytes .../keychron_q3_max_iso_encoder_via.bin | Bin 96048 -> 0 bytes keyboards/keychron/q3_max/halconf.h | 31 - keyboards/keychron/q3_max/info.json | 77 -- .../keychron/q3_max/iso_encoder/config.h | 51 - .../keychron/q3_max/iso_encoder/info.json | 107 --- .../keychron/q3_max/iso_encoder/iso_encoder.c | 155 --- .../iso_encoder/keymaps/default/keymap.c | 77 -- .../q3_max/iso_encoder/keymaps/via/keymap.c | 77 -- .../q3_max/iso_encoder/keymaps/via/rules.mk | 1 - .../keychron/q3_max/iso_encoder/rules.mk | 1 - keyboards/keychron/q3_max/mcuconf.h | 37 - keyboards/keychron/q3_max/q3_max.c | 83 -- keyboards/keychron/q3_max/readme.md | 21 - keyboards/keychron/q3_max/rules.mk | 4 - .../q3_max/via_json/q3_max_ansi_encoder.json | 297 ------ .../q3_max/via_json/q3_max_iso_encoder.json | 300 ------ .../q3_pro/ansi_encoder/ansi_encoder.c | 121 --- .../keychron/q3_pro/ansi_encoder/config.h | 52 -- .../keychron/q3_pro/ansi_encoder/info.json | 212 ----- .../ansi_encoder/keymaps/default/keymap.c | 68 -- .../ansi_encoder/keymaps/default/rules.mk | 1 - .../q3_pro/ansi_encoder/keymaps/via/keymap.c | 68 -- .../q3_pro/ansi_encoder/keymaps/via/rules.mk | 2 - .../keychron/q3_pro/ansi_encoder/rules.mk | 1 - .../q3_pro/ansi_encoder_se/ansi_encoder_se.c | 125 --- .../keychron/q3_pro/ansi_encoder_se/config.h | 54 -- .../keychron/q3_pro/ansi_encoder_se/info.json | 234 ----- .../ansi_encoder_se/keymaps/default/keymap.c | 68 -- .../ansi_encoder_se/keymaps/default/rules.mk | 1 - .../ansi_encoder_se/keymaps/via/keymap.c | 68 -- .../ansi_encoder_se/keymaps/via/rules.mk | 2 - .../keychron/q3_pro/ansi_encoder_se/rules.mk | 1 - keyboards/keychron/q3_pro/config.h | 90 -- keyboards/keychron/q3_pro/halconf.h | 29 - keyboards/keychron/q3_pro/info.json | 47 - .../keychron/q3_pro/iso_encoder/config.h | 68 -- .../keychron/q3_pro/iso_encoder/info.json | 214 ----- .../keychron/q3_pro/iso_encoder/iso_encoder.c | 122 --- .../iso_encoder/keymaps/default/keymap.c | 68 -- .../iso_encoder/keymaps/default/rules.mk | 1 - .../q3_pro/iso_encoder/keymaps/via/keymap.c | 68 -- .../q3_pro/iso_encoder/keymaps/via/rules.mk | 2 - .../keychron/q3_pro/iso_encoder/rules.mk | 1 - .../keychron/q3_pro/iso_encoder_se/config.h | 58 -- .../keychron/q3_pro/iso_encoder_se/info.json | 231 ----- .../q3_pro/iso_encoder_se/iso_encoder_se.c | 126 --- .../iso_encoder_se/keymaps/default/keymap.c | 68 -- .../iso_encoder_se/keymaps/default/rules.mk | 1 - .../iso_encoder_se/keymaps/via/keymap.c | 68 -- .../iso_encoder_se/keymaps/via/rules.mk | 2 - .../keychron/q3_pro/iso_encoder_se/rules.mk | 1 - .../keychron/q3_pro/jis_encoder_se/config.h | 66 -- .../keychron/q3_pro/jis_encoder_se/info.json | 237 ----- .../q3_pro/jis_encoder_se/jis_encoder_se.c | 129 --- .../jis_encoder_se/keymaps/default/keymap.c | 68 -- .../jis_encoder_se/keymaps/default/rules.mk | 1 - .../jis_encoder_se/keymaps/via/keymap.c | 68 -- .../jis_encoder_se/keymaps/via/rules.mk | 2 - .../keychron/q3_pro/jis_encoder_se/rules.mk | 1 - keyboards/keychron/q3_pro/matrix.c | 293 ------ keyboards/keychron/q3_pro/mcuconf.h | 37 - keyboards/keychron/q3_pro/q3_pro.c | 322 ------- keyboards/keychron/q3_pro/q3_pro.h | 53 -- keyboards/keychron/q3_pro/readme.md | 25 - keyboards/keychron/q3_pro/rules.mk | 5 - .../via_json/q3_pro_ansi_encoder_v1.json | 332 ------- .../via_json/q3_pro_ansi_encoder_v2.json | 291 ------ .../via_json/q3_pro_iso_encoder_v1.json | 337 ------- keyboards/keychron/q4_pro/ansi/ansi.c | 94 -- keyboards/keychron/q4_pro/ansi/config.h | 43 - keyboards/keychron/q4_pro/ansi/info.json | 146 --- .../q4_pro/ansi/keymaps/default/keymap.c | 63 -- .../keychron/q4_pro/ansi/keymaps/via/keymap.c | 63 -- .../keychron/q4_pro/ansi/keymaps/via/rules.mk | 2 - keyboards/keychron/q4_pro/ansi/rules.mk | 1 - keyboards/keychron/q4_pro/config.h | 84 -- keyboards/keychron/q4_pro/halconf.h | 29 - keyboards/keychron/q4_pro/info.json | 55 -- keyboards/keychron/q4_pro/iso/config.h | 45 - keyboards/keychron/q4_pro/iso/info.json | 172 ---- keyboards/keychron/q4_pro/iso/iso.c | 95 -- .../q4_pro/iso/keymaps/default/keymap.c | 63 -- .../keychron/q4_pro/iso/keymaps/via/keymap.c | 63 -- .../keychron/q4_pro/iso/keymaps/via/rules.mk | 2 - keyboards/keychron/q4_pro/iso/rules.mk | 1 - keyboards/keychron/q4_pro/mcuconf.h | 41 - keyboards/keychron/q4_pro/q4_pro.c | 298 ------ keyboards/keychron/q4_pro/q4_pro.h | 53 -- keyboards/keychron/q4_pro/readme.md | 23 - keyboards/keychron/q4_pro/rules.mk | 6 - .../q4_pro/via_json/q4_pro_ansi_rgb.json | 225 ----- .../q4_pro/via_json/q4_pro_iso_rgb.json | 229 ----- .../q5_max/ansi_encoder/ansi_encoder.c | 168 ---- .../keychron/q5_max/ansi_encoder/config.h | 46 - .../keychron/q5_max/ansi_encoder/info.json | 119 --- .../ansi_encoder/keymaps/default/keymap.c | 77 -- .../q5_max/ansi_encoder/keymaps/via/keymap.c | 77 -- .../q5_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/q5_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/q5_max/board.h | 226 ----- keyboards/keychron/q5_max/config.h | 86 -- .../keychron_q5_max_ansi_encoder_via.bin | Bin 96316 -> 0 bytes keyboards/keychron/q5_max/halconf.h | 31 - keyboards/keychron/q5_max/info.json | 77 -- .../keychron/q5_max/iso_encoder/config.h | 46 - .../keychron/q5_max/iso_encoder/info.json | 120 --- .../keychron/q5_max/iso_encoder/iso_encoder.c | 169 ---- .../iso_encoder/keymaps/default/keymap.c | 77 -- .../q5_max/iso_encoder/keymaps/via/keymap.c | 77 -- .../q5_max/iso_encoder/keymaps/via/rules.mk | 1 - .../keychron/q5_max/iso_encoder/rules.mk | 1 - keyboards/keychron/q5_max/mcuconf.h | 37 - keyboards/keychron/q5_max/q5_max.c | 62 -- keyboards/keychron/q5_max/readme.md | 23 - keyboards/keychron/q5_max/rules.mk | 4 - .../q5_max/via_json/q5_max_ansi_encoder.json | 339 ------- .../q5_max/via_json/q5_max_iso_encoder.json | 339 ------- .../q5_pro/ansi_encoder/ansi_encoder.c | 135 --- .../keychron/q5_pro/ansi_encoder/config.h | 50 - .../keychron/q5_pro/ansi_encoder/info.json | 230 ----- .../ansi_encoder/keymaps/default/keymap.c | 65 -- .../ansi_encoder/keymaps/default/rules.mk | 1 - .../q5_pro/ansi_encoder/keymaps/via/keymap.c | 65 -- .../q5_pro/ansi_encoder/keymaps/via/rules.mk | 2 - .../keychron/q5_pro/ansi_encoder/rules.mk | 1 - keyboards/keychron/q5_pro/config.h | 90 -- keyboards/keychron/q5_pro/halconf.h | 29 - keyboards/keychron/q5_pro/info.json | 61 -- .../keychron/q5_pro/iso_encoder/config.h | 50 - .../keychron/q5_pro/iso_encoder/info.json | 232 ----- .../keychron/q5_pro/iso_encoder/iso_encoder.c | 137 --- .../iso_encoder/keymaps/default/keymap.c | 65 -- .../iso_encoder/keymaps/default/rules.mk | 1 - .../q5_pro/iso_encoder/keymaps/via/keymap.c | 65 -- .../q5_pro/iso_encoder/keymaps/via/rules.mk | 2 - .../keychron/q5_pro/iso_encoder/rules.mk | 1 - keyboards/keychron/q5_pro/mcuconf.h | 36 - keyboards/keychron/q5_pro/q5_pro.c | 313 ------- keyboards/keychron/q5_pro/q5_pro.h | 55 -- keyboards/keychron/q5_pro/readme.md | 23 - keyboards/keychron/q5_pro/rules.mk | 6 - .../q5_pro/via_json/q5_pro_ansi_encoder.json | 335 ------- .../q5_pro/via_json/q5_pro_iso_encoder.json | 340 ------- keyboards/keychron/q60_max/ansi/ansi.c | 124 --- keyboards/keychron/q60_max/ansi/config.h | 61 -- keyboards/keychron/q60_max/ansi/info.json | 76 -- .../q60_max/ansi/keymaps/default/keymap.c | 79 -- .../q60_max/ansi/keymaps/via/keymap.c | 79 -- .../q60_max/ansi/keymaps/via/rules.mk | 1 - keyboards/keychron/q60_max/ansi/rules.mk | 1 - keyboards/keychron/q60_max/board.h | 226 ----- keyboards/keychron/q60_max/config.h | 76 -- .../firmware/keychron_q60_max_ansi_via.bin | Bin 94752 -> 0 bytes keyboards/keychron/q60_max/halconf.h | 31 - keyboards/keychron/q60_max/info.json | 70 -- keyboards/keychron/q60_max/mcuconf.h | 37 - keyboards/keychron/q60_max/q60_max.c | 61 -- keyboards/keychron/q60_max/readme.md | 21 - keyboards/keychron/q60_max/rules.mk | 4 - .../q60_max/via_json/q60_max_ansi.json | 213 ----- .../q65_max/ansi_encoder/ansi_encoder.c | 131 --- .../keychron/q65_max/ansi_encoder/config.h | 56 -- .../keychron/q65_max/ansi_encoder/info.json | 89 -- .../ansi_encoder/keymaps/default/keymap.c | 81 -- .../q65_max/ansi_encoder/keymaps/via/keymap.c | 81 -- .../q65_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/q65_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/q65_max/board.h | 226 ----- keyboards/keychron/q65_max/config.h | 82 -- .../keychron_q65_max_ansi_encoder_via.bin | Bin 95832 -> 0 bytes keyboards/keychron/q65_max/halconf.h | 31 - keyboards/keychron/q65_max/info.json | 80 -- keyboards/keychron/q65_max/mcuconf.h | 37 - keyboards/keychron/q65_max/q65_max.c | 61 -- keyboards/keychron/q65_max/readme.md | 21 - keyboards/keychron/q65_max/rules.mk | 4 - .../via_json/q65_max_ansi_encoder.json | 275 ------ .../q6_max/ansi_encoder/ansi_encoder.c | 175 ---- .../keychron/q6_max/ansi_encoder/config.h | 46 - .../keychron/q6_max/ansi_encoder/info.json | 126 --- .../ansi_encoder/keymaps/default/keymap.c | 74 -- .../q6_max/ansi_encoder/keymaps/via/keymap.c | 74 -- .../q6_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/q6_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/q6_max/board.h | 226 ----- keyboards/keychron/q6_max/config.h | 91 -- .../keychron_q6_max_ansi_encoder_via.bin | Bin 96720 -> 0 bytes .../keychron_q6_max_iso_encoder_via.bin | Bin 96728 -> 0 bytes keyboards/keychron/q6_max/halconf.h | 31 - keyboards/keychron/q6_max/info.json | 77 -- .../keychron/q6_max/iso_encoder/config.h | 47 - .../keychron/q6_max/iso_encoder/info.json | 128 --- .../keychron/q6_max/iso_encoder/iso_encoder.c | 177 ---- .../iso_encoder/keymaps/default/keymap.c | 76 -- .../q6_max/iso_encoder/keymaps/via/keymap.c | 76 -- .../q6_max/iso_encoder/keymaps/via/rules.mk | 1 - .../keychron/q6_max/iso_encoder/rules.mk | 1 - .../keychron/q6_max/jis_encoder/config.h | 47 - .../keychron/q6_max/jis_encoder/info.json | 130 --- .../keychron/q6_max/jis_encoder/jis_encoder.c | 181 ---- .../jis_encoder/keymaps/default/keymap.c | 70 -- .../q6_max/jis_encoder/keymaps/via/keymap.c | 80 -- .../q6_max/jis_encoder/keymaps/via/rules.mk | 1 - .../keychron/q6_max/jis_encoder/rules.mk | 1 - keyboards/keychron/q6_max/mcuconf.h | 37 - keyboards/keychron/q6_max/q6_max.c | 84 -- keyboards/keychron/q6_max/readme.md | 21 - keyboards/keychron/q6_max/rules.mk | 4 - .../q6_max/via_json/q6_max_ansi_encoder.json | 349 ------- .../q6_pro/ansi_encoder/ansi_encoder.c | 142 --- .../keychron/q6_pro/ansi_encoder/config.h | 49 - .../keychron/q6_pro/ansi_encoder/info.json | 243 ----- .../ansi_encoder/keymaps/default/keymap.c | 65 -- .../ansi_encoder/keymaps/default/rules.mk | 1 - .../q6_pro/ansi_encoder/keymaps/via/keymap.c | 65 -- .../q6_pro/ansi_encoder/keymaps/via/rules.mk | 2 - .../keychron/q6_pro/ansi_encoder/rules.mk | 1 - keyboards/keychron/q6_pro/config.h | 93 -- keyboards/keychron/q6_pro/halconf.h | 29 - keyboards/keychron/q6_pro/info.json | 61 -- .../keychron/q6_pro/iso_encoder/config.h | 49 - .../keychron/q6_pro/iso_encoder/info.json | 245 ----- .../keychron/q6_pro/iso_encoder/iso_encoder.c | 143 --- .../iso_encoder/keymaps/default/keymap.c | 65 -- .../iso_encoder/keymaps/default/rules.mk | 1 - .../q6_pro/iso_encoder/keymaps/via/keymap.c | 65 -- .../q6_pro/iso_encoder/keymaps/via/rules.mk | 2 - .../keychron/q6_pro/iso_encoder/rules.mk | 1 - keyboards/keychron/q6_pro/mcuconf.h | 36 - keyboards/keychron/q6_pro/q6_pro.c | 334 ------- keyboards/keychron/q6_pro/q6_pro.h | 55 -- keyboards/keychron/q6_pro/readme.md | 23 - keyboards/keychron/q6_pro/rules.mk | 6 - .../q6_pro/via_json/q6_pro_ansi_encoder.json | 346 ------- .../q6_pro/via_json/q6_pro_iso_encoder.json | 352 ------- .../q8_max/ansi_encoder/ansi_encoder.c | 131 --- .../keychron/q8_max/ansi_encoder/config.h | 56 -- .../keychron/q8_max/ansi_encoder/info.json | 85 -- .../ansi_encoder/keymaps/default/keymap.c | 82 -- .../q8_max/ansi_encoder/keymaps/via/keymap.c | 82 -- .../q8_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/q8_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/q8_max/board.h | 226 ----- keyboards/keychron/q8_max/config.h | 81 -- .../keychron_q8_max_ansi_encoder_via.bin | Bin 95832 -> 0 bytes keyboards/keychron/q8_max/halconf.h | 30 - keyboards/keychron/q8_max/info.json | 80 -- keyboards/keychron/q8_max/mcuconf.h | 37 - keyboards/keychron/q8_max/q8_max.c | 61 -- keyboards/keychron/q8_max/readme.md | 21 - keyboards/keychron/q8_max/rules.mk | 4 - .../q8_max/via_json/q8_max_ansi_encoder.json | 351 ------- .../q8_pro/ansi_encoder/ansi_encoder.c | 101 -- .../keychron/q8_pro/ansi_encoder/config.h | 50 - .../keychron/q8_pro/ansi_encoder/info.json | 161 ---- .../ansi_encoder/keymaps/default/keymap.c | 73 -- .../ansi_encoder/keymaps/default/rules.mk | 1 - .../q8_pro/ansi_encoder/keymaps/via/keymap.c | 73 -- .../q8_pro/ansi_encoder/keymaps/via/rules.mk | 2 - .../keychron/q8_pro/ansi_encoder/rules.mk | 1 - keyboards/keychron/q8_pro/config.h | 91 -- keyboards/keychron/q8_pro/halconf.h | 32 - keyboards/keychron/q8_pro/info.json | 64 -- .../keychron/q8_pro/iso_encoder/config.h | 50 - .../keychron/q8_pro/iso_encoder/info.json | 163 ---- .../keychron/q8_pro/iso_encoder/iso_encoder.c | 102 -- .../iso_encoder/keymaps/default/keymap.c | 73 -- .../iso_encoder/keymaps/default/rules.mk | 1 - .../q8_pro/iso_encoder/keymaps/via/keymap.c | 73 -- .../q8_pro/iso_encoder/keymaps/via/rules.mk | 2 - .../keychron/q8_pro/iso_encoder/rules.mk | 1 - keyboards/keychron/q8_pro/mcuconf.h | 36 - keyboards/keychron/q8_pro/q8_pro.c | 314 ------- keyboards/keychron/q8_pro/q8_pro.h | 55 -- keyboards/keychron/q8_pro/readme.md | 23 - keyboards/keychron/q8_pro/rules.mk | 6 - .../q8_pro/via_json/q8_pro_ansi_encoder.json | 353 ------- .../q8_pro/via_json/q8_pro_iso_encoder.json | 364 -------- .../v10_max/ansi_encoder/ansi_encoder.c | 155 --- .../keychron/v10_max/ansi_encoder/config.h | 56 -- .../keychron/v10_max/ansi_encoder/info.json | 106 --- .../ansi_encoder/keymaps/default/keymap.c | 76 -- .../v10_max/ansi_encoder/keymaps/via/keymap.c | 76 -- .../v10_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/v10_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/v10_max/board.h | 226 ----- keyboards/keychron/v10_max/config.h | 86 -- .../keychron_v10_max_ansi_encoder_via.bin | Bin 96448 -> 0 bytes keyboards/keychron/v10_max/halconf.h | 31 - keyboards/keychron/v10_max/info.json | 80 -- keyboards/keychron/v10_max/mcuconf.h | 37 - keyboards/keychron/v10_max/readme.md | 21 - keyboards/keychron/v10_max/rules.mk | 4 - keyboards/keychron/v10_max/v10_max.c | 84 -- .../via_json/v10_max_ansi_encoder.json | 400 -------- .../v1_max/ansi_encoder/ansi_encoder.c | 149 --- .../keychron/v1_max/ansi_encoder/config.h | 56 -- .../keychron/v1_max/ansi_encoder/info.json | 111 --- .../ansi_encoder/keymaps/default/keymap.c | 76 -- .../v1_max/ansi_encoder/keymaps/via/keymap.c | 76 -- .../v1_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/v1_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/v1_max/board.h | 226 ----- keyboards/keychron/v1_max/config.h | 82 -- .../keychron_v1_max_ansi_encoder_via.bin | Bin 96200 -> 0 bytes .../keychron_v1_max_iso_encoder_via.bin | Bin 96204 -> 0 bytes keyboards/keychron/v1_max/halconf.h | 31 - keyboards/keychron/v1_max/info.json | 67 -- .../keychron/v1_max/iso_encoder/config.h | 56 -- .../keychron/v1_max/iso_encoder/info.json | 112 --- .../keychron/v1_max/iso_encoder/iso_encoder.c | 149 --- .../iso_encoder/keymaps/default/keymap.c | 76 -- .../v1_max/iso_encoder/keymaps/via/keymap.c | 76 -- .../v1_max/iso_encoder/keymaps/via/rules.mk | 1 - .../keychron/v1_max/iso_encoder/rules.mk | 1 - .../keychron/v1_max/jis_encoder/config.h | 56 -- .../keychron/v1_max/jis_encoder/info.json | 115 --- .../keychron/v1_max/jis_encoder/jis_encoder.c | 152 --- .../jis_encoder/keymaps/default/keymap.c | 77 -- .../v1_max/jis_encoder/keymaps/via/keymap.c | 77 -- .../v1_max/jis_encoder/keymaps/via/rules.mk | 1 - .../keychron/v1_max/jis_encoder/rules.mk | 1 - keyboards/keychron/v1_max/mcuconf.h | 37 - keyboards/keychron/v1_max/readme.md | 23 - keyboards/keychron/v1_max/rules.mk | 4 - keyboards/keychron/v1_max/v1_max.c | 85 -- .../v1_max/via_json/v1_max_ansi_encoder.json | 286 ------ .../v1_max/via_json/v1_max_iso_encoder.json | 291 ------ .../v1_max/via_json/v1_max_jis_encoder.json | 281 ------ .../v2_max/ansi_encoder/ansi_encoder.c | 129 --- .../keychron/v2_max/ansi_encoder/config.h | 65 -- .../keychron/v2_max/ansi_encoder/info.json | 83 -- .../ansi_encoder/keymaps/default/keymap.c | 82 -- .../v2_max/ansi_encoder/keymaps/via/keymap.c | 82 -- .../v2_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/v2_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/v2_max/board.h | 226 ----- keyboards/keychron/v2_max/config.h | 75 -- .../keychron_v2_max_ansi_encoder_via.bin | Bin 96092 -> 0 bytes .../keychron_v2_max_iso_encoder_via.bin | Bin 96104 -> 0 bytes keyboards/keychron/v2_max/halconf.h | 31 - keyboards/keychron/v2_max/info.json | 80 -- .../keychron/v2_max/iso_encoder/config.h | 65 -- .../keychron/v2_max/iso_encoder/info.json | 84 -- .../keychron/v2_max/iso_encoder/iso_encoder.c | 126 --- .../iso_encoder/keymaps/default/keymap.c | 82 -- .../v2_max/iso_encoder/keymaps/via/keymap.c | 82 -- .../v2_max/iso_encoder/keymaps/via/rules.mk | 1 - .../keychron/v2_max/iso_encoder/rules.mk | 1 - keyboards/keychron/v2_max/mcuconf.h | 37 - keyboards/keychron/v2_max/readme.md | 23 - keyboards/keychron/v2_max/rules.mk | 4 - keyboards/keychron/v2_max/v2_max.c | 84 -- .../v2_max/via_json/v2_max_ansi_encoder.json | 250 ----- .../v2_max/via_json/v2_max_iso_encoder.json | 253 ----- .../v3_max/ansi_encoder/ansi_encoder.c | 178 ---- .../keychron/v3_max/ansi_encoder/config.h | 53 -- .../keychron/v3_max/ansi_encoder/info.json | 121 --- .../ansi_encoder/keymaps/default/keymap.c | 76 -- .../v3_max/ansi_encoder/keymaps/via/keymap.c | 76 -- .../v3_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/v3_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/v3_max/board.h | 226 ----- keyboards/keychron/v3_max/config.h | 79 -- .../keychron_v3_max_ansi_encoder_via.bin | Bin 96048 -> 0 bytes .../keychron_v3_max_iso_encoder_via.bin | Bin 96056 -> 0 bytes keyboards/keychron/v3_max/halconf.h | 31 - keyboards/keychron/v3_max/info.json | 63 -- .../keychron/v3_max/iso_encoder/config.h | 53 -- .../keychron/v3_max/iso_encoder/info.json | 122 --- .../keychron/v3_max/iso_encoder/iso_encoder.c | 180 ---- .../iso_encoder/keymaps/default/keymap.c | 76 -- .../v3_max/iso_encoder/keymaps/via/keymap.c | 76 -- .../v3_max/iso_encoder/keymaps/via/rules.mk | 1 - .../keychron/v3_max/iso_encoder/rules.mk | 1 - .../keychron/v3_max/jis_encoder/config.h | 53 -- .../keychron/v3_max/jis_encoder/info.json | 126 --- .../keychron/v3_max/jis_encoder/jis_encoder.c | 183 ---- .../jis_encoder/keymaps/default/keymap.c | 76 -- .../v3_max/jis_encoder/keymaps/via/keymap.c | 76 -- .../v3_max/jis_encoder/keymaps/via/rules.mk | 1 - .../keychron/v3_max/jis_encoder/rules.mk | 1 - keyboards/keychron/v3_max/mcuconf.h | 37 - keyboards/keychron/v3_max/readme.md | 23 - keyboards/keychron/v3_max/rules.mk | 7 - keyboards/keychron/v3_max/v3_max.c | 50 - .../v3_max/via_json/v3_max_ansi_encoder.json | 297 ------ .../v3_max/via_json/v3_max_iso_encoder.json | 300 ------ .../v3_max/via_json/v3_max_jis_encoder.json | 296 ------ keyboards/keychron/v4_max/ansi/ansi.c | 124 --- keyboards/keychron/v4_max/ansi/config.h | 65 -- keyboards/keychron/v4_max/ansi/info.json | 77 -- .../v4_max/ansi/keymaps/default/keymap.c | 72 -- .../keychron/v4_max/ansi/keymaps/via/keymap.c | 72 -- .../keychron/v4_max/ansi/keymaps/via/rules.mk | 1 - keyboards/keychron/v4_max/ansi/rules.mk | 1 - keyboards/keychron/v4_max/board.h | 226 ----- keyboards/keychron/v4_max/config.h | 78 -- .../firmware/keychron_v4_max_ansi_via.bin | Bin 94924 -> 0 bytes keyboards/keychron/v4_max/halconf.h | 31 - keyboards/keychron/v4_max/info.json | 70 -- keyboards/keychron/v4_max/mcuconf.h | 37 - keyboards/keychron/v4_max/readme.md | 23 - keyboards/keychron/v4_max/rules.mk | 4 - keyboards/keychron/v4_max/v4_max.c | 78 -- .../keychron/v4_max/via_json/v4_max_ansi.json | 229 ----- .../v5_max/ansi_encoder/ansi_encoder.c | 164 ---- .../keychron/v5_max/ansi_encoder/config.h | 65 -- .../keychron/v5_max/ansi_encoder/info.json | 127 --- .../ansi_encoder/keymaps/default/keymap.c | 74 -- .../v5_max/ansi_encoder/keymaps/via/keymap.c | 73 -- .../v5_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/v5_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/v5_max/board.h | 226 ----- keyboards/keychron/v5_max/config.h | 77 -- .../keychron_v5_max_ansi_encoder_via.bin | Bin 96596 -> 0 bytes .../keychron_v5_max_iso_encoder_via.bin | Bin 96596 -> 0 bytes keyboards/keychron/v5_max/halconf.h | 31 - keyboards/keychron/v5_max/info.json | 67 -- .../keychron/v5_max/iso_encoder/config.h | 65 -- .../keychron/v5_max/iso_encoder/info.json | 128 --- .../keychron/v5_max/iso_encoder/iso_encoder.c | 165 ---- .../iso_encoder/keymaps/default/keymap.c | 76 -- .../v5_max/iso_encoder/keymaps/via/keymap.c | 76 -- .../v5_max/iso_encoder/keymaps/via/rules.mk | 1 - .../keychron/v5_max/iso_encoder/rules.mk | 1 - keyboards/keychron/v5_max/mcuconf.h | 37 - keyboards/keychron/v5_max/readme.md | 21 - keyboards/keychron/v5_max/rules.mk | 4 - keyboards/keychron/v5_max/v5_max.c | 84 -- .../v5_max/via_json/v5_ansi_encoder.json | 321 ------- .../v5_max/via_json/v5_iso_encoder.json | 323 ------- .../v6_max/ansi_encoder/ansi_encoder.c | 175 ---- .../keychron/v6_max/ansi_encoder/config.h | 54 -- .../keychron/v6_max/ansi_encoder/info.json | 126 --- .../ansi_encoder/keymaps/default/keymap.c | 73 -- .../v6_max/ansi_encoder/keymaps/via/keymap.c | 73 -- .../v6_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/v6_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/v6_max/board.h | 226 ----- keyboards/keychron/v6_max/config.h | 86 -- .../keychron_v6_max_ansi_encoder_via.bin | Bin 96796 -> 0 bytes .../keychron_v6_max_iso_encoder_via.bin | Bin 96804 -> 0 bytes keyboards/keychron/v6_max/halconf.h | 31 - keyboards/keychron/v6_max/info.json | 77 -- .../keychron/v6_max/iso_encoder/config.h | 54 -- .../keychron/v6_max/iso_encoder/info.json | 127 --- .../keychron/v6_max/iso_encoder/iso_encoder.c | 176 ---- .../iso_encoder/keymaps/default/keymap.c | 73 -- .../v6_max/iso_encoder/keymaps/via/keymap.c | 73 -- .../v6_max/iso_encoder/keymaps/via/rules.mk | 1 - .../keychron/v6_max/iso_encoder/rules.mk | 1 - keyboards/keychron/v6_max/mcuconf.h | 37 - keyboards/keychron/v6_max/readme.md | 21 - keyboards/keychron/v6_max/rules.mk | 4 - keyboards/keychron/v6_max/v6_max.c | 84 -- .../v6_max/via_json/v6_max_ansi_encoder.json | 349 ------- .../v8_max/ansi_encoder/ansi_encoder.c | 131 --- .../keychron/v8_max/ansi_encoder/config.h | 68 -- .../keychron/v8_max/ansi_encoder/info.json | 86 -- .../ansi_encoder/keymaps/default/keymap.c | 81 -- .../v8_max/ansi_encoder/keymaps/via/keymap.c | 81 -- .../v8_max/ansi_encoder/keymaps/via/rules.mk | 1 - .../keychron/v8_max/ansi_encoder/rules.mk | 1 - keyboards/keychron/v8_max/board.h | 226 ----- keyboards/keychron/v8_max/config.h | 76 -- .../keychron_v8_max_ansi_encoder_via.bin | Bin 96252 -> 0 bytes keyboards/keychron/v8_max/halconf.h | 31 - keyboards/keychron/v8_max/info.json | 80 -- keyboards/keychron/v8_max/mcuconf.h | 37 - keyboards/keychron/v8_max/readme.md | 21 - keyboards/keychron/v8_max/rules.mk | 4 - keyboards/keychron/v8_max/v8_max.c | 83 -- .../v8_max/via_json/v8_max_ansi_encoder.json | 351 ------- keyboards/lemokey/common/factory_test.c | 427 --------- keyboards/lemokey/common/factory_test.h | 33 - keyboards/lemokey/common/lemokey_common.c | 158 ---- keyboards/lemokey/common/lemokey_common.h | 65 -- keyboards/lemokey/common/lemokey_common.mk | 11 - keyboards/lemokey/common/lemokey_raw_hid.c | 120 --- keyboards/lemokey/common/lemokey_task.c | 116 --- keyboards/lemokey/common/lemokey_task.h | 24 - .../common/wireless/bat_level_animation.c | 208 ----- .../common/wireless/bat_level_animation.h | 24 - keyboards/lemokey/common/wireless/battery.c | 229 ----- keyboards/lemokey/common/wireless/battery.h | 62 -- keyboards/lemokey/common/wireless/indicator.c | 773 --------------- keyboards/lemokey/common/wireless/indicator.h | 113 --- keyboards/lemokey/common/wireless/lkbt51.c | 883 ------------------ keyboards/lemokey/common/wireless/lkbt51.h | 136 --- keyboards/lemokey/common/wireless/lpm.c | 316 ------- keyboards/lemokey/common/wireless/lpm.h | 49 - .../lemokey/common/wireless/lpm_stm32f401.c | 136 --- .../lemokey/common/wireless/lpm_stm32f401.h | 33 - .../lemokey/common/wireless/lpm_wb32f3g71.c | 135 --- .../lemokey/common/wireless/report_buffer.c | 143 --- .../lemokey/common/wireless/report_buffer.h | 61 -- keyboards/lemokey/common/wireless/rtc_timer.c | 41 - keyboards/lemokey/common/wireless/rtc_timer.h | 35 - keyboards/lemokey/common/wireless/transport.c | 283 ------ keyboards/lemokey/common/wireless/transport.h | 42 - keyboards/lemokey/common/wireless/wireless.c | 553 ----------- keyboards/lemokey/common/wireless/wireless.h | 101 -- keyboards/lemokey/common/wireless/wireless.mk | 28 - .../lemokey/common/wireless/wireless_common.c | 158 ---- .../lemokey/common/wireless/wireless_common.h | 24 - .../lemokey/common/wireless/wireless_config.h | 23 - .../common/wireless/wireless_event_type.h | 45 - .../lemokey/common/wireless/wireless_main.c | 37 - keyboards/lemokey/l1/ansi/ansi.c | 147 --- keyboards/lemokey/l1/ansi/config.h | 45 - keyboards/lemokey/l1/ansi/info.json | 103 -- .../lemokey/l1/ansi/keymaps/default/keymap.c | 58 -- .../lemokey/l1/ansi/keymaps/via/keymap.c | 58 -- .../lemokey/l1/ansi/keymaps/via/rules.mk | 1 - keyboards/lemokey/l1/ansi/rules.mk | 1 - keyboards/lemokey/l1/board.h | 226 ----- keyboards/lemokey/l1/config.h | 87 -- keyboards/lemokey/l1/halconf.h | 30 - keyboards/lemokey/l1/info.json | 77 -- keyboards/lemokey/l1/l1.c | 55 -- keyboards/lemokey/l1/l1.h | 22 - keyboards/lemokey/l1/mcuconf.h | 40 - keyboards/lemokey/l1/post_rules.mk | 2 - keyboards/lemokey/l1/readme.md | 23 - keyboards/lemokey/l1/rules.mk | 3 - keyboards/lemokey/l1/via_json/l1_ansi.json | 323 ------- keyboards/lemokey/l3/ansi/ansi.c | 157 ---- keyboards/lemokey/l3/ansi/config.h | 47 - keyboards/lemokey/l3/ansi/info.json | 114 --- .../lemokey/l3/ansi/keymaps/default/keymap.c | 56 -- .../lemokey/l3/ansi/keymaps/via/keymap.c | 60 -- .../lemokey/l3/ansi/keymaps/via/rules.mk | 1 - keyboards/lemokey/l3/ansi/rules.mk | 1 - keyboards/lemokey/l3/board.h | 226 ----- keyboards/lemokey/l3/config.h | 93 -- keyboards/lemokey/l3/halconf.h | 30 - keyboards/lemokey/l3/info.json | 81 -- keyboards/lemokey/l3/iso/config.h | 47 - keyboards/lemokey/l3/iso/info.json | 115 --- keyboards/lemokey/l3/iso/iso.c | 154 --- .../lemokey/l3/iso/keymaps/default/keymap.c | 56 -- keyboards/lemokey/l3/iso/keymaps/via/keymap.c | 56 -- keyboards/lemokey/l3/iso/keymaps/via/rules.mk | 1 - keyboards/lemokey/l3/iso/rules.mk | 0 keyboards/lemokey/l3/l3.c | 95 -- keyboards/lemokey/l3/l3.h | 22 - keyboards/lemokey/l3/mcuconf.h | 40 - keyboards/lemokey/l3/post_rules.mk | 2 - keyboards/lemokey/l3/readme.md | 23 - keyboards/lemokey/l3/rules.mk | 3 - keyboards/lemokey/l3/via_json/l3_ansi.json | 341 ------- keyboards/lemokey/l3/via_json/l3_iso.json | 348 ------- .../p1_pro/ansi_encoder/ansi_encoder.c | 148 --- .../lemokey/p1_pro/ansi_encoder/config.h | 57 -- .../lemokey/p1_pro/ansi_encoder/info.json | 99 -- .../ansi_encoder/keymaps/default/keymap.c | 77 -- .../p1_pro/ansi_encoder/keymaps/via/keymap.c | 77 -- .../p1_pro/ansi_encoder/keymaps/via/rules.mk | 1 - .../lemokey/p1_pro/ansi_encoder/rules.mk | 1 - keyboards/lemokey/p1_pro/config.h | 110 --- keyboards/lemokey/p1_pro/halconf.h | 32 - keyboards/lemokey/p1_pro/info.json | 73 -- keyboards/lemokey/p1_pro/iso_encoder/config.h | 57 -- .../lemokey/p1_pro/iso_encoder/info.json | 100 -- .../lemokey/p1_pro/iso_encoder/iso_encoder.c | 149 --- .../iso_encoder/keymaps/default/keymap.c | 77 -- .../p1_pro/iso_encoder/keymaps/via/keymap.c | 77 -- .../p1_pro/iso_encoder/keymaps/via/rules.mk | 1 - keyboards/lemokey/p1_pro/iso_encoder/rules.mk | 1 - keyboards/lemokey/p1_pro/mcuconf.h | 27 - keyboards/lemokey/p1_pro/p1_pro.c | 81 -- keyboards/lemokey/p1_pro/post_rules.mk | 2 - keyboards/lemokey/p1_pro/readme.md | 21 - keyboards/lemokey/p1_pro/rules.mk | 4 - .../via_json/p1_pro_ansi_encoder_v1.0.json | 287 ------ .../via_json/p1_pro_iso_encoder_v1.0.json | 290 ------ 2327 files changed, 200195 deletions(-) delete mode 100644 keyboards/keychron/bluetooth/bat_level_animation.c delete mode 100644 keyboards/keychron/bluetooth/bat_level_animation.h delete mode 100644 keyboards/keychron/bluetooth/battery.c delete mode 100644 keyboards/keychron/bluetooth/battery.h delete mode 100644 keyboards/keychron/bluetooth/bluetooth.c delete mode 100644 keyboards/keychron/bluetooth/bluetooth.h delete mode 100644 keyboards/keychron/bluetooth/bluetooth.mk delete mode 100644 keyboards/keychron/bluetooth/bluetooth_config.h delete mode 100644 keyboards/keychron/bluetooth/bluetooth_event_type.h delete mode 100644 keyboards/keychron/bluetooth/bluetooth_main.c delete mode 100644 keyboards/keychron/bluetooth/ckbt51.c delete mode 100644 keyboards/keychron/bluetooth/ckbt51.h delete mode 100644 keyboards/keychron/bluetooth/factory_test.c delete mode 100644 keyboards/keychron/bluetooth/factory_test.h delete mode 100644 keyboards/keychron/bluetooth/indicator.c delete mode 100644 keyboards/keychron/bluetooth/indicator.h delete mode 100644 keyboards/keychron/bluetooth/lpm.c delete mode 100644 keyboards/keychron/bluetooth/lpm.h delete mode 100644 keyboards/keychron/bluetooth/lpm_stm32l432.c delete mode 100644 keyboards/keychron/bluetooth/lpm_stm32l432.h delete mode 100644 keyboards/keychron/bluetooth/report_buffer.c delete mode 100644 keyboards/keychron/bluetooth/report_buffer.h delete mode 100644 keyboards/keychron/bluetooth/rtc_timer.c delete mode 100644 keyboards/keychron/bluetooth/rtc_timer.h delete mode 100644 keyboards/keychron/bluetooth/transport.c delete mode 100644 keyboards/keychron/bluetooth/transport.h delete mode 100644 keyboards/keychron/common/common.mk delete mode 100644 keyboards/keychron/common/debounce/asym_eager_defer_pk.c delete mode 100644 keyboards/keychron/common/debounce/debounce.mk delete mode 100644 keyboards/keychron/common/debounce/eeconfig_debounce.h delete mode 100644 keyboards/keychron/common/debounce/keychron_debounce.c delete mode 100644 keyboards/keychron/common/debounce/keychron_debounce.h delete mode 100644 keyboards/keychron/common/debounce/none.c delete mode 100644 keyboards/keychron/common/debounce/none.h delete mode 100644 keyboards/keychron/common/debounce/sym_defer_g.c delete mode 100644 keyboards/keychron/common/debounce/sym_defer_pk.c delete mode 100644 keyboards/keychron/common/debounce/sym_defer_pr.c delete mode 100644 keyboards/keychron/common/debounce/sym_eager_pk.c delete mode 100644 keyboards/keychron/common/debounce/sym_eager_pr.c delete mode 100644 keyboards/keychron/common/dfu_info.c delete mode 100644 keyboards/keychron/common/eeconfig_kb.c delete mode 100644 keyboards/keychron/common/eeconfig_kb.h delete mode 100644 keyboards/keychron/common/factory_test.c delete mode 100644 keyboards/keychron/common/factory_test.h delete mode 100644 keyboards/keychron/common/keychron_common.c delete mode 100644 keyboards/keychron/common/keychron_common.h delete mode 100644 keyboards/keychron/common/keychron_common.mk delete mode 100644 keyboards/keychron/common/keychron_raw_hid.c delete mode 100644 keyboards/keychron/common/keychron_raw_hid.h delete mode 100644 keyboards/keychron/common/keychron_task.c delete mode 100644 keyboards/keychron/common/keychron_task.h delete mode 100644 keyboards/keychron/common/language/eeconfig_language.h delete mode 100644 keyboards/keychron/common/language/language.c delete mode 100644 keyboards/keychron/common/language/language.h delete mode 100644 keyboards/keychron/common/language/language.mk delete mode 100644 keyboards/keychron/common/matrix.c delete mode 100644 keyboards/keychron/common/rgb/eeconfig_custom_rgb.h delete mode 100644 keyboards/keychron/common/rgb/keychron_rgb.c delete mode 100644 keyboards/keychron/common/rgb/keychron_rgb_type.h delete mode 100644 keyboards/keychron/common/rgb/mixed_rgb.c delete mode 100644 keyboards/keychron/common/rgb/per_key_rgb.c delete mode 100644 keyboards/keychron/common/rgb/retail_demo.c delete mode 100644 keyboards/keychron/common/rgb/retail_demo.h delete mode 100644 keyboards/keychron/common/rgb/rgb.mk delete mode 100644 keyboards/keychron/common/rgb/rgb_matrix_kb.inc delete mode 100644 keyboards/keychron/common/rgb/rgb_matrix_kb_config.h delete mode 100644 keyboards/keychron/common/snap_click/eeconfig_snap_click.h delete mode 100644 keyboards/keychron/common/snap_click/snap_click.c delete mode 100644 keyboards/keychron/common/snap_click/snap_click.h delete mode 100644 keyboards/keychron/common/snap_click/snap_click.mk delete mode 100644 keyboards/keychron/common/wireless/bat_level_animation.c delete mode 100644 keyboards/keychron/common/wireless/bat_level_animation.h delete mode 100644 keyboards/keychron/common/wireless/battery.c delete mode 100644 keyboards/keychron/common/wireless/battery.h delete mode 100644 keyboards/keychron/common/wireless/eeconfig_wireless.h delete mode 100644 keyboards/keychron/common/wireless/indicator.c delete mode 100644 keyboards/keychron/common/wireless/indicator.h delete mode 100644 keyboards/keychron/common/wireless/keychron_wireless_common.c delete mode 100644 keyboards/keychron/common/wireless/keychron_wireless_common.h delete mode 100644 keyboards/keychron/common/wireless/lkbt51.c delete mode 100644 keyboards/keychron/common/wireless/lkbt51.h delete mode 100644 keyboards/keychron/common/wireless/lpm.c delete mode 100644 keyboards/keychron/common/wireless/lpm.h delete mode 100644 keyboards/keychron/common/wireless/lpm_stm32f401.c delete mode 100644 keyboards/keychron/common/wireless/lpm_stm32f401.h delete mode 100644 keyboards/keychron/common/wireless/report_buffer.c delete mode 100644 keyboards/keychron/common/wireless/report_buffer.h delete mode 100644 keyboards/keychron/common/wireless/rtc_timer.c delete mode 100644 keyboards/keychron/common/wireless/rtc_timer.h delete mode 100644 keyboards/keychron/common/wireless/transport.c delete mode 100644 keyboards/keychron/common/wireless/transport.h delete mode 100644 keyboards/keychron/common/wireless/wireless.c delete mode 100644 keyboards/keychron/common/wireless/wireless.h delete mode 100644 keyboards/keychron/common/wireless/wireless.mk delete mode 100644 keyboards/keychron/common/wireless/wireless_config.h delete mode 100644 keyboards/keychron/common/wireless/wireless_event_type.h delete mode 100644 keyboards/keychron/common/wireless/wireless_main.c delete mode 100644 keyboards/keychron/k10_max/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k10_max/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k10_max/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k10_max/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k10_max/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k10_max/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k10_max/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k10_max/ansi/white/config.h delete mode 100644 keyboards/keychron/k10_max/ansi/white/info.json delete mode 100644 keyboards/keychron/k10_max/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k10_max/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k10_max/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k10_max/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k10_max/ansi/white/white.c delete mode 100644 keyboards/keychron/k10_max/board.h delete mode 100644 keyboards/keychron/k10_max/config.h delete mode 100644 keyboards/keychron/k10_max/firmware/keychron_k10_max_ansi_rgb_via.bin delete mode 100644 keyboards/keychron/k10_max/firmware/keychron_k10_max_ansi_white_via.bin delete mode 100644 keyboards/keychron/k10_max/firmware/keychron_k10_max_iso_rgb_via.bin delete mode 100644 keyboards/keychron/k10_max/firmware/keychron_k10_max_iso_white_via.bin delete mode 100644 keyboards/keychron/k10_max/halconf.h delete mode 100644 keyboards/keychron/k10_max/info.json delete mode 100644 keyboards/keychron/k10_max/iso/rgb/config.h delete mode 100644 keyboards/keychron/k10_max/iso/rgb/info.json delete mode 100644 keyboards/keychron/k10_max/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k10_max/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k10_max/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k10_max/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k10_max/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k10_max/iso/white/config.h delete mode 100644 keyboards/keychron/k10_max/iso/white/info.json delete mode 100644 keyboards/keychron/k10_max/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k10_max/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k10_max/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k10_max/iso/white/rules.mk delete mode 100644 keyboards/keychron/k10_max/iso/white/white.c delete mode 100644 keyboards/keychron/k10_max/k10_max.c delete mode 100644 keyboards/keychron/k10_max/mcuconf.h delete mode 100644 keyboards/keychron/k10_max/readme.md delete mode 100644 keyboards/keychron/k10_max/rules.mk delete mode 100644 keyboards/keychron/k10_max/via_json/k10_max_ansi_rgb.json delete mode 100644 keyboards/keychron/k10_max/via_json/k10_max_ansi_white.json delete mode 100644 keyboards/keychron/k10_max/via_json/k10_max_iso_rgb.json delete mode 100644 keyboards/keychron/k10_max/via_json/k10_max_iso_white.json delete mode 100644 keyboards/keychron/k10_pro/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k10_pro/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k10_pro/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k10_pro/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k10_pro/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k10_pro/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k10_pro/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k10_pro/ansi/white/config.h delete mode 100644 keyboards/keychron/k10_pro/ansi/white/info.json delete mode 100644 keyboards/keychron/k10_pro/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k10_pro/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k10_pro/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k10_pro/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k10_pro/ansi/white/white.c delete mode 100644 keyboards/keychron/k10_pro/config.h delete mode 100644 keyboards/keychron/k10_pro/halconf.h delete mode 100644 keyboards/keychron/k10_pro/info.json delete mode 100644 keyboards/keychron/k10_pro/iso/rgb/config.h delete mode 100644 keyboards/keychron/k10_pro/iso/rgb/info.json delete mode 100644 keyboards/keychron/k10_pro/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k10_pro/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k10_pro/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k10_pro/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k10_pro/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k10_pro/iso/white/config.h delete mode 100644 keyboards/keychron/k10_pro/iso/white/info.json delete mode 100644 keyboards/keychron/k10_pro/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k10_pro/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k10_pro/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k10_pro/iso/white/rules.mk delete mode 100644 keyboards/keychron/k10_pro/iso/white/white.c delete mode 100644 keyboards/keychron/k10_pro/jis/rgb/config.h delete mode 100644 keyboards/keychron/k10_pro/jis/rgb/info.json delete mode 100644 keyboards/keychron/k10_pro/jis/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k10_pro/jis/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k10_pro/jis/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k10_pro/jis/rgb/rgb.c delete mode 100644 keyboards/keychron/k10_pro/jis/rgb/rules.mk delete mode 100644 keyboards/keychron/k10_pro/jis/white/config.h delete mode 100644 keyboards/keychron/k10_pro/jis/white/info.json delete mode 100644 keyboards/keychron/k10_pro/jis/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k10_pro/jis/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k10_pro/jis/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k10_pro/jis/white/rules.mk delete mode 100644 keyboards/keychron/k10_pro/jis/white/white.c delete mode 100644 keyboards/keychron/k10_pro/k10_pro.c delete mode 100644 keyboards/keychron/k10_pro/k10_pro.h delete mode 100644 keyboards/keychron/k10_pro/matrix.c delete mode 100644 keyboards/keychron/k10_pro/mcuconf.h delete mode 100644 keyboards/keychron/k10_pro/readme.md delete mode 100644 keyboards/keychron/k10_pro/rules.mk delete mode 100644 keyboards/keychron/k10_pro/via_json/k10_pro_ansi_rgb.json delete mode 100644 keyboards/keychron/k10_pro/via_json/k10_pro_ansi_white.json delete mode 100644 keyboards/keychron/k10_pro/via_json/k10_pro_iso_rgb.json delete mode 100644 keyboards/keychron/k10_pro/via_json/k10_pro_iso_white.json delete mode 100644 keyboards/keychron/k10_pro/via_json/k10_pro_jis_rgb.json delete mode 100644 keyboards/keychron/k10_pro/via_json/k10_pro_jis_white.json delete mode 100644 keyboards/keychron/k10_pro_se2/ansi_lightless/config.h delete mode 100644 keyboards/keychron/k10_pro_se2/ansi_lightless/info.json delete mode 100644 keyboards/keychron/k10_pro_se2/ansi_lightless/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k10_pro_se2/ansi_lightless/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k10_pro_se2/ansi_lightless/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k10_pro_se2/ansi_lightless/rules.mk delete mode 100644 keyboards/keychron/k10_pro_se2/board.h delete mode 100644 keyboards/keychron/k10_pro_se2/config.h delete mode 100644 keyboards/keychron/k10_pro_se2/halconf.h delete mode 100644 keyboards/keychron/k10_pro_se2/info.json delete mode 100644 keyboards/keychron/k10_pro_se2/k10_pro_se2.c delete mode 100644 keyboards/keychron/k10_pro_se2/mcuconf.h delete mode 100644 keyboards/keychron/k10_pro_se2/readme.md delete mode 100644 keyboards/keychron/k10_pro_se2/rules.mk delete mode 100644 keyboards/keychron/k10_pro_se2/via_json/k10_pro_se2_ansi.json delete mode 100644 keyboards/keychron/k11_max/ansi_encoder/rgb/config.h delete mode 100644 keyboards/keychron/k11_max/ansi_encoder/rgb/info.json delete mode 100644 keyboards/keychron/k11_max/ansi_encoder/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k11_max/ansi_encoder/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k11_max/ansi_encoder/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k11_max/ansi_encoder/rgb/rgb.c delete mode 100644 keyboards/keychron/k11_max/ansi_encoder/rgb/rules.mk delete mode 100644 keyboards/keychron/k11_max/ansi_encoder/white/config.h delete mode 100644 keyboards/keychron/k11_max/ansi_encoder/white/info.json delete mode 100644 keyboards/keychron/k11_max/ansi_encoder/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k11_max/ansi_encoder/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k11_max/ansi_encoder/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k11_max/ansi_encoder/white/rules.mk delete mode 100644 keyboards/keychron/k11_max/ansi_encoder/white/white.c delete mode 100644 keyboards/keychron/k11_max/board.h delete mode 100644 keyboards/keychron/k11_max/config.h delete mode 100644 keyboards/keychron/k11_max/firmware/keychron_k11_max_ansi_encoder_rgb_via.bin delete mode 100644 keyboards/keychron/k11_max/firmware/keychron_k11_max_ansi_encoder_white_via.bin delete mode 100644 keyboards/keychron/k11_max/firmware/keychron_k11_max_iso_encoder_rgb_via.bin delete mode 100644 keyboards/keychron/k11_max/firmware/keychron_k11_max_iso_encoder_white_via.bin delete mode 100644 keyboards/keychron/k11_max/halconf.h delete mode 100644 keyboards/keychron/k11_max/info.json delete mode 100644 keyboards/keychron/k11_max/iso_encoder/rgb/config.h delete mode 100644 keyboards/keychron/k11_max/iso_encoder/rgb/info.json delete mode 100644 keyboards/keychron/k11_max/iso_encoder/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k11_max/iso_encoder/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k11_max/iso_encoder/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k11_max/iso_encoder/rgb/rgb.c delete mode 100644 keyboards/keychron/k11_max/iso_encoder/rgb/rules.mk delete mode 100644 keyboards/keychron/k11_max/iso_encoder/white/config.h delete mode 100644 keyboards/keychron/k11_max/iso_encoder/white/info.json delete mode 100644 keyboards/keychron/k11_max/iso_encoder/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k11_max/iso_encoder/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k11_max/iso_encoder/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k11_max/iso_encoder/white/rules.mk delete mode 100644 keyboards/keychron/k11_max/iso_encoder/white/white.c delete mode 100644 keyboards/keychron/k11_max/jis_encoder/rgb/config.h delete mode 100644 keyboards/keychron/k11_max/jis_encoder/rgb/info.json delete mode 100644 keyboards/keychron/k11_max/jis_encoder/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k11_max/jis_encoder/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k11_max/jis_encoder/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k11_max/jis_encoder/rgb/rgb.c delete mode 100644 keyboards/keychron/k11_max/jis_encoder/rgb/rules.mk delete mode 100644 keyboards/keychron/k11_max/jis_encoder/white/config.h delete mode 100644 keyboards/keychron/k11_max/jis_encoder/white/info.json delete mode 100644 keyboards/keychron/k11_max/jis_encoder/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k11_max/jis_encoder/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k11_max/jis_encoder/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k11_max/jis_encoder/white/rules.mk delete mode 100644 keyboards/keychron/k11_max/jis_encoder/white/white.c delete mode 100644 keyboards/keychron/k11_max/k11_max.c delete mode 100644 keyboards/keychron/k11_max/mcuconf.h delete mode 100644 keyboards/keychron/k11_max/readme.md delete mode 100644 keyboards/keychron/k11_max/rules.mk delete mode 100644 keyboards/keychron/k11_max/via_json/k11_max_ansi_rgb_encoder.json delete mode 100644 keyboards/keychron/k11_max/via_json/k11_max_ansi_white_encoder.json delete mode 100644 keyboards/keychron/k11_max/via_json/k11_max_iso_rgb_encoder.json delete mode 100644 keyboards/keychron/k11_max/via_json/k11_max_iso_white_encoder.json delete mode 100644 keyboards/keychron/k11_max/via_json/k11_max_jis_rgb_encoder.json delete mode 100644 keyboards/keychron/k11_max/via_json/k11_max_jis_white_encoder.json delete mode 100644 keyboards/keychron/k11_pro/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k11_pro/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k11_pro/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k11_pro/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k11_pro/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k11_pro/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k11_pro/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k11_pro/ansi/white/config.h delete mode 100644 keyboards/keychron/k11_pro/ansi/white/info.json delete mode 100644 keyboards/keychron/k11_pro/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k11_pro/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k11_pro/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k11_pro/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k11_pro/ansi/white/white.c delete mode 100644 keyboards/keychron/k11_pro/ansi_encoder/rgb/config.h delete mode 100644 keyboards/keychron/k11_pro/ansi_encoder/rgb/info.json delete mode 100644 keyboards/keychron/k11_pro/ansi_encoder/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k11_pro/ansi_encoder/rgb/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/k11_pro/ansi_encoder/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k11_pro/ansi_encoder/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k11_pro/ansi_encoder/rgb/rgb.c delete mode 100644 keyboards/keychron/k11_pro/ansi_encoder/rgb/rules.mk delete mode 100644 keyboards/keychron/k11_pro/ansi_encoder/white/config.h delete mode 100644 keyboards/keychron/k11_pro/ansi_encoder/white/info.json delete mode 100644 keyboards/keychron/k11_pro/ansi_encoder/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k11_pro/ansi_encoder/white/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/k11_pro/ansi_encoder/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k11_pro/ansi_encoder/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k11_pro/ansi_encoder/white/rules.mk delete mode 100644 keyboards/keychron/k11_pro/ansi_encoder/white/white.c delete mode 100644 keyboards/keychron/k11_pro/config.h delete mode 100644 keyboards/keychron/k11_pro/halconf.h delete mode 100644 keyboards/keychron/k11_pro/info.json delete mode 100644 keyboards/keychron/k11_pro/k11_pro.c delete mode 100644 keyboards/keychron/k11_pro/k11_pro.h delete mode 100644 keyboards/keychron/k11_pro/matrix.c delete mode 100644 keyboards/keychron/k11_pro/mcuconf.h delete mode 100644 keyboards/keychron/k11_pro/readme.md delete mode 100644 keyboards/keychron/k11_pro/rules.mk delete mode 100644 keyboards/keychron/k11_pro/via_json/k11_pro_ansi_encoder_rgb.json delete mode 100644 keyboards/keychron/k11_pro/via_json/k11_pro_ansi_encoder_white.json delete mode 100644 keyboards/keychron/k11_pro/via_json/k11_pro_ansi_rgb.json delete mode 100644 keyboards/keychron/k11_pro/via_json/k11_pro_ansi_white.json delete mode 100644 keyboards/keychron/k12_pro/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k12_pro/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k12_pro/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k12_pro/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k12_pro/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k12_pro/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k12_pro/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k12_pro/ansi/white/config.h delete mode 100644 keyboards/keychron/k12_pro/ansi/white/info.json delete mode 100644 keyboards/keychron/k12_pro/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k12_pro/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k12_pro/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k12_pro/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k12_pro/ansi/white/white.c delete mode 100644 keyboards/keychron/k12_pro/config.h delete mode 100644 keyboards/keychron/k12_pro/halconf.h delete mode 100644 keyboards/keychron/k12_pro/info.json delete mode 100644 keyboards/keychron/k12_pro/k12_pro.c delete mode 100644 keyboards/keychron/k12_pro/k12_pro.h delete mode 100644 keyboards/keychron/k12_pro/matrix.c delete mode 100644 keyboards/keychron/k12_pro/mcuconf.h delete mode 100644 keyboards/keychron/k12_pro/readme.md delete mode 100644 keyboards/keychron/k12_pro/rules.mk delete mode 100644 keyboards/keychron/k12_pro/via_json/k12_pro_ansi_rgb.json delete mode 100644 keyboards/keychron/k12_pro/via_json/k12_pro_ansi_white.json delete mode 100644 keyboards/keychron/k13_max/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k13_max/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k13_max/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k13_max/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k13_max/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k13_max/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k13_max/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k13_max/ansi/white/config.h delete mode 100644 keyboards/keychron/k13_max/ansi/white/info.json delete mode 100644 keyboards/keychron/k13_max/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k13_max/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k13_max/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k13_max/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k13_max/ansi/white/white.c delete mode 100644 keyboards/keychron/k13_max/board.h delete mode 100644 keyboards/keychron/k13_max/config.h delete mode 100644 keyboards/keychron/k13_max/firmware/keychron_k13_max_ansi_rgb_via.bin delete mode 100644 keyboards/keychron/k13_max/firmware/keychron_k13_max_ansi_white_via.bin delete mode 100644 keyboards/keychron/k13_max/firmware/keychron_k13_max_iso_rgb_via.bin delete mode 100644 keyboards/keychron/k13_max/firmware/keychron_k13_max_iso_white_via.bin delete mode 100644 keyboards/keychron/k13_max/halconf.h delete mode 100644 keyboards/keychron/k13_max/info.json delete mode 100644 keyboards/keychron/k13_max/iso/rgb/config.h delete mode 100644 keyboards/keychron/k13_max/iso/rgb/info.json delete mode 100644 keyboards/keychron/k13_max/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k13_max/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k13_max/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k13_max/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k13_max/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k13_max/iso/white/config.h delete mode 100644 keyboards/keychron/k13_max/iso/white/info.json delete mode 100644 keyboards/keychron/k13_max/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k13_max/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k13_max/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k13_max/iso/white/rules.mk delete mode 100644 keyboards/keychron/k13_max/iso/white/white.c delete mode 100644 keyboards/keychron/k13_max/k13_max.c delete mode 100644 keyboards/keychron/k13_max/mcuconf.h delete mode 100644 keyboards/keychron/k13_max/readme.md delete mode 100644 keyboards/keychron/k13_max/rules.mk delete mode 100644 keyboards/keychron/k13_max/via_json/k13_max_ansi_rgb.json delete mode 100644 keyboards/keychron/k13_max/via_json/k13_max_ansi_white.json delete mode 100644 keyboards/keychron/k13_max/via_json/k13_max_iso_rgb.json delete mode 100644 keyboards/keychron/k13_max/via_json/k13_max_iso_white.json delete mode 100644 keyboards/keychron/k13_pro/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k13_pro/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k13_pro/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k13_pro/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k13_pro/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k13_pro/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k13_pro/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k13_pro/ansi/white/config.h delete mode 100644 keyboards/keychron/k13_pro/ansi/white/info.json delete mode 100644 keyboards/keychron/k13_pro/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k13_pro/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k13_pro/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k13_pro/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k13_pro/ansi/white/white.c delete mode 100644 keyboards/keychron/k13_pro/config.h delete mode 100644 keyboards/keychron/k13_pro/halconf.h delete mode 100644 keyboards/keychron/k13_pro/info.json delete mode 100644 keyboards/keychron/k13_pro/iso/rgb/config.h delete mode 100644 keyboards/keychron/k13_pro/iso/rgb/info.json delete mode 100644 keyboards/keychron/k13_pro/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k13_pro/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k13_pro/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k13_pro/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k13_pro/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k13_pro/iso/white/config.h delete mode 100644 keyboards/keychron/k13_pro/iso/white/info.json delete mode 100644 keyboards/keychron/k13_pro/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k13_pro/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k13_pro/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k13_pro/iso/white/rules.mk delete mode 100644 keyboards/keychron/k13_pro/iso/white/white.c delete mode 100644 keyboards/keychron/k13_pro/k13_pro.c delete mode 100644 keyboards/keychron/k13_pro/k13_pro.h delete mode 100644 keyboards/keychron/k13_pro/matrix.c delete mode 100644 keyboards/keychron/k13_pro/mcuconf.h delete mode 100644 keyboards/keychron/k13_pro/readme.md delete mode 100644 keyboards/keychron/k13_pro/rules.mk delete mode 100644 keyboards/keychron/k13_pro/via_json/k13_pro_ansi_rgb.json delete mode 100644 keyboards/keychron/k13_pro/via_json/k13_pro_ansi_white.json delete mode 100644 keyboards/keychron/k13_pro/via_json/k13_pro_iso_rgb.json delete mode 100644 keyboards/keychron/k13_pro/via_json/k13_pro_iso_white.json delete mode 100644 keyboards/keychron/k14_pro/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k14_pro/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k14_pro/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k14_pro/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k14_pro/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k14_pro/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k14_pro/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k14_pro/ansi/white/config.h delete mode 100644 keyboards/keychron/k14_pro/ansi/white/info.json delete mode 100644 keyboards/keychron/k14_pro/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k14_pro/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k14_pro/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k14_pro/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k14_pro/ansi/white/white.c delete mode 100644 keyboards/keychron/k14_pro/config.h delete mode 100644 keyboards/keychron/k14_pro/halconf.h delete mode 100644 keyboards/keychron/k14_pro/info.json delete mode 100644 keyboards/keychron/k14_pro/k14_pro.c delete mode 100644 keyboards/keychron/k14_pro/k14_pro.h delete mode 100644 keyboards/keychron/k14_pro/matrix.c delete mode 100644 keyboards/keychron/k14_pro/mcuconf.h delete mode 100644 keyboards/keychron/k14_pro/readme.md delete mode 100644 keyboards/keychron/k14_pro/rules.mk delete mode 100644 keyboards/keychron/k14_pro/via_json/k14_pro_ansi_rgb.json delete mode 100644 keyboards/keychron/k14_pro/via_json/k14_pro_ansi_rgb_v1.00_20230330.json delete mode 100644 keyboards/keychron/k14_pro/via_json/k14_pro_ansi_white.json delete mode 100644 keyboards/keychron/k14_pro/via_json/k14_pro_ansi_white_v1.00_20230330.json delete mode 100644 keyboards/keychron/k15_max/ansi_encoder/rgb/config.h delete mode 100644 keyboards/keychron/k15_max/ansi_encoder/rgb/info.json delete mode 100644 keyboards/keychron/k15_max/ansi_encoder/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k15_max/ansi_encoder/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k15_max/ansi_encoder/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k15_max/ansi_encoder/rgb/rgb.c delete mode 100644 keyboards/keychron/k15_max/ansi_encoder/rgb/rules.mk delete mode 100644 keyboards/keychron/k15_max/ansi_encoder/white/config.h delete mode 100644 keyboards/keychron/k15_max/ansi_encoder/white/info.json delete mode 100644 keyboards/keychron/k15_max/ansi_encoder/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k15_max/ansi_encoder/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k15_max/ansi_encoder/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k15_max/ansi_encoder/white/rules.mk delete mode 100644 keyboards/keychron/k15_max/ansi_encoder/white/white.c delete mode 100644 keyboards/keychron/k15_max/board.h delete mode 100644 keyboards/keychron/k15_max/config.h delete mode 100644 keyboards/keychron/k15_max/firmware/keychron_k15_max_ansi_encoder_rgb_via.bin delete mode 100644 keyboards/keychron/k15_max/firmware/keychron_k15_max_ansi_encoder_white_via.bin delete mode 100644 keyboards/keychron/k15_max/firmware/keychron_k15_max_iso_encoder_rgb_via.bin delete mode 100644 keyboards/keychron/k15_max/firmware/keychron_k15_max_iso_encoder_white_via.bin delete mode 100644 keyboards/keychron/k15_max/halconf.h delete mode 100644 keyboards/keychron/k15_max/info.json delete mode 100644 keyboards/keychron/k15_max/iso_encoder/rgb/config.h delete mode 100644 keyboards/keychron/k15_max/iso_encoder/rgb/info.json delete mode 100644 keyboards/keychron/k15_max/iso_encoder/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k15_max/iso_encoder/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k15_max/iso_encoder/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k15_max/iso_encoder/rgb/rgb.c delete mode 100644 keyboards/keychron/k15_max/iso_encoder/rgb/rules.mk delete mode 100644 keyboards/keychron/k15_max/iso_encoder/white/config.h delete mode 100644 keyboards/keychron/k15_max/iso_encoder/white/info.json delete mode 100644 keyboards/keychron/k15_max/iso_encoder/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k15_max/iso_encoder/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k15_max/iso_encoder/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k15_max/iso_encoder/white/rules.mk delete mode 100644 keyboards/keychron/k15_max/iso_encoder/white/white.c delete mode 100644 keyboards/keychron/k15_max/k15_max.c delete mode 100644 keyboards/keychron/k15_max/mcuconf.h delete mode 100644 keyboards/keychron/k15_max/readme.md delete mode 100644 keyboards/keychron/k15_max/rules.mk delete mode 100644 keyboards/keychron/k15_max/via_json/k15_max_ansi_knob_rgb.json delete mode 100644 keyboards/keychron/k15_max/via_json/k15_max_ansi_knob_white.json delete mode 100644 keyboards/keychron/k15_max/via_json/k15_max_iso_knob_rgb.json delete mode 100644 keyboards/keychron/k15_max/via_json/k15_max_iso_knob_white.json delete mode 100644 keyboards/keychron/k15_max/via_json/k15_max_jis_knob_rgb.json delete mode 100644 keyboards/keychron/k15_max/via_json/k15_max_jis_knob_white.json delete mode 100644 keyboards/keychron/k15_pro/ansi_encoder/rgb/config.h delete mode 100644 keyboards/keychron/k15_pro/ansi_encoder/rgb/info.json delete mode 100644 keyboards/keychron/k15_pro/ansi_encoder/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k15_pro/ansi_encoder/rgb/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/k15_pro/ansi_encoder/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k15_pro/ansi_encoder/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k15_pro/ansi_encoder/rgb/rgb.c delete mode 100644 keyboards/keychron/k15_pro/ansi_encoder/rgb/rules.mk delete mode 100644 keyboards/keychron/k15_pro/ansi_encoder/white/config.h delete mode 100644 keyboards/keychron/k15_pro/ansi_encoder/white/info.json delete mode 100644 keyboards/keychron/k15_pro/ansi_encoder/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k15_pro/ansi_encoder/white/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/k15_pro/ansi_encoder/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k15_pro/ansi_encoder/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k15_pro/ansi_encoder/white/rules.mk delete mode 100644 keyboards/keychron/k15_pro/ansi_encoder/white/white.c delete mode 100644 keyboards/keychron/k15_pro/config.h delete mode 100644 keyboards/keychron/k15_pro/halconf.h delete mode 100644 keyboards/keychron/k15_pro/info.json delete mode 100644 keyboards/keychron/k15_pro/k15_pro.c delete mode 100644 keyboards/keychron/k15_pro/k15_pro.h delete mode 100644 keyboards/keychron/k15_pro/mcuconf.h delete mode 100644 keyboards/keychron/k15_pro/readme.md delete mode 100644 keyboards/keychron/k15_pro/rules.mk delete mode 100644 keyboards/keychron/k15_pro/via_json/k15_pro_ansi_encoder_rgb.json delete mode 100644 keyboards/keychron/k15_pro/via_json/k15_pro_ansi_encoder_white.json delete mode 100644 keyboards/keychron/k17_max/ansi_encoder/rgb/config.h delete mode 100644 keyboards/keychron/k17_max/ansi_encoder/rgb/info.json delete mode 100644 keyboards/keychron/k17_max/ansi_encoder/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k17_max/ansi_encoder/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k17_max/ansi_encoder/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k17_max/ansi_encoder/rgb/rgb.c delete mode 100644 keyboards/keychron/k17_max/ansi_encoder/rgb/rules.mk delete mode 100644 keyboards/keychron/k17_max/ansi_encoder/white/config.h delete mode 100644 keyboards/keychron/k17_max/ansi_encoder/white/info.json delete mode 100644 keyboards/keychron/k17_max/ansi_encoder/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k17_max/ansi_encoder/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k17_max/ansi_encoder/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k17_max/ansi_encoder/white/rules.mk delete mode 100644 keyboards/keychron/k17_max/ansi_encoder/white/white.c delete mode 100644 keyboards/keychron/k17_max/board.h delete mode 100644 keyboards/keychron/k17_max/config.h delete mode 100644 keyboards/keychron/k17_max/halconf.h delete mode 100644 keyboards/keychron/k17_max/info.json delete mode 100644 keyboards/keychron/k17_max/iso_encoder/rgb/config.h delete mode 100644 keyboards/keychron/k17_max/iso_encoder/rgb/info.json delete mode 100644 keyboards/keychron/k17_max/iso_encoder/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k17_max/iso_encoder/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k17_max/iso_encoder/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k17_max/iso_encoder/rgb/rgb.c delete mode 100644 keyboards/keychron/k17_max/iso_encoder/rgb/rules.mk delete mode 100644 keyboards/keychron/k17_max/iso_encoder/white/config.h delete mode 100644 keyboards/keychron/k17_max/iso_encoder/white/info.json delete mode 100644 keyboards/keychron/k17_max/iso_encoder/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k17_max/iso_encoder/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k17_max/iso_encoder/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k17_max/iso_encoder/white/rules.mk delete mode 100644 keyboards/keychron/k17_max/iso_encoder/white/white.c delete mode 100644 keyboards/keychron/k17_max/jis_encoder/rgb/config.h delete mode 100644 keyboards/keychron/k17_max/jis_encoder/rgb/info.json delete mode 100644 keyboards/keychron/k17_max/jis_encoder/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k17_max/jis_encoder/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k17_max/jis_encoder/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k17_max/jis_encoder/rgb/rgb.c delete mode 100644 keyboards/keychron/k17_max/jis_encoder/rgb/rules.mk delete mode 100644 keyboards/keychron/k17_max/jis_encoder/white/config.h delete mode 100644 keyboards/keychron/k17_max/jis_encoder/white/info.json delete mode 100644 keyboards/keychron/k17_max/jis_encoder/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k17_max/jis_encoder/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k17_max/jis_encoder/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k17_max/jis_encoder/white/rules.mk delete mode 100644 keyboards/keychron/k17_max/jis_encoder/white/white.c delete mode 100644 keyboards/keychron/k17_max/k17_max.c delete mode 100644 keyboards/keychron/k17_max/mcuconf.h delete mode 100644 keyboards/keychron/k17_max/readme.md delete mode 100644 keyboards/keychron/k17_max/rules.mk delete mode 100644 keyboards/keychron/k17_max/via_json/k17_max_ansi_knob_rgb.json delete mode 100644 keyboards/keychron/k17_max/via_json/k17_max_ansi_knob_white.json delete mode 100644 keyboards/keychron/k17_max/via_json/k17_max_iso_knob_rgb.json delete mode 100644 keyboards/keychron/k17_max/via_json/k17_max_iso_knob_white.json delete mode 100644 keyboards/keychron/k17_max/via_json/k17_max_jis_knob_rgb.json delete mode 100644 keyboards/keychron/k17_max/via_json/k17_max_jis_knob_white.json delete mode 100644 keyboards/keychron/k17_pro/ansi_encoder/rgb/config.h delete mode 100644 keyboards/keychron/k17_pro/ansi_encoder/rgb/info.json delete mode 100644 keyboards/keychron/k17_pro/ansi_encoder/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k17_pro/ansi_encoder/rgb/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/k17_pro/ansi_encoder/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k17_pro/ansi_encoder/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k17_pro/ansi_encoder/rgb/rgb.c delete mode 100644 keyboards/keychron/k17_pro/ansi_encoder/rgb/rules.mk delete mode 100644 keyboards/keychron/k17_pro/ansi_encoder/white/config.h delete mode 100644 keyboards/keychron/k17_pro/ansi_encoder/white/info.json delete mode 100644 keyboards/keychron/k17_pro/ansi_encoder/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k17_pro/ansi_encoder/white/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/k17_pro/ansi_encoder/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k17_pro/ansi_encoder/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k17_pro/ansi_encoder/white/rules.mk delete mode 100644 keyboards/keychron/k17_pro/ansi_encoder/white/white.c delete mode 100644 keyboards/keychron/k17_pro/config.h delete mode 100644 keyboards/keychron/k17_pro/halconf.h delete mode 100644 keyboards/keychron/k17_pro/info.json delete mode 100644 keyboards/keychron/k17_pro/iso_encoder/rgb/config.h delete mode 100644 keyboards/keychron/k17_pro/iso_encoder/rgb/info.json delete mode 100644 keyboards/keychron/k17_pro/iso_encoder/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k17_pro/iso_encoder/rgb/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/k17_pro/iso_encoder/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k17_pro/iso_encoder/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k17_pro/iso_encoder/rgb/rgb.c delete mode 100644 keyboards/keychron/k17_pro/iso_encoder/rgb/rules.mk delete mode 100644 keyboards/keychron/k17_pro/iso_encoder/white/config.h delete mode 100644 keyboards/keychron/k17_pro/iso_encoder/white/info.json delete mode 100644 keyboards/keychron/k17_pro/iso_encoder/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k17_pro/iso_encoder/white/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/k17_pro/iso_encoder/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k17_pro/iso_encoder/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k17_pro/iso_encoder/white/rules.mk delete mode 100644 keyboards/keychron/k17_pro/iso_encoder/white/white.c delete mode 100644 keyboards/keychron/k17_pro/k17_pro.c delete mode 100644 keyboards/keychron/k17_pro/k17_pro.h delete mode 100644 keyboards/keychron/k17_pro/matrix.c delete mode 100644 keyboards/keychron/k17_pro/mcuconf.h delete mode 100644 keyboards/keychron/k17_pro/readme.md delete mode 100644 keyboards/keychron/k17_pro/rules.mk delete mode 100644 keyboards/keychron/k17_pro/via_json/k17_pro_ansi_encoder_rgb.json delete mode 100644 keyboards/keychron/k17_pro/via_json/k17_pro_ansi_encoder_white.json delete mode 100644 keyboards/keychron/k17_pro/via_json/k17_pro_iso_encoder_rgb.json delete mode 100644 keyboards/keychron/k17_pro/via_json/k17_pro_iso_encoder_white.json delete mode 100644 keyboards/keychron/k1_max/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k1_max/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k1_max/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k1_max/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k1_max/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k1_max/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k1_max/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k1_max/ansi/white/config.h delete mode 100644 keyboards/keychron/k1_max/ansi/white/info.json delete mode 100644 keyboards/keychron/k1_max/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k1_max/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k1_max/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k1_max/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k1_max/ansi/white/white.c delete mode 100644 keyboards/keychron/k1_max/board.h delete mode 100644 keyboards/keychron/k1_max/config.h delete mode 100644 keyboards/keychron/k1_max/firmware/keychron_k1_max_ansi_rgb_via.bin delete mode 100644 keyboards/keychron/k1_max/firmware/keychron_k1_max_ansi_white_via.bin delete mode 100644 keyboards/keychron/k1_max/firmware/keychron_k1_max_jis_rgb_via.bin delete mode 100644 keyboards/keychron/k1_max/firmware/keychron_k1_max_jis_white_via.bin delete mode 100644 keyboards/keychron/k1_max/halconf.h delete mode 100644 keyboards/keychron/k1_max/info.json delete mode 100644 keyboards/keychron/k1_max/iso/rgb/config.h delete mode 100644 keyboards/keychron/k1_max/iso/rgb/info.json delete mode 100644 keyboards/keychron/k1_max/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k1_max/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k1_max/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k1_max/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k1_max/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k1_max/iso/white/config.h delete mode 100644 keyboards/keychron/k1_max/iso/white/info.json delete mode 100644 keyboards/keychron/k1_max/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k1_max/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k1_max/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k1_max/iso/white/rules.mk delete mode 100644 keyboards/keychron/k1_max/iso/white/white.c delete mode 100644 keyboards/keychron/k1_max/jis/rgb/config.h delete mode 100644 keyboards/keychron/k1_max/jis/rgb/info.json delete mode 100644 keyboards/keychron/k1_max/jis/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k1_max/jis/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k1_max/jis/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k1_max/jis/rgb/rgb.c delete mode 100644 keyboards/keychron/k1_max/jis/rgb/rules.mk delete mode 100644 keyboards/keychron/k1_max/jis/white/config.h delete mode 100644 keyboards/keychron/k1_max/jis/white/info.json delete mode 100644 keyboards/keychron/k1_max/jis/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k1_max/jis/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k1_max/jis/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k1_max/jis/white/rules.mk delete mode 100644 keyboards/keychron/k1_max/jis/white/white.c delete mode 100644 keyboards/keychron/k1_max/k1_max.c delete mode 100644 keyboards/keychron/k1_max/mcuconf.h delete mode 100644 keyboards/keychron/k1_max/readme.md delete mode 100644 keyboards/keychron/k1_max/rules.mk delete mode 100644 keyboards/keychron/k1_max/via_json/k1_max_ansi_rgb.json delete mode 100644 keyboards/keychron/k1_max/via_json/k1_max_ansi_white.json delete mode 100644 keyboards/keychron/k1_max/via_json/k1_max_jis_rgb .json delete mode 100644 keyboards/keychron/k1_max/via_json/k1_max_jis_white.json delete mode 100644 keyboards/keychron/k1_pro/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k1_pro/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k1_pro/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k1_pro/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k1_pro/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k1_pro/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k1_pro/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k1_pro/ansi/white/config.h delete mode 100644 keyboards/keychron/k1_pro/ansi/white/info.json delete mode 100644 keyboards/keychron/k1_pro/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k1_pro/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k1_pro/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k1_pro/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k1_pro/ansi/white/white.c delete mode 100644 keyboards/keychron/k1_pro/config.h delete mode 100644 keyboards/keychron/k1_pro/halconf.h delete mode 100644 keyboards/keychron/k1_pro/info.json delete mode 100644 keyboards/keychron/k1_pro/iso/rgb/config.h delete mode 100644 keyboards/keychron/k1_pro/iso/rgb/info.json delete mode 100644 keyboards/keychron/k1_pro/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k1_pro/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k1_pro/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k1_pro/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k1_pro/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k1_pro/iso/white/config.h delete mode 100644 keyboards/keychron/k1_pro/iso/white/info.json delete mode 100644 keyboards/keychron/k1_pro/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k1_pro/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k1_pro/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k1_pro/iso/white/rules.mk delete mode 100644 keyboards/keychron/k1_pro/iso/white/white.c delete mode 100644 keyboards/keychron/k1_pro/k1_pro.c delete mode 100644 keyboards/keychron/k1_pro/k1_pro.h delete mode 100644 keyboards/keychron/k1_pro/matrix.c delete mode 100644 keyboards/keychron/k1_pro/mcuconf.h delete mode 100644 keyboards/keychron/k1_pro/readme.md delete mode 100644 keyboards/keychron/k1_pro/rules.mk delete mode 100644 keyboards/keychron/k1_pro/via_json/k1_pro_ansi_rgb.json delete mode 100644 keyboards/keychron/k1_pro/via_json/k1_pro_ansi_white.json delete mode 100644 keyboards/keychron/k1_pro/via_json/k1_pro_iso_rgb.json delete mode 100644 keyboards/keychron/k1_pro/via_json/k1_pro_iso_white.json delete mode 100644 keyboards/keychron/k2_max/ansi/info.json delete mode 100644 keyboards/keychron/k2_max/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k2_max/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k2_max/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k2_max/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k2_max/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k2_max/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k2_max/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k2_max/ansi/white/config.h delete mode 100644 keyboards/keychron/k2_max/ansi/white/info.json delete mode 100644 keyboards/keychron/k2_max/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k2_max/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k2_max/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k2_max/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k2_max/ansi/white/white.c delete mode 100644 keyboards/keychron/k2_max/board.h delete mode 100644 keyboards/keychron/k2_max/config.h delete mode 100644 keyboards/keychron/k2_max/halconf.h delete mode 100644 keyboards/keychron/k2_max/info.json delete mode 100644 keyboards/keychron/k2_max/iso/info.json delete mode 100644 keyboards/keychron/k2_max/iso/rgb/config.h delete mode 100644 keyboards/keychron/k2_max/iso/rgb/info.json delete mode 100644 keyboards/keychron/k2_max/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k2_max/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k2_max/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k2_max/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k2_max/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k2_max/iso/white/config.h delete mode 100644 keyboards/keychron/k2_max/iso/white/info.json delete mode 100644 keyboards/keychron/k2_max/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k2_max/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k2_max/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k2_max/iso/white/rules.mk delete mode 100644 keyboards/keychron/k2_max/iso/white/white.c delete mode 100644 keyboards/keychron/k2_max/jis/info.json delete mode 100644 keyboards/keychron/k2_max/jis/rgb/config.h delete mode 100644 keyboards/keychron/k2_max/jis/rgb/info.json delete mode 100644 keyboards/keychron/k2_max/jis/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k2_max/jis/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k2_max/jis/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k2_max/jis/rgb/rgb.c delete mode 100644 keyboards/keychron/k2_max/jis/rgb/rules.mk delete mode 100644 keyboards/keychron/k2_max/jis/white/config.h delete mode 100644 keyboards/keychron/k2_max/jis/white/info.json delete mode 100644 keyboards/keychron/k2_max/jis/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k2_max/jis/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k2_max/jis/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k2_max/jis/white/rules.mk delete mode 100644 keyboards/keychron/k2_max/jis/white/white.c delete mode 100644 keyboards/keychron/k2_max/k2_max.c delete mode 100644 keyboards/keychron/k2_max/mcuconf.h delete mode 100644 keyboards/keychron/k2_max/readme.md delete mode 100644 keyboards/keychron/k2_max/rules.mk delete mode 100644 keyboards/keychron/k2_max/via_json/k2_max_ansi_rgb.json delete mode 100644 keyboards/keychron/k2_max/via_json/k2_max_ansi_white.json delete mode 100644 keyboards/keychron/k2_max/via_json/k2_max_iso_rgb.json delete mode 100644 keyboards/keychron/k2_max/via_json/k2_max_iso_white.json delete mode 100644 keyboards/keychron/k2_max/via_json/k2_max_jis_rgb.json delete mode 100644 keyboards/keychron/k2_max/via_json/k2_max_jis_white.json delete mode 100644 keyboards/keychron/k2_pro/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k2_pro/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k2_pro/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k2_pro/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k2_pro/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k2_pro/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k2_pro/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k2_pro/ansi/white/config.h delete mode 100644 keyboards/keychron/k2_pro/ansi/white/info.json delete mode 100644 keyboards/keychron/k2_pro/ansi/white/keymaps/candysign/config.h delete mode 100644 keyboards/keychron/k2_pro/ansi/white/keymaps/candysign/keymap.c delete mode 100644 keyboards/keychron/k2_pro/ansi/white/keymaps/candysign/rules.mk delete mode 100644 keyboards/keychron/k2_pro/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k2_pro/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k2_pro/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k2_pro/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k2_pro/ansi/white/white.c delete mode 100644 keyboards/keychron/k2_pro/config.h delete mode 100644 keyboards/keychron/k2_pro/halconf.h delete mode 100644 keyboards/keychron/k2_pro/info.json delete mode 100644 keyboards/keychron/k2_pro/iso/rgb/config.h delete mode 100644 keyboards/keychron/k2_pro/iso/rgb/info.json delete mode 100644 keyboards/keychron/k2_pro/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k2_pro/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k2_pro/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k2_pro/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k2_pro/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k2_pro/iso/white/config.h delete mode 100644 keyboards/keychron/k2_pro/iso/white/info.json delete mode 100644 keyboards/keychron/k2_pro/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k2_pro/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k2_pro/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k2_pro/iso/white/rules.mk delete mode 100644 keyboards/keychron/k2_pro/iso/white/white.c delete mode 100644 keyboards/keychron/k2_pro/jis/rgb/config.h delete mode 100644 keyboards/keychron/k2_pro/jis/rgb/info.json delete mode 100644 keyboards/keychron/k2_pro/jis/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k2_pro/jis/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k2_pro/jis/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k2_pro/jis/rgb/rgb.c delete mode 100644 keyboards/keychron/k2_pro/jis/rgb/rules.mk delete mode 100644 keyboards/keychron/k2_pro/jis/white/config.h delete mode 100644 keyboards/keychron/k2_pro/jis/white/info.json delete mode 100644 keyboards/keychron/k2_pro/jis/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k2_pro/jis/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k2_pro/jis/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k2_pro/jis/white/rules.mk delete mode 100644 keyboards/keychron/k2_pro/jis/white/white.c delete mode 100644 keyboards/keychron/k2_pro/k2_pro.c delete mode 100644 keyboards/keychron/k2_pro/k2_pro.h delete mode 100644 keyboards/keychron/k2_pro/matrix.c delete mode 100644 keyboards/keychron/k2_pro/mcuconf.h delete mode 100644 keyboards/keychron/k2_pro/readme.md delete mode 100644 keyboards/keychron/k2_pro/rules.mk delete mode 100644 keyboards/keychron/k2_pro/via_json/k2_pro_ansi_rgb.json delete mode 100644 keyboards/keychron/k2_pro/via_json/k2_pro_ansi_white.json delete mode 100644 keyboards/keychron/k2_pro/via_json/k2_pro_iso_rgb.json delete mode 100644 keyboards/keychron/k2_pro/via_json/k2_pro_iso_white.json delete mode 100644 keyboards/keychron/k3_max/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k3_max/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k3_max/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k3_max/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k3_max/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k3_max/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k3_max/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k3_max/ansi/white/config.h delete mode 100644 keyboards/keychron/k3_max/ansi/white/info.json delete mode 100644 keyboards/keychron/k3_max/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k3_max/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k3_max/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k3_max/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k3_max/ansi/white/white.c delete mode 100644 keyboards/keychron/k3_max/board.h delete mode 100644 keyboards/keychron/k3_max/config.h delete mode 100644 keyboards/keychron/k3_max/firmware/keychron_k3_max_ansi_rgb_via.bin delete mode 100644 keyboards/keychron/k3_max/firmware/keychron_k3_max_ansi_white_via.bin delete mode 100644 keyboards/keychron/k3_max/firmware/keychron_k3_max_iso_rgb_via.bin delete mode 100644 keyboards/keychron/k3_max/firmware/keychron_k3_max_iso_white_via.bin delete mode 100644 keyboards/keychron/k3_max/firmware/keychron_k3_max_jis_rgb_via.bin delete mode 100644 keyboards/keychron/k3_max/firmware/keychron_k3_max_jis_white_via.bin delete mode 100644 keyboards/keychron/k3_max/halconf.h delete mode 100644 keyboards/keychron/k3_max/info.json delete mode 100644 keyboards/keychron/k3_max/iso/rgb/config.h delete mode 100644 keyboards/keychron/k3_max/iso/rgb/info.json delete mode 100644 keyboards/keychron/k3_max/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k3_max/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k3_max/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k3_max/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k3_max/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k3_max/iso/white/config.h delete mode 100644 keyboards/keychron/k3_max/iso/white/info.json delete mode 100644 keyboards/keychron/k3_max/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k3_max/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k3_max/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k3_max/iso/white/rules.mk delete mode 100644 keyboards/keychron/k3_max/iso/white/white.c delete mode 100644 keyboards/keychron/k3_max/jis/rgb/config.h delete mode 100644 keyboards/keychron/k3_max/jis/rgb/info.json delete mode 100644 keyboards/keychron/k3_max/jis/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k3_max/jis/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k3_max/jis/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k3_max/jis/rgb/rgb.c delete mode 100644 keyboards/keychron/k3_max/jis/rgb/rules.mk delete mode 100644 keyboards/keychron/k3_max/jis/white/config.h delete mode 100644 keyboards/keychron/k3_max/jis/white/info.json delete mode 100644 keyboards/keychron/k3_max/jis/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k3_max/jis/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k3_max/jis/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k3_max/jis/white/rules.mk delete mode 100644 keyboards/keychron/k3_max/jis/white/white.c delete mode 100644 keyboards/keychron/k3_max/k3_max.c delete mode 100644 keyboards/keychron/k3_max/mcuconf.h delete mode 100644 keyboards/keychron/k3_max/readme.md delete mode 100644 keyboards/keychron/k3_max/rules.mk delete mode 100644 keyboards/keychron/k3_max/via_json/k3_max_ansi_rgb.json delete mode 100644 keyboards/keychron/k3_max/via_json/k3_max_ansi_white.json delete mode 100644 keyboards/keychron/k3_max/via_json/k3_max_iso_rgb.json delete mode 100644 keyboards/keychron/k3_max/via_json/k3_max_iso_white.json delete mode 100644 keyboards/keychron/k3_max/via_json/k3_max_jis_rgb.json delete mode 100644 keyboards/keychron/k3_max/via_json/k3_max_jis_white.json delete mode 100644 keyboards/keychron/k3_pro/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k3_pro/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k3_pro/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k3_pro/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k3_pro/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k3_pro/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k3_pro/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k3_pro/ansi/white/config.h delete mode 100644 keyboards/keychron/k3_pro/ansi/white/info.json delete mode 100644 keyboards/keychron/k3_pro/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k3_pro/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k3_pro/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k3_pro/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k3_pro/ansi/white/white.c delete mode 100644 keyboards/keychron/k3_pro/config.h delete mode 100644 keyboards/keychron/k3_pro/halconf.h delete mode 100644 keyboards/keychron/k3_pro/info.json delete mode 100644 keyboards/keychron/k3_pro/iso/rgb/config.h delete mode 100644 keyboards/keychron/k3_pro/iso/rgb/info.json delete mode 100644 keyboards/keychron/k3_pro/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k3_pro/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k3_pro/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k3_pro/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k3_pro/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k3_pro/iso/white/config.h delete mode 100644 keyboards/keychron/k3_pro/iso/white/info.json delete mode 100644 keyboards/keychron/k3_pro/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k3_pro/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k3_pro/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k3_pro/iso/white/rules.mk delete mode 100644 keyboards/keychron/k3_pro/iso/white/white.c delete mode 100644 keyboards/keychron/k3_pro/jis/rgb/config.h delete mode 100644 keyboards/keychron/k3_pro/jis/rgb/info.json delete mode 100644 keyboards/keychron/k3_pro/jis/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k3_pro/jis/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k3_pro/jis/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k3_pro/jis/rgb/rgb.c delete mode 100644 keyboards/keychron/k3_pro/jis/rgb/rules.mk delete mode 100644 keyboards/keychron/k3_pro/jis/white/config.h delete mode 100644 keyboards/keychron/k3_pro/jis/white/info.json delete mode 100644 keyboards/keychron/k3_pro/jis/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k3_pro/jis/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k3_pro/jis/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k3_pro/jis/white/rules.mk delete mode 100644 keyboards/keychron/k3_pro/jis/white/white.c delete mode 100644 keyboards/keychron/k3_pro/k3_pro.c delete mode 100644 keyboards/keychron/k3_pro/k3_pro.h delete mode 100644 keyboards/keychron/k3_pro/matrix.c delete mode 100644 keyboards/keychron/k3_pro/mcuconf.h delete mode 100644 keyboards/keychron/k3_pro/readme.md delete mode 100644 keyboards/keychron/k3_pro/rules.mk delete mode 100644 keyboards/keychron/k3_pro/via_json/k3_pro_ansi_rgb.json delete mode 100644 keyboards/keychron/k3_pro/via_json/k3_pro_ansi_white.json delete mode 100644 keyboards/keychron/k3_pro/via_json/k3_pro_iso_rgb .json delete mode 100644 keyboards/keychron/k3_pro/via_json/k3_pro_iso_white.json delete mode 100644 keyboards/keychron/k3_pro/via_json/k3_pro_jis_rgb .json delete mode 100644 keyboards/keychron/k3_pro/via_json/k3_pro_jis_white.json delete mode 100644 keyboards/keychron/k4_pro/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k4_pro/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k4_pro/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k4_pro/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k4_pro/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k4_pro/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k4_pro/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k4_pro/ansi/white/config.h delete mode 100644 keyboards/keychron/k4_pro/ansi/white/info.json delete mode 100644 keyboards/keychron/k4_pro/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k4_pro/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k4_pro/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k4_pro/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k4_pro/ansi/white/white.c delete mode 100644 keyboards/keychron/k4_pro/config.h delete mode 100644 keyboards/keychron/k4_pro/halconf.h delete mode 100644 keyboards/keychron/k4_pro/info.json delete mode 100644 keyboards/keychron/k4_pro/iso/rgb/config.h delete mode 100644 keyboards/keychron/k4_pro/iso/rgb/info.json delete mode 100644 keyboards/keychron/k4_pro/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k4_pro/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k4_pro/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k4_pro/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k4_pro/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k4_pro/iso/white/config.h delete mode 100644 keyboards/keychron/k4_pro/iso/white/info.json delete mode 100644 keyboards/keychron/k4_pro/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k4_pro/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k4_pro/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k4_pro/iso/white/rules.mk delete mode 100644 keyboards/keychron/k4_pro/iso/white/white.c delete mode 100644 keyboards/keychron/k4_pro/k4_pro.c delete mode 100644 keyboards/keychron/k4_pro/k4_pro.h delete mode 100644 keyboards/keychron/k4_pro/matrix.c delete mode 100644 keyboards/keychron/k4_pro/mcuconf.h delete mode 100644 keyboards/keychron/k4_pro/readme.md delete mode 100644 keyboards/keychron/k4_pro/rules.mk delete mode 100644 keyboards/keychron/k4_pro/via_json/k4_pro_ansi_rgb.json delete mode 100644 keyboards/keychron/k4_pro/via_json/k4_pro_ansi_white.json delete mode 100644 keyboards/keychron/k4_pro/via_json/k4_pro_iso_rgb.json delete mode 100644 keyboards/keychron/k4_pro/via_json/k4_pro_iso_white.json delete mode 100644 keyboards/keychron/k5_max/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k5_max/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k5_max/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k5_max/ansi/rgb/keymaps/infraviolet/config.h delete mode 100644 keyboards/keychron/k5_max/ansi/rgb/keymaps/infraviolet/keymap.c delete mode 100644 keyboards/keychron/k5_max/ansi/rgb/keymaps/infraviolet/rules.mk delete mode 100644 keyboards/keychron/k5_max/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k5_max/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k5_max/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k5_max/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k5_max/ansi/white/config.h delete mode 100644 keyboards/keychron/k5_max/ansi/white/info.json delete mode 100644 keyboards/keychron/k5_max/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k5_max/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k5_max/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k5_max/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k5_max/ansi/white/white.c delete mode 100644 keyboards/keychron/k5_max/board.h delete mode 100644 keyboards/keychron/k5_max/config.h delete mode 100644 keyboards/keychron/k5_max/firmware/keychron_k5_max_ansi_rgb_via.bin delete mode 100644 keyboards/keychron/k5_max/firmware/keychron_k5_max_ansi_white_via.bin delete mode 100644 keyboards/keychron/k5_max/firmware/keychron_k5_max_iso_rgb_via.bin delete mode 100644 keyboards/keychron/k5_max/firmware/keychron_k5_max_iso_white_via.bin delete mode 100644 keyboards/keychron/k5_max/halconf.h delete mode 100644 keyboards/keychron/k5_max/info.json delete mode 100644 keyboards/keychron/k5_max/iso/rgb/config.h delete mode 100644 keyboards/keychron/k5_max/iso/rgb/info.json delete mode 100644 keyboards/keychron/k5_max/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k5_max/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k5_max/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k5_max/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k5_max/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k5_max/iso/white/config.h delete mode 100644 keyboards/keychron/k5_max/iso/white/info.json delete mode 100644 keyboards/keychron/k5_max/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k5_max/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k5_max/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k5_max/iso/white/rules.mk delete mode 100644 keyboards/keychron/k5_max/iso/white/white.c delete mode 100644 keyboards/keychron/k5_max/k5_max.c delete mode 100644 keyboards/keychron/k5_max/mcuconf.h delete mode 100644 keyboards/keychron/k5_max/readme.md delete mode 100644 keyboards/keychron/k5_max/rules.mk delete mode 100644 keyboards/keychron/k5_max/via_json/k5_max_ansi_rgb.json delete mode 100644 keyboards/keychron/k5_max/via_json/k5_max_ansi_white.json delete mode 100644 keyboards/keychron/k5_pro/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k5_pro/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k5_pro/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k5_pro/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k5_pro/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k5_pro/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k5_pro/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k5_pro/ansi/white/config.h delete mode 100644 keyboards/keychron/k5_pro/ansi/white/info.json delete mode 100644 keyboards/keychron/k5_pro/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k5_pro/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k5_pro/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k5_pro/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k5_pro/ansi/white/white.c delete mode 100644 keyboards/keychron/k5_pro/config.h delete mode 100644 keyboards/keychron/k5_pro/halconf.h delete mode 100644 keyboards/keychron/k5_pro/info.json delete mode 100644 keyboards/keychron/k5_pro/iso/rgb/config.h delete mode 100644 keyboards/keychron/k5_pro/iso/rgb/info.json delete mode 100644 keyboards/keychron/k5_pro/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k5_pro/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k5_pro/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k5_pro/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k5_pro/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k5_pro/iso/white/config.h delete mode 100644 keyboards/keychron/k5_pro/iso/white/info.json delete mode 100644 keyboards/keychron/k5_pro/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k5_pro/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k5_pro/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k5_pro/iso/white/rules.mk delete mode 100644 keyboards/keychron/k5_pro/iso/white/white.c delete mode 100644 keyboards/keychron/k5_pro/jis/rgb/config.h delete mode 100644 keyboards/keychron/k5_pro/jis/rgb/info.json delete mode 100644 keyboards/keychron/k5_pro/jis/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k5_pro/jis/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k5_pro/jis/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k5_pro/jis/rgb/rgb.c delete mode 100644 keyboards/keychron/k5_pro/jis/rgb/rules.mk delete mode 100644 keyboards/keychron/k5_pro/jis/white/config.h delete mode 100644 keyboards/keychron/k5_pro/jis/white/info.json delete mode 100644 keyboards/keychron/k5_pro/jis/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k5_pro/jis/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k5_pro/jis/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k5_pro/jis/white/rules.mk delete mode 100644 keyboards/keychron/k5_pro/jis/white/white.c delete mode 100644 keyboards/keychron/k5_pro/k5_pro.c delete mode 100644 keyboards/keychron/k5_pro/k5_pro.h delete mode 100644 keyboards/keychron/k5_pro/matrix.c delete mode 100644 keyboards/keychron/k5_pro/mcuconf.h delete mode 100644 keyboards/keychron/k5_pro/readme.md delete mode 100644 keyboards/keychron/k5_pro/rules.mk delete mode 100644 keyboards/keychron/k5_pro/via_json/k5_pro_ansi_rgb.json delete mode 100644 keyboards/keychron/k5_pro/via_json/k5_pro_ansi_rgb_v1.00.json delete mode 100644 keyboards/keychron/k5_pro/via_json/k5_pro_ansi_white.json delete mode 100644 keyboards/keychron/k5_pro/via_json/k5_pro_ansi_white_v1.00.json delete mode 100644 keyboards/keychron/k5_pro/via_json/k5_pro_iso_rgb.json delete mode 100644 keyboards/keychron/k5_pro/via_json/k5_pro_iso_white.json delete mode 100644 keyboards/keychron/k5_pro/via_json/k5_pro_jis_rgb.json delete mode 100644 keyboards/keychron/k5_pro/via_json/k5_pro_jis_white.json delete mode 100644 keyboards/keychron/k6_pro/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k6_pro/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k6_pro/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k6_pro/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k6_pro/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k6_pro/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k6_pro/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k6_pro/ansi/white/config.h delete mode 100644 keyboards/keychron/k6_pro/ansi/white/info.json delete mode 100644 keyboards/keychron/k6_pro/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k6_pro/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k6_pro/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k6_pro/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k6_pro/ansi/white/white.c delete mode 100644 keyboards/keychron/k6_pro/config.h delete mode 100644 keyboards/keychron/k6_pro/halconf.h delete mode 100644 keyboards/keychron/k6_pro/info.json delete mode 100644 keyboards/keychron/k6_pro/iso/rgb/config.h delete mode 100644 keyboards/keychron/k6_pro/iso/rgb/info.json delete mode 100644 keyboards/keychron/k6_pro/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k6_pro/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k6_pro/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k6_pro/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k6_pro/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k6_pro/iso/white/config.h delete mode 100644 keyboards/keychron/k6_pro/iso/white/info.json delete mode 100644 keyboards/keychron/k6_pro/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k6_pro/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k6_pro/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k6_pro/iso/white/rules.mk delete mode 100644 keyboards/keychron/k6_pro/iso/white/white.c delete mode 100644 keyboards/keychron/k6_pro/jis/rgb/config.h delete mode 100644 keyboards/keychron/k6_pro/jis/rgb/info.json delete mode 100644 keyboards/keychron/k6_pro/jis/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k6_pro/jis/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k6_pro/jis/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k6_pro/jis/rgb/rgb.c delete mode 100644 keyboards/keychron/k6_pro/jis/rgb/rules.mk delete mode 100644 keyboards/keychron/k6_pro/k6_pro.c delete mode 100644 keyboards/keychron/k6_pro/k6_pro.h delete mode 100644 keyboards/keychron/k6_pro/matrix.c delete mode 100644 keyboards/keychron/k6_pro/mcuconf.h delete mode 100644 keyboards/keychron/k6_pro/readme.md delete mode 100644 keyboards/keychron/k6_pro/rules.mk delete mode 100644 keyboards/keychron/k6_pro/via_json/k6_pro_ansi_rgb.json delete mode 100644 keyboards/keychron/k6_pro/via_json/k6_pro_ansi_white.json delete mode 100644 keyboards/keychron/k6_pro/via_json/k6_pro_iso_rgb.json delete mode 100644 keyboards/keychron/k6_pro/via_json/k6_pro_iso_white.json delete mode 100644 keyboards/keychron/k6_pro/via_json/k6_pro_jis_rgb.json delete mode 100644 keyboards/keychron/k7_max/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k7_max/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k7_max/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k7_max/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k7_max/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k7_max/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k7_max/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k7_max/ansi/white/config.h delete mode 100644 keyboards/keychron/k7_max/ansi/white/info.json delete mode 100644 keyboards/keychron/k7_max/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k7_max/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k7_max/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k7_max/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k7_max/ansi/white/white.c delete mode 100644 keyboards/keychron/k7_max/board.h delete mode 100644 keyboards/keychron/k7_max/config.h delete mode 100644 keyboards/keychron/k7_max/firmware/keychron_k7_max_ansi_rgb_via.bin delete mode 100644 keyboards/keychron/k7_max/firmware/keychron_k7_max_ansi_white_via.bin delete mode 100644 keyboards/keychron/k7_max/firmware/keychron_k7_max_iso_rgb_via.bin delete mode 100644 keyboards/keychron/k7_max/firmware/keychron_k7_max_iso_white_via.bin delete mode 100644 keyboards/keychron/k7_max/firmware/keychron_k7_max_jis_rgb_via.bin delete mode 100644 keyboards/keychron/k7_max/firmware/keychron_k7_max_jis_white_via.bin delete mode 100644 keyboards/keychron/k7_max/halconf.h delete mode 100644 keyboards/keychron/k7_max/info.json delete mode 100644 keyboards/keychron/k7_max/iso/rgb/config.h delete mode 100644 keyboards/keychron/k7_max/iso/rgb/info.json delete mode 100644 keyboards/keychron/k7_max/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k7_max/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k7_max/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k7_max/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k7_max/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k7_max/iso/white/config.h delete mode 100644 keyboards/keychron/k7_max/iso/white/info.json delete mode 100644 keyboards/keychron/k7_max/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k7_max/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k7_max/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k7_max/iso/white/rules.mk delete mode 100644 keyboards/keychron/k7_max/iso/white/white.c delete mode 100644 keyboards/keychron/k7_max/jis/rgb/config.h delete mode 100644 keyboards/keychron/k7_max/jis/rgb/info.json delete mode 100644 keyboards/keychron/k7_max/jis/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k7_max/jis/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k7_max/jis/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k7_max/jis/rgb/rgb.c delete mode 100644 keyboards/keychron/k7_max/jis/rgb/rules.mk delete mode 100644 keyboards/keychron/k7_max/jis/white/config.h delete mode 100644 keyboards/keychron/k7_max/jis/white/info.json delete mode 100644 keyboards/keychron/k7_max/jis/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k7_max/jis/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k7_max/jis/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k7_max/jis/white/rules.mk delete mode 100644 keyboards/keychron/k7_max/jis/white/white.c delete mode 100644 keyboards/keychron/k7_max/k7_max.c delete mode 100644 keyboards/keychron/k7_max/mcuconf.h delete mode 100644 keyboards/keychron/k7_max/readme.md delete mode 100644 keyboards/keychron/k7_max/rules.mk delete mode 100644 keyboards/keychron/k7_max/via_json/k7_max_ansi_rgb_v1.0.json delete mode 100644 keyboards/keychron/k7_max/via_json/k7_max_ansi_white_v1.0.json delete mode 100644 keyboards/keychron/k7_max/via_json/k7_max_iso_rgb_v1.0.json delete mode 100644 keyboards/keychron/k7_max/via_json/k7_max_iso_white_v1.0.json delete mode 100644 keyboards/keychron/k7_max/via_json/k7_max_jis_rgb_v1.0.json delete mode 100644 keyboards/keychron/k7_max/via_json/k7_max_jis_white_v1.0.json delete mode 100644 keyboards/keychron/k7_pro/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k7_pro/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k7_pro/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k7_pro/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k7_pro/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k7_pro/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k7_pro/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k7_pro/ansi/white/config.h delete mode 100644 keyboards/keychron/k7_pro/ansi/white/info.json delete mode 100644 keyboards/keychron/k7_pro/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k7_pro/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k7_pro/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k7_pro/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k7_pro/ansi/white/white.c delete mode 100644 keyboards/keychron/k7_pro/config.h delete mode 100644 keyboards/keychron/k7_pro/halconf.h delete mode 100644 keyboards/keychron/k7_pro/info.json delete mode 100644 keyboards/keychron/k7_pro/iso/rgb/config.h delete mode 100644 keyboards/keychron/k7_pro/iso/rgb/info.json delete mode 100644 keyboards/keychron/k7_pro/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k7_pro/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k7_pro/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k7_pro/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k7_pro/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k7_pro/iso/white/config.h delete mode 100644 keyboards/keychron/k7_pro/iso/white/info.json delete mode 100644 keyboards/keychron/k7_pro/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k7_pro/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k7_pro/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k7_pro/iso/white/rules.mk delete mode 100644 keyboards/keychron/k7_pro/iso/white/white.c delete mode 100644 keyboards/keychron/k7_pro/k7_pro.c delete mode 100644 keyboards/keychron/k7_pro/k7_pro.h delete mode 100644 keyboards/keychron/k7_pro/matrix.c delete mode 100644 keyboards/keychron/k7_pro/mcuconf.h delete mode 100644 keyboards/keychron/k7_pro/readme.md delete mode 100644 keyboards/keychron/k7_pro/rules.mk delete mode 100644 keyboards/keychron/k7_pro/via_json/k7_pro_ansi_rgb.json delete mode 100644 keyboards/keychron/k7_pro/via_json/k7_pro_ansi_white.json delete mode 100644 keyboards/keychron/k7_pro/via_json/k7_pro_iso_rgb.json delete mode 100644 keyboards/keychron/k7_pro/via_json/k7_pro_iso_white.json delete mode 100644 keyboards/keychron/k8_max/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k8_max/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k8_max/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k8_max/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k8_max/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k8_max/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k8_max/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k8_max/ansi/white/config.h delete mode 100644 keyboards/keychron/k8_max/ansi/white/info.json delete mode 100644 keyboards/keychron/k8_max/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k8_max/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k8_max/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k8_max/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k8_max/ansi/white/white.c delete mode 100644 keyboards/keychron/k8_max/board.h delete mode 100644 keyboards/keychron/k8_max/config.h delete mode 100644 keyboards/keychron/k8_max/firmware/keychron_k8_max_ansi_rgb_via.bin delete mode 100644 keyboards/keychron/k8_max/firmware/keychron_k8_max_ansi_white_via.bin delete mode 100644 keyboards/keychron/k8_max/firmware/keychron_k8_max_iso_rgb_via.bin delete mode 100644 keyboards/keychron/k8_max/firmware/keychron_k8_max_iso_white_via.bin delete mode 100644 keyboards/keychron/k8_max/firmware/keychron_k8_max_jis_rgb_via.bin delete mode 100644 keyboards/keychron/k8_max/firmware/keychron_k8_max_jis_white_via.bin delete mode 100644 keyboards/keychron/k8_max/halconf.h delete mode 100644 keyboards/keychron/k8_max/info.json delete mode 100644 keyboards/keychron/k8_max/iso/rgb/config.h delete mode 100644 keyboards/keychron/k8_max/iso/rgb/info.json delete mode 100644 keyboards/keychron/k8_max/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k8_max/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k8_max/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k8_max/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k8_max/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k8_max/iso/white/config.h delete mode 100644 keyboards/keychron/k8_max/iso/white/info.json delete mode 100644 keyboards/keychron/k8_max/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k8_max/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k8_max/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k8_max/iso/white/rules.mk delete mode 100644 keyboards/keychron/k8_max/iso/white/white.c delete mode 100644 keyboards/keychron/k8_max/jis/rgb/config.h delete mode 100644 keyboards/keychron/k8_max/jis/rgb/info.json delete mode 100644 keyboards/keychron/k8_max/jis/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k8_max/jis/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k8_max/jis/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k8_max/jis/rgb/rgb.c delete mode 100644 keyboards/keychron/k8_max/jis/rgb/rules.mk delete mode 100644 keyboards/keychron/k8_max/jis/white/config.h delete mode 100644 keyboards/keychron/k8_max/jis/white/info.json delete mode 100644 keyboards/keychron/k8_max/jis/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k8_max/jis/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k8_max/jis/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k8_max/jis/white/rules.mk delete mode 100644 keyboards/keychron/k8_max/jis/white/white.c delete mode 100644 keyboards/keychron/k8_max/k8_max.c delete mode 100644 keyboards/keychron/k8_max/mcuconf.h delete mode 100644 keyboards/keychron/k8_max/readme.md delete mode 100644 keyboards/keychron/k8_max/rules.mk delete mode 100644 keyboards/keychron/k8_max/via_json/k8_max_ansi_rgb.json delete mode 100644 keyboards/keychron/k8_max/via_json/k8_max_ansi_white.json delete mode 100644 keyboards/keychron/k8_max/via_json/k8_max_iso_rgb.json delete mode 100644 keyboards/keychron/k8_max/via_json/k8_max_iso_white.json delete mode 100644 keyboards/keychron/k8_max/via_json/k8_max_jis_rgb.json delete mode 100644 keyboards/keychron/k8_max/via_json/k8_max_jis_white.json delete mode 100644 keyboards/keychron/k8_pro/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k8_pro/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k8_pro/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k8_pro/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k8_pro/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k8_pro/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k8_pro/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k8_pro/ansi/white/config.h delete mode 100644 keyboards/keychron/k8_pro/ansi/white/info.json delete mode 100644 keyboards/keychron/k8_pro/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k8_pro/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k8_pro/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k8_pro/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k8_pro/ansi/white/white.c delete mode 100644 keyboards/keychron/k8_pro/config.h delete mode 100644 keyboards/keychron/k8_pro/halconf.h delete mode 100644 keyboards/keychron/k8_pro/info.json delete mode 100644 keyboards/keychron/k8_pro/iso/rgb/config.h delete mode 100644 keyboards/keychron/k8_pro/iso/rgb/info.json delete mode 100644 keyboards/keychron/k8_pro/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k8_pro/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k8_pro/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k8_pro/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k8_pro/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k8_pro/iso/white/config.h delete mode 100644 keyboards/keychron/k8_pro/iso/white/info.json delete mode 100644 keyboards/keychron/k8_pro/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k8_pro/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k8_pro/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k8_pro/iso/white/rules.mk delete mode 100644 keyboards/keychron/k8_pro/iso/white/white.c delete mode 100644 keyboards/keychron/k8_pro/jis/rgb/config.h delete mode 100644 keyboards/keychron/k8_pro/jis/rgb/info.json delete mode 100644 keyboards/keychron/k8_pro/jis/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k8_pro/jis/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k8_pro/jis/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k8_pro/jis/rgb/rgb.c delete mode 100644 keyboards/keychron/k8_pro/jis/rgb/rules.mk delete mode 100644 keyboards/keychron/k8_pro/jis/white/config.h delete mode 100644 keyboards/keychron/k8_pro/jis/white/info.json delete mode 100644 keyboards/keychron/k8_pro/jis/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k8_pro/jis/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k8_pro/jis/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k8_pro/jis/white/rules.mk delete mode 100644 keyboards/keychron/k8_pro/jis/white/white.c delete mode 100644 keyboards/keychron/k8_pro/k8_pro.c delete mode 100644 keyboards/keychron/k8_pro/k8_pro.h delete mode 100644 keyboards/keychron/k8_pro/matrix.c delete mode 100644 keyboards/keychron/k8_pro/mcuconf.h delete mode 100644 keyboards/keychron/k8_pro/readme.md delete mode 100644 keyboards/keychron/k8_pro/rules.mk delete mode 100644 keyboards/keychron/k8_pro/via_json/k8_pro_ansi_rgb.json delete mode 100644 keyboards/keychron/k8_pro/via_json/k8_pro_ansi_white.json delete mode 100644 keyboards/keychron/k8_pro/via_json/k8_pro_iso_rgb.json delete mode 100644 keyboards/keychron/k8_pro/via_json/k8_pro_iso_white.json delete mode 100644 keyboards/keychron/k8_pro/via_json/k8_pro_jis_rgb.json delete mode 100644 keyboards/keychron/k8_pro/via_json/k8_pro_jis_white.json delete mode 100644 keyboards/keychron/k9_pro/ansi/info.json delete mode 100644 keyboards/keychron/k9_pro/ansi/rgb/config.h delete mode 100644 keyboards/keychron/k9_pro/ansi/rgb/info.json delete mode 100644 keyboards/keychron/k9_pro/ansi/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k9_pro/ansi/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k9_pro/ansi/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k9_pro/ansi/rgb/rgb.c delete mode 100644 keyboards/keychron/k9_pro/ansi/rgb/rules.mk delete mode 100644 keyboards/keychron/k9_pro/ansi/white/config.h delete mode 100644 keyboards/keychron/k9_pro/ansi/white/info.json delete mode 100644 keyboards/keychron/k9_pro/ansi/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k9_pro/ansi/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k9_pro/ansi/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k9_pro/ansi/white/rules.mk delete mode 100644 keyboards/keychron/k9_pro/ansi/white/white.c delete mode 100644 keyboards/keychron/k9_pro/config.h delete mode 100644 keyboards/keychron/k9_pro/halconf.h delete mode 100644 keyboards/keychron/k9_pro/info.json delete mode 100644 keyboards/keychron/k9_pro/iso/info.json delete mode 100644 keyboards/keychron/k9_pro/iso/rgb/config.h delete mode 100644 keyboards/keychron/k9_pro/iso/rgb/info.json delete mode 100644 keyboards/keychron/k9_pro/iso/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k9_pro/iso/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k9_pro/iso/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k9_pro/iso/rgb/rgb.c delete mode 100644 keyboards/keychron/k9_pro/iso/rgb/rules.mk delete mode 100644 keyboards/keychron/k9_pro/iso/white/config.h delete mode 100644 keyboards/keychron/k9_pro/iso/white/info.json delete mode 100644 keyboards/keychron/k9_pro/iso/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k9_pro/iso/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k9_pro/iso/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k9_pro/iso/white/rules.mk delete mode 100644 keyboards/keychron/k9_pro/iso/white/white.c delete mode 100644 keyboards/keychron/k9_pro/jis/info.json delete mode 100644 keyboards/keychron/k9_pro/jis/rgb/config.h delete mode 100644 keyboards/keychron/k9_pro/jis/rgb/info.json delete mode 100644 keyboards/keychron/k9_pro/jis/rgb/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k9_pro/jis/rgb/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k9_pro/jis/rgb/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k9_pro/jis/rgb/rgb.c delete mode 100644 keyboards/keychron/k9_pro/jis/rgb/rules.mk delete mode 100644 keyboards/keychron/k9_pro/jis/white/config.h delete mode 100644 keyboards/keychron/k9_pro/jis/white/info.json delete mode 100644 keyboards/keychron/k9_pro/jis/white/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/k9_pro/jis/white/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/k9_pro/jis/white/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/k9_pro/jis/white/rules.mk delete mode 100644 keyboards/keychron/k9_pro/jis/white/white.c delete mode 100644 keyboards/keychron/k9_pro/k9_pro.c delete mode 100644 keyboards/keychron/k9_pro/k9_pro.h delete mode 100644 keyboards/keychron/k9_pro/matrix.c delete mode 100644 keyboards/keychron/k9_pro/mcuconf.h delete mode 100644 keyboards/keychron/k9_pro/readme.md delete mode 100644 keyboards/keychron/k9_pro/rules.mk delete mode 100644 keyboards/keychron/q0_max/board.h delete mode 100644 keyboards/keychron/q0_max/config.h delete mode 100644 keyboards/keychron/q0_max/encoder/config.h delete mode 100644 keyboards/keychron/q0_max/encoder/encoder.c delete mode 100644 keyboards/keychron/q0_max/encoder/info.json delete mode 100644 keyboards/keychron/q0_max/encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q0_max/encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q0_max/encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q0_max/encoder/rules.mk delete mode 100644 keyboards/keychron/q0_max/firmware/keychron_q0_max_encoder_via.bin delete mode 100644 keyboards/keychron/q0_max/halconf.h delete mode 100644 keyboards/keychron/q0_max/info.json delete mode 100644 keyboards/keychron/q0_max/mcuconf.h delete mode 100644 keyboards/keychron/q0_max/q0_max.c delete mode 100644 keyboards/keychron/q0_max/readme.md delete mode 100644 keyboards/keychron/q0_max/rules.mk delete mode 100644 keyboards/keychron/q0_max/via_json/q0_max_encoder.json delete mode 100644 keyboards/keychron/q10_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q10_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q10_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q10_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q10_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q10_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q10_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q10_max/board.h delete mode 100644 keyboards/keychron/q10_max/config.h delete mode 100644 keyboards/keychron/q10_max/firmware/keychron_q10_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/q10_max/halconf.h delete mode 100644 keyboards/keychron/q10_max/info.json delete mode 100644 keyboards/keychron/q10_max/iso_encoder/config.h delete mode 100644 keyboards/keychron/q10_max/iso_encoder/info.json delete mode 100644 keyboards/keychron/q10_max/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/q10_max/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q10_max/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q10_max/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q10_max/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/q10_max/mcuconf.h delete mode 100644 keyboards/keychron/q10_max/q10_max.c delete mode 100644 keyboards/keychron/q10_max/readme.md delete mode 100644 keyboards/keychron/q10_max/rules.mk delete mode 100644 keyboards/keychron/q10_max/via_json/q10_max_ansi_encoder.json delete mode 100644 keyboards/keychron/q10_max/via_json/q10_max_iso_encoder.json delete mode 100644 keyboards/keychron/q10_pro/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q10_pro/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q10_pro/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q10_pro/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q10_pro/ansi_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q10_pro/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q10_pro/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q10_pro/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q10_pro/config.h delete mode 100644 keyboards/keychron/q10_pro/halconf.h delete mode 100644 keyboards/keychron/q10_pro/info.json delete mode 100644 keyboards/keychron/q10_pro/iso_encoder/config.h delete mode 100644 keyboards/keychron/q10_pro/iso_encoder/info.json delete mode 100644 keyboards/keychron/q10_pro/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/q10_pro/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q10_pro/iso_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q10_pro/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q10_pro/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q10_pro/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/q10_pro/mcuconf.h delete mode 100644 keyboards/keychron/q10_pro/q10_pro.c delete mode 100644 keyboards/keychron/q10_pro/q10_pro.h delete mode 100644 keyboards/keychron/q10_pro/readme.md delete mode 100644 keyboards/keychron/q10_pro/rules.mk delete mode 100644 keyboards/keychron/q10_pro/via_json/q10_pro_ansi_encoder.json delete mode 100644 keyboards/keychron/q10_pro/via_json/q10_pro_iso_encoder.json delete mode 100644 keyboards/keychron/q12_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q12_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q12_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q12_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q12_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q12_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q12_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q12_max/board.h delete mode 100644 keyboards/keychron/q12_max/config.h delete mode 100644 keyboards/keychron/q12_max/firmware/keychron_q12_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/q12_max/halconf.h delete mode 100644 keyboards/keychron/q12_max/info.json delete mode 100644 keyboards/keychron/q12_max/mcuconf.h delete mode 100644 keyboards/keychron/q12_max/q12_max.c delete mode 100644 keyboards/keychron/q12_max/readme.md delete mode 100644 keyboards/keychron/q12_max/rules.mk delete mode 100644 keyboards/keychron/q12_max/via_json/q12_max_ansi_knob.json delete mode 100644 keyboards/keychron/q13_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q13_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q13_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q13_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q13_max/ansi_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q13_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q13_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q13_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q13_max/board.h delete mode 100644 keyboards/keychron/q13_max/config.h delete mode 100644 keyboards/keychron/q13_max/firmware/keychron_q13_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/q13_max/halconf.h delete mode 100644 keyboards/keychron/q13_max/info.json delete mode 100644 keyboards/keychron/q13_max/mcuconf.h delete mode 100644 keyboards/keychron/q13_max/q13_max.c delete mode 100644 keyboards/keychron/q13_max/readme.md delete mode 100644 keyboards/keychron/q13_max/rules.mk delete mode 100644 keyboards/keychron/q13_max/via_json/q13_max_ansi_encoder.json delete mode 100644 keyboards/keychron/q13_pro/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q13_pro/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q13_pro/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q13_pro/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q13_pro/ansi_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q13_pro/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q13_pro/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q13_pro/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q13_pro/config.h delete mode 100644 keyboards/keychron/q13_pro/halconf.h delete mode 100644 keyboards/keychron/q13_pro/info.json delete mode 100644 keyboards/keychron/q13_pro/iso_encoder/config.h delete mode 100644 keyboards/keychron/q13_pro/iso_encoder/info.json delete mode 100644 keyboards/keychron/q13_pro/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/q13_pro/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q13_pro/iso_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q13_pro/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q13_pro/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q13_pro/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/q13_pro/mcuconf.h delete mode 100644 keyboards/keychron/q13_pro/q13_pro.c delete mode 100644 keyboards/keychron/q13_pro/q13_pro.h delete mode 100644 keyboards/keychron/q13_pro/readme.md delete mode 100644 keyboards/keychron/q13_pro/rules.mk delete mode 100644 keyboards/keychron/q13_pro/via_json/q13_pro_ansi_encoder.json delete mode 100644 keyboards/keychron/q13_pro/via_json/q13_pro_iso_encoder.json delete mode 100644 keyboards/keychron/q14_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q14_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q14_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q14_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q14_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q14_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q14_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q14_max/board.h delete mode 100644 keyboards/keychron/q14_max/config.h delete mode 100644 keyboards/keychron/q14_max/firmware/keychron_q14_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/q14_max/halconf.h delete mode 100644 keyboards/keychron/q14_max/info.json delete mode 100644 keyboards/keychron/q14_max/mcuconf.h delete mode 100644 keyboards/keychron/q14_max/q14_max.c delete mode 100644 keyboards/keychron/q14_max/readme.md delete mode 100644 keyboards/keychron/q14_max/rules.mk delete mode 100644 keyboards/keychron/q14_max/via_json/q14_max_ansi_encoder.json delete mode 100644 keyboards/keychron/q14_pro/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q14_pro/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q14_pro/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q14_pro/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q14_pro/ansi_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q14_pro/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q14_pro/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q14_pro/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q14_pro/config.h delete mode 100644 keyboards/keychron/q14_pro/halconf.h delete mode 100644 keyboards/keychron/q14_pro/info.json delete mode 100644 keyboards/keychron/q14_pro/iso_encoder/config.h delete mode 100644 keyboards/keychron/q14_pro/iso_encoder/info.json delete mode 100644 keyboards/keychron/q14_pro/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/q14_pro/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q14_pro/iso_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q14_pro/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q14_pro/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q14_pro/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/q14_pro/mcuconf.h delete mode 100644 keyboards/keychron/q14_pro/q14_pro.c delete mode 100644 keyboards/keychron/q14_pro/q14_pro.h delete mode 100644 keyboards/keychron/q14_pro/readme.md delete mode 100644 keyboards/keychron/q14_pro/rules.mk delete mode 100644 keyboards/keychron/q14_pro/via_json/q14_pro_ansi_encoder.json delete mode 100644 keyboards/keychron/q14_pro/via_json/q14_pro_iso_encoder.json delete mode 100644 keyboards/keychron/q15_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q15_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q15_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q15_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q15_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q15_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q15_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q15_max/board.h delete mode 100644 keyboards/keychron/q15_max/config.h delete mode 100644 keyboards/keychron/q15_max/firmware/keychron_q15_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/q15_max/halconf.h delete mode 100644 keyboards/keychron/q15_max/info.json delete mode 100644 keyboards/keychron/q15_max/mcuconf.h delete mode 100644 keyboards/keychron/q15_max/q15_max.c delete mode 100644 keyboards/keychron/q15_max/readme.md delete mode 100644 keyboards/keychron/q15_max/rules.mk delete mode 100644 keyboards/keychron/q15_max/via_json/q15_max_ansi_encoder.json delete mode 100644 keyboards/keychron/q1_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q1_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q1_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q1_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q1_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q1_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q1_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q1_max/board.h delete mode 100644 keyboards/keychron/q1_max/config.h delete mode 100644 keyboards/keychron/q1_max/firmware/keychron_q1_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/q1_max/firmware/keychron_q1_max_iso_encoder_via.bin delete mode 100644 keyboards/keychron/q1_max/firmware/keychron_q1_max_jis_encoder_via.bin delete mode 100644 keyboards/keychron/q1_max/halconf.h delete mode 100644 keyboards/keychron/q1_max/info.json delete mode 100644 keyboards/keychron/q1_max/iso_encoder/config.h delete mode 100644 keyboards/keychron/q1_max/iso_encoder/info.json delete mode 100644 keyboards/keychron/q1_max/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/q1_max/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q1_max/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q1_max/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q1_max/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/q1_max/jis_encoder/config.h delete mode 100644 keyboards/keychron/q1_max/jis_encoder/info.json delete mode 100644 keyboards/keychron/q1_max/jis_encoder/jis_encoder.c delete mode 100644 keyboards/keychron/q1_max/jis_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q1_max/jis_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q1_max/jis_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q1_max/jis_encoder/rules.mk delete mode 100644 keyboards/keychron/q1_max/mcuconf.h delete mode 100644 keyboards/keychron/q1_max/q1_max.c delete mode 100644 keyboards/keychron/q1_max/readme.md delete mode 100644 keyboards/keychron/q1_max/rules.mk delete mode 100644 keyboards/keychron/q1_max/via_json/q1_max_ansi_encoder.json delete mode 100644 keyboards/keychron/q1_max/via_json/q1_max_iso_encoder.json delete mode 100644 keyboards/keychron/q1_max/via_json/q1_max_jis_encoder.json delete mode 100644 keyboards/keychron/q1_pro/ansi_knob/ansi_knob.c delete mode 100644 keyboards/keychron/q1_pro/ansi_knob/config.h delete mode 100644 keyboards/keychron/q1_pro/ansi_knob/info.json delete mode 100644 keyboards/keychron/q1_pro/ansi_knob/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q1_pro/ansi_knob/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q1_pro/ansi_knob/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q1_pro/ansi_knob/rules.mk delete mode 100644 keyboards/keychron/q1_pro/config.h delete mode 100644 keyboards/keychron/q1_pro/halconf.h delete mode 100644 keyboards/keychron/q1_pro/info.json delete mode 100644 keyboards/keychron/q1_pro/iso_knob/config.h delete mode 100644 keyboards/keychron/q1_pro/iso_knob/info.json delete mode 100644 keyboards/keychron/q1_pro/iso_knob/iso_knob.c delete mode 100644 keyboards/keychron/q1_pro/iso_knob/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q1_pro/iso_knob/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q1_pro/iso_knob/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q1_pro/iso_knob/rules.mk delete mode 100644 keyboards/keychron/q1_pro/jis_encoder/config.h delete mode 100644 keyboards/keychron/q1_pro/jis_encoder/info.json delete mode 100644 keyboards/keychron/q1_pro/jis_encoder/jis_encoder.c delete mode 100644 keyboards/keychron/q1_pro/jis_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q1_pro/jis_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q1_pro/jis_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q1_pro/jis_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q1_pro/jis_encoder/rules.mk delete mode 100644 keyboards/keychron/q1_pro/matrix.c delete mode 100644 keyboards/keychron/q1_pro/mcuconf.h delete mode 100644 keyboards/keychron/q1_pro/q1_pro.c delete mode 100644 keyboards/keychron/q1_pro/q1_pro.h delete mode 100644 keyboards/keychron/q1_pro/readme.md delete mode 100644 keyboards/keychron/q1_pro/rules.mk delete mode 100644 keyboards/keychron/q1_pro/via_json/q1_pro_ansi_knob.json delete mode 100644 keyboards/keychron/q1_pro/via_json/q1_pro_iso_knob.json delete mode 100644 keyboards/keychron/q2_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q2_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q2_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q2_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q2_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q2_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q2_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q2_max/board.h delete mode 100644 keyboards/keychron/q2_max/config.h delete mode 100644 keyboards/keychron/q2_max/firmware/keychron_q2_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/q2_max/firmware/keychron_q2_max_iso_encoder_via.bin delete mode 100644 keyboards/keychron/q2_max/halconf.h delete mode 100644 keyboards/keychron/q2_max/info.json delete mode 100644 keyboards/keychron/q2_max/iso_encoder/config.h delete mode 100644 keyboards/keychron/q2_max/iso_encoder/info.json delete mode 100644 keyboards/keychron/q2_max/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/q2_max/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q2_max/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q2_max/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q2_max/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/q2_max/mcuconf.h delete mode 100644 keyboards/keychron/q2_max/q2_max.c delete mode 100644 keyboards/keychron/q2_max/readme.md delete mode 100644 keyboards/keychron/q2_max/rules.mk delete mode 100644 keyboards/keychron/q2_max/via_json/q2_ansi_encoder.json delete mode 100644 keyboards/keychron/q2_pro/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q2_pro/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q2_pro/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q2_pro/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q2_pro/ansi_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q2_pro/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q2_pro/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q2_pro/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q2_pro/config.h delete mode 100644 keyboards/keychron/q2_pro/halconf.h delete mode 100644 keyboards/keychron/q2_pro/info.json delete mode 100644 keyboards/keychron/q2_pro/iso_encoder/config.h delete mode 100644 keyboards/keychron/q2_pro/iso_encoder/info.json delete mode 100644 keyboards/keychron/q2_pro/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/q2_pro/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q2_pro/iso_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q2_pro/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q2_pro/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q2_pro/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/q2_pro/matrix.c delete mode 100644 keyboards/keychron/q2_pro/mcuconf.h delete mode 100644 keyboards/keychron/q2_pro/q2_pro.c delete mode 100644 keyboards/keychron/q2_pro/q2_pro.h delete mode 100644 keyboards/keychron/q2_pro/readme.md delete mode 100644 keyboards/keychron/q2_pro/rules.mk delete mode 100644 keyboards/keychron/q2_pro/via_json/q2_pro_ansi_encoder.json delete mode 100644 keyboards/keychron/q2_pro/via_json/q2_pro_iso_encoder.json delete mode 100644 keyboards/keychron/q3_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q3_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q3_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q3_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q3_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q3_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q3_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q3_max/board.h delete mode 100644 keyboards/keychron/q3_max/config.h delete mode 100644 keyboards/keychron/q3_max/firmware/keychron_q3_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/q3_max/firmware/keychron_q3_max_iso_encoder_via.bin delete mode 100644 keyboards/keychron/q3_max/halconf.h delete mode 100644 keyboards/keychron/q3_max/info.json delete mode 100644 keyboards/keychron/q3_max/iso_encoder/config.h delete mode 100644 keyboards/keychron/q3_max/iso_encoder/info.json delete mode 100644 keyboards/keychron/q3_max/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/q3_max/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q3_max/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q3_max/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q3_max/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/q3_max/mcuconf.h delete mode 100644 keyboards/keychron/q3_max/q3_max.c delete mode 100644 keyboards/keychron/q3_max/readme.md delete mode 100644 keyboards/keychron/q3_max/rules.mk delete mode 100644 keyboards/keychron/q3_max/via_json/q3_max_ansi_encoder.json delete mode 100644 keyboards/keychron/q3_max/via_json/q3_max_iso_encoder.json delete mode 100644 keyboards/keychron/q3_pro/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q3_pro/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q3_pro/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q3_pro/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q3_pro/ansi_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q3_pro/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q3_pro/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q3_pro/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q3_pro/ansi_encoder_se/ansi_encoder_se.c delete mode 100644 keyboards/keychron/q3_pro/ansi_encoder_se/config.h delete mode 100644 keyboards/keychron/q3_pro/ansi_encoder_se/info.json delete mode 100644 keyboards/keychron/q3_pro/ansi_encoder_se/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q3_pro/ansi_encoder_se/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q3_pro/ansi_encoder_se/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q3_pro/ansi_encoder_se/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q3_pro/ansi_encoder_se/rules.mk delete mode 100644 keyboards/keychron/q3_pro/config.h delete mode 100644 keyboards/keychron/q3_pro/halconf.h delete mode 100644 keyboards/keychron/q3_pro/info.json delete mode 100644 keyboards/keychron/q3_pro/iso_encoder/config.h delete mode 100644 keyboards/keychron/q3_pro/iso_encoder/info.json delete mode 100644 keyboards/keychron/q3_pro/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/q3_pro/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q3_pro/iso_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q3_pro/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q3_pro/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q3_pro/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/q3_pro/iso_encoder_se/config.h delete mode 100644 keyboards/keychron/q3_pro/iso_encoder_se/info.json delete mode 100644 keyboards/keychron/q3_pro/iso_encoder_se/iso_encoder_se.c delete mode 100644 keyboards/keychron/q3_pro/iso_encoder_se/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q3_pro/iso_encoder_se/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q3_pro/iso_encoder_se/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q3_pro/iso_encoder_se/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q3_pro/iso_encoder_se/rules.mk delete mode 100644 keyboards/keychron/q3_pro/jis_encoder_se/config.h delete mode 100644 keyboards/keychron/q3_pro/jis_encoder_se/info.json delete mode 100644 keyboards/keychron/q3_pro/jis_encoder_se/jis_encoder_se.c delete mode 100644 keyboards/keychron/q3_pro/jis_encoder_se/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q3_pro/jis_encoder_se/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q3_pro/jis_encoder_se/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q3_pro/jis_encoder_se/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q3_pro/jis_encoder_se/rules.mk delete mode 100644 keyboards/keychron/q3_pro/matrix.c delete mode 100644 keyboards/keychron/q3_pro/mcuconf.h delete mode 100644 keyboards/keychron/q3_pro/q3_pro.c delete mode 100644 keyboards/keychron/q3_pro/q3_pro.h delete mode 100644 keyboards/keychron/q3_pro/readme.md delete mode 100644 keyboards/keychron/q3_pro/rules.mk delete mode 100644 keyboards/keychron/q3_pro/via_json/q3_pro_ansi_encoder_v1.json delete mode 100644 keyboards/keychron/q3_pro/via_json/q3_pro_ansi_encoder_v2.json delete mode 100644 keyboards/keychron/q3_pro/via_json/q3_pro_iso_encoder_v1.json delete mode 100644 keyboards/keychron/q4_pro/ansi/ansi.c delete mode 100644 keyboards/keychron/q4_pro/ansi/config.h delete mode 100644 keyboards/keychron/q4_pro/ansi/info.json delete mode 100644 keyboards/keychron/q4_pro/ansi/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q4_pro/ansi/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q4_pro/ansi/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q4_pro/ansi/rules.mk delete mode 100644 keyboards/keychron/q4_pro/config.h delete mode 100644 keyboards/keychron/q4_pro/halconf.h delete mode 100644 keyboards/keychron/q4_pro/info.json delete mode 100644 keyboards/keychron/q4_pro/iso/config.h delete mode 100644 keyboards/keychron/q4_pro/iso/info.json delete mode 100644 keyboards/keychron/q4_pro/iso/iso.c delete mode 100644 keyboards/keychron/q4_pro/iso/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q4_pro/iso/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q4_pro/iso/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q4_pro/iso/rules.mk delete mode 100644 keyboards/keychron/q4_pro/mcuconf.h delete mode 100644 keyboards/keychron/q4_pro/q4_pro.c delete mode 100644 keyboards/keychron/q4_pro/q4_pro.h delete mode 100644 keyboards/keychron/q4_pro/readme.md delete mode 100644 keyboards/keychron/q4_pro/rules.mk delete mode 100644 keyboards/keychron/q4_pro/via_json/q4_pro_ansi_rgb.json delete mode 100644 keyboards/keychron/q4_pro/via_json/q4_pro_iso_rgb.json delete mode 100644 keyboards/keychron/q5_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q5_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q5_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q5_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q5_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q5_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q5_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q5_max/board.h delete mode 100644 keyboards/keychron/q5_max/config.h delete mode 100644 keyboards/keychron/q5_max/firmware/keychron_q5_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/q5_max/halconf.h delete mode 100644 keyboards/keychron/q5_max/info.json delete mode 100644 keyboards/keychron/q5_max/iso_encoder/config.h delete mode 100644 keyboards/keychron/q5_max/iso_encoder/info.json delete mode 100644 keyboards/keychron/q5_max/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/q5_max/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q5_max/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q5_max/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q5_max/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/q5_max/mcuconf.h delete mode 100644 keyboards/keychron/q5_max/q5_max.c delete mode 100644 keyboards/keychron/q5_max/readme.md delete mode 100644 keyboards/keychron/q5_max/rules.mk delete mode 100644 keyboards/keychron/q5_max/via_json/q5_max_ansi_encoder.json delete mode 100644 keyboards/keychron/q5_max/via_json/q5_max_iso_encoder.json delete mode 100644 keyboards/keychron/q5_pro/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q5_pro/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q5_pro/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q5_pro/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q5_pro/ansi_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q5_pro/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q5_pro/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q5_pro/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q5_pro/config.h delete mode 100644 keyboards/keychron/q5_pro/halconf.h delete mode 100644 keyboards/keychron/q5_pro/info.json delete mode 100644 keyboards/keychron/q5_pro/iso_encoder/config.h delete mode 100644 keyboards/keychron/q5_pro/iso_encoder/info.json delete mode 100644 keyboards/keychron/q5_pro/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/q5_pro/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q5_pro/iso_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q5_pro/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q5_pro/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q5_pro/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/q5_pro/mcuconf.h delete mode 100644 keyboards/keychron/q5_pro/q5_pro.c delete mode 100644 keyboards/keychron/q5_pro/q5_pro.h delete mode 100644 keyboards/keychron/q5_pro/readme.md delete mode 100644 keyboards/keychron/q5_pro/rules.mk delete mode 100644 keyboards/keychron/q5_pro/via_json/q5_pro_ansi_encoder.json delete mode 100644 keyboards/keychron/q5_pro/via_json/q5_pro_iso_encoder.json delete mode 100644 keyboards/keychron/q60_max/ansi/ansi.c delete mode 100644 keyboards/keychron/q60_max/ansi/config.h delete mode 100644 keyboards/keychron/q60_max/ansi/info.json delete mode 100644 keyboards/keychron/q60_max/ansi/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q60_max/ansi/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q60_max/ansi/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q60_max/ansi/rules.mk delete mode 100644 keyboards/keychron/q60_max/board.h delete mode 100644 keyboards/keychron/q60_max/config.h delete mode 100644 keyboards/keychron/q60_max/firmware/keychron_q60_max_ansi_via.bin delete mode 100644 keyboards/keychron/q60_max/halconf.h delete mode 100644 keyboards/keychron/q60_max/info.json delete mode 100644 keyboards/keychron/q60_max/mcuconf.h delete mode 100644 keyboards/keychron/q60_max/q60_max.c delete mode 100644 keyboards/keychron/q60_max/readme.md delete mode 100644 keyboards/keychron/q60_max/rules.mk delete mode 100644 keyboards/keychron/q60_max/via_json/q60_max_ansi.json delete mode 100644 keyboards/keychron/q65_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q65_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q65_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q65_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q65_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q65_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q65_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q65_max/board.h delete mode 100644 keyboards/keychron/q65_max/config.h delete mode 100644 keyboards/keychron/q65_max/firmware/keychron_q65_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/q65_max/halconf.h delete mode 100644 keyboards/keychron/q65_max/info.json delete mode 100644 keyboards/keychron/q65_max/mcuconf.h delete mode 100644 keyboards/keychron/q65_max/q65_max.c delete mode 100644 keyboards/keychron/q65_max/readme.md delete mode 100644 keyboards/keychron/q65_max/rules.mk delete mode 100644 keyboards/keychron/q65_max/via_json/q65_max_ansi_encoder.json delete mode 100644 keyboards/keychron/q6_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q6_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q6_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q6_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q6_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q6_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q6_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q6_max/board.h delete mode 100644 keyboards/keychron/q6_max/config.h delete mode 100644 keyboards/keychron/q6_max/firmware/keychron_q6_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/q6_max/firmware/keychron_q6_max_iso_encoder_via.bin delete mode 100644 keyboards/keychron/q6_max/halconf.h delete mode 100644 keyboards/keychron/q6_max/info.json delete mode 100644 keyboards/keychron/q6_max/iso_encoder/config.h delete mode 100644 keyboards/keychron/q6_max/iso_encoder/info.json delete mode 100644 keyboards/keychron/q6_max/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/q6_max/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q6_max/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q6_max/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q6_max/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/q6_max/jis_encoder/config.h delete mode 100644 keyboards/keychron/q6_max/jis_encoder/info.json delete mode 100644 keyboards/keychron/q6_max/jis_encoder/jis_encoder.c delete mode 100644 keyboards/keychron/q6_max/jis_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q6_max/jis_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q6_max/jis_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q6_max/jis_encoder/rules.mk delete mode 100644 keyboards/keychron/q6_max/mcuconf.h delete mode 100644 keyboards/keychron/q6_max/q6_max.c delete mode 100644 keyboards/keychron/q6_max/readme.md delete mode 100644 keyboards/keychron/q6_max/rules.mk delete mode 100644 keyboards/keychron/q6_max/via_json/q6_max_ansi_encoder.json delete mode 100644 keyboards/keychron/q6_pro/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q6_pro/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q6_pro/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q6_pro/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q6_pro/ansi_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q6_pro/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q6_pro/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q6_pro/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q6_pro/config.h delete mode 100644 keyboards/keychron/q6_pro/halconf.h delete mode 100644 keyboards/keychron/q6_pro/info.json delete mode 100644 keyboards/keychron/q6_pro/iso_encoder/config.h delete mode 100644 keyboards/keychron/q6_pro/iso_encoder/info.json delete mode 100644 keyboards/keychron/q6_pro/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/q6_pro/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q6_pro/iso_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q6_pro/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q6_pro/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q6_pro/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/q6_pro/mcuconf.h delete mode 100644 keyboards/keychron/q6_pro/q6_pro.c delete mode 100644 keyboards/keychron/q6_pro/q6_pro.h delete mode 100644 keyboards/keychron/q6_pro/readme.md delete mode 100644 keyboards/keychron/q6_pro/rules.mk delete mode 100644 keyboards/keychron/q6_pro/via_json/q6_pro_ansi_encoder.json delete mode 100644 keyboards/keychron/q6_pro/via_json/q6_pro_iso_encoder.json delete mode 100644 keyboards/keychron/q8_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q8_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q8_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q8_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q8_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q8_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q8_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q8_max/board.h delete mode 100644 keyboards/keychron/q8_max/config.h delete mode 100644 keyboards/keychron/q8_max/firmware/keychron_q8_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/q8_max/halconf.h delete mode 100644 keyboards/keychron/q8_max/info.json delete mode 100644 keyboards/keychron/q8_max/mcuconf.h delete mode 100644 keyboards/keychron/q8_max/q8_max.c delete mode 100644 keyboards/keychron/q8_max/readme.md delete mode 100644 keyboards/keychron/q8_max/rules.mk delete mode 100644 keyboards/keychron/q8_max/via_json/q8_max_ansi_encoder.json delete mode 100644 keyboards/keychron/q8_pro/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/q8_pro/ansi_encoder/config.h delete mode 100644 keyboards/keychron/q8_pro/ansi_encoder/info.json delete mode 100644 keyboards/keychron/q8_pro/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q8_pro/ansi_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q8_pro/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q8_pro/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q8_pro/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/q8_pro/config.h delete mode 100644 keyboards/keychron/q8_pro/halconf.h delete mode 100644 keyboards/keychron/q8_pro/info.json delete mode 100644 keyboards/keychron/q8_pro/iso_encoder/config.h delete mode 100644 keyboards/keychron/q8_pro/iso_encoder/info.json delete mode 100644 keyboards/keychron/q8_pro/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/q8_pro/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/q8_pro/iso_encoder/keymaps/default/rules.mk delete mode 100644 keyboards/keychron/q8_pro/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/q8_pro/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/q8_pro/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/q8_pro/mcuconf.h delete mode 100644 keyboards/keychron/q8_pro/q8_pro.c delete mode 100644 keyboards/keychron/q8_pro/q8_pro.h delete mode 100644 keyboards/keychron/q8_pro/readme.md delete mode 100644 keyboards/keychron/q8_pro/rules.mk delete mode 100644 keyboards/keychron/q8_pro/via_json/q8_pro_ansi_encoder.json delete mode 100644 keyboards/keychron/q8_pro/via_json/q8_pro_iso_encoder.json delete mode 100644 keyboards/keychron/v10_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/v10_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/v10_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/v10_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/v10_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/v10_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/v10_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/v10_max/board.h delete mode 100644 keyboards/keychron/v10_max/config.h delete mode 100644 keyboards/keychron/v10_max/firmware/keychron_v10_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/v10_max/halconf.h delete mode 100644 keyboards/keychron/v10_max/info.json delete mode 100644 keyboards/keychron/v10_max/mcuconf.h delete mode 100644 keyboards/keychron/v10_max/readme.md delete mode 100644 keyboards/keychron/v10_max/rules.mk delete mode 100644 keyboards/keychron/v10_max/v10_max.c delete mode 100644 keyboards/keychron/v10_max/via_json/v10_max_ansi_encoder.json delete mode 100644 keyboards/keychron/v1_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/v1_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/v1_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/v1_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/v1_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/v1_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/v1_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/v1_max/board.h delete mode 100644 keyboards/keychron/v1_max/config.h delete mode 100644 keyboards/keychron/v1_max/firmware/keychron_v1_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/v1_max/firmware/keychron_v1_max_iso_encoder_via.bin delete mode 100644 keyboards/keychron/v1_max/halconf.h delete mode 100644 keyboards/keychron/v1_max/info.json delete mode 100644 keyboards/keychron/v1_max/iso_encoder/config.h delete mode 100644 keyboards/keychron/v1_max/iso_encoder/info.json delete mode 100644 keyboards/keychron/v1_max/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/v1_max/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/v1_max/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/v1_max/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/v1_max/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/v1_max/jis_encoder/config.h delete mode 100644 keyboards/keychron/v1_max/jis_encoder/info.json delete mode 100644 keyboards/keychron/v1_max/jis_encoder/jis_encoder.c delete mode 100644 keyboards/keychron/v1_max/jis_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/v1_max/jis_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/v1_max/jis_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/v1_max/jis_encoder/rules.mk delete mode 100644 keyboards/keychron/v1_max/mcuconf.h delete mode 100644 keyboards/keychron/v1_max/readme.md delete mode 100644 keyboards/keychron/v1_max/rules.mk delete mode 100644 keyboards/keychron/v1_max/v1_max.c delete mode 100644 keyboards/keychron/v1_max/via_json/v1_max_ansi_encoder.json delete mode 100644 keyboards/keychron/v1_max/via_json/v1_max_iso_encoder.json delete mode 100644 keyboards/keychron/v1_max/via_json/v1_max_jis_encoder.json delete mode 100644 keyboards/keychron/v2_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/v2_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/v2_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/v2_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/v2_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/v2_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/v2_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/v2_max/board.h delete mode 100644 keyboards/keychron/v2_max/config.h delete mode 100644 keyboards/keychron/v2_max/firmware/keychron_v2_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/v2_max/firmware/keychron_v2_max_iso_encoder_via.bin delete mode 100644 keyboards/keychron/v2_max/halconf.h delete mode 100644 keyboards/keychron/v2_max/info.json delete mode 100644 keyboards/keychron/v2_max/iso_encoder/config.h delete mode 100644 keyboards/keychron/v2_max/iso_encoder/info.json delete mode 100644 keyboards/keychron/v2_max/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/v2_max/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/v2_max/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/v2_max/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/v2_max/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/v2_max/mcuconf.h delete mode 100644 keyboards/keychron/v2_max/readme.md delete mode 100644 keyboards/keychron/v2_max/rules.mk delete mode 100644 keyboards/keychron/v2_max/v2_max.c delete mode 100644 keyboards/keychron/v2_max/via_json/v2_max_ansi_encoder.json delete mode 100644 keyboards/keychron/v2_max/via_json/v2_max_iso_encoder.json delete mode 100644 keyboards/keychron/v3_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/v3_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/v3_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/v3_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/v3_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/v3_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/v3_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/v3_max/board.h delete mode 100644 keyboards/keychron/v3_max/config.h delete mode 100644 keyboards/keychron/v3_max/firmware/keychron_v3_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/v3_max/firmware/keychron_v3_max_iso_encoder_via.bin delete mode 100644 keyboards/keychron/v3_max/halconf.h delete mode 100644 keyboards/keychron/v3_max/info.json delete mode 100644 keyboards/keychron/v3_max/iso_encoder/config.h delete mode 100644 keyboards/keychron/v3_max/iso_encoder/info.json delete mode 100644 keyboards/keychron/v3_max/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/v3_max/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/v3_max/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/v3_max/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/v3_max/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/v3_max/jis_encoder/config.h delete mode 100644 keyboards/keychron/v3_max/jis_encoder/info.json delete mode 100644 keyboards/keychron/v3_max/jis_encoder/jis_encoder.c delete mode 100644 keyboards/keychron/v3_max/jis_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/v3_max/jis_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/v3_max/jis_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/v3_max/jis_encoder/rules.mk delete mode 100644 keyboards/keychron/v3_max/mcuconf.h delete mode 100644 keyboards/keychron/v3_max/readme.md delete mode 100644 keyboards/keychron/v3_max/rules.mk delete mode 100644 keyboards/keychron/v3_max/v3_max.c delete mode 100644 keyboards/keychron/v3_max/via_json/v3_max_ansi_encoder.json delete mode 100644 keyboards/keychron/v3_max/via_json/v3_max_iso_encoder.json delete mode 100644 keyboards/keychron/v3_max/via_json/v3_max_jis_encoder.json delete mode 100644 keyboards/keychron/v4_max/ansi/ansi.c delete mode 100644 keyboards/keychron/v4_max/ansi/config.h delete mode 100644 keyboards/keychron/v4_max/ansi/info.json delete mode 100644 keyboards/keychron/v4_max/ansi/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/v4_max/ansi/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/v4_max/ansi/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/v4_max/ansi/rules.mk delete mode 100644 keyboards/keychron/v4_max/board.h delete mode 100644 keyboards/keychron/v4_max/config.h delete mode 100644 keyboards/keychron/v4_max/firmware/keychron_v4_max_ansi_via.bin delete mode 100644 keyboards/keychron/v4_max/halconf.h delete mode 100644 keyboards/keychron/v4_max/info.json delete mode 100644 keyboards/keychron/v4_max/mcuconf.h delete mode 100644 keyboards/keychron/v4_max/readme.md delete mode 100644 keyboards/keychron/v4_max/rules.mk delete mode 100644 keyboards/keychron/v4_max/v4_max.c delete mode 100644 keyboards/keychron/v4_max/via_json/v4_max_ansi.json delete mode 100644 keyboards/keychron/v5_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/v5_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/v5_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/v5_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/v5_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/v5_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/v5_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/v5_max/board.h delete mode 100644 keyboards/keychron/v5_max/config.h delete mode 100644 keyboards/keychron/v5_max/firmware/keychron_v5_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/v5_max/firmware/keychron_v5_max_iso_encoder_via.bin delete mode 100644 keyboards/keychron/v5_max/halconf.h delete mode 100644 keyboards/keychron/v5_max/info.json delete mode 100644 keyboards/keychron/v5_max/iso_encoder/config.h delete mode 100644 keyboards/keychron/v5_max/iso_encoder/info.json delete mode 100644 keyboards/keychron/v5_max/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/v5_max/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/v5_max/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/v5_max/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/v5_max/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/v5_max/mcuconf.h delete mode 100644 keyboards/keychron/v5_max/readme.md delete mode 100644 keyboards/keychron/v5_max/rules.mk delete mode 100644 keyboards/keychron/v5_max/v5_max.c delete mode 100644 keyboards/keychron/v5_max/via_json/v5_ansi_encoder.json delete mode 100644 keyboards/keychron/v5_max/via_json/v5_iso_encoder.json delete mode 100644 keyboards/keychron/v6_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/v6_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/v6_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/v6_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/v6_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/v6_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/v6_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/v6_max/board.h delete mode 100644 keyboards/keychron/v6_max/config.h delete mode 100644 keyboards/keychron/v6_max/firmware/keychron_v6_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/v6_max/firmware/keychron_v6_max_iso_encoder_via.bin delete mode 100644 keyboards/keychron/v6_max/halconf.h delete mode 100644 keyboards/keychron/v6_max/info.json delete mode 100644 keyboards/keychron/v6_max/iso_encoder/config.h delete mode 100644 keyboards/keychron/v6_max/iso_encoder/info.json delete mode 100644 keyboards/keychron/v6_max/iso_encoder/iso_encoder.c delete mode 100644 keyboards/keychron/v6_max/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/v6_max/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/v6_max/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/v6_max/iso_encoder/rules.mk delete mode 100644 keyboards/keychron/v6_max/mcuconf.h delete mode 100644 keyboards/keychron/v6_max/readme.md delete mode 100644 keyboards/keychron/v6_max/rules.mk delete mode 100644 keyboards/keychron/v6_max/v6_max.c delete mode 100644 keyboards/keychron/v6_max/via_json/v6_max_ansi_encoder.json delete mode 100644 keyboards/keychron/v8_max/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/keychron/v8_max/ansi_encoder/config.h delete mode 100644 keyboards/keychron/v8_max/ansi_encoder/info.json delete mode 100644 keyboards/keychron/v8_max/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/keychron/v8_max/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/keychron/v8_max/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/keychron/v8_max/ansi_encoder/rules.mk delete mode 100644 keyboards/keychron/v8_max/board.h delete mode 100644 keyboards/keychron/v8_max/config.h delete mode 100644 keyboards/keychron/v8_max/firmware/keychron_v8_max_ansi_encoder_via.bin delete mode 100644 keyboards/keychron/v8_max/halconf.h delete mode 100644 keyboards/keychron/v8_max/info.json delete mode 100644 keyboards/keychron/v8_max/mcuconf.h delete mode 100644 keyboards/keychron/v8_max/readme.md delete mode 100644 keyboards/keychron/v8_max/rules.mk delete mode 100644 keyboards/keychron/v8_max/v8_max.c delete mode 100644 keyboards/keychron/v8_max/via_json/v8_max_ansi_encoder.json delete mode 100644 keyboards/lemokey/common/factory_test.c delete mode 100644 keyboards/lemokey/common/factory_test.h delete mode 100644 keyboards/lemokey/common/lemokey_common.c delete mode 100644 keyboards/lemokey/common/lemokey_common.h delete mode 100644 keyboards/lemokey/common/lemokey_common.mk delete mode 100644 keyboards/lemokey/common/lemokey_raw_hid.c delete mode 100644 keyboards/lemokey/common/lemokey_task.c delete mode 100644 keyboards/lemokey/common/lemokey_task.h delete mode 100644 keyboards/lemokey/common/wireless/bat_level_animation.c delete mode 100644 keyboards/lemokey/common/wireless/bat_level_animation.h delete mode 100644 keyboards/lemokey/common/wireless/battery.c delete mode 100644 keyboards/lemokey/common/wireless/battery.h delete mode 100644 keyboards/lemokey/common/wireless/indicator.c delete mode 100644 keyboards/lemokey/common/wireless/indicator.h delete mode 100644 keyboards/lemokey/common/wireless/lkbt51.c delete mode 100644 keyboards/lemokey/common/wireless/lkbt51.h delete mode 100644 keyboards/lemokey/common/wireless/lpm.c delete mode 100644 keyboards/lemokey/common/wireless/lpm.h delete mode 100644 keyboards/lemokey/common/wireless/lpm_stm32f401.c delete mode 100644 keyboards/lemokey/common/wireless/lpm_stm32f401.h delete mode 100644 keyboards/lemokey/common/wireless/lpm_wb32f3g71.c delete mode 100644 keyboards/lemokey/common/wireless/report_buffer.c delete mode 100644 keyboards/lemokey/common/wireless/report_buffer.h delete mode 100644 keyboards/lemokey/common/wireless/rtc_timer.c delete mode 100644 keyboards/lemokey/common/wireless/rtc_timer.h delete mode 100644 keyboards/lemokey/common/wireless/transport.c delete mode 100644 keyboards/lemokey/common/wireless/transport.h delete mode 100644 keyboards/lemokey/common/wireless/wireless.c delete mode 100644 keyboards/lemokey/common/wireless/wireless.h delete mode 100644 keyboards/lemokey/common/wireless/wireless.mk delete mode 100644 keyboards/lemokey/common/wireless/wireless_common.c delete mode 100644 keyboards/lemokey/common/wireless/wireless_common.h delete mode 100644 keyboards/lemokey/common/wireless/wireless_config.h delete mode 100644 keyboards/lemokey/common/wireless/wireless_event_type.h delete mode 100644 keyboards/lemokey/common/wireless/wireless_main.c delete mode 100644 keyboards/lemokey/l1/ansi/ansi.c delete mode 100644 keyboards/lemokey/l1/ansi/config.h delete mode 100644 keyboards/lemokey/l1/ansi/info.json delete mode 100644 keyboards/lemokey/l1/ansi/keymaps/default/keymap.c delete mode 100644 keyboards/lemokey/l1/ansi/keymaps/via/keymap.c delete mode 100644 keyboards/lemokey/l1/ansi/keymaps/via/rules.mk delete mode 100644 keyboards/lemokey/l1/ansi/rules.mk delete mode 100644 keyboards/lemokey/l1/board.h delete mode 100644 keyboards/lemokey/l1/config.h delete mode 100644 keyboards/lemokey/l1/halconf.h delete mode 100644 keyboards/lemokey/l1/info.json delete mode 100644 keyboards/lemokey/l1/l1.c delete mode 100644 keyboards/lemokey/l1/l1.h delete mode 100644 keyboards/lemokey/l1/mcuconf.h delete mode 100644 keyboards/lemokey/l1/post_rules.mk delete mode 100644 keyboards/lemokey/l1/readme.md delete mode 100644 keyboards/lemokey/l1/rules.mk delete mode 100644 keyboards/lemokey/l1/via_json/l1_ansi.json delete mode 100644 keyboards/lemokey/l3/ansi/ansi.c delete mode 100644 keyboards/lemokey/l3/ansi/config.h delete mode 100644 keyboards/lemokey/l3/ansi/info.json delete mode 100644 keyboards/lemokey/l3/ansi/keymaps/default/keymap.c delete mode 100644 keyboards/lemokey/l3/ansi/keymaps/via/keymap.c delete mode 100644 keyboards/lemokey/l3/ansi/keymaps/via/rules.mk delete mode 100644 keyboards/lemokey/l3/ansi/rules.mk delete mode 100644 keyboards/lemokey/l3/board.h delete mode 100644 keyboards/lemokey/l3/config.h delete mode 100644 keyboards/lemokey/l3/halconf.h delete mode 100644 keyboards/lemokey/l3/info.json delete mode 100644 keyboards/lemokey/l3/iso/config.h delete mode 100644 keyboards/lemokey/l3/iso/info.json delete mode 100644 keyboards/lemokey/l3/iso/iso.c delete mode 100644 keyboards/lemokey/l3/iso/keymaps/default/keymap.c delete mode 100644 keyboards/lemokey/l3/iso/keymaps/via/keymap.c delete mode 100644 keyboards/lemokey/l3/iso/keymaps/via/rules.mk delete mode 100644 keyboards/lemokey/l3/iso/rules.mk delete mode 100644 keyboards/lemokey/l3/l3.c delete mode 100644 keyboards/lemokey/l3/l3.h delete mode 100644 keyboards/lemokey/l3/mcuconf.h delete mode 100644 keyboards/lemokey/l3/post_rules.mk delete mode 100644 keyboards/lemokey/l3/readme.md delete mode 100644 keyboards/lemokey/l3/rules.mk delete mode 100644 keyboards/lemokey/l3/via_json/l3_ansi.json delete mode 100644 keyboards/lemokey/l3/via_json/l3_iso.json delete mode 100644 keyboards/lemokey/p1_pro/ansi_encoder/ansi_encoder.c delete mode 100644 keyboards/lemokey/p1_pro/ansi_encoder/config.h delete mode 100644 keyboards/lemokey/p1_pro/ansi_encoder/info.json delete mode 100644 keyboards/lemokey/p1_pro/ansi_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/lemokey/p1_pro/ansi_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/lemokey/p1_pro/ansi_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/lemokey/p1_pro/ansi_encoder/rules.mk delete mode 100644 keyboards/lemokey/p1_pro/config.h delete mode 100644 keyboards/lemokey/p1_pro/halconf.h delete mode 100644 keyboards/lemokey/p1_pro/info.json delete mode 100644 keyboards/lemokey/p1_pro/iso_encoder/config.h delete mode 100644 keyboards/lemokey/p1_pro/iso_encoder/info.json delete mode 100644 keyboards/lemokey/p1_pro/iso_encoder/iso_encoder.c delete mode 100644 keyboards/lemokey/p1_pro/iso_encoder/keymaps/default/keymap.c delete mode 100644 keyboards/lemokey/p1_pro/iso_encoder/keymaps/via/keymap.c delete mode 100644 keyboards/lemokey/p1_pro/iso_encoder/keymaps/via/rules.mk delete mode 100644 keyboards/lemokey/p1_pro/iso_encoder/rules.mk delete mode 100644 keyboards/lemokey/p1_pro/mcuconf.h delete mode 100644 keyboards/lemokey/p1_pro/p1_pro.c delete mode 100644 keyboards/lemokey/p1_pro/post_rules.mk delete mode 100644 keyboards/lemokey/p1_pro/readme.md delete mode 100644 keyboards/lemokey/p1_pro/rules.mk delete mode 100644 keyboards/lemokey/p1_pro/via_json/p1_pro_ansi_encoder_v1.0.json delete mode 100644 keyboards/lemokey/p1_pro/via_json/p1_pro_iso_encoder_v1.0.json diff --git a/keyboards/keychron/bluetooth/bat_level_animation.c b/keyboards/keychron/bluetooth/bat_level_animation.c deleted file mode 100644 index e63735bcff..0000000000 --- a/keyboards/keychron/bluetooth/bat_level_animation.c +++ /dev/null @@ -1,142 +0,0 @@ - -#include "quantum.h" -#include "bluetooth.h" -#include "indicator.h" -#include "lpm.h" -#if defined(PROTOCOL_CHIBIOS) -# include -#elif if defined(PROTOCOL_LUFA) -# include "lufa.h" -#endif -#include "eeprom.h" - -#ifndef BAT_LEVEL_GROWING_INTERVAL -# define BAT_LEVEL_GROWING_INTERVAL 150 -#endif - -#ifndef BAT_LEVEL_ON_INTERVAL -# define BAT_LEVEL_ON_INTERVAL 3000 -#endif - -#ifdef LED_MATRIX_ENABLE -# define LED_DRIVER_IS_ENABLED led_matrix_is_enabled -#endif - -#ifdef RGB_MATRIX_ENABLE -# define LED_DRIVER_IS_ENABLED rgb_matrix_is_enabled -#endif - -enum { - BAT_LVL_ANI_NONE, - BAT_LVL_ANI_GROWING, - BAT_LVL_ANI_BLINK_OFF, - BAT_LVL_ANI_BLINK_ON, -}; - -static uint8_t animation_state = 0; -static uint32_t bat_lvl_ani_timer_buffer = 0; -static uint8_t bat_percentage; -static uint8_t cur_percentage; -static uint32_t time_interval; -#ifdef RGB_MATRIX_ENABLE -static uint8_t r, g, b; -#endif - -extern indicator_config_t indicator_config; -extern backlight_state_t original_backlight_state; - -void bat_level_animiation_start(uint8_t percentage) { - /* Turn on backlight mode for indicator */ - indicator_enable(); - - animation_state = BAT_LVL_ANI_GROWING; - bat_percentage = percentage; - bat_lvl_ani_timer_buffer = sync_timer_read32(); - cur_percentage = 0; - time_interval = BAT_LEVEL_GROWING_INTERVAL; -#ifdef RGB_MATRIX_ENABLE - r = g = b = 255; -#endif -} - -void bat_level_animiation_stop(void) { - animation_state = BAT_LVL_ANI_NONE; -} - -bool bat_level_animiation_actived(void) { - return animation_state; -} - -void bat_level_animiation_indicate(void) { -#ifdef LED_MATRIX_ENABLE - uint8_t bat_lvl_led_list[10] = BAT_LEVEL_LED_LIST; - - for (uint8_t i = 0; i <= LED_MATRIX_LED_COUNT; i++) { - led_matrix_set_value(i, 0); - } - - if (animation_state == BAT_LVL_ANI_GROWING || animation_state == BAT_LVL_ANI_BLINK_ON) - for (uint8_t i = 0; i < cur_percentage / 10; i++) - led_matrix_set_value(bat_lvl_led_list[i], 255); -#endif - -#ifdef RGB_MATRIX_ENABLE - uint8_t bat_lvl_led_list[10] = BAT_LEVEL_LED_LIST; - - for (uint8_t i = 0; i <= RGB_MATRIX_LED_COUNT; i++) { - rgb_matrix_set_color(i, 0, 0, 0); - } - - if (animation_state == BAT_LVL_ANI_GROWING || animation_state == BAT_LVL_ANI_BLINK_ON) { - for (uint8_t i = 0; i < cur_percentage / 10; i++) { - rgb_matrix_set_color(bat_lvl_led_list[i], r, g, b); - } - } -#endif -} - -void bat_level_animiation_update(void) { - switch (animation_state) { - case BAT_LVL_ANI_GROWING: - if (cur_percentage < bat_percentage) - cur_percentage += 10; - else { - if (cur_percentage == 0) cur_percentage = 10; - animation_state = BAT_LVL_ANI_BLINK_OFF; - } - break; - - case BAT_LVL_ANI_BLINK_OFF: -#ifdef RGB_MATRIX_ENABLE - if (bat_percentage < 30) { - r = 255; - b = g = 0; - } else { - r = b = 0; - g = 255; - } -#endif - time_interval = BAT_LEVEL_ON_INTERVAL; - animation_state = BAT_LVL_ANI_BLINK_ON; - break; - - case BAT_LVL_ANI_BLINK_ON: - animation_state = BAT_LVL_ANI_NONE; - indicator_eeconfig_reload(); - if (indicator_config.value == 0 && !LED_DRIVER_IS_ENABLED()) { - indicator_disable(); - } - break; - - default: - break; - } - - bat_lvl_ani_timer_buffer = sync_timer_read32(); -} - -void bat_level_animiation_task(void) { - if (animation_state && sync_timer_elapsed32(bat_lvl_ani_timer_buffer) > time_interval) { - bat_level_animiation_update(); - } -} diff --git a/keyboards/keychron/bluetooth/bat_level_animation.h b/keyboards/keychron/bluetooth/bat_level_animation.h deleted file mode 100644 index 716e924103..0000000000 --- a/keyboards/keychron/bluetooth/bat_level_animation.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -void bat_level_animiation_start(uint8_t percentage); -void bat_level_animiation_stop(void); -bool bat_level_animiation_actived(void); -void bat_level_animiation_indicate(void); -void bat_level_animiation_task(void); diff --git a/keyboards/keychron/bluetooth/battery.c b/keyboards/keychron/bluetooth/battery.c deleted file mode 100644 index 8c6438d4c5..0000000000 --- a/keyboards/keychron/bluetooth/battery.c +++ /dev/null @@ -1,140 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" -#include "bluetooth.h" -#include "battery.h" -#include "transport.h" -#include "ckbt51.h" -#include "lpm.h" -#include "indicator.h" -#include "rtc_timer.h" - -#define BATTERY_EMPTY_COUNT 10 -#define CRITICAL_LOW_COUNT 20 - -static uint32_t bat_monitor_timer_buffer = 0; -static uint16_t voltage = FULL_VOLTAGE_VALUE; -static uint8_t bat_empty = 0; -static uint8_t critical_low = 0; -static uint8_t bat_state; -static uint8_t power_on_sample = 0; - -void battery_init(void) { - bat_state = BAT_NOT_CHARGING; -} -__attribute__((weak)) void battery_measure(void) { - ckbt51_read_state_reg(0x05, 0x02); -} - -/* Calculate the voltage */ -__attribute__((weak)) void battery_calculate_voltage(uint16_t value) {} - -void battery_set_voltage(uint16_t value) { - voltage = value; -} - -uint16_t battery_get_voltage(void) { - return voltage; -} - -uint8_t battery_get_percentage(void) { - if (voltage > FULL_VOLTAGE_VALUE) return 100; - - if (voltage > EMPTY_VOLTAGE_VALUE) { - return ((uint32_t)voltage - EMPTY_VOLTAGE_VALUE) * 80 / (FULL_VOLTAGE_VALUE - EMPTY_VOLTAGE_VALUE) + 20; - } - - if (voltage > SHUTDOWN_VOLTAGE_VALUE) { - return ((uint32_t)voltage - SHUTDOWN_VOLTAGE_VALUE) * 20 / (EMPTY_VOLTAGE_VALUE - SHUTDOWN_VOLTAGE_VALUE); - } else - return 0; -} - -bool battery_is_empty(void) { - return bat_empty > BATTERY_EMPTY_COUNT; -} - -bool battery_is_critical_low(void) { - return critical_low > CRITICAL_LOW_COUNT; -} - -void battery_check_empty(void) { - if (voltage < EMPTY_VOLTAGE_VALUE) { - if (bat_empty <= BATTERY_EMPTY_COUNT) { - if (++bat_empty > BATTERY_EMPTY_COUNT) { -#if defined(BAT_LOW_LED_PIN) || defined(BAT_LOW_LED_PIN_STATE) - indicator_battery_low_enable(true); -#endif -#if defined(LOW_BAT_IND_INDEX) - indicator_battery_low_backlit_enable(true); -#endif - power_on_sample = VOLTAGE_POWER_ON_MEASURE_COUNT; - } - } - } -} - -void battery_check_critical_low(void) { - if (voltage < SHUTDOWN_VOLTAGE_VALUE) { - if (critical_low <= CRITICAL_LOW_COUNT) { - if (++critical_low > CRITICAL_LOW_COUNT) bluetooth_low_battery_shutdown(); - } - } else if (critical_low <= CRITICAL_LOW_COUNT) { - critical_low = 0; - } -} - -bool battery_power_on_sample(void) { - return power_on_sample < VOLTAGE_POWER_ON_MEASURE_COUNT; -} - -void battery_task(void) { - uint32_t t = rtc_timer_elapsed_ms(bat_monitor_timer_buffer); - if (get_transport() == TRANSPORT_BLUETOOTH && bluetooth_get_state() == BLUETOOTH_CONNECTED) { - if ((battery_power_on_sample() -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) - && !indicator_is_enabled() -#endif - && t > BACKLIGHT_OFF_VOLTAGE_MEASURE_INTERVAL) || - t > VOLTAGE_MEASURE_INTERVAL) { - - battery_check_empty(); - battery_check_critical_low(); - - bat_monitor_timer_buffer = rtc_timer_read_ms(); - if (bat_monitor_timer_buffer > RTC_MAX_TIME) { - bat_monitor_timer_buffer = 0; - rtc_timer_clear(); - } - - battery_measure(); - power_on_sample++; - if (power_on_sample > VOLTAGE_POWER_ON_MEASURE_COUNT) power_on_sample = VOLTAGE_POWER_ON_MEASURE_COUNT; - } - } - - if ((bat_empty || critical_low) && usb_power_connected()) { - bat_empty = false; - critical_low = false; -#if defined(BAT_LOW_LED_PIN) || defined(BAT_LOW_LED_PIN_STATE) - indicator_battery_low_enable(false); -#endif -#if defined(LOW_BAT_IND_INDEX) - indicator_battery_low_backlit_enable(false); -#endif - } -} diff --git a/keyboards/keychron/bluetooth/battery.h b/keyboards/keychron/bluetooth/battery.h deleted file mode 100644 index 45de2bc23a..0000000000 --- a/keyboards/keychron/bluetooth/battery.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -enum { - BAT_NOT_CHARGING = 0, - BAT_CHARGING, - BAT_CHARGING_FINISHED, -}; - -#ifndef FULL_VOLTAGE_VALUE -# define FULL_VOLTAGE_VALUE 4100 -#endif - -#ifndef EMPTY_VOLTAGE_VALUE -# define EMPTY_VOLTAGE_VALUE 3500 -#endif - -#ifndef SHUTDOWN_VOLTAGE_VALUE -# define SHUTDOWN_VOLTAGE_VALUE 3300 -#endif - -#ifndef VOLTAGE_MEASURE_INTERVAL -# define VOLTAGE_MEASURE_INTERVAL 3000 -#endif - -#ifndef VOLTAGE_POWER_ON_MEASURE_COUNT -# define VOLTAGE_POWER_ON_MEASURE_COUNT 15 -#endif - -#ifndef BACKLIGHT_OFF_VOLTAGE_MEASURE_INTERVAL -# define BACKLIGHT_OFF_VOLTAGE_MEASURE_INTERVAL 200 -#endif - -void battery_init(void); -void battery_measure(void); -void battery_calculte_voltage(uint16_t value); -void battery_set_voltage(uint16_t value); -uint16_t battery_get_voltage(void); -uint8_t battery_get_percentage(void); -void indicator_battery_low_enable(bool enable); -bool battery_is_empty(void); -bool battery_is_critical_low(void); -bool battery_power_on_sample(void); - -void battery_task(void); diff --git a/keyboards/keychron/bluetooth/bluetooth.c b/keyboards/keychron/bluetooth/bluetooth.c deleted file mode 100644 index 3f539e271f..0000000000 --- a/keyboards/keychron/bluetooth/bluetooth.c +++ /dev/null @@ -1,493 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "action.h" -#include "quantum.h" -#include "bluetooth.h" -#include "report_buffer.h" -#include "lpm.h" -#include "battery.h" -#include "indicator.h" -#include "transport.h" -#include "rtc_timer.h" - -extern uint8_t pairing_indication; -extern host_driver_t chibios_driver; -extern report_buffer_t kb_rpt; -extern uint32_t retry_time_buffer; -extern uint8_t retry; - -#ifdef NKRO_ENABLE -extern nkro_t nkro; -#endif - -static uint8_t host_index = 0; -static uint8_t led_state = 0; - -extern bluetooth_transport_t bluetooth_transport; -static bluetooth_state_t bt_state = BLUETOOTH_RESET; -static bool pincodeEntry = false; -uint8_t bluetooth_report_protocol = true; - -/* declarations */ -uint8_t bluetooth_keyboard_leds(void); -void bluetooth_send_keyboard(report_keyboard_t *report); -void bluetooth_send_nkro(report_nkro_t *report); -void bluetooth_send_mouse(report_mouse_t *report); -void bluetooth_send_extra(report_extra_t *report); - -/* host struct */ -host_driver_t bluetooth_driver = {bluetooth_keyboard_leds, bluetooth_send_keyboard, bluetooth_send_nkro, bluetooth_send_mouse, bluetooth_send_extra}; - -#define BLUETOOTH_EVENT_QUEUE_SIZE 16 -bluetooth_event_t bt_event_queue[BLUETOOTH_EVENT_QUEUE_SIZE]; -uint8_t bt_event_queue_head; -uint8_t bt_event_queue_tail; - -void bluetooth_bt_event_queue_init(void) { - // Initialise the event queue - memset(&bt_event_queue, 0, sizeof(bt_event_queue)); - bt_event_queue_head = 0; - bt_event_queue_tail = 0; -} - -bool bluetooth_event_queue_enqueue(bluetooth_event_t event) { - uint8_t next = (bt_event_queue_head + 1) % BLUETOOTH_EVENT_QUEUE_SIZE; - if (next == bt_event_queue_tail) { - /* Override the first report */ - bt_event_queue_tail = (bt_event_queue_tail + 1) % BLUETOOTH_EVENT_QUEUE_SIZE; - } - bt_event_queue[bt_event_queue_head] = event; - bt_event_queue_head = next; - return true; -} - -static inline bool bluetooth_event_queue_dequeue(bluetooth_event_t *event) { - if (bt_event_queue_head == bt_event_queue_tail) { - return false; - } - *event = bt_event_queue[bt_event_queue_tail]; - bt_event_queue_tail = (bt_event_queue_tail + 1) % BLUETOOTH_EVENT_QUEUE_SIZE; - return true; -} - -/* - * Bluetooth init. - */ -void bluetooth_init(void) { - bt_state = BLUETOOTH_INITIALIZED; - - bluetooth_bt_event_queue_init(); -#ifndef DISABLE_REPORT_BUFFER - report_buffer_init(); -#endif - indicator_init(); -#ifdef BLUETOOTH_INT_INPUT_PIN - setPinInputHigh(BLUETOOTH_INT_INPUT_PIN); -#endif - - lpm_init(); - rtc_timer_init(); - -#ifdef BLUETOOTH_NKRO_ENABLE - keymap_config.raw = eeconfig_read_keymap(); - nkro.bluetooth = keymap_config.nkro; -#endif -} - -/* - * Bluetooth trasponrt init. Bluetooth module driver shall use this function to register a callback - * to its implementation. - */ -void bluetooth_set_transport(bluetooth_transport_t *transport) { - if (transport) memcpy(&bluetooth_transport, transport, sizeof(bluetooth_transport_t)); -} - -/* - * Enter pairing with current host index - */ -void bluetooth_pairing(void) { - if (battery_is_critical_low()) return; - - bluetooth_pairing_ex(0, NULL); - bt_state = BLUETOOTH_PARING; -} - -/* - * Enter pairing with specified host index and param - */ -void bluetooth_pairing_ex(uint8_t host_idx, void *param) { - if (battery_is_critical_low()) return; - - if (bluetooth_transport.pairing_ex) bluetooth_transport.pairing_ex(host_idx, param); - bt_state = BLUETOOTH_PARING; - - host_index = host_idx; -} - -/* - * Initiate connection request to paired host - */ -void bluetooth_connect(void) { - /* Work around empty report after wakeup, which leads to reconneect/disconnected loop */ - if (battery_is_critical_low() || sync_timer_read32() == 0) return; - - bluetooth_transport.connect_ex(0, 0); - bt_state = BLUETOOTH_RECONNECTING; -} - -/* - * Initiate connection request to paired host with argument - */ -void bluetooth_connect_ex(uint8_t host_idx, uint16_t timeout) { - if (battery_is_critical_low()) return; - - if (host_idx != 0) { - if (host_index == host_idx && bt_state == BLUETOOTH_CONNECTED) return; - host_index = host_idx; - led_state = 0; - } - bluetooth_transport.connect_ex(host_idx, timeout); - bt_state = BLUETOOTH_RECONNECTING; -} - -/* Initiate a disconnection */ -void bluetooth_disconnect(void) { - if (bluetooth_transport.disconnect) bluetooth_transport.disconnect(); -} - -/* Called when the BT device is reset. */ -static void bluetooth_enter_reset(uint8_t reason) { - bt_state = BLUETOOTH_RESET; - bluetooth_enter_reset_kb(reason); -} - -/* Enters discoverable state. Upon entering this state we perform the following actions: - * - change state to BLUETOOTH_PARING - * - set pairing indication - */ -static void bluetooth_enter_discoverable(uint8_t host_idx) { - bt_state = BLUETOOTH_PARING; - indicator_set(bt_state, host_idx); - bluetooth_enter_discoverable_kb(host_idx); -} - -/* - * Enters reconnecting state. Upon entering this state we perform the following actions: - * - change state to RECONNECTING - * - set reconnect indication - */ -static void bluetooth_enter_reconnecting(uint8_t host_idx) { - bt_state = BLUETOOTH_RECONNECTING; - indicator_set(bt_state, host_idx); - bluetooth_enter_reconnecting_kb(host_idx); -} - -/* Enters connected state. Upon entering this state we perform the following actions: - * - change state to CONNECTED - * - set connected indication - * - enable bluetooth NKRO is support - */ -static void bluetooth_enter_connected(uint8_t host_idx) { - bt_state = BLUETOOTH_CONNECTED; - indicator_set(bt_state, host_idx); - host_index = host_idx; - - clear_keyboard(); - - /* Enable NKRO since it may be disabled in pin code entry */ -#if defined(NKRO_ENABLE) && defined(BLUETOOTH_NKRO_ENABLE) - keymap_config.nkro = nkro.bluetooth; -#else - keymap_config.nkro = false; -#endif - - bluetooth_enter_connected_kb(host_idx); -#if defined(BAT_LOW_LED_PIN) || defined(BAT_LOW_LED_PIN_STATE) - if (battery_is_empty()) { - indicator_battery_low_enable(true); - } -#endif -} - -/* Enters disconnected state. Upon entering this state we perform the following actions: - * - change state to DISCONNECTED - * - set disconnected indication - */ -static void bluetooth_enter_disconnected(uint8_t host_idx) { - uint8_t previous_state = bt_state; - bt_state = BLUETOOTH_DISCONNECTED; - - if (previous_state == BLUETOOTH_CONNECTED) { - lpm_timer_reset(); - indicator_set(BLUETOOTH_SUSPEND, host_idx); - } else - indicator_set(bt_state, host_idx); - -#ifndef DISABLE_REPORT_BUFFER - report_buffer_init(); -#endif - retry = 0; - bluetooth_enter_disconnected_kb(host_idx); -#if defined(BAT_LOW_LED_PIN) || defined(BAT_LOW_LED_PIN_STATE) - indicator_battery_low_enable(false); -#endif -#if defined(LOW_BAT_IND_INDEX) - indicator_battery_low_backlit_enable(false); -#endif -} - -/* Enter pin code entry state. */ -static void bluetooth_enter_pin_code_entry(void) { -#if defined(NKRO_ENABLE) - keymap_config.nkro = FALSE; -#endif - pincodeEntry = true; - bluetooth_enter_pin_code_entry_kb(); -} - -/* Exit pin code entry state. */ -static void bluetooth_exit_pin_code_entry(void) { -#if defined(NKRO_ENABLE) - keymap_config.nkro = true; -#endif - pincodeEntry = false; - bluetooth_exit_pin_code_entry_kb(); -} - -__attribute__((weak)) void bluetooth_enter_reset_kb(uint8_t reason){}; -__attribute__((weak)) void bluetooth_enter_discoverable_kb(uint8_t host_idx){}; -__attribute__((weak)) void bluetooth_enter_reconnecting_kb(uint8_t host_idx){}; -__attribute__((weak)) void bluetooth_enter_connected_kb(uint8_t host_idx){}; -__attribute__((weak)) void bluetooth_enter_disconnected_kb(uint8_t host_idx){}; -__attribute__((weak)) void bluetooth_enter_pin_code_entry_kb(void) {} -__attribute__((weak)) void bluetooth_exit_pin_code_entry_kb(void){}; - -/* */ -static void bluetooth_hid_set_protocol(bool report_protocol) { - bluetooth_report_protocol = false; -} - -uint8_t bluetooth_keyboard_leds(void) { - if (bt_state == BLUETOOTH_CONNECTED) { - return led_state; - } - - return 0; -} - -extern keymap_config_t keymap_config; - -void bluetooth_send_keyboard(report_keyboard_t *report) { - if (bt_state == BLUETOOTH_PARING && !pincodeEntry) return; - - if (bt_state == BLUETOOTH_CONNECTED || (bt_state == BLUETOOTH_PARING && pincodeEntry)) { - if (bluetooth_transport.send_keyboard) { -#ifndef DISABLE_REPORT_BUFFER - bool firstBuffer = false; - if (report_buffer_is_empty() && report_buffer_next_inverval() && report_buffer_get_retry() == 0) { - firstBuffer = true; - } - - report_buffer_t report_buffer; - report_buffer.type = REPORT_TYPE_KB; - memcpy(&report_buffer.keyboard, report, sizeof(report_keyboard_t)); - report_buffer_enqueue(&report_buffer); - - if (firstBuffer) { - report_buffer_set_retry(0); - report_buffer_task(); - } -#else - bluetooth_transport.send_keyboard(&report->nkro.mods); -#endif - } - } else if (bt_state != BLUETOOTH_RESET) { - bluetooth_connect(); - } -} -void bluetooth_send_nkro(report_nkro_t *report) { - if (bt_state == BLUETOOTH_PARING && !pincodeEntry) return; - - if (bt_state == BLUETOOTH_CONNECTED || (bt_state == BLUETOOTH_PARING && pincodeEntry)) { - if (bluetooth_transport.send_keyboard) { -#ifndef DISABLE_REPORT_BUFFER - if (report_buffer_is_empty() && report_buffer_next_inverval()) { - bluetooth_transport.send_keyboard(&report->mods); - report_buffer_update_timer(); - } else { - report_buffer_t report_buffer; - report_buffer.type = REPORT_TYPE_NKRO; - memcpy(&report_buffer.nkro, report, sizeof(report_nkro_t)); - report_buffer_enqueue(&report_buffer); - } -#else - bluetooth_transport.send_nkro(&report->mods); -#endif - } - } else if (bt_state != BLUETOOTH_RESET) { - bluetooth_connect(); - } -} - -void bluetooth_send_mouse(report_mouse_t *report) { - if (bt_state == BLUETOOTH_CONNECTED) { - if (bluetooth_transport.send_mouse) bluetooth_transport.send_mouse((uint8_t *)report); - } else if (bt_state != BLUETOOTH_RESET) { - bluetooth_connect(); - } -} - -void bluetooth_send_system(uint16_t data) { - if (bt_state == BLUETOOTH_CONNECTED) { - if (bluetooth_transport.send_system) bluetooth_transport.send_system(data); - } else if (bt_state != BLUETOOTH_RESET) { - bluetooth_connect(); - } -} - -void bluetooth_send_consumer(uint16_t data) { - if (bt_state == BLUETOOTH_CONNECTED) { -#ifndef DISABLE_REPORT_BUFFER - if (report_buffer_is_empty() && report_buffer_next_inverval()) { - if (bluetooth_transport.send_consumer) bluetooth_transport.send_consumer(data); - report_buffer_update_timer(); - } else { - report_buffer_t report_buffer; - report_buffer.type = REPORT_TYPE_CONSUMER; - report_buffer.consumer = data; - report_buffer_enqueue(&report_buffer); - } -#else - if (bluetooth_transport.send_consumer) bluetooth_transport.send_consumer(data); -#endif - } else if (bt_state != BLUETOOTH_RESET) { - bluetooth_connect(); - } -} - -void bluetooth_send_extra(report_extra_t *report) { - if (report->report_id == REPORT_ID_SYSTEM) { - bluetooth_send_system(report->usage); - } else if (report->report_id == REPORT_ID_CONSUMER) { - bluetooth_send_consumer(report->usage); - } -} - -void bluetooth_low_battery_shutdown(void) { -#if defined(BAT_LOW_LED_PIN) || defined(BAT_LOW_LED_PIN_STATE) - indicator_battery_low_enable(false); -#endif -#if defined(LOW_BAT_IND_INDEX) - indicator_battery_low_backlit_enable(false); -#endif - clear_keyboard(); - send_keyboard_report(); - wait_ms(50); - bluetooth_disconnect(); -} - -void bluetooth_event_queue_task(void) { - bluetooth_event_t event; - while (bluetooth_event_queue_dequeue(&event)) { - switch (event.evt_type) { - case EVT_RESET: - bluetooth_enter_reset(event.params.reason); - break; - case EVT_CONNECTED: - bluetooth_enter_connected(event.params.hostIndex); - break; - case EVT_DISCOVERABLE: - bluetooth_enter_discoverable(event.params.hostIndex); - break; - case EVT_RECONNECTING: - bluetooth_enter_reconnecting(event.params.hostIndex); - break; - case EVT_DISCONNECTED: - led_state = 0; - bluetooth_enter_disconnected(event.params.hostIndex); - break; - case EVT_BT_PINCODE_ENTRY: - bluetooth_enter_pin_code_entry(); - break; - case EVT_EXIT_BT_PINCODE_ENTRY: - bluetooth_exit_pin_code_entry(); - break; - case EVT_HID_INDICATOR: - led_state = event.params.led; - break; - case EVT_HID_SET_PROTOCOL: - bluetooth_hid_set_protocol(event.params.protocol); - break; - case EVT_CONECTION_INTERVAL: - report_buffer_set_inverval(event.params.interval); - break; - default: - break; - } - } -} - -void bluetooth_task(void) { - bluetooth_transport.task(); - bluetooth_event_queue_task(); -#ifndef DISABLE_REPORT_BUFFER - report_buffer_task(); -#endif - indicator_task(); - battery_task(); - lpm_task(); -} - -void send_string_task(void) { - if (get_transport() == TRANSPORT_BLUETOOTH && bluetooth_get_state()== BLUETOOTH_CONNECTED) { - bluetooth_transport.task(); -#ifndef DISABLE_REPORT_BUFFER - report_buffer_task(); -#endif - } -} - -bluetooth_state_t bluetooth_get_state(void) { - return bt_state; -}; - -__attribute__((weak)) bool process_record_kb_bt(uint16_t keycode, keyrecord_t *record) { - return true; -}; - -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) { - return false; - } - - if (get_transport() == TRANSPORT_BLUETOOTH) { - lpm_timer_reset(); - -#if defined(BAT_LOW_LED_PIN) || defined(LOW_BAT_IND_INDEX) - if (battery_is_empty() && bluetooth_get_state() == BLUETOOTH_CONNECTED && record->event.pressed) { -# if defined(BAT_LOW_LED_PIN) || defined(BAT_LOW_LED_PIN_STATE) - indicator_battery_low_enable(true); -# endif -# if defined(LOW_BAT_IND_INDEX) - indicator_battery_low_backlit_enable(true); -# endif - } -#endif - } - return process_record_kb_bt(keycode, record); - // return process_record_user(keycode, record); -} diff --git a/keyboards/keychron/bluetooth/bluetooth.h b/keyboards/keychron/bluetooth/bluetooth.h deleted file mode 100644 index 44e8ffdc70..0000000000 --- a/keyboards/keychron/bluetooth/bluetooth.h +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "bluetooth_event_type.h" -#include "action.h" - -/* Low power mode */ -#ifndef LOW_POWER_MODE -# define LOW_POWER_MODE PM_STOP1 -#endif - -/* Wake pin used for blueooth module/controller to wake up MCU in low power mode*/ -#ifndef BLUETOOTH_INT_INPUT_PIN -# define WAKE_PIN A5 -#endif - -/* Type of an enumeration of the possible BT state.*/ -typedef enum { - BLUETOOTH_RESET, - BLUETOOTH_INITIALIZED, // 1 - BLUETOOTH_DISCONNECTED, // 2 - BLUETOOTH_CONNECTED, // 3 - BLUETOOTH_PARING, // 4 - BLUETOOTH_RECONNECTING, // 5 - BLUETOOTH_SUSPEND -} bluetooth_state_t; - -extern event_listener_t bt_driver; - -typedef struct { - void (*init)(bool); - void (*connect_ex)(uint8_t, uint16_t); - void (*pairing_ex)(uint8_t, void *); - void (*disconnect)(void); - void (*send_keyboard)(uint8_t *); - void (*send_nkro)(uint8_t *); - void (*send_consumer)(uint16_t); - void (*send_system)(uint16_t); - void (*send_mouse)(uint8_t *); - void (*task)(void); -} bluetooth_transport_t; - -void bluetooth_init(void); -void bluetooth_set_transport(bluetooth_transport_t *transport); -void bluetooth_task(void); - -bool bluetooth_event_queue_enqueue(bluetooth_event_t event); - -void bluetooth_connect(void); -void bluetooth_connect_ex(uint8_t host_idx, uint16_t timeout); -void bluetooth_disconnect(void); - -void bluetooth_pairing(void); -void bluetooth_pairing_ex(uint8_t host_idx, void *param); -bool bluetooth_is_activated(void); - -void bluetooth_enter_reset_kb(uint8_t reason); -void bluetooth_enter_discoverable_kb(uint8_t host_idx); -void bluetooth_enter_reconnecting_kb(uint8_t host_idx); -void bluetooth_enter_connected_kb(uint8_t host_idx); -void bluetooth_enter_disconnected_kb(uint8_t host_idx); -void bluetooth_enter_pin_code_entry_kb(void); -void bluetooth_exit_pin_code_entry_kb(void); - -void bluetooth_task(void); -void bluetooth_pre_task(void); -void bluetooth_post_task(void); -void send_string_task(void); - -bluetooth_state_t bluetooth_get_state(void); - -void bluetooth_low_battery_shutdown(void); - -bool process_record_kb_bt(uint16_t keycode, keyrecord_t *record); diff --git a/keyboards/keychron/bluetooth/bluetooth.mk b/keyboards/keychron/bluetooth/bluetooth.mk deleted file mode 100644 index 3a57a6d75d..0000000000 --- a/keyboards/keychron/bluetooth/bluetooth.mk +++ /dev/null @@ -1,23 +0,0 @@ - -OPT_DEFS += -DKC_BLUETOOTH_ENABLE - -BLUETOOTH_DIR = bluetooth -SRC += \ - $(BLUETOOTH_DIR)/bluetooth.c \ - $(BLUETOOTH_DIR)/report_buffer.c \ - $(BLUETOOTH_DIR)/ckbt51.c \ - $(BLUETOOTH_DIR)/indicator.c \ - $(BLUETOOTH_DIR)/bluetooth_main.c \ - $(BLUETOOTH_DIR)/transport.c \ - $(BLUETOOTH_DIR)/lpm.c \ - $(BLUETOOTH_DIR)/lpm_stm32l432.c \ - $(BLUETOOTH_DIR)/battery.c \ - $(BLUETOOTH_DIR)/factory_test.c \ - $(BLUETOOTH_DIR)/bat_level_animation.c \ - $(BLUETOOTH_DIR)/rtc_timer.c - -VPATH += $(TOP_DIR)/keyboards/keychron/$(BLUETOOTH_DIR) - -# Work around RTC clock issue without touching chibios, refer to the link for this bug -# https://forum.chibios.org/viewtopic.php?f=35&t=6197 -OPT_DEFS += -DRCC_APBENR1_RTCAPBEN diff --git a/keyboards/keychron/bluetooth/bluetooth_config.h b/keyboards/keychron/bluetooth/bluetooth_config.h deleted file mode 100644 index 26dbc81f6c..0000000000 --- a/keyboards/keychron/bluetooth/bluetooth_config.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef BLUETOOTH_CONFIG_H -#define BLUETOOTH_CONFIG_H - -#include "config.h" - -// -#ifndef HOST_DEVICES_COUNT -# define HOST_DEVICES_COUNT 3 -#endif - -// Uint: Second -#ifndef DISCONNECTED_BACKLIGHT_OFF_DELAY_TIME -# define DISCONNECTED_BACKLIGHT_OFF_DELAY_TIME 40 -#endif - -// Uint: Second, the timer restarts on key activities. -#ifndef CONNECTED_BACKLIGHT_OFF_DELAY_TIME -# define CONNECTED_BACKLIGHT_OFF_DELAY_TIME 600 -#endif - -#endif - diff --git a/keyboards/keychron/bluetooth/bluetooth_event_type.h b/keyboards/keychron/bluetooth/bluetooth_event_type.h deleted file mode 100644 index 47d8adbcf4..0000000000 --- a/keyboards/keychron/bluetooth/bluetooth_event_type.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -/* Type of an enumeration of the possible BT events.*/ -typedef enum { - EVT_NONE = 0, - EVT_RESET, - EVT_DISCOVERABLE, - EVT_RECONNECTING, - EVT_CONNECTED, - EVT_DISCONNECTED, - EVT_BT_PINCODE_ENTRY, - EVT_EXIT_BT_PINCODE_ENTRY, - EVT_HID_SET_PROTOCOL, - EVT_HID_INDICATOR, - EVT_CONECTION_INTERVAL, -} event_type_t; - -typedef struct { - event_type_t evt_type; /*The type of the event. */ - union { - uint8_t reason; /* Parameters to BLUETOOTH_RESET event */ - uint8_t hostIndex; /* Parameters to connection event from EVT_DISCOVERABLE to EVT_DISCONECTED */ - uint8_t led; /* Parameters to EVT_HID_INDICATOR event */ - uint8_t protocol; /* Parameters to EVT_HID_SET_PROTOCOL event */ - uint8_t interval; /* Parameters to EVT_CONECTION_INTERVAL event */ - } params; -} bluetooth_event_t; - diff --git a/keyboards/keychron/bluetooth/bluetooth_main.c b/keyboards/keychron/bluetooth/bluetooth_main.c deleted file mode 100644 index eabcc83826..0000000000 --- a/keyboards/keychron/bluetooth/bluetooth_main.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" -#include "bluetooth.h" -#include "transport.h" - -__attribute__((weak)) void bluetooth_pre_task(void) {} -__attribute__((weak)) void bluetooth_post_task(void) {} - -void bluetooth_tasks(void) { - bluetooth_pre_task(); - bluetooth_task(); - bluetooth_post_task(); - - /* usb_remote_wakeup() should be invoked last so that we have chance - * to switch to bluetooth after start-up when usb is not connected - */ - if (get_transport() == TRANSPORT_USB) usb_remote_wakeup(); -} - -void housekeeping_task_kb(void) { - bluetooth_tasks(); -} diff --git a/keyboards/keychron/bluetooth/ckbt51.c b/keyboards/keychron/bluetooth/ckbt51.c deleted file mode 100644 index 8c8233996e..0000000000 --- a/keyboards/keychron/bluetooth/ckbt51.c +++ /dev/null @@ -1,606 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include -#include "quantum.h" -#include "ckbt51.h" -#include "bluetooth.h" -#include "battery.h" -#include "raw_hid.h" -#include "report_buffer.h" - -#ifndef RAW_EPSIZE -# define RAW_EPSIZE 32 -#endif - -#ifndef CKBT51_INT_INPUT_PIN -# error "CKBT51_INT_INPUT_PIN is not defined" -#endif - -#ifndef CKBT51_TX_RETRY_COUNT -# define CKBT51_TX_RETRY_COUNT 3 -#endif - -/* CKBT51 disable its uart peripheral to save power if uart inactivity for 3s, need to - * assert this pin and wait some time for its uart getting ready before sending data*/ -#define CKBT51_WAKE_WAIT_TIME 3000 // us - -enum { - /* HID Report */ - CKBT51_CMD_SEND_KB = 0x11, - CKBT51_CMD_SEND_KB_NKRO = 0x12, - CKBT51_CMD_SEND_CONSUMER = 0x13, - CKBT51_CMD_SEND_SYSTEM = 0x14, - CKBT51_CMD_SEND_FN = 0x15, // Not used currently - CKBT51_CMD_SEND_MOUSE = 0x16, // Not used currently - CKBT51_CMD_SEND_BOOT_KB = 0x17, - /* Bluetooth connections */ - CKBT51_CMD_PAIRING = 0x21, - CKBT51_CMD_CONNECT = 0x22, - CKBT51_CMD_DISCONNECT = 0x23, - CKBT51_CMD_SWITCH_HOST = 0x24, - CKBT51_CMD_READ_STATE_REG = 0x25, - /* Battery */ - CKBT51_CMD_BATTERY_MANAGE = 0x31, - CKBT51_CMD_UPDATE_BAT_LVL = 0x32, - /* Set/get parameters */ - CKBT51_CMD_GET_MODULE_INFO = 0x40, - CKBT51_CMD_SET_CONFIG = 0x41, - CKBT51_CMD_GET_CONFIG = 0x42, - CKBT51_CMD_SET_BDA = 0x43, - CKBT51_CMD_GET_BDA = 0x44, - CKBT51_CMD_SET_NAME = 0x45, - CKBT51_CMD_GET_NAME = 0x46, - /* DFU */ - CKBT51_CMD_GET_DFU_VER = 0x60, - CKBT51_CMD_HAND_SHAKE_TOKEN = 0x61, - CKBT51_CMD_START_DFU = 0x62, - CKBT51_CMD_SEND_FW_DATA = 0x63, - CKBT51_CMD_VERIFY_CRC32 = 0x64, - CKBT51_CMD_SWITCH_FW = 0x65, - /* Factory test */ - CKBT51_CMD_FACTORY_RESET = 0x71, - CKBT51_CMD_INT_PIN_TEST = 0x72, - CKBT51_CMD_RADIO_TEST = 0x73, - /* Event */ - CKBT51_EVT_CKBT51_CMD_RECEIVED = 0xA1, - CKBT51_EVT_OTA_RSP = 0xA3, - CKBT51_CONNECTION_EVT_ACK = 0xA4, -}; - -enum { - CKBT51_EVT_ACK = 0xA1, - CKBT51_EVT_QUERY_RSP = 0xA2, - CKBT51_EVT_RESET = 0xB0, - CKBT51_EVT_LE_CONNECTION = 0xB1, - CKBT51_EVT_HOST_TYPE = 0xB2, - CKBT51_EVT_CONNECTION = 0xB3, - CKBT51_EVT_HID_EVENT = 0xB4, - CKBT51_EVT_BATTERY = 0xB5, -}; - -enum { CKBT51_CONNECTED = 0x20, CKBT51_DISCOVERABLE = 0x21, CKBT51_RECONNECTING = 0x22, CKBT51_DISCONNECTED = 0x23, CKBT51_PINCODE_ENTRY = 0x24, CKBT51_EXIT_PINCODE_ENTRY = 0x25 }; - -enum { - ACK_SUCCESS = 0x00, - ACK_CHECKSUM_ERROR, - ACK_FIFO_HALF_WARNING, - ACK_FIFO_FULL_ERROR, -}; - -static uint8_t payload[PACKET_MAX_LEN]; -static uint8_t reg_offset = 0xFF; - -bluetooth_transport_t bluetooth_transport = {ckbt51_init, ckbt51_connect, ckbt51_become_discoverable, ckbt51_disconnect, ckbt51_send_keyboard, ckbt51_send_nkro, ckbt51_send_consumer, ckbt51_send_system, ckbt51_send_mouse, ckbt51_task}; - -void ckbt51_init(bool wakeup_from_low_power_mode) { -#if (HAL_USE_SERIAL == TRUE) - SerialConfig config = {460800, 0, USART_CR2_STOP1_BITS, 0}; - - if (wakeup_from_low_power_mode) { - sdInit(); - sdStart(&WT_DRIVER, &config); - - return; - } - - sdStart(&WT_DRIVER, &config); - palSetPadMode(WT_DRIVER_UART_TX_BANK, WT_DRIVER_UART_TX, PAL_MODE_ALTERNATE(WT_DRIVER_UART_TX_PAL_MODE)); - palSetPadMode(WT_DRIVER_UART_RX_BANK, WT_DRIVER_UART_RX, PAL_MODE_ALTERNATE(WT_DRIVER_UART_RX_PAL_MODE)); -#endif - - setPinOutput(CKBT51_INT_INPUT_PIN); - writePinHigh(CKBT51_INT_INPUT_PIN); -} - -void ckbt51_send_cmd(uint8_t* payload, uint8_t len, bool ack_enable, bool retry) { - static uint8_t sn = 0; - uint8_t i; - uint8_t pkt[PACKET_MAX_LEN] = {0}; - memset(pkt, 0, PACKET_MAX_LEN); - - if (!retry) ++sn; - if (sn == 0) ++sn; - - systime_t start = 0; - - for (i = 0; i < 3; i++) { - writePin(CKBT51_INT_INPUT_PIN, i % 2); - start = chVTGetSystemTime(); - while (chTimeI2US(chVTTimeElapsedSinceX(start)) < CKBT51_WAKE_WAIT_TIME / 3) { - }; - } - writePinHigh(CKBT51_INT_INPUT_PIN); - - uint16_t checksum = 0; - for (i = 0; i < len; i++) - checksum += payload[i]; - - i = 0; - pkt[i++] = 0xAA; - pkt[i++] = ack_enable ? 0x56 : 0x55; - pkt[i++] = len + 2; - pkt[i++] = ~(len + 2) & 0xFF; - pkt[i++] = sn; - memcpy(pkt + i, payload, len); - i += len; - pkt[i++] = checksum & 0xFF; - pkt[i++] = (checksum >> 8) & 0xFF; - - sdWrite(&WT_DRIVER, pkt, i); -} - -void ckbt51_send_keyboard(uint8_t* report) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = CKBT51_CMD_SEND_KB; - memcpy(payload + i, report, 8); - i += 8; - - ckbt51_send_cmd(payload, i, true, false); -} - -void ckbt51_send_nkro(uint8_t* report) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = CKBT51_CMD_SEND_KB_NKRO; - memcpy(payload + i, report, 20); // NKRO report lenght is limited to 20 bytes - i += 20; - - ckbt51_send_cmd(payload, i, true, false); -} - -void ckbt51_send_consumer(uint16_t report) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = CKBT51_CMD_SEND_CONSUMER; - payload[i++] = report & 0xFF; - payload[i++] = ((report) >> 8) & 0xFF; - i += 4; // QMK doesn't send multiple consumer reports, just skip 2nd and 3rd consumer reports - - ckbt51_send_cmd(payload, i, true, false); -} - -void ckbt51_send_system(uint16_t report) { - /* CKBT51 supports only System Sleep */ - if ((report & 0xFF) != 0x82) return; - - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = CKBT51_CMD_SEND_SYSTEM; - payload[i++] = 0x01 << ((report & 0xFF) - 0x82); - - ckbt51_send_cmd(payload, i, true, false); -} - -void ckbt51_send_mouse(uint8_t* report) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = CKBT51_CMD_SEND_MOUSE; // Cmd type - payload[i++] = report[1]; // Button - payload[i++] = report[2]; // X - payload[i++] = (report[2] & 0x80) ? 0xff : 0x00; // ckbt51 use 16bit report, set high byte - payload[i++] = report[3]; // Y - payload[i++] = (report[3] & 0x80) ? 0xff : 0x00; // ckbt51 use 16bit report, set high byte - payload[i++] = report[4]; // V wheel - payload[i++] = report[5]; // H wheel - - ckbt51_send_cmd(payload, i, false, false); -} - -/* Send ack to connection event, bluetooth module will retry 2 times if no ack received */ -void ckbt51_send_conn_evt_ack(void) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = CKBT51_CONNECTION_EVT_ACK; - - ckbt51_send_cmd(payload, i, false, false); -} - -void ckbt51_become_discoverable(uint8_t host_idx, void* param) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - pairing_param_t default_pairing_param = {0, 0, PAIRING_MODE_LESC_OR_SSP, BT_MODE_CLASSIC, 0, NULL}; - - if (param == NULL) { - param = &default_pairing_param; - } - pairing_param_t* p = (pairing_param_t*)param; - - payload[i++] = CKBT51_CMD_PAIRING; // Cmd type - payload[i++] = host_idx; // Host Index - payload[i++] = p->timeout & 0xFF; // Timeout - payload[i++] = (p->timeout >> 8) & 0xFF; - payload[i++] = p->pairingMode; - payload[i++] = p->BRorLE; // BR/LE - payload[i++] = p->txPower; // LE TX POWER - if (p->leName) { - memcpy(&payload[i], p->leName, strlen(p->leName)); - i += strlen(p->leName); - } - - ckbt51_send_cmd(payload, i, true, false); -} - -/* Timeout : 2 ~ 255 seconds */ -void ckbt51_connect(uint8_t hostIndex, uint16_t timeout) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = CKBT51_CMD_CONNECT; - payload[i++] = hostIndex; // Host index - payload[i++] = timeout & 0xFF; // Timeout - payload[i++] = (timeout >> 8) & 0xFF; - - ckbt51_send_cmd(payload, i, true, false); -} - -void ckbt51_disconnect(void) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = CKBT51_CMD_DISCONNECT; - payload[i++] = 0; // Sleep mode - - ckbt51_send_cmd(payload, i, true, false); -} - -void ckbt51_switch_host(uint8_t hostIndex) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = CKBT51_CMD_SWITCH_HOST; - payload[i++] = hostIndex; - - ckbt51_send_cmd(payload, i, true, false); -} - -void ckbt51_read_state_reg(uint8_t reg, uint8_t len) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = CKBT51_CMD_READ_STATE_REG; - payload[i++] = reg_offset = reg; - payload[i++] = len; - - // TODO - ckbt51_send_cmd(payload, i, false, false); -} - -void ckbt51_get_info(module_info_t* info) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = CKBT51_CMD_GET_MODULE_INFO; - ckbt51_send_cmd(payload, i, false, false); -} - -void ckbt51_set_param(module_param_t* param) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = CKBT51_CMD_SET_CONFIG; - memcpy(payload + i, param, sizeof(module_param_t)); - i += sizeof(module_param_t); - - ckbt51_send_cmd(payload, i, true, false); -} - -void ckbt51_get_param(module_param_t* param) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = CKBT51_CMD_GET_CONFIG; - - ckbt51_send_cmd(payload, i, false, false); -} - -void ckbt51_set_local_name(const char* name) { - uint8_t i = 0; - uint8_t len = strlen(name); - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = CKBT51_CMD_SET_NAME; - memcpy(payload + i, name, len); - i += len; - ckbt51_send_cmd(payload, i, true, false); -} - -void ckbt51_get_local_name(void) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = CKBT51_CMD_GET_NAME; - - ckbt51_send_cmd(payload, i, false, false); -} - -void ckbt51_factory_reset(void) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = CKBT51_CMD_FACTORY_RESET; - - ckbt51_send_cmd(payload, i, false, false); -} - -void ckbt51_int_pin_test(bool enable) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - payload[i++] = CKBT51_CMD_INT_PIN_TEST; - payload[i++] = enable; - - ckbt51_send_cmd(payload, i, false, false); -} - -void ckbt51_radio_test(uint8_t channel) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - payload[i++] = CKBT51_CMD_RADIO_TEST; - payload[i++] = channel; - payload[i++] = 0; - - ckbt51_send_cmd(payload, i, false, false); -} - -void ckbt51_dfu_tx(uint8_t rsp, uint8_t* data, uint8_t len, uint8_t sn) { - uint16_t checksum = 0; - uint8_t buf[RAW_EPSIZE] = {0}; - uint8_t i = 0; - - buf[i++] = 0x03; - buf[i++] = 0xAA; - buf[i++] = 0x57; - buf[i++] = len; - buf[i++] = ~len; - buf[i++] = sn; - buf[i++] = rsp; - memcpy(&buf[i], data, len); - i += len; - - for (uint8_t k = 0; k < i; k++) - checksum += buf[i]; - - raw_hid_send(buf, RAW_EPSIZE); - - if (len > 25) { - i = 0; - memset(buf, 0, RAW_EPSIZE); - buf[i++] = 0x03; - memcpy(&buf[i], data + 25, len - 25); - i = i + len - 25; - raw_hid_send(buf, RAW_EPSIZE); - } -} - -void ckbt51_dfu_rx(uint8_t* data, uint8_t length) { - if (data[0] == 0xAA && (data[1] == 0x55 || data[1] == 0x56) && data[2] == (~data[3] & 0xFF)) { - uint16_t checksum = 0; - uint8_t payload_len = data[2]; - - /* Check payload_len validity */ - if (payload_len > RAW_EPSIZE - PACKECT_HEADER_LEN) return; - - uint8_t* payload = &data[PACKECT_HEADER_LEN]; - - for (uint8_t i = 0; i < payload_len - 2; i++) { - checksum += payload[i]; - } - - /* Verify checksum */ - if ((checksum & 0xFF) != payload[payload_len - 2] || checksum >> 8 != payload[payload_len - 1]) return; - static uint8_t sn = 0; - - bool retry = true; - if (sn != data[4]) { - sn = data[4]; - retry = false; - } - - if ((payload[0] & 0xF0) == 0x60) { - ckbt51_send_cmd(payload, payload_len - 2, data[1] == 0x56, retry); - } - } -} - -__attribute__((weak)) void ckbt51_default_ack_handler(uint8_t* data, uint8_t len){}; - -static void ack_handler(uint8_t* data, uint8_t len) { - switch (data[1]) { - case CKBT51_CMD_SEND_KB: - case CKBT51_CMD_SEND_KB_NKRO: - case CKBT51_CMD_SEND_CONSUMER: - case CKBT51_CMD_SEND_SYSTEM: - case CKBT51_CMD_SEND_MOUSE: - switch (data[2]) { - case ACK_SUCCESS: - report_buffer_set_retry(0); - report_buffer_set_inverval(DEFAULT_REPORT_INVERVAL_MS); - break; - case ACK_FIFO_HALF_WARNING: - report_buffer_set_retry(0); - report_buffer_set_inverval(DEFAULT_REPORT_INVERVAL_MS + 5); - break; - case ACK_FIFO_FULL_ERROR: - report_buffer_set_retry(10); - break; - } - break; - default: - ckbt51_default_ack_handler(data, len); - break; - } -} - -static void query_rsp_handler(uint8_t* data, uint8_t len) { - if (data[2]) return; - - switch (data[1]) { - case CKBT51_CMD_READ_STATE_REG: - switch (reg_offset) { - case 0x05: - battery_calculte_voltage(data[3] | (data[4] << 8)); - break; - } - reg_offset = 0xFF; - break; - default: - break; - } -} - -static void ckbt51_event_handler(uint8_t evt_type, uint8_t* data, uint8_t len, uint8_t sn) { - bluetooth_event_t event = {0}; - - switch (evt_type) { - case CKBT51_EVT_ACK: - ack_handler(data, len); - break; - case CKBT51_EVT_RESET: - dprintf("CKBT51_EVT_RESET\n"); - event.evt_type = EVT_RESET; - event.params.reason = data[0]; - break; - case CKBT51_EVT_LE_CONNECTION: - dprintf("CKBT51_EVT_LE_CONNECTION\n"); - break; - case CKBT51_EVT_HOST_TYPE: - dprintf("CKBT51_EVT_HOST_TYPE\n"); - break; - case CKBT51_EVT_CONNECTION: - dprintf("CKBT51_EVT_CONNECTION %d\n", data[0]); - /* Only connection status change message will retry 2 times if no ack */ - ckbt51_send_conn_evt_ack(); - switch (data[0]) { - case CKBT51_CONNECTED: - event.evt_type = EVT_CONNECTED; - break; - case CKBT51_DISCOVERABLE: - event.evt_type = EVT_DISCOVERABLE; - break; - case CKBT51_RECONNECTING: - event.evt_type = EVT_RECONNECTING; - break; - case CKBT51_DISCONNECTED: - event.evt_type = EVT_DISCONNECTED; - break; - case CKBT51_PINCODE_ENTRY: - event.evt_type = EVT_BT_PINCODE_ENTRY; - break; - case CKBT51_EXIT_PINCODE_ENTRY: - event.evt_type = EVT_EXIT_BT_PINCODE_ENTRY; - break; - } - event.params.hostIndex = data[2]; - break; - case CKBT51_EVT_HID_EVENT: - dprintf("CKBT51_EVT_HID_EVENT\n"); - event.evt_type = EVT_HID_INDICATOR; - event.params.led = data[0]; - break; - case CKBT51_EVT_QUERY_RSP: - dprintf("CKBT51_EVT_QUERY_RSP\n"); - query_rsp_handler(data, len); - break; - case CKBT51_EVT_OTA_RSP: - dprintf("CKBT51_EVT_OTA_RSP\n"); - ckbt51_dfu_tx(CKBT51_EVT_OTA_RSP, data, len, sn); - break; - case CKBT51_EVT_BATTERY: - if (data[0] == 0x01) { - dprintf("CKBT51_EVT_BATTERY\n"); - battery_calculte_voltage(data[1] | (data[2] << 8)); - } - break; - default: - dprintf("Unknown event!!!\n"); - break; - } - - if (event.evt_type) bluetooth_event_queue_enqueue(event); -} - -void ckbt51_task(void) { - static bool wait_for_new_pkt = true; - static uint8_t len = 0xff; - static uint8_t sn = 0; - - if (wait_for_new_pkt && WT_DRIVER.iqueue.q_counter >= PACKECT_HEADER_LEN) { - uint8_t buf[32] = {0}; - - if (wait_for_new_pkt) { - if (sdGet(&WT_DRIVER) == 0xAA && sdGet(&WT_DRIVER) == 0x57) { - for (uint8_t i = 0; i < 3; i++) { - buf[i] = sdGet(&WT_DRIVER); - } - // Check wheather len is valid - if ((~buf[0] & 0xFF) == buf[1]) { - len = buf[0]; - sn = buf[2]; - - wait_for_new_pkt = false; - } - } - } - } - - if (!wait_for_new_pkt && WT_DRIVER.iqueue.q_counter >= len) { - uint8_t buf[32] = {0}; - - for (uint8_t i = 0; i < len; i++) { - buf[i] = sdGetTimeout(&WT_DRIVER, TIME_IMMEDIATE); - } - - wait_for_new_pkt = true; - - uint16_t checksum = 0; - for (int i = 0; i < len - 2; i++) - checksum += buf[i]; - - if ((checksum & 0xff) == buf[len - 2] && ((checksum >> 8) & 0xff) == buf[len - 1]) { - ckbt51_event_handler(buf[0], buf + 1, len - 3, sn); - } else { - // TODO: Error handle - } - } -} diff --git a/keyboards/keychron/bluetooth/ckbt51.h b/keyboards/keychron/bluetooth/ckbt51.h deleted file mode 100644 index 123290f949..0000000000 --- a/keyboards/keychron/bluetooth/ckbt51.h +++ /dev/null @@ -1,157 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "stdint.h" - -#ifdef WT_DRIVER_UART_BANK -# define WT_DRIVER_UART_TX_BANK WT_DRIVER_UART_BANK -# define WT_DRIVER_UART_RX_BANK WT_DRIVER_UART_BANK -#endif - -#ifndef WT_DRIVER_UART_TX_BANK -# define WT_DRIVER_UART_TX_BANK GPIOA -#endif - -#ifndef WT_DRIVER_UART_RX_BANK -# define WT_DRIVER_UART_RX_BANK GPIOA -#endif - -#ifndef WT_DRIVER_UART_TX -# define WT_DRIVER_UART_TX 2 -#endif - -#ifndef WT_DRIVER_UART_RX -# define WT_DRIVER_UART_RX 3 -#endif - -#ifndef WT_DRIVER -# define WT_DRIVER SD2 -#endif - -#ifdef USE_GPIOV1 -# ifndef WT_DRIVER_UART_TX_PAL_MODE -# define WT_DRIVER_UART_TX_PAL_MODE PAL_MODE_STM32_ALTERNATE_PUSHPULL -# endif -# ifndef WT_DRIVER_UART_RX_PAL_MODE -# define WT_DRIVER_UART_RX_PAL_MODE PAL_MODE_STM32_ALTERNATE_PUSHPULL -# endif -#else -// The default PAL alternate modes are used to signal that the pins are used for I2C -# ifndef WT_DRIVER_UART_TX_PAL_MODE -# define WT_DRIVER_UART_TX_PAL_MODE 7 -# endif -# ifndef WT_DRIVER_UART_RX_PAL_MODE -# define WT_DRIVER_UART_RX_PAL_MODE 7 -# endif -#endif - -// Error checking -#if !STM32_SERIAL_USE_USART1 && !STM32_SERIAL_USE_USART2 && !STM32_SERIAL_USE_USART3 && !STM32_SERIAL_USE_UART4 && !STM32_SERIAL_USE_UART5 && !STM32_SERIAL_USE_USART6 && !STM32_SERIAL_USE_UART7 && !STM32_SERIAL_USE_UART8 && !STM32_SERIAL_USE_LPUART1 -# error "BT driver activated but no USART/UART peripheral assigned" -#endif - -#define PACKECT_HEADER_LEN 5 -#define BDA_LEN 6 -#define PACKET_MAX_LEN 64 - -enum { - PAIRING_MODE_DEFAULT = 0x00, - PAIRING_MODE_JUST_WORK, - PAIRING_MODE_PASSKEY_ENTRY, - PAIRING_MODE_LESC_OR_SSP, - PAIRING_MODE_INVALID -}; - -enum { - BT_MODE_DEFAUL, - BT_MODE_CLASSIC, - BT_MODE_LE, // Note: CKBT51 doesn't support BLE - BT_MODE_INVALID, -}; - -typedef struct { - uint8_t hostIndex; - uint16_t timeout; /* Pairing timeout, valid value range from 30 to 3600 seconds, 0 for default */ - uint8_t pairingMode; /* 0: default, 1: Just Works, 2: Passkey Entry */ - uint8_t BRorLE; /* Only available for dual mode module. Keep 0 for single mode module */ - uint8_t txPower; /* Only available for BLE module */ - const char* leName; /* Only available for BLE module */ -} pairing_param_t; - -typedef struct { - uint8_t type; - uint16_t full_votage; - uint16_t empty_voltage; - uint16_t shutdown_voltage; -} battery_param_t; - -typedef struct { - uint8_t model_name[11]; - uint8_t mode; - uint8_t bluetooth_version; - uint8_t firmware_version[11]; - uint8_t hardware_version[11]; - uint16_t cmd_set_verson; -} __attribute__((packed)) module_info_t; - -typedef struct { - uint8_t event_mode; /* Must be 0x02 */ - uint16_t connected_idle_timeout; - uint16_t pairing_timeout; /* Range: 30 ~ 3600 second, 0 for default */ - uint8_t pairing_mode; /* 0: default, 1: Just Works, 2: Passkey Entry */ - uint16_t reconnect_timeout; /* 0: default, 0xFF: Unlimited time, 2 ~ 254 seconds */ - uint8_t report_rate; /* 90 or 133 */ - uint8_t rsvd1; - uint8_t rsvd2; - uint8_t vendor_id_source; /* 0: From Bluetooth SIG, 1: From USB-IF */ - uint16_t verndor_id; /* No effect, the vendor ID is 0x3434 */ - uint16_t product_id; - /* Below parametes is only available for BLE module */ - uint16_t le_connection_interval_min; - uint16_t le_connection_interval_max; - uint16_t le_connection_interval_timeout; -} __attribute__((packed)) module_param_t; - -void ckbt51_init(bool wakeup_from_low_power_mode); -void ckbt51_send_cmd(uint8_t* payload, uint8_t len, bool ack_enable, bool retry); - -void ckbt51_send_keyboard(uint8_t* report); -void ckbt51_send_nkro(uint8_t* report); -void ckbt51_send_consumer(uint16_t report); -void ckbt51_send_system(uint16_t report); -void ckbt51_send_mouse(uint8_t* report); - -void ckbt51_become_discoverable(uint8_t host_idx, void* param); -void ckbt51_connect(uint8_t hostIndex, uint16_t timeout); -void ckbt51_disconnect(void); -void ckbt51_switch_host(uint8_t hostIndex); -void ckbt51_read_state_reg(uint8_t reg, uint8_t len); - -void ckbt51_get_info(module_info_t* info); -void ckbt51_set_param(module_param_t* param); -void ckbt51_get_param(module_param_t* param); -void ckbt51_set_local_name(const char* name); -void ckbt51_get_local_name(void); - -void ckbt51_factory_reset(void); -void ckbt51_int_pin_test(bool enable); -void ckbt51_dfu_rx(uint8_t* data, uint8_t length); -void ckbt51_radio_test(uint8_t channel); - -void ckbt51_task(void); - diff --git a/keyboards/keychron/bluetooth/factory_test.c b/keyboards/keychron/bluetooth/factory_test.c deleted file mode 100644 index ebf5f4fef6..0000000000 --- a/keyboards/keychron/bluetooth/factory_test.c +++ /dev/null @@ -1,343 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" -#include "raw_hid.h" -#ifdef KC_BLUETOOTH_ENABLE -# include "transport.h" -# include "ckbt51.h" -#endif - -#ifndef RAW_EPSIZE -# define RAW_EPSIZE 32 -#endif - -#ifndef BL_TEST_KEY1 -# define BL_TEST_KEY1 KC_RIGHT -#endif - -#ifndef BL_TEST_KEY2 -# define BL_TEST_KEY2 KC_HOME -#endif - -extern bool bt_factory_reset; - -enum { - BACKLIGHT_TEST_OFF = 0, - BACKLIGHT_TEST_WHITE, - BACKLIGHT_TEST_RED, - BACKLIGHT_TEST_GREEN, - BACKLIGHT_TEST_BLUE, - BACKLIGHT_TEST_MAX, -}; - -enum { - KEY_PRESS_FN = 0x01 << 0, - KEY_PRESS_J = 0x01 << 1, - KEY_PRESS_Z = 0x01 << 2, - KEY_PRESS_BL_KEY1 = 0x01 << 3, - KEY_PRESS_BL_KEY2 = 0x01 << 4, - KEY_PRESS_FACTORY_RESET = KEY_PRESS_FN | KEY_PRESS_J | KEY_PRESS_Z, - KEY_PRESS_BACKLIGTH_TEST = KEY_PRESS_FN | KEY_PRESS_BL_KEY1 | KEY_PRESS_BL_KEY2, -}; - -enum { - FACTORY_TEST_CMD_BACKLIGHT = 0x01, - FACTORY_TEST_CMD_OS_SWITCH, - FACTORY_TEST_CMD_JUMP_TO_BL, - FACTORY_TEST_CMD_INT_PIN, - FACTORY_TEST_CMD_GET_TRANSPORT, - FACTORY_TEST_CMD_CHARGING_ADC, - FACTORY_TEST_CMD_RADIO_CARRIER, -}; - -enum { - OS_SWITCH = 0x01, -}; - -static uint32_t factory_reset_timer = 0; -static uint8_t factory_reset_state = 0; -static uint8_t backlight_test_mode = BACKLIGHT_TEST_OFF; - -static uint32_t factory_reset_ind_timer = 0; -static uint8_t factory_reset_ind_state = 0; -static bool report_os_sw_state = false; - -void factory_timer_start(void) { - factory_reset_timer = timer_read32() == 0 ? 1 : timer_read32(); -} - -static inline void factory_timer_check(void) { - if (sync_timer_elapsed32(factory_reset_timer) > 3000) { - factory_reset_timer = 0; - - if (factory_reset_state == KEY_PRESS_FACTORY_RESET) { - factory_reset_ind_timer = timer_read32() == 0 ? 1 : timer_read32(); - factory_reset_ind_state++; - - layer_state_t default_layer_tmp = default_layer_state; - eeconfig_init(); - default_layer_set(default_layer_tmp); -#ifdef LED_MATRIX_ENABLE - if (!led_matrix_is_enabled()) led_matrix_enable(); - led_matrix_init(); -#endif -#ifdef RGB_MATRIX_ENABLE - if (!rgb_matrix_is_enabled()) rgb_matrix_enable(); - rgb_matrix_init(); -#endif -#ifdef KC_BLUETOOTH_ENABLE - ckbt51_factory_reset(); - bt_factory_reset = true; -#endif - } else if (factory_reset_state == KEY_PRESS_BACKLIGTH_TEST) { -#ifdef LED_MATRIX_ENABLE - if (!led_matrix_is_enabled()) led_matrix_enable(); -#endif -#ifdef RGB_MATRIX_ENABLE - if (!rgb_matrix_is_enabled()) rgb_matrix_enable(); -#endif - backlight_test_mode = BACKLIGHT_TEST_WHITE; - } - - factory_reset_state = 0; - } -} - -static inline void factory_reset_ind_timer_check(void) { - if (factory_reset_ind_timer && timer_elapsed32(factory_reset_ind_timer) > 250) { - if (factory_reset_ind_state++ > 6) { - factory_reset_ind_timer = factory_reset_ind_state = 0; - } else { - factory_reset_ind_timer = timer_read32() == 0 ? 1 : timer_read32(); - } - } -} - -void process_record_factory_reset(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { -#if defined(FN_KEY1) || defined(FN_KEY2) -# ifdef FN_KEY1 - case FN_KEY1: /* fall through */ -# endif -# ifdef FN_KEY2 - case FN_KEY2: -# endif - if (record->event.pressed) { - factory_reset_state |= KEY_PRESS_FN; - } else { - factory_reset_state &= ~KEY_PRESS_FN; - factory_reset_timer = 0; - } - break; -#endif - case KC_J: - if (record->event.pressed) { - factory_reset_state |= KEY_PRESS_J; - if (factory_reset_state == 0x07) factory_timer_start(); - } else { - factory_reset_state &= ~KEY_PRESS_J; - factory_reset_timer = 0; - } - break; - case KC_Z: - if (record->event.pressed) { - factory_reset_state |= KEY_PRESS_Z; - if (factory_reset_state == 0x07) factory_timer_start(); - } else { - factory_reset_state &= ~KEY_PRESS_Z; - factory_reset_timer = 0; - } - break; -#ifdef BL_TEST_KEY1 - case BL_TEST_KEY1: - if (record->event.pressed) { - if (backlight_test_mode) { - if (++backlight_test_mode >= BACKLIGHT_TEST_MAX) { - backlight_test_mode = BACKLIGHT_TEST_WHITE; - } - } else { - factory_reset_state |= KEY_PRESS_BL_KEY1; - if (factory_reset_state == 0x19) factory_timer_start(); - } - } else { - factory_reset_state &= ~KEY_PRESS_BL_KEY1; - factory_reset_timer = 0; - } - break; -#endif -#ifdef BL_TEST_KEY2 - case BL_TEST_KEY2: - if (record->event.pressed) { - if (backlight_test_mode) { - backlight_test_mode = BACKLIGHT_TEST_OFF; - } else { - factory_reset_state |= KEY_PRESS_BL_KEY2; - if (factory_reset_state == 0x19) factory_timer_start(); - } - } else { - factory_reset_state &= ~KEY_PRESS_BL_KEY2; - factory_reset_timer = 0; - } - break; -#endif - } -} - -#ifdef LED_MATRIX_ENABLE -bool led_matrix_indicators_user(void) { - if (factory_reset_ind_state) { - led_matrix_set_value_all(factory_reset_ind_state % 2 ? 0 : 255); - } - - return true; -} -#endif - -#ifdef RGB_MATRIX_ENABLE -bool rgb_matrix_indicators_user(void) { - if (factory_reset_ind_state) { - backlight_test_mode = BACKLIGHT_TEST_OFF; - rgb_matrix_set_color_all(factory_reset_ind_state % 2 ? 0 : 255, 0, 0); - } else if (backlight_test_mode) { - switch (backlight_test_mode) { - case BACKLIGHT_TEST_WHITE: - rgb_matrix_set_color_all(255, 255, 255); - break; - case BACKLIGHT_TEST_RED: - rgb_matrix_set_color_all(255, 0, 0); - break; - case BACKLIGHT_TEST_GREEN: - rgb_matrix_set_color_all(0, 255, 0); - break; - case BACKLIGHT_TEST_BLUE: - rgb_matrix_set_color_all(0, 0, 255); - break; - } - } - - return true; -} -#endif - -void factory_reset_task(void) { - if (factory_reset_timer) factory_timer_check(); - if (factory_reset_ind_timer) factory_reset_ind_timer_check(); -} - -void factory_test_send(uint8_t *payload, uint8_t length) { - uint16_t checksum = 0; - uint8_t data[RAW_EPSIZE] = {0}; - - uint8_t i = 0; - data[i++] = 0xAB; - - memcpy(&data[i], payload, length); - i += length; - - for (uint8_t i = 1; i < RAW_EPSIZE - 3; i++) - checksum += data[i]; - data[RAW_EPSIZE - 2] = checksum & 0xFF; - data[RAW_EPSIZE - 1] = (checksum >> 8) & 0xFF; - - raw_hid_send(data, RAW_EPSIZE); -} - -void factory_test_rx(uint8_t *data, uint8_t length) { - if (data[0] == 0xAB) { - uint16_t checksum = 0; - - for (uint8_t i = 1; i < RAW_EPSIZE - 3; i++) { - checksum += data[i]; - } - /* Verify checksum */ - if ((checksum & 0xFF) != data[RAW_EPSIZE - 2] || checksum >> 8 != data[RAW_EPSIZE - 1]) return; - -#ifdef KC_BLUETOOTH_ENABLE - uint8_t payload[32]; - uint8_t len = 0; -#endif - - switch (data[1]) { - case FACTORY_TEST_CMD_BACKLIGHT: - backlight_test_mode = data[2]; - factory_reset_timer = 0; - break; - case FACTORY_TEST_CMD_OS_SWITCH: - report_os_sw_state = data[2]; - if (report_os_sw_state) { - dip_switch_read(true); - } - break; - case FACTORY_TEST_CMD_JUMP_TO_BL: - // if (memcmp(&data[2], "JumpToBootloader", strlen("JumpToBootloader")) == 0) bootloader_jump(); - break; -#ifdef KC_BLUETOOTH_ENABLE - case FACTORY_TEST_CMD_INT_PIN: - switch (data[2]) { - /* Enalbe/disable test */ - case 0xA1: - ckbt51_int_pin_test(data[3]); - break; - /* Set INT state */ - case 0xA2: - writePin(CKBT51_INT_INPUT_PIN, data[3]); - break; - /* Report INT state */ - case 0xA3: - payload[len++] = FACTORY_TEST_CMD_INT_PIN; - payload[len++] = 0xA3; - payload[len++] = readPin(BLUETOOTH_INT_INPUT_PIN); - factory_test_send(payload, len); - break; - } - break; - case FACTORY_TEST_CMD_GET_TRANSPORT: - payload[len++] = FACTORY_TEST_CMD_GET_TRANSPORT; - payload[len++] = get_transport(); - payload[len++] = readPin(USB_POWER_SENSE_PIN); - factory_test_send(payload, len); - break; -#endif -#ifdef BATTERY_CHARGE_DONE_DETECT_ADC - case FACTORY_TEST_CMD_CHARGING_ADC: - case 0xA1: - battery_charging_monitor(data[3]); - break; - case 0xA2: - payload[len++] = FACTORY_TEST_CMD_CHARGING_ADC; - payload[len++] = battery_adc_read_charging_pin(); - factory_test_send(payload, len); - break; -#endif - case FACTORY_TEST_CMD_RADIO_CARRIER: - if (data[2] < 79) ckbt51_radio_test(data[2]); - break; - } - } -} - -bool dip_switch_update_user(uint8_t index, bool active) { - if (report_os_sw_state) { -#ifdef INVERT_OS_SWITCH_STATE - active = !active; -#endif - uint8_t payload[3] = {FACTORY_TEST_CMD_OS_SWITCH, OS_SWITCH, active}; - factory_test_send(payload, 3); - } - - return true; -} diff --git a/keyboards/keychron/bluetooth/factory_test.h b/keyboards/keychron/bluetooth/factory_test.h deleted file mode 100644 index d5ef301512..0000000000 --- a/keyboards/keychron/bluetooth/factory_test.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#define FACTORY_RESET_CHECK process_record_factory_reset -#define FACTORY_RESET_TASK factory_reset_task - -void process_record_factory_reset(uint16_t keycode, keyrecord_t *record); -void factory_reset_task(void); -void factory_test_rx(uint8_t *data, uint8_t length); diff --git a/keyboards/keychron/bluetooth/indicator.c b/keyboards/keychron/bluetooth/indicator.c deleted file mode 100644 index 4348460700..0000000000 --- a/keyboards/keychron/bluetooth/indicator.c +++ /dev/null @@ -1,607 +0,0 @@ -/* Copyright 2021 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" -#include "indicator.h" -#include "transport.h" -#include "battery.h" -#include "eeconfig.h" -#include "bluetooth_config.h" -#include "config.h" -#include "rtc_timer.h" - -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) -# ifdef LED_MATRIX_ENABLE -# include "led_matrix.h" -# endif -# ifdef RGB_MATRIX_ENABLE -# include "rgb_matrix.h" -# endif -# include "i2c_master.h" -# include "bat_level_animation.h" -# include "eeprom.h" -#endif - -#ifdef LED_MATRIX_ENABLE -# define DECIDE_TIME(t, duration) (duration == 0 ? LED_MATRIX_TIMEOUT_INFINITE : ((t > duration) ? t : duration)) -#endif -#ifdef RGB_MATRIX_ENABLE -# define DECIDE_TIME(t, duration) (duration == 0 ? RGB_MATRIX_TIMEOUT_INFINITE : ((t > duration) ? t : duration)) -#endif - -#define LED_ON 0x80 -#define INDICATOR_SET(s) memcpy(&indicator_config, &s##_config, sizeof(indicator_config_t)); - -enum { - BACKLIGHT_OFF = 0x00, - BACKLIGHT_ON_CONNECTED = 0x01, - BACKLIGHT_ON_UNCONNECTED = 0x02, -}; - -static indicator_config_t pairing_config = INDICATOR_CONFIG_PARING; -static indicator_config_t connected_config = INDICATOR_CONFIG_CONNECTD; -static indicator_config_t reconnecting_config = INDICATOR_CONFIG_RECONNECTING; -static indicator_config_t disconnected_config = INDICATOR_CONFIG_DISCONNECTED; -indicator_config_t indicator_config; -static bluetooth_state_t indicator_state; -static uint16_t next_period; -static indicator_type_t type; -static uint32_t indicator_timer_buffer = 0; - -#if defined(BAT_LOW_LED_PIN) || defined(BAT_LOW_LED_PIN_STATE) -static uint32_t bat_low_pin_indicator = 0; -static uint32_t bat_low_blink_duration = 0; -# ifdef BAT_LOW_LED_PIN_STATE -bool bat_low_led_pin_state = false; -# endif -#endif - -#if defined(LOW_BAT_IND_INDEX) -static uint32_t bat_low_backlit_indicator = 0; -static uint8_t bat_low_ind_state = 0; -static uint32_t rtc_time = 0; -#endif - -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) -backlight_state_t original_backlight_state; - -static uint8_t host_led_matrix_list[HOST_DEVICES_COUNT] = HOST_LED_MATRIX_LIST; -#endif - -#ifdef HOST_LED_PIN_LIST -static pin_t host_led_pin_list[HOST_DEVICES_COUNT] = HOST_LED_PIN_LIST; -#endif - -#ifdef LED_MATRIX_ENABLE -# define LED_DRIVER led_matrix_driver -# define LED_INDICATORS_KB led_matrix_indicators_kb -# define LED_INDICATORS_USER led_matrix_indicators_user -# define LED_NONE_INDICATORS_KB led_matrix_none_indicators_kb -# define SET_ALL_LED_OFF() led_matrix_set_value_all(0) -# define SET_LED_OFF(idx) led_matrix_set_value(idx, 0) -# define SET_LED_ON(idx) led_matrix_set_value(idx, 255) -# define SET_LED_BT(idx) led_matrix_set_value(idx, 255) -# define SET_LED_LOW_BAT(idx) led_matrix_set_value(idx, 255) -# define LED_DRIVER_IS_ENABLED led_matrix_is_enabled -# define LED_DRIVER_EECONFIG_RELOAD() \ - eeprom_read_block(&led_matrix_eeconfig, EECONFIG_LED_MATRIX, sizeof(led_matrix_eeconfig)); \ - if (!led_matrix_eeconfig.mode) { \ - eeconfig_update_led_matrix_default(); \ - } -# define LED_DRIVER_ALLOW_SHUTDOWN led_matrix_driver_allow_shutdown -# define LED_DRIVER_ENABLE_NOEEPROM led_matrix_enable_noeeprom -# define LED_DRIVER_DISABLE_NOEEPROM led_matrix_disable_noeeprom -# define LED_DRIVER_DISABLE_TIMEOUT_SET led_matrix_disable_timeout_set -# define LED_DRIVER_DISABLE_TIME_RESET led_matrix_disable_time_reset -#endif - -#ifdef RGB_MATRIX_ENABLE -# define LED_DRIVER rgb_matrix_driver -# define LED_INDICATORS_KB rgb_matrix_indicators_kb -# define LED_INDICATORS_USER rgb_matrix_indicators_user -# define LED_NONE_INDICATORS_KB rgb_matrix_none_indicators_kb -# define SET_ALL_LED_OFF() rgb_matrix_set_color_all(0, 0, 0) -# define SET_LED_OFF(idx) rgb_matrix_set_color(idx, 0, 0, 0) -# define SET_LED_ON(idx) rgb_matrix_set_color(idx, 255, 255, 255) -# define SET_LED_BT(idx) rgb_matrix_set_color(idx, 0, 0, 255) -# define SET_LED_LOW_BAT(idx) rgb_matrix_set_color(idx, 255, 0, 0) -# define LED_DRIVER_IS_ENABLED rgb_matrix_is_enabled -# define LED_DRIVER_EECONFIG_RELOAD() \ - eeprom_read_block(&rgb_matrix_config, EECONFIG_RGB_MATRIX, sizeof(rgb_matrix_config)); \ - if (!rgb_matrix_config.mode) { \ - eeconfig_update_rgb_matrix_default(); \ - } -# define LED_DRIVER_ALLOW_SHUTDOWN rgb_matrix_driver_allow_shutdown -# define LED_DRIVER_ENABLE_NOEEPROM rgb_matrix_enable_noeeprom -# define LED_DRIVER_DISABLE_NOEEPROM rgb_matrix_disable_noeeprom -# define LED_DRIVER_DISABLE_TIMEOUT_SET rgb_matrix_disable_timeout_set -# define LED_DRIVER_DISABLE_TIME_RESET rgb_matrix_disable_time_reset -#endif -void indicator_init(void) { - memset(&indicator_config, 0, sizeof(indicator_config)); - -#ifdef HOST_LED_PIN_LIST - for (uint8_t i = 0; i < HOST_DEVICES_COUNT; i++) { - setPinOutput(host_led_pin_list[i]); - writePin(host_led_pin_list[i], !HOST_LED_PIN_ON_STATE); - } -#endif - -#ifdef BAT_LOW_LED_PIN - setPinOutput(BAT_LOW_LED_PIN); - writePin(BAT_LOW_LED_PIN, !BAT_LOW_LED_PIN_ON_STATE); -#endif -} - -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) -void indicator_enable(void) { - if (!LED_DRIVER_IS_ENABLED()) { - LED_DRIVER_ENABLE_NOEEPROM(); - } -} - -inline void indicator_disable(void) { - LED_DRIVER_DISABLE_NOEEPROM(); -} - -void indicator_set_backlit_timeout(uint32_t time) { - LED_DRIVER_DISABLE_TIMEOUT_SET(time); -} - -static inline void indicator_reset_backlit_time(void) { - LED_DRIVER_DISABLE_TIME_RESET(); -} - -bool indicator_is_enabled(void) { - return LED_DRIVER_IS_ENABLED(); -} - -void indicator_eeconfig_reload(void) { - LED_DRIVER_EECONFIG_RELOAD(); -} - -#endif - -bool indicator_is_running(void) { - return -#if defined(BAT_LOW_LED_PIN) || defined(BAT_LOW_LED_PIN_STATE) - bat_low_blink_duration || -#endif -#if defined(LOW_BAT_IND_INDEX) - bat_low_ind_state || -#endif - !!indicator_config.value; -} - -static void indicator_timer_cb(void *arg) { - if (*(indicator_type_t *)arg != INDICATOR_LAST) type = *(indicator_type_t *)arg; - - bool time_up = false; - switch (type) { - case INDICATOR_NONE: - break; - case INDICATOR_OFF: - next_period = 0; - time_up = true; - break; - - case INDICATOR_ON: - if (indicator_config.value) { - if (indicator_config.elapsed == 0) { - indicator_config.value |= LED_ON; - - if (indicator_config.duration) { - indicator_config.elapsed += indicator_config.duration; - } - } else - time_up = true; - } - break; - - case INDICATOR_ON_OFF: - if (indicator_config.value) { - if (indicator_config.elapsed == 0) { - indicator_config.value |= LED_ON; - next_period = indicator_config.on_time; - } else { - indicator_config.value = indicator_config.value & 0x0F; - next_period = indicator_config.duration - indicator_config.on_time; - } - - if ((indicator_config.duration == 0 || indicator_config.elapsed <= indicator_config.duration) && next_period != 0) { - indicator_config.elapsed += next_period; - } else { - time_up = true; - } - } - break; - - case INDICATOR_BLINK: - if (indicator_config.value) { - if (indicator_config.value & LED_ON) { - indicator_config.value = indicator_config.value & 0x0F; - next_period = indicator_config.off_time; - } else { - indicator_config.value |= LED_ON; - next_period = indicator_config.on_time; - } - - if ((indicator_config.duration == 0 || indicator_config.elapsed <= indicator_config.duration) && next_period != 0) { - indicator_config.elapsed += next_period; - } else { - time_up = true; - } - } - break; - default: - time_up = true; - - next_period = 0; - break; - } - -#ifdef HOST_LED_PIN_LIST - if (indicator_config.value) { - uint8_t idx = (indicator_config.value & 0x0F) - 1; - - if (idx < HOST_DEVICES_COUNT) { - if ((indicator_config.value & 0x80) && !time_up) { - writePin(host_led_pin_list[idx], HOST_LED_PIN_ON_STATE); - } else { - writePin(host_led_pin_list[idx], !HOST_LED_PIN_ON_STATE); - } - } - } -#endif - - if (time_up) { - /* Set indicator to off on timeup, avoid keeping light up until next update in raindrop effect */ - indicator_config.value = indicator_config.value & 0x0F; -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) - LED_INDICATORS_KB(); -#endif - indicator_config.value = 0; - } - - if (indicator_config.value == 0) { - indicator_eeconfig_reload(); - if (!LED_DRIVER_IS_ENABLED()) indicator_disable(); - } -} - -void indicator_set(bluetooth_state_t state, uint8_t host_index) { - if (get_transport() != TRANSPORT_BLUETOOTH) return; - dprintf("indicator set: %d, %d\n", state, host_index); - - static uint8_t current_state = 0; - static uint8_t current_host = 0; - - bool host_index_changed = false; - if (current_host != host_index && state != BLUETOOTH_DISCONNECTED) { - host_index_changed = true; - current_host = host_index; - } - - if (current_state != state || host_index_changed) { - current_state = state; - } else { - return; - } - - indicator_timer_buffer = sync_timer_read32(); - - /* Turn on backlight mode for indicator */ - indicator_enable(); - indicator_reset_backlit_time(); - - switch (state) { - case BLUETOOTH_DISCONNECTED: -#ifdef HOST_LED_PIN_LIST - writePin(host_led_pin_list[host_index - 1], !HOST_LED_PIN_ON_STATE); -#endif - INDICATOR_SET(disconnected); - indicator_config.value = (indicator_config.type == INDICATOR_NONE) ? 0 : host_index; - indicator_timer_cb((void *)&indicator_config.type); - - if (battery_is_critical_low()) { - indicator_set_backlit_timeout(1000); - } else { - /* Set timer so that user has chance to turn on the backlight when is off */ - indicator_set_backlit_timeout(DECIDE_TIME(DISCONNECTED_BACKLIGHT_DISABLE_TIMEOUT * 1000, indicator_config.duration)); - } - break; - - case BLUETOOTH_CONNECTED: - if (indicator_state != BLUETOOTH_CONNECTED) { - INDICATOR_SET(connected); - indicator_config.value = (indicator_config.type == INDICATOR_NONE) ? 0 : host_index; - indicator_timer_cb((void *)&indicator_config.type); - } - indicator_set_backlit_timeout(DECIDE_TIME(CONNECTED_BACKLIGHT_DISABLE_TIMEOUT * 1000, indicator_config.duration)); - break; - - case BLUETOOTH_PARING: - INDICATOR_SET(pairing); - indicator_config.value = (indicator_config.type == INDICATOR_NONE) ? 0 : LED_ON | host_index; - indicator_timer_cb((void *)&indicator_config.type); - indicator_set_backlit_timeout(DECIDE_TIME(DISCONNECTED_BACKLIGHT_DISABLE_TIMEOUT * 1000, indicator_config.duration)); - break; - - case BLUETOOTH_RECONNECTING: - INDICATOR_SET(reconnecting); - indicator_config.value = (indicator_config.type == INDICATOR_NONE) ? 0 : LED_ON | host_index; - indicator_timer_cb((void *)&indicator_config.type); - indicator_set_backlit_timeout(DECIDE_TIME(DISCONNECTED_BACKLIGHT_DISABLE_TIMEOUT * 1000, indicator_config.duration)); - break; - - case BLUETOOTH_SUSPEND: - INDICATOR_SET(disconnected); - indicator_config.value = (indicator_config.type == INDICATOR_NONE) ? 0 : host_index; - indicator_timer_cb((void *)&indicator_config.type); - indicator_set_backlit_timeout(100); - break; - - default: - break; - } - - indicator_state = state; -} - -void indicator_stop(void) { - indicator_config.value = 0; - indicator_eeconfig_reload(); - - if (indicator_is_enabled()) { - indicator_enable(); - } else { - indicator_disable(); - } -} - -#if defined(BAT_LOW_LED_PIN) || defined(BAT_LOW_LED_PIN_STATE) -void indicator_battery_low_enable(bool enable) { - if (enable) { - if (bat_low_blink_duration == 0) { - bat_low_blink_duration = bat_low_pin_indicator = sync_timer_read32() | 1; - } else - bat_low_blink_duration = sync_timer_read32() | 1; - } else { -# if defined(BAT_LOW_LED_PIN) - writePin(BAT_LOW_LED_PIN, !BAT_LOW_LED_PIN_ON_STATE); -# else - bat_low_led_pin_state = false; -# endif - } -} -#endif - -#if defined(LOW_BAT_IND_INDEX) -void indicator_battery_low_backlit_enable(bool enable) { - if (enable) { - uint32_t t = rtc_timer_read_ms(); - /* Check overflow */ - if (rtc_time > t) { - if (bat_low_ind_state == 0) - rtc_time = t; // Update rtc_time if indicating is not running - else { - rtc_time += t; - } - } - /* Indicating at first time or after the interval */ - if ((rtc_time == 0 || t - rtc_time > LOW_BAT_LED_TRIG_INTERVAL) && bat_low_ind_state == 0) { - bat_low_backlit_indicator = enable ? (timer_read32() == 0 ? 1 : timer_read32()) : 0; - rtc_time = rtc_timer_read_ms(); - bat_low_ind_state = 1; - - indicator_enable(); - } - } else { - rtc_time = 0; - bat_low_ind_state = 0; - - indicator_eeconfig_reload(); - if (!LED_DRIVER_IS_ENABLED()) indicator_disable(); - } -} -#endif - -void indicator_battery_low(void) { -#if defined(BAT_LOW_LED_PIN) || defined(BAT_LOW_LED_PIN_STATE) - if (bat_low_pin_indicator && sync_timer_elapsed32(bat_low_pin_indicator) > (LOW_BAT_LED_BLINK_PERIOD)) { -# if defined(BAT_LOW_LED_PIN) - togglePin(BAT_LOW_LED_PIN); -# else - bat_low_led_pin_state = !bat_low_led_pin_state; -# endif - bat_low_pin_indicator = sync_timer_read32() | 1; - // Turn off low battery indication if we reach the duration -# if defined(BAT_LOW_LED_PIN) - if (sync_timer_elapsed32(bat_low_blink_duration) > LOW_BAT_LED_BLINK_DURATION && palReadLine(BAT_LOW_LED_PIN) != BAT_LOW_LED_PIN_ON_STATE) { -# elif defined(BAT_LOW_LED_PIN_STATE) - if (sync_timer_elapsed32(bat_low_blink_duration) > LOW_BAT_LED_BLINK_DURATION) { -# endif - bat_low_blink_duration = bat_low_pin_indicator = 0; - } - } -#endif -#if defined(LOW_BAT_IND_INDEX) - if (bat_low_ind_state) { - if ((bat_low_ind_state & 0x0F) <= (LOW_BAT_LED_BLINK_TIMES) && sync_timer_elapsed32(bat_low_backlit_indicator) > (LOW_BAT_LED_BLINK_PERIOD)) { - if (bat_low_ind_state & 0x80) { - bat_low_ind_state &= 0x7F; - bat_low_ind_state++; - } else { - bat_low_ind_state |= 0x80; - } - - bat_low_backlit_indicator = sync_timer_read32() == 0 ? 1 : sync_timer_read32(); - - /* Restore backligth state */ - if ((bat_low_ind_state & 0x0F) > (LOW_BAT_LED_BLINK_TIMES)) { -# if defined(NUM_LOCK_INDEX) || defined(CAPS_LOCK_INDEX) || defined(SCROLL_LOCK_INDEX) || defined(COMPOSE_LOCK_INDEX) || defined(KANA_LOCK_INDEX) - if (LED_DRIVER_ALLOW_SHUTDOWN()) -# endif - indicator_disable(); - } - } else if ((bat_low_ind_state & 0x0F) > (LOW_BAT_LED_BLINK_TIMES)) { - bat_low_ind_state = 0; - } - } -#endif -} - -void indicator_task(void) { - bat_level_animiation_task(); - - if (indicator_config.value && sync_timer_elapsed32(indicator_timer_buffer) >= next_period) { - indicator_timer_cb((void *)&type); - indicator_timer_buffer = sync_timer_read32(); - } - - indicator_battery_low(); -} - -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) -__attribute__((weak)) void os_state_indicate(void) { -# if defined(NUM_LOCK_INDEX) - if (host_keyboard_led_state().num_lock) { - SET_LED_ON(NUM_LOCK_INDEX); - } -# endif -# if defined(CAPS_LOCK_INDEX) - if (host_keyboard_led_state().caps_lock) { -# if defined(DIM_CAPS_LOCK) - SET_LED_OFF(CAPS_LOCK_INDEX); -# else - SET_LED_ON(CAPS_LOCK_INDEX); -# endif - } -# endif -# if defined(SCROLL_LOCK_INDEX) - if (host_keyboard_led_state().scroll_lock) { - SET_LED_ON(SCROLL_LOCK_INDEX); - } -# endif -# if defined(COMPOSE_LOCK_INDEX) - if (host_keyboard_led_state().compose) { - SET_LED_ON(COMPOSE_LOCK_INDEX); - } -# endif -# if defined(KANA_LOCK_INDEX) - if (host_keyboard_led_state().kana) { - SET_LED_ON(KANA_LOCK_INDEX); - } -# endif -} - -bool LED_INDICATORS_KB(void) { - if (!LED_INDICATORS_USER()) { - return false; - } - - if (get_transport() == TRANSPORT_BLUETOOTH) { - /* Prevent backlight flash caused by key activities */ - if (battery_is_critical_low()) { - SET_ALL_LED_OFF(); - return false; - } - -# if (defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE)) && defined(LOW_BAT_IND_INDEX) - if (battery_is_empty()) SET_ALL_LED_OFF(); - if (bat_low_ind_state && (bat_low_ind_state & 0x0F) <= LOW_BAT_LED_BLINK_TIMES) { - if (bat_low_ind_state & 0x80) - SET_LED_LOW_BAT(LOW_BAT_IND_INDEX); - else - SET_LED_OFF(LOW_BAT_IND_INDEX); - } -# endif - if (bat_level_animiation_actived()) { - bat_level_animiation_indicate(); - } - static uint8_t last_host_index = 0xFF; - - if (indicator_config.value) { - uint8_t host_index = indicator_config.value & 0x0F; - - if (indicator_config.highlight) { - SET_ALL_LED_OFF(); - } else if (last_host_index != host_index) { - SET_LED_OFF(host_led_matrix_list[last_host_index - 1]); - last_host_index = host_index; - } - - if (indicator_config.value & 0x80) { - SET_LED_BT(host_led_matrix_list[host_index - 1]); - } else { - SET_LED_OFF(host_led_matrix_list[host_index - 1]); - } - } else - os_state_indicate(); - - } else - os_state_indicate(); - - return false; -} - -bool led_update_kb(led_t led_state) { - bool res = led_update_user(led_state); - if (res) { - led_update_ports(led_state); - - if (!LED_DRIVER_IS_ENABLED()) { - # if defined(LED_MATRIX_DRIVER_SHUTDOWN_ENABLE) || defined(RGB_MATRIX_DRIVER_SHUTDOWN_ENABLE) - LED_DRIVER.exit_shutdown(); - # endif - SET_ALL_LED_OFF(); - os_state_indicate(); - LED_DRIVER.flush(); - # if defined(LED_MATRIX_DRIVER_SHUTDOWN_ENABLE) || defined(RGB_MATRIX_DRIVER_SHUTDOWN_ENABLE) - if (LED_DRIVER_ALLOW_SHUTDOWN()) LED_DRIVER.shutdown(); - # endif - } - } - - return res; -} - -void LED_NONE_INDICATORS_KB(void) { - os_state_indicate(); -} - -# if defined(LED_MATRIX_DRIVER_SHUTDOWN_ENABLE) || defined(RGB_MATRIX_DRIVER_SHUTDOWN_ENABLE) -bool LED_DRIVER_ALLOW_SHUTDOWN(void) { -# if defined(NUM_LOCK_INDEX) - if (host_keyboard_led_state().num_lock) return false; -# endif -# if defined(CAPS_LOCK_INDEX) && !defined(DIM_CAPS_LOCK) - if (host_keyboard_led_state().caps_lock) return false; -# endif -# if defined(SCROLL_LOCK_INDEX) - if (host_keyboard_led_state().scroll_lock) return false; -# endif -# if defined(COMPOSE_LOCK_INDEX) - if (host_keyboard_led_state().compose) return false; -# endif -# if defined(KANA_LOCK_INDEX) - if (host_keyboard_led_state().kana) return false; -# endif - return true; -} -# endif - -#endif diff --git a/keyboards/keychron/bluetooth/indicator.h b/keyboards/keychron/bluetooth/indicator.h deleted file mode 100644 index a2eb3f019c..0000000000 --- a/keyboards/keychron/bluetooth/indicator.h +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "config.h" -#include "bluetooth.h" - -/* Indication of pairing */ -#ifndef INDICATOR_CONFIG_PARING -# define INDICATOR_CONFIG_PARING {INDICATOR_BLINK, 1000, 1000, 0, true, 0}; -#endif - -/* Indication on Connected */ -#ifndef INDICATOR_CONFIG_CONNECTD -# define INDICATOR_CONFIG_CONNECTD {INDICATOR_ON_OFF, 2000, 250, 2000, true, 0}; -#endif - -/* Reconnecting indication */ -#ifndef INDICATOR_CONFIG_RECONNECTING -# define INDICATOR_CONFIG_RECONNECTING {INDICATOR_BLINK, 100, 100, 600, true, 0}; -#endif - -/* Disconnected indication */ -#ifndef INDICATOR_CONFIG_DISCONNECTED -# define INDICATOR_CONFIG_DISCONNECTED {INDICATOR_NONE, 100, 100, 600, false, 0}; -#endif - -/* Uint: Second */ -#ifndef DISCONNECTED_BACKLIGHT_DISABLE_TIMEOUT -# define DISCONNECTED_BACKLIGHT_OFF_DELAY_TIME 40 -#endif - -/* Uint: Second, the timer restarts on key activities. */ -#ifndef CONNECTED_BACKLIGHT_DISABLE_TIMEOUT -# define CONNECTED_BACKLIGHT_OFF_DELAY_TIME 600 -#endif - -#if defined(BAT_LOW_LED_PIN) || defined(BAT_LOW_LED_PIN_STATE) -/* Uint: ms */ -# ifndef LOW_BAT_LED_BLINK_PERIOD -# define LOW_BAT_LED_BLINK_PERIOD 1000 -# endif - -# ifndef LOW_BAT_LED_BLINK_DURATION -# define LOW_BAT_LED_BLINK_DURATION 10000 -# endif -#endif - -#ifdef LOW_BAT_IND_INDEX -/* Uint: ms */ -# ifndef LOW_BAT_LED_BLINK_PERIOD -# define LOW_BAT_LED_BLINK_PERIOD 500 -# endif - -# ifndef LOW_BAT_LED_BLINK_TIMES -# define LOW_BAT_LED_BLINK_TIMES 3 -# endif - -# ifndef LOW_BAT_LED_TRIG_INTERVAL -# define LOW_BAT_LED_TRIG_INTERVAL 30000 -# endif -#endif - -#if BT_HOST_MAX_COUNT > 6 -# pragma error("HOST_COUNT max value is 6") -#endif - -typedef enum { INDICATOR_NONE, INDICATOR_OFF, INDICATOR_ON, INDICATOR_ON_OFF, INDICATOR_BLINK, INDICATOR_LAST } indicator_type_t; - -typedef struct PACKED { - indicator_type_t type; - uint32_t on_time; - uint32_t off_time; - uint32_t duration; - bool highlight; - uint8_t value; - uint32_t elapsed; -} indicator_config_t; - -typedef struct PACKED { - uint8_t value; - bool saved; -} backlight_state_t; - -void indicator_init(void); -void indicator_set(bluetooth_state_t state, uint8_t host_index); -void indicator_backlight_timer_reset(bool enable); -bool indicator_hook_key(uint16_t keycode); -void indicator_enable(void); -void indicator_disable(void); -void indicator_stop(void); -void indicator_eeconfig_reload(void); -bool indicator_is_enabled(void); -bool indicator_is_running(void); -void os_state_indicate(void); - -#ifdef BAT_LOW_LED_PIN -void indicator_battery_low_enable(bool enable); -#endif -#if defined(LOW_BAT_IND_INDEX) -void indicator_battery_low_backlit_enable(bool enable); -#endif - -void indicator_task(void); diff --git a/keyboards/keychron/bluetooth/lpm.c b/keyboards/keychron/bluetooth/lpm.c deleted file mode 100644 index 187c6d75c0..0000000000 --- a/keyboards/keychron/bluetooth/lpm.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/****************************************************************************** - * - * Filename: lpm.c - * - * Description: Contains low power mode implementation - * - ******************************************************************************/ - -#include "quantum.h" -#if defined(PROTOCOL_CHIBIOS) -# include -#endif -#include "bluetooth.h" -#include "indicator.h" -#include "lpm.h" -#include "transport.h" -#include "battery.h" - -extern matrix_row_t matrix[MATRIX_ROWS]; -extern bluetooth_transport_t bluetooth_transport; - -static uint32_t lpm_timer_buffer; -static bool lpm_time_up = false; -static matrix_row_t empty_matrix[MATRIX_ROWS] = {0}; - -void lpm_init(void) { -#ifdef USB_POWER_SENSE_PIN -# if (USB_POWER_CONNECTED_LEVEL == 0) - setPinInputHigh(USB_POWER_SENSE_PIN); -# else - setPinInputLow(USB_POWER_SENSE_PIN); -# endif -#endif - lpm_timer_reset(); -} - -inline void lpm_timer_reset(void) { - lpm_time_up = false; - lpm_timer_buffer = sync_timer_read32(); -} - -void lpm_timer_stop(void) { - lpm_time_up = false; - lpm_timer_buffer = 0; -} - -static inline bool lpm_any_matrix_action(void) { return memcmp(matrix, empty_matrix, sizeof(empty_matrix)); } - -/* Implement of entering low power mode and wakeup varies per mcu or platform */ -__attribute__((weak)) void enter_power_mode(pm_t mode) {} - -__attribute__((weak)) bool usb_power_connected(void) { -#ifdef USB_POWER_SENSE_PIN - return readPin(USB_POWER_SENSE_PIN) == USB_POWER_CONNECTED_LEVEL; -#endif - - return true; -} - -void lpm_task(void) { - if (!lpm_time_up && sync_timer_elapsed32(lpm_timer_buffer) > RUN_MODE_PROCESS_TIME) { - lpm_time_up = true; - lpm_timer_buffer = 0; - } - - if (get_transport() == TRANSPORT_BLUETOOTH && lpm_time_up && !indicator_is_running() -#ifdef LED_MATRIX_ENABLE - && led_matrix_is_driver_shutdown() -#endif -#ifdef RGB_MATRIX_ENABLE - && rgb_matrix_is_driver_shutdown() -#endif - && !lpm_any_matrix_action() && !battery_power_on_sample()) - - enter_power_mode(LOW_POWER_MODE); -} diff --git a/keyboards/keychron/bluetooth/lpm.h b/keyboards/keychron/bluetooth/lpm.h deleted file mode 100644 index bacc82a716..0000000000 --- a/keyboards/keychron/bluetooth/lpm.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#ifndef RUN_MODE_PROCESS_TIME -# define RUN_MODE_PROCESS_TIME 1000 -#endif - -typedef enum { PM_RUN, PM_LOW_POWER_RUN, PM_SLEEP, PM_LOW_POWER_SLEEP, PM_STOP0, PM_STOP1, PM_STOP2, PM_STANDBY_WITH_RAM, PM_STANDBY, PM_SHUTDOWN } pm_t; - -void lpm_init(void); -void lpm_timer_reset(void); -void lpm_timer_stop(void); -bool usb_power_connected(void); -void enter_power_mode(pm_t mode); -void lpm_task(void); diff --git a/keyboards/keychron/bluetooth/lpm_stm32l432.c b/keyboards/keychron/bluetooth/lpm_stm32l432.c deleted file mode 100644 index 288cb66765..0000000000 --- a/keyboards/keychron/bluetooth/lpm_stm32l432.c +++ /dev/null @@ -1,330 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/****************************************************************************** - * - * Filename: lpm_stm32l432.c - * - * Description: Contains low power mode implementation - * - ******************************************************************************/ - -#include "quantum.h" -#include -#include "bluetooth.h" -#include "indicator.h" -#include "lpm.h" -#include "transport.h" -#include "battery.h" -#include "report_buffer.h" -#include "stm32_bd.inc" -#include "debounce.h" - -extern pin_t row_pins[MATRIX_ROWS]; -extern void select_all_cols(void); -extern bluetooth_transport_t bluetooth_transport; - -static pm_t power_mode = PM_RUN; - -static inline void stm32_clock_fast_init(void); - -bool lpm_set(pm_t mode) { - switch (mode) { -#ifdef LOW_POWER_RUN_MODE_ENABLE - case PM_RUN: - if (power_mode != PM_LOW_POWER_RUN)) return; - /* Set main regulator */ - PWR->CR1 &= ~PWR_CR1_LPR; - while (PWR->SR2 & PWR_SR2_REGLPF) - ; - // TODO: restore sysclk - return true; - // break; - - case PM_LOW_POWER_RUN: - if (power_mode != PM_RUN) return; - - // FLASH->ACR |= FLASH_ACR_RUN_PD; // Optional - // TODO: Decrease sysclk below 2 MHz - PWR->CR1 |= PWR_CR1_LPR; - return true; - // break; -#endif - case PM_SLEEP: - /* Wake source: Any interrupt or event */ - if (power_mode != PM_RUN) return false; - - SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; - break; - -#ifdef LOW_POWER_RUN_MODE_ENABLE - case PM_LOW_POWER_SLEEP: - /* Wake source: Any interrupt or event */ - if (power_mode != PM_LOW_POWER_RUN) return; /* Can only transit from PM_LOW_POWER_RUN */ - - SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; - __WFI(); - exit_low_power_mode(); - break; -#endif - case PM_STOP0: - /* Wake source: Reset pin, all I/Os, BOR, PVD, PVM, RTC, LCD, IWDG, - COMPx, USARTx, LPUART1, I2Cx, LPTIMx, USB, SWPMI */ - if (power_mode != PM_RUN) return false; - - SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; - PWR->CR1 |= PWR_CR1_LPMS_STOP0; - break; - - case PM_STOP1: - /* Wake source: Reset pin, all I/Os, BOR, PVD, PVM, RTC, LCD, IWDG, - COMPx, USARTx, LPUART1, I2Cx, LPTIMx, USB, SWPMI */ - if (power_mode != PM_RUN && power_mode != PM_LOW_POWER_RUN) return false; - - SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; - PWR->CR1 |= PWR_CR1_LPMS_STOP1; - break; - - case PM_STOP2: - /* Wake source: Reset pin, all I/Os, BOR, PVD, PVM, RTC, LCD, IWDG, - COMPx (x=1, 2), I2C3, LPUART1, LPTIM1, LPTIM2 */ - if (power_mode != PM_RUN) return false; - - SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; - PWR->CR1 |= PWR_CR1_LPMS_STOP2; - break; - - case PM_STANDBY_WITH_RAM: - /* Wake source: Reset, 5 I/O(PA0, PC13, PE6, PA2, PC5), BOR, RTC, IWDG */ - if (power_mode != PM_RUN && power_mode != PM_LOW_POWER_RUN) return false; - - SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; - PWR->CR1 |= PWR_CR1_LPMS_STANDBY; - PWR->CR3 |= PWR_CR3_RRS; - break; - - case PM_STANDBY: - /* Wake source: Reset, 2 I/O(PA0, PA2) in STM32L432Kx,, BOR, RTC, IWDG */ - if (power_mode != PM_RUN && power_mode != PM_LOW_POWER_RUN) return false; - - SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; - PWR->CR1 |= PWR_CR1_LPMS_STANDBY; - PWR->CR3 &= ~PWR_CR3_RRS; - break; - - case PM_SHUTDOWN: - /* Wake source: Reset, 2 I/O(PA0, PA2) in STM32L432Kx, RTC */ - if (power_mode != PM_RUN && power_mode != PM_LOW_POWER_RUN) return false; - - SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; - PWR->CR1 |= PWR_CR1_LPMS_SHUTDOWN; - break; - - default: - return false; - } - - return true; -} - -static inline void enter_low_power_mode_prepare(void) { -#if defined(KEEP_USB_CONNECTION_IN_BLUETOOTH_MODE) - /* Usb unit is actived and running, stop and disconnect first */ - usbStop(&USBD1); - usbDisconnectBus(&USBD1); - - /* Isolate USB to save power.*/ - PWR->CR2 &= ~PWR_CR2_USV; /*PWR_CR2_USV is available on STM32L4x2xx and STM32L4x3xx devices only. */ -#endif - - palEnableLineEvent(BLUETOOTH_INT_INPUT_PIN, PAL_EVENT_MODE_FALLING_EDGE); - palEnableLineEvent(USB_POWER_SENSE_PIN, PAL_EVENT_MODE_BOTH_EDGES); - - /* Enable key matrix wake up */ - pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; - - for (uint8_t x = 0; x < MATRIX_ROWS; x++) { - if (row_pins[x] != NO_PIN) { - palEnableLineEvent(row_pins[x], PAL_EVENT_MODE_BOTH_EDGES); - } - } - - select_all_cols(); - -#if defined(DIP_SWITCH_PINS) -# define NUMBER_OF_DIP_SWITCHES (sizeof(dip_switch_pad) / sizeof(pin_t)) - static pin_t dip_switch_pad[] = DIP_SWITCH_PINS; - - for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) { - setPinInputLow(dip_switch_pad[i]); - } -#endif -} - -static inline void lpm_wakeup(void) { - chSysLock(); - stm32_clock_fast_init(); - chSysUnlock(); - - if (bluetooth_transport.init) bluetooth_transport.init(true); - - chSysLock(); - SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; - - PWR->SCR |= PWR_SCR_CWUF; - PWR->SCR |= PWR_SCR_CSBF; - - /* TIMx is disable during stop/standby/sleep mode, init after wakeup */ - stInit(); - timer_init(); - chSysUnlock(); - battery_init(); - - /* Disable all wake up pins */ - for (uint8_t x = 0; x < MATRIX_ROWS; x++) { - if (row_pins[x] != NO_PIN) { - palDisableLineEvent(row_pins[x]); - } - } - palDisableLineEvent(BLUETOOTH_INT_INPUT_PIN); - -#ifdef USB_POWER_SENSE_PIN - palDisableLineEvent(USB_POWER_SENSE_PIN); - -# if defined(KEEP_USB_CONNECTION_IN_BLUETOOTH_MODE) - if (usb_power_connected()) { - hsi48_init(); - /* Remove USB isolation.*/ - // PWR->CR2 |= PWR_CR2_USV; /* PWR_CR2_USV is available on STM32L4x2xx and STM32L4x3xx devices only. */ - usb_power_connect(); - usb_start(&USBD1); - } -# endif - -#endif - -#if defined(DIP_SWITCH_PINS) - dip_switch_init(); - dip_switch_read(true); -#endif -} - -/* - * NOTE: - * 1. Shall not use PM_LOW_POWER_RUN, PM_LOW_POWER_SLEEP, due to PM_LOW_POWER_RUN - * need to decrease system clock below 2 MHz. Dynamic clock is not yet supported - * for STM32L432xx in latest ChibiOS 21.6.0 so far. - * 2. Care must be taken to use PM_STANDBY_WITH_RAM, PM_STANDBY, PM_SHUTDOWN due to - * limited wake source, thus can't be waken via keyscan. PM_SHUTDOWN need LSE. - * 3. Reference from AN4621: STM32L4 and STM32L4+ ultra-low-power features overview - * for detail wake source - */ - -void enter_power_mode(pm_t mode) { -#if defined(KEEP_USB_CONNECTION_IN_BLUETOOTH_MODE) - /* Don't enter low power mode if attached to the host */ - if (mode > PM_SLEEP && usb_power_connected()) return; -#endif - - if (!lpm_set(mode)) return; - enter_low_power_mode_prepare(); - - // __DSB(); - __WFI(); - // __ISB(); - - lpm_wakeup(); - lpm_timer_reset(); - report_buffer_init(); - - /* Call debounce_free() to avoid memory leak as debounce_init() invoked in matrix_init() allocates - * new memory when using per row/key debounce - */ - debounce_free(); - matrix_init(); - power_mode = PM_RUN; -} - -void usb_power_connect(void) { - PWR->CR2 |= PWR_CR2_USV; -} - -void usb_power_disconnect(void) { - PWR->CR2 &= ~PWR_CR2_USV; -} - -/* - * This is a simplified version of stm32_clock_init() by removing unnecessary clock initlization - * code snippet. The original stm32_clock_init() take about 2ms, but ckbt51 sends data via uart - * about 200us after wakeup pin is assert, it means that we must get everything ready before data - * coming when wakeup pin interrupt of MCU is triggerred. - * Here we reduce clock init time to less than 100us. - */ -void stm32_clock_fast_init(void) { -#if !STM32_NO_INIT - /* Clocks setup.*/ - msi_init(); // 6.x us - hsi16_init(); // 4.x us - - /* PLLs activation, if required.*/ - pll_init(); - pllsai1_init(); - pllsai2_init(); - /* clang-format off */ - /* Other clock-related settings (dividers, MCO etc).*/ - RCC->CFGR = STM32_MCOPRE | STM32_MCOSEL | STM32_STOPWUCK | - STM32_PPRE2 | STM32_PPRE1 | STM32_HPRE; - /* CCIPR register initialization, note, must take care of the _OFF - pseudo settings.*/ - { - uint32_t ccipr = STM32_DFSDMSEL | STM32_SWPMI1SEL | STM32_ADCSEL | - STM32_CLK48SEL | STM32_LPTIM2SEL | STM32_LPTIM1SEL | - STM32_I2C3SEL | STM32_I2C2SEL | STM32_I2C1SEL | - STM32_UART5SEL | STM32_UART4SEL | STM32_USART3SEL | - STM32_USART2SEL | STM32_USART1SEL | STM32_LPUART1SEL; -/* clang-format on */ -# if STM32_SAI2SEL != STM32_SAI2SEL_OFF - ccipr |= STM32_SAI2SEL; -# endif -# if STM32_SAI1SEL != STM32_SAI1SEL_OFF - ccipr |= STM32_SAI1SEL; -# endif - RCC->CCIPR = ccipr; - } - - /* Set flash WS's for SYSCLK source */ - if (STM32_FLASHBITS > STM32_MSI_FLASHBITS) { - FLASH->ACR = (FLASH->ACR & ~FLASH_ACR_LATENCY_Msk) | STM32_FLASHBITS; - while ((FLASH->ACR & FLASH_ACR_LATENCY_Msk) != (STM32_FLASHBITS & FLASH_ACR_LATENCY_Msk)) { - } - } - - /* Switching to the configured SYSCLK source if it is different from MSI.*/ -# if (STM32_SW != STM32_SW_MSI) - RCC->CFGR |= STM32_SW; /* Switches on the selected clock source. */ - /* Wait until SYSCLK is stable.*/ - while ((RCC->CFGR & RCC_CFGR_SWS) != (STM32_SW << 2)) - ; -# endif - - /* Reduce the flash WS's for SYSCLK source if they are less than MSI WSs */ - if (STM32_FLASHBITS < STM32_MSI_FLASHBITS) { - FLASH->ACR = (FLASH->ACR & ~FLASH_ACR_LATENCY_Msk) | STM32_FLASHBITS; - while ((FLASH->ACR & FLASH_ACR_LATENCY_Msk) != (STM32_FLASHBITS & FLASH_ACR_LATENCY_Msk)) { - } - } -#endif /* STM32_NO_INIT */ -} diff --git a/keyboards/keychron/bluetooth/lpm_stm32l432.h b/keyboards/keychron/bluetooth/lpm_stm32l432.h deleted file mode 100644 index 065bf96b47..0000000000 --- a/keyboards/keychron/bluetooth/lpm_stm32l432.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -typedef enum { PM_RUN, PM_LOW_POWER_RUN, PM_SLEEP, PM_LOW_POWER_SLEEP, PM_STOP0, PM_STOP1, PM_STOP2, PM_STANDBY_WITH_RAM, PM_STANDBY, PM_SHUTDOWN } pm_t; diff --git a/keyboards/keychron/bluetooth/report_buffer.c b/keyboards/keychron/bluetooth/report_buffer.c deleted file mode 100644 index 7494c42b97..0000000000 --- a/keyboards/keychron/bluetooth/report_buffer.c +++ /dev/null @@ -1,141 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" -#include "report_buffer.h" -#include "bluetooth.h" -#include "lpm.h" - -/* The report buffer is mainly used to fix key press lost issue of macro - * when bluetooth module fifo isn't large enough. The maximun macro - * string length is determined by this queue size, and should be - * REPORT_BUFFER_QUEUE_SIZE devided by 2 since each character is implemented - * by sending a key pressing then a key releasing report. - * Please note that it cosume sizeof(report_buffer_t) * REPORT_BUFFER_QUEUE_SIZE - * bytes RAM, with default setting, used RAM size is - * sizeof(report_buffer_t) * 256 = 34* 256 = 8704 bytes - */ -#ifndef REPORT_BUFFER_QUEUE_SIZE -# define REPORT_BUFFER_QUEUE_SIZE 512 -#endif - -extern bluetooth_transport_t bluetooth_transport; - -/* report_interval value should be less than bluetooth connection interval because - * it takes some time for communicating between mcu and bluetooth module. Carefully - * set this value to feed the bt module so that we don't lost the key report nor lost - * the anchor point of bluetooth interval. The bluetooth connection interval varies - * if BLE is used, invoke report_buffer_set_inverval() to update the value - */ -uint8_t report_interval = DEFAULT_REPORT_INVERVAL_MS; - -static uint32_t report_timer_buffer = 0; -uint32_t retry_time_buffer = 0; -report_buffer_t report_buffer_queue[REPORT_BUFFER_QUEUE_SIZE]; -uint16_t report_buffer_queue_head; -uint16_t report_buffer_queue_tail; -report_buffer_t kb_rpt; -uint8_t retry = 0; - -void report_buffer_init(void) { - // Initialise the report queue - memset(&report_buffer_queue, 0, sizeof(report_buffer_queue)); - report_buffer_queue_head = 0; - report_buffer_queue_tail = 0; - retry = 0; - report_timer_buffer = sync_timer_read32(); -} - -bool report_buffer_enqueue(report_buffer_t *report) { - uint16_t next = (report_buffer_queue_head + 1) % REPORT_BUFFER_QUEUE_SIZE; - if (next == report_buffer_queue_tail) { - return false; - } - - report_buffer_queue[report_buffer_queue_head] = *report; - report_buffer_queue_head = next; - return true; -} - -inline bool report_buffer_dequeue(report_buffer_t *report) { - if (report_buffer_queue_head == report_buffer_queue_tail) { - return false; - } - - *report = report_buffer_queue[report_buffer_queue_tail]; - report_buffer_queue_tail = (report_buffer_queue_tail + 1) % REPORT_BUFFER_QUEUE_SIZE; - return true; -} - -bool report_buffer_is_empty() { - return report_buffer_queue_head == report_buffer_queue_tail; -} - -void report_buffer_update_timer(void) { - report_timer_buffer = sync_timer_read32(); -} - -bool report_buffer_next_inverval(void) { - return sync_timer_elapsed32(report_timer_buffer) > report_interval; -} - -void report_buffer_set_inverval(uint8_t interval) { - report_interval = interval; -} - -uint8_t report_buffer_get_retry(void) { - return retry; -} - -void report_buffer_set_retry(uint8_t times) { - retry = times; -} - -void report_buffer_task(void) { - if (bluetooth_get_state() == BLUETOOTH_CONNECTED && (!report_buffer_is_empty() || retry) && report_buffer_next_inverval()) { - bool pending_data = false; - - if (!retry) { - if (report_buffer_dequeue(&kb_rpt) && kb_rpt.type != REPORT_TYPE_NONE) { - if (sync_timer_read32() > 2) { - pending_data = true; - retry = RETPORT_RETRY_COUNT; - retry_time_buffer = sync_timer_read32(); - } - } - } else { - if (sync_timer_elapsed32(retry_time_buffer) > 7) { - pending_data = true; - --retry; - retry_time_buffer = sync_timer_read32(); - } - } - - if (pending_data) { -#if defined(NKRO_ENABLE) && defined(BLUETOOTH_NKRO_ENABLE) - if (kb_rpt.type == REPORT_TYPE_NKRO && bluetooth_transport.send_nkro) { - bluetooth_transport.send_nkro(&kb_rpt.nkro.mods); - } else if (kb_rpt.type == REPORT_TYPE_KB && bluetooth_transport.send_keyboard) - bluetooth_transport.send_keyboard(&kb_rpt.keyboard.mods); -#else - if (kb_rpt.type == REPORT_TYPE_KB && bluetooth_transport.send_keyboard) bluetooth_transport.send_keyboard(&kb_rpt.keyboard.mods); -#endif - if (kb_rpt.type == REPORT_TYPE_CONSUMER && bluetooth_transport.send_consumer) bluetooth_transport.send_consumer(kb_rpt.consumer); - report_timer_buffer = sync_timer_read32(); - lpm_timer_reset(); - } - } -} diff --git a/keyboards/keychron/bluetooth/report_buffer.h b/keyboards/keychron/bluetooth/report_buffer.h deleted file mode 100644 index 64cffacffc..0000000000 --- a/keyboards/keychron/bluetooth/report_buffer.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "report.h" - -/* Default report interval value */ -#ifndef DEFAULT_REPORT_INVERVAL_MS -# define DEFAULT_REPORT_INVERVAL_MS 3 -#endif - -/* Default report interval value */ -#ifndef RETPORT_RETRY_COUNT -# define RETPORT_RETRY_COUNT 30 -#endif - -enum { - REPORT_TYPE_NONE, - REPORT_TYPE_KB, - REPORT_TYPE_NKRO, - REPORT_TYPE_CONSUMER, -}; - -typedef struct { - uint8_t type; - union { - report_keyboard_t keyboard; - report_nkro_t nkro; - uint16_t consumer; - }; -} report_buffer_t; - -void report_buffer_init(void); -bool report_buffer_enqueue(report_buffer_t *report); -bool report_buffer_dequeue(report_buffer_t *report); -bool report_buffer_is_empty(void); -void report_buffer_update_timer(void); -bool report_buffer_next_inverval(void); -void report_buffer_set_inverval(uint8_t interval); -uint8_t report_buffer_get_retry(void); -void report_buffer_set_retry(uint8_t times); -void report_buffer_task(void); diff --git a/keyboards/keychron/bluetooth/rtc_timer.c b/keyboards/keychron/bluetooth/rtc_timer.c deleted file mode 100644 index 04ebd43995..0000000000 --- a/keyboards/keychron/bluetooth/rtc_timer.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright 2023 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "hal.h" - -#if (HAL_USE_RTC) - -# include "rtc_timer.h" - -void rtc_timer_init(void) { - rtc_timer_clear(); -} - -void rtc_timer_clear(void) { - RTCDateTime tm = {0, 0, 0, 0, 0, 0}; - rtcSetTime(&RTCD1, &tm); -} - -uint32_t rtc_timer_read_ms(void) { - RTCDateTime tm; - rtcGetTime(&RTCD1, &tm); - - return tm.millisecond; -} - -uint32_t rtc_timer_elapsed_ms(uint32_t last) { - return TIMER_DIFF_32(rtc_timer_read_ms(), last); -} - -#endif diff --git a/keyboards/keychron/bluetooth/rtc_timer.h b/keyboards/keychron/bluetooth/rtc_timer.h deleted file mode 100644 index aa73a31c8a..0000000000 --- a/keyboards/keychron/bluetooth/rtc_timer.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright 2023 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "timer.h" -#include - -#define RTC_MAX_TIME (24 * 3600 * 1000) // Set to 1 day - -#if 0 -# define TIMER_DIFF(a, b, max) ((max == UINT8_MAX) ? ((uint8_t)((a) - (b))) : ((max == UINT16_MAX) ? ((uint16_t)((a) - (b))) : ((max == UINT32_MAX) ? ((uint32_t)((a) - (b))) : ((a) >= (b) ? (a) - (b) : (max) + 1 - (b) + (a))))) -# define TIMER_DIFF_8(a, b) TIMER_DIFF(a, b, UINT8_MAX) -# define TIMER_DIFF_16(a, b) TIMER_DIFF(a, b, UINT16_MAX) -# define TIMER_DIFF_32(a, b) TIMER_DIFF(a, b, UINT32_MAX) -# define TIMER_DIFF_RAW(a, b) TIMER_DIFF_8(a, b) -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -void rtc_timer_init(void); -void rtc_timer_clear(void); -uint32_t rtc_timer_read_ms(void); -uint32_t rtc_timer_elapsed_ms(uint32_t last); - -#ifdef __cplusplus -} -#endif diff --git a/keyboards/keychron/bluetooth/transport.c b/keyboards/keychron/bluetooth/transport.c deleted file mode 100644 index 9fab44fcc8..0000000000 --- a/keyboards/keychron/bluetooth/transport.c +++ /dev/null @@ -1,190 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" -#include "bluetooth.h" -#include "indicator.h" -#include "lpm.h" -#if defined(PROTOCOL_CHIBIOS) -# include -#endif -#include "transport.h" - -#ifndef REINIT_LED_DRIVER -# define REINIT_LED_DRIVER 1 -#endif - -#if defined(PROTOCOL_CHIBIOS) -extern host_driver_t chibios_driver; -#endif -extern host_driver_t bluetooth_driver; -extern keymap_config_t keymap_config; - -static transport_t transport = TRANSPORT_USB; - -#ifdef NKRO_ENABLE -nkro_t nkro = {false, false}; -#endif - -static void transport_changed(transport_t new_transport); - -__attribute__((weak)) void bt_transport_enable(bool enable) { - if (enable) { - if (host_get_driver() != &bluetooth_driver) { - host_set_driver(&bluetooth_driver); - - /* Disconnect and reconnect to sync the bluetooth state - * TODO: query bluetooth state to sync - */ - bluetooth_disconnect(); - bluetooth_connect(); - // TODO: Clear USB report - } - } else { - indicator_stop(); - - if (bluetooth_get_state() == BLUETOOTH_CONNECTED) { - report_keyboard_t empty_report = {0}; - bluetooth_driver.send_keyboard(&empty_report); - } - } -} - -/* There is no dedicated pin for USB power on chip such as STM32L432, but USB power - * can be connected and disconnected via registers. - * Overwrite these two functions if such chip is used. */ -__attribute__((weak)) void usb_power_connect(void) {} -__attribute__((weak)) void usb_power_disconnect(void) {} - -__attribute__((weak)) void usb_transport_enable(bool enable) { - if (enable) { - if (host_get_driver() != &chibios_driver) { -#if !defined(KEEP_USB_CONNECTION_IN_BLUETOOTH_MODE) - usb_power_connect(); - usb_start(&USBD1); -#endif - host_set_driver(&chibios_driver); - } - } else { - if (USB_DRIVER.state == USB_ACTIVE) { - report_keyboard_t empty_report = {0}; - chibios_driver.send_keyboard(&empty_report); - } - -#if !defined(KEEP_USB_CONNECTION_IN_BLUETOOTH_MODE) - usbStop(&USBD1); - usbDisconnectBus(&USBD1); - usb_power_disconnect(); -#endif - } -} - -void set_transport(transport_t new_transport) { - if (transport != new_transport) { - transport = new_transport; - - clear_keyboard(); - - switch (transport) { - case TRANSPORT_USB: - usb_transport_enable(true); - bt_transport_enable(false); - lpm_timer_stop(); -#ifdef NKRO_ENABLE -# if defined(BLUETOOTH_NKRO_ENABLE) - nkro.bluetooth = keymap_config.nkro; -# endif - keymap_config.nkro = nkro.usb; -#endif - break; - - case TRANSPORT_BLUETOOTH: - bt_transport_enable(true); - usb_transport_enable(false); - lpm_timer_reset(); -#if defined(NKRO_ENABLE) - nkro.usb = keymap_config.nkro; -# if defined(BLUETOOTH_NKRO_ENABLE) - keymap_config.nkro = nkro.bluetooth; -# else - keymap_config.nkro = FALSE; -# endif -#endif - break; - default: - break; - } - - transport_changed(transport); - } -} - -transport_t get_transport(void) { - return transport; -} - -/* Changing transport may cause bronw-out reset of led driver - * withoug MCU reset, which lead backlight to not work, - * reinit the led driver workgound this issue */ -static void reinit_led_drvier(void) { - /* Wait circuit to discharge for a while */ - systime_t start = chVTGetSystemTime(); - while (chTimeI2MS(chVTTimeElapsedSinceX(start)) < 100) { - }; - -#ifdef LED_MATRIX_ENABLE - led_matrix_init(); -#endif -#ifdef RGB_MATRIX_ENABLE - rgb_matrix_init(); -#endif -} - -void transport_changed(transport_t new_transport) { -#if (REINIT_LED_DRIVER) - reinit_led_drvier(); -#endif - -#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_TIMEOUT) -# if (RGB_MATRIX_TIMEOUT > 0) - rgb_matrix_disable_timeout_set(RGB_MATRIX_TIMEOUT_INFINITE); - rgb_matrix_disable_time_reset(); -# endif -#endif -#if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_TIMEOUT) -# if (LED_MATRIX_TIMEOUT > 0) - led_matrix_disable_timeout_set(LED_MATRIX_TIMEOUT_INFINITE); - led_matrix_disable_time_reset(); -# endif -#endif -} - -void usb_remote_wakeup(void) { - if (USB_DRIVER.state == USB_SUSPENDED) { - while (USB_DRIVER.state == USB_SUSPENDED) { - /* Do this in the suspended state */ - suspend_power_down(); // on AVR this deep sleeps for 15ms - /* Remote wakeup */ - if (suspend_wakeup_condition()) { - usbWakeupHost(&USB_DRIVER); - } - } - wait_ms(500); - /* Woken up */ - // variables has been already cleared by the wakeup hook - send_keyboard_report(); - } -} diff --git a/keyboards/keychron/bluetooth/transport.h b/keyboards/keychron/bluetooth/transport.h deleted file mode 100644 index 29722cd265..0000000000 --- a/keyboards/keychron/bluetooth/transport.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -typedef enum { - TRANSPORT_NONE, - TRANSPORT_USB, - TRANSPORT_BLUETOOTH, -} transport_t; - -#ifdef NKRO_ENABLE -typedef struct { - bool usb : 1; - bool bluetooth : 1; -} nkro_t; -#endif - -void set_transport(transport_t new_transport); -transport_t get_transport(void); - -void bt_transport_enable(bool enable); -void usb_power_connect(void); -void usb_power_disconnect(void); -void usb_transport_enable(bool enable); -void usb_remote_wakeup(void); diff --git a/keyboards/keychron/common/common.mk b/keyboards/keychron/common/common.mk deleted file mode 100644 index d3f283ef9a..0000000000 --- a/keyboards/keychron/common/common.mk +++ /dev/null @@ -1,6 +0,0 @@ -COMMON_DIR = common -SRC += $(COMMON_DIR)/matrix.c - -VPATH += $(TOP_DIR)/keyboards/keychron/$(COMMON_DIR) - -include $(TOP_DIR)/keyboards/keychron/$(COMMON_DIR)/debounce/debounce.mk diff --git a/keyboards/keychron/common/debounce/asym_eager_defer_pk.c b/keyboards/keychron/common/debounce/asym_eager_defer_pk.c deleted file mode 100644 index db24cb9359..0000000000 --- a/keyboards/keychron/common/debounce/asym_eager_defer_pk.c +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright 2017 Alex Ong - * Copyright 2020 Andrei Purdea - * Copyright 2021 Simon Arlott - * Copyright 2024 @ keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/* -Basic symmetric per-key algorithm. Uses an 8-bit counter per key. -When no state changes have occured for DEBOUNCE milliseconds, we push the state. -*/ - -#include "debounce.h" -#include "timer.h" -#include - -#ifdef PROTOCOL_CHIBIOS -# if CH_CFG_USE_MEMCORE == FALSE -# error ChibiOS is configured without a memory allocator. Your keyboard may have set `#define CH_CFG_USE_MEMCORE FALSE`, which is incompatible with this debounce algorithm. -# endif -#endif - -#define ROW_SHIFTER ((matrix_row_t)1) - -typedef struct { - bool pressed : 1; - uint8_t time : 7; -} debounce_counter_t; - -extern uint8_t debounce_time; - -static debounce_counter_t *debounce_counters = NULL; -static fast_timer_t last_time; -static bool counters_need_update; -static bool matrix_need_update; -static bool cooked_changed; - -# define DEBOUNCE_ELAPSED 0 - -static void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t elapsed_time); -static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows); - -// we use num_rows rather than MATRIX_ROWS to support split keyboards -void asym_eager_defer_pk_debounce_init(uint8_t num_rows) { - debounce_counters = malloc(num_rows * MATRIX_COLS * sizeof(debounce_counter_t)); - - int i = 0; - for (uint8_t r = 0; r < num_rows; r++) { - for (uint8_t c = 0; c < MATRIX_COLS; c++) { - debounce_counters[i++].time = DEBOUNCE_ELAPSED; - } - } -} - -void asym_eager_defer_pk_debounce_free(void) { - if (debounce_counters != NULL) { - free(debounce_counters); - debounce_counters = NULL; - } -} - -bool asym_eager_defer_pk_debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - - bool updated_last = false; - cooked_changed = false; - - if (counters_need_update) { - fast_timer_t now = timer_read_fast(); - fast_timer_t elapsed_time = TIMER_DIFF_FAST(now, last_time); - - last_time = now; - updated_last = true; - if (elapsed_time > UINT8_MAX) { - elapsed_time = UINT8_MAX; - } - - if (elapsed_time > 0) { - update_debounce_counters_and_transfer_if_expired(raw, cooked, num_rows, elapsed_time); - } - } - - if (changed || matrix_need_update) { - if (!updated_last) { - last_time = timer_read_fast(); - } - - transfer_matrix_values(raw, cooked, num_rows); - } - - return cooked_changed; -} - -static void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t elapsed_time) { - debounce_counter_t *debounce_pointer = debounce_counters; - - counters_need_update = false; - matrix_need_update = false; - - for (uint8_t row = 0; row < num_rows; row++) { - for (uint8_t col = 0; col < MATRIX_COLS; col++) { - matrix_row_t col_mask = (ROW_SHIFTER << col); - - if (debounce_pointer->time != DEBOUNCE_ELAPSED) { - if (debounce_pointer->time <= elapsed_time) { - debounce_pointer->time = DEBOUNCE_ELAPSED; - - if (debounce_pointer->pressed) { - // key-down: eager - matrix_need_update = true; - } else { - // key-up: defer - matrix_row_t cooked_next = (cooked[row] & ~col_mask) | (raw[row] & col_mask); - cooked_changed |= cooked_next ^ cooked[row]; - cooked[row] = cooked_next; - } - } else { - debounce_pointer->time -= elapsed_time; - counters_need_update = true; - } - } - debounce_pointer++; - } - } -} - -static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows) { - debounce_counter_t *debounce_pointer = debounce_counters; - - matrix_need_update = false; - - for (uint8_t row = 0; row < num_rows; row++) { - matrix_row_t delta = raw[row] ^ cooked[row]; - for (uint8_t col = 0; col < MATRIX_COLS; col++) { - matrix_row_t col_mask = (ROW_SHIFTER << col); - - if (delta & col_mask) { - if (debounce_pointer->time == DEBOUNCE_ELAPSED) { - debounce_pointer->pressed = (raw[row] & col_mask); - debounce_pointer->time = debounce_time;; - counters_need_update = true; - - if (debounce_pointer->pressed) { - // key-down: eager - cooked[row] ^= col_mask; - cooked_changed = true; - } - } - } else if (debounce_pointer->time != DEBOUNCE_ELAPSED) { - if (!debounce_pointer->pressed) { - // key-up: defer - debounce_pointer->time = DEBOUNCE_ELAPSED; - } - } - debounce_pointer++; - } - } -} diff --git a/keyboards/keychron/common/debounce/debounce.mk b/keyboards/keychron/common/debounce/debounce.mk deleted file mode 100644 index d84c479ab5..0000000000 --- a/keyboards/keychron/common/debounce/debounce.mk +++ /dev/null @@ -1,14 +0,0 @@ -DEBOUNCE_DIR = common/debounce -SRC += \ - $(DEBOUNCE_DIR)/sym_defer_g.c \ - $(DEBOUNCE_DIR)/sym_defer_pr.c \ - $(DEBOUNCE_DIR)/sym_defer_pk.c \ - $(DEBOUNCE_DIR)/sym_eager_pr.c \ - $(DEBOUNCE_DIR)/sym_eager_pk.c \ - $(DEBOUNCE_DIR)/asym_eager_defer_pk.c \ - $(DEBOUNCE_DIR)/none.c \ - $(DEBOUNCE_DIR)/keychron_debounce.c - -VPATH += $(TOP_DIR)/keyboards/keychron/$(DEBOUNCE_DIR) - -OPT_DEFS += -DDYNAMIC_DEBOUNCE_ENABLE diff --git a/keyboards/keychron/common/debounce/eeconfig_debounce.h b/keyboards/keychron/common/debounce/eeconfig_debounce.h deleted file mode 100644 index 7c12f0f189..0000000000 --- a/keyboards/keychron/common/debounce/eeconfig_debounce.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#define EECONFIG_SIZE_DEBOUNCE 2 - diff --git a/keyboards/keychron/common/debounce/keychron_debounce.c b/keyboards/keychron/common/debounce/keychron_debounce.c deleted file mode 100644 index 6296d85b81..0000000000 --- a/keyboards/keychron/common/debounce/keychron_debounce.c +++ /dev/null @@ -1,214 +0,0 @@ - -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "keychron_debounce.h" -#include "raw_hid.h" -#include "quantum.h" -#include "eeconfig.h" -#include "eeconfig_kb.h" -#include "keychron_raw_hid.h" - -#ifdef SPLIT_KEYBOARD -# pragma(error "Split keyboard is not supported") -#endif - -#ifndef DEBOUNCE -# define DEBOUNCE 5 -#endif - -// Maximum debounce: 255ms -#if DEBOUNCE > UINT8_MAX -# undef DEBOUNCE -# define DEBOUNCE UINT8_MAX -#endif - -#ifndef DEFAULT_DEBOUNCE_TYPE - #define DEFAULT_DEBOUNCE_TYPE DEBOUNCE_SYM_EAGER_PER_KEY -#endif - -#define DEBOUNCE_SET_QMK 0 -#define OFFSET_DEBOUNCE ((uint8_t *)(EECONFIG_BASE_DYNAMIC_DEBOUNCE)) - -static uint8_t debounce_type = 0; -uint8_t debounce_time = 0; -static debounce_t debounce_func = {NULL, NULL, NULL}; - -extern void sym_defer_g_debounce_init(uint8_t num_rows); -extern bool sym_defer_g_debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed); -extern void sym_defer_g_debounce_free(void); - -extern void sym_defer_pr_debounce_init(uint8_t num_rows); -extern bool sym_defer_pr_debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed); -extern void sym_defer_pr_debounce_free(void); - -extern void sym_defer_pk_debounce_init(uint8_t num_rows); -extern bool sym_defer_pk_debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed); -extern void sym_defer_pk_debounce_free(void); - -extern void sym_eager_pr_debounce_init(uint8_t num_rows); -extern bool sym_eager_pr_debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed); -extern void sym_eager_pr_debounce_free(void); - -extern void sym_eager_pk_debounce_init(uint8_t num_rows); -extern bool sym_eager_pk_debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed); -extern void sym_eager_pk_debounce_free(void); - -extern void asym_eager_defer_pk_debounce_init(uint8_t num_rows); -extern bool asym_eager_defer_pk_debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed); -extern void asym_eager_defer_pk_debounce_free(void); - -extern void none_debounce_init(uint8_t num_rows); -extern bool none_debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed); -extern void none_debounce_free(void); - -void debounce_set(uint8_t new_debounce_type, uint8_t time, bool force); - -/** - * @brief Debounce raw matrix events according to the choosen debounce algorithm. - * - * @param raw The current key state - * @param cooked The debounced key state - * @param num_rows Number of rows to debounce - * @param changed True if raw has changed since the last call - * @return true Cooked has new keychanges after debouncing - * @return false Cooked is the same as before - */ - -bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - if (debounce_func.debounce) debounce_func.debounce(raw, cooked, num_rows, changed); - - return false; -} - -void debounce_init(uint8_t num_rows) { - debounce_type = 0; - - // debounce_set(DEBOUNCE_SYM_EAGER_PER_KEY, DEBOUNCE); - if (!eeconfig_is_enabled()) { - eeconfig_init(); - } - uint8_t type = eeprom_read_byte(OFFSET_DEBOUNCE); - uint8_t time = eeprom_read_byte(OFFSET_DEBOUNCE + 1); - - if (type >= DEBOUNCE_MAX) type = DEFAULT_DEBOUNCE_TYPE; - - debounce_set(type, time, debounce_type == type); -} - -void debounce_free(void) { - if (debounce_func.debounce_free) debounce_func.debounce_free(); -} - -static bool debounce_save(void) { - eeprom_update_byte(OFFSET_DEBOUNCE, debounce_type); - eeprom_update_byte(OFFSET_DEBOUNCE + 1, debounce_time); - return true; -} - -void debounce_config_reset(void) { - debounce_set(DEFAULT_DEBOUNCE_TYPE, DEBOUNCE, true); - debounce_save(); -} - -void debounce_set(uint8_t new_debounce_type, uint8_t time, bool force) { - if (new_debounce_type == debounce_type && time == debounce_time && !force) return; - - debounce_free(); - - debounce_type = new_debounce_type; - debounce_time = time; - - if (debounce_time == 0) new_debounce_type = DEBOUNCE_NONE; - - switch (new_debounce_type) { - case DEBOUNCE_SYM_DEFER_GLOBAL: - debounce_func.debounce_init = sym_defer_g_debounce_init; - debounce_func.debounce = sym_defer_g_debounce; - debounce_func.debounce_free = sym_defer_g_debounce_free; - break; - - case DEBOUNCE_SYM_DEFER_PER_ROW: - debounce_func.debounce_init = sym_defer_pr_debounce_init; - debounce_func.debounce = sym_defer_pr_debounce; - debounce_func.debounce_free = sym_defer_pr_debounce_free; - break; - - case DEBOUNCE_SYM_DEFER_PER_KEY: - debounce_func.debounce_init = sym_defer_pk_debounce_init; - debounce_func.debounce = sym_defer_pk_debounce; - debounce_func.debounce_free = sym_defer_pk_debounce_free; - break; - - case DEBOUNCE_SYM_EAGER_PER_ROW: - debounce_func.debounce_init = sym_eager_pr_debounce_init; - debounce_func.debounce = sym_eager_pr_debounce; - debounce_func.debounce_free = sym_eager_pr_debounce_free; - break; - - case DEBOUNCE_SYM_EAGER_PER_KEY: - debounce_func.debounce_init = sym_eager_pk_debounce_init; - debounce_func.debounce = sym_eager_pk_debounce; - debounce_func.debounce_free = sym_eager_pk_debounce_free; - break; - - case DEBOUNCE_ASYM_EAGER_DEFER_PER_KEY: - debounce_func.debounce_init = asym_eager_defer_pk_debounce_init; - debounce_func.debounce = asym_eager_defer_pk_debounce; - debounce_func.debounce_free = asym_eager_defer_pk_debounce_free; - if (debounce_time > 127) debounce_time = 127; - break; - - case DEBOUNCE_NONE: - debounce_func.debounce_init = none_debounce_init; - debounce_func.debounce = none_debounce; - debounce_func.debounce_free = none_debounce_free; - break; - } - - if (debounce_func.debounce_init) debounce_func.debounce_init(MATRIX_ROWS); -} - -void debounce_time_set(uint8_t time) { - debounce_time = time; -} - -void debounce_rx(uint8_t *data, uint8_t length) { - uint8_t cmd = data[1]; - switch (cmd) { - case DEBOUNCE_GET: - data[2] = 0; - data[3] = DEBOUNCE_SET_QMK; - data[4] = debounce_type; - data[5] = debounce_time; - break; - - case DEBOUNCE_SET: { - uint8_t type = data[2]; - uint8_t time = data[3]; - if (type < DEBOUNCE_MAX) { - data[2] = 0; - debounce_set(type, time, false); - debounce_save(); - } else - data[2] = 1; - } break; - - default: - data[0] = 0xFF; - break; - } -} diff --git a/keyboards/keychron/common/debounce/keychron_debounce.h b/keyboards/keychron/common/debounce/keychron_debounce.h deleted file mode 100644 index 40ea5800e2..0000000000 --- a/keyboards/keychron/common/debounce/keychron_debounce.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include -#include -#include "matrix.h" - -enum { - DEBOUNCE_SYM_DEFER_GLOBAL, - DEBOUNCE_SYM_DEFER_PER_ROW, - DEBOUNCE_SYM_DEFER_PER_KEY, - DEBOUNCE_SYM_EAGER_PER_ROW, - DEBOUNCE_SYM_EAGER_PER_KEY, - DEBOUNCE_ASYM_EAGER_DEFER_PER_KEY, - DEBOUNCE_NONE, - DEBOUNCE_MAX, -}; - -typedef struct { - void (*debounce_init)(uint8_t); - bool (*debounce)(matrix_row_t [], matrix_row_t [], uint8_t, bool); - void (*debounce_free)(void); -} debounce_t; - -/** - * @brief Debounce raw matrix events according to the choosen debounce algorithm. - * - * @param raw The current key state - * @param cooked The debounced key state - * @param num_rows Number of rows to debounce - * @param changed True if raw has changed since the last call - * @return true Cooked has new keychanges after debouncing - * @return false Cooked is the same as before - */ -bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed); - -void debounce_init(uint8_t num_rows); -void debounce_config_reset(void); - -void debounce_free(void); -void debounce_rx(uint8_t *data, uint8_t length); diff --git a/keyboards/keychron/common/debounce/none.c b/keyboards/keychron/common/debounce/none.c deleted file mode 100644 index 244236803c..0000000000 --- a/keyboards/keychron/common/debounce/none.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2021 Simon Arlott - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "debounce.h" -#include - -void none_debounce_init(uint8_t num_rows) {} - -bool none_debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - bool cooked_changed = false; - - if (changed) { - size_t matrix_size = num_rows * sizeof(matrix_row_t); - if (memcmp(cooked, raw, matrix_size) != 0) { - memcpy(cooked, raw, matrix_size); - cooked_changed = true; - } - } - - return cooked_changed; -} - -void none_debounce_free(void) {} diff --git a/keyboards/keychron/common/debounce/none.h b/keyboards/keychron/common/debounce/none.h deleted file mode 100644 index 244236803c..0000000000 --- a/keyboards/keychron/common/debounce/none.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2021 Simon Arlott - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "debounce.h" -#include - -void none_debounce_init(uint8_t num_rows) {} - -bool none_debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - bool cooked_changed = false; - - if (changed) { - size_t matrix_size = num_rows * sizeof(matrix_row_t); - if (memcmp(cooked, raw, matrix_size) != 0) { - memcpy(cooked, raw, matrix_size); - cooked_changed = true; - } - } - - return cooked_changed; -} - -void none_debounce_free(void) {} diff --git a/keyboards/keychron/common/debounce/sym_defer_g.c b/keyboards/keychron/common/debounce/sym_defer_g.c deleted file mode 100644 index f1b475846c..0000000000 --- a/keyboards/keychron/common/debounce/sym_defer_g.c +++ /dev/null @@ -1,51 +0,0 @@ -/* -Copyright 2017 Alex Ong -Copyright 2021 Simon Arlott -Copyright 2024 @ keychron (https://www.keychron.com) - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -/* -Basic global debounce algorithm. Used in 99% of keyboards at time of implementation -When no state changes have occured for DEBOUNCE milliseconds, we push the state. -*/ -#include "debounce.h" -#include "timer.h" -#include - -extern uint8_t debounce_time; -static bool debouncing = false; -static fast_timer_t debouncing_time; - -void sym_defer_g_debounce_init(uint8_t num_rows) {} - -bool sym_defer_g_debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - bool cooked_changed = false; - - if (changed) { - debouncing = true; - debouncing_time = timer_read_fast(); - } else if (debouncing && timer_elapsed_fast(debouncing_time) >= debounce_time) { - size_t matrix_size = num_rows * sizeof(matrix_row_t); - if (memcmp(cooked, raw, matrix_size) != 0) { - memcpy(cooked, raw, matrix_size); - cooked_changed = true; - } - debouncing = false; - } - - return cooked_changed; -} - -void sym_defer_g_debounce_free(void) {} - diff --git a/keyboards/keychron/common/debounce/sym_defer_pk.c b/keyboards/keychron/common/debounce/sym_defer_pk.c deleted file mode 100644 index 633d5c3ebc..0000000000 --- a/keyboards/keychron/common/debounce/sym_defer_pk.c +++ /dev/null @@ -1,137 +0,0 @@ -/* -Copyright 2017 Alex Ong -Copyright 2020 Andrei Purdea -Copyright 2021 Simon Arlott -Copyright 2024 @ keychron (https://www.keychron.com) - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -/* -Basic symmetric per-key algorithm. Uses an 8-bit counter per key. -When no state changes have occured for DEBOUNCE milliseconds, we push the state. -*/ - -#include "debounce.h" -#include "timer.h" -#include - -#ifdef PROTOCOL_CHIBIOS -# if CH_CFG_USE_MEMCORE == FALSE -# error ChibiOS is configured without a memory allocator. Your keyboard may have set `#define CH_CFG_USE_MEMCORE FALSE`, which is incompatible with this debounce algorithm. -# endif -#endif - - -#define ROW_SHIFTER ((matrix_row_t)1) - -typedef uint8_t debounce_counter_t; - -extern uint8_t debounce_time; - -static debounce_counter_t *debounce_counters = NULL; -static fast_timer_t last_time; -static bool counters_need_update; -static bool cooked_changed; - -# define DEBOUNCE_ELAPSED 0 - -static void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t elapsed_time); -static void start_debounce_counters(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows); - -// we use num_rows rather than MATRIX_ROWS to support split keyboards -void sym_defer_pk_debounce_init(uint8_t num_rows) { - debounce_counters = (debounce_counter_t *)malloc(num_rows * MATRIX_COLS * sizeof(debounce_counter_t)); - - int i = 0; - for (uint8_t r = 0; r < num_rows; r++) { - for (uint8_t c = 0; c < MATRIX_COLS; c++) { - debounce_counters[i++] = DEBOUNCE_ELAPSED; - } - } -} - -void sym_defer_pk_debounce_free(void) { - if (debounce_counters != NULL) { - free(debounce_counters); - debounce_counters = NULL; - } -} - -bool sym_defer_pk_debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - bool updated_last = false; - cooked_changed = false; - - if (counters_need_update) { - fast_timer_t now = timer_read_fast(); - fast_timer_t elapsed_time = TIMER_DIFF_FAST(now, last_time); - - last_time = now; - updated_last = true; - if (elapsed_time > UINT8_MAX) { - elapsed_time = UINT8_MAX; - } - - if (elapsed_time > 0) { - update_debounce_counters_and_transfer_if_expired(raw, cooked, num_rows, elapsed_time); - } - } - - if (changed) { - if (!updated_last) { - last_time = timer_read_fast(); - } - - start_debounce_counters(raw, cooked, num_rows); - } - - return cooked_changed; -} - -static void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t elapsed_time) { - counters_need_update = false; - debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < num_rows; row++) { - for (uint8_t col = 0; col < MATRIX_COLS; col++) { - if (*debounce_pointer != DEBOUNCE_ELAPSED) { - if (*debounce_pointer <= elapsed_time) { - *debounce_pointer = DEBOUNCE_ELAPSED; - matrix_row_t cooked_next = (cooked[row] & ~(ROW_SHIFTER << col)) | (raw[row] & (ROW_SHIFTER << col)); - cooked_changed |= cooked[row] ^ cooked_next; - cooked[row] = cooked_next; - } else { - *debounce_pointer -= elapsed_time; - counters_need_update = true; - } - } - debounce_pointer++; - } - } -} - -static void start_debounce_counters(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows) { - debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < num_rows; row++) { - matrix_row_t delta = raw[row] ^ cooked[row]; - for (uint8_t col = 0; col < MATRIX_COLS; col++) { - if (delta & (ROW_SHIFTER << col)) { - if (*debounce_pointer == DEBOUNCE_ELAPSED) { - *debounce_pointer = debounce_time;; - counters_need_update = true; - } - } else { - *debounce_pointer = DEBOUNCE_ELAPSED; - } - debounce_pointer++; - } - } -} diff --git a/keyboards/keychron/common/debounce/sym_defer_pr.c b/keyboards/keychron/common/debounce/sym_defer_pr.c deleted file mode 100644 index c295855061..0000000000 --- a/keyboards/keychron/common/debounce/sym_defer_pr.c +++ /dev/null @@ -1,80 +0,0 @@ -/* -Copyright 2021 Chad Austin -Copyright 2024 @ keychron (https://www.keychron.com) - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -/* -Symmetric per-row debounce algorithm. Changes only apply when -DEBOUNCE milliseconds have elapsed since the last change. -*/ - -#include "debounce.h" -#include "timer.h" -#include - -extern uint8_t debounce_time; - -static uint16_t last_time; -// [row] milliseconds until key's state is considered debounced. -static uint8_t* countdowns = NULL; -// [row] -static matrix_row_t* last_raw = NULL; - -void sym_defer_pr_debounce_init(uint8_t num_rows) { - countdowns = (uint8_t*)calloc(num_rows, sizeof(uint8_t)); - last_raw = (matrix_row_t*)calloc(num_rows, sizeof(matrix_row_t)); - last_time = timer_read(); -} - -void sym_defer_pr_debounce_free(void) { - if (countdowns != NULL) { - free(countdowns); - countdowns = NULL; - } - if (last_raw != NULL) { - free(last_raw); - last_raw = NULL; - } -} - -bool sym_defer_pr_debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - uint16_t now = timer_read(); - uint16_t elapsed16 = TIMER_DIFF_16(now, last_time); - last_time = now; - uint8_t elapsed = (elapsed16 > 255) ? 255 : elapsed16; - bool cooked_changed = false; - - uint8_t* countdown = countdowns; - - for (uint8_t row = 0; row < num_rows; ++row, ++countdown) { - matrix_row_t raw_row = raw[row]; - - if (raw_row != last_raw[row]) { - *countdown = debounce_time; - last_raw[row] = raw_row; - } else if (*countdown > elapsed) { - *countdown -= elapsed; - } else if (*countdown) { - cooked_changed |= cooked[row] ^ raw_row; - cooked[row] = raw_row; - *countdown = 0; - } - } - - return cooked_changed; -} - -bool debounce_active(void) { - return true; -} diff --git a/keyboards/keychron/common/debounce/sym_eager_pk.c b/keyboards/keychron/common/debounce/sym_eager_pk.c deleted file mode 100644 index fe3655172c..0000000000 --- a/keyboards/keychron/common/debounce/sym_eager_pk.c +++ /dev/null @@ -1,142 +0,0 @@ -/* -Copyright 2017 Alex Ong -Copyright 2021 Simon Arlott -Copyright 2024 @ keychron (https://www.keychron.com) - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -/* -Basic per-key algorithm. Uses an 8-bit counter per key. -After pressing a key, it immediately changes state, and sets a counter. -No further inputs are accepted until DEBOUNCE milliseconds have occurred. -*/ - -#include "debounce.h" -#include "timer.h" -#include - -#ifdef PROTOCOL_CHIBIOS -# if CH_CFG_USE_MEMCORE == FALSE -# error ChibiOS is configured without a memory allocator. Your keyboard may have set `#define CH_CFG_USE_MEMCORE FALSE`, which is incompatible with this debounce algorithm. -# endif -#endif - -extern uint8_t debounce_time; - -#define ROW_SHIFTER ((matrix_row_t)1) - -typedef uint8_t debounce_counter_t; - - -static debounce_counter_t *debounce_counters = NULL; -static fast_timer_t last_time; -static bool counters_need_update; -static bool matrix_need_update; -static bool cooked_changed; - -# define DEBOUNCE_ELAPSED 0 - -static void update_debounce_counters(uint8_t num_rows, uint8_t elapsed_time); -static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows); - -// we use num_rows rather than MATRIX_ROWS to support split keyboards -void sym_eager_pk_debounce_init(uint8_t num_rows) { - debounce_counters = (debounce_counter_t *)malloc(num_rows * MATRIX_COLS * sizeof(debounce_counter_t)); - int i = 0; - for (uint8_t r = 0; r < num_rows; r++) { - for (uint8_t c = 0; c < MATRIX_COLS; c++) { - debounce_counters[i++] = DEBOUNCE_ELAPSED; - } - } -} - -void sym_eager_pk_debounce_free(void) { - if (debounce_counters != NULL) { - free(debounce_counters); - debounce_counters = NULL; - } -} - -bool sym_eager_pk_debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - bool updated_last = false; - cooked_changed = false; - - if (counters_need_update) { - fast_timer_t now = timer_read_fast(); - fast_timer_t elapsed_time = TIMER_DIFF_FAST(now, last_time); - - last_time = now; - updated_last = true; - if (elapsed_time > UINT8_MAX) { - elapsed_time = UINT8_MAX; - } - - if (elapsed_time > 0) { - update_debounce_counters(num_rows, elapsed_time); - } - } - - if (changed || matrix_need_update) { - if (!updated_last) { - last_time = timer_read_fast(); - } - - transfer_matrix_values(raw, cooked, num_rows); - } - - return cooked_changed; -} - -// If the current time is > debounce counter, set the counter to enable input. -static void update_debounce_counters(uint8_t num_rows, uint8_t elapsed_time) { - counters_need_update = false; - matrix_need_update = false; - debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < num_rows; row++) { - for (uint8_t col = 0; col < MATRIX_COLS; col++) { - if (*debounce_pointer != DEBOUNCE_ELAPSED) { - if (*debounce_pointer <= elapsed_time) { - *debounce_pointer = DEBOUNCE_ELAPSED; - matrix_need_update = true; - } else { - *debounce_pointer -= elapsed_time; - counters_need_update = true; - } - } - debounce_pointer++; - } - } -} - -// upload from raw_matrix to final matrix; -static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows) { - matrix_need_update = false; - debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < num_rows; row++) { - matrix_row_t delta = raw[row] ^ cooked[row]; - matrix_row_t existing_row = cooked[row]; - for (uint8_t col = 0; col < MATRIX_COLS; col++) { - matrix_row_t col_mask = (ROW_SHIFTER << col); - if (delta & col_mask) { - if (*debounce_pointer == DEBOUNCE_ELAPSED) { - *debounce_pointer = debounce_time; - counters_need_update = true; - existing_row ^= col_mask; // flip the bit. - cooked_changed = true; - } - } - debounce_pointer++; - } - cooked[row] = existing_row; - } -} diff --git a/keyboards/keychron/common/debounce/sym_eager_pr.c b/keyboards/keychron/common/debounce/sym_eager_pr.c deleted file mode 100644 index 85488f1063..0000000000 --- a/keyboards/keychron/common/debounce/sym_eager_pr.c +++ /dev/null @@ -1,134 +0,0 @@ -/* -Copyright 2019 Alex Ong -Copyright 2021 Simon Arlott -Copyright 2024 @ keychron (https://www.keychron.com) - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -/* -Basic per-row algorithm. Uses an 8-bit counter per row. -After pressing a key, it immediately changes state, and sets a counter. -No further inputs are accepted until DEBOUNCE milliseconds have occurred. -*/ - -#include "debounce.h" -#include "timer.h" -#include - -#ifdef PROTOCOL_CHIBIOS -# if CH_CFG_USE_MEMCORE == FALSE -# error ChibiOS is configured without a memory allocator. Your keyboard may have set `#define CH_CFG_USE_MEMCORE FALSE`, which is incompatible with this debounce algorithm. -# endif -#endif - - -typedef uint8_t debounce_counter_t; - -extern uint8_t debounce_time; - -static bool matrix_need_update; - -static debounce_counter_t *debounce_counters = NULL; -static fast_timer_t last_time; -static bool counters_need_update; -static bool cooked_changed; - -# define DEBOUNCE_ELAPSED 0 - -static void update_debounce_counters(uint8_t num_rows, uint8_t elapsed_time); -static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows); - -// we use num_rows rather than MATRIX_ROWS to support split keyboards -void sym_eager_pr_debounce_init(uint8_t num_rows) { - debounce_counters = (debounce_counter_t *)malloc(num_rows * sizeof(debounce_counter_t)); - for (uint8_t r = 0; r < num_rows; r++) { - debounce_counters[r] = DEBOUNCE_ELAPSED; - } -} - -void sym_eager_pr_debounce_free(void) { - if (debounce_counters != NULL) { - free(debounce_counters); - debounce_counters = NULL; - } -} - -bool sym_eager_pr_debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - bool updated_last = false; - cooked_changed = false; - - if (counters_need_update) { - fast_timer_t now = timer_read_fast(); - fast_timer_t elapsed_time = TIMER_DIFF_FAST(now, last_time); - - last_time = now; - updated_last = true; - if (elapsed_time > UINT8_MAX) { - elapsed_time = UINT8_MAX; - } - - if (elapsed_time > 0) { - update_debounce_counters(num_rows, elapsed_time); - } - } - - if (changed || matrix_need_update) { - if (!updated_last) { - last_time = timer_read_fast(); - } - - transfer_matrix_values(raw, cooked, num_rows); - } - - return cooked_changed; -} - -// If the current time is > debounce counter, set the counter to enable input. -static void update_debounce_counters(uint8_t num_rows, uint8_t elapsed_time) { - counters_need_update = false; - matrix_need_update = false; - debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < num_rows; row++) { - if (*debounce_pointer != DEBOUNCE_ELAPSED) { - if (*debounce_pointer <= elapsed_time) { - *debounce_pointer = DEBOUNCE_ELAPSED; - matrix_need_update = true; - } else { - *debounce_pointer -= elapsed_time; - counters_need_update = true; - } - } - debounce_pointer++; - } -} - -// upload from raw_matrix to final matrix; -static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows) { - matrix_need_update = false; - debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < num_rows; row++) { - matrix_row_t existing_row = cooked[row]; - matrix_row_t raw_row = raw[row]; - - // determine new value basd on debounce pointer + raw value - if (existing_row != raw_row) { - if (*debounce_pointer == DEBOUNCE_ELAPSED) { - *debounce_pointer = debounce_time; - cooked_changed |= cooked[row] ^ raw_row; - cooked[row] = raw_row; - counters_need_update = true; - } - } - debounce_pointer++; - } -} diff --git a/keyboards/keychron/common/dfu_info.c b/keyboards/keychron/common/dfu_info.c deleted file mode 100644 index 47c6012046..0000000000 --- a/keyboards/keychron/common/dfu_info.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include -#include "quantum.h" - -enum { - DFU_INFO_CHIP = 1, - DFU_INFO_TYPE, -}; - -enum { - BL_TYPE_STM32 = 1, - BL_TYPE_WB32, -}; - -void dfu_info_rx(uint8_t *data, uint8_t length) { - uint8_t i = 2; - - data[i++] = 0; // success - data[i++] = DFU_INFO_CHIP, - data[i++] = strlen(STR(QMK_MCU)); - memcpy(&data[i], STR(QMK_MCU), strlen(STR(QMK_MCU))); - i += strlen(STR(QMK_MCU)); - data[i++] = DFU_INFO_TYPE; - data[i++] = 1; - data[i++] = -#if defined(BOOTLOADER_STM32_DFU) - BL_TYPE_STM32 -#elif defined(BOOTLOADER_WB32_DFU) - BL_TYPE_WB32 -#else - 0 -#endif - ; -} diff --git a/keyboards/keychron/common/eeconfig_kb.c b/keyboards/keychron/common/eeconfig_kb.c deleted file mode 100644 index a0a15828ac..0000000000 --- a/keyboards/keychron/common/eeconfig_kb.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "eeconfig_kb.h" -#ifdef DYNAMIC_DEBOUNCE_ENABLE -# include "keychron_debounce.h" -#endif - -void eeconfig_init_kb_datablock(void) { -#ifdef DYNAMIC_DEBOUNCE_ENABLE - extern void debounce_config_reset(void); - debounce_config_reset(); -#endif -#if defined(SNAP_CLICK_ENABLE) - extern void snap_click_config_reset(void); - snap_click_config_reset(); -#endif -#if defined(KEYCHRON_RGB_ENABLE) && defined(RGB_MATRIX_ENABLE) - extern void eeconfig_reset_custom_rgb(void); - eeconfig_reset_custom_rgb(); -#endif -} diff --git a/keyboards/keychron/common/eeconfig_kb.h b/keyboards/keychron/common/eeconfig_kb.h deleted file mode 100644 index dd995bb993..0000000000 --- a/keyboards/keychron/common/eeconfig_kb.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "eeconfig_language.h" - -#define EECONFIG_BASE_LANGUAGE 37 -#define EECONFIG_END_LANGUAGE (EECONFIG_BASE_LANGUAGE + EECONFIG_SIZE_LANGUAGE) - -#ifdef DYNAMIC_DEBOUNCE_ENABLE -# include "eeconfig_debounce.h" -# define __EECONFIG_SIZE_DEBOUNCE EECONFIG_SIZE_DEBOUNCE -#else -# define __EECONFIG_SIZE_DEBOUNCE 0 -#endif -#define EECONFIG_BASE_DYNAMIC_DEBOUNCE EECONFIG_END_LANGUAGE -#define EECONFIG_END_DYNAMIC_DEBOUNCE (EECONFIG_BASE_DYNAMIC_DEBOUNCE + __EECONFIG_SIZE_DEBOUNCE) - -#ifdef SNAP_CLICK_ENABLE -# include "eeconfig_snap_click.h" -# define __EECONFIG_SIZE_SNAP_CLICK EECONFIG_SIZE_SNAP_CLICK -#else -# define __EECONFIG_SIZE_SNAP_CLICK 0 -#endif -#define EECONFIG_BASE_SNAP_CLICK (EECONFIG_END_DYNAMIC_DEBOUNCE) -#define EECONFIG_END_SNAP_CLICK (EECONFIG_BASE_SNAP_CLICK + __EECONFIG_SIZE_SNAP_CLICK) - -#if defined(KEYCHRON_RGB_ENABLE) && defined(RGB_MATRIX_ENABLE) -# include "eeconfig_custom_rgb.h" -# define __EECONFIG_SIZE_CUSTOM_RGB EECONFIG_SIZE_CUSTOM_RGB -#else -# define __EECONFIG_SIZE_CUSTOM_RGB 0 -#endif -#define EECONFIG_BASE_CUSTOM_RGB EECONFIG_END_SNAP_CLICK -#define EECONFIG_END_CUSTOM_RGB (EECONFIG_BASE_CUSTOM_RGB + __EECONFIG_SIZE_CUSTOM_RGB) - -#if defined(WIRELESS_CONFIG_ENABLE) -# include "eeconfig_wireless.h" -# define __EECONFIG_SIZE_WIRELESS_CONFIG EECONFIG_SIZE_WIRELESS_CONFIG -#else -# define __EECONFIG_SIZE_WIRELESS_CONFIG 0 -#endif -#define EECONFIG_BASE_WIRELESS_CONFIG EECONFIG_END_CUSTOM_RGB -#define EECONFIG_END_WIRELESS_CONFIG (EECONFIG_BASE_WIRELESS_CONFIG + __EECONFIG_SIZE_WIRELESS_CONFIG) - -#define EECONFIG_KB_DATA_SIZE (EECONFIG_END_WIRELESS_CONFIG - EECONFIG_BASE_LANGUAGE) - diff --git a/keyboards/keychron/common/factory_test.c b/keyboards/keychron/common/factory_test.c deleted file mode 100644 index ebf0e460b0..0000000000 --- a/keyboards/keychron/common/factory_test.c +++ /dev/null @@ -1,465 +0,0 @@ -/* Copyright 2021~2025 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" -#include "raw_hid.h" -#include "via.h" - -#include "keychron_task.h" -#ifdef LK_WIRELESS_ENABLE -# include "transport.h" -# include "battery.h" -# include "lpm.h" -# include "lkbt51.h" -# include "indicator.h" -#endif -#ifdef DYNAMIC_DEBOUNCE_ENABLE -# include "keychron_debounce.h" -#endif -#ifdef SNAP_CLICK_ENABLE -# include "snap_click.h" -#endif -#include "config.h" -#include "version.h" - -#ifndef RAW_EPSIZE -# define RAW_EPSIZE 32 -#endif - -#ifndef BL_CYCLE_KEY -# define BL_CYCLE_KEY KC_RIGHT -#endif - -#ifndef BL_TRIG_KEY -# define BL_TRIG_KEY KC_HOME -#endif - -#ifndef P2P4G_CELAR_MASK -# define P2P4G_CELAR_MASK P2P4G_CLEAR_PAIRING_TYPE_C -#endif - -enum { - BACKLIGHT_TEST_OFF = 0, - BACKLIGHT_TEST_WHITE, - BACKLIGHT_TEST_RED, - BACKLIGHT_TEST_GREEN, - BACKLIGHT_TEST_BLUE, - BACKLIGHT_TEST_MAX, -}; - -enum { - KEY_PRESS_FN = 0x01 << 0, - KEY_PRESS_J = 0x01 << 1, - KEY_PRESS_Z = 0x01 << 2, - KEY_PRESS_BL_KEY1 = 0x01 << 3, - KEY_PRESS_BL_KEY2 = 0x01 << 4, - KEY_PRESS_FACTORY_RESET = KEY_PRESS_FN | KEY_PRESS_J | KEY_PRESS_Z, - KEY_PRESS_BACKLIGTH_TEST = KEY_PRESS_FN | KEY_PRESS_BL_KEY1 | KEY_PRESS_BL_KEY2, -}; - -enum { FACTORY_TEST_CMD_BACKLIGHT = 0x01, FACTORY_TEST_CMD_OS_SWITCH, FACTORY_TEST_CMD_JUMP_TO_BL, FACTORY_TEST_CMD_INT_PIN, FACTORY_TEST_CMD_GET_TRANSPORT, FACTORY_TEST_CMD_CHARGING_ADC, FACTORY_TEST_CMD_RADIO_CARRIER, FACTORY_TEST_CMD_GET_BUILD_TIME, FACTORY_TEST_CMD_GET_DEVICE_ID }; - -enum { - P2P4G_CLEAR_PAIRING_TYPE_A = 0x01 << 0, - P2P4G_CLEAR_PAIRING_TYPE_C = 0x01 << 1, -}; - -enum { - OS_SWITCH = 0x01, -}; - -static uint32_t factory_reset_timer = 0; -static uint8_t factory_reset_state = 0; -static uint8_t backlight_test_mode = BACKLIGHT_TEST_OFF; - -static uint32_t factory_reset_ind_timer = 0; -static uint8_t factory_reset_ind_state = 0; -static bool report_os_sw_state = false; -static uint8_t keys_released = 0; - -extern void eeconfig_reset_custom_rgb(void); - -void factory_timer_start(void) { - factory_reset_timer = timer_read32(); -} - -static inline void factory_timer_check(void) { - if (timer_elapsed32(factory_reset_timer) > 3000) { - factory_reset_timer = 0; - - if (factory_reset_state == KEY_PRESS_FACTORY_RESET) { - factory_reset_ind_timer = timer_read32(); - factory_reset_ind_state++; - keys_released = false; - - clear_keyboard(); // Avoid key being pressed after NKRO state changed - layer_state_t default_layer_tmp = default_layer_state; - eeconfig_init(); - keymap_config.raw = eeconfig_read_keymap(); - default_layer_set(default_layer_tmp); -#ifdef DYNAMIC_DEBOUNCE_ENABLE - debounce_config_reset(); -#endif -#ifdef SNAP_CLICK_ENABLE - snap_click_config_reset(); -#endif -#ifdef LED_MATRIX_ENABLE - if (!led_matrix_is_enabled()) led_matrix_enable(); - led_matrix_init(); -#endif -#ifdef RGB_MATRIX_ENABLE - if (!rgb_matrix_is_enabled()) rgb_matrix_enable(); - rgb_matrix_init(); -# if defined(KEYCHRON_RGB_ENABLE) && defined(EECONFIG_SIZE_CUSTOM_RGB) - eeconfig_reset_custom_rgb(); -# endif -#endif -#ifdef LK_WIRELESS_ENABLE -# ifdef EECONFIG_SIZE_WIRELESS_CONFIG - wireless_config_reset(); -# endif - wait_ms(50); - lkbt51_factory_reset(P2P4G_CELAR_MASK); -#endif - } else if (factory_reset_state == KEY_PRESS_BACKLIGTH_TEST) { -#ifdef LED_MATRIX_ENABLE - if (!led_matrix_is_enabled()) led_matrix_enable(); -#endif -#ifdef RGB_MATRIX_ENABLE - if (!rgb_matrix_is_enabled()) rgb_matrix_enable(); -#endif - backlight_test_mode = BACKLIGHT_TEST_WHITE; - } - - factory_reset_state = 0; - } -} - -static inline void factory_reset_ind_timer_check(void) { - if (factory_reset_ind_timer && timer_elapsed32(factory_reset_ind_timer) > 250) { - if (factory_reset_ind_state++ > 6) { - factory_reset_ind_timer = factory_reset_ind_state = 0; - } else { - factory_reset_ind_timer = timer_read32(); - } - } -} - -bool process_record_factory_test(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { -#if defined(FN_KEY_1) || defined(FN_KEY_2) -# if defined(FN_KEY_1) - case FN_KEY_1: /* fall through */ -# endif -# if defined(FN_KEY_2) - case FN_KEY_2: -# endif -# if defined(FN_KEY_3) - case FN_KEY_3: -# endif - if (record->event.pressed) { - factory_reset_state |= KEY_PRESS_FN; - } else { - factory_reset_state &= ~KEY_PRESS_FN; - factory_reset_timer = 0; - } - break; -#endif - case KC_J: -#if defined(FN_J_KEY) - case FN_J_KEY: -#endif - if (record->event.pressed) { - factory_reset_state |= KEY_PRESS_J; - if (factory_reset_state == 0x07) factory_timer_start(); - if ((factory_reset_state & KEY_PRESS_FN) && keycode == KC_J) return false; - } else { - factory_reset_state &= ~KEY_PRESS_J; - factory_reset_timer = 0; - /* Avoid changing backlight effect on key released if FN_Z_KEY is mode*/ - if (keys_released & KEY_PRESS_J) { - keys_released &= ~KEY_PRESS_J; - if (keycode >= QK_BACKLIGHT_ON && keycode <= RGB_MODE_TWINKLE) return false; - } - } - break; - case KC_Z: -#if defined(FN_Z_KEY) - case FN_Z_KEY: -#endif - if (record->event.pressed) { - factory_reset_state |= KEY_PRESS_Z; - if (factory_reset_state == 0x07) factory_timer_start(); - if ((factory_reset_state & KEY_PRESS_FN) && keycode == KC_Z) return false; - } else { - factory_reset_state &= ~KEY_PRESS_Z; - factory_reset_timer = 0; - /* Avoid changing backlight effect on key released if FN_Z_KEY is mode*/ - if (keys_released & KEY_PRESS_Z) { - keys_released &= ~KEY_PRESS_Z; - if (keycode >= QK_BACKLIGHT_ON && keycode <= RGB_MODE_TWINKLE) return false; - } - } - break; -#if defined(BL_CYCLE_KEY) || defined(BL_CYCLE_KEY_2) -# if defined(BL_CYCLE_KEY) - case BL_CYCLE_KEY: -# endif -# if defined(FN_BL_CYCLE_KEY) - case FN_BL_CYCLE_KEY: -# endif - if (record->event.pressed) { - if (backlight_test_mode) { - if (++backlight_test_mode >= BACKLIGHT_TEST_MAX) { - backlight_test_mode = BACKLIGHT_TEST_WHITE; - } - } else { - factory_reset_state |= KEY_PRESS_BL_KEY1; - if (factory_reset_state == 0x19) { - factory_timer_start(); - } - } - } else { - factory_reset_state &= ~KEY_PRESS_BL_KEY1; - factory_reset_timer = 0; - } - break; -#endif -#if defined(BL_TRIG_KEY) || defined(BL_TRIG_KEY_2) -# if defined(BL_TRIG_KEY) - case BL_TRIG_KEY: -# endif -# if defined(FN_BL_TRIG_KEY) - case FN_BL_TRIG_KEY: -# endif - if (record->event.pressed) { - if (backlight_test_mode) { - backlight_test_mode = BACKLIGHT_TEST_OFF; - } else { - factory_reset_state |= KEY_PRESS_BL_KEY2; - if (factory_reset_state == 0x19) { - factory_timer_start(); - } - } - } else { - factory_reset_state &= ~KEY_PRESS_BL_KEY2; - factory_reset_timer = 0; - } - break; -#endif - } - - return true; -} - -#ifdef LED_MATRIX_ENABLE -bool factory_test_indicator(void) { - if (factory_reset_ind_state) { - led_matrix_set_value_all(factory_reset_ind_state % 2 ? 0 : 255); - return false; - } - - return true; -} -#endif - -#ifdef RGB_MATRIX_ENABLE -bool factory_test_indicator(void) { - if (factory_reset_ind_state) { - backlight_test_mode = BACKLIGHT_TEST_OFF; - rgb_matrix_set_color_all(factory_reset_ind_state % 2 ? 0 : 255, 0, 0); - return false; - } else if (backlight_test_mode) { - switch (backlight_test_mode) { - case BACKLIGHT_TEST_WHITE: - rgb_matrix_set_color_all(255, 255, 255); - break; - case BACKLIGHT_TEST_RED: - rgb_matrix_set_color_all(255, 0, 0); - break; - case BACKLIGHT_TEST_GREEN: - rgb_matrix_set_color_all(0, 255, 0); - break; - case BACKLIGHT_TEST_BLUE: - rgb_matrix_set_color_all(0, 0, 255); - break; - } - return false; - } - - return true; -} -#endif - -bool factory_reset_indicating(void) { - return factory_reset_ind_timer; -} - -bool factory_test_task(void) { - if (factory_reset_timer) factory_timer_check(); - if (factory_reset_ind_timer) factory_reset_ind_timer_check(); - - return true; -} - -void factory_test_send(uint8_t *payload, uint8_t length) { -#ifdef RAW_ENABLE - uint16_t checksum = 0; - uint8_t data[RAW_EPSIZE] = {0}; - - uint8_t i = 0; - data[i++] = 0xAB; - - memcpy(&data[i], payload, length); - i += length; - - for (uint8_t i = 1; i < RAW_EPSIZE - 3; i++) - checksum += data[i]; - data[RAW_EPSIZE - 2] = checksum & 0xFF; - data[RAW_EPSIZE - 1] = (checksum >> 8) & 0xFF; - - raw_hid_send(data, RAW_EPSIZE); -#endif -} - -void factory_test_rx(uint8_t *data, uint8_t length) { - if (data[0] == 0xAB) { - uint16_t checksum = 0; - - for (uint8_t i = 1; i < RAW_EPSIZE - 3; i++) { - checksum += data[i]; - } - /* Verify checksum */ - if ((checksum & 0xFF) != data[RAW_EPSIZE - 2] || checksum >> 8 != data[RAW_EPSIZE - 1]) return; - - uint8_t payload[32]; - uint8_t len = 0; - - switch (data[1]) { - case FACTORY_TEST_CMD_BACKLIGHT: - backlight_test_mode = data[2]; - factory_reset_timer = 0; - break; - case FACTORY_TEST_CMD_OS_SWITCH: - report_os_sw_state = data[2]; - if (report_os_sw_state) { - // dip_switch_read(true); - } - break; - case FACTORY_TEST_CMD_JUMP_TO_BL: - // if (memcmp(&data[2], "JumpToBootloader", strlen("JumpToBootloader")) == 0) bootloader_jump(); - break; -#ifdef LK_WIRELESS_ENABLE - case FACTORY_TEST_CMD_INT_PIN: - switch (data[2]) { - /* Enalbe/disable test */ - case 0xA1: - lkbt51_int_pin_test(data[3]); - break; - /* Set INT state */ - case 0xA2: - kc_printf("pin %d\n\r", data[3]); - writePin(BLUETOOTH_INT_OUTPUT_PIN, data[3]); - break; - /* Report INT state */ - // case 0xA3: - // payload[len++] = FACTORY_TEST_CMD_INT_PIN; - // payload[len++] = 0xA3; - // payload[len++] = readPin(LKBT51_INT_INPUT_PIN); - // factory_test_send(payload, len); - // break; - } - break; - case FACTORY_TEST_CMD_GET_TRANSPORT: - payload[len++] = FACTORY_TEST_CMD_GET_TRANSPORT; - payload[len++] = get_transport(); - payload[len++] = readPin(USB_POWER_SENSE_PIN); - factory_test_send(payload, len); - break; -#endif -#ifdef BATTERY_CHARGE_DONE_DETECT_ADC - case FACTORY_TEST_CMD_CHARGING_ADC: - case 0xA1: - battery_charging_monitor(data[3]); - break; - case 0xA2: - payload[len++] = FACTORY_TEST_CMD_CHARGING_ADC; - payload[len++] = battery_adc_read_charging_pin(); - factory_test_send(payload, len); - break; -#endif -#ifdef LK_WIRELESS_ENABLE - case FACTORY_TEST_CMD_RADIO_CARRIER: - if (data[2] < 79) lkbt51_radio_test(data[2]); - break; - -# ifdef WERELESS_PRESSURE_TEST - case 0x70: - switch (data[2]) { - /* Enalbe/disable test */ - case 0xB1: - SEND_STRING("abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890\n"); - break; - case 0xB2: - payload[len++] = 0x70; - payload[len++] = 0xB2; - payload[len++] = wireless_get_state(); - factory_test_send(payload, len); - break; - } - break; -# endif -#endif - case FACTORY_TEST_CMD_GET_BUILD_TIME: { - payload[len++] = FACTORY_TEST_CMD_GET_BUILD_TIME; - payload[len++] = 'v'; - if ((DEVICE_VER & 0xF000) != 0) itoa((DEVICE_VER >> 12), (char *)&payload[len++], 16); - itoa((DEVICE_VER >> 8) & 0xF, (char *)&payload[len++], 16); - payload[len++] = '.'; - itoa((DEVICE_VER >> 4) & 0xF, (char *)&payload[len++], 16); - payload[len++] = '.'; - itoa((DEVICE_VER >> 4) & 0xF, (char *)&payload[len++], 16); - payload[len++] = ' '; - memcpy(&payload[len], QMK_BUILDDATE, sizeof(QMK_BUILDDATE)); - len += sizeof(QMK_BUILDDATE); - factory_test_send(payload, len); - } break; - - case FACTORY_TEST_CMD_GET_DEVICE_ID: - payload[len++] = FACTORY_TEST_CMD_GET_DEVICE_ID; - payload[len++] = 12; // UUID length - memcpy(&payload[len], (uint32_t *)UID_BASE, 4); - memcpy(&payload[len + 4], (uint32_t *)UID_BASE + 4, 4); - memcpy(&payload[len + 8], (uint32_t *)UID_BASE + 8, 4); - - len += 12; - factory_test_send(payload, len); - break; - } - } -} - -/* bool dip_switch_update_user(uint8_t index, bool active) { */ -/* if (report_os_sw_state) { */ -/* #ifdef INVERT_OS_SWITCH_STATE */ -/* active = !active; */ -/* #endif */ -/* uint8_t payload[3] = {FACTORY_TEST_CMD_OS_SWITCH, OS_SWITCH, active}; */ -/* factory_test_send(payload, 3); */ -/* } */ - -/* return true; */ -/* } */ diff --git a/keyboards/keychron/common/factory_test.h b/keyboards/keychron/common/factory_test.h deleted file mode 100644 index a98d10043c..0000000000 --- a/keyboards/keychron/common/factory_test.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright 2022 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#define FACTORY_RESET_CHECK process_record_factory_test -#define FACTORY_RESET_TASK factory_test_task - -void factory_test_init(void); - -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) -bool factory_test_indicator(void); -#endif - -//void process_record_factory_test(uint16_t keycode, keyrecord_t *record); -bool factory_reset_indicating(void); -void factory_test_task(void); -void factory_test_rx(uint8_t *data, uint8_t length); - -bool process_record_factory_test(uint16_t keycode, keyrecord_t *record); - diff --git a/keyboards/keychron/common/keychron_common.c b/keyboards/keychron/common/keychron_common.c deleted file mode 100644 index 043960454d..0000000000 --- a/keyboards/keychron/common/keychron_common.c +++ /dev/null @@ -1,184 +0,0 @@ -/* Copyright 2023 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H -#include "keychron_common.h" -#ifdef FACTORY_TEST_ENABLE -# include "factory_test.h" -#endif -#ifdef RETAIL_DEMO_ENABLE -# include "retail_demo.h" -#endif -#ifdef LK_WIRELESS_ENABLE -# include "lkbt51.h" -# include "wireless.h" -#endif -#ifdef LED_MATRIX_ENABLE -# include "led_matrix.h" -#endif - -bool is_siri_active = false; -uint32_t siri_timer = 0; - -static uint8_t mac_keycode[4] = { - KC_LOPT, - KC_ROPT, - KC_LCMD, - KC_RCMD, -}; - -// clang-format off -static key_combination_t key_comb_list[] = { - {2, {KC_LWIN, KC_TAB}}, - {2, {KC_LWIN, KC_E}}, - {3, {KC_LSFT, KC_LCMD, KC_4}}, - {2, {KC_LWIN, KC_C}}, -#ifdef WIN_LOCK_SCREEN_ENABLE - {2, {KC_LWIN, KC_L}}, -#endif -#ifdef MAC_LOCK_SCREEN_ENABLE - {3, {KC_LCTL, KC_LCMD, KC_Q}}, -#endif -}; -// clang-format on - -void keychron_common_init(void) { -#ifdef SNAP_CLICK_ENABLE - extern void snap_click_init(void); - snap_click_init(); -#endif -#if defined(RGB_MATRIX_ENABLE) && defined(KEYCHRON_RGB_ENABLE) - extern void eeconfig_init_custom_rgb(void); - eeconfig_init_custom_rgb(); -#endif -#ifdef LK_WIRELESS_ENABLE -# ifdef P2P4_MODE_SELECT_PIN - palSetLineMode(P2P4_MODE_SELECT_PIN, PAL_MODE_INPUT); -# endif -# ifdef BT_MODE_SELECT_PIN - palSetLineMode(BT_MODE_SELECT_PIN, PAL_MODE_INPUT); -# endif -# ifdef BAT_LOW_LED_PIN - writePin(BAT_LOW_LED_PIN, BAT_LOW_LED_PIN_ON_STATE); -# endif - - lkbt51_init(false); - wireless_init(); -#endif - -#ifdef ENCODER_ENABLE - encoder_cb_init(); -#endif -} - -bool process_record_keychron_common(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_MCTRL: - if (record->event.pressed) { - register_code(KC_MISSION_CONTROL); - } else { - unregister_code(KC_MISSION_CONTROL); - } - return false; // Skip all further processing of this key - case KC_LNPAD: - if (record->event.pressed) { - register_code(KC_LAUNCHPAD); - } else { - unregister_code(KC_LAUNCHPAD); - } - return false; // Skip all further processing of this key - case KC_LOPTN: - case KC_ROPTN: - case KC_LCMMD: - case KC_RCMMD: - if (record->event.pressed) { - register_code(mac_keycode[keycode - KC_LOPTN]); - } else { - unregister_code(mac_keycode[keycode - KC_LOPTN]); - } - return false; // Skip all further processing of this key - case KC_SIRI: - if (record->event.pressed) { - if (!is_siri_active) { - is_siri_active = true; - register_code(KC_LCMD); - register_code(KC_SPACE); - } - siri_timer = timer_read32(); - } else { - // Do something else when release - } - return false; // Skip all further processing of this key - case KC_TASK: - case KC_FILE: - case KC_SNAP: - case KC_CTANA: -#ifdef WIN_LOCK_SCREEN_ENABLE - case KC_WLCK: -#endif -#ifdef MAC_LOCK_SCREEN_ENABLE - case KC_MLCK: -#endif - if (record->event.pressed) { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - register_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } else { - for (uint8_t i = 0; i < key_comb_list[keycode - KC_TASK].len; i++) { - unregister_code(key_comb_list[keycode - KC_TASK].keycode[i]); - } - } - return false; // Skip all further processing of this key -#ifdef LED_MATRIX_ENABLE - case BL_SPI: - led_matrix_increase_speed(); - break; - case BL_SPD: - led_matrix_decrease_speed(); - break; -#endif - default: - return true; // Process all other keycodes normally - } - return true; -} - -void keychron_common_task(void) { - if (is_siri_active && timer_elapsed32(siri_timer) > 500) { - unregister_code(KC_LCMD); - unregister_code(KC_SPACE); - is_siri_active = false; - siri_timer = 0; - } -} - -#ifdef ENCODER_ENABLE -static void encoder_pad_cb(void *param) { - uint8_t index = (uint32_t)param; - encoder_inerrupt_read(index); -} - -void encoder_cb_init(void) { - pin_t encoders_pad_a[] = ENCODERS_PAD_A; - pin_t encoders_pad_b[] = ENCODERS_PAD_B; - for (uint32_t i = 0; i < NUM_ENCODERS; i++) { - palEnableLineEvent(encoders_pad_a[i], PAL_EVENT_MODE_BOTH_EDGES); - palEnableLineEvent(encoders_pad_b[i], PAL_EVENT_MODE_BOTH_EDGES); - palSetLineCallback(encoders_pad_a[i], encoder_pad_cb, (void *)i); - palSetLineCallback(encoders_pad_b[i], encoder_pad_cb, (void *)i); - } -} -#endif diff --git a/keyboards/keychron/common/keychron_common.h b/keyboards/keychron/common/keychron_common.h deleted file mode 100644 index e2a4a70480..0000000000 --- a/keyboards/keychron/common/keychron_common.h +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright 2023 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "stdint.h" - -// clang-format off -enum { - KC_LOPTN = QK_KB_0, - KC_ROPTN, - KC_LCMMD, - KC_RCMMD, - KC_MCTRL, - KC_LNPAD, - KC_TASK_VIEW, - KC_FILE_EXPLORER, - KC_SCREEN_SHOT, - KC_CORTANA, -#ifdef WIN_LOCK_SCREEN_ENABLE - KC_WIN_LOCK_SCREEN, - __KC_WIN_LOCK_SCREEN_NEXT, -#else - __KC_WIN_LOCK_SCREEN_NEXT = KC_CORTANA + 1, -#endif -#ifdef MAC_LOCK_SCREEN_ENABLE - KC_MAC_LOCK_SCREEN = __KC_WIN_LOCK_SCREEN_NEXT, - __KC_MAC_LOCK_SCREEN_NEXT, -#else - __KC_MAC_LOCK_SCREEN_NEXT = __KC_WIN_LOCK_SCREEN_NEXT, -#endif - KC_SIRI = __KC_MAC_LOCK_SCREEN_NEXT, -#ifdef LK_WIRELESS_ENABLE - BT_HST1, - BT_HST2, - BT_HST3, - P2P4G, - BAT_LVL, -#endif -#ifdef ANANLOG_MATRIX - PROF1, - PROF2, - PROF3, -#endif -#ifdef LED_MATRIX_ENABLE - BL_SPI, - BL_SPD, -#endif - NEW_SAFE_RANGE, -}; - -#ifndef LK_WIRELESS_ENABLE - #define BT_HST1 KC_TRANS - #define BT_HST2 KC_TRANS - #define BT_HST3 KC_TRANS - #define P2P4G KC_TRANS - #define BAT_LVL KC_TRANS -#endif -#ifndef ANANLOG_MATRIX - #define PROF1 KC_TRANS - #define PROF2 KC_TRANS - #define PROF3 KC_TRANS -#endif - -#define KC_TASK KC_TASK_VIEW -#define KC_FILE KC_FILE_EXPLORER -#define KC_SNAP KC_SCREEN_SHOT -#define KC_CTANA KC_CORTANA -#define KC_WLCK KC_WIN_LOCK_SCREEN -#define KC_MLCK KC_MAC_LOCK_SCREEN - -typedef struct PACKED { - uint8_t len; - uint8_t keycode[3]; -} key_combination_t; - -void keychron_common_init(void); -bool process_record_keychron_common(uint16_t keycode, keyrecord_t *record); -void keychron_common_task(void); - -#ifdef ENCODER_ENABLE -void encoder_cb_init(void); -#endif diff --git a/keyboards/keychron/common/keychron_common.mk b/keyboards/keychron/common/keychron_common.mk deleted file mode 100644 index 3b1bf6d240..0000000000 --- a/keyboards/keychron/common/keychron_common.mk +++ /dev/null @@ -1,31 +0,0 @@ -OPT_DEFS += -DFACTORY_TEST_ENABLE -DAPDAPTIVE_NKRO_ENABLE - -KEYCHRON_COMMON_DIR = common -SRC += \ - $(KEYCHRON_COMMON_DIR)/keychron_task.c \ - $(KEYCHRON_COMMON_DIR)/keychron_common.c \ - $(KEYCHRON_COMMON_DIR)/keychron_raw_hid.c \ - $(KEYCHRON_COMMON_DIR)/factory_test.c \ - $(KEYCHRON_COMMON_DIR)/eeconfig_kb.c \ - $(KEYCHRON_COMMON_DIR)/dfu_info.c - -VPATH += $(TOP_DIR)/keyboards/keychron/$(KEYCHRON_COMMON_DIR) - -INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --output $(INTERMEDIATE_OUTPUT)/src/info_rules.mk) -include $(INFO_RULES_MK) - -include $(TOP_DIR)/keyboards/keychron/$(KEYCHRON_COMMON_DIR)/language/language.mk - -ifeq ($(strip $(DEBOUNCE_TYPE)), custom) -include $(TOP_DIR)/keyboards/keychron/$(KEYCHRON_COMMON_DIR)/debounce/debounce.mk -endif - -ifeq ($(strip $(SNAP_CLICK_ENABLE)), yes) -include $(TOP_DIR)/keyboards/keychron/$(KEYCHRON_COMMON_DIR)/snap_click/snap_click.mk -endif - -ifeq ($(strip $(KEYCHRON_RGB_ENABLE)), yes) -ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) -include $(TOP_DIR)/keyboards/keychron/$(KEYCHRON_COMMON_DIR)/rgb/rgb.mk -endif -endif diff --git a/keyboards/keychron/common/keychron_raw_hid.c b/keyboards/keychron/common/keychron_raw_hid.c deleted file mode 100644 index e21776f5c8..0000000000 --- a/keyboards/keychron/common/keychron_raw_hid.c +++ /dev/null @@ -1,203 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H -#include "keychron_common.h" -#include "keychron_raw_hid.h" -#include "raw_hid.h" -#include "version.h" -#include "language.h" -#ifdef FACTORY_TEST_ENABLE -# include "factory_test.h" -#endif -#ifdef LK_WIRELESS_ENABLE -# include "lkbt51.h" -#endif -#ifdef ANANLOG_MATRIX -# include "analog_matrix.h" -#endif -#ifdef DYNAMIC_DEBOUNCE_ENABLE -# include "keychron_debounce.h" -#endif -#ifdef SNAP_CLICK_ENABLE -# include "snap_click.h" -#endif -#ifdef LK_WIRELESS_ENABLE -# include "wireless.h" -#endif - -extern void dfu_info_rx(uint8_t *data, uint8_t length); - -void get_support_feature(uint8_t *data) { - data[0] = 0; - data[1] = FEATURE_DEFAULT_LAYER -#ifdef KC_BLUETOOTH_ENABLE - | FEATURE_BLUETOOTH -#endif -#ifdef LK_WIRELESS_ENABLE - | FEATURE_BLUETOOTH | FEATURE_P24G -#endif -#ifdef ANANLOG_MATRIX - | FEATURE_ANALOG_MATRIX -#endif -#ifdef INFO_CHAGNED_NOTIFY_ENABLE - | FEATURE_INFO_CHAGNED_NOTIFY -#endif -#ifdef DYNAMIC_DEBOUNCE_ENABLE - | FEATURE_DYNAMIC_DEBOUNCE -#endif -#ifdef SNAP_CLICK_ENABLE - | FEATURE_SNAP_CLICK -#endif -#ifdef KEYCHRON_RGB_ENABLE - | FEATURE_KEYCHRON_RGB -#endif - ; -} - -void get_firmware_version(uint8_t *data) { - uint8_t i = 0; - data[i++] = 'v'; - if ((DEVICE_VER & 0xF000) != 0) itoa((DEVICE_VER >> 12), (char *)&data[i++], 16); - itoa((DEVICE_VER >> 8) & 0xF, (char *)&data[i++], 16); - data[i++] = '.'; - itoa((DEVICE_VER >> 4) & 0xF, (char *)&data[i++], 16); - data[i++] = '.'; - itoa(DEVICE_VER & 0xF, (char *)&data[i++], 16); - data[i++] = ' '; - memcpy(&data[i], QMK_BUILDDATE, sizeof(QMK_BUILDDATE)); - i += sizeof(QMK_BUILDDATE); -} - - -__attribute__((weak)) void kc_rgb_matrix_rx(uint8_t *data, uint8_t length) {} - -bool kc_raw_hid_rx(uint8_t *data, uint8_t length) { - switch (data[0]) { - case KC_GET_PROTOCOL_VERSION: - data[1] = PROTOCOL_VERSION; - data[2] = 0; - data[3] = QMK_COMMAND_SET; - break; - - case KC_GET_FIRMWARE_VERSION: - get_firmware_version(&data[1]); - break; - - case KC_GET_SUPPORT_FEATURE: - get_support_feature(&data[1]); - break; - - case KC_GET_DEFAULT_LAYER: - data[1] = get_highest_layer(default_layer_state); - break; - - case 0xA7: - switch (data[1]) { - case MISC_GET_PROTOCOL_VER: - data[2] = 0; - data[3] = MISC_PROTOCOL_VERSION & 0xFF; - data[4] = (MISC_PROTOCOL_VERSION >> 8) & 0xFF; - data[5] = MISC_DFU_INFO | MISC_LANGUAGE -#ifdef DYNAMIC_DEBOUNCE_ENABLE - | MISC_DEBOUNCE -#endif -#ifdef SNAP_CLICK_ENABLE - | MISC_SNAP_CLICK -#endif -#ifdef LK_WIRELESS_ENABLE - | MISC_WIRELESS_LPM -#endif -#ifdef HSUSB_8K_ENABLE - | MISC_REPORT_REATE -#endif - ; - break; - - case DFU_INFO_GET: - dfu_info_rx(data, length); - break; - case LANGUAGE_GET ... LANGUAGE_SET: - language_rx(data, length); - break; - -#if defined(DYNAMIC_DEBOUNCE_ENABLE) - case DEBOUNCE_GET ... DEBOUNCE_SET: - debounce_rx(data, length); - break; -#endif -#if defined(SNAP_CLICK_ENABLE) - case SNAP_CLICK_GET_INFO ... SNAP_CLICK_SAVE: - snap_click_rx(data, length); - break; -#endif -#if defined(LK_WIRELESS_ENABLE) && defined(EECONFIG_BASE_WIRELESS_CONFIG) - case WIRELESS_LPM_GET ... WIRELESS_LPM_SET: - wireless_raw_hid_rx(data, length); - break; -#endif -#if defined(HSUSB_8K_ENABLE) - case REPORT_RATE_GET ... REPORT_RATE_SET: - report_rate_hid_rx(data, length); - break; -#endif - default: - data[0] = 0xFF; - data[1] = 0; - break; - } - break; - -#if defined(KEYCHRON_RGB_ENABLE) - case 0xA8: - kc_rgb_matrix_rx(data, length); - break; -#endif - -#ifdef ANANLOG_MATRIX - case 0xA9: - analog_matrix_rx(data, length); - return true; -#endif -#ifdef LK_WIRELESS_ENABLE - case 0xAA: - lkbt51_dfu_rx(data, length); - return true; - -#endif -#ifdef FACTORY_TEST_ENABLE - case 0xAB: - factory_test_rx(data, length); - return true; - -#endif - default: - return false; - } - - raw_hid_send(data, length); - return true; -} - -#if defined(VIA_ENABLE) -bool via_command_kb(uint8_t *data, uint8_t length) { - return kc_raw_hid_rx(data, length); -} -#else -void raw_hid_receive(uint8_t *data, uint8_t length) { - kc_raw_hid_rx(data, length); -} -#endif diff --git a/keyboards/keychron/common/keychron_raw_hid.h b/keyboards/keychron/common/keychron_raw_hid.h deleted file mode 100644 index 4419f0f73f..0000000000 --- a/keyboards/keychron/common/keychron_raw_hid.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#define PROTOCOL_VERSION 0x02 -#define MISC_PROTOCOL_VERSION 0x0002 -#define QMK_COMMAND_SET 2 - -enum { - KC_GET_PROTOCOL_VERSION = 0xA0, - KC_GET_FIRMWARE_VERSION = 0xA1, - KC_GET_SUPPORT_FEATURE = 0xA2, - KC_GET_DEFAULT_LAYER = 0xA3, -}; - -enum { - FEATURE_DEFAULT_LAYER = 0x01U << 0, - FEATURE_BLUETOOTH = 0x01U << 1, - FEATURE_P24G = 0x01U << 2, - FEATURE_ANALOG_MATRIX = 0x01U << 3, - FEATURE_INFO_CHAGNED_NOTIFY = 0x01U << 4, - FEATURE_DYNAMIC_DEBOUNCE = 0x01U << 5, - FEATURE_SNAP_CLICK = 0x01U << 6, - FEATURE_KEYCHRON_RGB = 0x01U << 7, -}; - -enum { - MISC_DFU_INFO = 0x01 << 0, - MISC_LANGUAGE = 0x01 << 1, - MISC_DEBOUNCE = 0x01 << 2, - MISC_SNAP_CLICK = 0x01 << 3, - MISC_WIRELESS_LPM = 0x01 << 4, - MISC_REPORT_REATE = 0x01 << 5, -}; - -enum { - MISC_GET_PROTOCOL_VER = 0x01, - DFU_INFO_GET, - LANGUAGE_GET, - LANGUAGE_SET, - DEBOUNCE_GET, // 5 - DEBOUNCE_SET, - SNAP_CLICK_GET_INFO, - SNAP_CLICK_GET, - SNAP_CLICK_SET, - SNAP_CLICK_SAVE, // A - WIRELESS_LPM_GET, - WIRELESS_LPM_SET, - REPORT_RATE_GET, - REPORT_RATE_SET, -}; diff --git a/keyboards/keychron/common/keychron_task.c b/keyboards/keychron/common/keychron_task.c deleted file mode 100644 index 95fca0a9e5..0000000000 --- a/keyboards/keychron/common/keychron_task.c +++ /dev/null @@ -1,141 +0,0 @@ -/* Copyright 2023~2025 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include -#include "keychron_task.h" -#include "quantum.h" -#include "keychron_common.h" -#ifdef FACTORY_TEST_ENABLE -# include "factory_test.h" -#endif -#ifdef RETAIL_DEMO_ENABLE -# include "retail_demo.h" -#endif - -__attribute__((weak)) bool process_record_keychron_kb(uint16_t keycode, keyrecord_t *record) { - return true; -} - -bool process_record_keychron(uint16_t keycode, keyrecord_t *record) { -#ifdef LK_WIRELESS_ENABLE - extern bool process_record_wireless(uint16_t keycode, keyrecord_t * record); - if (!process_record_wireless(keycode, record)) return false; -#endif -#ifdef FACTORY_TEST_ENABLE - if (!process_record_factory_test(keycode, record)) return false; -#endif - -#ifdef SNAP_CLICK_ENABLE - extern bool process_record_snap_click(uint16_t keycode, keyrecord_t * record); - if (!process_record_snap_click(keycode, record)) return false; -#endif - - if (!process_record_keychron_kb(keycode, record)) return false; - -#if defined(KEYCHRON_RGB_ENABLE) && defined(EECONFIG_SIZE_CUSTOM_RGB) -# if defined(RETAIL_DEMO_ENABLE) - if (!process_record_retail_demo(keycode, record)) { - return false; - } -# endif - - extern bool process_record_keychron_rgb(uint16_t keycode, keyrecord_t *record); - if (!process_record_keychron_rgb(keycode, record)) { - return false; - } -#endif - - return true; -} - -#if defined(LED_MATRIX_ENABLE) -bool led_matrix_indicators_keychron(void) { -# ifdef LK_WIRELESS_ENABLE - extern bool led_matrix_indicators_bt(void); - led_matrix_indicators_bt(); -# endif -# ifdef FACTORY_TEST_ENABLE - factory_test_indicator(); -# endif - return true; -} -#endif - -#if defined(RGB_MATRIX_ENABLE) -bool rgb_matrix_indicators_keychron(void) { -# ifdef LK_WIRELESS_ENABLE - extern bool rgb_matrix_indicators_bt(void); - rgb_matrix_indicators_bt(); -# endif -# ifdef FACTORY_TEST_ENABLE - factory_test_indicator(); -# endif - return true; -} -#endif - -__attribute__((weak)) bool keychron_task_kb(void) { - return true; -} - -void keychron_task(void) { -#ifdef LK_WIRELESS_ENABLE - extern void wireless_tasks(void); - wireless_tasks(); -#endif -#ifdef FACTORY_TEST_ENABLE - factory_test_task(); -#endif -#if defined(RETAIL_DEMO_ENABLE) && defined(KEYCHRON_RGB_ENABLE) && defined(EECONFIG_SIZE_CUSTOM_RGB) - retail_demo_task(); -#endif - - keychron_common_task(); - - keychron_task_kb(); -} - -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - if (!process_record_user(keycode, record)) return false; - - if (!process_record_keychron(keycode, record)) return false; - - return true; -} - -#ifdef RGB_MATRIX_ENABLE -bool rgb_matrix_indicators_kb(void) { - if (!rgb_matrix_indicators_user()) return false; - - rgb_matrix_indicators_keychron(); - - return true; -} -#endif - -#ifdef LED_MATRIX_ENABLE -bool led_matrix_indicators_kb(void) { - if (!led_matrix_indicators_user()) return false; - - led_matrix_indicators_keychron(); - - return true; -} -#endif - -void housekeeping_task_kb(void) { - keychron_task(); -} diff --git a/keyboards/keychron/common/keychron_task.h b/keyboards/keychron/common/keychron_task.h deleted file mode 100644 index c96141a32a..0000000000 --- a/keyboards/keychron/common/keychron_task.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright 2022 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "stdint.h" -#include "action.h" - -bool keychron_task_kb(void); -bool process_record_keychron_kb(uint16_t keycode, keyrecord_t *record); - -void keychron_task(void); diff --git a/keyboards/keychron/common/language/eeconfig_language.h b/keyboards/keychron/common/language/eeconfig_language.h deleted file mode 100644 index 16aefcd147..0000000000 --- a/keyboards/keychron/common/language/eeconfig_language.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#define EECONFIG_SIZE_LANGUAGE 1 - diff --git a/keyboards/keychron/common/language/language.c b/keyboards/keychron/common/language/language.c deleted file mode 100644 index 934cc31cdf..0000000000 --- a/keyboards/keychron/common/language/language.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include -#include "eeconfig_kb.h" -#include "raw_hid.h" -#include "eeconfig.h" -#include "matrix.h" -#include "quantum.h" -#include "keychron_raw_hid.h" - -static uint8_t lang; - -static bool language_get(uint8_t *data) { - eeprom_read_block(&lang, (uint8_t *)(EECONFIG_BASE_LANGUAGE), sizeof(lang)); - data[1] = lang; - - return true; -} - -static bool language_set(uint8_t *data) { - lang = data[0]; - eeprom_update_block(&lang, (uint8_t *)(EECONFIG_BASE_LANGUAGE), sizeof(lang)); - - return true; -} - -void language_rx(uint8_t *data, uint8_t length) { - uint8_t cmd = data[1]; - bool success = true; - - switch (cmd) { - case LANGUAGE_GET: - success = language_get(&data[2]); - break; - - case LANGUAGE_SET: - success = language_set(&data[2]); - break; - - default: - data[0] = 0xFF; - break; - } - - data[2] = success ? 0 : 1; -} diff --git a/keyboards/keychron/common/language/language.h b/keyboards/keychron/common/language/language.h deleted file mode 100644 index 0a320d7903..0000000000 --- a/keyboards/keychron/common/language/language.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -void language_config_reset(void); -void language_rx(uint8_t *data, uint8_t length); - diff --git a/keyboards/keychron/common/language/language.mk b/keyboards/keychron/common/language/language.mk deleted file mode 100644 index 6a9d01d0a1..0000000000 --- a/keyboards/keychron/common/language/language.mk +++ /dev/null @@ -1,7 +0,0 @@ -LANGUAGE_DIR = common/language -SRC += \ - $(LANGUAGE_DIR)/language.c \ - -VPATH += $(TOP_DIR)/keyboards/keychron/$(LANGUAGE_DIR) - -OPT_DEFS += -DLANGUAGE_ENABLE diff --git a/keyboards/keychron/common/matrix.c b/keyboards/keychron/common/matrix.c deleted file mode 100644 index 8fe7588118..0000000000 --- a/keyboards/keychron/common/matrix.c +++ /dev/null @@ -1,218 +0,0 @@ -/* Copyright 2023 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" - -#ifndef HC595_STCP -# define HC595_STCP B0 -#endif -#ifndef HC595_SHCP -# define HC595_SHCP A1 -#endif -#ifndef HC595_DS -# define HC595_DS A7 -#endif - -#ifndef HC595_START_INDEX -# define HC595_START_INDEX 0 -#endif -#ifndef HC595_END_INDEX -# define HC595_END_INDEX 15 -#endif -#ifndef HC595_OFFSET_INDEX -# define HC595_OFFSET_INDEX 0 -#endif - -#if defined(HC595_START_INDEX) && defined(HC595_END_INDEX) -# if ((HC595_END_INDEX - HC595_START_INDEX + 1) > 16) -# define SIZE_T uint32_t -# define UNSELECT_ALL_COL 0xFFFFFFFF -# define SELECT_ALL_COL 0x00000000 -# elif ((HC595_END_INDEX - HC595_START_INDEX + 1) > 8) -# define SIZE_T uint16_t -# define UNSELECT_ALL_COL 0xFFFF -# define SELECT_ALL_COL 0x0000 -# else -# define SIZE_T uint8_t -# define UNSELECT_ALL_COL 0xFF -# define SELECT_ALL_COL 0x00 -# endif -#endif - -pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; -pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; - -static inline uint8_t readMatrixPin(pin_t pin) { - if (pin != NO_PIN) { - return readPin(pin); - } else { - return 1; - } -} - -static inline void setPinOutput_writeLow(pin_t pin) { - setPinOutput(pin); - writePinLow(pin); -} - -static inline void setPinOutput_writeHigh(pin_t pin) { - setPinOutput(pin); - writePinHigh(pin); -} - -static inline void HC595_delay(uint16_t n) { - while (n-- > 0) { - asm volatile("nop" ::: "memory"); - } -} - -static void HC595_output(SIZE_T data, bool bit_flag) { - uint8_t n = 1; - - ATOMIC_BLOCK_FORCEON { - for (uint8_t i = 0; i < (HC595_END_INDEX - HC595_START_INDEX + 1); i++) { - if (data & 0x1) { - writePinHigh(HC595_DS); - } else { - writePinLow(HC595_DS); - } - writePinHigh(HC595_SHCP); - HC595_delay(n); - writePinLow(HC595_SHCP); - HC595_delay(n); - if (bit_flag) { - break; - } else { - data = data >> 1; - } - } - writePinHigh(HC595_STCP); - HC595_delay(n); - writePinLow(HC595_STCP); - HC595_delay(n); - } -} - -static void select_col(uint8_t col) { - if (col < HC595_START_INDEX || col > HC595_END_INDEX) { - setPinOutput_writeLow(col_pins[col]); - } else { - if (col == HC595_START_INDEX) { - HC595_output(0x00, true); - if (col < HC595_OFFSET_INDEX) { - HC595_output(0x01, true); - } - } - } -} - -static void unselect_col(uint8_t col) { - if (col < HC595_START_INDEX || col > HC595_END_INDEX) { -#ifdef MATRIX_UNSELECT_DRIVE_HIGH - setPinOutput_writeHigh(col_pins[col]); -#else - setPinInputHigh(col_pins[col]); -#endif - } else { - HC595_output(0x01, true); - } -} - -static void unselect_cols(void) { - for (uint8_t col = 0; col < MATRIX_COLS; col++) { - if (col < HC595_START_INDEX || col > HC595_END_INDEX) { -#ifdef MATRIX_UNSELECT_DRIVE_HIGH - setPinOutput_writeHigh(col_pins[col]); -#else - setPinInputHigh(col_pins[col]); -#endif - } else { - if (col == HC595_START_INDEX) { - HC595_output(UNSELECT_ALL_COL, false); - } - break; - } - } -} - -void select_all_cols(void) { - for (uint8_t col = 0; col < MATRIX_COLS; col++) { - if (col < HC595_START_INDEX || col > HC595_END_INDEX) { - setPinOutput_writeLow(col_pins[col]); - } else { - if (col == HC595_START_INDEX) { - HC595_output(SELECT_ALL_COL, false); - } - break; - } - } -} - -static void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col, matrix_row_t row_shifter) { - // Select col - select_col(current_col); // select col - HC595_delay(200); - - // For each row... - for (uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) { - // Check row pin state - if (readMatrixPin(row_pins[row_index]) == 0) { - // Pin LO, set col bit - current_matrix[row_index] |= row_shifter; - } else { - // Pin HI, clear col bit - current_matrix[row_index] &= ~row_shifter; - } - } - - // Unselect col - unselect_col(current_col); - HC595_delay(200); // wait for all Row signals to go HIGH -} - -void matrix_init_custom(void) { - setPinOutput(HC595_DS); - setPinOutput(HC595_STCP); - setPinOutput(HC595_SHCP); - - for (uint8_t x = 0; x < MATRIX_ROWS; x++) { - if (row_pins[x] != NO_PIN) { - setPinInputHigh(row_pins[x]); - } - } - - unselect_cols(); -} - -bool matrix_scan_custom(matrix_row_t current_matrix[]) { - matrix_row_t curr_matrix[MATRIX_ROWS] = {0}; - - // Set col, read rows - matrix_row_t row_shifter = MATRIX_ROW_SHIFTER; - for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++, row_shifter <<= 1) { - matrix_read_rows_on_col(curr_matrix, current_col, row_shifter); - } - - bool changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0; - if (changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix)); - - return changed; -} - -void suspend_wakeup_init_kb(void) { - // code will run on keyboard wakeup - clear_keyboard(); -} diff --git a/keyboards/keychron/common/rgb/eeconfig_custom_rgb.h b/keyboards/keychron/common/rgb/eeconfig_custom_rgb.h deleted file mode 100644 index bc0cf34f49..0000000000 --- a/keyboards/keychron/common/rgb/eeconfig_custom_rgb.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "rgb_matrix_kb_config.h" - -#define OS_INDICATOR_CONFIG_SIZE 4 // sizeof(os_indicator_config_t) - -//#define OS_INDICATOR_CONFIG_OFFSET (PER_KEY_RGB_LED_COLOR_LIST_SIZE + RGB_MATRIX_LED_COUNT) -#define RETAIL_DEMO_SIZE 1 // sizeof(retail_demo_enable) - -#define PER_KEY_RGB_TYPE_SIZE 1 -#define PER_KEY_RGB_LED_COLOR_LIST_SIZE (RGB_MATRIX_LED_COUNT * 3) - -#define MIX_RGB_LAYER_FLAG_SIZE RGB_MATRIX_LED_COUNT -#define EFFECT_CONFIG_SIZE 8 // sizeof(effect_config_t) -#define EFFECT_LIST_SIZE (EFFECT_LAYERS * EFFECTS_PER_LAYER * EFFECT_CONFIG_SIZE) - -#define EECONFIG_SIZE_CUSTOM_RGB ( \ - OS_INDICATOR_CONFIG_SIZE \ - + RETAIL_DEMO_SIZE \ - + PER_KEY_RGB_TYPE_SIZE \ - + PER_KEY_RGB_LED_COLOR_LIST_SIZE \ - + MIX_RGB_LAYER_FLAG_SIZE \ - + EFFECT_LIST_SIZE) diff --git a/keyboards/keychron/common/rgb/keychron_rgb.c b/keyboards/keychron/common/rgb/keychron_rgb.c deleted file mode 100644 index 83d9451d44..0000000000 --- a/keyboards/keychron/common/rgb/keychron_rgb.c +++ /dev/null @@ -1,494 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H -#include "raw_hid.h" -#include "keychron_common.h" -#include "keychron_rgb_type.h" -#include "eeconfig_kb.h" -#include "usb_main.h" -#include "color.h" -#ifdef LK_WIRELESS_ENABLE -#include "transport.h" -#endif -#include - -#if defined(KEYCHRON_RGB_ENABLE) && defined(EECONFIG_SIZE_CUSTOM_RGB) - -# define PER_KEY_RGB_VER 0x0001 - -# define OFFSET_OS_INDICATOR ((uint8_t *)(EECONFIG_BASE_CUSTOM_RGB)) -# define OFFSET_RETAIL_DEMO (OFFSET_OS_INDICATOR + sizeof(os_indicator_config_t)) -# define OFFSET_PER_KEY_RGB_TYPE (OFFSET_RETAIL_DEMO + sizeof(retail_demo_enable)) -# define OFFSET_PER_KEY_RGBS (OFFSET_PER_KEY_RGB_TYPE + sizeof(per_key_rgb_type)) -# define OFFSET_LAYER_FLAGS (OFFSET_PER_KEY_RGBS + sizeof(per_key_led)) -# define OFFSET_EFFECT_LIST (OFFSET_LAYER_FLAGS + sizeof(regions)) - -enum { - RGB_GET_PROTOCOL_VER = 0x01, - RGB_SAVE, - GET_INDICATORS_CONFIG, - SET_INDICATORS_CONFIG, - RGB_GET_LED_COUNT, - RGB_GET_LED_IDX, - PER_KEY_RGB_GET_TYPE, - PER_KEY_RGB_SET_TYPE, - PER_KEY_RGB_GET_COLOR, - PER_KEY_RGB_SET_COLOR, //10 - MIXED_EFFECT_RGB_GET_INFO, - MIXED_EFFECT_RGB_GET_REGIONS, - MIXED_EFFECT_RGB_SET_REGIONS, - MIXED_EFFECT_RGB_GET_EFFECT_LIST, - MIXED_EFFECT_RGB_SET_EFFECT_LIST, -}; - -extern uint8_t retail_demo_enable; -extern uint8_t per_key_rgb_type; -extern HSV per_key_led[RGB_MATRIX_LED_COUNT]; -extern HSV default_per_key_led[RGB_MATRIX_LED_COUNT]; - -extern uint8_t regions[RGB_MATRIX_LED_COUNT]; -extern uint8_t rgb_regions[RGB_MATRIX_LED_COUNT]; -extern effect_config_t effect_list[EFFECT_LAYERS][EFFECTS_PER_LAYER]; -extern uint8_t default_region[RGB_MATRIX_LED_COUNT]; - -os_indicator_config_t os_ind_cfg; - -extern void update_mixed_rgb_effect_count(void); - -void eeconfig_reset_custom_rgb(void) { - os_ind_cfg.disable.raw = 0; - os_ind_cfg.hsv.s = 0; - os_ind_cfg.hsv.h = os_ind_cfg.hsv.v = 0xFF; - - eeprom_update_block(&os_ind_cfg, OFFSET_OS_INDICATOR, sizeof(os_ind_cfg)); - retail_demo_enable = 0; - eeprom_read_block(&retail_demo_enable, (uint8_t *)(OFFSET_RETAIL_DEMO), sizeof(retail_demo_enable)); - per_key_rgb_type = 0; - eeprom_update_block(&per_key_rgb_type, OFFSET_PER_KEY_RGB_TYPE, sizeof(per_key_rgb_type)); - - memcpy(per_key_led, default_per_key_led, sizeof(per_key_led)); - eeprom_update_block(per_key_led, OFFSET_PER_KEY_RGBS, sizeof(per_key_led)); - - memcpy(regions, default_region, RGB_MATRIX_LED_COUNT); - eeprom_update_block(regions, OFFSET_LAYER_FLAGS, sizeof(regions)); - - memset(effect_list, 0, sizeof(effect_list)); - - effect_list[0][0].effect = 5; - effect_list[0][0].sat = 255; - effect_list[0][0].speed = 127; - effect_list[0][0].time = 5000; - - effect_list[1][0].effect = 2; - effect_list[1][0].hue = 0; - effect_list[1][0].sat = 255; - effect_list[1][0].speed = 127; - effect_list[1][0].time = 5000; - - eeprom_update_block(effect_list, OFFSET_EFFECT_LIST, sizeof(effect_list)); - update_mixed_rgb_effect_count(); -} - -void eeconfig_init_custom_rgb(void) { - memcpy(per_key_led, default_per_key_led, sizeof(per_key_led)); - eeprom_update_dword(EECONFIG_KEYBOARD, (EECONFIG_KB_DATA_VERSION)); - - eeprom_read_block(&os_ind_cfg, OFFSET_OS_INDICATOR, sizeof(os_ind_cfg)); - eeprom_read_block(&retail_demo_enable, (uint8_t *)(OFFSET_RETAIL_DEMO), sizeof(retail_demo_enable)); - - if (os_ind_cfg.hsv.v < 128) os_ind_cfg.hsv.v = 128; - // Load per key rgb led - eeprom_read_block(&per_key_rgb_type, OFFSET_PER_KEY_RGB_TYPE, sizeof(per_key_rgb_type)); - eeprom_read_block(per_key_led, OFFSET_PER_KEY_RGBS, sizeof(per_key_led)); - // Load mixed rgb - eeprom_read_block(regions, OFFSET_LAYER_FLAGS, sizeof(regions)); - eeprom_read_block(effect_list, OFFSET_EFFECT_LIST, sizeof(effect_list)); - update_mixed_rgb_effect_count(); - -} - -void rgb_save_retail_demo(void) { - eeprom_update_block(&retail_demo_enable, (uint8_t *)(OFFSET_RETAIL_DEMO), sizeof(retail_demo_enable)); -} - -static bool rgb_get_version(uint8_t *data) { - data[1] = PER_KEY_RGB_VER & 0xFF; - data[2] = (PER_KEY_RGB_VER >> 8) & 0xFF; - - return true; -} - -static bool rgb_get_led_count(uint8_t *data) { - data[1] = RGB_MATRIX_LED_COUNT; - - return true; -} - -static bool rgb_get_led_idx(uint8_t *data) { - uint8_t row = data[0]; - if (row > MATRIX_ROWS) return false; - - uint8_t led_idx[128]; - uint32_t row_mask = 0; - memcpy(&row_mask, &data[1], 3); - - for (uint8_t c = 0; c < MATRIX_COLS; c++) { - led_idx[0] = 0xFF; - if (row_mask & (0x01 << c)) { - rgb_matrix_map_row_column_to_led(row, c, led_idx); - } - data[1 + c] = led_idx[0]; - } - - return true; -} - -static bool per_key_rgb_get_type(uint8_t *data) { - extern uint8_t per_key_rgb_type; - data[1] = per_key_rgb_type; - - return true; -} - -static bool per_key_rgb_set_type(uint8_t *data) { - uint8_t type = data[0]; - - if (type >= PER_KEY_RGB_MAX) return false; - - per_key_rgb_type = data[0]; - - return true; -} - -static bool per_key_rgb_get_led_color(uint8_t *data) { - uint8_t start = data[0]; - uint8_t count = data[1]; - - if (count > 9) return false; - - for (uint8_t i = 0; i < count; i++) { - data[1 + i * 3] = per_key_led[start + i].h; - data[2 + i * 3] = per_key_led[start + i].s; - data[3 + i * 3] = per_key_led[start + i].v; - } - - return true; -} - -static bool per_key_rgb_set_led_color(uint8_t *data) { - uint8_t start = data[0]; - uint8_t count = data[1]; - - if (count > 9) return false; - - for (uint8_t i = 0; i < count; i++) { - per_key_led[start + i].h = data[2 + i * 3]; - per_key_led[start + i].s = data[3 + i * 3]; - per_key_led[start + i].v = data[4 + i * 3]; - } - - return true; -} - -static bool mixed_rgb_get_effect_info(uint8_t *data) { - data[1] = EFFECT_LAYERS; - data[2] = EFFECTS_PER_LAYER; - - return true; -} - -static bool mixed_rgb_get_regions(uint8_t *data) { - uint8_t start = data[0]; - uint8_t count = data[1]; - - if (count > 29 || start + count > RGB_MATRIX_LED_COUNT) return false; - memcpy(&data[1], ®ions[start], count); - - return true; -} - -bool mixed_rgb_set_regions(uint8_t *data) { - uint8_t start = data[0]; - uint8_t count = data[1]; - - if (count > 28 || start + count > RGB_MATRIX_LED_COUNT) return false; - for (uint8_t i = 0; i < count; i++) - if (data[2 + i] >= EFFECT_LAYERS) return false; - - memcpy(®ions[start], &data[2], count); - memcpy(&rgb_regions[start], &data[2], count); - - return true; -} -#define EFFECT_DATA_LEN 8 - -static bool mixed_rgb_get_effect_list(uint8_t *data) { - uint8_t region = data[0]; - uint8_t start = data[1]; - uint8_t count = data[2]; - - if (count > 3 || region > EFFECT_LAYERS || start + count > EFFECTS_PER_LAYER) return false; - - for (uint8_t i = 0; i < count; i++) { - data[1 + i * EFFECT_DATA_LEN] = effect_list[region][start + i].effect; - data[2 + i * EFFECT_DATA_LEN] = effect_list[region][start + i].hue; - data[3 + i * EFFECT_DATA_LEN] = effect_list[region][start + i].sat; - data[4 + i * EFFECT_DATA_LEN] = effect_list[region][start + i].speed; - memcpy(&data[5 + i * EFFECT_DATA_LEN], &effect_list[region][start + i].time, 4); - } - - return true; -} - -bool mixed_rgb_set_effect_list(uint8_t *data) { - uint8_t region = data[0]; - uint8_t start = data[1]; - uint8_t count = data[2]; - - if (count > 3 || region > EFFECT_LAYERS || start + count > EFFECTS_PER_LAYER) return false; - for (uint8_t i = 0; i < count; i++) { - if (data[3 + i * EFFECT_DATA_LEN] >= RGB_MATRIX_CUSTOM_MIXED_RGB) return false; - } - - for (uint8_t i = 0; i < count; i++) { - effect_list[region][start + i].effect = data[3 + i * EFFECT_DATA_LEN]; - effect_list[region][start + i].hue = data[4 + i * EFFECT_DATA_LEN]; - effect_list[region][start + i].sat = data[5 + i * EFFECT_DATA_LEN]; - effect_list[region][start + i].speed = data[6 + i * EFFECT_DATA_LEN]; - memcpy(&effect_list[region][start + i].time, &data[7 + i * EFFECT_DATA_LEN], 4); - } - update_mixed_rgb_effect_count(); - - return true; -} - -static bool kc_rgb_save(void) { - eeprom_update_block(&os_ind_cfg, OFFSET_OS_INDICATOR, sizeof(os_ind_cfg)); - eeprom_update_block(&per_key_rgb_type, OFFSET_PER_KEY_RGB_TYPE, sizeof(per_key_rgb_type)); - eeprom_update_block(per_key_led, OFFSET_PER_KEY_RGBS, RGB_MATRIX_LED_COUNT * sizeof(rgb_led_t)); - eeprom_update_block(regions, OFFSET_LAYER_FLAGS, RGB_MATRIX_LED_COUNT); - eeprom_update_block(effect_list, OFFSET_EFFECT_LIST, sizeof(effect_list)); - - return true; -} - -static bool get_indicators_config(uint8_t *data) { - data[1] = 0 -#if defined(NUM_LOCK_INDEX) && !defined(DIM_NUM_LOCK) - | (1 << 0x00) -#endif -#if defined(CAPS_LOCK_INDEX) && !defined(DIM_CAPS_LOCK) - | (1 << 0x01) -#endif -#if defined(SCROLL_LOCK_INDEX) - | (1 << 0x02) -#endif -#if defined(COMPOSE_LOCK_INDEX) - | (1 << 0x03) -#endif -#if defined(KANA_LOCK_INDEX) - | (1 << 0x04) -#endif -; - data[2] = os_ind_cfg.disable.raw; - data[3] = os_ind_cfg.hsv.h; - data[4] = os_ind_cfg.hsv.s; - data[5] = os_ind_cfg.hsv.v; - - return true; -} - -static bool set_indicators_config(uint8_t *data) { - os_ind_cfg.disable.raw = data[0]; - os_ind_cfg.hsv.h = data[1]; - os_ind_cfg.hsv.s = data[2]; - os_ind_cfg.hsv.v = data[3]; - - if (os_ind_cfg.hsv.v < 128) os_ind_cfg.hsv.v = 128; - led_update_kb(host_keyboard_led_state()); - - return true; -} - -void kc_rgb_matrix_rx(uint8_t *data, uint8_t length) { - uint8_t cmd = data[1]; - bool success = true; - - switch (cmd) { - case RGB_GET_PROTOCOL_VER: - success = rgb_get_version(&data[2]); - break; - - case RGB_SAVE: - success = kc_rgb_save(); - break; - - case GET_INDICATORS_CONFIG: - success = get_indicators_config(&data[2]); - break; - - case SET_INDICATORS_CONFIG: - success = set_indicators_config(&data[2]); - break; - - case RGB_GET_LED_COUNT: - success = rgb_get_led_count(&data[2]); - break; - - case RGB_GET_LED_IDX: - success = rgb_get_led_idx(&data[2]); - break; - - case PER_KEY_RGB_GET_TYPE: - success = per_key_rgb_get_type(&data[2]); - break; - - case PER_KEY_RGB_SET_TYPE: - success = per_key_rgb_set_type(&data[2]); - break; - - case PER_KEY_RGB_GET_COLOR: - success = per_key_rgb_get_led_color(&data[2]); - break; - - case PER_KEY_RGB_SET_COLOR: - success = per_key_rgb_set_led_color(&data[2]); - break; - - case MIXED_EFFECT_RGB_GET_INFO: - success = mixed_rgb_get_effect_info(&data[2]); - break; - - case MIXED_EFFECT_RGB_GET_REGIONS: - success = mixed_rgb_get_regions(&data[2]); - break; - - case MIXED_EFFECT_RGB_SET_REGIONS: - success = mixed_rgb_set_regions(&data[2]); - break; - - case MIXED_EFFECT_RGB_GET_EFFECT_LIST: - success = mixed_rgb_get_effect_list(&data[2]); - break; - - case MIXED_EFFECT_RGB_SET_EFFECT_LIST: - success = mixed_rgb_set_effect_list(&data[2]); - break; - - default: - data[0] = 0xFF; - break; - } - - data[2] = success ? 0 : 1; -} - -void os_state_indicate(void) { -# if defined(RGB_DISABLE_WHEN_USB_SUSPENDED) || defined(LED_DISABLE_WHEN_USB_SUSPENDED) - if (get_transport() == TRANSPORT_USB && USB_DRIVER.state == USB_SUSPENDED) return; -# endif - - RGB rgb = hsv_to_rgb(os_ind_cfg.hsv); - -# if defined(NUM_LOCK_INDEX) - if (host_keyboard_led_state().num_lock && !os_ind_cfg.disable.num_lock) { - rgb_matrix_set_color(NUM_LOCK_INDEX, rgb.r, rgb.g, rgb.b); - } -# endif -# if defined(CAPS_LOCK_INDEX) - if (host_keyboard_led_state().caps_lock && !os_ind_cfg.disable.caps_lock) { - rgb_matrix_set_color(CAPS_LOCK_INDEX, rgb.r, rgb.g, rgb.b); - } -# endif -# if defined(SCROLL_LOCK_INDEX) - if (host_keyboard_led_state().compose && !os_ind_cfg.disable.scroll_lock) { - rgb_matrix_set_color(SCROLL_LOCK_INDEX, rgb.r, rgb.g, rgb.b); - } -# endif -# if defined(COMPOSE_LOCK_INDEX) - if (host_keyboard_led_state().compose && !os_ind_cfg.disable.compose) { - rgb_matrix_set_color(COMPOSE_LOCK_INDEX, rgb.r, rgb.g, rgb.b); - } -# endif -# if defined(KANA_LOCK_INDEX) - if (host_keyboard_led_state().kana && !os_ind_cfg.disable.kana) { - rgb_matrix_set_color(KANA_LOCK_INDEX, rgb.r, rgb.g, rgb.b); - } -# endif - (void)rgb; -} - -bool process_record_keychron_rgb(uint16_t keycode, keyrecord_t *record) { - if (rgb_matrix_get_mode() == RGB_MATRIX_CUSTOM_MIXED_RGB || rgb_matrix_get_mode() == RGB_MATRIX_CUSTOM_PER_KEY_RGB) { - switch (keycode) { - case RGB_HUI ... RGB_SAD: - return false; - - case RGB_SPI: - if (rgb_matrix_get_mode() == RGB_MATRIX_CUSTOM_MIXED_RGB) { - return false; - } else { - rgb_matrix_config.speed = qadd8(rgb_matrix_config.speed, RGB_MATRIX_SPD_STEP); - eeprom_write_byte((uint8_t *)EECONFIG_RGB_MATRIX + offsetof(rgb_config_t, speed), rgb_matrix_config.speed); - } - break; - case RGB_SPD: - if (rgb_matrix_get_mode() == RGB_MATRIX_CUSTOM_MIXED_RGB) { - return false; - } else { - rgb_matrix_config.speed = qsub8(rgb_matrix_config.speed, RGB_MATRIX_SPD_STEP); - eeprom_write_byte((uint8_t *)EECONFIG_RGB_MATRIX + offsetof(rgb_config_t, speed), rgb_matrix_config.speed); - } - break; - - case RGB_VAI: -# ifdef RGB_MATRIX_BRIGHTNESS_TURN_OFF_VAL - if (!rgb_matrix_config.enable) { - rgb_matrix_toggle(); - return false; - } -# endif - rgb_matrix_config.hsv.v = qadd8(rgb_matrix_config.hsv.v, RGB_MATRIX_VAL_STEP); -# ifdef RGB_MATRIX_BRIGHTNESS_TURN_OFF_VAL - while (rgb_matrix_config.hsv.v <= RGB_MATRIX_BRIGHTNESS_TURN_OFF_VAL) - rgb_matrix_config.hsv.v = qadd8(rgb_matrix_config.hsv.v, RGB_MATRIX_VAL_STEP); -# endif - eeprom_write_byte((uint8_t *)EECONFIG_RGB_MATRIX + offsetof(rgb_config_t, hsv.v), rgb_matrix_config.hsv.v); - return false; - - case RGB_VAD: -# ifdef RGB_MATRIX_BRIGHTNESS_TURN_OFF_VAL - if (rgb_matrix_config.enable && rgb_matrix_config.hsv.v > RGB_MATRIX_BRIGHTNESS_TURN_OFF_VAL) -# endif - { - rgb_matrix_config.hsv.v = qsub8(rgb_matrix_config.hsv.v, RGB_MATRIX_VAL_STEP); - eeprom_write_byte((uint8_t *)EECONFIG_RGB_MATRIX + offsetof(rgb_config_t, hsv.v), rgb_matrix_config.hsv.v); - } -# ifdef RGB_MATRIX_BRIGHTNESS_TURN_OFF_VAL - if (rgb_matrix_config.enable && rgb_matrix_config.hsv.v <= RGB_MATRIX_BRIGHTNESS_TURN_OFF_VAL) { - rgb_matrix_toggle(); - } -# endif - return false; - - default: - break; - } - } - return true; -} -#endif diff --git a/keyboards/keychron/common/rgb/keychron_rgb_type.h b/keyboards/keychron/common/rgb/keychron_rgb_type.h deleted file mode 100644 index f9e17d548c..0000000000 --- a/keyboards/keychron/common/rgb/keychron_rgb_type.h +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once -#include "color.h" - -enum { - PER_KEY_RGB_SOLID, - PER_KEY_RGB_BREATHING, - PER_KEY_RGB_REATIVE_SIMPLE, - PER_KEY_RGB_REATIVE_MULTI_WIDE, - PER_KEY_RGB_REATIVE_SPLASH, - PER_KEY_RGB_MAX, -}; - -typedef struct PACKED { - uint8_t effect; - uint8_t hue; - uint8_t sat; - uint8_t speed; - uint32_t time; -} effect_config_t; - -typedef union { - uint8_t raw; - struct { - bool num_lock : 1; - bool caps_lock : 1; - bool scroll_lock : 1; - bool compose : 1; - bool kana : 1; - uint8_t reserved : 3; - }; -} os_led_t; - -// TODO: -// typedef struct PACKED HSV2 { -// uint8_t h; -// uint8_t s; -// uint8_t v; -// } HSV2; - -typedef struct PACKED { - os_led_t disable; - HSV hsv; -} os_indicator_config_t; diff --git a/keyboards/keychron/common/rgb/mixed_rgb.c b/keyboards/keychron/common/rgb/mixed_rgb.c deleted file mode 100644 index 16fcafa0ac..0000000000 --- a/keyboards/keychron/common/rgb/mixed_rgb.c +++ /dev/null @@ -1,191 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#if defined(KEYCHRON_RGB_ENABLE) && defined(EECONFIG_SIZE_CUSTOM_RGB) - -#include "quantum.h" -#include "rgb_matrix.h" -#include "keychron_rgb_type.h" - -#define RGB_MATRIX_EFFECT(name, ...) \ - extern bool name(effect_params_t *params); -#include "rgb_matrix_effects.inc" -#include "rgb_matrix_kb.inc" -#undef RGB_MATRIX_EFFECT - -// PER_KEY_RGB data -extern uint8_t per_key_rgb_type; - -// MIXED_RGB data -extern uint8_t rgb_regions[RGB_MATRIX_LED_COUNT]; -uint8_t regions[RGB_MATRIX_LED_COUNT] = {0}; // -effect_config_t effect_list[EFFECT_LAYERS][EFFECTS_PER_LAYER]; - -uint8_t layer_effect_count[EFFECT_LAYERS] = {0}; -uint8_t layer_effect_index[EFFECT_LAYERS] = {0}; -uint32_t layer_effect_timer[EFFECT_LAYERS] = {0}; - -// Typing heatmap -uint8_t typingHeatmap = 0; - -static bool multiple_rgb_effect_runner(effect_params_t *params); - -void mixed_rgb_reset(void) { - typingHeatmap = 0; - for (uint8_t i=0; iinit) { - memcpy(rgb_regions, regions, RGB_MATRIX_LED_COUNT); - memset(layer_effect_index, 0, sizeof(layer_effect_index)); - - mixed_rgb_reset(); - } - - for (int8_t i=EFFECT_LAYERS-1; i>=0; i--) { - params->region = i; - ret = multiple_rgb_effect_runner(params); - } - - return ret; -} - -#define TRANSITION_TIME 1000 - -bool multiple_rgb_effect_runner(effect_params_t *params) { - HSV hsv= rgb_matrix_get_hsv(); - uint8_t backup_value = hsv.v; - - bool transation = false; - bool rendering = false; - uint8_t layer = params->region; - - uint8_t effect_index = layer_effect_index[layer]; - - if (effect_list[layer][effect_index].effect == RGB_MATRIX_TYPING_HEATMAP) - typingHeatmap |= 0x01 << layer; - else - typingHeatmap &= ~(0x01 << layer); - - uint8_t last_effect = effect_list[layer][layer_effect_index[layer]].effect; - - if (layer_effect_count[layer] > 1) { - if (timer_elapsed32(layer_effect_timer[layer]) > effect_list[layer][effect_index].time) { - layer_effect_timer[layer] = timer_read32(); - if (++layer_effect_index[layer] >= EFFECTS_PER_LAYER) layer_effect_index[layer] = 0; - - effect_index = layer_effect_index[layer]; - - if (effect_list[layer][effect_index].time == 0) return true; // - } - else if (timer_elapsed32(layer_effect_timer[layer]) > effect_list[layer][effect_index].time - TRANSITION_TIME) - { - hsv.v = backup_value*(effect_list[layer][effect_index].time - timer_elapsed32(layer_effect_timer[layer]))/TRANSITION_TIME; - transation = true; - } - - if (timer_elapsed32(layer_effect_timer[layer]) < TRANSITION_TIME) - { - hsv.v = backup_value*timer_elapsed32(layer_effect_timer[layer])/TRANSITION_TIME; - transation = true; - } - } else if (layer_effect_count[layer] == 1 && effect_list[layer][effect_index].effect == 0) { - for (uint8_t i=0; iregion] = i; - break; - } - } - } - - uint8_t effect = effect_list[layer][effect_index].effect; - if (effect == 0) ++layer_effect_index[layer]; // Skip effect 0 - if (layer_effect_index[layer] >= EFFECTS_PER_LAYER) layer_effect_index[layer] = 0; - - effect = effect_list[layer][effect_index].effect; - hsv.h = effect_list[layer][effect_index].hue; - hsv.s = effect_list[layer][effect_index].sat; - rgb_matrix_sethsv_noeeprom(hsv.h, hsv.s, hsv.v); - - rgb_matrix_set_speed_noeeprom(effect_list[layer][effect_index].speed); - - params->init = last_effect != effect; - - // each effect can opt to do calculations - // and/or request PWM buffer updates. - switch (effect) { - // --------------------------------------------- - // -----Begin rgb effect switch case macros----- -#define RGB_MATRIX_EFFECT(name, ...) \ - case RGB_MATRIX_##name: \ - rendering = name(params); \ - break; -#include "rgb_matrix_effects.inc" -#undef RGB_MATRIX_EFFECT - -#if defined(RGB_MATRIX_CUSTOM_KB) || defined(RGB_MATRIX_CUSTOM_USER) -# define RGB_MATRIX_EFFECT(name, ...) \ - case RGB_MATRIX_CUSTOM_##name: \ - rendering = name(params); \ - break; -# ifdef RGB_MATRIX_CUSTOM_KB -# include "rgb_matrix_kb.inc" -# endif -# undef RGB_MATRIX_EFFECT -#endif - // -----End rgb effect switch case macros------- - // --------------------------------------------- - } - - if (transation) { - rgb_matrix_sethsv_noeeprom(hsv.h, hsv.s, backup_value); - } - - return rendering; - -} - -void process_rgb_matrix_kb(uint8_t row, uint8_t col, bool pressed) { - if (pressed) - { - if (rgb_matrix_config.mode == RGB_MATRIX_CUSTOM_MIXED_RGB) { - extern void process_rgb_matrix_typing_heatmap(uint8_t row, uint8_t col); - if (typingHeatmap) process_rgb_matrix_typing_heatmap(row, col); - } - } -} -#endif diff --git a/keyboards/keychron/common/rgb/per_key_rgb.c b/keyboards/keychron/common/rgb/per_key_rgb.c deleted file mode 100644 index 8cf18af824..0000000000 --- a/keyboards/keychron/common/rgb/per_key_rgb.c +++ /dev/null @@ -1,160 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" -#include "rgb_matrix.h" -#include "keychron_rgb_type.h" -#include -#include - -#if defined(KEYCHRON_RGB_ENABLE) - -// PER_KEY_RGB data -uint8_t per_key_rgb_type; -HSV per_key_led[RGB_MATRIX_LED_COUNT] = {0}; - -bool per_key_rgb_solid(effect_params_t *params) { - RGB_MATRIX_USE_LIMITS(led_min, led_max); - HSV hsv; - - for (uint8_t i = led_min; i < led_max; i++) { - hsv = per_key_led[i]; - hsv.v = rgb_matrix_config.hsv.v; - RGB rgb = hsv_to_rgb(hsv); - rgb_matrix_region_set_color(params->region, i, rgb.r, rgb.g, rgb.b); - } - return rgb_matrix_check_finished_leds(led_max); -} - -bool per_key_rgb_breahting(effect_params_t *params) { - RGB_MATRIX_USE_LIMITS(led_min, led_max); - HSV hsv; - uint16_t time = scale16by8(g_rgb_timer, rgb_matrix_config.speed / 8); - - for (uint8_t i = led_min; i < led_max; i++) { - hsv = per_key_led[i]; - hsv.v = scale8(abs8(sin8(time) - 128) * 2, rgb_matrix_config.hsv.v); - RGB rgb = hsv_to_rgb(hsv); - RGB_MATRIX_TEST_LED_FLAGS(); - rgb_matrix_region_set_color(params->region, i, rgb.r, rgb.g, rgb.b); - } - - return rgb_matrix_check_finished_leds(led_max); -} - -bool per_key_rgb_reactive_simple(effect_params_t *params) { - RGB_MATRIX_USE_LIMITS(led_min, led_max); - - uint16_t max_tick = 65535 / qadd8(rgb_matrix_config.speed, 1); - for (uint8_t i = led_min; i < led_max; i++) { - RGB_MATRIX_TEST_LED_FLAGS(); - uint16_t tick = max_tick; - // Reverse search to find most recent key hit - for (int8_t j = g_last_hit_tracker.count - 1; j >= 0; j--) { - if (g_last_hit_tracker.index[j] == i && g_last_hit_tracker.tick[j] < tick) { - tick = g_last_hit_tracker.tick[j]; - break; - } - } - - uint16_t offset = scale16by8(tick, qadd8(rgb_matrix_config.speed, 1)); - HSV hsv = per_key_led[i]; - - hsv.v = scale8(255 - offset, rgb_matrix_config.hsv.v); - if (per_key_led[i].v < hsv.v) - hsv.v = per_key_led[i].v; - - RGB rgb = hsv_to_rgb(hsv); - rgb_matrix_region_set_color(params->region, i, rgb.r, rgb.g, rgb.b); - } - return rgb_matrix_check_finished_leds(led_max); - -} - -typedef HSV (*reactive_splash_f)(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick); - -bool per_key_rgb_effect_runner_reactive_splash(uint8_t start, effect_params_t* params, reactive_splash_f effect_func) { - RGB_MATRIX_USE_LIMITS(led_min, led_max); - - uint8_t count = g_last_hit_tracker.count; - for (uint8_t i = led_min; i < led_max; i++) { - RGB_MATRIX_TEST_LED_FLAGS(); - HSV hsv = rgb_matrix_config.hsv; - hsv.v = 0; - for (uint8_t j = start; j < count; j++) { - int16_t dx = g_led_config.point[i].x - g_last_hit_tracker.x[j]; - int16_t dy = g_led_config.point[i].y - g_last_hit_tracker.y[j]; - uint8_t dist = sqrt16(dx * dx + dy * dy); - uint16_t tick = scale16by8(g_last_hit_tracker.tick[j], qadd8(rgb_matrix_config.speed, 1)); - hsv = effect_func(hsv, dx, dy, dist, tick); - } - hsv.h = per_key_led[i].h; - hsv.s = per_key_led[i].s; - hsv.v = scale8(hsv.v, rgb_matrix_config.hsv.v); - if (per_key_led[i].v < hsv.v) - hsv.v = per_key_led[i].v; - RGB rgb = hsv_to_rgb(hsv); - rgb_matrix_region_set_color(params->region, i, rgb.r, rgb.g, rgb.b); - } - return rgb_matrix_check_finished_leds(led_max); -} - -static HSV solid_reactive_wide_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick) { - uint16_t effect = tick + dist * 5; - if (effect > 255) effect = 255; -# ifdef RGB_MATRIX_SOLID_REACTIVE_GRADIENT_MODE - hsv.h = scale16by8(g_rgb_timer, qadd8(rgb_matrix_config.speed, 8) >> 4); -# endif - hsv.v = qadd8(hsv.v, 255 - effect); - return hsv; -} - -bool per_key_rgb_reactive_multi_wide(effect_params_t *params) { - return per_key_rgb_effect_runner_reactive_splash(0, params, &solid_reactive_wide_math); -} - -static HSV SPLASH_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick) { - uint16_t effect = tick - dist; - if (effect > 255) effect = 255; - hsv.h += effect; - hsv.v = qadd8(hsv.v, 255 - effect); - return hsv; -} - -bool per_key_rgb_reactive_splash(effect_params_t *params) { - return per_key_rgb_effect_runner_reactive_splash(qsub8(g_last_hit_tracker.count, 1), params, &SPLASH_math); -} - -bool per_key_rgb(effect_params_t *params) { - switch (per_key_rgb_type) { - case PER_KEY_RGB_BREATHING: - return per_key_rgb_breahting(params); - - case PER_KEY_RGB_REATIVE_SIMPLE: - return per_key_rgb_reactive_simple(params); - - case PER_KEY_RGB_REATIVE_MULTI_WIDE: - return per_key_rgb_reactive_multi_wide(params); - - case PER_KEY_RGB_REATIVE_SPLASH: - return per_key_rgb_reactive_splash(params); - - default: - return per_key_rgb_solid(params); - } -} - -#endif diff --git a/keyboards/keychron/common/rgb/retail_demo.c b/keyboards/keychron/common/rgb/retail_demo.c deleted file mode 100644 index 03f5360706..0000000000 --- a/keyboards/keychron/common/rgb/retail_demo.c +++ /dev/null @@ -1,185 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include -#include "eeconfig_kb.h" -#include "retail_demo.h" -#include "eeconfig.h" -#include "matrix.h" -#include "quantum.h" -#ifdef LK_WIRELESS_ENABLE -# include "transport.h" -#endif - -#if defined(RETAIL_DEMO_ENABLE) && defined(KEYCHRON_RGB_ENABLE) && defined(EECONFIG_SIZE_CUSTOM_RGB) - -# ifndef RETAIL_DEMO_KEY_1 -# ifdef RGB_MATRIX_ENABLE -# define RETAIL_DEMO_KEY_1 RGB_HUI -# else -# define RETAIL_DEMO_KEY_1 KC_D -# endif -# endif - -# ifndef RETAIL_DEMO_KEY_2 -# ifdef RGB_MATRIX_ENABLE -# define RETAIL_DEMO_KEY_2 RGB_HUD -# else -# define RETAIL_DEMO_KEY_2 KC_E -# endif -# endif - -# ifndef EFFECT_DURATION -# define EFFECT_DURATION 10000 -# endif - -enum { - KEY_PRESS_FN = 0x01 << 0, - KEY_PRESS_D = 0x01 << 1, - KEY_PRESS_E = 0x01 << 2, - KEY_PRESS_RETAIL_DEMO = KEY_PRESS_FN | KEY_PRESS_D | KEY_PRESS_E, -}; - -uint8_t retail_demo_enable = 0; -static uint8_t retail_demo_combo = 0; -static uint32_t retail_demo_timer = 0; - -extern void rgb_save_retail_demo(void); - -bool process_record_retail_demo(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case MO(0)... MO(15): - if (record->event.pressed) - retail_demo_combo |= KEY_PRESS_FN; - else - retail_demo_combo &= ~KEY_PRESS_FN; - break; - - case RETAIL_DEMO_KEY_1: - if (record->event.pressed) { - retail_demo_combo |= KEY_PRESS_D; - if (retail_demo_combo == KEY_PRESS_RETAIL_DEMO) retail_demo_timer = timer_read32(); - } else { - retail_demo_combo &= ~KEY_PRESS_D; - retail_demo_timer = 0; - } - break; - - case RETAIL_DEMO_KEY_2: - if (record->event.pressed) { - retail_demo_combo |= KEY_PRESS_E; - if (retail_demo_combo == KEY_PRESS_RETAIL_DEMO) retail_demo_timer = timer_read32(); - } else { - retail_demo_combo &= ~KEY_PRESS_E; - retail_demo_timer = 0; - } - break; - } - - if (retail_demo_enable && keycode >= RGB_TOG && keycode <= RGB_SPD) return false; - - return true; -} - -void retail_demo_start(void) { - extern bool mixed_rgb_set_regions(uint8_t * data); - extern bool mixed_rgb_set_effect_list(uint8_t * data); - - uint8_t index = 0; - uint8_t this_count = 28; - uint8_t data[31] = {0}; - - // Set all LED to region 0 - while (index < RGB_MATRIX_LED_COUNT - 1) { - memset(data, 0, 31); - - if ((index + this_count) >= RGB_MATRIX_LED_COUNT) - this_count = RGB_MATRIX_LED_COUNT - 1 - index; - else - this_count = 28; - - data[0] = index; - data[1] = this_count; - mixed_rgb_set_regions(data); - - index += this_count; - } - - uint8_t effect_list[5] = {4, 7, 8, 11, 14}; - // Set effect list - for (uint8_t i = 0; i < 5; i++) { - data[0] = 0; // regsion - data[1] = i; // start - data[2] = 1; // count - data[3] = effect_list[i]; // effect - data[4] = 0; // hue - data[5] = 255; // sat - data[6] = 127; // speed; - data[7] = EFFECT_DURATION & 0xFF; - data[8] = (EFFECT_DURATION >> 8) & 0xFF; - data[9] = (EFFECT_DURATION >> 16) & 0xFF; - data[10] = (EFFECT_DURATION >> 24) & 0xFF; - - mixed_rgb_set_effect_list(data); - } - - HSV hsv = rgb_matrix_get_hsv(); - hsv.v = hsv.s = UINT8_MAX; - rgb_matrix_sethsv_noeeprom(hsv.h, hsv.s, hsv.v); - rgb_matrix_set_speed_noeeprom(RGB_MATRIX_DEFAULT_SPD); - rgb_matrix_mode_noeeprom(RGB_MATRIX_CUSTOM_MIXED_RGB); -} - -void retail_demo_stop(void) { - retail_demo_enable = false; - rgb_save_retail_demo(); - eeprom_read_block(&rgb_matrix_config, EECONFIG_RGB_MATRIX, sizeof(rgb_matrix_config)); -} - -static inline void retail_demo_timer_check(void) { - if (timer_elapsed32(retail_demo_timer) > 5000) { - retail_demo_timer = 0; - - if (retail_demo_combo == KEY_PRESS_RETAIL_DEMO) { - retail_demo_combo = 0; - retail_demo_enable = !retail_demo_enable; - - if (retail_demo_enable) { -# ifdef LK_WIRELESS_ENABLE - // Retail demo is allowed only in wireless mode - if (get_transport() != TRANSPORT_USB) { - retail_demo_enable = false; - return; - } -# endif - } else { - eeprom_read_block(&rgb_matrix_config, EECONFIG_RGB_MATRIX, sizeof(rgb_matrix_config)); - } - rgb_save_retail_demo(); - - if (!retail_demo_enable) { - extern void eeconfig_init_custom_rgb(void); - eeconfig_init_custom_rgb(); - } - } - } -} - -void retail_demo_task(void) { - if (retail_demo_timer) retail_demo_timer_check(); - if (retail_demo_enable && rgb_matrix_get_mode() != RGB_MATRIX_CUSTOM_MIXED_RGB) retail_demo_start(); -} -#endif diff --git a/keyboards/keychron/common/rgb/retail_demo.h b/keyboards/keychron/common/rgb/retail_demo.h deleted file mode 100644 index 2870a91b60..0000000000 --- a/keyboards/keychron/common/rgb/retail_demo.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once -#include "stdint.h" -#include "action.h" - -void retail_demo_start(void); -void retail_demo_stop(void); - -bool process_record_retail_demo(uint16_t keycode, keyrecord_t * record); -void retail_demo_task(void); diff --git a/keyboards/keychron/common/rgb/rgb.mk b/keyboards/keychron/common/rgb/rgb.mk deleted file mode 100644 index 93e0b7ad21..0000000000 --- a/keyboards/keychron/common/rgb/rgb.mk +++ /dev/null @@ -1,14 +0,0 @@ -OPT_DEFS += -DKEYCHRON_RGB_ENABLE -DRETAIL_DEMO_ENABLE - -RGB_MATRIX_CUSTOM_KB = yes -RGB_MATRIX_DIR = common/rgb - -SRC += \ - $(RGB_MATRIX_DIR)/keychron_rgb.c \ - $(RGB_MATRIX_DIR)/per_key_rgb.c \ - $(RGB_MATRIX_DIR)/mixed_rgb.c \ - $(RGB_MATRIX_DIR)/retail_demo.c - -VPATH += $(TOP_DIR)/keyboards/keychron/$(RGB_MATRIX_DIR) - - diff --git a/keyboards/keychron/common/rgb/rgb_matrix_kb.inc b/keyboards/keychron/common/rgb/rgb_matrix_kb.inc deleted file mode 100644 index 4a538f0cac..0000000000 --- a/keyboards/keychron/common/rgb/rgb_matrix_kb.inc +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "rgb_matrix_kb_config.h" - -#if defined(KEYCHRON_RGB_ENABLE) && defined(EECONFIG_SIZE_CUSTOM_RGB) -//extern bool MIXED_RGB(effect_params_t *params); - -RGB_MATRIX_EFFECT(PER_KEY_RGB) -RGB_MATRIX_EFFECT(MIXED_RGB) - -# ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS - -bool PER_KEY_RGB(effect_params_t *params) { - extern bool per_key_rgb(effect_params_t *params); - return per_key_rgb(params); -} - -bool MIXED_RGB(effect_params_t *params) { - extern bool mixed_rgb(effect_params_t *params); - return mixed_rgb(params); -} - -#endif - -#endif diff --git a/keyboards/keychron/common/rgb/rgb_matrix_kb_config.h b/keyboards/keychron/common/rgb/rgb_matrix_kb_config.h deleted file mode 100644 index 530a46b11c..0000000000 --- a/keyboards/keychron/common/rgb/rgb_matrix_kb_config.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once -#include "config.h" - -#ifndef EFFECT_LAYERS -#define EFFECT_LAYERS 2 -#endif - -#ifndef EFFECTS_PER_LAYER -#define EFFECTS_PER_LAYER 5 -#endif diff --git a/keyboards/keychron/common/snap_click/eeconfig_snap_click.h b/keyboards/keychron/common/snap_click/eeconfig_snap_click.h deleted file mode 100644 index d53879ca92..0000000000 --- a/keyboards/keychron/common/snap_click/eeconfig_snap_click.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#ifndef SNAP_CLICK_COUNT -# define SNAP_CLICK_COUNT 20 -#endif - -#define SIZE_OF_SNAP_CLICK_CONFIG_T 3 - -#define EECONFIG_SIZE_SNAP_CLICK (SNAP_CLICK_COUNT * SIZE_OF_SNAP_CLICK_CONFIG_T) - diff --git a/keyboards/keychron/common/snap_click/snap_click.c b/keyboards/keychron/common/snap_click/snap_click.c deleted file mode 100644 index b795df70b1..0000000000 --- a/keyboards/keychron/common/snap_click/snap_click.c +++ /dev/null @@ -1,201 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include -#include "eeconfig_kb.h" -#include "snap_click.h" -#include "raw_hid.h" -#include "eeconfig.h" -#include "matrix.h" -#include "quantum.h" -#include "keychron_raw_hid.h" - -#if defined(SNAP_CLICK_ENABLE) &&defined(EECONFIG_SIZE_SNAP_CLICK) - -enum { - SNAP_CLICK_TYPE_NONE = 0, - SNAP_CLICK_TYPE_REGULAR, - SNAP_CLICK_TYPE_LAST_INPUT, - SNAP_CLICK_TYPE_FIRST_KEY, - SNAP_CLICK_TYPE_SECOND_KEY, - SNAP_CLICK_TYPE_NEUTRAL, - SNAP_CLICK_TYPE_MAX, -}; - -#define SC_MASK_BOTH_KEYS_PRESSED 3 - -snap_click_config_t snap_click_pair[SNAP_CLICK_COUNT]; -snap_click_state_t snap_click_state[SNAP_CLICK_COUNT]; - -void snap_click_config_reset(void) { - memset(snap_click_pair, 0, sizeof(snap_click_pair)); - eeprom_update_block(snap_click_pair, (uint8_t *)(EECONFIG_BASE_SNAP_CLICK), sizeof(snap_click_pair)); -} - -void snap_click_init(void) { - eeprom_read_block(snap_click_pair, (uint8_t *)(EECONFIG_BASE_SNAP_CLICK), sizeof(snap_click_pair)); - memset(snap_click_state, 0, sizeof(snap_click_state)); -} - -bool process_record_snap_click(uint16_t keycode, keyrecord_t * record) -{ - for (uint8_t i=0; itype && (keycode == p->key[0] || keycode == p->key[1])) - { - snap_click_state_t *pState = &snap_click_state[i]; - uint8_t index = keycode == p->key[1]; // 0 or 1 of key pair - - if (record->event.pressed) { - uint8_t state = 0x01 << index; - - if (pState->state == 0) { - // Single key down - pState->state_keys = pState->last_single_key = state; - } else if ((state & pState->state_keys) == 0) { // TODO: do we need checking? - // Both keys are pressed - pState->state_keys = SC_MASK_BOTH_KEYS_PRESSED; - switch (p->type) { - case SNAP_CLICK_TYPE_REGULAR: - case SNAP_CLICK_TYPE_LAST_INPUT: - unregister_code(p->key[1-index]); - register_code(p->key[index]); - break; - case SNAP_CLICK_TYPE_FIRST_KEY: - unregister_code(p->key[1]); - register_code(p->key[0]); - break; - case SNAP_CLICK_TYPE_SECOND_KEY: - unregister_code(p->key[0]); - register_code(p->key[1]); - break; - case SNAP_CLICK_TYPE_NEUTRAL: - unregister_code(p->key[1-index]); - break; - } - return false; - } - } else { - if (pState->state_keys == SC_MASK_BOTH_KEYS_PRESSED) { - // Snap click active - uint8_t state = 0x01 << (1-index); - pState->state_keys = pState->last_single_key = state; - - switch (p->type) { - case SNAP_CLICK_TYPE_REGULAR: - unregister_code(p->key[index]); - break; - case SNAP_CLICK_TYPE_LAST_INPUT: - case SNAP_CLICK_TYPE_FIRST_KEY: - case SNAP_CLICK_TYPE_SECOND_KEY: - if (is_key_pressed(p->key[index])) { - unregister_code(p->key[index]); - } - if (!is_key_pressed(p->key[1-index])) { - register_code(p->key[1-index]); - } - break; - case SNAP_CLICK_TYPE_NEUTRAL: - register_code(p->key[1-index]); - break; - } - - return false; - } else { - pState->state = 0; - } - } - } - } - - return true; -} - -static bool snap_click_get_info(uint8_t *data) { - data[1] = SNAP_CLICK_COUNT; - - return true; -} - -static bool snap_click_get(uint8_t *data) { - uint8_t start = data[0]; - uint8_t count = data[1]; - - if (count > 9 || start + count > SNAP_CLICK_COUNT) return false; - memcpy(&data[1], &snap_click_pair[start], count * sizeof(snap_click_config_t)); - - return true; -} - -static bool snap_click_set(uint8_t *data) { - uint8_t start = data[0]; - uint8_t count = data[1]; - - if (count > 9 || start + count > SNAP_CLICK_COUNT) return false; - for (uint8_t i=0; i= SNAP_CLICK_TYPE_MAX) - return false; - - if (type != 0 && (keycode1 == 0 || keycode2 == 0)) - return false; - } - memcpy(&snap_click_pair[start], &data[2], count * sizeof(snap_click_config_t)); - - return true; -} - -static bool snap_click_save(uint8_t *data) { - eeprom_update_block(snap_click_pair, (uint8_t *)(EECONFIG_BASE_SNAP_CLICK), sizeof(snap_click_pair)); - - return true; -} - -void snap_click_rx(uint8_t *data, uint8_t length) { - uint8_t cmd = data[1]; - bool success = true; - - switch (cmd) { - case SNAP_CLICK_GET_INFO: - success = snap_click_get_info(&data[2]); - break; - - case SNAP_CLICK_GET: - success = snap_click_get(&data[2]); - break; - - case SNAP_CLICK_SET: - success = snap_click_set(&data[2]); - break; - - case SNAP_CLICK_SAVE: - success = snap_click_save(&data[2]); - break; - - default: - data[0] = 0xFF; - break; - } - - data[2] = success ? 0 : 1; -} -#endif diff --git a/keyboards/keychron/common/snap_click/snap_click.h b/keyboards/keychron/common/snap_click/snap_click.h deleted file mode 100644 index 6432116909..0000000000 --- a/keyboards/keychron/common/snap_click/snap_click.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -typedef struct __attribute__((__packed__)) { - uint8_t type; - uint8_t key[2]; -} snap_click_config_t; -// size = 3 bytes - -typedef union { - uint8_t state; - struct { - uint8_t state_key_1:1; - uint8_t state_key_2:1; - uint8_t last_single_key_1:1; - uint8_t last_single_key_2:1; - uint8_t reserved:4; - }; - struct { - uint8_t state_keys:2; - uint8_t last_single_key:2; - uint8_t reserved2:4; - }; -} snap_click_state_t; - -void snap_click_config_reset(void); -void snap_click_rx(uint8_t *data, uint8_t length); - diff --git a/keyboards/keychron/common/snap_click/snap_click.mk b/keyboards/keychron/common/snap_click/snap_click.mk deleted file mode 100644 index cf86fe732d..0000000000 --- a/keyboards/keychron/common/snap_click/snap_click.mk +++ /dev/null @@ -1,7 +0,0 @@ -SNAP_CLICK_DIR = common/snap_click -SRC += \ - $(SNAP_CLICK_DIR)/snap_click.c \ - -VPATH += $(TOP_DIR)/keyboards/keychron/$(SNAP_CLICK_DIR) - -OPT_DEFS += -DSNAP_CLICK_ENABLE diff --git a/keyboards/keychron/common/wireless/bat_level_animation.c b/keyboards/keychron/common/wireless/bat_level_animation.c deleted file mode 100644 index 43269d6836..0000000000 --- a/keyboards/keychron/common/wireless/bat_level_animation.c +++ /dev/null @@ -1,163 +0,0 @@ - -/* Copyright 2023~2025 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" -#include "wireless.h" -#include "indicator.h" -#include "lpm.h" -#if defined(PROTOCOL_CHIBIOS) -# include -#elif if defined(PROTOCOL_LUFA) -# include "lufa.h" -#endif -#include "eeprom.h" - -#if (defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE)) && defined(BAT_LEVEL_LED_LIST) - -#ifndef BAT_LEVEL_GROWING_INTERVAL -# define BAT_LEVEL_GROWING_INTERVAL 150 -#endif - -#ifndef BAT_LEVEL_ON_INTERVAL -# define BAT_LEVEL_ON_INTERVAL 3000 -#endif - -#ifdef LED_MATRIX_ENABLE -# define LED_DRIVER_IS_ENABLED led_matrix_is_enabled -#endif - -#ifdef RGB_MATRIX_ENABLE -# define LED_DRIVER_IS_ENABLED rgb_matrix_is_enabled -#endif - -enum { - BAT_LVL_ANI_NONE, - BAT_LVL_ANI_GROWING, - BAT_LVL_ANI_BLINK_OFF, - BAT_LVL_ANI_BLINK_ON, -}; - -static uint8_t animation_state = 0; -static uint32_t bat_lvl_ani_timer_buffer = 0; -static uint8_t bat_percentage; -static uint8_t cur_percentage; -static uint32_t time_interval; -#ifdef RGB_MATRIX_ENABLE -static uint8_t r, g, b; -#endif - -extern indicator_config_t indicator_config; -extern backlight_state_t original_backlight_state; - -void bat_level_animiation_start(uint8_t percentage) { - /* Turn on backlight mode for indicator */ - indicator_enable(); - - animation_state = BAT_LVL_ANI_GROWING; - bat_percentage = percentage; - bat_lvl_ani_timer_buffer = timer_read32(); - cur_percentage = 0; - time_interval = BAT_LEVEL_GROWING_INTERVAL; -#ifdef RGB_MATRIX_ENABLE - r = g = b = 255; -#endif -} - -void bat_level_animiation_stop(void) { - animation_state = BAT_LVL_ANI_NONE; -} - -bool bat_level_animiation_actived(void) { - return animation_state; -} - -void bat_level_animiation_indicate(void) { -#ifdef LED_MATRIX_ENABLE - uint8_t bat_lvl_led_list[10] = BAT_LEVEL_LED_LIST; - - for (uint8_t i = 0; i <= LED_MATRIX_LED_COUNT; i++) { - led_matrix_set_value(i, 0); - } - - if (animation_state == BAT_LVL_ANI_GROWING || animation_state == BAT_LVL_ANI_BLINK_ON) - for (uint8_t i = 0; i < cur_percentage / 10; i++) - led_matrix_set_value(bat_lvl_led_list[i], 255); -#endif - -#ifdef RGB_MATRIX_ENABLE - uint8_t bat_lvl_led_list[10] = BAT_LEVEL_LED_LIST; - - for (uint8_t i = 0; i <= RGB_MATRIX_LED_COUNT; i++) { - rgb_matrix_set_color(i, 0, 0, 0); - } - - if (animation_state == BAT_LVL_ANI_GROWING || animation_state == BAT_LVL_ANI_BLINK_ON) { - for (uint8_t i = 0; i < cur_percentage / 10; i++) { - rgb_matrix_set_color(bat_lvl_led_list[i], r, g, b); - } - } -#endif -} - -void bat_level_animiation_update(void) { - switch (animation_state) { - case BAT_LVL_ANI_GROWING: - if (cur_percentage < bat_percentage) - cur_percentage += 10; - else { - if (cur_percentage == 0) cur_percentage = 10; - animation_state = BAT_LVL_ANI_BLINK_OFF; - } - break; - - case BAT_LVL_ANI_BLINK_OFF: -#ifdef RGB_MATRIX_ENABLE - if (bat_percentage < 30) { - r = 255; - b = g = 0; - } else { - r = b = 0; - g = 255; - } -#endif - time_interval = BAT_LEVEL_ON_INTERVAL; - animation_state = BAT_LVL_ANI_BLINK_ON; - break; - - case BAT_LVL_ANI_BLINK_ON: - animation_state = BAT_LVL_ANI_NONE; - indicator_eeconfig_reload(); - if (indicator_config.value == 0 && !LED_DRIVER_IS_ENABLED()) { - indicator_disable(); - } - lpm_timer_reset(); - break; - - default: - break; - } - - bat_lvl_ani_timer_buffer = timer_read32(); -} - -void bat_level_animiation_task(void) { - if (animation_state && sync_timer_elapsed32(bat_lvl_ani_timer_buffer) > time_interval) { - bat_level_animiation_update(); - } -} - -#endif diff --git a/keyboards/keychron/common/wireless/bat_level_animation.h b/keyboards/keychron/common/wireless/bat_level_animation.h deleted file mode 100644 index d8e0e9f2ce..0000000000 --- a/keyboards/keychron/common/wireless/bat_level_animation.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright 2023~2025 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -void bat_level_animiation_start(uint8_t percentage); -void bat_level_animiation_stop(void); -bool bat_level_animiation_actived(void); -void bat_level_animiation_indicate(void); -void bat_level_animiation_task(void); diff --git a/keyboards/keychron/common/wireless/battery.c b/keyboards/keychron/common/wireless/battery.c deleted file mode 100644 index 60ab7722df..0000000000 --- a/keyboards/keychron/common/wireless/battery.c +++ /dev/null @@ -1,229 +0,0 @@ -/* Copyright 2022~2023 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" -#include "wireless.h" -#include "battery.h" -#include "transport.h" -#include "lkbt51.h" -#include "lpm.h" -#include "indicator.h" -#include "rtc_timer.h" -#include "analog.h" - -#define BATTERY_EMPTY_COUNT 10 -#define CRITICAL_LOW_COUNT 20 - -/* Battery voltage resistive voltage divider setting of MCU */ -#ifndef RVD_R1 -# define RVD_R1 10 // Upper side resitor value (uint: KΩ) -#endif -#ifndef RVD_R2 -# define RVD_R2 10 // Lower side resitor value (uint: KΩ) -#endif - -/* Battery voltage resistive voltage divider setting of Bluetooth */ -#ifndef LKBT51_RVD_R1 -# define LKBT51_RVD_R1 560 -#endif -#ifndef LKBT51_RVD_R2 -# define LKBT51_RVD_R2 499 -#endif - -#ifndef VOLTAGE_TRIM_LED_MATRIX -# define VOLTAGE_TRIM_LED_MATRIX 30 -#endif - -#ifndef VOLTAGE_TRIM_RGB_MATRIX -# define VOLTAGE_TRIM_RGB_MATRIX 60 -#endif - -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) -extern uint8_t g_pwm_buffer[DRIVER_COUNT][192]; -#endif - -static uint32_t bat_monitor_timer_buffer = 0; -static uint16_t voltage = FULL_VOLTAGE_VALUE; -static uint8_t bat_empty = 0; -static uint8_t critical_low = 0; -static uint8_t bat_state; -static uint8_t power_on_sample = 0; - -void battery_init(void) { - bat_state = BAT_NOT_CHARGING; -#if defined(BAT_CHARGING_PIN) -# if (BAT_CHARGING_LEVEL == 0) - palSetLineMode(BAT_CHARGING_PIN, PAL_MODE_INPUT_PULLUP); -# else - palSetLineMode(BAT_CHARGING_PIN, PAL_MODE_INPUT_PULLDOWN); -# endif -#endif - -#ifdef BAT_ADC_ENABLE_PIN - palSetLineMode(BAT_ADC_ENABLE_PIN, PAL_MODE_OUTPUT_PUSHPULL); - writePin(BAT_ADC_ENABLE_PIN, 1); -#endif -#ifdef BAT_ADC_PIN - palSetLineMode(BAT_ADC_PIN, PAL_MODE_INPUT_ANALOG); -#endif -} - -void battery_stop(void) { -#if (HAL_USE_ADC) -# ifdef BAT_ADC_ENABLE_PIN - writePin(BAT_ADC_ENABLE_PIN, 0); -# endif -# ifdef BAT_ADC_PIN - palSetLineMode(BAT_ADC_PIN, PAL_MODE_INPUT_ANALOG); - analog_stop(BAT_ADC_PIN); -# endif -#endif -} - -__attribute__((weak)) void battery_measure(void) { - lkbt51_read_state_reg(0x05, 0x02); -} - -/* Calculate the voltage */ -__attribute__((weak)) void battery_calculate_voltage(bool vol_src_bt, uint16_t value) { - uint16_t voltage; - - if (vol_src_bt) - voltage = ((uint32_t)value) * (LKBT51_RVD_R1 + LKBT51_RVD_R2) / LKBT51_RVD_R2; - else - voltage = (uint32_t)value * 3300 / 1024 * (RVD_R1 + RVD_R2) / RVD_R2; - -#ifdef LED_MATRIX_ENABLE - if (led_matrix_is_enabled()) { - uint32_t totalBuf = 0; - - for (uint8_t i = 0; i < DRIVER_COUNT; i++) - for (uint8_t j = 0; j < 192; j++) - totalBuf += g_pwm_buffer[i][j]; - /* We assumpt it is linear relationship*/ - voltage += (VOLTAGE_TRIM_LED_MATRIX * totalBuf / LED_MATRIX_LED_COUNT / 255); - } -#endif -#ifdef RGB_MATRIX_ENABLE - if (rgb_matrix_is_enabled()) { - uint32_t totalBuf = 0; - - for (uint8_t i = 0; i < DRIVER_COUNT; i++) - for (uint8_t j = 0; j < 192; j++) - totalBuf += g_pwm_buffer[i][j]; - /* We assumpt it is linear relationship*/ - uint32_t compensation = VOLTAGE_TRIM_RGB_MATRIX * totalBuf / RGB_MATRIX_LED_COUNT / 255 / 3; - - voltage += compensation; - } -#endif - - battery_set_voltage(voltage); -} - -void battery_set_voltage(uint16_t value) { - voltage = value; -} - -uint16_t battery_get_voltage(void) { - return voltage; -} - -uint8_t battery_get_percentage(void) { - if (voltage > FULL_VOLTAGE_VALUE) return 100; - - if (voltage > EMPTY_VOLTAGE_VALUE) { - return ((uint32_t)voltage - EMPTY_VOLTAGE_VALUE) * 80 / (FULL_VOLTAGE_VALUE - EMPTY_VOLTAGE_VALUE) + 20; - } - - if (voltage > SHUTDOWN_VOLTAGE_VALUE) { - return ((uint32_t)voltage - SHUTDOWN_VOLTAGE_VALUE) * 20 / (EMPTY_VOLTAGE_VALUE - SHUTDOWN_VOLTAGE_VALUE); - } else - return 0; -} - -bool battery_is_empty(void) { - return bat_empty > BATTERY_EMPTY_COUNT; -} - -bool battery_is_critical_low(void) { - return critical_low > CRITICAL_LOW_COUNT; -} - -void battery_check_empty(void) { - if (voltage < EMPTY_VOLTAGE_VALUE) { - if (bat_empty <= BATTERY_EMPTY_COUNT) { - if (++bat_empty > BATTERY_EMPTY_COUNT) { - indicator_battery_low_enable(true); - power_on_sample = VOLTAGE_POWER_ON_MEASURE_COUNT; - } - } - } -} - -void battery_check_critical_low(void) { - if (voltage < SHUTDOWN_VOLTAGE_VALUE) { - if (critical_low <= CRITICAL_LOW_COUNT) { - if (++critical_low > CRITICAL_LOW_COUNT) wireless_low_battery_shutdown(); - } - } else if (critical_low <= CRITICAL_LOW_COUNT) { - critical_low = 0; - } -} - -bool battery_power_on_sample(void) { - return power_on_sample < VOLTAGE_POWER_ON_MEASURE_COUNT; -} - -void battery_task(void) { - uint32_t t = rtc_timer_elapsed_ms(bat_monitor_timer_buffer); - if ((get_transport() & TRANSPORT_WIRELESS) && (wireless_get_state() == WT_CONNECTED || battery_power_on_sample())) { -#if defined(BAT_CHARGING_PIN) - if (usb_power_connected() && t > VOLTAGE_MEASURE_INTERVAL) { - if (readPin(BAT_CHARGING_PIN) == BAT_CHARGING_LEVEL) - lkbt51_update_bat_state(BAT_CHARGING); - else - lkbt51_update_bat_state(BAT_FULL_CHARGED); - } -#endif - - if ((battery_power_on_sample() -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) - && !indicator_is_enabled() -#endif - && t > BACKLIGHT_OFF_VOLTAGE_MEASURE_INTERVAL) || - t > VOLTAGE_MEASURE_INTERVAL) { - - battery_check_empty(); - battery_check_critical_low(); - - bat_monitor_timer_buffer = rtc_timer_read_ms(); - if (bat_monitor_timer_buffer > RTC_MAX_TIME) { - bat_monitor_timer_buffer = 0; - rtc_timer_clear(); - } - - battery_measure(); - if (power_on_sample < VOLTAGE_POWER_ON_MEASURE_COUNT) power_on_sample++; - } - } - - if ((bat_empty || critical_low) && usb_power_connected()) { - bat_empty = false; - critical_low = false; - indicator_battery_low_enable(false); - } -} diff --git a/keyboards/keychron/common/wireless/battery.h b/keyboards/keychron/common/wireless/battery.h deleted file mode 100644 index caa4d0db81..0000000000 --- a/keyboards/keychron/common/wireless/battery.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright 2022~2023 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -enum { - BAT_NOT_CHARGING = 0, - BAT_CHARGING, - BAT_FULL_CHARGED, -}; - -#ifndef FULL_VOLTAGE_VALUE -# define FULL_VOLTAGE_VALUE 4100 -#endif - -#ifndef EMPTY_VOLTAGE_VALUE -# define EMPTY_VOLTAGE_VALUE 3500 -#endif - -#ifndef SHUTDOWN_VOLTAGE_VALUE -# define SHUTDOWN_VOLTAGE_VALUE 3300 -#endif - -#ifndef VOLTAGE_MEASURE_INTERVAL -# define VOLTAGE_MEASURE_INTERVAL 3000 -#endif - -#ifndef VOLTAGE_POWER_ON_MEASURE_COUNT -# define VOLTAGE_POWER_ON_MEASURE_COUNT 15 -#endif - -#ifndef BACKLIGHT_OFF_VOLTAGE_MEASURE_INTERVAL -# define BACKLIGHT_OFF_VOLTAGE_MEASURE_INTERVAL 200 -#endif - -void battery_init(void); -void battery_stop(void); - -void battery_measure(void); -void battery_calculate_voltage(bool vol_src_bt, uint16_t value); -void battery_set_voltage(uint16_t value); -uint16_t battery_get_voltage(void); -uint8_t battery_get_percentage(void); -bool battery_is_empty(void); -bool battery_is_critical_low(void); -bool battery_power_on_sample(void); - -void battery_task(void); diff --git a/keyboards/keychron/common/wireless/eeconfig_wireless.h b/keyboards/keychron/common/wireless/eeconfig_wireless.h deleted file mode 100644 index 109e6d3c9a..0000000000 --- a/keyboards/keychron/common/wireless/eeconfig_wireless.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#define EECONFIG_SIZE_WIRELESS_CONFIG 4 //sizeof(backlit_disable_time) + sizeof (connected_idle_time) - diff --git a/keyboards/keychron/common/wireless/indicator.c b/keyboards/keychron/common/wireless/indicator.c deleted file mode 100644 index 6271466fe2..0000000000 --- a/keyboards/keychron/common/wireless/indicator.c +++ /dev/null @@ -1,773 +0,0 @@ -/* Copyright 2023~2025 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" -#include "indicator.h" -#include "transport.h" -#include "battery.h" -#include "eeconfig.h" -#include "wireless_config.h" -#include "config.h" -#include "rtc_timer.h" -#include "keychron_common.h" -#include "usb_main.h" -#ifdef FACTORY_TEST_ENABLE -# include "factory_test.h" -#endif -#include "lpm.h" -#include "keychron_task.h" -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) -# ifdef LED_MATRIX_ENABLE -# include "led_matrix.h" -# endif -# ifdef RGB_MATRIX_ENABLE -# include "rgb_matrix.h" -# endif -# include "bat_level_animation.h" -# include "eeprom.h" -#endif - -#define HOST_INDEX_MASK 0x0F -#define HOST_P2P4G 0x10 -#define LED_ON 0x80 - -// #define RGB_MATRIX_TIMEOUT_INFINITE 0xFFFFFFFF -#ifdef LED_MATRIX_ENABLE -# define DECIDE_TIME(t, duration) (duration == 0 ? LED_MATRIX_TIMEOUT_INFINITE : ((t > duration) ? t : duration)) -#endif -#ifdef RGB_MATRIX_ENABLE -# define DECIDE_TIME(t, duration) (duration == 0 ? RGB_MATRIX_TIMEOUT_INFINITE : ((t > duration) ? t : duration)) -#endif - -#define INDICATOR_SET(s) memcpy(&indicator_config, &s##_config, sizeof(indicator_config_t)); - -enum { - BACKLIGHT_OFF = 0x00, - BACKLIGHT_ON_CONNECTED = 0x01, - BACKLIGHT_ON_UNCONNECTED = 0x02, -}; - -extern uint16_t backlit_disable_time; - -static indicator_config_t pairing_config = INDICATOR_CONFIG_PARING; -static indicator_config_t connected_config = INDICATOR_CONFIG_CONNECTD; -static indicator_config_t reconnecting_config = INDICATOR_CONFIG_RECONNECTING; -static indicator_config_t disconnected_config = INDICATOR_CONFIG_DISCONNECTED; -indicator_config_t indicator_config; -static wt_state_t indicator_state; -static uint16_t next_period; -static indicator_type_t type; -static uint32_t indicator_timer_buffer = 0; - -#if defined(BAT_LOW_LED_PIN) || defined(SPACE_KEY_LOW_BAT_IND) -static uint32_t bat_low_backlit_indicator = 0; -static uint8_t bat_low_ind_state = 0; -static uint32_t rtc_time = 0; -#endif - -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) -backlight_state_t original_backlight_state; - -# ifdef BT_HOST_LED_MATRIX_LIST -static uint8_t bt_host_led_matrix_list[BT_HOST_DEVICES_COUNT] = BT_HOST_LED_MATRIX_LIST; -# endif - -# ifdef P2P4G_HOST_LED_MATRIX_LIST -static uint8_t p2p4g_host_led_matrix_list[P2P4G_HOST_DEVICES_COUNT] = P2P4G_HOST_LED_MATRIX_LIST; -# endif -#endif - -#ifdef BT_HOST_LED_PIN_LIST -static pin_t bt_led_pin_list[BT_HOST_DEVICES_COUNT] = BT_HOST_LED_PIN_LIST; -#endif - -#ifdef P24G_HOST_LED_PIN_LIST -static pin_t p24g_led_pin_list[P24G_HOST_DEVICES_COUNT] = P24G_HOST_LED_PIN_LIST; -#endif - -#ifdef LED_MATRIX_ENABLE -# define LED_DRIVER led_matrix_driver -# define LED_INDICATORS_KB led_matrix_indicators_bt -# define LED_INDICATORS_USER led_matrix_indicators_user -# define LED_NONE_INDICATORS_KB led_matrix_none_indicators_kb -# define SET_ALL_LED_OFF() led_matrix_set_value_all(0) -# define SET_LED_OFF(idx) led_matrix_set_value(idx, 0) -# define SET_LED_ON(idx) led_matrix_set_value(idx, 255) -# define SET_LED_BT(idx) led_matrix_set_value(idx, 255) -# define SET_LED_P24G(idx) led_matrix_set_value(idx, 255) -# define SET_LED_LOW_BAT(idx) led_matrix_set_value(idx, 255) -# define LED_DRIVER_IS_ENABLED led_matrix_is_enabled -# define LED_DRIVER_EECONFIG_RELOAD() \ - eeprom_read_block(&led_matrix_eeconfig, EECONFIG_LED_MATRIX, sizeof(led_matrix_eeconfig)); \ - if (!led_matrix_eeconfig.mode) { \ - eeconfig_update_led_matrix_default(); \ - } -# define LED_DRIVER_ALLOW_SHUTDOWN led_matrix_driver_allow_shutdown -# define LED_DRIVER_SHUTDOWN led_matrix_driver_shutdown -# define LED_DRIVER_EXIT_SHUTDOWN led_matrix_driver_exit_shutdown -# define LED_DRIVER_ENABLE_NOEEPROM led_matrix_enable_noeeprom -# define LED_DRIVER_DISABLE_NOEEPROM led_matrix_disable_noeeprom -# define LED_DRIVER_DISABLE_TIMEOUT_SET led_matrix_disable_timeout_set -# define LED_DRIVER_DISABLE_TIME_RESET led_matrix_disable_time_reset -# define LED_DRIVER_TIMEOUTED led_matrix_timeouted -#endif - -#ifdef RGB_MATRIX_ENABLE -# define LED_DRIVER rgb_matrix_driver -# define LED_INDICATORS_KB rgb_matrix_indicators_bt -# define LED_INDICATORS_USER rgb_matrix_indicators_user -# define LED_NONE_INDICATORS_KB rgb_matrix_none_indicators_kb -# define SET_ALL_LED_OFF() rgb_matrix_set_color_all(0, 0, 0) -# define SET_LED_OFF(idx) rgb_matrix_set_color(idx, 0, 0, 0) -# define SET_LED_ON(idx) rgb_matrix_set_color(idx, 255, 255, 255) -# define SET_LED_BT(idx) rgb_matrix_set_color(idx, 0, 0, 255) -# define SET_LED_P24G(idx) rgb_matrix_set_color(idx, 0, 255, 0) -# define SET_LED_LOW_BAT(idx) rgb_matrix_set_color(idx, 255, 0, 0) -# define LED_DRIVER_IS_ENABLED rgb_matrix_is_enabled -# define LED_DRIVER_EECONFIG_RELOAD() \ - eeprom_read_block(&rgb_matrix_config, EECONFIG_RGB_MATRIX, sizeof(rgb_matrix_config)); \ - if (!rgb_matrix_config.mode) { \ - eeconfig_update_rgb_matrix_default(); \ - } -# define LED_DRIVER_ALLOW_SHUTDOWN rgb_matrix_driver_allow_shutdown -# define LED_DRIVER_SHUTDOWN rgb_matrix_driver_shutdown -# define LED_DRIVER_EXIT_SHUTDOWN rgb_matrix_driver_exit_shutdown -# define LED_DRIVER_ENABLE_NOEEPROM rgb_matrix_enable_noeeprom -# define LED_DRIVER_DISABLE_NOEEPROM rgb_matrix_disable_noeeprom -# define LED_DRIVER_DISABLE_TIMEOUT_SET rgb_matrix_disable_timeout_set -# define LED_DRIVER_DISABLE_TIME_RESET rgb_matrix_disable_time_reset -# define LED_DRIVER_TIMEOUTED rgb_matrix_timeouted -#endif - -bool LED_INDICATORS_KB(void); - -void indicator_init(void) { - memset(&indicator_config, 0, sizeof(indicator_config)); - -#if defined(BT_HOST_LED_PIN_LIST) - for (uint8_t i = 0; i < BT_HOST_DEVICES_COUNT; i++) { - setPinOutput(bt_led_pin_list[i]); - writePin(bt_led_pin_list[i], !HOST_LED_PIN_ON_STATE); - } -#endif - -#ifdef P24G_HOST_LED_PIN_LIST - for (uint8_t i = 0; i < P24G_HOST_DEVICES_COUNT; i++) { - setPinOutput(p24g_led_pin_list[i]); - writePin(p24g_led_pin_list[i], !HOST_LED_PIN_ON_STATE); - } -#endif - -#ifdef COMMON_BT_LED_PIN - setPinOutput(COMMON_BT_LED_PIN); - writePin(COMMON_BT_LED_PIN, !COMMON_BT_LED_PIN_ON_STATE); -#endif - -#ifdef COMMON_P24G_LED_PIN - setPinOutput(COMMON_P24G_LED_PIN); - writePin(COMMON_P24G_LED_PIN, !COMMON_BT_LED_PIN_ON_STATE); -#endif - -#ifdef BAT_LOW_LED_PIN -# ifdef POWER_ON_LED_DURATION - if (timer_read32() > POWER_ON_LED_DURATION) -# endif - { - setPinOutput(BAT_LOW_LED_PIN); - writePin(BAT_LOW_LED_PIN, !BAT_LOW_LED_PIN_ON_STATE); - } -#endif -} - -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) -void indicator_enable(void) { - if (!LED_DRIVER_IS_ENABLED()) { - LED_DRIVER_ENABLE_NOEEPROM(); - } -} - -inline void indicator_disable(void) { - LED_DRIVER_DISABLE_NOEEPROM(); -} - -void indicator_reset_backlit_time(void) { - LED_DRIVER_DISABLE_TIME_RESET(); -} - -void indicator_set_backlit_timeout(uint32_t time) { - LED_DRIVER_DISABLE_TIMEOUT_SET(time); - indicator_reset_backlit_time(); -} - -bool indicator_is_enabled(void) { - return LED_DRIVER_IS_ENABLED(); -} - -void indicator_eeconfig_reload(void) { - LED_DRIVER_EECONFIG_RELOAD(); -} - -#endif - -bool indicator_is_running(void) { - return -#if defined(BAT_LOW_LED_PIN) || defined(SPACE_KEY_LOW_BAT_IND) - bat_low_ind_state || -#endif - !!indicator_config.value; -} - -static void indicator_timer_cb(void *arg) { - if (*(indicator_type_t *)arg != INDICATOR_LAST) type = *(indicator_type_t *)arg; - - bool time_up = false; - switch (type) { - case INDICATOR_NONE: - break; - case INDICATOR_OFF: - next_period = 0; - time_up = true; - break; - - case INDICATOR_ON: - if (indicator_config.value) { - if (indicator_config.elapsed == 0) { - indicator_config.value |= LED_ON; - - if (indicator_config.duration) { - indicator_config.elapsed += indicator_config.duration; - } - } else - time_up = true; - } - break; - - case INDICATOR_ON_OFF: - if (indicator_config.value) { - if (indicator_config.elapsed == 0) { - indicator_config.value |= LED_ON; - next_period = indicator_config.on_time; - } else { - indicator_config.value = indicator_config.value & 0x1F; - next_period = indicator_config.duration - indicator_config.on_time; - } - - if ((indicator_config.duration == 0 || indicator_config.elapsed <= indicator_config.duration) && next_period != 0) { - indicator_config.elapsed += next_period; - } else { - time_up = true; - } - } - break; - - case INDICATOR_BLINK: - if (indicator_config.value) { - if (indicator_config.value & LED_ON) { - indicator_config.value = indicator_config.value & 0x1F; - next_period = indicator_config.off_time; - } else { - indicator_config.value |= LED_ON; - next_period = indicator_config.on_time; - } - - if ((indicator_config.duration == 0 || indicator_config.elapsed <= indicator_config.duration) && next_period != 0) { - indicator_config.elapsed += next_period; - } else { - time_up = true; - } - } - break; - default: - time_up = true; - - next_period = 0; - break; - } - -#if defined(BT_HOST_LED_PIN_LIST) || defined(P24G_HOST_LED_PIN_LIST) || defined(COMMON_BT_LED_PIN) || defined(COMMON_P24G_LED_PIN) - if (indicator_config.value) { - uint8_t idx = (indicator_config.value & HOST_INDEX_MASK) - 1; -# if defined(BT_HOST_LED_PIN_LIST) || defined(P24G_HOST_LED_PIN_LIST) - pin_t *led_lin_list = NULL; -# endif -# if defined(COMMON_BT_LED_PIN) || defined(COMMON_P24G_LED_PIN) - pin_t led_pin = NO_PIN; -# endif - uint8_t led_count; -# if defined(P24G_HOST_LED_PIN_LIST) || defined(COMMON_P24G_LED_PIN) - if (indicator_config.value & HOST_P2P4G) { - if (idx < P24G_HOST_DEVICES_COUNT) { -# if defined(P24G_HOST_LED_PIN_LIST) - led_lin_list = p24g_led_pin_list; -# endif -# if defined(COMMON_P24G_LED_PIN) - led_pin = COMMON_P24G_LED_PIN; -# endif - } - led_count = P24G_HOST_DEVICES_COUNT; - } else -# endif - { - if (idx < BT_HOST_DEVICES_COUNT) { -# if defined(BT_HOST_LED_PIN_LIST) - led_lin_list = bt_led_pin_list; -# endif -# if defined(COMMON_BT_LED_PIN) - led_pin = COMMON_BT_LED_PIN; -# endif - } - led_count = BT_HOST_DEVICES_COUNT; - } - -#if defined(BT_HOST_LED_PIN_LIST) || defined(P24G_HOST_LED_PIN_LIST) - for (uint8_t i = 0; i < led_count; i++) { - if (i != idx) { - if (led_lin_list) writePin(led_lin_list[idx], !HOST_LED_PIN_ON_STATE); - } - } -#endif - - if ((indicator_config.value & LED_ON) && !time_up) { - if (led_lin_list) writePin(led_lin_list[idx], HOST_LED_PIN_ON_STATE); -# if defined(COMMON_BT_LED_PIN) || defined(COMMON_P24G_LED_PIN) - if (led_pin != NO_PIN) writePin(led_pin, COMMON_BT_LED_PIN_ON_STATE); -# endif - } else { - if (led_lin_list) writePin(led_lin_list[idx], !HOST_LED_PIN_ON_STATE); -# if defined(COMMON_BT_LED_PIN) || defined(COMMON_P24G_LED_PIN) - if (led_pin != NO_PIN) writePin(led_pin, !COMMON_BT_LED_PIN_ON_STATE); -# endif - } - - } -#endif - - if (time_up) { - /* Set indicator to off on timeup, avoid keeping light up until next update in raindrop effect */ - indicator_config.value = indicator_config.value & 0x1F; -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) - LED_INDICATORS_KB(); -#endif - - indicator_config.value = 0; - lpm_timer_reset(); - } - - if (indicator_config.value == 0) { -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) - indicator_eeconfig_reload(); - if (!LED_DRIVER_IS_ENABLED()) indicator_disable(); -#endif - } -} - -void indicator_set(wt_state_t state, uint8_t host_index) { - if (get_transport() == TRANSPORT_USB) return; - - static uint8_t pre_state = 0; - static uint8_t current_state = 0; - static uint8_t current_host = 0; - bool host_index_changed = false; - - if (host_index == 24) host_index = HOST_P2P4G | 0x01; - - if (current_host != host_index && state != WT_DISCONNECTED) { - host_index_changed = true; - current_host = host_index; - } - - if (current_state != state || host_index_changed || state == WT_RECONNECTING) { - // Some BT chips need to reset to enter sleep mode, ignore it. - if (current_state == WT_SUSPEND && state == WT_DISCONNECTED) return; - - pre_state = current_state; - current_state = state; - (void)pre_state; - } else { - return; - } - - indicator_timer_buffer = timer_read32(); - -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) - /* Turn on backlight mode for indicator */ - indicator_enable(); - indicator_reset_backlit_time(); -#endif - - switch (state) { - case WT_DISCONNECTED: -#if defined(BT_HOST_LED_PIN_LIST) - if ((host_index & HOST_P2P4G) != HOST_P2P4G) writePin(bt_led_pin_list[(host_index & HOST_INDEX_MASK) - 1], !HOST_LED_PIN_ON_STATE); -#endif -#if defined(P24G_HOST_LED_PIN_LIST) - if (host_index & HOST_P2P4G) writePin(p24g_led_pin_list[(host_index & HOST_INDEX_MASK) - 1], !HOST_LED_PIN_ON_STATE); -#endif -#ifdef COMMON_BT_LED_PIN - writePin(COMMON_BT_LED_PIN, !COMMON_BT_LED_PIN_ON_STATE); -#endif -#ifdef COMMON_P24G_LED_PIN - writePin(COMMON_P24G_LED_PIN, !COMMON_BT_LED_PIN_ON_STATE); -#endif - INDICATOR_SET(disconnected); - indicator_config.value = (indicator_config.type == INDICATOR_NONE) ? 0 : host_index; - indicator_timer_cb((void *)&indicator_config.type); -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) - if (battery_is_critical_low()) { - indicator_set_backlit_timeout(1000); - - } else { - if (pre_state == WT_CONNECTED) - indicator_set_backlit_timeout(1000); - else - /* Set timer so that user has chance to turn on the backlight when is off */ - indicator_set_backlit_timeout(DECIDE_TIME(DISCONNECTED_BACKLIGHT_DISABLE_TIMEOUT * 1000, indicator_config.duration)); - } -#endif - break; - - case WT_CONNECTED: - if (indicator_state != WT_CONNECTED) { - INDICATOR_SET(connected); - indicator_config.value = (indicator_config.type == INDICATOR_NONE) ? 0 : host_index; - indicator_timer_cb((void *)&indicator_config.type); - } -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) - indicator_set_backlit_timeout(DECIDE_TIME(backlit_disable_time * 1000, indicator_config.duration)); -#endif - break; - - case WT_PARING: - INDICATOR_SET(pairing); - indicator_config.value = (indicator_config.type == INDICATOR_NONE) ? 0 : LED_ON | host_index; - indicator_timer_cb((void *)&indicator_config.type); -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) - indicator_set_backlit_timeout(DECIDE_TIME(DISCONNECTED_BACKLIGHT_DISABLE_TIMEOUT * 1000, indicator_config.duration)); -#endif - break; - - case WT_RECONNECTING: - INDICATOR_SET(reconnecting); - indicator_config.value = (indicator_config.type == INDICATOR_NONE) ? 0 : LED_ON | host_index; - indicator_timer_cb((void *)&indicator_config.type); -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) - indicator_set_backlit_timeout(DECIDE_TIME(DISCONNECTED_BACKLIGHT_DISABLE_TIMEOUT * 1000, indicator_config.duration)); -#endif - break; - - case WT_SUSPEND: - INDICATOR_SET(disconnected); - indicator_config.value = (indicator_config.type == INDICATOR_NONE) ? 0 : host_index; - indicator_timer_cb((void *)&indicator_config.type); -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) -# ifdef FACTORY_TEST_ENABLE - if (factory_reset_indicating()) - indicator_set_backlit_timeout(3000); - else -# endif - { - indicator_set_backlit_timeout(1000); - } -#endif - -#if defined(BT_HOST_LED_PIN_LIST) - for (uint8_t i = 0; i < BT_HOST_DEVICES_COUNT; i++) writePin(bt_led_pin_list[i], !HOST_LED_PIN_ON_STATE); -#endif -#if defined(P24G_HOST_LED_PIN_LIST) - for (uint8_t i = 0; i < P24G_HOST_DEVICES_COUNT; i++) writePin(p24g_led_pin_list[i], !HOST_LED_PIN_ON_STATE); -#endif -#ifdef COMMON_BT_LED_PIN - writePin(COMMON_BT_LED_PIN, !COMMON_BT_LED_PIN_ON_STATE); -#endif -#ifdef COMMON_P24G_LED_PIN - writePin(COMMON_P24G_LED_PIN, !COMMON_BT_LED_PIN_ON_STATE); -#endif - - break; - - default: - break; - } - - indicator_state = state; -} - -void indicator_stop(void) { - indicator_config.value = 0; -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) - indicator_eeconfig_reload(); - - if (indicator_is_enabled()) { - indicator_enable(); - } else { - indicator_disable(); - } -#endif -} - -void indicator_battery_low_enable(bool enable) { -#if defined(BAT_LOW_LED_PIN) || defined(SPACE_KEY_LOW_BAT_IND) - if (enable) { - uint32_t t = rtc_timer_read_ms(); - - /* Check overflow */ - if (rtc_time > t) { - if (bat_low_ind_state == 0) - rtc_time = t; // Update rtc_time if indicating is not running - else { - rtc_time += t; - } - } - - /* Indicating at first time or after the interval */ - if ((rtc_time == 0 || t - rtc_time > LOW_BAT_LED_TRIG_INTERVAL) && bat_low_ind_state == 0) { - bat_low_backlit_indicator = enable ? timer_read32() : 0; - rtc_time = rtc_timer_read_ms(); - bat_low_ind_state = 1; -# if defined(SPACE_KEY_LOW_BAT_IND) - indicator_enable(); -# endif - } - } else { - rtc_time = 0; - bat_low_ind_state = 0; -# if defined(BAT_LOW_LED_PIN) - writePin(BAT_LOW_LED_PIN, !BAT_LOW_LED_PIN_ON_STATE); -# endif -# if defined(SPACE_KEY_LOW_BAT_IND) - indicator_eeconfig_reload(); - if (!LED_DRIVER_IS_ENABLED()) indicator_disable(); -# endif - } -#endif -} - -void indicator_battery_low(void) { -#if defined(BAT_LOW_LED_PIN) || defined(SPACE_KEY_LOW_BAT_IND) - if (bat_low_ind_state) { - if ((bat_low_ind_state & 0x0F) <= (LOW_BAT_LED_BLINK_TIMES) && - timer_elapsed32(bat_low_backlit_indicator) > (LOW_BAT_LED_BLINK_PERIOD)) { - if (bat_low_ind_state & 0x80) { - bat_low_ind_state &= 0x7F; - bat_low_ind_state++; -# if defined(BAT_LOW_LED_PIN) - writePin(BAT_LOW_LED_PIN, !BAT_LOW_LED_PIN_ON_STATE); -# endif - } else { - bat_low_ind_state |= 0x80; -# if defined(BAT_LOW_LED_PIN) - writePin(BAT_LOW_LED_PIN, BAT_LOW_LED_PIN_ON_STATE); -# endif - } - - bat_low_backlit_indicator = timer_read32(); - - /* Restore backligth state */ - if ((bat_low_ind_state & 0x0F) > (LOW_BAT_LED_BLINK_TIMES)) { -# if defined(BAT_LOW_LED_PIN) - writePin(BAT_LOW_LED_PIN, !BAT_LOW_LED_PIN_ON_STATE); -# endif -# if defined(SPACE_KEY_LOW_BAT_IND) -# if defined(NUM_LOCK_INDEX) || defined(CAPS_LOCK_INDEX) || defined(SCROLL_LOCK_INDEX) || defined(COMPOSE_LOCK_INDEX) || defined(KANA_LOCK_INDEX) - if (LED_DRIVER_ALLOW_SHUTDOWN()) -# endif - indicator_disable(); -# endif - } - } else if ((bat_low_ind_state & 0x0F) > (LOW_BAT_LED_BLINK_TIMES)) { -# if defined(BAT_LOW_LED_PIN) - writePin(BAT_LOW_LED_PIN, !BAT_LOW_LED_PIN_ON_STATE); -# endif - bat_low_ind_state = 0; - lpm_timer_reset(); - } - } -#endif -} - -void indicator_task(void) { -#if defined(BAT_LEVEL_LED_LIST) - bat_level_animiation_task(); -#endif - if (indicator_config.value && timer_elapsed32(indicator_timer_buffer) >= next_period) { - indicator_timer_cb((void *)&type); - indicator_timer_buffer = timer_read32(); - } - - indicator_battery_low(); -} - -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) -__attribute__((weak)) void os_state_indicate(void) { -# if defined(RGB_DISABLE_WHEN_USB_SUSPENDED) || defined(LED_DISABLE_WHEN_USB_SUSPENDED) - if (get_transport() == TRANSPORT_USB && USB_DRIVER.state == USB_SUSPENDED) return; -# endif - -# if defined(NUM_LOCK_INDEX) - if (host_keyboard_led_state().num_lock) { -# if defined(DIM_NUM_LOCK) - SET_LED_OFF(NUM_LOCK_INDEX); -# else - SET_LED_ON(NUM_LOCK_INDEX); -# endif - } -# endif -# if defined(CAPS_LOCK_INDEX) - if (host_keyboard_led_state().caps_lock) { -# if defined(DIM_CAPS_LOCK) - SET_LED_OFF(CAPS_LOCK_INDEX); -# else - SET_LED_ON(CAPS_LOCK_INDEX); -# endif - } -# endif -# if defined(SCROLL_LOCK_INDEX) - if (host_keyboard_led_state().scroll_lock) { - SET_LED_ON(SCROLL_LOCK_INDEX); - } -# endif -# if defined(COMPOSE_LOCK_INDEX) - if (host_keyboard_led_state().compose) { - SET_LED_ON(COMPOSE_LOCK_INDEX); - } -# endif -# if defined(KANA_LOCK_INDEX) - if (host_keyboard_led_state().kana) { - SET_LED_ON(KANA_LOCK_INDEX); - } -# endif -} - -bool LED_INDICATORS_KB(void) { - if (get_transport() & TRANSPORT_WIRELESS) { - /* Prevent backlight flash caused by key activities */ - if (battery_is_critical_low()) { - SET_ALL_LED_OFF(); - return true; - } - - if (battery_is_empty()) SET_ALL_LED_OFF(); -# if defined(LOW_BAT_IND_INDEX) - if (bat_low_ind_state && (bat_low_ind_state & 0x0F) <= LOW_BAT_LED_BLINK_TIMES) { - uint8_t idx_list[] = LOW_BAT_IND_INDEX; - for (uint8_t i = 0; i < sizeof(idx_list); i++) { - if (bat_low_ind_state & LED_ON) { - SET_LED_LOW_BAT(idx_list[i]); - } else { - SET_LED_OFF(idx_list[i]); - } - } - } -# endif - -# if (defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE)) && defined(BAT_LEVEL_LED_LIST) - if (bat_level_animiation_actived()) { - bat_level_animiation_indicate(); - } -# endif - static uint8_t last_host_index = 0xFF; - - if (indicator_config.value) { - uint8_t host_index = indicator_config.value & HOST_INDEX_MASK; - - if (indicator_config.highlight) { - SET_ALL_LED_OFF(); - } else if (last_host_index != host_index) { - if (indicator_config.value & HOST_P2P4G) - SET_LED_OFF(p2p4g_host_led_matrix_list[host_index - 1]); - else - SET_LED_OFF(bt_host_led_matrix_list[host_index - 1]); - last_host_index = host_index; - } - - if (indicator_config.value & LED_ON) { -# ifdef P2P4G_HOST_LED_MATRIX_LIST - if (indicator_config.value & HOST_P2P4G) - SET_LED_P24G(p2p4g_host_led_matrix_list[host_index - 1]); - else -# endif - SET_LED_BT(bt_host_led_matrix_list[host_index - 1]); - - } else { -# ifdef P2P4G_HOST_LED_MATRIX_LIST - if (indicator_config.value & HOST_P2P4G) - SET_LED_OFF(p2p4g_host_led_matrix_list[host_index - 1]); - else -# endif - SET_LED_OFF(bt_host_led_matrix_list[host_index - 1]); - } - } else - os_state_indicate(); - - } else - os_state_indicate(); - - if (!LED_INDICATORS_USER()) return true; - - return true; -} - -bool led_update_kb(led_t led_state) { - bool res = led_update_user(led_state); - if (res) { - led_update_ports(led_state); - - if (!LED_DRIVER_IS_ENABLED() || (LED_DRIVER_IS_ENABLED() && LED_DRIVER_TIMEOUTED())) { -# if defined(LED_MATRIX_DRIVER_SHUTDOWN_ENABLE) || defined(RGB_MATRIX_DRIVER_SHUTDOWN_ENABLE) - LED_DRIVER_EXIT_SHUTDOWN(); -# endif - SET_ALL_LED_OFF(); - os_state_indicate(); - LED_DRIVER.flush(); -# if defined(LED_MATRIX_DRIVER_SHUTDOWN_ENABLE) || defined(RGB_MATRIX_DRIVER_SHUTDOWN_ENABLE) - if (LED_DRIVER_ALLOW_SHUTDOWN()) LED_DRIVER_SHUTDOWN(); -# endif - } - } - - return res; -} - -void LED_NONE_INDICATORS_KB(void) { -# if defined(RGB_DISABLE_WHEN_USB_SUSPENDED) || defined(LED_DISABLE_WHEN_USB_SUSPENDED) - if (get_transport() == TRANSPORT_USB && USB_DRIVER.state == USB_SUSPENDED) return; -# endif - - os_state_indicate(); -} - -# if defined(LED_MATRIX_DRIVER_SHUTDOWN_ENABLE) || defined(RGB_MATRIX_DRIVER_SHUTDOWN_ENABLE) -bool LED_DRIVER_ALLOW_SHUTDOWN(void) { -# if defined(NUM_LOCK_INDEX) - if (host_keyboard_led_state().num_lock) return false; -# endif -# if defined(CAPS_LOCK_INDEX) && !defined(DIM_CAPS_LOCK) - if (host_keyboard_led_state().caps_lock) return false; -# endif -# if defined(SCROLL_LOCK_INDEX) - if (host_keyboard_led_state().scroll_lock) return false; -# endif -# if defined(COMPOSE_LOCK_INDEX) - if (host_keyboard_led_state().compose) return false; -# endif -# if defined(KANA_LOCK_INDEX) - if (host_keyboard_led_state().kana) return false; -# endif - return true; -} -# endif - -#endif diff --git a/keyboards/keychron/common/wireless/indicator.h b/keyboards/keychron/common/wireless/indicator.h deleted file mode 100644 index 6bbae137c4..0000000000 --- a/keyboards/keychron/common/wireless/indicator.h +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright 2023~2025 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "config.h" -#include "wireless.h" - -/* Indication of pairing */ -#ifndef INDICATOR_CONFIG_PARING -# define INDICATOR_CONFIG_PARING {INDICATOR_BLINK, 1000, 1000, 0, true, 0}; -#endif - -/* Indication on Connected */ -#ifndef INDICATOR_CONFIG_CONNECTD -# define INDICATOR_CONFIG_CONNECTD {INDICATOR_ON_OFF, 2000, 250, 2000, true, 0}; -#endif - -/* Reconnecting indication */ -#ifndef INDICATOR_CONFIG_RECONNECTING -# define INDICATOR_CONFIG_RECONNECTING {INDICATOR_BLINK, 100, 100, 600, true, 0}; -#endif - -/* Disconnected indication */ -#ifndef INDICATOR_CONFIG_DISCONNECTED -# define INDICATOR_CONFIG_DISCONNECTED {INDICATOR_NONE, 100, 100, 600, false, 0}; -#endif - -/* Uint: Second */ -#ifndef DISCONNECTED_BACKLIGHT_DISABLE_TIMEOUT -# define DISCONNECTED_BACKLIGHT_DISABLE_TIMEOUT 40 -#endif - -/* Uint: Second, the timer restarts on key activities. */ -#ifndef CONNECTED_BACKLIGHT_DISABLE_TIMEOUT -# define CONNECTED_BACKLIGHT_DISABLE_TIMEOUT 600 -#endif - -/* Uint: ms */ -#ifndef LOW_BAT_LED_BLINK_PERIOD -# define LOW_BAT_LED_BLINK_PERIOD 1000 -#endif - -#ifndef LOW_BAT_LED_BLINK_TIMES -# define LOW_BAT_LED_BLINK_TIMES 5 -#endif - -#ifndef LOW_BAT_LED_TRIG_INTERVAL -# define LOW_BAT_LED_TRIG_INTERVAL 30000 -#endif - -#if ((defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE)) && defined(LOW_BAT_IND_INDEX)) -# define SPACE_KEY_LOW_BAT_IND -#endif - -#if BT_HOST_MAX_COUNT > 6 -# pragma error("HOST_COUNT max value is 6") -#endif - -#ifndef P24G_HOST_DEVICES_COUNT -# define P24G_HOST_DEVICES_COUNT 1 -#endif - -typedef enum { - INDICATOR_NONE, - INDICATOR_OFF, - INDICATOR_ON, - INDICATOR_ON_OFF, - INDICATOR_BLINK, - INDICATOR_LAST, -} indicator_type_t; - -typedef struct { - indicator_type_t type; - uint32_t on_time; - uint32_t off_time; - uint32_t duration; - bool highlight; - uint8_t value; - uint32_t elapsed; -} indicator_config_t; - -typedef struct { - uint8_t value; - bool saved; -} backlight_state_t; - -void indicator_init(void); -void indicator_set(wt_state_t state, uint8_t host_index); -void indicator_set_backlit_timeout(uint32_t time); -void indicator_reset_backlit_time(void); -bool indicator_hook_key(uint16_t keycode); -void indicator_enable(void); -void indicator_disable(void); -void indicator_stop(void); -void indicator_eeconfig_reload(void); -bool indicator_is_enabled(void); -bool indicator_is_running(void); -void indicator_battery_low_enable(bool enable); - -void indicator_task(void); diff --git a/keyboards/keychron/common/wireless/keychron_wireless_common.c b/keyboards/keychron/common/wireless/keychron_wireless_common.c deleted file mode 100644 index 2fa6273fa6..0000000000 --- a/keyboards/keychron/common/wireless/keychron_wireless_common.c +++ /dev/null @@ -1,156 +0,0 @@ -/* Copyright 2022~2025 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H -#ifdef LK_WIRELESS_ENABLE -# include "lkbt51.h" -# include "wireless.h" -# include "indicator.h" -# include "transport.h" -# include "battery.h" -# include "bat_level_animation.h" -# include "lpm.h" -# include "keychron_wireless_common.h" -# include "keychron_task.h" -#endif -#include "keychron_common.h" - -bool firstDisconnect = true; - -static uint32_t pairing_key_timer; -static uint8_t host_idx = 0; -extern uint32_t connected_idle_time; - -bool process_record_keychron_wireless(uint16_t keycode, keyrecord_t *record) { - static uint8_t host_idx; - - switch (keycode) { - case BT_HST1 ... BT_HST3: - if (get_transport() == TRANSPORT_BLUETOOTH) { - if (record->event.pressed) { - host_idx = keycode - BT_HST1 + 1; - - pairing_key_timer = timer_read32(); - wireless_connect_ex(host_idx, 0); - } else { - host_idx = 0; - pairing_key_timer = 0; - } - } - break; - case P2P4G: - if (get_transport() == TRANSPORT_P2P4) { - if (record->event.pressed) { - host_idx = P24G_INDEX; - - pairing_key_timer = timer_read32(); - } else { - host_idx = 0; - pairing_key_timer = 0; - } - } - break; -#if (defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE)) && defined(BAT_LEVEL_LED_LIST) - case BAT_LVL: - if ((get_transport() & TRANSPORT_WIRELESS) && !usb_power_connected()) { - bat_level_animiation_start(battery_get_percentage()); - } - break; -#endif - - default: - break; - } - - return true; -} - -void lkbt51_param_init(void) { - /* Set bluetooth device name */ - lkbt51_set_local_name(PRODUCT); - wait_ms(3); - // clang-format off - /* Set bluetooth parameters */ - module_param_t param = {.event_mode = 0x02, - .connected_idle_timeout = connected_idle_time, - .pairing_timeout = 180, - .pairing_mode = 0, - .reconnect_timeout = 5, - .report_rate = 90, - .vendor_id_source = 1, - .verndor_id = 0x3434, // Must be 0x3434 - .product_id = PRODUCT_ID}; - // clang-format on - lkbt51_set_param(¶m); -} - -void wireless_enter_reset_kb(uint8_t reason) { - lkbt51_param_init(); -} - -void wireless_enter_disconnected_kb(uint8_t host_idx, uint8_t reason) { - /* CKBT51 bluetooth module boot time is slower, it enters disconnected after boot, - so we place initialization here. */ - if (firstDisconnect && timer_read32() < 1000) { - lkbt51_param_init(); - if (get_transport() == TRANSPORT_BLUETOOTH) wireless_connect(); - firstDisconnect = false; - } -} - -void keychron_wireless_common_task(void) { - if (pairing_key_timer) { - if (timer_elapsed32(pairing_key_timer) > 2000) { - pairing_key_timer = 0; - wireless_pairing_ex(host_idx, NULL); - } - } -} - -void wireless_pre_task(void) { - static uint8_t mode = 0; - static uint32_t time = 0; - - if (time == 0) { - if ((readPin(BT_MODE_SELECT_PIN) << 1 | readPin(P2P4_MODE_SELECT_PIN)) != mode) { - mode = readPin(BT_MODE_SELECT_PIN) << 1 | readPin(P2P4_MODE_SELECT_PIN); - time = timer_read32(); - } - } - - if ((time && timer_elapsed32(time) > 100) || get_transport() == TRANSPORT_NONE) { - if ((readPin(BT_MODE_SELECT_PIN) << 1 | readPin(P2P4_MODE_SELECT_PIN)) == mode) { - time = 0; - - switch (mode) { - case 0x01: - set_transport(TRANSPORT_BLUETOOTH); - break; - case 0x02: - set_transport(TRANSPORT_P2P4); - break; - case 0x03: - set_transport(TRANSPORT_USB); - break; - default: - break; - } - } else { - mode = readPin(BT_MODE_SELECT_PIN) << 1 | readPin(P2P4_MODE_SELECT_PIN); - time = timer_read32(); - } - } -} diff --git a/keyboards/keychron/common/wireless/keychron_wireless_common.h b/keyboards/keychron/common/wireless/keychron_wireless_common.h deleted file mode 100644 index eedfff8740..0000000000 --- a/keyboards/keychron/common/wireless/keychron_wireless_common.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright 2023 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "stdint.h" -#ifdef VIA_ENABLE -# include "via.h" -#endif -#include "quantum_keycodes.h" - -void lkbt51_param_init(void); - -bool process_record_keychron_wireless(uint16_t keycode, keyrecord_t *record); -void keychron_wireless_common_task(void); diff --git a/keyboards/keychron/common/wireless/lkbt51.c b/keyboards/keychron/common/wireless/lkbt51.c deleted file mode 100644 index df380102b3..0000000000 --- a/keyboards/keychron/common/wireless/lkbt51.c +++ /dev/null @@ -1,875 +0,0 @@ -/* Copyright 2023 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" -#include "lkbt51.h" -#include "wireless.h" -#include "wireless_event_type.h" -#include "battery.h" -#include "raw_hid.h" -#include "report_buffer.h" -#include "factory_test.h" - -extern void factory_test_send(uint8_t* payload, uint8_t length); - -#ifndef RAW_EPSIZE -# define RAW_EPSIZE 32 -#endif - -#ifndef SPI_SCK_PIN -# define SPI_SCK_PIN A5 -#endif -#ifndef SPI_MISO_PIN -# define SPI_MISO_PIN A6 -#endif -#ifndef SPI_MOSI_PIN -# define SPI_MOSI_PIN A7 -#endif - -#ifndef SPI_CLK_PAL_MODE -# define SPI_CLK_PAL_MODE 5 -#endif -#ifndef SPI_MISO_PAL_MODE -# define SPI_MISO_PAL_MODE 5 -#endif -#ifndef SPI_MOSI_PAL_MODE -# define SPI_MOSI_PAL_MODE 5 -#endif - -#ifndef LKBT51_INT_INPUT_PIN -# error "LKBT51_INT_INPUT_PIN is not defined" -#endif - -#ifndef LKBT51_TX_RETRY_COUNT -# define LKBT51_TX_RETRY_COUNT 3 -#endif - -// clang-format off -enum { - /* HID Report */ - LKBT51_CMD_SEND_KB = 0x11, - LKBT51_CMD_SEND_KB_NKRO = 0x12, - LKBT51_CMD_SEND_CONSUMER = 0x13, - LKBT51_CMD_SEND_SYSTEM = 0x14, - LKBT51_CMD_SEND_FN = 0x15, // Not used currently - LKBT51_CMD_SEND_MOUSE = 0x16, - LKBT51_CMD_SEND_BOOT_KB = 0x17, - /* Bluetooth connections */ - LKBT51_CMD_PAIRING = 0x21, - LKBT51_CMD_CONNECT = 0x22, - LKBT51_CMD_DISCONNECT = 0x23, - LKBT51_CMD_SWITCH_HOST = 0x24, - LKBT51_CMD_READ_STATE_REG = 0x25, - /* Battery */ - LKBT51_CMD_BATTERY_MANAGE = 0x31, - LKBT51_CMD_UPDATE_BAT_LVL = 0x32, - LKBT51_CMD_UPDATE_BAT_STATE = 0x33, - /* Set/get parameters */ - LKBT51_CMD_GET_MODULE_INFO = 0x40, - LKBT51_CMD_SET_CONFIG = 0x41, - LKBT51_CMD_GET_CONFIG = 0x42, - LKBT51_CMD_SET_BDA = 0x43, - LKBT51_CMD_GET_BDA = 0x44, - LKBT51_CMD_SET_NAME = 0x45, - LKBT51_CMD_GET_NAME = 0x46, - LKBT51_CMD_WRTE_CSTM_DATA = 0x49, - /* DFU */ - LKBT51_CMD_GET_DFU_VER = 0x60, - LKBT51_CMD_HAND_SHAKE_TOKEN = 0x61, - LKBT51_CMD_START_DFU = 0x62, - LKBT51_CMD_SEND_FW_DATA = 0x63, - LKBT51_CMD_VERIFY_CRC32 = 0x64, - LKBT51_CMD_SWITCH_FW = 0x65, - /* Factory test */ - LKBT51_CMD_FACTORY_RESET = 0x71, - LKBT51_CMD_IO_TEST = 0x72, - LKBT51_CMD_RADIO_TEST = 0x73, - /* Event */ - LKBT51_EVT_LKBT51_CMD_RECEIVED = 0xA1, - LKBT51_EVT_OTA_RSP = 0xA3, - LKBT51_CONNECTION_EVT_ACK = 0xA4, -}; - -enum { - LKBT51_EVT_ACK = 0xA1, - LKBT51_EVT_QUERY_RSP = 0xA2, - LKBT51_EVT_RESET = 0xB0, - LKBT51_EVT_LE_CONNECTION = 0xB1, - LKBT51_EVT_HOST_TYPE = 0xB2, - LKBT51_EVT_CONNECTION = 0xB3, - LKBT51_EVT_HID_EVENT = 0xB4, - LKBT51_EVT_BATTERY = 0xB5, -}; - -enum { - LKBT51_CONNECTED = 0x20, - LKBT51_DISCOVERABLE = 0x21, - LKBT51_RECONNECTING = 0x22, - LKBT51_DISCONNECTED = 0x23, - LKBT51_PINCODE_ENTRY = 0x24, - LKBT51_EXIT_PINCODE_ENTRY = 0x25, - LKBT51_SLEEP = 0x26 -}; - -enum { - ACK_SUCCESS = 0x00, - ACK_CHECKSUM_ERROR, - ACK_FIFO_HALF_WARNING, - ACK_FIFO_FULL_ERROR, -}; - -enum{ - LK_EVT_MSK_CONNECTION = 0x01 << 0, - LK_EVT_MSK_LED = 0x01 << 1, - LK_EVT_MSK_BATT = 0x01 << 2, - LK_EVT_MSK_RESET = 0x01 << 3, - LK_EVT_MSK_RPT_INTERVAL = 0x01 << 4, - LK_EVT_MSK_MD = 0x01 << 7, -}; - -// clang-format on - -static uint8_t payload[PACKET_MAX_LEN]; -static uint8_t reg_offset = 0xFF; -static uint8_t expect_len = 22; -static uint16_t connection_interval = 1; -static uint32_t wake_time; -static uint32_t factory_reset = 0; - -// clang-format off -wt_func_t wireless_transport = { - lkbt51_init, - lkbt51_connect, - lkbt51_become_discoverable, - lkbt51_disconnect, - lkbt51_send_keyboard, - lkbt51_send_nkro, - lkbt51_send_consumer, - lkbt51_send_system, - lkbt51_send_mouse, - lkbt51_update_bat_lvl, - lkbt51_task -}; -// clang-format on - -/* Init SPI */ -const SPIConfig spicfg = { - .circular = false, - .slave = false, - .data_cb = NULL, - .error_cb = NULL, - .ssport = PAL_PORT(BLUETOOTH_INT_OUTPUT_PIN), - .sspad = PAL_PAD(BLUETOOTH_INT_OUTPUT_PIN), - .cr1 = SPI_CR1_MSTR | SPI_CR1_BR_1 | SPI_CR1_BR_0, - .cr2 = 0U, -}; - -void lkbt51_init(bool wakeup_from_low_power_mode) { -#ifdef LKBT51_RESET_PIN - if (!wakeup_from_low_power_mode) { - setPinOutput(LKBT51_RESET_PIN); - writePinLow(LKBT51_RESET_PIN); - wait_ms(1); - writePinHigh(LKBT51_RESET_PIN); - } -#endif - -#if (HAL_USE_SPI == TRUE) - if (WT_DRIVER.state == SPI_UNINIT) { - setPinOutput(SPI_SCK_PIN); - writePinHigh(SPI_SCK_PIN); - - palSetLineMode(SPI_SCK_PIN, PAL_MODE_ALTERNATE(SPI_CLK_PAL_MODE)); - palSetLineMode(SPI_MISO_PIN, PAL_MODE_ALTERNATE(SPI_MISO_PAL_MODE)); - palSetLineMode(SPI_MOSI_PIN, PAL_MODE_ALTERNATE(SPI_MOSI_PAL_MODE)); - - if (wakeup_from_low_power_mode) { - spiInit(); - return; - } - - spiInit(); - } -#endif - - setPinOutput(BLUETOOTH_INT_OUTPUT_PIN); - writePinHigh(BLUETOOTH_INT_OUTPUT_PIN); - - setPinInputHigh(LKBT51_INT_INPUT_PIN); -} - -static inline void lkbt51_wake(void) { - if (timer_elapsed32(wake_time) > 3000) { - wake_time = timer_read32(); - - palWriteLine(BLUETOOTH_INT_OUTPUT_PIN, 0); - wait_ms(10); - palWriteLine(BLUETOOTH_INT_OUTPUT_PIN, 1); - wait_ms(300); - } -} - -void lkbt51_send_protocol_ver(uint16_t ver) { - uint8_t pkt[PACKET_MAX_LEN] = {0}; - memset(pkt, 0, PACKET_MAX_LEN); - - uint8_t i = 0; - - pkt[i++] = 0x84; - pkt[i++] = 0x7e; - pkt[i++] = 0x00; - pkt[i++] = 0x00; - pkt[i++] = 0xAA; - pkt[i++] = 0x54; - pkt[i++] = ver & 0xFF; - pkt[i++] = (ver >> 8) & 0xFF; - pkt[i++] = (uint8_t)(~0x54); - pkt[i++] = (uint8_t)(~0xAA); - -#if HAL_USE_SPI - expect_len = 10; - spiStart(&WT_DRIVER, &spicfg); - spiSelect(&WT_DRIVER); - spiSend(&WT_DRIVER, i, pkt); - spiUnselectI(&WT_DRIVER); - spiStop(&WT_DRIVER); -#endif -} - -void lkbt51_send_cmd(uint8_t* payload, uint8_t len, bool ack_enable, bool retry) { - static uint8_t sn = 0; - uint8_t i; - uint8_t pkt[PACKET_MAX_LEN] = {0}; - memset(pkt, 0, PACKET_MAX_LEN); - - if (!retry) ++sn; - if (sn == 0) ++sn; - - uint16_t checksum = 0; - for (i = 0; i < len; i++) - checksum += payload[i]; - - i = 0; - pkt[i++] = 0x84; - pkt[i++] = 0x7e; - pkt[i++] = 0x00; - pkt[i++] = 0x00; - pkt[i++] = 0xAA; - pkt[i++] = ack_enable ? 0x56 : 0x55; - pkt[i++] = len + 2; - pkt[i++] = ~(len + 2) & 0xFF; - pkt[i++] = sn; - - memcpy(pkt + i, payload, len); - i += len; - pkt[i++] = checksum & 0xFF; - pkt[i++] = (checksum >> 8) & 0xFF; -#if HAL_USE_SPI - if ((payload[0] & 0xF0) == 0x60) - expect_len = 64; - else - expect_len = 64; - - spiStart(&WT_DRIVER, &spicfg); - spiSelect(&WT_DRIVER); - spiSend(&WT_DRIVER, i, pkt); - spiUnselectI(&WT_DRIVER); - spiStop(&WT_DRIVER); -#endif -} - -void lkbt51_read(uint8_t* payload, uint8_t len) { - uint8_t i; - uint8_t pkt[PACKET_MAX_LEN] = {0}; - memset(pkt, 0, PACKET_MAX_LEN); - - i = 0; - pkt[i++] = 0x84; - pkt[i++] = 0x7f; - pkt[i++] = 0x00; - pkt[i++] = 0x80; - - i += len; - -#if HAL_USE_SPI - spiStart(&WT_DRIVER, &spicfg); - spiSelect(&WT_DRIVER); - spiExchange(&WT_DRIVER, i, pkt, payload); - spiUnselect(&WT_DRIVER); - spiStop(&WT_DRIVER); -#endif -} - -void lkbt51_send_keyboard(uint8_t* report) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_SEND_KB; - memcpy(payload + i, report, 8); - i += 8; - - lkbt51_send_cmd(payload, i, true, false); -} - -void lkbt51_send_nkro(uint8_t* report) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_SEND_KB_NKRO; - memcpy(payload + i, report, 20); // NKRO report lenght is limited to 20 bytes - i += 20; - - lkbt51_send_cmd(payload, i, true, false); -} - -void lkbt51_send_consumer(uint16_t report) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_SEND_CONSUMER; - payload[i++] = report & 0xFF; - payload[i++] = ((report) >> 8) & 0xFF; - i += 4; // QMK doesn't send multiple consumer reports, just skip 2nd and 3rd consumer reports - - lkbt51_send_cmd(payload, i, true, false); -} - -void lkbt51_send_system(uint16_t report) { - uint8_t hid_usage = report & 0xFF; - - if (hid_usage < 0x81 || hid_usage > 0x83) return; - - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_SEND_SYSTEM; - payload[i++] = 0x01 << (hid_usage - 0x81); - - lkbt51_send_cmd(payload, i, true, false); -} - -void lkbt51_send_mouse(uint8_t* report) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_SEND_MOUSE; // Cmd type - payload[i++] = report[1]; // Button - payload[i++] = report[2]; // X - payload[i++] = (report[2] & 0x80) ? 0xff : 0x00; // ckbt51 use 16bit report, set high byte - payload[i++] = report[3]; // Y - payload[i++] = (report[3] & 0x80) ? 0xff : 0x00; // ckbt51 use 16bit report, set high byte - payload[i++] = report[4]; // V wheel - payload[i++] = report[5]; // H wheel - - lkbt51_send_cmd(payload, i, false, false); -} - -/* Send ack to connection event, wireless module will retry 2 times if no ack received */ -void lkbt51_send_conn_evt_ack(void) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CONNECTION_EVT_ACK; - - lkbt51_send_cmd(payload, i, false, false); -} - -void lkbt51_become_discoverable(uint8_t host_idx, void* param) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - pairing_param_t default_pairing_param = {0, 0, PAIRING_MODE_LESC_OR_SSP, BT_MODE_CLASSIC, 0, NULL}; - - if (param == NULL) { - param = &default_pairing_param; - } - pairing_param_t* p = (pairing_param_t*)param; - - payload[i++] = LKBT51_CMD_PAIRING; // Cmd type - payload[i++] = host_idx; // Host Index - payload[i++] = p->timeout & 0xFF; // Timeout - payload[i++] = (p->timeout >> 8) & 0xFF; - payload[i++] = p->pairingMode; - payload[i++] = p->BRorLE; // BR/LE - payload[i++] = p->txPower; // LE TX POWER - if (p->leName) { - memcpy(&payload[i], p->leName, strlen(p->leName)); - i += strlen(p->leName); - } - - lkbt51_wake(); - lkbt51_send_cmd(payload, i, true, false); -} - -/* Timeout : 2 ~ 255 seconds */ -void lkbt51_connect(uint8_t hostIndex, uint16_t timeout) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_CONNECT; - payload[i++] = hostIndex; // Host index - payload[i++] = timeout & 0xFF; // Timeout - payload[i++] = (timeout >> 8) & 0xFF; - - lkbt51_wake(); - lkbt51_send_cmd(payload, i, true, false); -} - -void lkbt51_disconnect(void) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_DISCONNECT; - payload[i++] = 0; // Sleep mode - - if (WT_DRIVER.state != SPI_READY) - spiStart(&WT_DRIVER, &spicfg); - spiSelect(&SPID1); - wait_ms(30); - // spiUnselect(&SPID1); - wait_ms(70); - - lkbt51_send_cmd(payload, i, true, false); -} - -void lkbt51_switch_host(uint8_t hostIndex) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_SWITCH_HOST; - payload[i++] = hostIndex; - - lkbt51_send_cmd(payload, i, true, false); -} - -void lkbt51_read_state_reg(uint8_t reg, uint8_t len) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_READ_STATE_REG; - payload[i++] = reg_offset = reg; - payload[i++] = len; - - // TODO - lkbt51_send_cmd(payload, i, false, false); -} - -void lkbt51_update_bat_lvl(uint8_t bat_lvl) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_UPDATE_BAT_LVL; - payload[i++] = bat_lvl; - lkbt51_send_cmd(payload, i, false, false); -} - -void lkbt51_update_bat_state(uint8_t bat_state) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_UPDATE_BAT_STATE; - payload[i++] = bat_state; - lkbt51_send_cmd(payload, i, false, false); -} - -void lkbt51_get_info(module_info_t* info) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_GET_MODULE_INFO; - lkbt51_send_cmd(payload, i, false, false); -} - -void lkbt51_set_param(module_param_t* param) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_SET_CONFIG; - memcpy(payload + i, param, sizeof(module_param_t)); - i += sizeof(module_param_t); - - lkbt51_send_cmd(payload, i, false, false); -} - -void lkbt51_get_param(module_param_t* param) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_GET_CONFIG; - - lkbt51_send_cmd(payload, i, false, false); -} - -void lkbt51_set_local_name(const char* name) { - uint8_t i = 0; - uint8_t len = strlen(name); - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_SET_NAME; - memcpy(payload + i, name, len); - i += len; - lkbt51_send_cmd(payload, i, false, false); -} - -void lkbt51_get_local_name(void) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_GET_NAME; - - lkbt51_send_cmd(payload, i, false, false); -} - -void lkbt51_factory_reset(uint8_t p2p4g_clr_msk) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - - payload[i++] = LKBT51_CMD_FACTORY_RESET; - payload[i++] = p2p4g_clr_msk; - - lkbt51_wake(); - lkbt51_send_cmd(payload, i, false, false); - factory_reset = timer_read32(); -} - -void lkbt51_int_pin_test(bool enable) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - payload[i++] = LKBT51_CMD_IO_TEST; - payload[i++] = enable; - - lkbt51_send_cmd(payload, i, false, false); -} - -void lkbt51_radio_test(uint8_t channel) { - uint8_t i = 0; - memset(payload, 0, PACKET_MAX_LEN); - payload[i++] = LKBT51_CMD_RADIO_TEST; - payload[i++] = channel; - payload[i++] = 0; - - lkbt51_send_cmd(payload, i, false, false); -} - -bool lkbt51_read_customize_data(uint8_t* data, uint8_t len) { - uint8_t i; - uint8_t buf[20] = {0}; - - i = 0; - buf[i++] = 0x84; - buf[i++] = 0x7a; - buf[i++] = 0x00; - buf[i++] = 0x80; - -#if HAL_USE_SPI - spiStart(&WT_DRIVER, &spicfg); - spiSelect(&WT_DRIVER); - spiExchange(&WT_DRIVER, 20, buf, payload); - uint16_t state = buf[5] | (buf[6] << 8); - if (state == 0x9527) spiExchange(&WT_DRIVER, len, data, payload); - spiUnselect(&WT_DRIVER); - spiStop(&WT_DRIVER); -#endif - - return true; -} - -void lkbt51_write_customize_data(uint8_t* data, uint8_t len) { - uint8_t i; - uint8_t pkt[PACKET_MAX_LEN] = {0}; - - i = 0; - pkt[i++] = 0x84; - pkt[i++] = 0x7a; - pkt[i++] = 0x00; - pkt[i++] = 0x00; - -#if HAL_USE_SPI - spiStart(&WT_DRIVER, &spicfg); - spiSelect(&WT_DRIVER); - spiSend(&WT_DRIVER, i, pkt); - spiSend(&WT_DRIVER, len, data); - spiUnselectI(&WT_DRIVER); - spiStop(&WT_DRIVER); -#endif - - i = 0; - memset(payload, 0, PACKET_MAX_LEN); - payload[i++] = LKBT51_CMD_WRTE_CSTM_DATA; - - lkbt51_send_cmd(payload, i, false, false); -} -#ifdef RAW_ENABLE -void lkbt51_dfu_tx(uint8_t rsp, uint8_t* data, uint8_t len, uint8_t sn) { - uint16_t checksum = 0; - uint8_t buf[RAW_EPSIZE] = {0}; - uint8_t i = 0; - - buf[i++] = 0x03; - buf[i++] = 0xAA; - buf[i++] = 0x57; - buf[i++] = len; - buf[i++] = ~len; - buf[i++] = sn; - buf[i++] = rsp; - memcpy(&buf[i], data, len); - i += len; - - for (uint8_t k = 0; k < i; k++) - checksum += buf[i]; - - raw_hid_send(buf, RAW_EPSIZE); - - if (len > 25) { - i = 0; - memset(buf, 0, RAW_EPSIZE); - buf[i++] = 0x03; - memcpy(&buf[i], data + 25, len - 25); - i = i + len - 25; - raw_hid_send(buf, RAW_EPSIZE); - } -} -#endif -void lkbt51_dfu_rx(uint8_t* data, uint8_t length) { - if (data[0] == 0xAA && (data[1] == 0x55 || data[1] == 0x56) && data[2] == (~data[3] & 0xFF)) { - uint16_t checksum = 0; - uint8_t payload_len = data[2]; - - /* Check payload_len validity */ - if (payload_len > RAW_EPSIZE - PACKECT_HEADER_LEN) return; - - uint8_t* payload = &data[PACKECT_HEADER_LEN]; - - for (uint8_t i = 0; i < payload_len - 2; i++) { - checksum += payload[i]; - } - - /* Verify checksum */ - if ((checksum & 0xFF) != payload[payload_len - 2] || checksum >> 8 != payload[payload_len - 1]) return; - static uint8_t sn = 0; - - bool retry = true; - if (sn != data[4]) { - sn = data[4]; - retry = false; - } - - if ((payload[0] & 0xF0) == 0x60) { - lkbt51_wake(); - lkbt51_send_cmd(payload, payload_len - 2, data[1] == 0x56, retry); - } - } -} - -static void ack_handler(uint8_t* data, uint8_t len) { - switch (data[1]) { - case LKBT51_CMD_SEND_KB: - case LKBT51_CMD_SEND_KB_NKRO: - case LKBT51_CMD_SEND_CONSUMER: - case LKBT51_CMD_SEND_SYSTEM: - case LKBT51_CMD_SEND_MOUSE: - switch (data[2]) { - case ACK_SUCCESS: - report_buffer_set_retry(0); - report_buffer_set_inverval(connection_interval); - break; - case ACK_FIFO_HALF_WARNING: - report_buffer_set_retry(0); - report_buffer_set_inverval(connection_interval + 5); - break; - case ACK_FIFO_FULL_ERROR: - report_buffer_set_inverval(connection_interval + 10); - break; - } - break; - default: - break; - } -} - -static void query_rsp_handler(uint8_t* data, uint8_t len) { - if (data[2]) return; - - switch (data[1]) { - case LKBT51_CMD_IO_TEST: - factory_test_send(data, len); - break; - default: - break; - } -} - -static void lkbt51_event_handler(uint8_t evt_type, uint8_t* data, uint8_t len, uint8_t sn) { - wireless_event_t event = {0}; - - switch (evt_type) { - case LKBT51_EVT_ACK: - ack_handler(data, len); - break; - case LKBT51_EVT_RESET: - kc_printf("LKBT51_EVT_RESET\n"); - event.evt_type = EVT_RESET; - event.params.reason = data[0]; - break; - case LKBT51_EVT_LE_CONNECTION: - kc_printf("LKBT51_EVT_LE_CONNECTION\n"); - break; - case LKBT51_EVT_HOST_TYPE: - kc_printf("LKBT51_EVT_HOST_TYPE\n"); - break; - case LKBT51_EVT_HID_EVENT: - kc_printf("LKBT51_EVT_HID_EVENT\n"); - event.evt_type = EVT_HID_INDICATOR; - event.params.led = data[0]; - break; - case LKBT51_EVT_QUERY_RSP: - kc_printf("LKBT51_EVT_QUERY_RSP\n\r"); - query_rsp_handler(data, len); - break; - case LKBT51_EVT_OTA_RSP: -#ifdef RAW_ENABLE - kc_printf("LKBT51_EVT_OTA_RSP\n"); - lkbt51_dfu_tx(LKBT51_EVT_OTA_RSP, data, len, sn); -#endif - break; - default: - kc_printf("Unknown event!!!\n"); - break; - } - - if (event.evt_type) wireless_event_enqueue(event); -} - -void lkbt51_task(void) { -#define VALID_DATA_START_INDEX 4 -#define BUFFER_SIZE 64 - - static bool wait_for_new_pkt = true; - static uint8_t len = 0xff; - static uint8_t sn = 0; - - if (readPin(LKBT51_INT_INPUT_PIN) == 0) { - uint8_t buf[BUFFER_SIZE] = {0}; - lkbt51_read(buf, expect_len); - - uint8_t* pbuf = buf + VALID_DATA_START_INDEX; - - if (pbuf[0] == 0xAA && pbuf[1] == 0x54 && pbuf[4] == (uint8_t)(~0x54) && pbuf[5] == (uint8_t)(~0xAA)) { - uint16_t protol_ver = pbuf[3] << 8 | pbuf[2]; - kc_printf("protol_ver: %x\n\r", protol_ver); - (void)protol_ver; - } else if (pbuf[0] == 0xAA) { - wireless_event_t event = {0}; - uint8_t evt_mask = pbuf[1]; - - if (evt_mask & LK_EVT_MSK_RESET) { - event.evt_type = EVT_RESET; - event.params.reason = pbuf[2]; - wireless_event_enqueue(event); - } - - if (evt_mask & LK_EVT_MSK_CONNECTION) { - lkbt51_send_conn_evt_ack(); - switch (pbuf[2]) { - case LKBT51_CONNECTED: - event.evt_type = EVT_CONNECTED; - break; - case LKBT51_DISCOVERABLE: - event.evt_type = EVT_DISCOVERABLE; - break; - case LKBT51_RECONNECTING: - event.evt_type = EVT_RECONNECTING; - break; - case LKBT51_DISCONNECTED: - event.evt_type = EVT_DISCONNECTED; - if (factory_reset && timer_elapsed32(factory_reset) < 3000) { - factory_reset = 0; - event.data = 1; - } - break; - case LKBT51_PINCODE_ENTRY: - event.evt_type = EVT_BT_PINCODE_ENTRY; - break; - case LKBT51_EXIT_PINCODE_ENTRY: - event.evt_type = EVT_EXIT_BT_PINCODE_ENTRY; - break; - case LKBT51_SLEEP: - event.evt_type = EVT_SLEEP; - break; - } - event.params.hostIndex = pbuf[3]; - - wireless_event_enqueue(event); - } - - if (evt_mask & LK_EVT_MSK_LED) { - memset(&event, 0, sizeof(event)); - event.evt_type = EVT_HID_INDICATOR; - event.params.led = pbuf[4]; - wireless_event_enqueue(event); - } - - if (evt_mask & LK_EVT_MSK_RPT_INTERVAL) { - uint32_t interval; - if (pbuf[8] & 0x80) { - interval = (pbuf[8] & 0x7F) * 1250; - } else { - interval = (pbuf[8] & 0x7F) * 125; - } - - connection_interval = interval / 1000; - if (connection_interval > 7) connection_interval /= 3; - - memset(&event, 0, sizeof(event)); - event.evt_type = EVT_CONECTION_INTERVAL; - event.params.interval = connection_interval; - wireless_event_enqueue(event); - } - - if (evt_mask & LK_EVT_MSK_BATT) { - battery_calculate_voltage(true, pbuf[6] << 8 | pbuf[5]); - } - } - - pbuf = buf; - if (wait_for_new_pkt) { - for (uint8_t i = 10; i < BUFFER_SIZE - 5; i++) { - if (buf[i] == 0xAA && buf[i + 1] == 0x57 // Packet Head - && (~buf[i + 2] & 0xFF) == buf[i + 3]) { // Check wheather len is valid - len = buf[i + 2]; - sn = buf[i + 4]; - pbuf = &buf[i + 5]; - wait_for_new_pkt = false; - } - } - } - - if (!wait_for_new_pkt && BUFFER_SIZE - 5 >= len) { - wait_for_new_pkt = true; - - uint16_t checksum = 0; - for (int i = 0; i < len - 2; i++) { - checksum += pbuf[i]; - } - - if ((checksum & 0xff) == pbuf[len - 2] && ((checksum >> 8) & 0xff) == pbuf[len - 1]) { - lkbt51_event_handler(pbuf[0], pbuf + 1, len - 3, sn); - } else { - // TODO: Error handle - } - } - } -} diff --git a/keyboards/keychron/common/wireless/lkbt51.h b/keyboards/keychron/common/wireless/lkbt51.h deleted file mode 100644 index 529a7813bd..0000000000 --- a/keyboards/keychron/common/wireless/lkbt51.h +++ /dev/null @@ -1,131 +0,0 @@ -/* Copyright 2023 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "stdint.h" -#include "hal.h" - -#ifndef WT_DRIVER -# define WT_DRIVER SPID1 -#endif - -// Error checking -#if HAL_USE_SPI == FALSE -# error "Please enable SPI to use LKBT51" -#endif - -#if !STM32_SPI_USE_SPI1 && !STM32_SPI_USE_SPI2 && !STM32_SPI_USE_SPI3 -# error "WT driver activated but no SPI peripheral assigned" -#endif - -#define PACKECT_HEADER_LEN 5 -#define BDA_LEN 6 -#define PACKET_MAX_LEN 64 -#define P24G_INDEX 24 - -enum { - PAIRING_MODE_DEFAULT = 0x00, - PAIRING_MODE_JUST_WORK, - PAIRING_MODE_PASSKEY_ENTRY, - PAIRING_MODE_LESC_OR_SSP, - PAIRING_MODE_INVALID, -}; - -enum { - BT_MODE_DEFAUL, - BT_MODE_CLASSIC, - BT_MODE_LE, - BT_MODE_INVALID, -}; - -typedef struct { - uint8_t hostIndex; - uint16_t timeout; /* Pairing timeout, valid value range from 30 to 3600 seconds, 0 for default */ - uint8_t pairingMode; /* 0: default, 1: Just Works, 2: Passkey Entry */ - uint8_t BRorLE; /* Only available for dual mode module. Keep 0 for single mode module */ - uint8_t txPower; /* Only available for BLE module */ - const char* leName; /* Only available for BLE module */ -} pairing_param_t; - -typedef struct { - uint8_t type; - uint16_t full_votage; - uint16_t empty_voltage; - uint16_t shutdown_voltage; -} battery_param_t; - -typedef struct { - uint8_t model_name[11]; - uint8_t mode; - uint8_t bluetooth_version; - uint8_t firmware_version[11]; - uint8_t hardware_version[11]; - uint16_t cmd_set_verson; -} __attribute__((packed)) module_info_t; - -typedef struct { - uint8_t event_mode; /* Must be 0x02 */ - uint16_t connected_idle_timeout; - uint16_t pairing_timeout; /* Range: 30 ~ 3600 second, 0 for default */ - uint8_t pairing_mode; /* 0: default, 1: Just Works, 2: Passkey Entry */ - uint16_t reconnect_timeout; /* 0: default, 0xFF: Unlimited time, 2 ~ 254 seconds */ - uint8_t report_rate; /* 90 or 133 */ - uint8_t rsvd1; - uint8_t rsvd2; - uint8_t vendor_id_source; /* 0: From Bluetooth SIG, 1: From USB-IF */ - uint16_t verndor_id; /* No effect, the vendor ID is 0x3434 */ - uint16_t product_id; - /* Below parametes is only available for BLE module */ - uint16_t le_connection_interval_min; - uint16_t le_connection_interval_max; - uint16_t le_connection_interval_timeout; -} __attribute__((packed)) module_param_t; - -void lkbt51_init(bool wakeup_from_low_power_mode); -void lkbt51_send_protocol_ver(uint16_t ver); - -void lkbt51_send_cmd(uint8_t* payload, uint8_t len, bool ack_enable, bool retry); - -void lkbt51_send_keyboard(uint8_t* report); -void lkbt51_send_nkro(uint8_t* report); -void lkbt51_send_consumer(uint16_t report); -void lkbt51_send_system(uint16_t report); -void lkbt51_send_mouse(uint8_t* report); - -void lkbt51_become_discoverable(uint8_t host_idx, void* param); -void lkbt51_connect(uint8_t hostIndex, uint16_t timeout); -void lkbt51_disconnect(void); -void lkbt51_switch_host(uint8_t hostIndex); -void lkbt51_read_state_reg(uint8_t reg, uint8_t len); - -void lkbt51_update_bat_lvl(uint8_t bat_lvl); -void lkbt51_update_bat_state(uint8_t bat_state); - -void lkbt51_get_info(module_info_t* info); -void lkbt51_set_param(module_param_t* param); -void lkbt51_get_param(module_param_t* param); -void lkbt51_set_local_name(const char* name); -void lkbt51_get_local_name(void); - -void lkbt51_factory_reset(uint8_t p2p4g_clr_msk); -void lkbt51_int_pin_test(bool enable); -void lkbt51_dfu_rx(uint8_t* data, uint8_t length); -void lkbt51_radio_test(uint8_t channel); -void lkbt51_write_customize_data(uint8_t* data, uint8_t len); -bool lkbt51_read_customize_data(uint8_t* data, uint8_t len); - -void lkbt51_task(void); diff --git a/keyboards/keychron/common/wireless/lpm.c b/keyboards/keychron/common/wireless/lpm.c deleted file mode 100644 index c6f9a12c1c..0000000000 --- a/keyboards/keychron/common/wireless/lpm.c +++ /dev/null @@ -1,298 +0,0 @@ -/* Copyright 2022~2023 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/****************************************************************************** - * - * Filename: lpm.c - * - * Description: Contains low power mode implementation - * - ******************************************************************************/ - -#include "quantum.h" -#if defined(PROTOCOL_CHIBIOS) -# include -#endif -#include "debounce.h" -#include "wireless.h" -#include "indicator.h" -#include "lpm.h" -#include "transport.h" -#include "battery.h" -#include "report_buffer.h" -#include "keychron_common.h" - -extern matrix_row_t matrix[MATRIX_ROWS]; -extern wt_func_t wireless_transport; - -static uint32_t lpm_timer_buffer; -static bool lpm_time_up = false; -#ifndef OPTICAL_SWITCH -static matrix_row_t empty_matrix[MATRIX_ROWS] = {0}; -#endif - -pin_t pins_row[MATRIX_ROWS] = MATRIX_ROW_PINS; -pin_t pins_col[MATRIX_COLS] = MATRIX_COL_PINS; -; - -__attribute__((weak)) void select_all_cols(void) { - for (uint8_t i = 0; i < MATRIX_COLS; i++) { - if (pins_col[i] == NO_PIN) continue; - setPinOutput(pins_col[i]); - writePinLow(pins_col[i]); - } -} - -void lpm_init(void) { -#ifdef USB_POWER_SENSE_PIN -# if (USB_POWER_CONNECTED_LEVEL == 0) - setPinInputHigh(USB_POWER_SENSE_PIN); -# else - setPinInputLow(USB_POWER_SENSE_PIN); -# endif -#endif - lpm_timer_reset(); -} - -inline void lpm_timer_reset(void) { - lpm_time_up = false; - lpm_timer_buffer = timer_read32(); -} - -void lpm_timer_stop(void) { - lpm_time_up = false; - lpm_timer_buffer = 0; -} - -static inline bool lpm_any_matrix_action(void) { -#ifdef OPTICAL_SWITCH - bool any_key = false; - for (uint8_t i = 0; i < MATRIX_ROWS; i++) - if (matrix_get_row(i) != 0) { - any_key = true; - } - return any_key; -#else - return memcmp(matrix, empty_matrix, sizeof(empty_matrix)); -#endif -} - -/* Implement of entering low power mode and wakeup varies per mcu or platform */ -__attribute__((weak)) void enter_power_mode(pm_t mode) {} - -__attribute__((weak)) bool usb_power_connected(void) { -#ifdef USB_POWER_SENSE_PIN - return readPin(USB_POWER_SENSE_PIN) == USB_POWER_CONNECTED_LEVEL; -#else - return true; -#endif -} - -__attribute__((weak)) bool lpm_is_kb_idle(void) { - return true; -} - -__attribute__((weak)) bool lpm_set(pm_t mode) { - return false; -} - -bool pre_enter_low_power_mode(pm_t mode) { -#if defined(KEEP_USB_CONNECTION_IN_WIRELESS_MODE) - /* Don't enter low power mode if attached to the host */ - if (mode > PM_SLEEP && usb_power_connected()) return false; -#endif - - if (!lpm_set(mode)) return false; - -#if defined(KEEP_USB_CONNECTION_IN_WIRELESS_MODE) - /* Usb unit is actived and running, stop and disconnect first */ - usbStop(&USBD1); - usbDisconnectBus(&USBD1); - - /* Isolate USB to save power.*/ - // PWR->CR2 &= ~PWR_CR2_USV; /*PWR_CR2_USV is available on STM32L4x2xx and STM32L4x3xx devices only. */ -#endif - - palEnableLineEvent(LKBT51_INT_INPUT_PIN, PAL_EVENT_MODE_FALLING_EDGE); -#ifdef USB_POWER_SENSE_PIN - palEnableLineEvent(USB_POWER_SENSE_PIN, PAL_EVENT_MODE_BOTH_EDGES); -#endif -#ifdef P2P4_MODE_SELECT_PIN - palEnableLineEvent(P2P4_MODE_SELECT_PIN, PAL_EVENT_MODE_BOTH_EDGES); -#endif -#ifdef BT_MODE_SELECT_PIN - palEnableLineEvent(BT_MODE_SELECT_PIN, PAL_EVENT_MODE_BOTH_EDGES); -#endif - -#ifdef OPTICAL_SWITCH - - for (uint8_t x = 0; x < MATRIX_ROWS; x++) { - if (pins_row[x] != NO_PIN) { - writePinLow(pins_row[x]); - } - } - - for (uint8_t x = 0; x < MATRIX_COLS; x++) { - if (pins_col[x] != NO_PIN) { - setPinInputLow(pins_col[x]); - } - } -#else - - /* Enable key matrix wake up */ - for (uint8_t x = 0; x < MATRIX_ROWS; x++) { - if (pins_row[x] != NO_PIN) { - palEnableLineEvent(pins_row[x], PAL_EVENT_MODE_BOTH_EDGES); - } - } -#endif - select_all_cols(); - -#if (HAL_USE_SPI == TRUE) - palSetLineMode(SPI_SCK_PIN, PAL_MODE_INPUT_PULLDOWN); - palSetLineMode(SPI_MISO_PIN, PAL_MODE_INPUT_PULLDOWN); - palSetLineMode(SPI_MOSI_PIN, PAL_MODE_INPUT_PULLDOWN); -#endif - palSetLineMode(A12, PAL_MODE_INPUT_PULLDOWN); - palSetLineMode(A11, PAL_MODE_INPUT_PULLDOWN); - -#if defined(DIP_SWITCH_PINS) -# define NUMBER_OF_DIP_SWITCHES (sizeof(dip_switch_pad) / sizeof(pin_t)) - static pin_t dip_switch_pad[] = DIP_SWITCH_PINS; - - for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) { - setPinInputLow(dip_switch_pad[i]); - } -#endif - battery_stop(); - - return true; -} - -static inline void lpm_wakeup(void) { - palSetLineMode(A11, PAL_STM32_OTYPE_PUSHPULL | PAL_STM32_OSPEED_HIGHEST | PAL_STM32_PUPDR_FLOATING | PAL_MODE_ALTERNATE(10U)); - palSetLineMode(A12, PAL_STM32_OTYPE_PUSHPULL | PAL_STM32_OSPEED_HIGHEST | PAL_STM32_PUPDR_FLOATING | PAL_MODE_ALTERNATE(10U)); - -#if (HAL_USE_SPI == TRUE) - palSetLineMode(SPI_SCK_PIN, PAL_MODE_ALTERNATE(5)); - palSetLineMode(SPI_MISO_PIN, PAL_MODE_ALTERNATE(5)); - palSetLineMode(SPI_MOSI_PIN, PAL_MODE_ALTERNATE(5)); -#endif - - halInit(); - -#if defined(DIP_SWITCH_PINS) - /* Init dip switch as early as possible, and read it later. */ - dip_switch_init(); -#endif - -#ifdef ENCODER_ENABLE - encoder_cb_init(); -#endif - - if (wireless_transport.init) wireless_transport.init(true); - battery_init(); - - /* Disable all wake up pins */ - for (uint8_t x = 0; x < MATRIX_ROWS; x++) { - if (pins_row[x] != NO_PIN) { - palDisableLineEvent(pins_row[x]); - } - } - - palDisableLineEvent(LKBT51_INT_INPUT_PIN); -#ifdef P2P4_MODE_SELECT_PIN - palDisableLineEvent(P2P4_MODE_SELECT_PIN); -#endif -#ifdef BT_MODE_SELECT_PIN - palDisableLineEvent(BT_MODE_SELECT_PIN); -#endif -#ifdef USB_POWER_SENSE_PIN - palDisableLineEvent(USB_POWER_SENSE_PIN); - -# if defined(KEEP_USB_CONNECTION_IN_WIRELESS_MODE) - if (usb_power_connected()) { - usb_event_queue_init(); - init_usb_driver(&USB_DRIVER); - } -# endif - -#endif - - - /* Call debounce_free() to avoiding memory leak of debounce_counters as debounce_init() - invoked in matrix_init() alloc new memory to debounce_counters */ - debounce_free(); - matrix_init(); - -#ifdef ENABLE_RGB_MATRIX_PIXEL_RAIN - extern void PIXEL_RAIN_init(void); - PIXEL_RAIN_init(); -#endif - -#ifdef ENABLE_RGB_MATRIX_PIXEL_FLOW - extern void PIXEL_FLOW_init(void); - PIXEL_FLOW_init(); -#endif - -#ifdef ENABLE_RGB_MATRIX_PIXEL_FRACTAL - extern void PIXEL_FRACTAL_init(void); - PIXEL_FRACTAL_init(); -#endif - -#if defined(DIP_SWITCH_PINS) - dip_switch_read(true); -#endif -} - -void lpm_task(void) { - if (!lpm_time_up && sync_timer_elapsed32(lpm_timer_buffer) > RUN_MODE_PROCESS_TIME) { - lpm_time_up = true; - lpm_timer_buffer = 0; - } - - if (usb_power_connected() && USBD1.state == USB_STOP) { - usb_event_queue_init(); - init_usb_driver(&USB_DRIVER); - } - - if ((get_transport() == TRANSPORT_BLUETOOTH || get_transport() == TRANSPORT_P2P4) && lpm_time_up && !indicator_is_running() && lpm_is_kb_idle()) { -#if defined(LED_MATRIX_ENABLE) || defined(RGB_MATRIX_ENABLE) - if ( -# ifdef LED_MATRIX_ENABLE - !led_matrix_is_enabled() || - (led_matrix_is_enabled() && led_matrix_is_driver_shutdown()) -# endif -# ifdef RGB_MATRIX_ENABLE - !rgb_matrix_is_enabled() || - (rgb_matrix_is_enabled() && rgb_matrix_is_driver_shutdown()) -# endif - ) -#endif - { - if (!lpm_any_matrix_action()) { - if (pre_enter_low_power_mode(LOW_POWER_MODE)) { - enter_power_mode(LOW_POWER_MODE); - - lpm_wakeup(); - lpm_timer_reset(); - report_buffer_init(); - lpm_set(PM_RUN); - } - } - } - } -} diff --git a/keyboards/keychron/common/wireless/lpm.h b/keyboards/keychron/common/wireless/lpm.h deleted file mode 100644 index ca6fc5d450..0000000000 --- a/keyboards/keychron/common/wireless/lpm.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2023 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#ifndef RUN_MODE_PROCESS_TIME -# define RUN_MODE_PROCESS_TIME 1000 -#endif - -typedef enum { - PM_RUN, - PM_SLEEP, - PM_STOP, - PM_STANDBY, -} pm_t; - -void lpm_init(void); -void lpm_timer_reset(void); -void lpm_timer_stop(void); -bool usb_power_connected(void); -bool lpm_is_kb_idle(void); -void enter_power_mode(pm_t mode); -void lpm_task(void); diff --git a/keyboards/keychron/common/wireless/lpm_stm32f401.c b/keyboards/keychron/common/wireless/lpm_stm32f401.c deleted file mode 100644 index 7a7e59109b..0000000000 --- a/keyboards/keychron/common/wireless/lpm_stm32f401.c +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright 2023 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/****************************************************************************** - * - * Filename: lpm_stm32f401.c - * - * Description: Contains low power mode implementation - * - ******************************************************************************/ - -#include "quantum.h" -#include -#include "wireless.h" -#include "lpm.h" -#include "lpm_stm32f401.h" -#include "config.h" - -static pm_t power_mode = PM_RUN; - -bool lpm_set(pm_t mode) { - bool ret = true; - - switch (mode) { - case PM_SLEEP: - /* Wake source: Any interrupt or event */ - if (power_mode != PM_RUN) - ret = false; - else - SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; - break; - - case PM_STOP: - /* Wake source: Reset pin, all I/Os, BOR, PVD, PVM, RTC, LCD, IWDG, - COMPx, USARTx, LPUART1, I2Cx, LPTIMx, USB, SWPMI */ - if (power_mode != PM_RUN) - ret = false; - else { - SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; - PWR->CR |= -#if STOP_MODE_MAIN_REGULATOR_LOW_VOLTAGE - PWR_CR_MRLVDS | -#endif -#if STOP_MODE_LOW_POWER_REGULATOR_LOW_VOLTAG - PWR_CR_LPLVDS | -#endif -#if STOP_MODE_FLASH_POWER_DOWN - PWR_CR_FPDS | -#endif -#if STOP_MODE_LOW_POWER_DEEPSLEEP - PWR_CR_LPDS | -#endif - 0; - } - break; - - case PM_STANDBY: - if (power_mode != PM_RUN) - ret = false; - else { - SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; - } - break; - - default: - break; - } - power_mode = mode; - - return ret; -} - -void enter_power_mode(pm_t mode) { -#if STM32_HSE_ENABLED - /* Switch to HSI */ - RCC->CFGR = (RCC->CFGR & (~STM32_SW_MASK)) | STM32_SW_HSI; - while ((RCC->CFGR & RCC_CFGR_SWS) != (STM32_SW_HSI << 2)) - ; - - /* Set HSE off */ - RCC->CR &= ~RCC_CR_HSEON; - while ((RCC->CR & RCC_CR_HSERDY)) - ; - - /* To avoid power consumption of floating GPIO */ - palSetLineMode(H0, PAL_MODE_INPUT_PULLDOWN); - palSetLineMode(H1, PAL_MODE_INPUT_PULLDOWN); -#endif - - __WFI(); - - SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; - - writePinLow(BLUETOOTH_INT_OUTPUT_PIN); - stm32_clock_init(); - writePinHigh(BLUETOOTH_INT_OUTPUT_PIN); -} - -void usb_power_connect(void) {} - -void usb_power_disconnect(void) {} diff --git a/keyboards/keychron/common/wireless/lpm_stm32f401.h b/keyboards/keychron/common/wireless/lpm_stm32f401.h deleted file mode 100644 index 3b25c3d57c..0000000000 --- a/keyboards/keychron/common/wireless/lpm_stm32f401.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright 2023 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#ifndef STOP_MODE_MAIN_REGULATOR_LOW_VOLTAGE -# define STOP_MODE_MAIN_REGULATOR_LOW_VOLTAGE TRUE -#endif - -#ifndef STOP_MODE_LOW_POWER_REGULATOR_LOW_VOLTAG -# define STOP_MODE_LOW_POWER_REGULATOR_LOW_VOLTAG TRUE -#endif - -#ifndef STOP_MODE_FLASH_POWER_DOWN -# define STOP_MODE_FLASH_POWER_DOWN TRUE -#endif - -#ifndef STOP_MODE_LOW_POWER_DEEPSLEEP -# define STOP_MODE_LOW_POWER_DEEPSLEEP TRUE -#endif diff --git a/keyboards/keychron/common/wireless/report_buffer.c b/keyboards/keychron/common/wireless/report_buffer.c deleted file mode 100644 index 317ba8ce1d..0000000000 --- a/keyboards/keychron/common/wireless/report_buffer.c +++ /dev/null @@ -1,144 +0,0 @@ -/* Copyright 2023 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" -#include "report_buffer.h" -#include "wireless.h" -#include "lpm.h" - -/* The report buffer is mainly used to fix key press lost issue of macro - * when wireless module fifo isn't large enough. The maximun macro - * string length is determined by this queue size, and should be - * REPORT_BUFFER_QUEUE_SIZE devided by 2 since each character is implemented - * by sending a key pressing then a key releasing report. - * Please note that it cosume sizeof(report_buffer_t) * REPORT_BUFFER_QUEUE_SIZE - * bytes RAM, with default setting, used RAM size is - * sizeof(report_buffer_t) * 256 = 34* 256 = 8704 bytes - */ -#ifndef REPORT_BUFFER_QUEUE_SIZE -# define REPORT_BUFFER_QUEUE_SIZE 256 -#endif - -extern wt_func_t wireless_transport; - -/* report_interval value should be less than bluetooth connection interval because - * it takes some time for communicating between mcu and bluetooth module. Carefully - * set this value to feed the bt module so that we don't lost the key report nor lost - * the anchor point of bluetooth interval. The bluetooth connection interval varies - * if BLE is used, invoke report_buffer_set_inverval() to update the value - */ -uint8_t report_interval = DEFAULT_2P4G_REPORT_INVERVAL_MS; - -static uint32_t report_timer_buffer = 0; -uint32_t retry_time_buffer = 0; -report_buffer_t report_buffer_queue[REPORT_BUFFER_QUEUE_SIZE]; -uint16_t report_buffer_queue_head; -uint16_t report_buffer_queue_tail; -report_buffer_t kb_rpt; -uint8_t retry = 0; - -void report_buffer_task(void); - -void report_buffer_init(void) { - // Initialise the report queue - memset(&report_buffer_queue, 0, sizeof(report_buffer_queue)); - report_buffer_queue_head = 0; - report_buffer_queue_tail = 0; - retry = 0; - report_timer_buffer = timer_read32(); -} - -bool report_buffer_enqueue(report_buffer_t *report) { - uint16_t next = (report_buffer_queue_head + 1) % REPORT_BUFFER_QUEUE_SIZE; - if (next == report_buffer_queue_tail) { - return false; - } - - report_buffer_queue[report_buffer_queue_head] = *report; - report_buffer_queue_head = next; - return true; -} - -inline bool report_buffer_dequeue(report_buffer_t *report) { - if (report_buffer_queue_head == report_buffer_queue_tail) { - return false; - } - - *report = report_buffer_queue[report_buffer_queue_tail]; - report_buffer_queue_tail = (report_buffer_queue_tail + 1) % REPORT_BUFFER_QUEUE_SIZE; - return true; -} - -bool report_buffer_is_empty() { - return report_buffer_queue_head == report_buffer_queue_tail; -} - -void report_buffer_update_timer(void) { - report_timer_buffer = timer_read32(); -} - -bool report_buffer_next_inverval(void) { - return timer_elapsed32(report_timer_buffer) > report_interval; -} - -void report_buffer_set_inverval(uint8_t interval) { - // OG_TRACE("report_buffer_set_inverval: %d\n\r", interval); - report_interval = interval; -} - -uint8_t report_buffer_get_retry(void) { - return retry; -} - -void report_buffer_set_retry(uint8_t times) { - retry = times; -} - -void report_buffer_task(void) { - if (wireless_get_state() == WT_CONNECTED && (!report_buffer_is_empty() || retry) && report_buffer_next_inverval()) { - bool pending_data = false; - - if (!retry) { - if (report_buffer_dequeue(&kb_rpt) && kb_rpt.type != REPORT_TYPE_NONE) { - if (timer_read32() > 2) { - pending_data = true; - retry = RETPORT_RETRY_COUNT; - retry_time_buffer = timer_read32(); - } - } - } else { - if (timer_elapsed32(retry_time_buffer) > 2) { - pending_data = true; - --retry; - retry_time_buffer = timer_read32(); - } - } - - if (pending_data) { -#if defined(NKRO_ENABLE) && defined(WIRELESS_NKRO_ENABLE) - if (kb_rpt.type == REPORT_TYPE_NKRO && wireless_transport.send_nkro) { - wireless_transport.send_nkro(&kb_rpt.nkro.mods); - } else if (kb_rpt.type == REPORT_TYPE_KB && wireless_transport.send_keyboard) - wireless_transport.send_keyboard(&kb_rpt.keyboard.mods); -#else - if (kb_rpt.type == REPORT_TYPE_KB && wireless_transport.send_keyboard) wireless_transport.send_keyboard(&kb_rpt.keyboard.mods); -#endif - if (kb_rpt.type == REPORT_TYPE_CONSUMER && wireless_transport.send_consumer) wireless_transport.send_consumer(kb_rpt.consumer); - report_timer_buffer = timer_read32(); - lpm_timer_reset(); - } - } -} diff --git a/keyboards/keychron/common/wireless/report_buffer.h b/keyboards/keychron/common/wireless/report_buffer.h deleted file mode 100644 index 4d03d291e7..0000000000 --- a/keyboards/keychron/common/wireless/report_buffer.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright 2022~2023 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "report.h" - -/* Default report interval value */ -#ifndef DEFAULT_BLE_REPORT_INVERVAL_MS -# define DEFAULT_BLE_REPORT_INVERVAL_MS 3 -#endif - -/* Default report interval value */ -#ifndef DEFAULT_2P4G_REPORT_INVERVAL_MS -# define DEFAULT_2P4G_REPORT_INVERVAL_MS 1 -#endif - -/* Default report interval value */ -#ifndef RETPORT_RETRY_COUNT -# define RETPORT_RETRY_COUNT 30 -#endif - -enum { - REPORT_TYPE_NONE, - REPORT_TYPE_KB, - REPORT_TYPE_NKRO, - REPORT_TYPE_CONSUMER, -}; - -typedef struct { - uint8_t type; - union { - report_keyboard_t keyboard; - report_nkro_t nkro; - uint16_t consumer; - }; -} report_buffer_t; - -void report_buffer_init(void); -bool report_buffer_enqueue(report_buffer_t *report); -bool report_buffer_dequeue(report_buffer_t *report); -bool report_buffer_is_empty(void); -void report_buffer_update_timer(void); -bool report_buffer_next_inverval(void); -void report_buffer_set_inverval(uint8_t interval); -uint8_t report_buffer_get_retry(void); -void report_buffer_set_retry(uint8_t times); -void report_buffer_task(void); diff --git a/keyboards/keychron/common/wireless/rtc_timer.c b/keyboards/keychron/common/wireless/rtc_timer.c deleted file mode 100644 index 9a35b9bddb..0000000000 --- a/keyboards/keychron/common/wireless/rtc_timer.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright 2023 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "hal.h" - -#if (HAL_USE_RTC) - -# include "rtc_timer.h" - -void rtc_timer_init(void) { - rtc_timer_clear(); -} - -void rtc_timer_clear(void) { - RTCDateTime tm = {0, 0, 0, 0, 0, 0}; - rtcSetTime(&RTCD1, &tm); -} - -uint32_t rtc_timer_read_ms(void) { - RTCDateTime tm; - rtcGetTime(&RTCD1, &tm); - - return tm.millisecond; -} - -uint32_t rtc_timer_elapsed_ms(uint32_t last) { - return TIMER_DIFF_32(rtc_timer_read_ms(), last); -} - -#endif diff --git a/keyboards/keychron/common/wireless/rtc_timer.h b/keyboards/keychron/common/wireless/rtc_timer.h deleted file mode 100644 index cf6dfb5720..0000000000 --- a/keyboards/keychron/common/wireless/rtc_timer.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright 2023 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "timer.h" -#include - -#define RTC_MAX_TIME (24 * 3600 * 1000) // Set to 1 day - -#ifdef __cplusplus -extern "C" { -#endif - -void rtc_timer_init(void); -void rtc_timer_clear(void); -uint32_t rtc_timer_read_ms(void); -uint32_t rtc_timer_elapsed_ms(uint32_t last); - -#ifdef __cplusplus -} -#endif diff --git a/keyboards/keychron/common/wireless/transport.c b/keyboards/keychron/common/wireless/transport.c deleted file mode 100644 index d452d1d6c8..0000000000 --- a/keyboards/keychron/common/wireless/transport.c +++ /dev/null @@ -1,259 +0,0 @@ -/* Copyright 2022~2023 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" -#include "wireless.h" -#include "indicator.h" -#include "lpm.h" -#include "mousekey.h" -#if defined(PROTOCOL_CHIBIOS) -# include -#endif -#include "transport.h" -#include "lkbt51.h" - -#ifndef REINIT_LED_DRIVER -# define REINIT_LED_DRIVER 0 -#endif - -#if defined(PROTOCOL_CHIBIOS) -extern host_driver_t chibios_driver; -#endif -extern host_driver_t wireless_driver; -extern keymap_config_t keymap_config; -extern wt_func_t wireless_transport; - -static transport_t transport = TRANSPORT_NONE; - -#ifdef NKRO_ENABLE -nkro_t nkro = {false, false}; -#endif - -static void transport_changed(transport_t new_transport); - -__attribute__((weak)) void bt_transport_enable(bool enable) { - if (enable) { - // if (host_get_driver() != &wireless_driver) { - host_set_driver(&wireless_driver); - - /* Disconnect and reconnect to sync the wireless state - * TODO: query wireless state to sync - */ - wireless_disconnect(); - - uint32_t t = timer_read32(); - while (timer_elapsed32(t) < 50) { - wireless_transport.task(); - } - // wireless_connect(); - wireless_connect_ex(30, 0); - // TODO: Clear USB report - //} - } else { - indicator_stop(); - - if (wireless_get_state() == WT_CONNECTED && transport == TRANSPORT_BLUETOOTH) { - report_keyboard_t empty_report = {0}; - wireless_driver.send_keyboard(&empty_report); - } - } -} - -__attribute__((weak)) void p24g_transport_enable(bool enable) { - if (enable) { - // if (host_get_driver() != &wireless_driver) { - host_set_driver(&wireless_driver); - - /* Disconnect and reconnect to sync the wireless state - * TODO: query bluetooth state to sync - */ - wireless_disconnect(); - - uint32_t t = timer_read32(); - while (timer_elapsed32(t) < 50) { - wireless_transport.task(); - } - wireless_connect_ex(P24G_INDEX, 0); - // wireless_connect(); - // TODO: Clear USB report - //} - } else { - indicator_stop(); - - if (wireless_get_state() == WT_CONNECTED && transport == TRANSPORT_P2P4) { - report_keyboard_t empty_report = {0}; - wireless_driver.send_keyboard(&empty_report); - } - } -} - -__attribute__((weak)) void usb_power_connect(void) {} -__attribute__((weak)) void usb_power_disconnect(void) {} - -__attribute__((weak)) void usb_transport_enable(bool enable) { - if (enable) { - if (host_get_driver() != &chibios_driver) { -#if !defined(KEEP_USB_CONNECTION_IN_WIRELESS_MODE) - usb_power_connect(); - usb_start(&USBD1); -#endif - host_set_driver(&chibios_driver); - } - } else { - if (USB_DRIVER.state == USB_ACTIVE) { - report_keyboard_t empty_report = {0}; - chibios_driver.send_keyboard(&empty_report); - } - -#if !defined(KEEP_USB_CONNECTION_IN_WIRELESS_MODE) - usbStop(&USBD1); - usbDisconnectBus(&USBD1); - usb_power_disconnect(); -#endif - } -} - -void set_transport(transport_t new_transport) { - if (transport != new_transport) { - if (transport == TRANSPORT_USB || ((transport != TRANSPORT_USB) && wireless_get_state() == WT_CONNECTED)) clear_keyboard(); - - transport = new_transport; - - switch (transport) { - case TRANSPORT_USB: - usb_transport_enable(true); - bt_transport_enable(false); - wait_ms(5); - p24g_transport_enable(false); - wireless_disconnect(); - lpm_timer_stop(); - break; - - case TRANSPORT_BLUETOOTH: - p24g_transport_enable(false); - wait_ms(1); - bt_transport_enable(true); - usb_transport_enable(false); - lpm_timer_reset(); - break; - - case TRANSPORT_P2P4: - bt_transport_enable(false); - wait_ms(1); - p24g_transport_enable(true); - usb_transport_enable(false); - lpm_timer_reset(); - break; - - default: - break; - } - - transport_changed(transport); - } -} - -transport_t get_transport(void) { - return transport; -} - -#if (REINIT_LED_DRIVER) -/* Changing transport may cause bronw-out reset of led driver - * withoug MCU reset, which lead backlight to not work, - * reinit the led driver workgound this issue */ -static void reinit_led_drvier(void) { - /* Wait circuit to discharge for a while */ - systime_t start = chVTGetSystemTime(); - while (chTimeI2MS(chVTTimeElapsedSinceX(start)) < 100) { - }; - -# ifdef LED_MATRIX_ENABLE - led_matrix_init(); -# endif -# ifdef RGB_MATRIX_ENABLE - rgb_matrix_init(); -# endif -} -#endif - -void transport_changed(transport_t new_transport) { - kc_printf("transport_changed %d\n\r", new_transport); - indicator_init(); - -#if (REINIT_LED_DRIVER) - reinit_led_drvier(); -#endif - -#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_TIMEOUT) -# if (RGB_MATRIX_TIMEOUT > 0) - rgb_matrix_disable_timeout_set(RGB_MATRIX_TIMEOUT_INFINITE); - rgb_matrix_disable_time_reset(); -# endif -#endif -#if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_TIMEOUT) -# if (LED_MATRIX_TIMEOUT > 0) - led_matrix_disable_timeout_set(LED_MATRIX_TIMEOUT_INFINITE); - led_matrix_disable_time_reset(); -# endif -#endif -} - -void usb_remote_wakeup(void) { - if (USB_DRIVER.state == USB_SUSPENDED) { - while (USB_DRIVER.state == USB_SUSPENDED) { - wireless_pre_task(); - if (get_transport() != TRANSPORT_USB) { - suspend_wakeup_init_quantum(); - return; - } - /* Do this in the suspended state */ - suspend_power_down(); // on AVR this deep sleeps for 15ms - /* Remote wakeup */ - if (suspend_wakeup_condition() -#ifdef ENCODER_ENABLE - || encoder_read() -#endif - ) { - usbWakeupHost(&USB_DRIVER); - wait_ms(300); -#ifdef MOUSEKEY_ENABLE - // Wiggle to wakeup - mousekey_on(KC_MS_LEFT); - mousekey_send(); - wait_ms(10); - mousekey_on(KC_MS_RIGHT); - mousekey_send(); - wait_ms(10); - mousekey_off((KC_MS_RIGHT)); - mousekey_send(); -#else - set_mods(0x02); - send_keyboard_report(); - wait_ms(10); - del_mods(0x02); - send_keyboard_report(); -#endif - } - } - /* Woken up */ - // variables has been already cleared by the wakeup hook - send_keyboard_report(); -#ifdef MOUSEKEY_ENABLE - mousekey_send(); -#endif /* MOUSEKEY_ENABLE */ - usb_event_queue_task(); - } -} diff --git a/keyboards/keychron/common/wireless/transport.h b/keyboards/keychron/common/wireless/transport.h deleted file mode 100644 index b9796078ce..0000000000 --- a/keyboards/keychron/common/wireless/transport.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright 2022~2023 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -typedef enum { - TRANSPORT_NONE, - TRANSPORT_USB = 0x01 << 0, - TRANSPORT_BLUETOOTH = 0x01 << 1, - TRANSPORT_P2P4 = 0x01 << 2, - TRANSPORT_MAX, -} transport_t; - -#ifdef NKRO_ENABLE -typedef struct { - bool usb : 1; - bool bluetooth : 1; -} nkro_t; -#endif - -#define TRANSPORT_WIRELESS (TRANSPORT_BLUETOOTH | TRANSPORT_P2P4) - -void set_transport(transport_t new_transport); -transport_t get_transport(void); - -void usb_power_connect(void); -void usb_power_disconnect(void); -void usb_transport_enable(bool enable); -void usb_remote_wakeup(void); diff --git a/keyboards/keychron/common/wireless/wireless.c b/keyboards/keychron/common/wireless/wireless.c deleted file mode 100644 index 24e9b18fdb..0000000000 --- a/keyboards/keychron/common/wireless/wireless.c +++ /dev/null @@ -1,657 +0,0 @@ -/* Copyright 2023 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" -#include "wireless.h" -#include "report_buffer.h" -#include "lpm.h" -#include "battery.h" -#include "indicator.h" -#include "transport.h" -#include "rtc_timer.h" -#include "keychron_wireless_common.h" -#include "keychron_task.h" -#include "wireless_config.h" -#include "keychron_raw_hid.h" - -extern uint8_t pairing_indication; -extern host_driver_t chibios_driver; -extern report_buffer_t kb_rpt; -extern uint32_t retry_time_buffer; -extern uint8_t retry; - -static uint8_t host_index = 0; -static uint8_t led_state = 0; - -extern wt_func_t wireless_transport; -static wt_state_t wireless_state = WT_RESET; -static bool pincodeEntry = false; -uint8_t wireless_report_protocol = true; - -uint16_t backlit_disable_time = CONNECTED_BACKLIGHT_DISABLE_TIMEOUT; -uint16_t connected_idle_time = CONNECTED_IDLE_TIME; - -/* declarations */ -uint8_t wreless_keyboard_leds(void); -void wireless_send_keyboard(report_keyboard_t *report); -void wireless_send_nkro(report_nkro_t *report); -void wireless_send_mouse(report_mouse_t *report); -void wireless_send_extra(report_extra_t *report); -bool process_record_wireless(uint16_t keycode, keyrecord_t *record); - -/* host struct */ -host_driver_t wireless_driver = {wreless_keyboard_leds, wireless_send_keyboard, wireless_send_nkro, wireless_send_mouse, wireless_send_extra}; - -#define WT_EVENT_QUEUE_SIZE 16 -wireless_event_t wireless_event_queue[WT_EVENT_QUEUE_SIZE]; -uint8_t wireless_event_queue_head; -uint8_t wireless_event_queue_tail; - -bool wireless_lpm_set(uint8_t *data); - -void wireless_event_queue_init(void) { - // Initialise the event queue - memset(&wireless_event_queue, 0, sizeof(wireless_event_queue)); - wireless_event_queue_head = 0; - wireless_event_queue_tail = 0; -} - -bool wireless_event_enqueue(wireless_event_t event) { - uint8_t next = (wireless_event_queue_head + 1) % WT_EVENT_QUEUE_SIZE; - if (next == wireless_event_queue_tail) { - /* Override the first report */ - wireless_event_queue_tail = (wireless_event_queue_tail + 1) % WT_EVENT_QUEUE_SIZE; - } - wireless_event_queue[wireless_event_queue_head] = event; - wireless_event_queue_head = next; - return true; -} - -static inline bool wireless_event_dequeue(wireless_event_t *event) { - if (wireless_event_queue_head == wireless_event_queue_tail) { - return false; - } - *event = wireless_event_queue[wireless_event_queue_tail]; - wireless_event_queue_tail = (wireless_event_queue_tail + 1) % WT_EVENT_QUEUE_SIZE; - return true; -} - -#if defined(EECONFIG_BASE_WIRELESS_CONFIG) -void wireless_config_reset(void) { - uint8_t data[4] = { 0 }; - - uint16_t backlit_disable_time = CONNECTED_BACKLIGHT_DISABLE_TIMEOUT; - uint16_t connected_idle_time = CONNECTED_IDLE_TIME; - - memcpy(&data[0], &backlit_disable_time, sizeof(backlit_disable_time)); - memcpy(&data[2], &connected_idle_time, sizeof(connected_idle_time)); - wireless_lpm_set(data); -} - -void wireless_config_load(void) { - uint8_t offset = 0; - eeprom_read_block(&backlit_disable_time, (uint8_t *)(EECONFIG_BASE_WIRELESS_CONFIG+offset), sizeof(backlit_disable_time)); - offset += sizeof(backlit_disable_time); - eeprom_read_block(&connected_idle_time, (uint8_t *)(EECONFIG_BASE_WIRELESS_CONFIG+offset), sizeof(connected_idle_time)); - - if (backlit_disable_time == 0) - backlit_disable_time = CONNECTED_BACKLIGHT_DISABLE_TIMEOUT; - else if (backlit_disable_time < 5 ) backlit_disable_time = 5; - - if (connected_idle_time == 0) - connected_idle_time = CONNECTED_IDLE_TIME; - else if (connected_idle_time < 30 ) connected_idle_time = 30; -} - -void wireless_config_save(void) { - uint8_t offset = 0; - eeprom_update_block(&backlit_disable_time, (uint8_t *)(EECONFIG_BASE_WIRELESS_CONFIG+offset), sizeof(backlit_disable_time)); - offset += sizeof(backlit_disable_time); - eeprom_update_block(&connected_idle_time, (uint8_t *)(EECONFIG_BASE_WIRELESS_CONFIG+offset), sizeof(connected_idle_time)); -} -#endif - -/* - * Bluetooth init. - */ -void wireless_init(void) { - wireless_state = WT_INITIALIZED; - - wireless_event_queue_init(); -#ifndef DISABLE_REPORT_BUFFER - report_buffer_init(); -#endif - indicator_init(); -#ifdef BLUETOOTH_INT_INPUT_PIN - setPinInputHigh(BLUETOOTH_INT_INPUT_PIN); -#endif - - battery_init(); - lpm_init(); -#if HAL_USE_RTC - rtc_timer_init(); -#endif - -#if defined(EECONFIG_BASE_WIRELESS_CONFIG) - wireless_config_load(); -#endif -} - -/* - * Bluetooth trasponrt init. Bluetooth module driver shall use this function to register a callback - * to its implementation. - */ -void wireless_set_transport(wt_func_t *transport) { - if (transport) memcpy(&wireless_transport, transport, sizeof(wt_func_t)); -} - -/* - * Enter pairing with current host index - */ -void wireless_pairing(void) { - if (battery_is_critical_low()) return; - - wireless_pairing_ex(0, NULL); - wireless_state = WT_PARING; -} - -/* - * Enter pairing with specified host index and param - */ -void wireless_pairing_ex(uint8_t host_idx, void *param) { - kc_printf("wireless_pairing_ex %d\n\r", host_idx); - if (battery_is_critical_low()) return; - - if (wireless_transport.pairing_ex) wireless_transport.pairing_ex(host_idx, param); - wireless_state = WT_PARING; - - host_index = host_idx; -} - -/* - * Initiate connection request to paired host - */ -void wireless_connect(void) { - /* Work around empty report after wakeup, which leads to reconneect/disconnected loop */ - if (battery_is_critical_low() || timer_read32() == 0) return; - - if (wireless_state == WT_RECONNECTING && !indicator_is_running()) { - indicator_set(wireless_state, host_index); - } - wireless_transport.connect_ex(0, 0); - wireless_state = WT_RECONNECTING; -} - -/* - * Initiate connection request to paired host with argument - */ -void wireless_connect_ex(uint8_t host_idx, uint16_t timeout) { - kc_printf("wireless_connect_ex %d\n\r", host_idx); - if (battery_is_critical_low()) return; - - if (host_idx != 0) { - /* Do nothing when trying to connect to current connected host*/ - if (host_index == host_idx && wireless_state == WT_CONNECTED) return; - - host_index = host_idx; - led_state = 0; - } - wireless_transport.connect_ex(host_idx, timeout); - wireless_state = WT_RECONNECTING; -} - -/* Initiate a disconnection */ -void wireless_disconnect(void) { - kc_printf("wireless_disconnect\n\r"); - if (wireless_transport.disconnect) wireless_transport.disconnect(); -} - -/* Called when the BT device is reset. */ -static void wireless_enter_reset(uint8_t reason) { - kc_printf("wireless_enter_reset\n\r"); - wireless_state = WT_RESET; - wireless_enter_reset_kb(reason); -} - -/* Enters discoverable state. Upon entering this state we perform the following actions: - * - change state to WT_PARING - * - set pairing indication - */ -static void wireless_enter_discoverable(uint8_t host_idx) { - kc_printf("wireless_enter_discoverable: %d\n\r", host_idx); - host_index = host_idx; - - wireless_state = WT_PARING; - indicator_set(wireless_state, host_idx); - wireless_enter_discoverable_kb(host_idx); -} - -/* - * Enters reconnecting state. Upon entering this state we perform the following actions: - * - change state to RECONNECTING - * - set reconnect indication - */ -static void wireless_enter_reconnecting(uint8_t host_idx) { - host_index = host_idx; - - kc_printf("wireless_reconnecting %d\n\r", host_idx); - wireless_state = WT_RECONNECTING; - indicator_set(wireless_state, host_idx); - wireless_enter_reconnecting_kb(host_idx); -} - -/* Enters connected state. Upon entering this state we perform the following actions: - * - change state to CONNECTED - * - set connected indication - * - enable NKRO if it is support - */ -static void wireless_enter_connected(uint8_t host_idx) { - kc_printf("wireless_connected %d\n\r", host_idx); - - wireless_state = WT_CONNECTED; - indicator_set(wireless_state, host_idx); - host_index = host_idx; - - clear_keyboard(); - - /* Enable NKRO since it may be disabled in pin code entry */ -#if defined(NKRO_ENABLE) && !defined(WIRELESS_NKRO_ENABLE) - keymap_config.nkro = false; -#endif - - wireless_enter_connected_kb(host_idx); - if (battery_is_empty()) { - indicator_battery_low_enable(true); - } - if (wireless_transport.update_bat_level) wireless_transport.update_bat_level(battery_get_percentage()); - lpm_timer_reset(); -} - -/* Enters disconnected state. Upon entering this state we perform the following actions: - * - change state to DISCONNECTED - * - set disconnected indication - */ -static void wireless_enter_disconnected(uint8_t host_idx, uint8_t reason) { - kc_printf("wireless_disconnected %d, %d\n\r", host_idx, reason); - - uint8_t previous_state = wireless_state; - led_state = 0; - if (get_transport() & TRANSPORT_WIRELESS) - led_update_kb((led_t)led_state); - - wireless_state = WT_DISCONNECTED; - - if (previous_state == WT_CONNECTED) { - lpm_timer_reset(); - indicator_set(WT_SUSPEND, host_idx); - } else { - indicator_set(wireless_state, host_idx); -#if defined(RGB_MATRIX_ENABLE) || defined(LED_MATRIX_ENABLE) - if (reason && (get_transport() & TRANSPORT_WIRELESS)) { - indicator_set_backlit_timeout(DISCONNECTED_BACKLIGHT_DISABLE_TIMEOUT*1000); - } -#endif - } - -#ifndef DISABLE_REPORT_BUFFER - report_buffer_init(); -#endif - retry = 0; - wireless_enter_disconnected_kb(host_idx, reason); - - indicator_battery_low_enable(false); -} - -/* Enter pin code entry state. */ -static void wireless_enter_bluetooth_pin_code_entry(void) { -#if defined(NKRO_ENABLE) - keymap_config.nkro = FALSE; -#endif - pincodeEntry = true; - wireless_enter_bluetooth_pin_code_entry_kb(); -} - -/* Exit pin code entry state. */ -static void wireless_exit_bluetooth_pin_code_entry(void) { -#if defined(NKRO_ENABLE) || defined(WIRELESS_NKRO_ENABLE) - keymap_config.raw = eeconfig_read_keymap(); -#endif - pincodeEntry = false; - wireless_exit_bluetooth_pin_code_entry_kb(); -} - -/* Enters disconnected state. Upon entering this state we perform the following actions: - * - change state to DISCONNECTED - * - set disconnected indication - */ -static void wireless_enter_sleep(void) { - kc_printf("wireless_enter_sleep %d\n\r", wireless_state); - - led_state = 0; - - if (wireless_state == WT_CONNECTED || wireless_state == WT_PARING) { - wireless_state = WT_SUSPEND; - kc_printf("WT_SUSPEND\n\r"); - lpm_timer_reset(); - - wireless_enter_sleep_kb(); - indicator_set(wireless_state, 0); - indicator_battery_low_enable(false); - } -} - -__attribute__((weak)) void wireless_enter_reset_kb(uint8_t reason) {} -__attribute__((weak)) void wireless_enter_discoverable_kb(uint8_t host_idx) {} -__attribute__((weak)) void wireless_enter_reconnecting_kb(uint8_t host_idx) {} -__attribute__((weak)) void wireless_enter_connected_kb(uint8_t host_idx) {} -__attribute__((weak)) void wireless_enter_disconnected_kb(uint8_t host_idx, uint8_t reason) {} -__attribute__((weak)) void wireless_enter_bluetooth_pin_code_entry_kb(void) {} -__attribute__((weak)) void wireless_exit_bluetooth_pin_code_entry_kb(void) {} -__attribute__((weak)) void wireless_enter_sleep_kb(void) {} - -/* */ -static void wireless_hid_set_protocol(bool report_protocol) { - wireless_report_protocol = false; -} - -uint8_t wreless_keyboard_leds(void) { - if (wireless_state == WT_CONNECTED) { - return led_state; - } - - return 0; -} - -extern keymap_config_t keymap_config; - -void wireless_send_keyboard(report_keyboard_t *report) { - if (battery_is_critical_low()) return; - - if (wireless_state == WT_PARING && !pincodeEntry) return; - - if (wireless_state == WT_CONNECTED || (wireless_state == WT_PARING && pincodeEntry)) { - if (wireless_transport.send_keyboard) { -#ifndef DISABLE_REPORT_BUFFER - bool empty = report_buffer_is_empty(); - - report_buffer_t report_buffer; - report_buffer.type = REPORT_TYPE_KB; - memcpy(&report_buffer.keyboard, report, sizeof(report_keyboard_t)); - report_buffer_enqueue(&report_buffer); - - if (empty) - report_buffer_task(); -#else - wireless_transport.send_keyboard(&report->mods); -#endif - } - } else if (wireless_state != WT_RESET) { - wireless_connect(); - } -} - -void wireless_send_nkro(report_nkro_t *report) { - if (battery_is_critical_low()) return; - - if (wireless_state == WT_PARING && !pincodeEntry) return; - - if (wireless_state == WT_CONNECTED || (wireless_state == WT_PARING && pincodeEntry)) { - if (wireless_transport.send_nkro) { -#ifndef DISABLE_REPORT_BUFFER - bool empty = report_buffer_is_empty(); - - report_buffer_t report_buffer; - report_buffer.type = REPORT_TYPE_NKRO; - memcpy(&report_buffer.nkro, report, sizeof(report_nkro_t)); - report_buffer_enqueue(&report_buffer); - - if (empty) - report_buffer_task(); -#else - wireless_transport.send_nkro(&report->mods); -#endif - } - } else if (wireless_state != WT_RESET) { - wireless_connect(); - } -} - -void wireless_send_mouse(report_mouse_t *report) { - if (battery_is_critical_low()) return; - - if (wireless_state == WT_CONNECTED) { - if (wireless_transport.send_mouse) wireless_transport.send_mouse((uint8_t *)report); - } else if (wireless_state != WT_RESET) { - wireless_connect(); - } -} - -void wireless_send_system(uint16_t data) { - if (wireless_state == WT_CONNECTED) { - if (wireless_transport.send_system) wireless_transport.send_system(data); - } else if (wireless_state != WT_RESET) { - wireless_connect(); - } -} - -void wireless_send_consumer(uint16_t data) { - if (wireless_state == WT_CONNECTED) { -#ifndef DISABLE_REPORT_BUFFER - if (report_buffer_is_empty() && report_buffer_next_inverval()) { - if (wireless_transport.send_consumer) wireless_transport.send_consumer(data); - report_buffer_update_timer(); - } else { - report_buffer_t report_buffer; - report_buffer.type = REPORT_TYPE_CONSUMER; - report_buffer.consumer = data; - report_buffer_enqueue(&report_buffer); - } -#else - if (wireless_transport.send_consumer) wireless_transport.send_consumer(data); -#endif - } else if (wireless_state != WT_RESET) { - wireless_connect(); - } -} - -void wireless_send_extra(report_extra_t *report) { - if (battery_is_critical_low()) return; - - if (report->report_id == REPORT_ID_SYSTEM) { - wireless_send_system(report->usage); - } else if (report->report_id == REPORT_ID_CONSUMER) { - wireless_send_consumer(report->usage); - } -} - -void wireless_low_battery_shutdown(void) { - indicator_battery_low_enable(false); - - - report_buffer_init(); - clear_keyboard(); // - wait_ms(50); // wait a while for bt module to free buffer by sending report - - // Release all keys by sending empty reports - if (keymap_config.nkro) { - report_nkro_t empty_nkro_report; - memset(&empty_nkro_report, 0, sizeof(empty_nkro_report)); - wireless_transport.send_nkro(&empty_nkro_report.mods); - } else { - report_keyboard_t empty_report; - memset(&empty_report, 0, sizeof(empty_report)); - wireless_transport.send_keyboard(&empty_report.mods); - } - wait_ms(10); - wireless_transport.send_consumer(0); - wait_ms(10); - report_mouse_t empty_mouse_report; - memset(&empty_mouse_report, 0, sizeof(empty_mouse_report)); - wireless_transport.send_mouse((uint8_t *)&empty_mouse_report); - wait_ms(300); // Wait for bt module to send all buffered report - - wireless_disconnect(); -} - -void wireless_event_task(void) { - wireless_event_t event; - while (wireless_event_dequeue(&event)) { - switch (event.evt_type) { - case EVT_RESET: - wireless_enter_reset(event.params.reason); - break; - case EVT_CONNECTED: - wireless_enter_connected(event.params.hostIndex); - break; - case EVT_DISCOVERABLE: - wireless_enter_discoverable(event.params.hostIndex); - break; - case EVT_RECONNECTING: - wireless_enter_reconnecting(event.params.hostIndex); - break; - case EVT_DISCONNECTED: - wireless_enter_disconnected(event.params.hostIndex, event.data); - break; - case EVT_BT_PINCODE_ENTRY: - wireless_enter_bluetooth_pin_code_entry(); - break; - case EVT_EXIT_BT_PINCODE_ENTRY: - wireless_exit_bluetooth_pin_code_entry(); - break; - case EVT_SLEEP: - wireless_enter_sleep(); - break; - case EVT_HID_INDICATOR: - led_state = event.params.led; - break; - case EVT_HID_SET_PROTOCOL: - wireless_hid_set_protocol(event.params.protocol); - break; - case EVT_CONECTION_INTERVAL: - report_buffer_set_inverval(event.params.interval); - break; - default: - break; - } - } -} - -void wireless_task(void) { - wireless_transport.task(); - wireless_event_task(); -#ifndef DISABLE_REPORT_BUFFER - report_buffer_task(); -#endif - indicator_task(); - keychron_wireless_common_task(); - battery_task(); - lpm_task(); -} - -void send_string_task(void) { - if ((get_transport() & TRANSPORT_WIRELESS) && wireless_get_state() == WT_CONNECTED) { - wireless_transport.task(); -#ifndef DISABLE_REPORT_BUFFER - report_buffer_task(); -#endif - } -} -wt_state_t wireless_get_state(void) { - return wireless_state; -}; - -bool process_record_wireless(uint16_t keycode, keyrecord_t *record) { - if (get_transport() & TRANSPORT_WIRELESS) { - lpm_timer_reset(); - - if (battery_is_empty() && wireless_get_state() == WT_CONNECTED && record->event.pressed) { - indicator_battery_low_enable(true); - } - } - - if (!process_record_keychron_wireless(keycode, record)) return false; - - return true; -} - -#if defined(EECONFIG_BASE_WIRELESS_CONFIG) -bool wireless_lpm_get(uint8_t *data) { - uint8_t index = 1; - memcpy(&data[index], &backlit_disable_time, sizeof(backlit_disable_time)); - index += sizeof(backlit_disable_time); - memcpy(&data[index], &connected_idle_time, sizeof(connected_idle_time)); - - return true; -} - -bool wireless_lpm_set(uint8_t *data) { - uint8_t index = 0; - - memcpy(&backlit_disable_time, &data[index], sizeof(backlit_disable_time)); - index += sizeof(backlit_disable_time); - memcpy(&connected_idle_time, &data[index], sizeof(connected_idle_time)); - - if (backlit_disable_time < 5 || connected_idle_time < 60) { - wireless_config_load(); - return false; - } - - wireless_config_save(); - - // Reset backlight timeout - if ((get_transport() & TRANSPORT_WIRELESS) && wireless_state == WT_CONNECTED) - { - indicator_set_backlit_timeout(backlit_disable_time*1000); - indicator_reset_backlit_time(); - - // Wiggle mouse to reset bluetooth module timer - mousekey_on(KC_MS_LEFT); - mousekey_send(); - wait_ms(10); - mousekey_on(KC_MS_RIGHT); - mousekey_send(); - wait_ms(10); - mousekey_off((KC_MS_RIGHT)); - mousekey_send(); - wait_ms(10); - } - - // Update bluetooth module param - lkbt51_param_init(); - return true; -} - -void wireless_raw_hid_rx(uint8_t *data, uint8_t length) { - uint8_t cmd = data[1]; - bool success = true; - - switch (cmd) { - case WIRELESS_LPM_GET: - success = wireless_lpm_get(&data[2]); - break; - - case WIRELESS_LPM_SET: - success = wireless_lpm_set(&data[2]); - break; - - default: - data[0] = 0xFF; - break; - } - - data[2] = success ? 0 : 1; -} -#endif diff --git a/keyboards/keychron/common/wireless/wireless.h b/keyboards/keychron/common/wireless/wireless.h deleted file mode 100644 index 0ead527d47..0000000000 --- a/keyboards/keychron/common/wireless/wireless.h +++ /dev/null @@ -1,106 +0,0 @@ -/* Copyright 2023~2025 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "wireless_event_type.h" -#include "action.h" - -#ifdef KC_DEBUG -# define kc_printf dprintf -#else -# define kc_printf(format, ...) -#endif - -/* Low power mode */ -#ifndef LOW_POWER_MODE -# define LOW_POWER_MODE PM_STOP -#endif - -/* Wake pin used for blueooth module/controller to wake up MCU in low power mode*/ -#ifndef BLUETOOTH_INT_INPUT_PIN -# define WAKE_PIN A5 -#endif - -// clang-format off -/* Type of an enumeration of the possible wireless transport state.*/ -typedef enum { - WT_RESET, - WT_INITIALIZED, // 1 - WT_DISCONNECTED, // 2 - WT_CONNECTED, // 3 - WT_PARING, // 4 - WT_RECONNECTING, // 5 - WT_SUSPEND -} wt_state_t; - -//extern event_listener_t wireless_driver; - -typedef struct { - void (*init)(bool); - void (*connect_ex)(uint8_t, uint16_t); - void (*pairing_ex)(uint8_t, void *); - void (*disconnect)(void); - void (*send_keyboard)(uint8_t *); - void (*send_nkro)(uint8_t *); - void (*send_consumer)(uint16_t); - void (*send_system)(uint16_t); - void (*send_mouse)(uint8_t *); - void (*update_bat_level)(uint8_t); - void (*task)(void); -} wt_func_t; -// clang-format on - -extern void register_wt_tasks(void); - -void wireless_init(void); -void wireless_config_reset(void); - -void wireless_set_transport(wt_func_t *transport); -void wireless(void); - -bool wireless_event_enqueue(wireless_event_t event); - -void wireless_connect(void); -void wireless_connect_ex(uint8_t host_idx, uint16_t timeout); -void wireless_disconnect(void); - -void wireless_pairing(void); -void wireless_pairing_ex(uint8_t host_idx, void *param); -// bool bluetooth_is_activated(void); - -void wireless_enter_reset_kb(uint8_t reason); -void wireless_enter_discoverable_kb(uint8_t host_idx); -void wireless_enter_reconnecting_kb(uint8_t host_idx); -void wireless_enter_connected_kb(uint8_t host_idx); -void wireless_enter_disconnected_kb(uint8_t host_idx, uint8_t reason); -void wireless_enter_bluetooth_pin_code_entry_kb(void); -void wireless_exit_bluetooth_pin_code_entry_kb(void); -void wireless_enter_sleep_kb(void); - -void wireless_task(void); -void wireless_pre_task(void); -void wireless_post_task(void); -void send_string_task(void); - -wt_state_t wireless_get_state(void); - -void wireless_low_battery_shutdown(void); - -bool process_record_wireless(uint16_t keycode, keyrecord_t *record); - -void wireless_raw_hid_rx(uint8_t *data, uint8_t length); - diff --git a/keyboards/keychron/common/wireless/wireless.mk b/keyboards/keychron/common/wireless/wireless.mk deleted file mode 100644 index b575624b06..0000000000 --- a/keyboards/keychron/common/wireless/wireless.mk +++ /dev/null @@ -1,21 +0,0 @@ -OPT_DEFS += -DLK_WIRELESS_ENABLE -DWIRELESS_CONFIG_ENABLE -OPT_DEFS += -DNO_USB_STARTUP_CHECK -OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE - -WIRELESS_DIR = common/wireless -SRC += \ - $(WIRELESS_DIR)/wireless.c \ - $(WIRELESS_DIR)/report_buffer.c \ - $(WIRELESS_DIR)/lkbt51.c \ - $(WIRELESS_DIR)/indicator.c \ - $(WIRELESS_DIR)/wireless_main.c \ - $(WIRELESS_DIR)/transport.c \ - $(WIRELESS_DIR)/lpm.c \ - $(WIRELESS_DIR)/lpm_stm32f401.c \ - $(WIRELESS_DIR)/battery.c \ - $(WIRELESS_DIR)/bat_level_animation.c \ - $(WIRELESS_DIR)/rtc_timer.c \ - $(WIRELESS_DIR)/keychron_wireless_common.c - -VPATH += $(TOP_DIR)/keyboards/keychron/$(WIRELESS_DIR) - diff --git a/keyboards/keychron/common/wireless/wireless_config.h b/keyboards/keychron/common/wireless/wireless_config.h deleted file mode 100644 index f1305f3fd1..0000000000 --- a/keyboards/keychron/common/wireless/wireless_config.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright 2023~2025 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include "config.h" - -// -#ifndef BT_HOST_DEVICES_COUNT -# define BT_HOST_DEVICES_COUNT 3 -#endif - -#define P2P4G_HOST_DEVICES_COUNT 1 - -// Uint: Second, the timer restarts on key activities. -#ifndef CONNECTED_IDLE_TIME -# define CONNECTED_IDLE_TIME 7200 -#endif diff --git a/keyboards/keychron/common/wireless/wireless_event_type.h b/keyboards/keychron/common/wireless/wireless_event_type.h deleted file mode 100644 index 430ace916f..0000000000 --- a/keyboards/keychron/common/wireless/wireless_event_type.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright 2023~2025 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -/* Type of an enumeration of the possible wireless events.*/ -typedef enum { - EVT_NONE = 0, - EVT_RESET, - EVT_DISCOVERABLE, - EVT_RECONNECTING, - EVT_CONNECTED, - EVT_DISCONNECTED, - EVT_BT_PINCODE_ENTRY, - EVT_EXIT_BT_PINCODE_ENTRY, - EVT_SLEEP, - EVT_HID_SET_PROTOCOL, - EVT_HID_INDICATOR, - EVT_CONECTION_INTERVAL, -} event_type_t; - -typedef struct { - event_type_t evt_type; /*The type of the event. */ - union { - uint8_t reason; /* Parameters to WT_RESET event */ - uint8_t hostIndex; /* Parameters to connection event from EVT_DISCOVERABLE to EVT_DISCONECTED */ - uint8_t led; /* Parameters to EVT_HID_INDICATOR event */ - uint8_t protocol; /* Parameters to EVT_HID_SET_PROTOCOL event */ - uint8_t interval; /* Parameters to EVT_CONECTION_INTERVAL event */ - } params; - uint8_t data; -} wireless_event_t; diff --git a/keyboards/keychron/common/wireless/wireless_main.c b/keyboards/keychron/common/wireless/wireless_main.c deleted file mode 100644 index e37a218a35..0000000000 --- a/keyboards/keychron/common/wireless/wireless_main.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2023 @ lokher (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" -#include "wireless.h" -#include "transport.h" -#include "factory_test.h" -#include "keychron_task.h" - -__attribute__((weak)) void wireless_pre_task(void) {} -__attribute__((weak)) void wireless_post_task(void) {} - -bool wireless_tasks(void) { - wireless_pre_task(); - wireless_task(); - wireless_post_task(); - - /* usb_remote_wakeup() should be invoked last so that we have chance - * to switch to wireless after start-up when usb is not connected - */ - if (get_transport() == TRANSPORT_USB) usb_remote_wakeup(); - return true; -} diff --git a/keyboards/keychron/k10_max/ansi/rgb/config.h b/keyboards/keychron/k10_max/ansi/rgb/config.h deleted file mode 100644 index dbd6620fc7..0000000000 --- a/keyboards/keychron/k10_max/ansi/rgb/config.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#ifdef RGB_MATRIX_ENABLE -/* RGB Matrix driver configuration */ -# define DRIVER_COUNT 2 -# define RGB_MATRIX_LED_COUNT 108 - -# define DRIVER_CS_PINS \ - { B8, B9 } - -/* Scan phase of led driver set as MSKPHASE_12CHANNEL(defined as 0x03 in snled27351.h) */ -# define SNLED27351_PHASE_CHANNEL MSKPHASE_12CHANNEL - -/* Set LED driver current */ -# define SNLED27351_CURRENT_TUNE \ - { 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 } - -/* Set to infinit, which is use in USB mode by default */ -# define RGB_MATRIX_TIMEOUT RGB_MATRIX_TIMEOUT_INFINITE - -/* Allow shutdown of led driver to save power */ -# define RGB_MATRIX_DRIVER_SHUTDOWN_ENABLE -/* Turn off backlight on low brightness to save power */ -# define RGB_MATRIX_BRIGHTNESS_TURN_OFF_VAL 48 - -/* Indications */ -# define NUM_LOCK_INDEX 36 - -# define RGB_MATRIX_KEYPRESSES -# define RGB_MATRIX_FRAMEBUFFER_EFFECTS - -#endif diff --git a/keyboards/keychron/k10_max/ansi/rgb/info.json b/keyboards/keychron/k10_max/ansi/rgb/info.json deleted file mode 100644 index a103b78158..0000000000 --- a/keyboards/keychron/k10_max/ansi/rgb/info.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "usb": { - "pid": "0x0AA0", - "device_version": "1.0.0" - }, - "features": { - "rgb_matrix": true - }, - "rgb_matrix": { - "driver": "snled27351_spi", - "sleep": true, - "animations": { - "band_spiral_val": true, - "breathing": true, - "cycle_all": true, - "cycle_left_right": true, - "cycle_out_in": true, - "cycle_out_in_dual": true, - "cycle_pinwheel": true, - "cycle_spiral": true, - "cycle_up_down": true, - "digital_rain": true, - "dual_beacon": true, - "jellybean_raindrops": true, - "pixel_rain": true, - "rainbow_beacon": true, - "rainbow_moving_chevron": true, - "solid_reactive_multinexus": true, - "solid_reactive_multiwide": true, - "solid_reactive_simple": true, - "solid_splash": true, - "splash": true, - "typing_heatmap": true - } - }, - "indicators": { - "caps_lock": "C9", - "on_state": 1 - } -} diff --git a/keyboards/keychron/k10_max/ansi/rgb/keymaps/default/keymap.c b/keyboards/keychron/k10_max/ansi/rgb/keymaps/default/keymap.c deleted file mode 100644 index 71d1d3f881..0000000000 --- a/keyboards/keychron/k10_max/ansi/rgb/keymaps/default/keymap.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H -#include "keychron_common.h" - -enum layers { - MAC_BASE, - MAC_FN, - WIN_BASE, - WIN_FN, -}; -// clang-format off -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_ansi_108( - KC_ESC, KC_BRID, KC_BRIU, KC_MCTRL, KC_LNPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, - KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), - - [MAC_FN] = LAYOUT_ansi_108( - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG, _______, _______, _______, _______, - _______, BT_HST1, BT_HST2, BT_HST3, P2P4G, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), - - [WIN_BASE] = LAYOUT_ansi_108( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_CTANA, RGB_MOD, _______, _______, _______, _______, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, - KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), - - [WIN_FN] = LAYOUT_ansi_108( - _______, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG, _______, _______, _______, _______, - _______, BT_HST1, BT_HST2, BT_HST3, P2P4G, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______) -}; - -// clang-format on -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if (!process_record_keychron_common(keycode, record)) { - return false; - } - return true; -} diff --git a/keyboards/keychron/k10_max/ansi/rgb/keymaps/via/keymap.c b/keyboards/keychron/k10_max/ansi/rgb/keymaps/via/keymap.c deleted file mode 100644 index 71d1d3f881..0000000000 --- a/keyboards/keychron/k10_max/ansi/rgb/keymaps/via/keymap.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H -#include "keychron_common.h" - -enum layers { - MAC_BASE, - MAC_FN, - WIN_BASE, - WIN_FN, -}; -// clang-format off -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_ansi_108( - KC_ESC, KC_BRID, KC_BRIU, KC_MCTRL, KC_LNPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, - KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), - - [MAC_FN] = LAYOUT_ansi_108( - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG, _______, _______, _______, _______, - _______, BT_HST1, BT_HST2, BT_HST3, P2P4G, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), - - [WIN_BASE] = LAYOUT_ansi_108( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_CTANA, RGB_MOD, _______, _______, _______, _______, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, - KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), - - [WIN_FN] = LAYOUT_ansi_108( - _______, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG, _______, _______, _______, _______, - _______, BT_HST1, BT_HST2, BT_HST3, P2P4G, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______) -}; - -// clang-format on -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if (!process_record_keychron_common(keycode, record)) { - return false; - } - return true; -} diff --git a/keyboards/keychron/k10_max/ansi/rgb/keymaps/via/rules.mk b/keyboards/keychron/k10_max/ansi/rgb/keymaps/via/rules.mk deleted file mode 100644 index 1e5b99807c..0000000000 --- a/keyboards/keychron/k10_max/ansi/rgb/keymaps/via/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/keychron/k10_max/ansi/rgb/rgb.c b/keyboards/keychron/k10_max/ansi/rgb/rgb.c deleted file mode 100644 index 8d8e2ce44d..0000000000 --- a/keyboards/keychron/k10_max/ansi/rgb/rgb.c +++ /dev/null @@ -1,175 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software : you can redistribute it and /or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program.If not, see < http://www.gnu.org/licenses/>. - */ - -#include "quantum.h" - -// clang-format off - -#ifdef RGB_MATRIX_ENABLE -const snled27351_led_t g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { -/* Refer to SNLED27351 manual for these locations - * driver - * | R location - * | | G location - * | | | B location - * | | | | */ - {0, G_16, I_16, H_16}, - {0, G_14, I_14, H_14}, - {0, G_13, I_13, H_13}, - {0, G_12, I_12, H_12}, - {0, G_11, I_11, H_11}, - {0, G_10, I_10, H_10}, - {0, G_9, I_9, H_9}, - {0, G_8, I_8, H_8}, - {0, G_7, I_7, H_7}, - {0, G_6, I_6, H_6}, - {0, G_5, I_5, H_5}, - {0, G_4, I_4, H_4}, - {0, G_3, I_3, H_3}, - {0, G_2, I_2, H_2}, - {0, G_1, I_1, H_1}, - {1, A_3, C_3, B_3}, - {0, D_4, F_4, E_4}, - {0, D_3, F_3, E_3}, - {0, D_2, F_2, E_2}, - - {0, A_16, C_16, B_16}, - {0, A_15, C_15, B_15}, - {0, A_14, C_14, B_14}, - {0, A_13, C_13, B_13}, - {0, A_12, C_12, B_12}, - {0, A_11, C_11, B_11}, - {0, A_10, C_10, B_10}, - {0, A_9, C_9, B_9}, - {0, A_8, C_8, B_8}, - {0, A_7, C_7, B_7}, - {0, A_6, C_6, B_6}, - {0, A_5, C_5, B_5}, - {0, A_4, C_4, B_4}, - {0, A_3, C_3, B_3}, - {0, A_2, C_2, B_2}, - {0, A_1, C_1, B_1}, - {1, A_2, C_2, B_2}, - {0, D_8, F_8, E_8}, - {0, D_7, F_7, E_7}, - {0, D_6, F_6, E_6}, - - {0, J_16, L_16, K_16}, - {0, J_15, L_15, K_15}, - {0, J_14, L_14, K_14}, - {0, J_13, L_13, K_13}, - {0, J_12, L_12, K_12}, - {0, J_11, L_11, K_11}, - {0, J_10, L_10, K_10}, - {0, J_9, L_9, K_9}, - {0, J_8, L_8, K_8}, - {0, J_7, L_7, K_7}, - {0, J_6, L_6, K_6}, - {0, J_5, L_5, K_5}, - {0, J_4, L_4, K_4}, - {0, J_3, L_3, K_3}, - {0, J_2, L_2, K_2}, - {0, J_1, L_1, K_1}, - {1, A_1, C_1, B_1}, - {0, D_12, F_12, E_12}, - {0, D_11, F_11, E_11}, - {0, D_10, F_10, E_10}, - - {1, A_16, C_16, B_16}, - {1, A_15, C_15, B_15}, - {1, A_14, C_14, B_14}, - {1, A_13, C_13, B_13}, - {1, A_12, C_12, B_12}, - {1, A_11, C_11, B_11}, - {1, A_10, C_10, B_10}, - {1, A_9, C_9, B_9}, - {1, A_8, C_8, B_8}, - {1, A_7, C_7, B_7}, - {1, A_6, C_6, B_6}, - {1, A_5, C_5, B_5}, - {1, A_4, C_4, B_4}, - {0, D_1, F_1, E_1}, - {0, D_5, F_5, E_5}, - {0, D_9, F_9, E_9}, - {1, J_3, L_3, K_3}, - {1, J_9, L_9, K_9}, - {1, J_8, L_8, K_8}, - {1, J_7, L_7, K_7}, - - {1, G_16, I_16, H_16}, - {1, G_14, I_14, H_14}, - {1, G_13, I_13, H_13}, - {1, G_12, I_12, H_12}, - {1, G_11, I_11, H_11}, - {1, G_10, I_10, H_10}, - {1, G_9, I_9, H_9}, - {1, G_8, I_8, H_8}, - {1, G_7, I_7, H_7}, - {1, G_6, I_6, H_6}, - {1, G_5, I_5, H_5}, - {1, G_3, I_3, H_3}, - {1, G_1, I_1, H_1}, - {1, J_6, L_6, K_6}, - {1, J_5, L_5, K_5}, - {1, J_4, L_4, K_4}, - - {1, D_16, F_16, E_16}, - {1, D_15, F_15, E_15}, - {1, D_14, F_14, E_14}, - {1, D_10, F_10, E_10}, - {1, D_6, F_6, E_6}, - {1, D_5, F_5, E_5}, - {1, D_4, F_4, E_4}, - {1, D_3, F_3, E_3}, - {1, D_2, F_2, E_2}, - {1, D_1, F_1, E_1}, - {1, G_2, I_2, H_2}, - {1, J_2, L_2, K_2}, - {1, J_1, L_1, K_1}, -}; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to RGB Index - { 0, __, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 }, - { 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 }, - { 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58 }, - { 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78 }, - { 79, __, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, __, 90, __, 91, __, 92, 93, 94 }, - { 95, 96, 97, __, __, __, 98, __, __, __, 99, 100, 101, 102, 103, 104, 105, __, 106, 107 }, - }, - { - // RGB Index to Physical Position - {0, 0}, {21, 0}, {31, 0}, {42, 0}, {52, 0}, {68, 0}, {78, 0}, {89, 0}, {99, 0}, {115, 0}, {125, 0}, {136, 0}, {146, 0}, {159, 0}, {169, 0}, {180, 0}, {193, 0}, {203, 0}, {214, 0}, - {0,15}, {10,15}, {21,15}, {31,15}, {42,15}, {52,15}, {63,15}, {73,15}, {83,15}, {94,15}, {104,15}, {115,15}, {125,15}, {141,15}, {159,15}, {169,15}, {180,15}, {193,15}, {203,15}, {214,15}, - {3,27}, {16,27}, {26,27}, {36,27}, {47,27}, {57,27}, {68,27}, {78,27}, {89,27}, {99,27}, {109,27}, {120,27}, {130,27}, {143,27}, {159,27}, {169,27}, {180,27}, {193,27}, {203,27}, {214,27}, - {4,40}, {18,40}, {29,40}, {39,40}, {50,40}, {60,40}, {70,40}, {81,40}, {91,40}, {102,40},{112,40}, {123,40}, {139,40}, {224, 0}, {224,15}, {224,34}, {224,58}, {193,40}, {203,40}, {214,40}, - {7,52}, {23,52}, {34,52}, {44,52}, {55,52}, {65,52}, {76,52}, {86,52}, {96,52}, {107,52}, {117,52}, {137,52}, {169,52}, {193,52}, {203,52}, {214,52}, - {1,64}, {14,64}, {27,64}, {66,64}, {105,64}, {118,64}, {131,64}, {145,64}, {159,64}, {169,64}, {180,64}, {198,64}, {214,64}, - }, - { - // RGB Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - } -}; -#endif diff --git a/keyboards/keychron/k10_max/ansi/rgb/rules.mk b/keyboards/keychron/k10_max/ansi/rgb/rules.mk deleted file mode 100644 index 6e7633bfe0..0000000000 --- a/keyboards/keychron/k10_max/ansi/rgb/rules.mk +++ /dev/null @@ -1 +0,0 @@ -# This file intentionally left blank diff --git a/keyboards/keychron/k10_max/ansi/white/config.h b/keyboards/keychron/k10_max/ansi/white/config.h deleted file mode 100644 index 0a16cbf38c..0000000000 --- a/keyboards/keychron/k10_max/ansi/white/config.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#ifdef LED_MATRIX_ENABLE -/* LED matrix driver configuration */ -# define DRIVER_COUNT 1 -# define LED_MATRIX_LED_COUNT 108 -# define LED_MATRIX_VAL_STEP 16 - -# define DRIVER_CS_PINS \ - { B9 } - -/* Use first 9 channels of LED driver */ -# define SNLED27351_PHASE_CHANNEL MSKPHASE_9CHANNEL - -/* Set LED driver current */ -# define SNLED27351_CURRENT_TUNE \ - { 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56 } - -/* Set to infinit, which is use in USB mode by default */ -# define LED_MATRIX_TIMEOUT LED_MATRIX_TIMEOUT_INFINITE - -/* Allow shutdown of led driver to save power */ -# define LED_MATRIX_DRIVER_SHUTDOWN_ENABLE -/* Turn off backlight on low brightness to save power */ -# define LED_MATRIX_BRIGHTNESS_TURN_OFF_VAL 48 - -/* Indications */ -# define DIM_NUM_LOCK -# define NUM_LOCK_INDEX 36 - -# define LED_MATRIX_KEYPRESSES -#endif diff --git a/keyboards/keychron/k10_max/ansi/white/info.json b/keyboards/keychron/k10_max/ansi/white/info.json deleted file mode 100644 index 5b73b8e274..0000000000 --- a/keyboards/keychron/k10_max/ansi/white/info.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "usb": { - "pid": "0x0AA3", - "device_version": "1.0.0" - }, - "features": { - "led_matrix": true, - "encoder": false - }, - "indicators": { - "num_lock": "B2" - }, - "led_matrix": { - "driver": "snled27351_spi", - "sleep": true, - "animations": { - "none": true, - "solid": true, - "breathing": true, - "band_pinwheel": true, - "band_spiral": true, - "cycle_left_right": true, - "cycle_up_down": true, - "cycle_out_in": true, - "dual_beacon": true, - "solid_reactive_simple": true, - "solid_reactive_multiwide": true, - "solid_reactive_multinexus": true, - "solid_splash": true, - "wave_left_right": true, - "wave_up_down": true - } - } -} diff --git a/keyboards/keychron/k10_max/ansi/white/keymaps/default/keymap.c b/keyboards/keychron/k10_max/ansi/white/keymaps/default/keymap.c deleted file mode 100644 index 40db4abaf8..0000000000 --- a/keyboards/keychron/k10_max/ansi/white/keymaps/default/keymap.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H -#include "keychron_common.h" - -enum layers { - MAC_BASE, - MAC_FN, - WIN_BASE, - WIN_FN, -}; -// clang-format off -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_ansi_108( - KC_ESC, KC_BRID, KC_BRIU, KC_MCTRL, KC_LNPAD, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, BL_STEP, KC_F13, KC_F14, KC_F15, KC_F16, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, - KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), - - [MAC_FN] = LAYOUT_ansi_108( - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, BL_TOGG, _______, _______, _______, _______, - _______, BT_HST1, BT_HST2, BT_HST3, P2P4G, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), - - [WIN_BASE] = LAYOUT_ansi_108( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_CTANA, BL_STEP, _______, _______, _______, _______, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, - KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), - - [WIN_FN] = LAYOUT_ansi_108( - _______, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, BL_TOGG, _______, _______, _______, _______, - _______, BT_HST1, BT_HST2, BT_HST3, P2P4G, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______) -}; - -// clang-format on -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if (!process_record_keychron_common(keycode, record)) { - return false; - } - return true; -} diff --git a/keyboards/keychron/k10_max/ansi/white/keymaps/via/keymap.c b/keyboards/keychron/k10_max/ansi/white/keymaps/via/keymap.c deleted file mode 100644 index 40db4abaf8..0000000000 --- a/keyboards/keychron/k10_max/ansi/white/keymaps/via/keymap.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H -#include "keychron_common.h" - -enum layers { - MAC_BASE, - MAC_FN, - WIN_BASE, - WIN_FN, -}; -// clang-format off -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [MAC_BASE] = LAYOUT_ansi_108( - KC_ESC, KC_BRID, KC_BRIU, KC_MCTRL, KC_LNPAD, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, BL_STEP, KC_F13, KC_F14, KC_F15, KC_F16, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, - KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), - - [MAC_FN] = LAYOUT_ansi_108( - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, BL_TOGG, _______, _______, _______, _______, - _______, BT_HST1, BT_HST2, BT_HST3, P2P4G, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), - - [WIN_BASE] = LAYOUT_ansi_108( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_CTANA, BL_STEP, _______, _______, _______, _______, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, - KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), - - [WIN_FN] = LAYOUT_ansi_108( - _______, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, BL_TOGG, _______, _______, _______, _______, - _______, BT_HST1, BT_HST2, BT_HST3, P2P4G, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, BL_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______) -}; - -// clang-format on -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if (!process_record_keychron_common(keycode, record)) { - return false; - } - return true; -} diff --git a/keyboards/keychron/k10_max/ansi/white/keymaps/via/rules.mk b/keyboards/keychron/k10_max/ansi/white/keymaps/via/rules.mk deleted file mode 100644 index 1e5b99807c..0000000000 --- a/keyboards/keychron/k10_max/ansi/white/keymaps/via/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/keychron/k10_max/ansi/white/rules.mk b/keyboards/keychron/k10_max/ansi/white/rules.mk deleted file mode 100644 index 6e7633bfe0..0000000000 --- a/keyboards/keychron/k10_max/ansi/white/rules.mk +++ /dev/null @@ -1 +0,0 @@ -# This file intentionally left blank diff --git a/keyboards/keychron/k10_max/ansi/white/white.c b/keyboards/keychron/k10_max/ansi/white/white.c deleted file mode 100644 index b17a57e6f9..0000000000 --- a/keyboards/keychron/k10_max/ansi/white/white.c +++ /dev/null @@ -1,172 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "quantum.h" - -// clang-format off -#ifdef LED_MATRIX_ENABLE -const snled27351_led_t g_snled27351_leds[LED_MATRIX_LED_COUNT] = { -/* Refer to SNLED27351 manual for these locations - * driver - * | LED address - * | | */ - {0, A_16}, - {0, A_14}, - {0, A_13}, - {0, A_12}, - {0, A_11}, - {0, A_10}, - {0, A_9}, - {0, A_8}, - {0, A_7}, - {0, A_6}, - {0, A_5}, - {0, A_4}, - {0, A_3}, - {0, A_2}, - {0, A_1}, - {0, G_1}, - {0, G_2}, - {0, G_3}, - {0, G_4}, - - {0, B_16}, - {0, B_15}, - {0, B_14}, - {0, B_13}, - {0, B_12}, - {0, B_11}, - {0, B_10}, - {0, B_9}, - {0, B_8}, - {0, B_7}, - {0, B_6}, - {0, B_5}, - {0, B_4}, - {0, B_3}, - {0, B_2}, - {0, B_1}, - {0, H_1}, - {0, H_2}, - {0, H_3}, - {0, H_4}, - - {0, C_16}, - {0, C_15}, - {0, C_14}, - {0, C_13}, - {0, C_12}, - {0, C_11}, - {0, C_10}, - {0, C_9}, - {0, C_8}, - {0, C_7}, - {0, C_6}, - {0, C_5}, - {0, C_4}, - {0, C_3}, - {0, C_2}, - {0, C_1}, - {0, G_6}, - {0, G_7}, - {0, G_8}, - {0, G_9}, - - {0, D_16}, - {0, D_15}, - {0, D_14}, - {0, D_13}, - {0, D_12}, - {0, D_11}, - {0, D_10}, - {0, D_9}, - {0, D_8}, - {0, D_7}, - {0, D_6}, - {0, D_5}, - {0, D_4}, - {0, G_5}, - {0, H_5}, - {0, G_10}, - {0, H_10}, - {0, H_7}, - {0, H_8}, - {0, H_9}, - - {0, E_16}, - {0, E_14}, - {0, E_13}, - {0, E_12}, - {0, E_11}, - {0, E_10}, - {0, E_9}, - {0, E_8}, - {0, E_7}, - {0, E_6}, - {0, E_5}, - {0, E_3}, - {0, E_1}, - {0, H_6}, - {0, H_11}, - {0, H_12}, - - {0, F_16}, - {0, F_15}, - {0, F_14}, - {0, F_10}, - {0, F_6}, - {0, F_5}, - {0, F_4}, - {0, F_3}, - {0, F_2}, - {0, F_1}, - {0, G_13}, - {0, G_11}, - {0, G_12}, -}; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, __, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 }, - { 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 }, - { 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58 }, - { 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78 }, - { 79, __, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, __, 90, __, 91, __, 92, 93, 94 }, - { 95, 96, 97, __, __, __, 98, __, __, __, 99, 100, 101, 102, 103, 104, 105, __, 106, 107 }, - }, - { - // LED Index to Physical Position - {0, 0}, {21, 0}, {31, 0}, {42, 0}, {52, 0}, {68, 0}, {78, 0}, {89, 0}, {99, 0}, {115, 0}, {125, 0}, {136, 0}, {146, 0}, {159, 0}, {169, 0}, {180, 0}, {193, 0}, {203, 0}, {214, 0}, - {0,15}, {10,15}, {21,15}, {31,15}, {42,15}, {52,15}, {63,15}, {73,15}, {83,15}, {94,15}, {104,15}, {115,15}, {125,15}, {141,15}, {159,15}, {169,15}, {180,15}, {193,15}, {203,15}, {214,15}, - {3,27}, {16,27}, {26,27}, {36,27}, {47,27}, {57,27}, {68,27}, {78,27}, {89,27}, {99,27}, {109,27}, {120,27}, {130,27}, {143,27}, {159,27}, {169,27}, {180,27}, {193,27}, {203,27}, {214,27}, - {4,40}, {18,40}, {29,40}, {39,40}, {50,40}, {60,40}, {70,40}, {81,40}, {91,40}, {102,40},{112,40}, {123,40}, {139,40}, {224, 0}, {224,15}, {224,34}, {224,58}, {193,40}, {203,40}, {214,40}, - {7,52}, {23,52}, {34,52}, {44,52}, {55,52}, {65,52}, {76,52}, {86,52}, {96,52}, {107,52}, {117,52}, {137,52}, {169,52}, {193,52}, {203,52}, {214,52}, - {1,64}, {14,64}, {27,64}, {66,64}, {105,64}, {118,64}, {131,64}, {145,64}, {159,64}, {169,64}, {180,64}, {198,64}, {214,64}, - }, - { - // LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - } -}; -#endif diff --git a/keyboards/keychron/k10_max/board.h b/keyboards/keychron/k10_max/board.h deleted file mode 100644 index d044339908..0000000000 --- a/keyboards/keychron/k10_max/board.h +++ /dev/null @@ -1,225 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include_next - -// clang-format off - -/* Set GPIOA_SWDIO to INPUT and NOT FLOATING */ -#undef VAL_GPIOA_MODER -#define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_BUTTON) | \ - PIN_MODE_INPUT(GPIOA_PIN1) | \ - PIN_MODE_INPUT(GPIOA_PIN2) | \ - PIN_MODE_INPUT(GPIOA_PIN3) | \ - PIN_MODE_ALTERNATE(GPIOA_CS43L22_LRCK) |\ - PIN_MODE_ALTERNATE(GPIOA_L3GD20_SCL) | \ - PIN_MODE_ALTERNATE(GPIOA_L3GD20_SD0) | \ - PIN_MODE_ALTERNATE(GPIOA_L3GD20_SDI) | \ - PIN_MODE_INPUT(GPIOA_PIN8) | \ - PIN_MODE_INPUT(GPIOA_VBUS_FS) | \ - PIN_MODE_ALTERNATE(GPIOA_OTG_FS_ID) | \ - PIN_MODE_ALTERNATE(GPIOA_OTG_FS_DM) | \ - PIN_MODE_ALTERNATE(GPIOA_OTG_FS_DP) | \ - PIN_MODE_INPUT(GPIOA_SWDIO) | \ - PIN_MODE_INPUT(GPIOA_SWCLK) | \ - PIN_MODE_INPUT(GPIOA_PIN15)) - -#undef VAL_GPIOA_PUPDR -#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(GPIOA_BUTTON) | \ - PIN_PUPDR_PULLUP(GPIOA_PIN1) | \ - PIN_PUPDR_PULLUP(GPIOA_PIN2) | \ - PIN_PUPDR_PULLUP(GPIOA_PIN3) | \ - PIN_PUPDR_FLOATING(GPIOA_CS43L22_LRCK) |\ - PIN_PUPDR_FLOATING(GPIOA_L3GD20_SCL) | \ - PIN_PUPDR_PULLUP(GPIOA_L3GD20_SD0) | \ - PIN_PUPDR_PULLUP(GPIOA_L3GD20_SDI) | \ - PIN_PUPDR_PULLDOWN(GPIOA_PIN8) | \ - PIN_PUPDR_FLOATING(GPIOA_VBUS_FS) | \ - PIN_PUPDR_FLOATING(GPIOA_OTG_FS_ID) | \ - PIN_PUPDR_FLOATING(GPIOA_OTG_FS_DM) | \ - PIN_PUPDR_FLOATING(GPIOA_OTG_FS_DP) | \ - PIN_PUPDR_PULLDOWN(GPIOA_SWDIO) | \ - PIN_PUPDR_PULLUP(GPIOA_SWCLK) | \ - PIN_PUPDR_PULLUP(GPIOA_PIN15)) - -#undef VAL_GPIOB_MODER -#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \ - PIN_MODE_INPUT(GPIOB_PIN1) | \ - PIN_MODE_INPUT(GPIOB_PIN2) | \ - PIN_MODE_INPUT(GPIOB_SWO) | \ - PIN_MODE_INPUT(GPIOB_PIN4) | \ - PIN_MODE_INPUT(GPIOB_PIN5) | \ - PIN_MODE_INPUT(GPIOB_LSM303DLHC_SCL) | \ - PIN_MODE_INPUT(GPIOB_PIN7) | \ - PIN_MODE_INPUT(GPIOB_PIN8) | \ - PIN_MODE_INPUT(GPIOB_LSM303DLHC_SDA) | \ - PIN_MODE_INPUT(GPIOB_MP45DT02_CLK_IN) |\ - PIN_MODE_INPUT(GPIOB_PIN11) | \ - PIN_MODE_INPUT(GPIOB_PIN12) | \ - PIN_MODE_INPUT(GPIOB_PIN13) | \ - PIN_MODE_INPUT(GPIOB_PIN14) | \ - PIN_MODE_INPUT(GPIOB_PIN15)) - -#undef VAL_GPIOB_PUPDR -#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLDOWN(GPIOB_PIN0) | \ - PIN_PUPDR_PULLDOWN(GPIOB_PIN1) | \ - PIN_PUPDR_PULLDOWN(GPIOB_PIN2) | \ - PIN_PUPDR_PULLDOWN(GPIOB_SWO) | \ - PIN_PUPDR_PULLDOWN(GPIOB_PIN4) | \ - PIN_PUPDR_PULLDOWN(GPIOB_PIN5) | \ - PIN_PUPDR_PULLDOWN(GPIOB_LSM303DLHC_SCL) |\ - PIN_PUPDR_PULLDOWN(GPIOB_PIN7) | \ - PIN_PUPDR_PULLDOWN(GPIOB_PIN8) | \ - PIN_PUPDR_PULLDOWN(GPIOB_LSM303DLHC_SDA) |\ - PIN_PUPDR_PULLDOWN(GPIOB_MP45DT02_CLK_IN) |\ - PIN_PUPDR_PULLDOWN(GPIOB_PIN11) | \ - PIN_PUPDR_PULLDOWN(GPIOB_PIN12) | \ - PIN_PUPDR_PULLDOWN(GPIOB_PIN13) | \ - PIN_PUPDR_PULLUP(GPIOB_PIN14) | \ - PIN_PUPDR_PULLUP(GPIOB_PIN15)) - -#undef VAL_GPIOB_AFRL -#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_PIN0, 0U) | \ - PIN_AFIO_AF(GPIOB_PIN1, 0U) | \ - PIN_AFIO_AF(GPIOB_PIN2, 0U) | \ - PIN_AFIO_AF(GPIOB_SWO, 0U) | \ - PIN_AFIO_AF(GPIOB_PIN4, 0U) | \ - PIN_AFIO_AF(GPIOB_PIN5, 0U) | \ - PIN_AFIO_AF(GPIOB_LSM303DLHC_SCL, 0) | \ - PIN_AFIO_AF(GPIOB_PIN7, 0U)) - -#undef VAL_GPIOB_AFRH -#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0U) | \ - PIN_AFIO_AF(GPIOB_LSM303DLHC_SDA, 0) | \ - PIN_AFIO_AF(GPIOB_MP45DT02_CLK_IN, 0U) |\ - PIN_AFIO_AF(GPIOB_PIN11, 0U) | \ - PIN_AFIO_AF(GPIOB_PIN12, 0U) | \ - PIN_AFIO_AF(GPIOB_PIN13, 0U) | \ - PIN_AFIO_AF(GPIOB_PIN14, 0U) | \ - PIN_AFIO_AF(GPIOB_PIN15, 0U)) - -/* C5 Need to be pulldown */ -#undef VAL_GPIOC_MODER -#define VAL_GPIOC_MODER (PIN_MODE_INPUT(GPIOC_OTG_FS_POWER_ON) |\ - PIN_MODE_INPUT(GPIOC_PIN1) | \ - PIN_MODE_INPUT(GPIOC_PIN2) | \ - PIN_MODE_INPUT(GPIOC_CS43L22_AIN4x) | \ - PIN_MODE_INPUT(GPIOC_PIN4) | \ - PIN_MODE_INPUT(GPIOC_PIN5) | \ - PIN_MODE_INPUT(GPIOC_PIN6) | \ - PIN_MODE_INPUT(GPIOC_CS43L22_MCLK) | \ - PIN_MODE_INPUT(GPIOC_PIN8) | \ - PIN_MODE_INPUT(GPIOC_PIN9) | \ - PIN_MODE_INPUT(GPIOC_CS43L22_SCLK) | \ - PIN_MODE_INPUT(GPIOC_PIN11) | \ - PIN_MODE_INPUT(GPIOC_CS43L22_SDIN) | \ - PIN_MODE_INPUT(GPIOC_PIN13) | \ - PIN_MODE_INPUT(GPIOC_OSC32_IN) | \ - PIN_MODE_INPUT(GPIOC_OSC32_OUT)) - -#undef VAL_GPIOC_PUPDR -#define VAL_GPIOC_PUPDR (PIN_PUPDR_PULLUP(GPIOC_OTG_FS_POWER_ON) |\ - PIN_PUPDR_PULLUP(GPIOC_PIN1) | \ - PIN_PUPDR_PULLUP(GPIOC_PIN2) | \ - PIN_PUPDR_PULLUP(GPIOC_CS43L22_AIN4x) |\ - PIN_PUPDR_PULLUP(GPIOC_PIN4) | \ - PIN_PUPDR_PULLDOWN(GPIOC_PIN5) | \ - PIN_PUPDR_PULLDOWN(GPIOC_PIN6) | \ - PIN_PUPDR_PULLUP(GPIOC_CS43L22_MCLK) | \ - PIN_PUPDR_PULLDOWN(GPIOC_PIN8) | \ - PIN_PUPDR_PULLDOWN(GPIOC_PIN9) | \ - PIN_PUPDR_PULLUP(GPIOC_CS43L22_SCLK) | \ - PIN_PUPDR_PULLUP(GPIOC_PIN11) | \ - PIN_PUPDR_PULLUP(GPIOC_CS43L22_SDIN) | \ - PIN_PUPDR_PULLUP(GPIOC_PIN13) | \ - PIN_PUPDR_PULLUP(GPIOC_OSC32_IN) | \ - PIN_PUPDR_PULLUP(GPIOC_OSC32_OUT)) - -/* Set all GPIOD pins to INPUT & PULLUP to avoid FLOATING */ -#undef VAL_GPIOD_MODER -#define VAL_GPIOD_MODER (PIN_MODE_INPUT(GPIOD_PIN0) | \ - PIN_MODE_INPUT(GPIOD_PIN1) | \ - PIN_MODE_INPUT(GPIOD_PIN2) | \ - PIN_MODE_INPUT(GPIOD_PIN3) | \ - PIN_MODE_INPUT(GPIOD_CS43L22_RESET) | \ - PIN_MODE_INPUT(GPIOD_OverCurrent) | \ - PIN_MODE_INPUT(GPIOD_PIN6) | \ - PIN_MODE_INPUT(GPIOD_PIN7) | \ - PIN_MODE_INPUT(GPIOD_PIN8) | \ - PIN_MODE_INPUT(GPIOD_PIN9) | \ - PIN_MODE_INPUT(GPIOD_PIN10) | \ - PIN_MODE_INPUT(GPIOD_PIN11) | \ - PIN_MODE_INPUT(GPIOD_LED4) | \ - PIN_MODE_INPUT(GPIOD_LED3) | \ - PIN_MODE_INPUT(GPIOD_LED5) | \ - PIN_MODE_INPUT(GPIOD_LED6)) - -#undef VAL_GPIOD_PUPDR -#define VAL_GPIOD_PUPDR (PIN_PUPDR_PULLUP(GPIOD_PIN0) | \ - PIN_PUPDR_PULLUP(GPIOD_PIN1) | \ - PIN_PUPDR_PULLUP(GPIOD_PIN2) | \ - PIN_PUPDR_PULLUP(GPIOD_PIN3) | \ - PIN_PUPDR_PULLUP(GPIOD_CS43L22_RESET) |\ - PIN_PUPDR_PULLUP(GPIOD_OverCurrent) | \ - PIN_PUPDR_PULLUP(GPIOD_PIN6) | \ - PIN_PUPDR_PULLUP(GPIOD_PIN7) | \ - PIN_PUPDR_PULLUP(GPIOD_PIN8) | \ - PIN_PUPDR_PULLUP(GPIOD_PIN9) | \ - PIN_PUPDR_PULLUP(GPIOD_PIN10) | \ - PIN_PUPDR_PULLUP(GPIOD_PIN11) | \ - PIN_PUPDR_PULLUP(GPIOD_LED4) | \ - PIN_PUPDR_PULLUP(GPIOD_LED3) | \ - PIN_PUPDR_PULLUP(GPIOD_LED5) | \ - PIN_PUPDR_PULLUP(GPIOD_LED6)) - -/* Set all GPIOE pins to INPUT & PULLUP to avoid FLOATING */ -#undef VAL_GPIOE_MODER -#define VAL_GPIOE_MODER (PIN_MODE_INPUT(GPIOE_L3GD20_INT1) | \ - PIN_MODE_INPUT(GPIOE_L3GD20_INT2) | \ - PIN_MODE_INPUT(GPIOE_LSM303DLHC_DRDY) |\ - PIN_MODE_INPUT(GPIOE_L3GD20_CS) | \ - PIN_MODE_INPUT(GPIOE_LSM303DLHC_INT1) |\ - PIN_MODE_INPUT(GPIOE_LSM303DLHC_INT2) |\ - PIN_MODE_INPUT(GPIOE_PIN6) | \ - PIN_MODE_INPUT(GPIOE_PIN7) | \ - PIN_MODE_INPUT(GPIOE_PIN8) | \ - PIN_MODE_INPUT(GPIOE_PIN9) | \ - PIN_MODE_INPUT(GPIOE_PIN10) | \ - PIN_MODE_INPUT(GPIOE_PIN11) | \ - PIN_MODE_INPUT(GPIOE_PIN12) | \ - PIN_MODE_INPUT(GPIOE_PIN13) | \ - PIN_MODE_INPUT(GPIOE_PIN14) | \ - PIN_MODE_INPUT(GPIOE_PIN15)) - -#undef VAL_GPIOE_PUPDR -#define VAL_GPIOE_PUPDR (PIN_PUPDR_PULLUP(GPIOE_L3GD20_INT1) | \ - PIN_PUPDR_PULLUP(GPIOE_L3GD20_INT2) | \ - PIN_PUPDR_PULLUP(GPIOE_LSM303DLHC_DRDY) |\ - PIN_PUPDR_PULLUP(GPIOE_L3GD20_CS) | \ - PIN_PUPDR_PULLUP(GPIOE_LSM303DLHC_INT1) |\ - PIN_PUPDR_PULLUP(GPIOE_LSM303DLHC_INT2) |\ - PIN_PUPDR_PULLUP(GPIOE_PIN6) | \ - PIN_PUPDR_PULLUP(GPIOE_PIN7) | \ - PIN_PUPDR_PULLUP(GPIOE_PIN8) | \ - PIN_PUPDR_PULLUP(GPIOE_PIN9) | \ - PIN_PUPDR_PULLUP(GPIOE_PIN10) | \ - PIN_PUPDR_PULLUP(GPIOE_PIN11) | \ - PIN_PUPDR_PULLUP(GPIOE_PIN12) | \ - PIN_PUPDR_PULLUP(GPIOE_PIN13) | \ - PIN_PUPDR_PULLUP(GPIOE_PIN14) | \ - PIN_PUPDR_PULLUP(GPIOE_PIN15)) diff --git a/keyboards/keychron/k10_max/config.h b/keyboards/keychron/k10_max/config.h deleted file mode 100644 index 4c33f9dd2b..0000000000 --- a/keyboards/keychron/k10_max/config.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright 2024 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#if defined(RGB_MATRIX_ENABLE) || defined(LED_MATRIX_ENABLE) -/* Hardware configuration */ -# define SPI_DRIVER SPID1 -# define SPI_SCK_PIN A5 -# define SPI_MISO_PIN A6 -# define SPI_MOSI_PIN A7 -# define LED_DRIVER_SHUTDOWN_PIN B7 -# define SNLED23751_SPI_DIVISOR 16 - -# ifdef LK_WIRELESS_ENABLE -# define BT_HOST_LED_MATRIX_LIST \ - { 20, 21, 22 } - -# define P2P4G_HOST_LED_MATRIX_LIST \ - { 23 } - -# define BAT_LEVEL_LED_LIST \ - { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 } - -/* Backlit disable timeout when keyboard is disconnected(unit: second) */ -# define DISCONNECTED_BACKLIGHT_DISABLE_TIMEOUT 40 - -/* Backlit disable timeout when keyboard is connected(unit: second) */ -# define CONNECTED_BACKLIGHT_DISABLE_TIMEOUT 600 - -/* Reinit LED driver on tranport changed */ -# define REINIT_LED_DRIVER 1 -# endif -#endif - -#ifdef LK_WIRELESS_ENABLE -/* Hardware configuration */ -# define P2P4_MODE_SELECT_PIN A9 -# define BT_MODE_SELECT_PIN A10 - -# define LKBT51_RESET_PIN C4 -# define LKBT51_INT_INPUT_PIN B1 -# define BLUETOOTH_INT_OUTPUT_PIN A4 - -# define USB_POWER_SENSE_PIN B0 -# define USB_POWER_CONNECTED_LEVEL 0 - -# define BAT_CHARGING_PIN B13 -# define BAT_CHARGING_LEVEL 0 - -# define BAT_LOW_LED_PIN C5 -# define BAT_LOW_LED_PIN_ON_STATE 1 - -# define BT_HOST_DEVICES_COUNT 3 - -# define BT_HOST_LED_PIN_LIST \ - { B15, B15, B15 } -# define HOST_LED_PIN_ON_STATE 0 - -# define P24G_HOST_DEVICES_COUNT 1 - -# define P24G_HOST_LED_PIN_LIST \ - { B14 } - -/* Keep USB connection in blueooth mode */ -# define KEEP_USB_CONNECTION_IN_WIRELESS_MODE - -/* Enable bluetooth NKRO */ -# define WIRELESS_NKRO_ENABLE - -/* Raw hid command for factory test and bluetooth DFU */ -# define RAW_HID_CMD 0xAA ... 0xAB -#else -/* Raw hid command for factory test */ -# define RAW_HID_CMD 0xAB -#endif - -/* Factory test keys */ -#define FN_KEY_1 MO(1) -#define FN_KEY_2 MO(3) - -#define MATRIX_IO_DELAY 10 diff --git a/keyboards/keychron/k10_max/firmware/keychron_k10_max_ansi_rgb_via.bin b/keyboards/keychron/k10_max/firmware/keychron_k10_max_ansi_rgb_via.bin deleted file mode 100644 index 2b0e78adbfd4a63266f347adc327d8d8cba9ef86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95608 zcmeFad3;k<-amfslBMYu+5&AUaGMki4NF+mDkvc-x1}l6b%qffi#SdZXN=49JgMXJ zC0HD*jw6aQgCHY{&V!<36RbnU5)|AUj$C#{%O9+Zq9fY!dN|lnVhj3ft$q{XCPdP z5SWKJ1l@ejI2Yk+gu4&|2xH~Wem0}b+28Da`Ru=s``bKce}9BJI?w9YchdezyJzRg zT7bSHT#axKLOa6Q>1V&MSAOnF61TqlFKp+Ew3AOnF61TqlF zKp+Ew3AOnF61TqlFKp+Ew3AOnF61TqlFKp+Ew3AOnF6 z1TqlFKp+Ew3AOnF61TqlFKp+Ew3AOnF61TqlFKp+Ew3 zAOnH_6$Ea1@%&oI=RTmqmy76Ol+H2Z0cy@hj4Ur^Mo_f5I7Ad_@tFYzUj{5br0(vx7HEC{a?;SzpkG zSznp&eMQL$A8OhmcYbNUxAP=@fLL1w#d*bLXM}Rgk0WH*Fk0& zL&R1VYM|;|1P7tFbvzd{=KSOf@y~?nm5&s$=c6xptJvnPK^ry39ise8nb?;{?sYvZ zuj>vb?(DxTz$N&BS7Q<oKTm-PvPKBhYSbn3=OT+aTojr_%Ht5=mi8Qhyxs4;1tU)?KIlcXX3KU!{4Br$cq zpPDxQ4{{qeURTXmIeYcaPbZP-lLJSc#QNG7#64HWsPDedmDNpV5&DgvOh+u|kkj#d z6D_C7?7GN(F8;kcU8H}=zo~Q$`oT%RmC3B0F!HYWD9U%Je`Vt$l}`GQ|M9*Y4kM|- z7*gDHDJPJO4;Ye#@z9<*M_N zB=x(cET=Y(x%`peEhYW?{YLr8zC6*{D>xsGz8;edd!3eqVYt3m$dM9;K`x;mD02@n zNG>CI4KU?dCF{WPVr>*{0!00aj?ig=eQ=RV15Y0;W zWeG{vY9VW2m=o~IrkXE_NHNQUUrVVSMNs4r+@1b z6Z{~9gdm{xsyRn~>zaku*H&+zbPwh}e%g?nFdvw*M4!wXxNj7?z?7;9NA7bKb@Lam zseY?e?j>?nbhd1hby2;1;`3rz`P{Sg=_4I|yz#oeoII{-S5%gJqmuk^)G0@zVfklK ze&L$xc~OU)6=k^Nih65ENRSH^&Q2XOW3NiTOsLGiu?Z?d2kZ%l|6>cGS;eD=I zVfO9Xdpbg2SklXtBP_8{gSdeb1F_PR{P&ED?&{@qKkw!AcO`00?MmEz>gS1?(@!Pt zKK;v%uOswjRxeKt{JcQA&X!(IC=4hOB6(}HwrA->=gLBrp=vzk@(mHrF@Dg$fe*3g z!Nr^dHLxCr1kWU&VAqFuPqB}cwSzXyKrpsT7O|F;=g{h;P)DqVUZJkgYwY~53L^am zVJpJMs>?*0FYa>jp|xcK%@+#21`luHo)-F?B!?CzIccU>XmfOu z&{%m^m$BXG;Vh+IHU7FvXgI;qI~0yyta9|Kkm~^=sl!-Rg)2Q>8w^St7EJ@tIN@TUmIGcx2jzog@Bc4FNqZ3xhsI*b@v4b z{bPc&>SUv(T+WT@$^DAx$f1uWxZQ-_oybLcZz3C`7VMvgiG3)X-PU>1;Z);+P`aH; z^z-a?7XO2GR%z}0I>DnI={xN-Y3*FDwe#XXZ0EoKrX4ebBh68L9me#`M+}}xH@E{5 zXr0+vTr(-ao@#te$lS@`!1{LnDC}dYtsSQ2+#^>6OrBET6D~ed=@Tlm!ey9gf?3de zBzaX6gQH!W=`lDmd}8(Ro?}fypty$N9sBm;ZS0>;>x~c*J;&BfLZ0k^8lM_U<0H#! zZfDRJ?Dt|eN+N{jCmI1;DN!59^K4(2js9<~F#)z_C!x77307`5n~CQXJ-!bOnHX-^ zli_p@HQs+wYCwu7g+lr zLjo-sTGHR@$fA65qGw|LmLcLGcFPBng_JkRIrNF4wd-XwGL}& z^y_4TSjiTwBuA5My&kCz8jVi=`oj+KIJEYIo{5bN{iilJ!V9bOT9dGDqlwJ-fKOAR4x~LIrmn+#`;b-KUkYs)vx$fRyDP z-Dt`lEoGwmVzjp5xUyiQ-Ak;$QOM?2g*Z5xNSLWUUkGni7)5+~h?hEILVlHZ99HAX zWVx)DIC`&w^{*`SkaHw?D*E}kS|t-IsP{+9Bs`0MWZP9ZY?B1CkQc>nzh!wkG@W$u$)`g%kZ>Oq!<-q?d&|5Y-E5>j& zo))d_N>F(8o9c!xkCq0xJ~tVs6iC%RZa#M*qiCFDs$6`!?)m(FF=w@6q0v@ioO2H` zE<=dpeJ!3H2oZ!R!uWfMF&AMf!r3%$Y+W$Cc3^F=Ic0Q!t&<|eF`Bp?c%a5}fL(tC zJ^TRSHq6v58cpQrjr&>@ zKw*wnHW#z~YtUU~*ckvVz$y?UYnwq|ff3cIa_owoC##$s-KMP>V|&A(@iJ0wsLi40 zD+abR`1N&K@ET|^rSlXw8bL!3g0>$(*oMHyI8$rawA@r@Z!KtDUG{142^S|D!-iUm zg-;6DA$Vn`pOdOOi8LG~p|P^8o~rh&`JxlCc>GFCzy$1V6Ym`$VVx20HH ztQ;#Nc#2!Gx3wNBUFll6#9K2~pRwIQuSo$K=q2luu^l~bGSJ_oM2vl_>){ZQI4PYr z9xz5uFN53J?`%9(?P~l=Rj{pysPVVd;=pv2Cia@J8vlz*Z0@iHyUnWomgP3AvBwZ| zVc3rJ^TP%zrFh%??kU)7474;=ik=iBFK;i86nj>!^8|Xzw$?COBu0uf%GTJrwZ=eo zsRHCo&qSyrcexFHz6dqtbz6PhLRQz{h^?_Z%GrA&dhATZ{%Lq;S$7oh46*(`3YaXw zli>{;w-+>hWyh4|oW)#jlg-mjG-u?eE!Tmse_WZ}Qi9P8bQITe7OC7s)!_-XQaRV+ z?7!1u0-hAqvNtDE`iJwicR$|094^D&;dN%wSN3PoP%^6?rDZcxjt`ry))sv&OO-4< zV*c_nG4jrpOa>vmlZd?2+@4o2VNCChI8X1JztvUHZJ_s!NR3(b4TJu|U2D>G^K!*( z-L;0%M@FNwsAnJBukXNkSUt4;!8ScGd!kIrC(Da0*n=O;rk|$fEF0gEja8iO&Guz? zaMo<^e0gUHnbzX+L^fIP2Zj1SRx;;)g>y8}X9Tuy6otNLy%H%p$F8zt!TS}x1`=V9%r2)6Y!QsOE&!>zKNB=nzLk;tMS`HRoZ-? zUFIs}DHttNgfi7-JvhoRW(C)qQOlclvr-i(o>9XU_8j~qC0qbMEZ>@Ka zZx@1l;9%hiZ=cV4GkaTmv%PuO&Fh;_+)S+4<3OLhP9y444~+H0Y5BQ^31zjDmXq>q z`pHOX-A}!SKMH$VP8tZAX$+Og<=|4*w(dcAylIlD&ueYA-@LYY{mr|Y_uTwSzzA+r zjZa8$kMQ!z$=P)8$j&A;o|iB<4hPlv?v$>USUK=wdhi@x@Jp{8FjVwouGm-(Vy?XH zIrVxu7g&f{Lixu>EY_#IvrJa+_1@306Wx6l#6|S|@zK7U+jHy3X7=t8tJPF%1@0_K zU{yGb^u5%Q(<||OceJz_bIhQ4=K&}8eqo2X@iLt3b}8@rC56sY+7w%`jd?jz!8iHT=QJf%Et$a>#2 z8ee=S{t@L9{j~RY43$YclrjgY{6k2f8-zoB?gD53C$7ugyF)_XoxR@SF%td$&z_3UP4t-<&{8^aEz)XYh4Ncn{Js6SkGO>Lf! z%>HrsxZ-4=ehd)SX!f5B??&e|{d7TPUcoWbqRyBjXgVEYMdl#~hg^cTX9waM@Mhg?HH|`2ch2t>6#B zC0&o(r0^5Ay6|{5uMhCnE24t+vZ&5_NmOrL5j9xrqeg38RDAZ$=#N%cRzDQv=DrW-R;CNbfj)TEi)QmTiVQm}`a<*s_^Lo;m+uz)?;|#Fwbu_n z6E(>*u!?_{dMe6z3$|xYKqy5hLGXcA0ymckzGv*Byg1_aUAd66FYJ2N*Wx?kJ`&vG zIyW-OKEI1t0N=SY!p9!qnH??G2_ zsMLFHGfydB6vB*5Ypg85*tR6E^*s^$9#`kG%XLc}@=y>kT%yLG-XC1e_IH!~ZWJ*a zo3%Z9O6`;t#n>^j={*Ty8du?Hf~3oF77@BoiRKd%y+HY%A}+Mje4a@pA~a;&Mcaep zsj4e%iAK!e3t0)4AKaH#LQ?EaWBDI-J{c@(F)+>yyn~4rD3Wz;ix+g`Fl3Ngz-A=^ z*Pyh%nAf zqzhj%cbcImhFsEQ@6dTx-jOZ^?G)sG67plbtW75C5X)7!L2gsk_`BewS&M2s6iT;z ze@D7+=Ju5VL%kJs8R!N@4_;VmG@4=rc;& zsoOV9=+0f9yJG#i7Agtr*BI#4iqz-;zqws;^_y?q>e6>tu6uRBS@@8Cb;#N{zmdUY ztS(kB^Bxe&MOmCvIXNUFl%G4o);e8dnmf2Yr*Xs&fl{(5p5lcD{bweb#OBXpx5c*t`XzNSAC zyy<;X=~>=DxtwCG3|-%y1~MIAd9mPwuB`9{P31J-$N_8ffVKAocPqta?z~uV&C;*m zBeQ;hbnsa;U&nIX>*Vwg1y{UJ?DdfwTG+bD?trd7dhI$=`ATFhDE8XhPBanwV0i5s zaAS5FUbF6r*3X*kwM#nEsk~okCH6hx?CP(g0-Y*6Q@Zvx-cM!?gr9cp?4l_1mvABV z=NEzgPZe01vbyo1wYROkZCBIUrb7P-Xdc(ByU%s+dj+ke^6v23b%oV$M)}Gjj8DjE z#rS?1t!yFowlL{gh1r}+8iCtNidfg)M(8JrwRaHv6QB!gQaUnBVTWn*_mFBPF^v&KL5|(_VUS? znW*unQXCynXn^s~I;toIwL&>(xgSA@X`DeIbMER?S7|mf?dYzqv zc47aBQKK)$c0CPbg`+BhYS8*zF@( z(84m^(qGlufR5g+=zB!kn<~cpt-#06Ba+N?2E}V3!_=@I)TdJM7gNAt=%OZ|HypID z#Y2q#GrjP>!1&tn%k^}BG8NAs(bK?)2zsWc-;B()>AOk!6iEQr;BcnmAHKW?nkgu3 z;<}Mk{0}L?mZi~B-mZhz3L4JpRZUIM;-+l`%vQ;C6%PXrXSZ`V+Br6?r~f_L&i>JM ziqEvO`%F8L;Z(fkOgrMgZO71lNk9(?-Q;O;<%f%9q3vo#?9$-s@Jny}B;Elp;ND%!=hh}><(t;rZD*&^@9#Asab-lX zwMCxO_^eCR>m&pHoywtK6SV&P3^NTrc3IAuz7X^UyCeUiRzlE9+^?0Gt9}OlMQLI4 z#Ppb3@Z9-xjy#4irgLOzRqazX`^yE9Da$oGOc)d_RxL z<;r~tJ1l1U!eL_jEG)@JdLYR(KL&b<`mUs-*Ny0)w_vN&Kx@=6Vpbt$;b_doTFe2& z%uBrvEf||4)(>xc{_>&cl|}DKB4yDSzoggb!{sg9q9Uq_ zpGLf$tAUfoc2Uz8v%bM@*2wgoZK(SN1fO-MZZYoYVTxC z7Cn*3Iurj9_?uNjVvic%1a0Uq!(ghX4 z#=G4a;vntLZe;clXP^5tHaI_YD6D`Wvecly=%p#(w9c5oq| zpglr=?HB2P0h5>&{*q;v))qsP*`a;kE zUvt8(X*?M$ZcR9~cPHL|lDJ5FXYlxO!a!%J7h*5Th8BHm4S~(&{N?%z$8>TIunSPn z4*wib$9vAVFz-#UnMh+=U&Jx(E_~T**=&E5U^C0UD{9%izJKOhs%5kKr!(JEYZ)fI zrhS8(27jriyGIIZ^|TOtfB>qkqn{`|-890};bAqt4YYm2FlK;S;hUkxr>8{Q;=$F= zE1e?kNfKKkEYe?&5Zi{qA3Z-99m88TXIp{m3f4QDH%6z~+-Z1jD_SPV*^ur^!<=n= z#N_MkFxT?yEL7zAHMu<|-!mOK_;zXE*|mI=Yq0TJ7v*@qk(08aYd85U9pY$?&p>Ym zqx;YnVZJP0;;d>f@@#9eP=VjpxUH#x=Hw?MrA?MW|Gd)1+`7W1?ZWWU9AF)T+pZxK z-gvzIcE}Mj)*0&y*O{kTsVEe#`B96J?iiWY!uC2+#XCtEg61!SwTcytxyNkZ*}=x- zt>MdcQY!xR0cQ8B+UxAMR@b|o{R87(NX7=A42rZa`6lDimlev~JV?~pM}h|{g=!^| zw~Sc68?(rAxjU;4`h$V8>L-InPnqA`={)@@>U+{uR9^2kl^=~RWpYz3kzRIj4x`|1KIiEZOW@to zRWw?1yjC(5U)51$e>BAW3%oU~9Ba?pUb%uvzMvP_F+Ut;QdCtq72lB%Y!%CSSW@!r zjxIHR&B#i|+s%K}W$2y?o5yzXiV!F9n5i$ZljPY8kmq-buj9>`CEaTLQE)%|u(Mf) z#)IE9b`$ITMnbbelhSp38Fe(Oag)kQJ{scY+r2rJq%52yf_0&3K!fs*G_KqyiuPvpGS#>H# zZe*Sn2xipxD$2fza2Vk&gm(}QA^Z{HZ3N9vLzBO~H7xI}FVrOymziMeFwr#$Qjyj) zmdM-!f$mBCWaeq;C%}c%5rMPkMDkbU!#Z2-=bk0gOqTgRhKIe-cko>zxHP&kYuQ2{ zY_w9A4-#UwK<`a(=k`YH!Oya`SbtbwSU*^Q%Qa(EZAp)=P^X4ESmzJfxwQY z?>52SqNh(QlQ3p;XLg4Pb{8I_9gL3mOk6g}H?e-QeWJ(IrAkKVrb@i!-XafXVs1&J zVC}=YH+t1_$y?$bh%)R*#ottO!AV;?M7m|j*Z~d_^LgR$pP+Le>)ROISpUXg#^5)m zXPD$$1q){}_LZH`AWUl7>Jqxsd-S#t!&_DlgF7o@XeU;&cAd;D?*_>48ZVe6p?c`I z)i@0q+I2`Z&}AuZt3-Xyv(wXa|FudcnLDf6Yfk5_-3qQSSDqWzckMhi?9N^Y`$#vl zb=I8DN7@i}*mat&U=VmV2)auVBVu3sFx3Zsc~z3PMI-B*R|U+=O^aqi=1Qq~@LDNu zwE0Hj4z)XK(zpw(%*OYS-<=d~?;=03_lL2bu_|@+GnH{FhofPP?I^;A_LACEymh!? z@Ymp<{wGlYtrNqc9YRwC~^$eXx{$r0s^M(_(}=SV!!$<_%QLsh#C8lgiS=hPLh z8@Fzi>6HOzxj=a#+g-8D2u?gZT)3_P@!(u7EWXg44M;SqQlr#V+@Z#wPe_3(=(QeE zud~IwC)7=-W%cNMt4u66t1a8T$7PNX3vahH8iD0TVEJbeUSb?7S zBcPp`Xy@H%7y8Ne$OxVsC~p<$Lav;OU!)j2FoMn*kd_D?hU66wvv)QAr8*Ebwx{BM zg_M20CTAI8Yrb%Z&|e`m!%Jd((g?g_^$^;Uv;|nXbdSQJDrn^dIx8W{#()|>rosZ- z30W`1@Xp(Avaisz0A~E@bM5#mCiTs)NLN5padMbc7<=lQU&VN)dg_}GuExrv(?%rO z+vx!=eG@K)2gZdRoaKa63NMN9@Jz-l4eRJ1QsaSJ$D_-ei|WyiQ(yI5M-lXEVxM2^ z3;x!1q}y7}ox9RUXlnR$bnLxtn5D(L4niq6W^TVKtn13PO%G3omjEZt?U8_eOZ&?$TU>eJ2HUAfZ8P&Im<3u(?B|Br zzAM`2bQO9}MrYL3HW&Je18&L*h2EkbtM;tGY7Uit(N5`Q}H#G_+*sTL7zf=8vGzW23#QiZ^ z+k6S=X{itTL(rJ_qdG0OS%^mAD~LR1VPEu9jPXkZHdZruH*go8l>zjj!Z|=lnV0E5 z4+eR9A0*F-Jee)-VLpj(Z~KhpGwN+kO?!3p=~178bGpg&*^SeHO9uPA2$L7Bby8y?JOc{7<(?_P z>GM*OXNr%b2b0V%X$riG99Uzwrv&YK?`H6@G&0O8vG+yqx$$?$E!s6q@btiKFKY%Fhp{xMu( zvNRhP^vD&hZ8|v*Ry=qv?IsUr(VwOEz>YZ&J_wra%>h|6#aYYc$%-Ix^T$fmMIg+{1{zFnOvAvh4Sz;zkgR|VK^D#FUB zH*;2KAJMwbp~j1#J4tg4td6SoTv?QD@SiUN|0;s6Eg4Dg1s@_`Rj08%r!A@L%djC;y#(l=Y9*U~Q4$HDG_CP)%Y)87Hqj)x*6GBg_T)dKC9bZB#|UHx3!q} z%va1LZFzG3kTbGkbKPF-i{rZty=>(V0T;&eIqB6 zt%Meg5O^N*8Xj}>$NO2_bfjXp#M=c(g%u&hVGRqi`32Ity455*dqw9Xt>A||YW&aO zg}8Di9eksf_g1ieKfSgM}wYBa@>U+R~ww4s`}_Oa!m*Odq^MZI5#FPKE6+ZFu`H7|!IP64%m{*aB_`jQ}%tTOoEi_$jZlo0PI#J;l1SO$-GCKZp`9f{~M zQ$8OUdrMKMwB@Q6CigNtGq>wt6=iFTX&Qe%lwK9!G_^D~TYm*Fm5O_Y&44+B@gVSp z^{)>7{#wHw)Ir?}+Y#>szi$W^gA1II5V0y5U-uzq6>R}8hJmkB+i#SaJ%wRdHt;J3 z{+Dsi4aEj2-0XD-dMjVZK5i!iKWuWHn=B3RW zHM`tjM;2%4W#iu2@<`zDfWa!j1Hf6C6aF{|o4q!w>D>bD5hTnPH$&>q-@DuML*E1{ z>J4EYwEi&o{Fg@yr;Wob`bhotR3d>_q`rMe?OwY#~IRudee9E z6(Qe4BOG!(h1~AcGclv-C3t8HfaeF0L;p{T%qH~v8wtH;#EhOg>7^U*QFMgROObza zq841zwZN&m5k?m&G@esm8ij>`9@-@Pr@`V-L$9%TW`LWyAWUX03Lg)=5WU{B%6FBa z=;+mfeehfn!%oyAqeec(R@h^ym!fRePNZ1s3rO7)y)rPh!-=>`_1P#l=a~pAaqGzM zqGZmKcvs`+s4T`e!hSCw*%loi(9QWx7p$Fg9`0i46V=VgI~2ZPW)60~#3h`hr?w=6 zNn5HVS~Tdq>F~ftE0gm!4Bqklk1(TIM5J3&{}G)w`hI)rCiE(S&>x*4_rUwhnYx~p z+%O|TW^EW;^Zelfm)TEV#VW}sMc{%-f~T(qr-bsQ&CY{v)L&5?Iuzt*x_fmbD=f@3 z!8*jl5^?E}3vz=zv>3ma4=uv)MMD>0mN`rA-U6KBSv)xZ|5M#Ls2kqhGj*u@zlMsU z1)zK%qSkdodHDU$p=|ul8Zt(s4DTu~0%aid{Glqj0s9x@Kbfs}1M@VbRYRvfzb3Is z*&U;TXun9~2L(&s_$lO~fH-II>FDnd4=}#PG4%20x;dxOXMD~2Bm(XBP}k=Sax9e} zI`TP_b>IDb66SrCK|Gqy_vdhLbh(y??Q^FUZmUoZTjR+7&pDJ@Fv88*aQemHv$ZmN zB=GsHKz_g}fAcvj`{!r_Fz15&Z|BmLaLUD6`@5nVF5aCUOJO_L3SZV{LLVOD;M)mV zR3Y>i3OhxV-pkc^A@sXKGozY&Av<3?+=Nx}P0}A&+k7kJ9M)sg`;4Noo_z5#!FpR6Y3@*(E`PNT)*-rDqa|wmWQgrz$49M1{h@;c z!hF5`)nH-x;ZWXu{d~qVadvYTtu%+lu4v^iLTL@cU?u#EBo2H_v{LAfRmLG@rgt~c z*XH>FwkJ%`T7-oiR&`_Noo#8JhR39mP61`vnmz?7L4YmjAl41)B;S5uk(AOg9>$tua4qj7CLk5oUrBM2f z@ggF|erFpih4PZlmd#2!3b8BemXSU`5fJz`Rt9r{`DFQTZO`?v5>tFRfTK_`#Vseq zfn$cxg1V#JBIO9PwIOdO_Xzy9p?&ZNIa_~tFv{S}=G4&6N;B^A1C@Iu&0AtuK2X?h zX7!pU`RoC1>)0we8S>&wjUQGSN6g;tL8-A-gcZ}t;&vbv9I?g+gWs)S9%(qM*>7@3 zg1qxyoZA!z^dUCqTipy^#`Z$^Epf6?OMGMeD|oI0tdB~2jwfeDnJ;HK^K&8*rBl~; zSU6W%K(1-s*4o|b>@_%DI6=uRP~#7zM9ffc^k*n{JHmwsdXM>qV({VVyrPyj4SC;z zc}SmBtF*T?vt85_aW}gI#h#M7NxtzueQQnY#QHs2i(=m)t~8j{{BdA`GEWM+iX$wh zuK9_My4E9;9tyruncvmY%vr7-Fch}jd|$J^mc89~GtPtH%#H%gV>SiwuEJlUtj)9g zM=^i7^^<(leYy2}UGT4vXeVmd-Q;_~rH>RT^SyV&x92C#zj6tYbRB)reSG_D%y}<2kR*`gg9lk0eaY< zsP#Q8&xR3hdQHy@3cq=M>rb1X#<|+NGmD#tyju2qWffT6U zJfZSXFt>}V9N%po^xiZv{6upB+9-_7mL0NYpSW8;k4cGKWnMSy>x_|eWg2C9Ih?KR z3rpYu4fbd^jecYQv^yVPygeR$&}E7=bV%|p^vpamHu|?mHffyDk6_)rGfd|AF{-Kd z{O-!u=ivQb*$n>&iQi2u&nc$O@L+`&ArEpp9cJY(fb6|zgz+V6Jc7M{55pZ(USunH zb@;80XmCZ&OEow@iJS*gw?|3k_ArCngRWNrv4fFxkKRDO3$%QjNA8QhVPDWiDi;r4 z^!&v#nX`ECyyq)ht*zT!WsyD29~cUcq8;8Grj@&H)`yP;4-E(f+&qS7yKZLiczn39 zmi6y}DEl>|mn%osXrt^OCbq{>ha|f}tJoafH+)4j-Cs7QxmphzMiQUzX-?;`VC^zI zrR{gMr6m>C!aFHj!;Iy6xhcS?(xd>BPO!@iPph~27DD4bJ)*C7d>ALVO5_rc(IWI6Bt~i&S>(mJiquDt1OH3wNn!29-q~IwHIBR&6_E%2 z^N@Lt!0NX^nNP4TgddKsWWBbM)%dT5;Sr#%ExY$6^qZ}Fw!YZfXJcS~C6+DejLDOsKmC2aW!XLl&hral0k({>e1AqhNTPpJ z#|f>Dbef2sl?HHn2xb27nRwV)JY_!S&syeY9!~Z^8T^AT9AcJ(&os*c39&J<{<3d>Fn_htDeahT5c+ zleBV)WV)P$a^jhCe?YmdDEB1Fu``YH13FLoG%fc5_NR~wDLq%(f&Y#3(MUFN&Y zU~V_PZ>(R^dyp%~NFzyTyJ3C$5|TIL+hB*<&&siR2e0Hw!{Z|j9_cvKnHh5#aw1!S zt9p&^)4$K^X&>d)J`Nc>S$DcOx9!CE1Wse_-v-ZIfnflKF}IZc!PGzv*EOQGk7MtRMR&Q`oVC+>Ca&; zWFFQ=@Elhhz$iKyFM8l*0l)iSW<2&AFLTg<5L(&E$@zFLz_Sof2hLT(bCcDNXABfS z&c;m);ArNJpyoBKt^5&E&T1SPp5o!k1*ybKXdE`eotLsY2~zcVem$&~8}RHMCgnyv zdBj)X`3b%!;`vuRbMX8C&s;qJ0{aZHz>;ch!a4b3@b-I=A|d57_@3aj2K4JQK}!Rw z#(N|gPolNYkSUe$o)h1R_0xo7ber6Q%Ivo14H0W8lO{m!tW`B&Mp@JiOCV@yYPp1Vx}$@VxNy zYPhQnr-sx<=rcE?t$yS(4hvLD>X`i8kcxL7nA1S0D~Wxeq9+KS|5b$EmC(&>2;b!r zW1Kh`wqbQ_H*oJmM}yuxuafCxGrX#^uSxuTh{@wWO?)5vSNNLBbHZ*Xw}n(7)yQox z>^0_336t&P@hrk!Eu5)=5>rb6_FN}Ud~FtS{u#R;cu*7c;ki5cJzGGelF8u0UiK5n;#NCopj-5J{r-lNohQ#YwN z9c?@1Zzw@|a*ZEeT~XUt-8)bDZ`~f;drGm!U;hTZ}mb3M>mbttoV-Jo)%&Alnu z9c5aqHbortUMIS%2PJsjyo=hNYA8RlwEr6GR@bFnOZyk&nTO|8JY8J}2ksKM3YmL-Wdr8Ii=+0A5xt$BQ z2dCN}?Gkx$P`QHjpqf(g{^-tFg;+i4uYNJQazVN0)8Kri$XPwuTJ4WI2X|KQfowii ztm}^n?q0FtKmS4Nrs_wK=PiZsM5~uvv6ht~&|4{o^oIxBMYSQqRq!Mzxt)V%rw?_o zRoteep)~yrl$?X)l6BZO&x4LmlReC@3>eCFGxSXMkP0jLF20SY{{ec#Bo0klFmsPE zjagb&z&Z6$)OJbNahsuQuI)$A1JAIn3|HEI9QM}ijP=0!=+ZO>M(D9-V13R89qu-)IC`0n={>CQ$T#O3LnkDhA3!QQ zYh6gi{QhVK^8LWD2>Ff}7J@r6=YIv;^;NzHamI_~VWpzdiD)TGlp0PS_0~*8i4wy( zDDj}-^Y=eRZR}o&LMr9If>TE5iGI@2v7TIj)NC!)iGEe$i|v(#lzq*`7fb&Hp$Fk} zgma;fV0(hOeNKJ3&toXW+AQLqh>7s>D;7SC5#H68!|%e4NO%|AeL2E5oEq}e9Flz| zFV6peCvWlJ<-N{#Ld!jl=VR)k@8)I77&bfBUcYBaU z-qr(KV7P!RrtL`#&MbfzYGi!Tqu6tyBYT-qytv}jJnDY|jb98}c<6_eLk1nr;ic^m z0<~bzV;Y5%+8)E+b_^Rq>x#e&|85x8a_r8#hvAFkSL1!4e~-aa`wbPEav$561eW_9Gv?n!(T_|681n1Eu zXzBFyew@){Ue#<*tipa%RKYxiU1iMY{xdc0m3b;+fEOo=cWd$8XX2|mZ^YVp8G-qM zA6K^eS1RR>iSkut%yR1tJ1lpiZq5Q*SQgXk;M~C=qoq#<_4JaFrNVsPor{wSlP*)l#etZ*xHOD2FnR0@%wH9A&umE3ZyC%-7rF}@xr$%8zKE<; zrjvB9ehC|r16-H_t<9!TPOl&oHh!h~XtVyYezN(vUuEaa47KoW(%y7J#S_|)=G8)zOpX<^5l zPNqY@{cQd_S_4+WC-BaYu{7ZC2yODz}wcrAdgjlb%bqKgI#WM!x~D z8!wm1mj^g2yGKNzcaDq$J_0M)F4+Q4wax6rQ0v~Ja+$w8h;VKMPq3X|4rHpXQln>Z_#O|uuq=-f{cwgKUqNN+O^o6k0 zd^S{!(`-nuV%{NI4y_J$U&k@%q?q4V6tWHL({I2pFrOH1rXIY@hrrt$c0P@Ax|#A< zQPwX(Hp-6_2TqZjU|CvLQf;8mk8t3+(|44xwv~3hoDVD|70*I*!%0e~p>GqX@7sh~ z=o=!o(_wBwEc*AkzOPi6)46UtlZ)W*R?t_^&?S4Bex!I=@d_P$>c}mO_I`xkZw-vw z^&a?W#I142Ja}TB@zvZqma7r>+h}W#ufQ6e#r%D4Q2|Tgb%j(h{hYT`gx!LKo*y9o zX;#aoPao}nn~g#AyoVfnPx-Im-h-|pEeUIIHP&|{KNQ7OH(I8 z*e#H+rFbtO#8zz@7KL52>&5DFxeBvsfPUrDaHV_!ysZq>4EkTJ`l0t(g5Fs{OU~`l z&1#@J9y}V|4ED}=NS zfNU>3&%Oa{*m&4HFuz*JAh69HRz%qhta&!|!=9>T=Pw_d4<4mh{LU1OI?l`rG_CX- zg}1PKNZ6e4PqVh!t%r}gjG9?%@2$ z6!Fl2!KEMUnLfcS3~q2w!5w%JqrNY~FdVUIRqM9aa5hI%tG0ri3TI<) z673ca;895_T1V&r76o()?{sZ%l%Ok=+&N$B_gx|yKB-drDeCBqxp^PJbK|* z*otHAv(qu9%O`p4!1S1EL(A;8v0~3&#c~6wFvu_RJLUaN+`?Thb2qoZ)tov!$+ z_W>UL@8x@JO=XSnhM@UME_M<4v^PPaX)o?^G}elACr;-wUuY6yeP-V@ZOH+86TL!kyM?}LLFjYCLO(t!^dE|; z!g_Z>!K8xMVygIROyyZjy}Qosfj!bt@#=uV0*tf171Y~Gz^mi7PUE=zqGCOHFc`*Z z`VtwvGLQDkxi^|EkCQFfnFpe!ayF#GA;gqpcfnPPnD2{lc5qW0d|cX~XAA)=+PSWS zK}ToXsrWTJLar?1ydyys{z1Ene_%c|P@_9E&>$2h*-6Y6m#+JUDMx}2yJ&aglux7T z3_g4#?ut4cHOhaDf?sTf<;6n!?j+>Y%1cTd{$R16^qD2*;ek7+7>ub?C=I=eQ~bPa zZilv*69U{^Q~j$0T!Gl<62RLhxmb}>;1K%C3!x#_SBF-)js;t&U*mnv>ApkfD@xpU zB7G2qew6?=(Cp_+c)A(%*$t+IY-(FH*W}?g7b@c%+e-g^i7xmt0WO=fYYA*lM0!wZ zK2z>rv=d_G9PNe6??QXJz9j;;d6jQhOcJjPl9?}u4#D2PIyheIgQfal&|Hn4kbmBH zhB-v5b5k3`kR6Iy;x_YrmxIoVj(=W`jd?0Ok!pj)_Ht;Mt2TI<`(Uh!n3F{E2g|UN znp9>N6IuJte^n254KlU8pq|^jXujCzCPhl2!|C%b{DE7l;*+F+R06Zj`$8M$aebc@ z{5!asI~jcbH}x$>eNX%^>)X`!mYduBRuC)GIW9?JSttjt>tA97gJ%ohshAzWiR$e^ z6}k-7%4#^~z63W!rN2?nzlCzGU84(5M^~p(>^xCAR+n+^JwfvfT{j;ya`yzs&0zJ9 zTb8b!R4()F3kma7J4VT~6b89}*BZRTt?yyYnj!6NYC~U_p#Q*!_s+C=Eck)@Qruvx zR$h+X0QG_|6|oEB&c1&GjdV>%N*@ZUm8=|t#1TM()s?R2-_^nF&)@3Q3qd!TpO&tc zvobxR)eGwy{BYU10WA$&=#sCpJBznS!-;~pe)u$K$ZT@+GJi{Q`>O^4%(YE$t-^e3-_;8iP4sS(F!Ytdo(OU zZ87|qbO~OwN#K4Cz=OeMQyZhi=XEl@;{x1MP-HSC$>n#oty-iRrnMhW<_tfFdeGfuO;{c=prH;0v=e`#stn#4Wy=dKA6Q_?uI3}crZstt1~ z<={Ol#$|QHionNk;wKUAeEpoGum@o;eIO^cD2LxNUMcJ0wvSgP5#d2yUwzKbzC7}% z!X3ozHa)-Z%gM<}<_wc0Iq1izKOMH&`0c_YS#|GqJ*<#}2V*t@nB!#Hrs|xSIj2!h zw<~!MMcMkFfN`qvJK$SstT!%`LOuE;7R_10BatM(}&>lGaH92}*U98S#_V~=6y;>|Az_185$DPIliedB0c zA?_y?szrH=a>?8hR~fjx-NWEp3HZ@r=fDbK!+gfKW_ym|J{;b`_|^p~aLfHFqcFHZ zWz4!B38n9`Wn*If{iaQ#}~p*w$Mwag>mZ>$(rZGYz~yV*G7abdb(0|;#{1t zef5X9iPI@QGXs*E8ox>18ek{F`0dyy$TrvN?kD=Pg>3BBPxfW=Yz0~5W5E*SyiHBd zzdqj>D>8;7+__%`i)NW(oav1S+TFIrCE}dlLhpR^;aITDela_N=dD1bBU>k{iK6UmCtZ^LZz;8^ZiEOCaCC?*+W|0-PwY zRvYb>j}F6cZcW)`@{H=HGCh4Hg}VVc_NBvZfqMF2O4nD7`@ie>lDW7)3o)(8F>W-+ zIDGq4cPV7&uN2aDT-kJxOyl=(TPo$>%U=XnCGHyd1^ASruGOGFrocp;C|rSGcD8R= zaN@qKbboSF=@qv?-W%n%!IxzZ_fSqc0VZ&b$Zyv$d3i>{6b z55S$=ys{}>)J?O8Iu4;C6`^Wg9ePZWWm+$wS`D8wef%kjoa zU=(4TY9S=J8?AS?F>aOVi_`Xw``QdL@f}y*@rw@vYVh};(z+G=#wz0v-LEsR$t`xz zYiuppg}$YtO%_h=Zte?iUux*uA6uWF_I+Y^C({SU<5s$#`AS_?;fKLLJ*@bMv~XL{ zTg5oYsR@4q6a;*s?jhJ$62i8vpf6h$p@%#q$Xj74(rpueTi;8hf?$5)-k7sD&)HUk zRU0mre#xZPpBS%pS9o66#(l5+8YBUSEcD4D z8~woFj6OZD6Glfr9e3&S4vdaqbO!+m36L=3?srML(0hR$9_KmE@aV{LMn{&5k>wF~ zJK5>sZ%5|9$bLP7k)8J%*2CY9?Qx7@@#uKAKnDRp~{ z<6DKK?#fmfb#lXNR)aB_H`?`J-DFR?1VN*Pb*!GGH0 z9cT5Jc_Lgi!Yz1rbp5hE+raxX_y^F(X@5z>e-GZ5kG?;J_l=|PkKw%o?`&RXeZ}8* zT-mo1q3!NAta6NJb83cXn<6?VwLWQFt;t8)3{4YbPV7PXX#Jfbf0Y|IAR50mU#P}k z!&gJXuM7lt;Dqz~S!rwqMf#Gzk74WtCENT6q}XvTYj~T&OWQDO+c0b7VP`Kd6@P6m zb!qdpZ*=rUqw_T$^EH9!Fke&78a|m44j&p-OQb*&Q8zO;UISK=}Z>hn>>BGC%ExDbC$-tBHRJVR^3dDfZ%_% z;1;e5mg>)Wf1W&}dAD!9kDIH`U^9uD%1`<(b-yx@U;eLW^o8WNILK!7ieYZS!RS@1 z?}WdO5X<3Bpi&QE^*-dQ@8vB)*B{^G7QPl`y_5QXyWus5T z>VIxzDWi^CmV&M@nu0ZTE5pou=sI;<`ht&qXOy`bZP9J-UCl;Wf!q1I+Rk5wTQhcJ z2h;26-lQJ;URdV0KsU1OnndfsHdj%X!_(z6L!M;PL8aM*nOb(%s2I)oBFUZ0FL)!$ zZ#O)MJL9lrVx2npZN;T6!6VI6WJbfbmu?F(>XoKkdi4EAN=cpJk%w?6gMOPamXnhW zZYeLu@@MT!%64RKedH7!;=t0ojxk0j7{HN%W&_BTRFK4+*w_S z)iJsIAEhnQ($*s_4&5m6l{7%(I$T^Q%9s0I3vSlddzk$?p1)$xN6m1F~sf2>A9Sf%Z%wGSJT&YTuWz zsEAu2_!R=SXtbr$RuYUgVjKjld*2x_ZHTB*)TxQq2?@+eCYkyF?lVb5?R#C{f3EAy zbCzd6&v~BvxtHH<*1~s)yN*c(KGg7dpAjz&{Up3#zw)8g=|=v48fI^Rwy;e9(ws?i z!*=I`$EoZoBWGHf#)DW>Q2Gql1Rd!Gu1SoJv<)A`m%pL?=Ea8H9MH6Ga;4`!;$=-_ z>&RW;g1wTVp2_)GdjI$==W|ZJ=jHy%$#--y)2-!cGdDTTXJllsdo%B14nAxzI)B1` z+c{k^(T1RxjhGv)dizg?_YBYX8C{1Y-Y~8BI!OVKBX{yN=FapJDznyl2(^0@d=3q+ zV|_yW3l7wzF3idADb=dLH~8QXjiwl7%^slE%^049xxmr_k0yn=z5lFJBlnmN!}Bto zs+#?K|Asje^ES=dpno32k&0uS7AGCcdx2{ zHFd{42Qi|XAU%mu;~TI~%^aRGCmozMRWK>TGPmHyg||6MTuWE}$C{s<_{&M}nK#~n zCUj5WXx*xbp68&|;Q()i>sebG4Xuulj+@0(*j@pz8hX!jb*b%1?L5w6YwAkG*&g{S zupD7q_@9BL2=5*FEU*OO){&lo3*mhu7XxJo|7)ZxP=fIHVPK6QOc?P690(_kyc;M& z_*D4Kz-F98m1ky`vveS4ixDW}=jl@P` zfoo~6A)oIv7&g>3;Qi8k8VMO9JJmUzgdw28Ta3d&UlnA^(zkDG8NTObLkB?@j*oiS zXl%)hYsD^|O4AiD6voH*FJNhXbriWlH|6pu_E^j|>p`FtAaBMONJf1hkE{z!LRdW{ z1QHN_IkGkohw#DCRRO|ZdwBGYfD+;3qssz3!h@rW1II9r{1L}d953K_^P2Zh-waW| zBtIqFLCE&%*h11mznA6(Bb|Y*D$DP5E^QkSCQ4FEb?`%=g%vX+WymNXho$7w@oQD^ z3279#Y3c2wp$8xvIU+?uk40lz2IE+o&~F6FIqf@X&P_vo#%XhgNv5Sv_N{;=f7QT)umO*G@1WgmBvj&^lE2$K z#nd05>u>WS3#pI2gxq}5OZt)Z(5IwwNJsCGhAp_x!aC=}+JJP~-od&-&*+?V{9(BX z4LRu4$U8RHnTB{%@a!+w#QPfYtS_j6pPcSAL$68cTkmZkD&wjVPt+gI0fy) zAp?+J$!~J9yU8;Ty1k1}UN1|wl;^GZ1~CE@jPI~!4)_(k zB~RAL%F4g#M+#8eYEawk{FQb4B(A~H8)rVeD9^hlgYA!AztTgJp_{#LwGw7)qvxFf zGyTH=un}P6t@liI<(bljsgTo|fI(pK5EdX&^X?I5mIR$`&cgb`p*FICaHL?4T@NeP zm~M*b)uK)bEs@YuqolvV20KTRb3X!C=mU(yQ|JSl=jgqh#X;|e`iA<2=4P6UX+9+W z=8bJ?ptTpatvLmKT8f@c zZ)bz2N12?ooNq~nIgU`M2o?gNaJm(mL^1+&453iBlMsA)@Da(L z{5iAE6g#K<)5gyK995VnkDVWlo-$97&zT&o_lTt*dvXYN;%O%JQPmSljJb5QC*QfD zIL~=%Cgr_0dNcTRiAR;Nb5A_R{5s#6IP-c)_M@Stc#=>ysZR|X;Hjes`FtnyYlU2+ zqG*9Lf2?*JqPK#UkM)}s-_VBKU|U*O!eXGmD1ifGiz|J;?q7Aabqb8trNL9+2`iYQ zJ5S%a^G*eQk#|zs24F2vKT&^4pq-P*;|Fv`7XlL_56D+!m$wnfS9m`R(YU!wl)#pm zEE$&Vm)PU`v3m;CO-12dcuT-tjvZfWm7G*gD+dlG}{ zM0HTDwzV2h+zzdO6?9_LfhwT1u`^V|i6h#fIPKEmM@CM!6!j*u=_W>s({f>DF>566 zc4V#)&kj#Xk7uk;mB?UdBxc)x)|xHp(b2m7{G- zfxUY@-Vet6a6PaaSYTh$I&dmN^Jhl{IwaHNW9$h2%C_R50*aGn3fHShSBkYTq zPWdx3<^bIXe+6@IJuta3i{m++>&MQS7Hx?JJi)@YC0iBFj`opIY4n*ZL5E=>klC0t z%gyqvl#rZuoqnppJR@(`+=2x+PLh8NRvUO?DD0SAJ_Wn}?x++RU)sxM zFYRTsiuzdf;@;F>>H3oRlD5Dx2?D}pJqr6~2t-{p6yKq)JjT*yIKV-S9p z7;T=_Q^MyKwrPQ_kpygw#4ghFR60jPJ4O_om^B*uZ`jfs9QCajlhDZGb3JWY&Sb=% zgxCp){g0?Ip5mVy`J`3MBJ{k`(7UgAAdea-0%BcGpf#oEax3w#*?r+qR)oEQcd|_} zes)(hZB7t-G}UY#djCHezF+z>z|L39y5uK`2{5N2zhV0Gls`^qX1*X>>OI?^2R{v- zZL02ElxZC?c-RH({9s_FXE;F8o>**(>**Me%Xb^=DE4;npx6aLv;njqTA)M=_^uem z_g|1G(i!Mp^pWlIbvD_HX%TX~{N;ilr`s-1DFF{$^8)n1sAii6fBEyi^pkegMaucB zaI7BR1a@Kl9)d>LwdrCtA5XzwjMe7mvD#?cY?r^B4{aeMJAX7Z7y3QSrjTFTk(?WX zv~xw5?Q+yJ8afFqkHvn(TrmISdq7jBQd`2CvPcRA*^`aQy%mU@ss2LTe>VJQ+-I31 zCmh+FC8NuVdxyf`;2y^;J3$CK4DffDU|0B7XLq0tm9o zuEkoM=^qJ|k5+A+M?#TN%v2rZSu4#;_nBZbw3b-I zU_gO!Oy~}Tjl~2n)<1itXVI}%6KoVu){lgK8L3&!-fE~f&Q8UAq6{wSxHEIwYV%$0 zxoritH*Ws*!h3#Obl=XIm6r7-+aCMFi7CrpHv{L2DB>r2s%6BhYEMHC-Q)Pd0EK`H zmqQKz6}(VT+^^-3HVvHN&&bzB{L6B~1kE($petRrlD#fcB zctH1mkmqyA^UT1hv3qamYVZz5u-`ZA9tpiMIuZg;*g#)D_0^dHW-OjU_v6^LTqfmz zJ4!=7W7lVR7xMX3)|sdE>P#Q6WBPV7Jh*V`?i1j`v7LPXHpT`H9p)fh4+W-xX1oBe z3qYK!voYIp4PBZOr2W&R<~!jfq^_PB46MO9G`#9gG5-pXMRavbVtHIyYMrL8(LQ*N zcx9)cDRntm-}+HNWB53*4Y||os>PT(3wkaE;p+$|%VjA$3AL2<4g|X8^CrXz1wN4D@5i~YxjS%Cj{hj)GyQX+Cq~FGtl3{k*7?=2#uq$q20qMH z`hlt|k9VEtRNy1zK=`lpU0e-(ockAl4D(IF6AcrO_E6tZyQnX3aJ`q?IK&y^{f$Gs zmdQ)(W{ej+E84G@`4y_3zvWIEdvf{WmKOciHE4MS-u+U4zKi%6|C6ioGx`19jH$_k z91NexZDjJVUJRg(jYA5p!q4P=@*&VeH-Chda=7a5rgk&KDn(-o^%m= zm;SlzTdnFmb(g=8HEy@9sx$Pm%qq{Tv9^}7b;cmevYr=XZI!P%mfHF!KlD!URKb1| z07~)q+Ddj2?ns=gyY66Jyd%r2F4xw_T9oC5he2o`0GA6EX3JlR^^*$eHFUJ8Ot3sN z0)HtAJ`NDnu;Y~vO~?1kXc*$GYuX!zc&h{d3abVGN{~`9+f{jNF*mkVELOq#R|H+R z8g%`WkT*4ZE_uwGt2aLh?wHOI?^{87biwN)%VABr@Wk@+)Vc=y?2AvvcCa2HuCyCC9n*q63(xgwvkhZo^*gFY+#SM^t5UJ8!|h$q3$;wWA1ei9db3&z}7L zhvapS?TK23{Z9^Y%WiFfEGxpyeixk5sCkv+i08>6UcRfl=5CK?{}6}upv|`*Z=K0+ zfi}fAK;J#$(SoAs9W}J{czzFj!e*e&vF1yjrvf?Gl=;W+l&O$&*I$#nVe^wiO8IW` zHFt&0`-c=L^HG$kM41nv%r=y1*i2;}N14LrZ79vWnaZr*ymf56(|e>be+J(%y-ynZ zZ{Ykij=$oN+TahiY}(rET&Fd_j$j^LJEiQ<+Q-)NMam*wkcC1v@P?pq4tr1)=lcY7 z+w}0{mM;(*!iCOo=+9$UmEp7&dU{uQ20Y|Qwplnoa#HHJYaOe(6~~7-mf*mCr)UOj z?UJD35w9`S5ppD(djtG1v6guMk-BHI!l7N^S)l0`IPW*6#DZhdn?7bH~Mw!8?v9HV>PUXXdnAl?5I6cow=@kEm^QKeP?7Q zz7oY4c2RK`p*X}asHnB!(7cn`b-%OE@lTaUX8Xt+xw&0`wkx3pIoYQgOQq^k1=T9n zaNKsPH5@X9FJVqo0cT3h#}K8$p=9*wXL!bk)w5FRiIO!OwNVL_BJSjP`HG41g8`{S zhj*HWgLgJxksRp@)omK5Y7ABMx@?6uXI23-13TqUum>->s)yeAV^OkE0ks&OiTj_+ z_cMzw2PjsL=@WCw)%2pi06qK6^f|6FiawK{eJVf8D*8}<_J#axYSG^Vxs;2EMa=A? z{{il1dP|HC^)6PFw*yqalB@TEt^y|n=xTL1%lEO^5!3g$cmQP}Uw^D*xH6&BHC`$5(rgz*Nwt!T{aRW$Ue zSJM#*RY14Swbj*fMfm8wiHUfFW0RDf2XW)H}9PxY|xN#!&yjW_TDK`>&bVLc=qlS^H zy3>8|``{!k?W3*Z{#1VXiUYjF@vEVekx;^@P&a-(^A+2~`O=Qe?^Oc|)UiLx`;vEgGekBU}gL>BiUSZ7U9J@(8eGrllnq_E? z83y(O5axpI_24NlOtqBBwU1A8+*Q44%a$#rrT5;q{gGccJ$aO2%+;Pm%-F;&!tSUD zn2E1qP6F2J+*peflg+>&8|IUmJ$&LN4*b05UtEVI!LtwH6^W0p_8jp%5)eSmeIl1;d)YLV^cj1l?f>TPi1Z6;;n2_VZD;};p6E-jSGzLAq83#-4_bwfU*>7Vs+{1aargZNov@eK&UGcV5+K{*uEv`i}BHw3O~zNQ=0yO?d_3iQSBECUQ2Pl?JT z1)xWf$>hPZ3i_FZF|;3Z%s3_lVMka`z+*z)i5A@$azsk^H@QoDecW|j;5duAVp@lr z>S72}oSmdmq~jKkXH8j}0<2(}+hG&Z1YCByAEVi?&7aD%wn67&-mWb0S0#4Mqd;nI zg_R~K(AgTV-pLkx*s7YnrZwna2}@CJ@pcbkNA1jFOd2a{?|KBbK)l4x+G(eK{5N^9 z?%_3E>BYdLVyRwi|IWG$$98;wv1h;aW~S3K)Y|Z*m%(#WFUubEQ2iK&1*|9E0Fbe~*fXCi_%B(XW{;d$A*Ef(9|sv2?}bDj8Qw`AUf^4XzZ770(pbbdsu% zy@eS6D~8jGSv{9`rFl6>8OfUXGRF1{8h4P>@bVqPb7Z`9FNU?oyJ9h8cptI*gI>ad z_%`2f&q)5&4-Uk3Na6nlJGCCnIkc(s1SX(?}@l%(u!T6EXGK&~5p4C5X*Otd$Xuh(upl6|0vc=_q-$Z_#Xx?}u zTHi|E9%*fT4PFiETM4n2u3naX9C!zoKCUcNx!xAJ!JaCe;~jzSFy2v&1@ft)V1|{f zi!0X)o|2I$WBBIPKYaw;9g%m9duN9|?%4ftIUQY7*_Y67{}ZLNcjf;}(R$cMeihyF zB9-AC*!1{hS4E8p{$DDp&P)3ZCU7mzAY2;kF`*YL@s(cRSh=#YiQ)PMJ9nkh&K77a zr=@x=j+6mES$(JNh9q6wF`(I9^&(l6MFJQ(vM-qEv~h_46}-Sxm}uBH~6%(3gL4MPp8Ayjm@acfrY!tNeFCR!h8>ho!_*w zX{bSHBpd%a8R35&^GxeIfqJ7aK>2ap-{p|!&IRgcWdO&wew*HBo7E|omdkNH6ib6r z-<9KOxgj}B=dQ@1f$Nt;EBCb=7ILryG+_7brS=u#AV1Nt?{jjfK`OX>^sUl8vh_9B zEo`A4dVfTL|2Ck5MD*wX{F8Et+dwx1{USw6FUdY{0DN-&=@b5%P96Xs*s-q>I7Khke&5M_+8S@)~ zgeClpPU$fA`s|OC{YRA&)}&@&dL1ZXaspcKXCl=Sm zXv*xp@PCn?PzSy)_JS(ei(WbK-{BProC=~hsQkNd;N6w07N^uruXAM)%E4iKwwGV5 z^9XlnJ38Ud=P>AUzg~rHlc9q{mdVqH=zsZ;q94?IaOzlCHl(<66#Mnb zV_^||Y+*k+L_O&mBF~d|g^MolCY%GH{3*%^4U7%iPEub|9|pmr7~dz-n7I+(J7YeY z!!#3-NzZT0lX<{$IM|(JNYUw$bJQWJJgT&OZ9=Q_?2-AUS}*#`5J>>&~_Ms*K3*uuY?B9c@@Y-T<%a;VtHcO z3dvxwt^GQ{<@I;Pm&X}aNJhgKxa#dvmupJt>YISNJk@Y9U|G*<7#xW>v^cVG1gATqdb(n)5(WXAcnjg05?1_G|MrVVsOC0@c(SvKznGi^re!U8DcW$DX^@cN>C?3gy zV)1HISWWDU_DQ=j$3J2qKkWx98FRgK#7gsqrzG|q^|o@G;tK4N8N1PX)Ft+mHEY{8 zf#=I_AHwNx~MIoK48t*-*2I~Oz?KZqo+*p9xr3&w_qNW z|A7$OU&x^zT7?reLJvmq9kIbg39Hza7~KTa4sd48TVgptk^fmwVgbq$ zxyuwl$=K)o_D#wDRN)1Zyc&{bnDlr9+G=iLZve%11CSeL#PV1gw8la2NK@ckA!A4Y zD?PenQPzcrkZwOx?2ok-VU|@zv1!BvN^8>Vm0F24)n6te+E5^w}#d4nr{O$G}cJDMR?2b_>}Gp1>lDedTy~^;Wnk# zDe@toHq@hp!VZjcgQ>iMt=;&#Wh|*B61Gx2b@I zK<*y>oRG2J>jWO@&Tb_^i4^@ z0E>i~=X_vY9?B!$3?IDZBuTI}c{*oY*D}ed{cf4FQKqL&IgJ7Lm6-uNq~yYhvS)`a zVz%&~!n5|vkgvz+v{EZLG0v&h(UV7K0@^fq9F}o|#briZZT)}zi8AfP{U*Z%Q zG2eN-MA@(5o2!p)BnpV=E#yN;FWy;L4`@v|U}Oxu=xEu?z*iheDDu;6t_XB7B4cmnHV5d6CHhf{K&I9W(1P`oKNtv zpgvd8qnKM9QQgj%&YVD}y%eT6up`W8U~L0{AytZ%=FoND<%O1H8HDb|6K-7T?{ zx#b@~FMIqh#qN?y4a?f7-~G1S9&puq!ep~X@0`ZPVuV`k3u5CfV{E)l z?n;oyTS`~_HRG+c#qMUrh7uJh`*aVmys;lJt-~$@BW-+~l_I~w|L6RaSOH5g_KspD zpnU+1+?Ynpcz&FV2i?GzS70C91)8e?`yIRoXogwavcx6Xrs6VtesR2QwWuxLZC7+1 z0U`-}CpxVij46zEQkrpI0W74khR`fad~Xl-tn{s=E!N}+Kv#KMgy$XS9(zXD`K(O+ zYuTi4um?WY!L=^FBz9+|;vV@>J!l6?3phAD=sfmTMZZ?@F}~WBl44Vlq}cEg$_)OL z@J@gOWM*>Ap7jFx(ZpUK)ShaX!@i8ZBec@ngS!2npRt;MBHZ#K@9J6)J`DEEsF#=S z(Q~XyFMTtRQg3MgW_DMco zw2RwC9ae=VF}}D7JSJZ5o#smTf^%}BL(~854XNRw7xp=R`iU z$^N4*ixubYV_>Vz|bA zq)!o7zG#PY(mA5@!x6?5ORMn{);89x68LHLrs_?_mjkJNadCy-a%hB-o%Yv}w!m0i zUs|zIk2)}a5Mn6?Uq$#J1P1m%GE=D6$2Of*n{!)Ei$z4sZ$_*bAcO zo^+8D^}M`HkkK@j%tma{XGr6i5v!-&-j)barDm6||$xiV#vAO>d z&LL&Z0);0no@K{>>8yluhcs&zXNoW7rLu$4m#%ewm4uy9H>mjNSq;$|Jb`H+XHZh$3}t%Pje>TH|$Q3#@NCO z2P%0yflr)Z)H*(o@uCIRUz~8Tl8_gMA=`w;G2-9UVi(gfI&^|VP$1RltFctn_dMRE z$_FZ5ST>gKBczLY2Q`ShpygQD!HZ^Lt#Cg^o-Z;Oz-;Lx+XvovSllD-w@Vn`2|~G$ zf;kg2ubB~S!cH3L(9zv4PH`!mABub1Ej9NGXN26U!j6Z9g#Ws)g}7J=V!5~*vZ&wl`3#<3T?32g{_A?_QrVGz~-Ll zrO6nN-D0daS@DdhtJ)4kjpa2Dx9=5rG1gXn%}(L8kX}VSwVtq}C-xj!Vl&$IjQAAR zJ0o@`KzT4fERcQ@mG{j++)ia#`3B+>msg7gI|t%+Ptf+?Fg;e8hOc@t(KV_3f@mD< zsf<&^CB{3th4a#gA+F3Gtlx45XYnF&UE>9Vsr%lYl1UyXGS8SFR?-@URZU)= z-5^t)=Ie*8I7;6o-m)}U|MN?gajp+Gn18wp<%3rc(YAmR!Az`lg#)yz523zteyGz@ zjK38)NXO`#2pi19n)SgDFf^e%azBodp-AZWWBdi?B`)~0S5SguRSj@a5i+J#)%r@# z)Qxu$x+8(;_?Xv~b$3E8gMe zD;w?8y^b2JP)6{(UX6{=OX9+oDz|QGs@PnmE51|(9FHFJFALgZ-Ve8fCj7d)umj~V z;lLU3w3}UcMsUdaImYsHV8z>6#c$wS(m@5$ev{=P$?HTzYEo0E6`r$tkHx)WHi3lr$8gx9({k}a9JC<+zcI<84{BPdY|F7OX{k`5jQgicn zdN=*T^>Xhf{-Adi=Ra}77U3rHR2b{wi*gV9AZe!_9teNi!=FR)7NZ`w*W|VEZpBS+ z=?Pcy@Wc#4IGU4ghrg%Gfdyuf{lg*TP56Y9{Oo~0LXWy9ta=Umy)BGca9#;Lh52K~ zXm5aa*d+7fMQz&}F%c;+_q42ppBc=HZov@_T>B)mg@+fKRU$ou*84;no7+%Kcua{_ zSQ*HYjoA5~n3N-UxdW8304eWgicx~K>=CSCG+!v3^yO~{rIi!`ZM`|hPavMr_%rZb zVP%CUWBe61cnIqdi~KM$yvM=MWP^Y6a>1K13+!%38IVahFq>0Jsn_HKDmM5Sa7TgD zYbGjwJil*C;)4Gif^CwiS}=KHyqws4<`6U7-SF7?u^RDfSFh z>2!sMs8TNYSv!w9alvpq53Lf;Pj;EVc!lN*nh&fpH;8N&4DDFquBY#{+*q5>RANr3I#cDS;;X6sWBJQ9VseUv*9B$eBFt@U@G1B^kL_Z} zvcxk{Mh>`TLqp6A*8EdJDJ3qRlW%dWm~wa_8c&H&EU$NMi}Emab{))IH;b#u6qFON~CtFF-vQxWye}}qqnF% z*Y@x)e$c{NxmP>nUjEd-OPVhbchxymEoO@57EqAT4+|Ehm*5|^A+Z|g`Rb)*RwYKB z1F;fX6h=tTX8cZo-J{YvGxlbW$*aQm%fI0V<m{6ln@Y9hhO0q4pJ?AN6s6c(*NHos9{-4-FP25+nucS%c^8S!QlFtQGm zQ2C7IBOmTs708KlW-NdAadO`0WU25}736QM!5QBP4G@XET5!4B1{0pocQpm_T?gRT z_H$`KZV7{yME^`OU>#DN@aa`RfkUdx;XhHV@N*NfzM6=2#Fsf1>z!~DV!ayvbs%lx zZChYv8Kaz(atnICxT|II#M5ub!qrjfi-d{$-=-QFy%cx}YtaihUc^DXFB->;#qLur z>~2lYFYHRT+#u`gEnKibGvkH@W50z9AuopX#btPX1C6UE?P=%Eh?#rZ!ULE2aO$14 z?XljCl?9EGQR?A%d4wnRq{(3{2HCM@$dp?1Xlw<+{$(TIf^WbafW(vD>5_0Pye<6Q z@8ut$yr{-$n5FW3*L6Ww?PI$#TeKZ<3pq=;E0$``SZc%fQfKr`wtVSNkiXb#>k