From c6243da12f6643747a24a7aa761e103cc4a848c2 Mon Sep 17 00:00:00 2001
From: lalalademaxiya1 <2831039915@qq.com>
Date: Wed, 15 Mar 2023 16:51:53 +0800
Subject: [PATCH 1/7] Update Keychron K Pro series keyboards
---
.../keychron/bluetooth/bat_level_animation.c | 0
.../keychron/bluetooth/bat_level_animation.h | 0
keyboards/keychron/bluetooth/battery.h | 0
keyboards/keychron/bluetooth/bluetooth.h | 12 +-
keyboards/keychron/bluetooth/bluetooth.mk | 0
.../keychron/bluetooth/bluetooth_config.h | 0
.../keychron/bluetooth/bluetooth_event_type.h | 0
keyboards/keychron/bluetooth/bluetooth_main.c | 0
keyboards/keychron/bluetooth/ckbt51.c | 63 ++--
keyboards/keychron/bluetooth/ckbt51.h | 0
keyboards/keychron/bluetooth/factory_test.c | 0
keyboards/keychron/bluetooth/factory_test.h | 0
keyboards/keychron/bluetooth/indicator.c | 4 +-
keyboards/keychron/bluetooth/indicator.h | 0
keyboards/keychron/bluetooth/lpm.c | 0
keyboards/keychron/bluetooth/lpm.h | 0
keyboards/keychron/bluetooth/lpm_stm32l432.c | 11 +-
keyboards/keychron/bluetooth/lpm_stm32l432.h | 0
keyboards/keychron/bluetooth/report_buffer.c | 0
keyboards/keychron/bluetooth/report_buffer.h | 0
keyboards/keychron/bluetooth/rtc_timer.c | 0
keyboards/keychron/bluetooth/rtc_timer.h | 0
keyboards/keychron/bluetooth/transport.c | 0
keyboards/keychron/bluetooth/transport.h | 0
keyboards/keychron/k10_pro/config.h | 7 +
keyboards/keychron/k10_pro/iso/rgb/config.h | 101 ++++++
keyboards/keychron/k10_pro/iso/rgb/info.json | 133 +++++++
.../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 | 175 ++++++++++
keyboards/keychron/k10_pro/iso/rgb/rules.mk | 2 +
keyboards/keychron/k10_pro/iso/white/config.h | 76 ++++
.../keychron/k10_pro/iso/white/info.json | 133 +++++++
.../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 | 2 +
keyboards/keychron/k10_pro/iso/white/white.c | 173 ++++++++++
keyboards/keychron/k10_pro/k10_pro.c | 18 +-
keyboards/keychron/k10_pro/k10_pro.h | 0
keyboards/keychron/k10_pro/readme.md | 2 +-
keyboards/keychron/k13_pro/ansi/rgb/config.h | 9 +-
keyboards/keychron/k13_pro/ansi/rgb/rgb.c | 184 +++++-----
.../keychron/k13_pro/ansi/white/config.h | 7 -
keyboards/keychron/k13_pro/ansi/white/white.c | 4 +-
keyboards/keychron/k13_pro/config.h | 7 +
keyboards/keychron/k13_pro/k13_pro.c | 18 +-
keyboards/keychron/k13_pro/matrix.c | 208 +++++------
keyboards/keychron/k13_pro/readme.md | 4 +-
keyboards/keychron/k13_pro/rules.mk | 3 -
keyboards/keychron/k1_pro/ansi/rgb/config.h | 7 -
keyboards/keychron/k1_pro/ansi/rgb/info.json | 2 +-
.../k1_pro/ansi/rgb/keymaps/default/keymap.c | 56 +--
.../k1_pro/ansi/rgb/keymaps/via/keymap.c | 56 +--
keyboards/keychron/k1_pro/ansi/rgb/rgb.c | 184 +++++-----
keyboards/keychron/k1_pro/ansi/white/config.h | 7 -
.../keychron/k1_pro/ansi/white/info.json | 2 +-
.../ansi/white/keymaps/default/keymap.c | 8 +-
.../k1_pro/ansi/white/keymaps/via/keymap.c | 8 +-
keyboards/keychron/k1_pro/ansi/white/white.c | 4 +-
keyboards/keychron/k1_pro/config.h | 9 +-
keyboards/keychron/k1_pro/k1_pro.c | 18 +-
keyboards/keychron/k1_pro/matrix.c | 208 +++++------
keyboards/keychron/k1_pro/readme.md | 4 +-
keyboards/keychron/k1_pro/rules.mk | 3 -
.../k1_pro/via_json/k1_pro_us_rgb.json | 289 ++++++++++++++++
.../k1_pro/via_json/k1_pro_us_white.json | 228 ++++++++++++
.../ansi/white/keymaps/candysign/config.h} | 16 +-
.../ansi/white/keymaps/candysign/keymap.c | 59 ++++
.../ansi/white/keymaps/candysign/rules.mk | 1 +
keyboards/keychron/k2_pro/config.h | 7 +
keyboards/keychron/k2_pro/jis/rgb/config.h | 101 ++++++
keyboards/keychron/k2_pro/jis/rgb/info.json | 111 ++++++
.../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 | 2 +
keyboards/keychron/k2_pro/jis/white/config.h | 76 ++++
keyboards/keychron/k2_pro/jis/white/info.json | 111 ++++++
.../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 | 2 +
keyboards/keychron/k2_pro/jis/white/white.c | 151 ++++++++
keyboards/keychron/k2_pro/k2_pro.c | 25 +-
keyboards/keychron/k2_pro/k2_pro.h | 33 --
keyboards/keychron/k2_pro/readme.md | 2 +-
keyboards/keychron/k3_pro/config.h | 7 +
keyboards/keychron/k3_pro/jis/rgb/config.h | 102 ++++++
keyboards/keychron/k3_pro/jis/rgb/info.json | 111 ++++++
.../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 | 2 +
keyboards/keychron/k3_pro/jis/white/config.h | 76 ++++
keyboards/keychron/k3_pro/jis/white/info.json | 111 ++++++
.../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 | 2 +
keyboards/keychron/k3_pro/jis/white/white.c | 151 ++++++++
keyboards/keychron/k3_pro/k3_pro.c | 18 +-
keyboards/keychron/k3_pro/k3_pro.h | 33 --
keyboards/keychron/k3_pro/readme.md | 2 +-
.../k3_pro/via_json/k3_pro_jis_rgb .json | 265 ++++++++++++++
.../k3_pro/via_json/k3_pro_jis_white.json | 204 +++++++++++
keyboards/keychron/k4_pro/config.h | 7 +
keyboards/keychron/k4_pro/iso/rgb/config.h | 102 ++++++
keyboards/keychron/k4_pro/iso/rgb/info.json | 125 +++++++
.../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 | 2 +
keyboards/keychron/k4_pro/iso/white/config.h | 75 ++++
keyboards/keychron/k4_pro/iso/white/info.json | 125 +++++++
.../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 | 2 +
keyboards/keychron/k4_pro/iso/white/white.c | 165 +++++++++
keyboards/keychron/k4_pro/k4_pro.c | 18 +-
keyboards/keychron/k4_pro/k4_pro.h | 16 -
keyboards/keychron/k4_pro/readme.md | 2 +-
.../k4_pro/via_json/k4_pro_iso_rgb.json | 325 ++++++++++++++++++
.../k4_pro/via_json/k4_pro_iso_white.json | 264 ++++++++++++++
keyboards/keychron/k5_pro/ansi/rgb/config.h | 7 -
keyboards/keychron/k5_pro/ansi/rgb/rgb.c | 2 +-
keyboards/keychron/k5_pro/ansi/white/config.h | 7 -
keyboards/keychron/k5_pro/ansi/white/white.c | 2 +-
keyboards/keychron/k5_pro/config.h | 7 +
keyboards/keychron/k5_pro/k5_pro.c | 18 +-
keyboards/keychron/k5_pro/matrix.c | 206 ++++++-----
keyboards/keychron/k5_pro/readme.md | 4 +-
.../via_json/k5_pro_ansi_rgb_v1.00.json | 162 +++------
.../via_json/k5_pro_ansi_white_v1.00.json | 114 ++----
keyboards/keychron/k6_pro/config.h | 8 +-
keyboards/keychron/k6_pro/jis/rgb/config.h | 97 ++++++
keyboards/keychron/k6_pro/jis/rgb/info.json | 94 +++++
.../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 | 2 +
keyboards/keychron/k6_pro/k6_pro.c | 18 +-
keyboards/keychron/k6_pro/k6_pro.h | 29 --
keyboards/keychron/k6_pro/readme.md | 2 +-
.../k6_pro/via_json/k6_pro_jis_rgb.json | 325 +++++++++---------
keyboards/keychron/k7_pro/config.h | 7 +
keyboards/keychron/k7_pro/k7_pro.c | 18 +-
keyboards/keychron/k7_pro/k7_pro.h | 29 --
keyboards/keychron/k7_pro/readme.md | 2 +-
keyboards/keychron/k8_pro/config.h | 7 +
keyboards/keychron/k8_pro/k8_pro.c | 28 +-
keyboards/keychron/k8_pro/k8_pro.h | 48 ---
keyboards/keychron/k8_pro/readme.md | 2 +-
keyboards/keychron/k9_pro/ansi/rgb/config.h | 7 -
keyboards/keychron/k9_pro/ansi/rgb/rgb.c | 124 +++----
keyboards/keychron/k9_pro/config.h | 7 +
keyboards/keychron/k9_pro/k9_pro.c | 20 +-
keyboards/keychron/k9_pro/matrix.c | 206 ++++++-----
keyboards/keychron/k9_pro/readme.md | 4 +-
keyboards/keychron/k9_pro/rules.mk | 3 -
.../q2_pro/ansi_encoder/ansi_encoder.c | 136 ++++----
.../keychron/q2_pro/ansi_encoder/config.h | 7 -
keyboards/keychron/q2_pro/config.h | 7 +
keyboards/keychron/q2_pro/matrix.c | 208 +++++------
keyboards/keychron/q2_pro/q2_pro.c | 18 +-
keyboards/keychron/q2_pro/readme.md | 8 +-
keyboards/keychron/q2_pro/rules.mk | 3 -
.../q3_pro/ansi_encoder/ansi_encoder.c | 186 +++++-----
.../keychron/q3_pro/ansi_encoder/config.h | 7 -
.../q3_pro/ansi_encoder/keymaps/via/keymap.c | 16 +-
keyboards/keychron/q3_pro/config.h | 9 +-
keyboards/keychron/q3_pro/matrix.c | 54 ++-
keyboards/keychron/q3_pro/q3_pro.c | 18 +-
keyboards/keychron/q3_pro/readme.md | 10 +-
keyboards/keychron/q3_pro/rules.mk | 3 -
181 files changed, 7739 insertions(+), 1700 deletions(-)
mode change 100644 => 100755 keyboards/keychron/bluetooth/bat_level_animation.c
mode change 100644 => 100755 keyboards/keychron/bluetooth/bat_level_animation.h
mode change 100644 => 100755 keyboards/keychron/bluetooth/battery.h
mode change 100644 => 100755 keyboards/keychron/bluetooth/bluetooth.h
mode change 100644 => 100755 keyboards/keychron/bluetooth/bluetooth.mk
mode change 100644 => 100755 keyboards/keychron/bluetooth/bluetooth_config.h
mode change 100644 => 100755 keyboards/keychron/bluetooth/bluetooth_event_type.h
mode change 100644 => 100755 keyboards/keychron/bluetooth/bluetooth_main.c
mode change 100644 => 100755 keyboards/keychron/bluetooth/ckbt51.c
mode change 100644 => 100755 keyboards/keychron/bluetooth/ckbt51.h
mode change 100644 => 100755 keyboards/keychron/bluetooth/factory_test.c
mode change 100644 => 100755 keyboards/keychron/bluetooth/factory_test.h
mode change 100644 => 100755 keyboards/keychron/bluetooth/indicator.c
mode change 100644 => 100755 keyboards/keychron/bluetooth/indicator.h
mode change 100644 => 100755 keyboards/keychron/bluetooth/lpm.c
mode change 100644 => 100755 keyboards/keychron/bluetooth/lpm.h
mode change 100644 => 100755 keyboards/keychron/bluetooth/lpm_stm32l432.c
mode change 100644 => 100755 keyboards/keychron/bluetooth/lpm_stm32l432.h
mode change 100644 => 100755 keyboards/keychron/bluetooth/report_buffer.c
mode change 100644 => 100755 keyboards/keychron/bluetooth/report_buffer.h
mode change 100644 => 100755 keyboards/keychron/bluetooth/rtc_timer.c
mode change 100644 => 100755 keyboards/keychron/bluetooth/rtc_timer.h
mode change 100644 => 100755 keyboards/keychron/bluetooth/transport.c
mode change 100644 => 100755 keyboards/keychron/bluetooth/transport.h
create mode 100755 keyboards/keychron/k10_pro/iso/rgb/config.h
create mode 100755 keyboards/keychron/k10_pro/iso/rgb/info.json
create mode 100755 keyboards/keychron/k10_pro/iso/rgb/keymaps/default/keymap.c
create mode 100755 keyboards/keychron/k10_pro/iso/rgb/keymaps/via/keymap.c
create mode 100755 keyboards/keychron/k10_pro/iso/rgb/keymaps/via/rules.mk
create mode 100755 keyboards/keychron/k10_pro/iso/rgb/rgb.c
create mode 100755 keyboards/keychron/k10_pro/iso/rgb/rules.mk
create mode 100755 keyboards/keychron/k10_pro/iso/white/config.h
create mode 100755 keyboards/keychron/k10_pro/iso/white/info.json
create mode 100755 keyboards/keychron/k10_pro/iso/white/keymaps/default/keymap.c
create mode 100755 keyboards/keychron/k10_pro/iso/white/keymaps/via/keymap.c
create mode 100755 keyboards/keychron/k10_pro/iso/white/keymaps/via/rules.mk
create mode 100755 keyboards/keychron/k10_pro/iso/white/rules.mk
create mode 100755 keyboards/keychron/k10_pro/iso/white/white.c
mode change 100644 => 100755 keyboards/keychron/k10_pro/k10_pro.c
mode change 100644 => 100755 keyboards/keychron/k10_pro/k10_pro.h
create mode 100755 keyboards/keychron/k1_pro/via_json/k1_pro_us_rgb.json
create mode 100755 keyboards/keychron/k1_pro/via_json/k1_pro_us_white.json
rename keyboards/keychron/{q2_pro/chconf.h => k2_pro/ansi/white/keymaps/candysign/config.h} (67%)
create mode 100755 keyboards/keychron/k2_pro/ansi/white/keymaps/candysign/keymap.c
create mode 100755 keyboards/keychron/k2_pro/ansi/white/keymaps/candysign/rules.mk
create mode 100755 keyboards/keychron/k2_pro/jis/rgb/config.h
create mode 100755 keyboards/keychron/k2_pro/jis/rgb/info.json
create mode 100755 keyboards/keychron/k2_pro/jis/rgb/keymaps/default/keymap.c
create mode 100755 keyboards/keychron/k2_pro/jis/rgb/keymaps/via/keymap.c
create mode 100755 keyboards/keychron/k2_pro/jis/rgb/keymaps/via/rules.mk
create mode 100755 keyboards/keychron/k2_pro/jis/rgb/rgb.c
create mode 100755 keyboards/keychron/k2_pro/jis/rgb/rules.mk
create mode 100755 keyboards/keychron/k2_pro/jis/white/config.h
create mode 100755 keyboards/keychron/k2_pro/jis/white/info.json
create mode 100755 keyboards/keychron/k2_pro/jis/white/keymaps/default/keymap.c
create mode 100755 keyboards/keychron/k2_pro/jis/white/keymaps/via/keymap.c
create mode 100755 keyboards/keychron/k2_pro/jis/white/keymaps/via/rules.mk
create mode 100755 keyboards/keychron/k2_pro/jis/white/rules.mk
create mode 100755 keyboards/keychron/k2_pro/jis/white/white.c
mode change 100644 => 100755 keyboards/keychron/k2_pro/k2_pro.c
mode change 100644 => 100755 keyboards/keychron/k2_pro/k2_pro.h
create mode 100755 keyboards/keychron/k3_pro/jis/rgb/config.h
create mode 100755 keyboards/keychron/k3_pro/jis/rgb/info.json
create mode 100755 keyboards/keychron/k3_pro/jis/rgb/keymaps/default/keymap.c
create mode 100755 keyboards/keychron/k3_pro/jis/rgb/keymaps/via/keymap.c
create mode 100755 keyboards/keychron/k3_pro/jis/rgb/keymaps/via/rules.mk
create mode 100755 keyboards/keychron/k3_pro/jis/rgb/rgb.c
create mode 100755 keyboards/keychron/k3_pro/jis/rgb/rules.mk
create mode 100755 keyboards/keychron/k3_pro/jis/white/config.h
create mode 100755 keyboards/keychron/k3_pro/jis/white/info.json
create mode 100755 keyboards/keychron/k3_pro/jis/white/keymaps/default/keymap.c
create mode 100755 keyboards/keychron/k3_pro/jis/white/keymaps/via/keymap.c
create mode 100755 keyboards/keychron/k3_pro/jis/white/keymaps/via/rules.mk
create mode 100755 keyboards/keychron/k3_pro/jis/white/rules.mk
create mode 100755 keyboards/keychron/k3_pro/jis/white/white.c
mode change 100644 => 100755 keyboards/keychron/k3_pro/k3_pro.c
mode change 100644 => 100755 keyboards/keychron/k3_pro/k3_pro.h
create mode 100755 keyboards/keychron/k3_pro/via_json/k3_pro_jis_rgb .json
create mode 100755 keyboards/keychron/k3_pro/via_json/k3_pro_jis_white.json
create mode 100755 keyboards/keychron/k4_pro/iso/rgb/config.h
create mode 100755 keyboards/keychron/k4_pro/iso/rgb/info.json
create mode 100755 keyboards/keychron/k4_pro/iso/rgb/keymaps/default/keymap.c
create mode 100755 keyboards/keychron/k4_pro/iso/rgb/keymaps/via/keymap.c
create mode 100755 keyboards/keychron/k4_pro/iso/rgb/keymaps/via/rules.mk
create mode 100755 keyboards/keychron/k4_pro/iso/rgb/rgb.c
create mode 100755 keyboards/keychron/k4_pro/iso/rgb/rules.mk
create mode 100755 keyboards/keychron/k4_pro/iso/white/config.h
create mode 100755 keyboards/keychron/k4_pro/iso/white/info.json
create mode 100755 keyboards/keychron/k4_pro/iso/white/keymaps/default/keymap.c
create mode 100755 keyboards/keychron/k4_pro/iso/white/keymaps/via/keymap.c
create mode 100755 keyboards/keychron/k4_pro/iso/white/keymaps/via/rules.mk
create mode 100755 keyboards/keychron/k4_pro/iso/white/rules.mk
create mode 100755 keyboards/keychron/k4_pro/iso/white/white.c
mode change 100644 => 100755 keyboards/keychron/k4_pro/k4_pro.c
mode change 100644 => 100755 keyboards/keychron/k4_pro/k4_pro.h
create mode 100755 keyboards/keychron/k4_pro/via_json/k4_pro_iso_rgb.json
create mode 100755 keyboards/keychron/k4_pro/via_json/k4_pro_iso_white.json
create mode 100755 keyboards/keychron/k6_pro/jis/rgb/config.h
create mode 100755 keyboards/keychron/k6_pro/jis/rgb/info.json
create mode 100755 keyboards/keychron/k6_pro/jis/rgb/keymaps/default/keymap.c
create mode 100755 keyboards/keychron/k6_pro/jis/rgb/keymaps/via/keymap.c
create mode 100755 keyboards/keychron/k6_pro/jis/rgb/keymaps/via/rules.mk
create mode 100755 keyboards/keychron/k6_pro/jis/rgb/rgb.c
create mode 100755 keyboards/keychron/k6_pro/jis/rgb/rules.mk
mode change 100644 => 100755 keyboards/keychron/k6_pro/k6_pro.c
mode change 100644 => 100755 keyboards/keychron/k6_pro/k6_pro.h
mode change 100644 => 100755 keyboards/keychron/k7_pro/k7_pro.c
mode change 100644 => 100755 keyboards/keychron/k7_pro/k7_pro.h
mode change 100644 => 100755 keyboards/keychron/k8_pro/k8_pro.c
mode change 100644 => 100755 keyboards/keychron/k8_pro/k8_pro.h
diff --git a/keyboards/keychron/bluetooth/bat_level_animation.c b/keyboards/keychron/bluetooth/bat_level_animation.c
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/bat_level_animation.h b/keyboards/keychron/bluetooth/bat_level_animation.h
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/battery.h b/keyboards/keychron/bluetooth/battery.h
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/bluetooth.h b/keyboards/keychron/bluetooth/bluetooth.h
old mode 100644
new mode 100755
index 99d406223d..0ef14e0d06
--- a/keyboards/keychron/bluetooth/bluetooth.h
+++ b/keyboards/keychron/bluetooth/bluetooth.h
@@ -32,11 +32,11 @@
/* 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_INITIALIZED, // 1
+ BLUETOOTH_DISCONNECTED, // 2
+ BLUETOOTH_CONNECTED, // 3
+ BLUETOOTH_PARING, // 4
+ BLUETOOTH_RECONNECTING, // 5
BLUETOOTH_SUSPEND
} bluetooth_state_t;
@@ -85,5 +85,3 @@ 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
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/bluetooth_config.h b/keyboards/keychron/bluetooth/bluetooth_config.h
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/bluetooth_event_type.h b/keyboards/keychron/bluetooth/bluetooth_event_type.h
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/bluetooth_main.c b/keyboards/keychron/bluetooth/bluetooth_main.c
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/ckbt51.c b/keyboards/keychron/bluetooth/ckbt51.c
old mode 100644
new mode 100755
index 2be217c091..4653825839
--- a/keyboards/keychron/bluetooth/ckbt51.c
+++ b/keyboards/keychron/bluetooth/ckbt51.c
@@ -14,6 +14,7 @@
* along with this program. If not, see .
*/
+#include
#include "quantum.h"
#include "ckbt51.h"
#include "bluetooth.h"
@@ -31,7 +32,7 @@
/* 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
+#define CKBT51_WAKE_WAIT_TIME 3000 // us
enum {
/* HID Report */
@@ -150,15 +151,17 @@ void ckbt51_send_cmd(uint8_t* payload, uint8_t len, bool ack_enable, bool retry)
systime_t start = 0;
- for (i=0; i< 3; i++) {
+ for (i = 0; i < 3; i++) {
writePin(CKBT51_INT_INPUT_PIN, i % 2);
start = chVTGetSystemTime();
- while (chTimeI2US(chVTTimeElapsedSinceX(start)) < CKBT51_WAKE_WAIT_TIME / 3) {};
+ 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];
+ for (i = 0; i < len; i++)
+ checksum += payload[i];
i = 0;
pkt[i++] = 0xAA;
@@ -190,7 +193,7 @@ void ckbt51_send_nkro(uint8_t* report) {
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
+ memcpy(payload + i, report, 20); // NKRO report lenght is limited to 20 bytes
i += 20;
ckbt51_send_cmd(payload, i, true, false);
@@ -203,7 +206,7 @@ void ckbt51_send_consumer(uint16_t report) {
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
+ i += 4; // QMK doesn't send multiple consumer reports, just skip 2nd and 3rd consumer reports
ckbt51_send_cmd(payload, i, true, false);
}
@@ -222,14 +225,14 @@ 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++] = 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]; // 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
+ payload[i++] = report[4]; // V wheel
+ payload[i++] = report[5]; // H wheel
ckbt51_send_cmd(payload, i, false, false);
}
@@ -255,13 +258,13 @@ void ckbt51_become_discoverable(uint8_t host_idx, void* 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++] = 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
+ 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);
@@ -276,8 +279,8 @@ void ckbt51_connect(uint8_t hostIndex, uint16_t timeout) {
memset(payload, 0, PACKET_MAX_LEN);
payload[i++] = CKBT51_CMD_CONNECT;
- payload[i++] = hostIndex; // Host index
- payload[i++] = timeout & 0xFF; // Timeout
+ payload[i++] = hostIndex; // Host index
+ payload[i++] = timeout & 0xFF; // Timeout
payload[i++] = (timeout >> 8) & 0xFF;
ckbt51_send_cmd(payload, i, true, false);
@@ -288,7 +291,7 @@ void ckbt51_disconnect(void) {
memset(payload, 0, PACKET_MAX_LEN);
payload[i++] = CKBT51_CMD_DISCONNECT;
- payload[i++] = 0; // Sleep mode
+ payload[i++] = 0; // Sleep mode
ckbt51_send_cmd(payload, i, true, false);
}
@@ -331,7 +334,7 @@ void ckbt51_set_param(module_param_t* param) {
memcpy(payload + i, param, sizeof(module_param_t));
i += sizeof(module_param_t);
- ckbt51_send_cmd(payload, i, false, false);
+ ckbt51_send_cmd(payload, i, true, false);
}
void ckbt51_get_param(module_param_t* param) {
@@ -351,7 +354,7 @@ void ckbt51_set_local_name(const char* name) {
payload[i++] = CKBT51_CMD_SET_NAME;
memcpy(payload + i, name, len);
i += len;
- ckbt51_send_cmd(payload, i, false, false);
+ ckbt51_send_cmd(payload, i, true, false);
}
void ckbt51_get_local_name(void) {
@@ -406,7 +409,8 @@ void ckbt51_dfu_tx(uint8_t rsp, uint8_t* data, uint8_t len, uint8_t sn) {
memcpy(&buf[i], data, len);
i += len;
- for (uint8_t k = 0; k < i; k++) checksum += buf[i];
+ for (uint8_t k = 0; k < i; k++)
+ checksum += buf[i];
raw_hid_send(buf, RAW_EPSIZE);
@@ -440,7 +444,7 @@ void ckbt51_dfu_rx(uint8_t* data, uint8_t length) {
bool retry = true;
if (sn != data[4]) {
- sn = data[4];
+ sn = data[4];
retry = false;
}
@@ -450,6 +454,8 @@ void ckbt51_dfu_rx(uint8_t* data, uint8_t length) {
}
}
+__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:
@@ -471,12 +477,13 @@ static void ack_handler(uint8_t* data, uint8_t len) {
break;
}
break;
- default: 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]) {
@@ -593,13 +600,13 @@ void ckbt51_task(void) {
for (uint8_t i = 0; i < len; i++) {
buf[i] = sdGetTimeout(&BT_DRIVER, TIME_IMMEDIATE);
-
}
wait_for_new_pkt = true;
uint16_t checksum = 0;
- for (int i = 0; i < len - 2; i++) checksum += buf[i];
+ 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);
diff --git a/keyboards/keychron/bluetooth/ckbt51.h b/keyboards/keychron/bluetooth/ckbt51.h
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/factory_test.c b/keyboards/keychron/bluetooth/factory_test.c
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/factory_test.h b/keyboards/keychron/bluetooth/factory_test.h
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/indicator.c b/keyboards/keychron/bluetooth/indicator.c
old mode 100644
new mode 100755
index fa111817dd..d4644dbd0c
--- a/keyboards/keychron/bluetooth/indicator.c
+++ b/keyboards/keychron/bluetooth/indicator.c
@@ -403,7 +403,7 @@ void indicator_battery_low_backlit_enable(bool enable) {
}
/* 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() | 1) : 0;
+ bat_low_backlit_indicator = enable ? (timer_read32() == 0 ? 1 : timer_read32()) : 0;
rtc_time = rtc_timer_read_ms();
bat_low_ind_state = 1;
@@ -448,7 +448,7 @@ void indicator_battery_low(void) {
bat_low_ind_state |= 0x80;
}
- bat_low_backlit_indicator = sync_timer_read32() | 1;
+ 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)) {
diff --git a/keyboards/keychron/bluetooth/indicator.h b/keyboards/keychron/bluetooth/indicator.h
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/lpm.c b/keyboards/keychron/bluetooth/lpm.c
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/lpm.h b/keyboards/keychron/bluetooth/lpm.h
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/lpm_stm32l432.c b/keyboards/keychron/bluetooth/lpm_stm32l432.c
old mode 100644
new mode 100755
index 8e9f2fa77f..69db4fc30d
--- a/keyboards/keychron/bluetooth/lpm_stm32l432.c
+++ b/keyboards/keychron/bluetooth/lpm_stm32l432.c
@@ -140,7 +140,6 @@ bool lpm_set(pm_t mode) {
}
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);
@@ -204,15 +203,15 @@ static inline void lpm_wakeup(void) {
#ifdef USB_POWER_SENSE_PIN
palDisableLineEvent(USB_POWER_SENSE_PIN);
-#if defined(KEEP_USB_CONNECTION_IN_BLUETOOTH_MODE)
+# 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. */
+ // PWR->CR2 |= PWR_CR2_USV; /* PWR_CR2_USV is available on STM32L4x2xx and STM32L4x3xx devices only. */
usb_power_connect();
usb_start(&USBD1);
}
-#endif
+# endif
#endif
@@ -277,7 +276,7 @@ void stm32_clock_fast_init(void) {
pll_init();
pllsai1_init();
pllsai2_init();
-/* clang-format off */
+ /* clang-format off */
/* Other clock-related settings (dividers, MCO etc).*/
RCC->CFGR = STM32_MCOPRE | STM32_MCOSEL | STM32_STOPWUCK |
STM32_PPRE2 | STM32_PPRE1 | STM32_HPRE;
@@ -289,7 +288,7 @@ void stm32_clock_fast_init(void) {
STM32_I2C3SEL | STM32_I2C2SEL | STM32_I2C1SEL |
STM32_UART5SEL | STM32_UART4SEL | STM32_USART3SEL |
STM32_USART2SEL | STM32_USART1SEL | STM32_LPUART1SEL;
-/* clang-format on */
+/* clang-format on */
# if STM32_SAI2SEL != STM32_SAI2SEL_OFF
ccipr |= STM32_SAI2SEL;
# endif
diff --git a/keyboards/keychron/bluetooth/lpm_stm32l432.h b/keyboards/keychron/bluetooth/lpm_stm32l432.h
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/report_buffer.c b/keyboards/keychron/bluetooth/report_buffer.c
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/report_buffer.h b/keyboards/keychron/bluetooth/report_buffer.h
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/rtc_timer.c b/keyboards/keychron/bluetooth/rtc_timer.c
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/rtc_timer.h b/keyboards/keychron/bluetooth/rtc_timer.h
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/transport.c b/keyboards/keychron/bluetooth/transport.c
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/bluetooth/transport.h b/keyboards/keychron/bluetooth/transport.h
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/k10_pro/config.h b/keyboards/keychron/k10_pro/config.h
index 4a4c104d5d..0e53adab0b 100644
--- a/keyboards/keychron/k10_pro/config.h
+++ b/keyboards/keychron/k10_pro/config.h
@@ -44,6 +44,13 @@
#define LED_CAPS_LOCK_PIN A7
#define LED_PIN_ON_STATE 1
+/* Increase I2C speed to 1000 KHz */
+#define I2C1_TIMINGR_PRESC 0U
+#define I2C1_TIMINGR_SCLDEL 3U
+#define I2C1_TIMINGR_SDADEL 0U
+#define I2C1_TIMINGR_SCLH 15U
+#define I2C1_TIMINGR_SCLL 51U
+
#ifdef KC_BLUETOOTH_ENABLE
/* Hardware configuration */
# define USB_BT_MODE_SELECT_PIN A10
diff --git a/keyboards/keychron/k10_pro/iso/rgb/config.h b/keyboards/keychron/k10_pro/iso/rgb/config.h
new file mode 100755
index 0000000000..00e4cef1c1
--- /dev/null
+++ b/keyboards/keychron/k10_pro/iso/rgb/config.h
@@ -0,0 +1,101 @@
+/* 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
+
+#ifdef RGB_MATRIX_ENABLE
+/* RGB Matrix Driver Configuration */
+# define DRIVER_COUNT 2
+
+# define DRIVER_ADDR_1 0b1110111
+# define DRIVER_ADDR_2 0b1110100
+# define DRIVER_1_LED_TOTAL 60
+# define DRIVER_2_LED_TOTAL 49
+# define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+
+/* Set to infinit, which is use in USB mode by default */
+# define RGB_MATRIX_TIMEOUT RGB_MATRIX_TIMEOUT_INFINITE
+
+/* Allow to shutdown driver to save power */
+# define RGB_MATRIX_DRIVER_SHUTDOWN_ENABLE
+
+/* Turn off backllit if brightness value is low */
+# define RGB_MATRIX_TURN_OFF_VAL 48
+
+# define NUM_LOCK_INDEX 37 // NumLock
+
+# define LOW_BAT_IND_INDEX 99 // Space
+
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+
+# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+// #define ENABLE_RGB_MATRIX_ALPHAS_MODS
+// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_BREATHING
+// #define ENABLE_RGB_MATRIX_BAND_SAT
+// #define ENABLE_RGB_MATRIX_BAND_VAL
+// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# define ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define ENABLE_RGB_MATRIX_DUAL_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+// #define ENABLE_RGB_MATRIX_RAINDROPS
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+// #define ENABLE_RGB_MATRIX_HUE_BREATHING
+// #define ENABLE_RGB_MATRIX_HUE_PENDULUM
+// #define ENABLE_RGB_MATRIX_HUE_WAVE
+# define ENABLE_RGB_MATRIX_PIXEL_RAIN
+// #define ENABLE_RGB_MATRIX_PIXEL_FLOW
+// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_RGB_MATRIX_SPLASH
+// #define ENABLE_RGB_MATRIX_MULTISPLASH
+# define ENABLE_RGB_MATRIX_SOLID_SPLASH
+// #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+/* Set LED driver current */
+# define CKLED2001_CURRENT_TUNE \
+ { 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D }
+
+#endif
diff --git a/keyboards/keychron/k10_pro/iso/rgb/info.json b/keyboards/keychron/k10_pro/iso/rgb/info.json
new file mode 100755
index 0000000000..e567783100
--- /dev/null
+++ b/keyboards/keychron/k10_pro/iso/rgb/info.json
@@ -0,0 +1,133 @@
+{
+ "keyboard_name": "Keychron K10 Pro",
+ "manufacturer": "Keychron",
+ "url": "https://github.com/Keychron",
+ "maintainer": "lalalademaxiya1",
+ "usb": {
+ "vid": "0x3434",
+ "pid": "0x02A1",
+ "device_version": "1.0.0"
+ },
+ "processor": "STM32L432",
+ "bootloader": "stm32-dfu",
+ "layouts": {
+ "LAYOUT_iso_109": {
+ "layout": [
+ {"matrix":[0,0], "x":0, "y":0},
+ {"matrix":[0,1], "x":2, "y":0},
+ {"matrix":[0,2], "x":3, "y":0},
+ {"matrix":[0,3], "x":4, "y":0},
+ {"matrix":[0,4], "x":5, "y":0},
+ {"matrix":[0,5], "x":6.5, "y":0},
+ {"matrix":[0,6], "x":7.5, "y":0},
+ {"matrix":[0,7], "x":8.5, "y":0},
+ {"matrix":[0,8], "x":9.5, "y":0},
+ {"matrix":[0,9], "x":11, "y":0},
+ {"matrix":[0,10], "x":12, "y":0},
+ {"matrix":[0,11], "x":13, "y":0},
+ {"matrix":[0,12], "x":14, "y":0},
+ {"matrix":[0,14], "x":15.25, "y":0},
+ {"matrix":[0,15], "x":16.25, "y":0},
+ {"matrix":[0,16], "x":17.25, "y":0},
+ {"matrix":[0,17], "x":18.5, "y":0},
+ {"matrix":[0,18], "x":19.5, "y":0},
+ {"matrix":[0,19], "x":20.5, "y":0},
+ {"matrix":[0,20], "x":21.5, "y":0},
+
+ {"matrix":[1,0], "x":0, "y":1.25},
+ {"matrix":[1,1], "x":1, "y":1.25},
+ {"matrix":[1,2], "x":2, "y":1.25},
+ {"matrix":[1,3], "x":3, "y":1.25},
+ {"matrix":[1,4], "x":4, "y":1.25},
+ {"matrix":[1,5], "x":5, "y":1.25},
+ {"matrix":[1,6], "x":6, "y":1.25},
+ {"matrix":[1,7], "x":7, "y":1.25},
+ {"matrix":[1,8], "x":8, "y":1.25},
+ {"matrix":[1,9], "x":9, "y":1.25},
+ {"matrix":[1,10], "x":10, "y":1.25},
+ {"matrix":[1,11], "x":11, "y":1.25},
+ {"matrix":[1,12], "x":12, "y":1.25},
+ {"matrix":[1,13], "x":13, "y":1.25, "w":2},
+ {"matrix":[1,14], "x":15.25, "y":1.25},
+ {"matrix":[1,15], "x":16.25, "y":1.25},
+ {"matrix":[1,16], "x":17.25, "y":1.25},
+ {"matrix":[1,17], "x":18.5, "y":1.25},
+ {"matrix":[1,18], "x":19.5, "y":1.25},
+ {"matrix":[1,19], "x":20.5, "y":1.25},
+ {"matrix":[1,20], "x":21.5, "y":1.25},
+
+ {"matrix":[2,0], "x":0, "y":2.25, "w":1.5},
+ {"matrix":[2,1], "x":1.5, "y":2.25},
+ {"matrix":[2,2], "x":2.5, "y":2.25},
+ {"matrix":[2,3], "x":3.5, "y":2.25},
+ {"matrix":[2,4], "x":4.5, "y":2.25},
+ {"matrix":[2,5], "x":5.5, "y":2.25},
+ {"matrix":[2,6], "x":6.5, "y":2.25},
+ {"matrix":[2,7], "x":7.5, "y":2.25},
+ {"matrix":[2,8], "x":8.5, "y":2.25},
+ {"matrix":[2,9], "x":9.5, "y":2.25},
+ {"matrix":[2,10], "x":10.5, "y":2.25},
+ {"matrix":[2,11], "x":11.5, "y":2.25},
+ {"matrix":[2,12], "x":12.5, "y":2.25},
+ {"matrix":[2,14], "x":15.25, "y":2.25},
+ {"matrix":[2,15], "x":16.25, "y":2.25},
+ {"matrix":[2,16], "x":17.25, "y":2.25},
+ {"matrix":[2,17], "x":18.5, "y":2.25},
+ {"matrix":[2,18], "x":19.5, "y":2.25},
+ {"matrix":[2,19], "x":20.5, "y":2.25},
+ {"matrix":[2,20], "x":21.5, "y":2.25, "h":2},
+
+ {"matrix":[3,0], "x":0, "y":3.25, "w":1.75},
+ {"matrix":[3,1], "x":1.75, "y":3.25},
+ {"matrix":[3,2], "x":2.75, "y":3.25},
+ {"matrix":[3,3], "x":3.75, "y":3.25},
+ {"matrix":[3,4], "x":4.75, "y":3.25},
+ {"matrix":[3,5], "x":5.75, "y":3.25},
+ {"matrix":[3,6], "x":6.75, "y":3.25},
+ {"matrix":[3,7], "x":7.75, "y":3.25},
+ {"matrix":[3,8], "x":8.75, "y":3.25},
+ {"matrix":[3,9], "x":9.75, "y":3.25},
+ {"matrix":[3,10], "x":10.75, "y":3.25},
+ {"matrix":[3,11], "x":11.75, "y":3.25},
+ {"matrix":[3,13], "x":12.75, "y":3.25},
+ {"matrix":[2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+ {"matrix":[3,17], "x":18.5, "y":3.25},
+ {"matrix":[3,18], "x":19.5, "y":3.25},
+ {"matrix":[3,19], "x":20.5, "y":3.25},
+
+ {"matrix":[4,0], "x":0, "y":4.25, "w":1.25},
+ {"matrix":[4,1], "x":1.25, "y":4.25},
+ {"matrix":[4,2], "x":2.25, "y":4.25},
+ {"matrix":[4,3], "x":3.25, "y":4.25},
+ {"matrix":[4,4], "x":4.25, "y":4.25},
+ {"matrix":[4,5], "x":5.25, "y":4.25},
+ {"matrix":[4,6], "x":6.25, "y":4.25},
+ {"matrix":[4,7], "x":7.25, "y":4.25},
+ {"matrix":[4,8], "x":8.25, "y":4.25},
+ {"matrix":[4,9], "x":9.25, "y":4.25},
+ {"matrix":[4,10], "x":10.25, "y":4.25},
+ {"matrix":[4,11], "x":11.25, "y":4.25},
+ {"matrix":[4,13], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix":[4,15], "x":16.25, "y":4.25},
+ {"matrix":[4,17], "x":18.5, "y":4.25},
+ {"matrix":[4,18], "x":19.5, "y":4.25},
+ {"matrix":[4,19], "x":20.5, "y":4.25},
+ {"matrix":[4,20], "x":21.5, "y":4.25, "h":2},
+
+ {"matrix":[5,0], "x":0, "y":5.25, "w":1.25},
+ {"matrix":[5,1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix":[5,2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix":[5,6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix":[5,10], "x":10, "y":5.25, "w":1.25},
+ {"matrix":[5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"matrix":[5,12], "x":12.5, "y":5.25, "w":1.25},
+ {"matrix":[5,13], "x":13.75, "y":5.25, "w":1.25},
+ {"matrix":[5,14], "x":15.25, "y":5.25},
+ {"matrix":[5,15], "x":16.25, "y":5.25},
+ {"matrix":[5,16], "x":17.25, "y":5.25},
+ {"matrix":[5,17], "x":18.5, "y":5.25, "w":2},
+ {"matrix":[5,19], "x":20.5, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keychron/k10_pro/iso/rgb/keymaps/default/keymap.c b/keyboards/keychron/k10_pro/iso/rgb/keymaps/default/keymap.c
new file mode 100755
index 0000000000..96c642deb1
--- /dev/null
+++ b/keyboards/keychron/k10_pro/iso/rgb/keymaps/default/keymap.c
@@ -0,0 +1,59 @@
+/* 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
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_iso_109(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, 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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, 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_PENT,
+ 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 ),
+
+ [MAC_FN] = LAYOUT_iso_109(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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_iso_109(
+ 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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, 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_PENT,
+ 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 ),
+
+ [WIN_FN] = LAYOUT_iso_109(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ )
+};
diff --git a/keyboards/keychron/k10_pro/iso/rgb/keymaps/via/keymap.c b/keyboards/keychron/k10_pro/iso/rgb/keymaps/via/keymap.c
new file mode 100755
index 0000000000..96c642deb1
--- /dev/null
+++ b/keyboards/keychron/k10_pro/iso/rgb/keymaps/via/keymap.c
@@ -0,0 +1,59 @@
+/* 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
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_iso_109(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, 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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, 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_PENT,
+ 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 ),
+
+ [MAC_FN] = LAYOUT_iso_109(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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_iso_109(
+ 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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, 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_PENT,
+ 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 ),
+
+ [WIN_FN] = LAYOUT_iso_109(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ )
+};
diff --git a/keyboards/keychron/k10_pro/iso/rgb/keymaps/via/rules.mk b/keyboards/keychron/k10_pro/iso/rgb/keymaps/via/rules.mk
new file mode 100755
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/keychron/k10_pro/iso/rgb/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/keychron/k10_pro/iso/rgb/rgb.c b/keyboards/keychron/k10_pro/iso/rgb/rgb.c
new file mode 100755
index 0000000000..f23203fdae
--- /dev/null
+++ b/keyboards/keychron/k10_pro/iso/rgb/rgb.c
@@ -0,0 +1,175 @@
+/* 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"
+
+#ifdef RGB_MATRIX_ENABLE
+// clang-format off
+const ckled2001_led g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to CKLED2001 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, I_1, G_1, H_1},
+ {0, I_2, G_2, H_2},
+ {0, I_3, G_3, H_3},
+ {0, I_4, G_4, H_4},
+ {0, I_5, G_5, H_5},
+ {0, I_6, G_6, H_6},
+ {0, I_7, G_7, H_7},
+ {0, I_8, G_8, H_8},
+ {0, I_9, G_9, H_9},
+ {0, I_10, G_10, H_10},
+ {0, I_11, G_11, H_11},
+ {0, I_12, G_12, H_12},
+ {0, I_13, G_13, H_13},
+ {0, I_15, G_15, H_15},
+ {0, I_16, G_16, H_16},
+ {0, L_5, J_5, K_5},
+ {0, L_6, J_6, K_6},
+ {0, L_7, J_7, K_7},
+ {0, L_8, J_8, K_8},
+ {0, L_4, J_4, K_4},
+
+ {0, C_1, A_1, B_1},
+ {0, C_2, A_2, B_2},
+ {0, C_3, A_3, B_3},
+ {0, C_4, A_4, B_4},
+ {0, C_5, A_5, B_5},
+ {0, C_6, A_6, B_6},
+ {0, C_7, A_7, B_7},
+ {0, C_8, A_8, B_8},
+ {0, C_9, A_9, B_9},
+ {0, C_10, A_10, B_10},
+ {0, C_11, A_11, B_11},
+ {0, C_12, A_12, B_12},
+ {0, C_13, A_13, B_13},
+ {0, C_14, A_14, B_14},
+ {0, C_15, A_15, B_15},
+ {0, C_16, A_16, B_16},
+ {0, L_9, J_9, K_9},
+ {0, L_10, J_10, K_10},
+ {0, L_11, J_11, K_11},
+ {0, L_12, J_12, K_12},
+ {0, L_13, J_13, K_13},
+
+ {0, F_1, D_1, E_1},
+ {0, F_2, D_2, E_2},
+ {0, F_3, D_3, E_3},
+ {0, F_4, D_4, E_4},
+ {0, F_5, D_5, E_5},
+ {0, F_6, D_6, E_6},
+ {0, F_7, D_7, E_7},
+ {0, F_8, D_8, E_8},
+ {0, F_9, D_9, E_9},
+ {0, F_10, D_10, E_10},
+ {0, F_11, D_11, E_11},
+ {0, F_12, D_12, E_12},
+ {0, F_13, D_13, E_13},
+ {0, F_15, D_15, E_15},
+ {0, F_16, D_16, E_16},
+ {0, L_14, J_14, K_14},
+ {0, L_15, J_15, K_15},
+ {0, L_16, J_16, K_16},
+ {1, F_1, D_1, E_1},
+ {1, F_2, D_2, E_2},
+
+ {1, C_16, A_16, B_16},
+ {1, C_15, A_15, B_15},
+ {1, C_14, A_14, B_14},
+ {1, C_13, A_13, B_13},
+ {1, C_12, A_12, B_12},
+ {1, C_11, A_11, B_11},
+ {1, C_10, A_10, B_10},
+ {1, C_9, A_9, B_9},
+ {1, C_8, A_8, B_8},
+ {1, C_7, A_7, B_7},
+ {1, C_6, A_6, B_6},
+ {1, C_5, A_5, B_5},
+ {1, C_3, A_3, B_3},
+ {0, F_14, D_14, E_14},
+ {1, F_3, D_3, E_3},
+ {1, F_4, D_4, E_4},
+ {1, F_5, D_5, E_5},
+
+ {1, I_16, G_16, H_16},
+ {1, I_15, G_15, H_15},
+ {1, I_14, G_14, H_14},
+ {1, I_13, G_13, H_13},
+ {1, I_12, G_12, H_12},
+ {1, I_11, G_11, H_11},
+ {1, I_10, G_10, H_10},
+ {1, I_9, G_9, H_9},
+ {1, I_8, G_8, H_8},
+ {1, I_7, G_7, H_7},
+ {1, I_6, G_6, H_6},
+ {1, I_5, G_5, H_5},
+ {1, I_3, G_3, H_3},
+ {1, I_1, G_1, H_1},
+ {1, F_6, D_6, E_6},
+ {1, F_7, D_7, E_7},
+ {1, F_8, D_8, E_8},
+ {1, F_9, D_9, E_9},
+
+ {1, L_16, J_16, K_16},
+ {1, L_15, J_15, K_15},
+ {1, L_14, J_14, K_14},
+ {1, L_10, J_10, K_10},
+ {1, L_6, J_6, K_6},
+ {1, L_5, J_5, K_5},
+ {1, L_4, J_4, K_4},
+ {1, L_3, J_3, K_3},
+ {1, L_2, J_2, K_2},
+ {1, L_1, J_1, K_1},
+ {1, F_10, D_10, E_10},
+ {1, F_11, D_11, E_11},
+ {1, F_12, D_12, E_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, 74, 54, 55, 56, 57, 58, 59, 60 },
+ { 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, __, 73, __, __, __, 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, __, 108, __ }
+ },
+ {
+ // LED Index to Physical Position
+ {0,0}, {21,0}, {31,0}, {42,0}, {52,0}, {68,0}, {78,0}, {88,0}, {99,0}, {114,0}, {125,0}, {135,0}, {146,0}, {159,0}, {169,0}, {180,0}, {193,0}, {203,0}, {214,0}, {224,0},
+ {0,15}, {10,15}, {21,15}, {31,15}, {42,15}, {52,15}, {62,15}, {73,15}, {83,15}, {94,15}, {104,15}, {114,15}, {125,15}, {141,15}, {159,15}, {169,15}, {180,15}, {193,15}, {203,15}, {214,15}, {224,15},
+ {3,27}, {16,27}, {26,27}, {36,27}, {47,27}, {57,27}, {68,27}, {78,27}, {88,27}, {99,27}, {109,27}, {120,27}, {130,27}, {159,27}, {169,27}, {180,27}, {193,27}, {203,27}, {214,27}, {224,34},
+ {4,40}, {18,40}, {29,40}, {39,40}, {49,40}, {60,40}, {70,40}, {81,40}, {91,40}, {101,40}, {112,40}, {122,40}, {133,40}, {147,36}, {193,40}, {203,40}, {214,40},
+ {1,52}, {13,52}, {23,52}, {34,52}, {44,52}, {55,52}, {65,52}, {75,52}, {86,52}, {96,52}, {107,52}, {117,52}, {137,52}, {169,52}, {193,52}, {203,52}, {214,52}, {224,58},
+ {1,64}, {14,64}, {27,64}, {66,64}, {105,64}, {118,64}, {131,64}, {144,64}, {159,64}, {169,64}, {180,64}, {198,64}, {214,64},
+ },
+ {
+ // RGB LED Index to Flag
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4,
+ 1, 8, 8, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 8, 4, 4, 4,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, 4,
+ 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, 4,
+ 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 4, 4,
+ }
+};
+#endif
diff --git a/keyboards/keychron/k10_pro/iso/rgb/rules.mk b/keyboards/keychron/k10_pro/iso/rgb/rules.mk
new file mode 100755
index 0000000000..7af34ccd60
--- /dev/null
+++ b/keyboards/keychron/k10_pro/iso/rgb/rules.mk
@@ -0,0 +1,2 @@
+RGB_MATRIX_ENABLE = yes
+RGB_MATRIX_DRIVER = CKLED2001
diff --git a/keyboards/keychron/k10_pro/iso/white/config.h b/keyboards/keychron/k10_pro/iso/white/config.h
new file mode 100755
index 0000000000..cbf7a9c800
--- /dev/null
+++ b/keyboards/keychron/k10_pro/iso/white/config.h
@@ -0,0 +1,76 @@
+/* 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
+
+#ifdef LED_MATRIX_ENABLE
+/* LED Matrix Driver Configuration */
+# define DRIVER_COUNT 1
+# define DRIVER_ADDR_1 0b1110100
+# define DRIVER_1_LED_TOTAL 109
+# define LED_MATRIX_LED_COUNT DRIVER_1_LED_TOTAL
+
+/* Set to infinit, which is use in USB mode by default */
+# define LED_MATRIX_TIMEOUT LED_MATRIX_TIMEOUT_INFINITE
+
+/* Allow to shutdown driver to save power */
+# define LED_MATRIX_DRIVER_SHUTDOWN_ENABLE
+
+/* Turn off backllit if brightness value is low */
+# define LED_MATRIX_TURN_OFF_VAL 48
+
+# define LOW_BAT_IND_INDEX 99 // Space
+
+// LED Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_led_matrix?id=led-matrix-effects
+
+# define LED_MATRIX_KEYPRESSES
+
+# define ENABLE_LED_MATRIX_NONE
+# define ENABLE_LED_MATRIX_SOLID
+// #define ENABLE_LED_MATRIX_ALPHAS_MODS
+# define ENABLE_LED_MATRIX_BREATHING
+// #define ENABLE_LED_MATRIX_BAND
+# define ENABLE_LED_MATRIX_BAND_PINWHEEL
+# define ENABLE_LED_MATRIX_BAND_SPIRAL
+# define ENABLE_LED_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_LED_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_LED_MATRIX_CYCLE_OUT_IN
+# define ENABLE_LED_MATRIX_DUAL_BEACON
+
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_SIMPLE
+// #define ENABLE_LED_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTIWIDE
+// #define ENABLE_LED_MATRIX_SOLID_REACTIVE_CROSS
+// #define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTICROSS
+// #define ENABLE_LED_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_LED_MATRIX_SOLID_SPLASH
+// #define ENABLE_LED_MATRIX_SOLID_MULTISPLASH
+
+# define ENABLE_LED_MATRIX_WAVE_LEFT_RIGHT
+# define ENABLE_LED_MATRIX_WAVE_UP_DOWN
+# define ENABLE_LED_MATRIX_EFFECT_MAX
+
+/* Use first 8 channels of LED driver */
+# define PHASE_CHANNEL MSKPHASE_8CHANNEL
+
+/* Set LED driver current */
+# define CKLED2001_CURRENT_TUNE \
+ { 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60 }
+
+#endif
diff --git a/keyboards/keychron/k10_pro/iso/white/info.json b/keyboards/keychron/k10_pro/iso/white/info.json
new file mode 100755
index 0000000000..88e94fb3f0
--- /dev/null
+++ b/keyboards/keychron/k10_pro/iso/white/info.json
@@ -0,0 +1,133 @@
+{
+ "keyboard_name": "Keychron K10 Pro",
+ "manufacturer": "Keychron",
+ "url": "https://github.com/Keychron",
+ "maintainer": "lalalademaxiya1",
+ "usb": {
+ "vid": "0x3434",
+ "pid": "0x02A4",
+ "device_version": "1.0.0"
+ },
+ "processor": "STM32L432",
+ "bootloader": "stm32-dfu",
+ "layouts": {
+ "LAYOUT_iso_109": {
+ "layout": [
+ {"matrix":[0,0], "x":0, "y":0},
+ {"matrix":[0,1], "x":2, "y":0},
+ {"matrix":[0,2], "x":3, "y":0},
+ {"matrix":[0,3], "x":4, "y":0},
+ {"matrix":[0,4], "x":5, "y":0},
+ {"matrix":[0,5], "x":6.5, "y":0},
+ {"matrix":[0,6], "x":7.5, "y":0},
+ {"matrix":[0,7], "x":8.5, "y":0},
+ {"matrix":[0,8], "x":9.5, "y":0},
+ {"matrix":[0,9], "x":11, "y":0},
+ {"matrix":[0,10], "x":12, "y":0},
+ {"matrix":[0,11], "x":13, "y":0},
+ {"matrix":[0,12], "x":14, "y":0},
+ {"matrix":[0,14], "x":15.25, "y":0},
+ {"matrix":[0,15], "x":16.25, "y":0},
+ {"matrix":[0,16], "x":17.25, "y":0},
+ {"matrix":[0,17], "x":18.5, "y":0},
+ {"matrix":[0,18], "x":19.5, "y":0},
+ {"matrix":[0,19], "x":20.5, "y":0},
+ {"matrix":[0,20], "x":21.5, "y":0},
+
+ {"matrix":[1,0], "x":0, "y":1.25},
+ {"matrix":[1,1], "x":1, "y":1.25},
+ {"matrix":[1,2], "x":2, "y":1.25},
+ {"matrix":[1,3], "x":3, "y":1.25},
+ {"matrix":[1,4], "x":4, "y":1.25},
+ {"matrix":[1,5], "x":5, "y":1.25},
+ {"matrix":[1,6], "x":6, "y":1.25},
+ {"matrix":[1,7], "x":7, "y":1.25},
+ {"matrix":[1,8], "x":8, "y":1.25},
+ {"matrix":[1,9], "x":9, "y":1.25},
+ {"matrix":[1,10], "x":10, "y":1.25},
+ {"matrix":[1,11], "x":11, "y":1.25},
+ {"matrix":[1,12], "x":12, "y":1.25},
+ {"matrix":[1,13], "x":13, "y":1.25, "w":2},
+ {"matrix":[1,14], "x":15.25, "y":1.25},
+ {"matrix":[1,15], "x":16.25, "y":1.25},
+ {"matrix":[1,16], "x":17.25, "y":1.25},
+ {"matrix":[1,17], "x":18.5, "y":1.25},
+ {"matrix":[1,18], "x":19.5, "y":1.25},
+ {"matrix":[1,19], "x":20.5, "y":1.25},
+ {"matrix":[1,20], "x":21.5, "y":1.25},
+
+ {"matrix":[2,0], "x":0, "y":2.25, "w":1.5},
+ {"matrix":[2,1], "x":1.5, "y":2.25},
+ {"matrix":[2,2], "x":2.5, "y":2.25},
+ {"matrix":[2,3], "x":3.5, "y":2.25},
+ {"matrix":[2,4], "x":4.5, "y":2.25},
+ {"matrix":[2,5], "x":5.5, "y":2.25},
+ {"matrix":[2,6], "x":6.5, "y":2.25},
+ {"matrix":[2,7], "x":7.5, "y":2.25},
+ {"matrix":[2,8], "x":8.5, "y":2.25},
+ {"matrix":[2,9], "x":9.5, "y":2.25},
+ {"matrix":[2,10], "x":10.5, "y":2.25},
+ {"matrix":[2,11], "x":11.5, "y":2.25},
+ {"matrix":[2,12], "x":12.5, "y":2.25},
+ {"matrix":[2,14], "x":15.25, "y":2.25},
+ {"matrix":[2,15], "x":16.25, "y":2.25},
+ {"matrix":[2,16], "x":17.25, "y":2.25},
+ {"matrix":[2,17], "x":18.5, "y":2.25},
+ {"matrix":[2,18], "x":19.5, "y":2.25},
+ {"matrix":[2,19], "x":20.5, "y":2.25},
+ {"matrix":[2,20], "x":21.5, "y":2.25, "h":2},
+
+ {"matrix":[3,0], "x":0, "y":3.25, "w":1.75},
+ {"matrix":[3,1], "x":1.75, "y":3.25},
+ {"matrix":[3,2], "x":2.75, "y":3.25},
+ {"matrix":[3,3], "x":3.75, "y":3.25},
+ {"matrix":[3,4], "x":4.75, "y":3.25},
+ {"matrix":[3,5], "x":5.75, "y":3.25},
+ {"matrix":[3,6], "x":6.75, "y":3.25},
+ {"matrix":[3,7], "x":7.75, "y":3.25},
+ {"matrix":[3,8], "x":8.75, "y":3.25},
+ {"matrix":[3,9], "x":9.75, "y":3.25},
+ {"matrix":[3,10], "x":10.75, "y":3.25},
+ {"matrix":[3,11], "x":11.75, "y":3.25},
+ {"matrix":[3,13], "x":12.75, "y":3.25},
+ {"matrix":[2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+ {"matrix":[3,17], "x":18.5, "y":3.25},
+ {"matrix":[3,18], "x":19.5, "y":3.25},
+ {"matrix":[3,19], "x":20.5, "y":3.25},
+
+ {"matrix":[4,0], "x":0, "y":4.25, "w":1.25},
+ {"matrix":[4,1], "x":1.25, "y":4.25},
+ {"matrix":[4,2], "x":2.25, "y":4.25},
+ {"matrix":[4,3], "x":3.25, "y":4.25},
+ {"matrix":[4,4], "x":4.25, "y":4.25},
+ {"matrix":[4,5], "x":5.25, "y":4.25},
+ {"matrix":[4,6], "x":6.25, "y":4.25},
+ {"matrix":[4,7], "x":7.25, "y":4.25},
+ {"matrix":[4,8], "x":8.25, "y":4.25},
+ {"matrix":[4,9], "x":9.25, "y":4.25},
+ {"matrix":[4,10], "x":10.25, "y":4.25},
+ {"matrix":[4,11], "x":11.25, "y":4.25},
+ {"matrix":[4,13], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix":[4,15], "x":16.25, "y":4.25},
+ {"matrix":[4,17], "x":18.5, "y":4.25},
+ {"matrix":[4,18], "x":19.5, "y":4.25},
+ {"matrix":[4,19], "x":20.5, "y":4.25},
+ {"matrix":[4,20], "x":21.5, "y":4.25, "h":2},
+
+ {"matrix":[5,0], "x":0, "y":5.25, "w":1.25},
+ {"matrix":[5,1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix":[5,2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix":[5,6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix":[5,10], "x":10, "y":5.25, "w":1.25},
+ {"matrix":[5,11], "x":11.25, "y":5.25, "w":1.25},
+ {"matrix":[5,12], "x":12.5, "y":5.25, "w":1.25},
+ {"matrix":[5,13], "x":13.75, "y":5.25, "w":1.25},
+ {"matrix":[5,14], "x":15.25, "y":5.25},
+ {"matrix":[5,15], "x":16.25, "y":5.25},
+ {"matrix":[5,16], "x":17.25, "y":5.25},
+ {"matrix":[5,17], "x":18.5, "y":5.25, "w":2},
+ {"matrix":[5,19], "x":20.5, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keychron/k10_pro/iso/white/keymaps/default/keymap.c b/keyboards/keychron/k10_pro/iso/white/keymaps/default/keymap.c
new file mode 100755
index 0000000000..2705c2cd2b
--- /dev/null
+++ b/keyboards/keychron/k10_pro/iso/white/keymaps/default/keymap.c
@@ -0,0 +1,59 @@
+/* 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 QMK_KEYBOARD_H
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_iso_109(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, BL_DEC, BL_INC, 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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, 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_PENT,
+ 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 ),
+
+ [MAC_FN] = LAYOUT_iso_109(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_TRNS, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+
+ [WIN_BASE] = LAYOUT_iso_109(
+ 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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, 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_PENT,
+ 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 ),
+
+ [WIN_FN] = LAYOUT_iso_109(
+ RESET, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, BL_DEC, BL_INC, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, BL_TOGG, _______, _______, _______, _______,
+ _______, BT_HST1, BT_HST2, BT_HST3, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_TRNS, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ )
+};
diff --git a/keyboards/keychron/k10_pro/iso/white/keymaps/via/keymap.c b/keyboards/keychron/k10_pro/iso/white/keymaps/via/keymap.c
new file mode 100755
index 0000000000..2705c2cd2b
--- /dev/null
+++ b/keyboards/keychron/k10_pro/iso/white/keymaps/via/keymap.c
@@ -0,0 +1,59 @@
+/* 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 QMK_KEYBOARD_H
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_iso_109(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, BL_DEC, BL_INC, 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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, 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_PENT,
+ 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 ),
+
+ [MAC_FN] = LAYOUT_iso_109(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_TRNS, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+
+ [WIN_BASE] = LAYOUT_iso_109(
+ 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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, 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_PENT,
+ 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 ),
+
+ [WIN_FN] = LAYOUT_iso_109(
+ RESET, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, BL_DEC, BL_INC, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, BL_TOGG, _______, _______, _______, _______,
+ _______, BT_HST1, BT_HST2, BT_HST3, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_TRNS, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ )
+};
diff --git a/keyboards/keychron/k10_pro/iso/white/keymaps/via/rules.mk b/keyboards/keychron/k10_pro/iso/white/keymaps/via/rules.mk
new file mode 100755
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/keychron/k10_pro/iso/white/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/keychron/k10_pro/iso/white/rules.mk b/keyboards/keychron/k10_pro/iso/white/rules.mk
new file mode 100755
index 0000000000..6b0c2a0769
--- /dev/null
+++ b/keyboards/keychron/k10_pro/iso/white/rules.mk
@@ -0,0 +1,2 @@
+LED_MATRIX_ENABLE = yes
+LED_MATRIX_DRIVER = CKLED2001
\ No newline at end of file
diff --git a/keyboards/keychron/k10_pro/iso/white/white.c b/keyboards/keychron/k10_pro/iso/white/white.c
new file mode 100755
index 0000000000..80beefce76
--- /dev/null
+++ b/keyboards/keychron/k10_pro/iso/white/white.c
@@ -0,0 +1,173 @@
+/* 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"
+
+#ifdef LED_MATRIX_ENABLE
+// clang-format off
+const ckled2001_led g_ckled2001_leds[LED_MATRIX_LED_COUNT] = {
+/* Refer to CKLED2001 manual for these locations
+ * driver
+ * | LED address
+ * | | */
+ {0, A_16},
+ {0, A_15},
+ {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_2},
+ {0, A_1},
+ {0, G_1},
+ {0, G_2},
+ {0, G_3},
+ {0, G_4},
+ {0, G_5},
+
+ {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, H_5},
+
+ {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, G_10},
+
+ {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_3},
+ {0, H_7},
+ {0, H_8},
+ {0, H_9},
+
+ {0, E_16},
+ {0, E_15},
+ {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, H_10},
+
+ {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, 74, 54, 55, 56, 57, 58, 59, 60 },
+ { 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, __, 73, __, __, __, 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, __, 108, __ }
+ },
+ {
+ // LED Index to Physical Position
+ {0,0}, {21,0}, {31,0}, {42,0}, {52,0}, {68,0}, {78,0}, {88,0}, {99,0}, {114,0}, {125,0}, {135,0}, {146,0}, {159,0}, {169,0}, {180,0}, {193,0}, {203,0}, {214,0}, {224,0},
+ {0,15}, {10,15}, {21,15}, {31,15}, {42,15}, {52,15}, {62,15}, {73,15}, {83,15}, {94,15}, {104,15}, {114,15}, {125,15}, {141,15}, {159,15}, {169,15}, {180,15}, {193,15}, {203,15}, {214,15}, {224,15},
+ {3,27}, {16,27}, {26,27}, {36,27}, {47,27}, {57,27}, {68,27}, {78,27}, {88,27}, {99,27}, {109,27}, {120,27}, {130,27}, {159,27}, {169,27}, {180,27}, {193,27}, {203,27}, {214,27}, {224,34},
+ {4,40}, {18,40}, {29,40}, {39,40}, {49,40}, {60,40}, {70,40}, {81,40}, {91,40}, {101,40}, {112,40}, {122,40}, {133,40}, {147,36}, {193,40}, {203,40}, {214,40},
+ {1,52}, {13,52}, {23,52}, {34,52}, {44,52}, {55,52}, {65,52}, {75,52}, {86,52}, {96,52}, {107,52}, {117,52}, {137,52}, {169,52}, {193,52}, {203,52}, {214,52}, {224,58},
+ {1,64}, {14,64}, {27,64}, {66,64}, {105,64}, {118,64}, {131,64}, {144,64}, {159,64}, {169,64}, {180,64}, {198,64}, {214,64},
+ },
+ {
+ // RGB LED Index to Flag
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4,
+ 1, 8, 8, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 8, 4, 4, 4,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, 4,
+ 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, 4,
+ 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 4, 4,
+ }
+};
+#endif
diff --git a/keyboards/keychron/k10_pro/k10_pro.c b/keyboards/keychron/k10_pro/k10_pro.c
old mode 100644
new mode 100755
index ec0eb70acb..077b3fd86e
--- a/keyboards/keychron/k10_pro/k10_pro.c
+++ b/keyboards/keychron/k10_pro/k10_pro.c
@@ -196,7 +196,8 @@ void matrix_scan_kb(void) {
#ifdef KC_BLUETOOTH_ENABLE
static void ckbt51_param_init(void) {
/* Set bluetooth device name */
- ckbt51_set_local_name(STR(PRODUCT));
+ // ckbt51_set_local_name(STR(PRODUCT));
+ ckbt51_set_local_name(PRODUCT);
/* Set bluetooth parameters */
module_param_t param = {.event_mode = 0x02,
.connected_idle_timeout = 7200,
@@ -224,6 +225,21 @@ void bluetooth_enter_disconnected_kb(uint8_t host_idx) {
}
}
+void ckbt51_default_ack_handler(uint8_t *data, uint8_t len) {
+ if (data[1] == 0x45) {
+ module_param_t param = {.event_mode = 0x02,
+ .connected_idle_timeout = 7200,
+ .pairing_timeout = 180,
+ .pairing_mode = 0,
+ .reconnect_timeout = 5,
+ .report_rate = 90,
+ .vendor_id_source = 1,
+ .verndor_id = 0, // Must be 0x3434
+ .product_id = PRODUCT_ID};
+ ckbt51_set_param(¶m);
+ }
+}
+
void bluetooth_pre_task(void) {
static uint8_t mode = 1;
diff --git a/keyboards/keychron/k10_pro/k10_pro.h b/keyboards/keychron/k10_pro/k10_pro.h
old mode 100644
new mode 100755
diff --git a/keyboards/keychron/k10_pro/readme.md b/keyboards/keychron/k10_pro/readme.md
index e4187e4ad4..dc8ec63c28 100644
--- a/keyboards/keychron/k10_pro/readme.md
+++ b/keyboards/keychron/k10_pro/readme.md
@@ -1,6 +1,6 @@
# Keychron K10 Pro
-
+
A customizable 108 keys keyboard.
diff --git a/keyboards/keychron/k13_pro/ansi/rgb/config.h b/keyboards/keychron/k13_pro/ansi/rgb/config.h
index d1a7fec5a7..eca9f2550a 100755
--- a/keyboards/keychron/k13_pro/ansi/rgb/config.h
+++ b/keyboards/keychron/k13_pro/ansi/rgb/config.h
@@ -25,13 +25,6 @@
# define DRIVER_2_LED_TOTAL 43
# define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
-/* Increase I2C speed to 1000 KHz */
-# define I2C1_TIMINGR_PRESC 0U
-# define I2C1_TIMINGR_SCLDEL 3U
-# define I2C1_TIMINGR_SDADEL 0U
-# define I2C1_TIMINGR_SCLH 15U
-# define I2C1_TIMINGR_SCLL 30U
-
/* Set to infinit, which is use in USB mode by default */
# define RGB_MATRIX_TIMEOUT RGB_MATRIX_TIMEOUT_INFINITE
@@ -41,7 +34,7 @@
/* Turn off backllit if brightness value is low */
# define RGB_MATRIX_BRIGHTNESS_TURN_OFF_VAL 48
-# define LOW_BAT_IND_INDEX 79
+# define LOW_BAT_IND_INDEX 82
// RGB Matrix Animation modes. Explicitly enabled
// For full list of effects, see:
diff --git a/keyboards/keychron/k13_pro/ansi/rgb/rgb.c b/keyboards/keychron/k13_pro/ansi/rgb/rgb.c
index 13a25e5026..05e3707aa6 100755
--- a/keyboards/keychron/k13_pro/ansi/rgb/rgb.c
+++ b/keyboards/keychron/k13_pro/ansi/rgb/rgb.c
@@ -1,4 +1,4 @@
-/* Copyright 2021 @ Keychron (https://www.keychron.com)
+/* 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
@@ -19,107 +19,107 @@
// clang-format off
#ifdef RGB_MATRIX_ENABLE
const ckled2001_led g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
-/* Refer to IS31 manual for these locations
+/* Refer to CKLED2001 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
- {0, I_1, G_1, H_1},
- {0, I_2, G_2, H_2},
- {0, I_3, G_3, H_3},
- {0, I_4, G_4, H_4},
- {0, I_5, G_5, H_5},
- {0, I_6, G_6, H_6},
- {0, I_7, G_7, H_7},
- {0, I_8, G_8, H_8},
- {0, I_9, G_9, H_9},
- {0, I_10, G_10, H_10},
- {0, I_11, G_11, H_11},
- {0, I_12, G_12, H_12},
- {0, I_13, G_13, H_13},
- {0, I_15, G_15, H_15},
- {0, I_16, G_16, H_16},
- {1, F_8, D_8, E_8},
+ {0, I_1, G_1, H_1},
+ {0, I_2, G_2, H_2},
+ {0, I_3, G_3, H_3},
+ {0, I_4, G_4, H_4},
+ {0, I_5, G_5, H_5},
+ {0, I_6, G_6, H_6},
+ {0, I_7, G_7, H_7},
+ {0, I_8, G_8, H_8},
+ {0, I_9, G_9, H_9},
+ {0, I_10, G_10, H_10},
+ {0, I_11, G_11, H_11},
+ {0, I_12, G_12, H_12},
+ {0, I_13, G_13, H_13},
+ {0, I_15, G_15, H_15},
+ {0, I_16, G_16, H_16},
+ {1, F_8, D_8, E_8},
- {0, F_1, D_1, E_1},
- {0, F_2, D_2, E_2},
- {0, F_3, D_3, E_3},
- {0, F_4, D_4, E_4},
- {0, F_5, D_5, E_5},
- {0, F_6, D_6, E_6},
- {0, F_7, D_7, E_7},
- {0, F_8, D_8, E_8},
- {0, F_9, D_9, E_9},
- {0, F_10, D_10, E_10},
- {0, F_11, D_11, E_11},
- {0, F_12, D_12, E_12},
- {0, F_13, D_13, E_13},
- {0, F_14, D_14, E_14},
- {0, F_15, D_15, E_15},
- {0, F_16, D_16, E_16},
- {1, F_9, D_9, E_9},
+ {0, F_1, D_1, E_1},
+ {0, F_2, D_2, E_2},
+ {0, F_3, D_3, E_3},
+ {0, F_4, D_4, E_4},
+ {0, F_5, D_5, E_5},
+ {0, F_6, D_6, E_6},
+ {0, F_7, D_7, E_7},
+ {0, F_8, D_8, E_8},
+ {0, F_9, D_9, E_9},
+ {0, F_10, D_10, E_10},
+ {0, F_11, D_11, E_11},
+ {0, F_12, D_12, E_12},
+ {0, F_13, D_13, E_13},
+ {0, F_14, D_14, E_14},
+ {0, F_15, D_15, E_15},
+ {0, F_16, D_16, E_16},
+ {1, F_9, D_9, E_9},
- {0, A_1, C_1, B_1},
- {0, A_2, C_2, B_2},
- {0, A_3, C_3, B_3},
- {0, A_4, C_4, B_4},
- {0, A_5, C_5, B_5},
- {0, A_6, C_6, B_6},
- {0, A_7, C_7, B_7},
- {0, A_8, C_8, B_8},
- {0, A_9, C_9, B_9},
- {0, A_10, C_10, B_10},
- {0, A_11, C_11, B_11},
- {0, A_12, C_12, B_12},
- {0, A_13, C_13, B_13},
- {0, A_14, C_14, B_14},
- {0, A_15, C_15, B_15},
- {0, A_16, C_16, B_16},
- {1, F_6, D_6, E_6},
+ {0, A_1, C_1, B_1},
+ {0, A_2, C_2, B_2},
+ {0, A_3, C_3, B_3},
+ {0, A_4, C_4, B_4},
+ {0, A_5, C_5, B_5},
+ {0, A_6, C_6, B_6},
+ {0, A_7, C_7, B_7},
+ {0, A_8, C_8, B_8},
+ {0, A_9, C_9, B_9},
+ {0, A_10, C_10, B_10},
+ {0, A_11, C_11, B_11},
+ {0, A_12, C_12, B_12},
+ {0, A_13, C_13, B_13},
+ {0, A_14, C_14, B_14},
+ {0, A_15, C_15, B_15},
+ {0, A_16, C_16, B_16},
+ {1, F_6, D_6, E_6},
- {1, I_1, G_1, H_1},
- {1, I_2, G_2, H_2},
- {1, I_3, G_3, H_3},
- {1, I_4, G_4, H_4},
- {1, I_5, G_5, H_5},
- {1, I_6, G_6, H_6},
- {1, I_7, G_7, H_7},
- {1, I_8, G_8, H_8},
- {1, I_9, G_9, H_9},
- {1, I_10, G_10, H_10},
- {1, I_11, G_11, H_11},
- {1, I_12, G_12, H_12},
- {1, I_14, G_14, H_14},
- {1, I_15, G_15, H_15},
- {1, I_16, G_16, H_16},
- {1, I_13, G_13, H_13},
+ {1, I_1, G_1, H_1},
+ {1, I_2, G_2, H_2},
+ {1, I_3, G_3, H_3},
+ {1, I_4, G_4, H_4},
+ {1, I_5, G_5, H_5},
+ {1, I_6, G_6, H_6},
+ {1, I_7, G_7, H_7},
+ {1, I_8, G_8, H_8},
+ {1, I_9, G_9, H_9},
+ {1, I_10, G_10, H_10},
+ {1, I_11, G_11, H_11},
+ {1, I_12, G_12, H_12},
+ {1, I_14, G_14, H_14},
+ {1, I_15, G_15, H_15},
+ {1, I_16, G_16, H_16},
+ {1, I_13, G_13, H_13},
- {1, C_1, A_1, B_1},
- {1, C_3, A_3, B_3},
- {1, C_4, A_4, B_4},
- {1, C_5, A_5, B_5},
- {1, C_6, A_6, B_6},
- {1, C_7, A_7, B_7},
- {1, C_8, A_8, B_8},
- {1, C_9, A_9, B_9},
- {1, C_10, A_10, B_10},
- {1, C_11, A_11, B_11},
- {1, C_12, A_12, B_12},
- {1, C_14, A_14, B_14},
- {1, C_16, A_16, B_16},
+ {1, C_1, A_1, B_1},
+ {1, C_3, A_3, B_3},
+ {1, C_4, A_4, B_4},
+ {1, C_5, A_5, B_5},
+ {1, C_6, A_6, B_6},
+ {1, C_7, A_7, B_7},
+ {1, C_8, A_8, B_8},
+ {1, C_9, A_9, B_9},
+ {1, C_10, A_10, B_10},
+ {1, C_11, A_11, B_11},
+ {1, C_12, A_12, B_12},
+ {1, C_14, A_14, B_14},
+ {1, C_16, A_16, B_16},
- {1, F_1, D_1, E_1},
- {1, F_2, D_2, E_2},
- {1, F_3, D_3, E_3},
- {1, F_7, D_7, E_7},
- {1, F_11, D_11, E_11},
- {1, F_12, D_12, E_12},
- {1, F_13, D_13, E_13},
- {1, F_14, D_14, E_14},
- {1, F_15, D_15, E_15},
- {1, F_16, D_16, E_16},
- {1, C_15, A_15, B_15}
+ {1, F_1, D_1, E_1},
+ {1, F_2, D_2, E_2},
+ {1, F_3, D_3, E_3},
+ {1, F_7, D_7, E_7},
+ {1, F_11, D_11, E_11},
+ {1, F_12, D_12, E_12},
+ {1, F_13, D_13, E_13},
+ {1, F_14, D_14, E_14},
+ {1, F_15, D_15, E_15},
+ {1, F_16, D_16, E_16},
+ {1, C_15, A_15, B_15}
};
#define __ NO_LED
diff --git a/keyboards/keychron/k13_pro/ansi/white/config.h b/keyboards/keychron/k13_pro/ansi/white/config.h
index c71da66dde..e746986802 100755
--- a/keyboards/keychron/k13_pro/ansi/white/config.h
+++ b/keyboards/keychron/k13_pro/ansi/white/config.h
@@ -23,13 +23,6 @@
# define DRIVER_1_LED_TOTAL 90
# define LED_MATRIX_LED_COUNT DRIVER_1_LED_TOTAL
-/* Increase I2C speed to 1000 KHz */
-# define I2C1_TIMINGR_PRESC 0U
-# define I2C1_TIMINGR_SCLDEL 3U
-# define I2C1_TIMINGR_SDADEL 0U
-# define I2C1_TIMINGR_SCLH 15U
-# define I2C1_TIMINGR_SCLL 30U
-
/* Set to infinit, which is use in USB mode by default */
# define LED_MATRIX_TIMEOUT LED_MATRIX_TIMEOUT_INFINITE
diff --git a/keyboards/keychron/k13_pro/ansi/white/white.c b/keyboards/keychron/k13_pro/ansi/white/white.c
index 2db95f5eac..22d108609e 100755
--- a/keyboards/keychron/k13_pro/ansi/white/white.c
+++ b/keyboards/keychron/k13_pro/ansi/white/white.c
@@ -1,4 +1,4 @@
-/* Copyright 2021 @ Keychron (https://www.keychron.com)
+/* 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
@@ -19,7 +19,7 @@
// clang-format off
#ifdef LED_MATRIX_ENABLE
const ckled2001_led g_ckled2001_leds[LED_MATRIX_LED_COUNT] = {
-/* Refer to IS31 manual for these locations
+/* Refer to CKLED2001 manual for these locations
* driver
* | LED address
* | | */
diff --git a/keyboards/keychron/k13_pro/config.h b/keyboards/keychron/k13_pro/config.h
index b254219bcf..1b8ea0404c 100755
--- a/keyboards/keychron/k13_pro/config.h
+++ b/keyboards/keychron/k13_pro/config.h
@@ -40,6 +40,13 @@
#define LED_CAPS_LOCK_PIN A0
#define LED_PIN_ON_STATE 1
+/* Increase I2C speed to 1000 KHz */
+#define I2C1_TIMINGR_PRESC 0U
+#define I2C1_TIMINGR_SCLDEL 3U
+#define I2C1_TIMINGR_SDADEL 0U
+#define I2C1_TIMINGR_SCLH 15U
+#define I2C1_TIMINGR_SCLL 51U
+
#ifdef KC_BLUETOOTH_ENABLE
/* Hardware configuration */
# define USB_BT_MODE_SELECT_PIN A10
diff --git a/keyboards/keychron/k13_pro/k13_pro.c b/keyboards/keychron/k13_pro/k13_pro.c
index 61b8e4debb..af0ebc442e 100755
--- a/keyboards/keychron/k13_pro/k13_pro.c
+++ b/keyboards/keychron/k13_pro/k13_pro.c
@@ -201,7 +201,8 @@ void matrix_scan_kb(void) {
#ifdef KC_BLUETOOTH_ENABLE
static void ckbt51_param_init(void) {
/* Set bluetooth device name */
- ckbt51_set_local_name(STR(PRODUCT));
+ // ckbt51_set_local_name(STR(PRODUCT));
+ ckbt51_set_local_name(PRODUCT);
/* Set bluetooth parameters */
module_param_t param = {.event_mode = 0x02,
.connected_idle_timeout = 7200,
@@ -229,6 +230,21 @@ void bluetooth_enter_disconnected_kb(uint8_t host_idx) {
}
}
+void ckbt51_default_ack_handler(uint8_t *data, uint8_t len) {
+ if (data[1] == 0x45) {
+ module_param_t param = {.event_mode = 0x02,
+ .connected_idle_timeout = 7200,
+ .pairing_timeout = 180,
+ .pairing_mode = 0,
+ .reconnect_timeout = 5,
+ .report_rate = 90,
+ .vendor_id_source = 1,
+ .verndor_id = 0, // Must be 0x3434
+ .product_id = PRODUCT_ID};
+ ckbt51_set_param(¶m);
+ }
+}
+
void bluetooth_pre_task(void) {
static uint8_t mode = 1;
diff --git a/keyboards/keychron/k13_pro/matrix.c b/keyboards/keychron/k13_pro/matrix.c
index 072cfc3280..22d2ac1e11 100755
--- a/keyboards/keychron/k13_pro/matrix.c
+++ b/keyboards/keychron/k13_pro/matrix.c
@@ -14,70 +14,15 @@
* along with this program. If not, see .
*/
-#include "stdint.h"
-#include "hal.h"
-#include "gpio.h"
#include "quantum.h"
#define HC595_STCP B0
#define HC595_SHCP A1
#define HC595_DS A7
-#define DIRECT_COL_NUM 1
-
pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-static inline void HC595_delay(uint16_t n) {
- while (n-- > 0) {
- asm volatile("nop" ::: "memory");
- }
-}
-
-#ifdef DRIVE_SHRIFT_REGISTER_WITH_SPI
-// clang-format off
-const SPIConfig hs_spicfg = {
- .circular = false,
- .slave = false,
- .data_cb = NULL,
- .error_cb = NULL,
- .ssport = PAL_PORT(HC595_STCP),
- .sspad = PAL_PAD(HC595_STCP),
- .cr1 = SPI_CR1_BR_1,
- .cr2 = SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0 | SPI_CR2_SSOE | SPI_CR2_NSSP
-};
-// clang-format on
-#endif
-static void HC595_output(uint16_t data) {
-#ifdef DRIVE_SHRIFT_REGISTER_WITH_SPI
- spiSend(&SPID1, 1, &data);
-#else
- uint8_t i;
- uint8_t n = 1;
-
- for (i = 16; i > 0; i--) {
- writePinLow(HC595_SHCP);
-
- if (data & 0x8000)
- writePinHigh(HC595_DS);
- else
- writePinLow(HC595_DS);
-
- data <<= 1;
-
- HC595_delay(n);
-
- writePinHigh(HC595_SHCP);
- HC595_delay(n);
- }
-
- HC595_delay(n);
- writePinLow(HC595_STCP);
- HC595_delay(n);
- writePinHigh(HC595_STCP);
-#endif
-}
-
static inline void setPinOutput_writeLow(pin_t pin) {
ATOMIC_BLOCK_FORCEON {
setPinOutput(pin);
@@ -85,7 +30,14 @@ static inline void setPinOutput_writeLow(pin_t pin) {
}
}
-static inline void setPinInputHigh_atomic(pin_t pin) {
+static inline void setPinOutput_writeHigh(pin_t pin) {
+ ATOMIC_BLOCK_FORCEON {
+ setPinOutput(pin);
+ writePinHigh(pin);
+ }
+}
+
+static inline void setPinInput_high(pin_t pin) {
ATOMIC_BLOCK_FORCEON {
setPinInputHigh(pin);
}
@@ -99,16 +51,65 @@ static inline uint8_t readMatrixPin(pin_t pin) {
}
}
+static inline void HC595_delay(uint16_t n) {
+ while (n-- > 0) {
+ asm volatile("nop" ::: "memory");
+ }
+}
+
+static void HC595_output(uint16_t data) {
+ ATOMIC_BLOCK_FORCEON {
+ for (uint8_t i = 0; i < MATRIX_COLS; i++) {
+ if (data & 0x1) {
+ writePinHigh(HC595_DS);
+ } else {
+ writePinLow(HC595_DS);
+ }
+
+ data = data >> 1;
+
+ writePinHigh(HC595_SHCP);
+ HC595_delay(1);
+ writePinLow(HC595_SHCP);
+ HC595_delay(1);
+ }
+ writePinHigh(HC595_STCP);
+ HC595_delay(1);
+ writePinLow(HC595_STCP);
+ HC595_delay(1);
+ }
+}
+
+static void HC595_output_oneBit(uint8_t data) {
+ ATOMIC_BLOCK_FORCEON {
+ if (data & 0x1) {
+ writePinHigh(HC595_DS);
+ } else {
+ writePinLow(HC595_DS);
+ }
+
+ writePinHigh(HC595_SHCP);
+ HC595_delay(1);
+ writePinLow(HC595_SHCP);
+ HC595_delay(1);
+
+ writePinHigh(HC595_STCP);
+ HC595_delay(1);
+ writePinLow(HC595_STCP);
+ HC595_delay(1);
+ }
+}
+
static bool select_col(uint8_t col) {
pin_t pin = col_pins[col];
- if (col < 1) {
- if (pin != NO_PIN) {
- setPinOutput_writeLow(pin);
- return true;
- }
+ if (pin != NO_PIN) {
+ setPinOutput_writeLow(pin);
+ return true;
} else {
- HC595_output(~(0x01 << (col - 1)));
+ if (col == 1) {
+ HC595_output_oneBit(0x00);
+ }
return true;
}
return false;
@@ -117,81 +118,96 @@ static bool select_col(uint8_t col) {
static void unselect_col(uint8_t col) {
pin_t pin = col_pins[col];
- if (col < 1) {
- if (pin != NO_PIN) {
- setPinInputHigh_atomic(pin);
- }
+ if (pin != NO_PIN) {
+#ifdef MATRIX_UNSELECT_DRIVE_HIGH
+ setPinOutput_writeHigh(pin);
+#else
+ setPinInput_high(pin);
+#endif
} else {
- if (col >= MATRIX_COLS - 1) HC595_output(0xFFFF);
+ HC595_output_oneBit(0x01);
}
}
static void unselect_cols(void) {
- if (col_pins[0] != NO_PIN) setPinInputHigh_atomic(col_pins[0]);
- HC595_output(0xFFFF);
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ pin_t pin = col_pins[x];
+ if (pin != NO_PIN) {
+#ifdef MATRIX_UNSELECT_DRIVE_HIGH
+ setPinOutput_writeHigh(pin);
+#else
+ setPinInput_high(pin);
+#endif
+ } else {
+ if (x == 1) HC595_output(0xFFFF);
+ }
+ }
}
void select_all_cols(void) {
- if (col_pins[0] != NO_PIN) setPinOutput_writeLow(col_pins[0]);
- HC595_output(0x0000);
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ pin_t pin = col_pins[x];
+ if (pin != NO_PIN) {
+ setPinOutput_writeLow(pin);
+ } else {
+ if (x == 1) HC595_output(0x0000);
+ }
+ }
}
-void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
+static void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col, matrix_row_t row_shifter) {
+ bool key_pressed = false;
+
// Select col
if (!select_col(current_col)) { // select col
return; // skip NO_PIN col
}
- HC595_delay(100);
+ matrix_output_select_delay();
// 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] |= (MATRIX_ROW_SHIFTER << current_col);
- // key_pressed = true;
+ current_matrix[row_index] |= row_shifter;
+ key_pressed = true;
} else {
// Pin HI, clear col bit
- current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
+ current_matrix[row_index] &= ~row_shifter;
}
}
+ // Unselect col
unselect_col(current_col);
- HC595_delay(100);
+ matrix_output_unselect_delay(current_col, key_pressed); // wait for all Row signals to go HIGH
}
void matrix_init_custom(void) {
- for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
- if (row_pins[x] != NO_PIN) {
- setPinInputHigh_atomic(row_pins[x]);
- }
- }
-#ifdef DRIVE_SHRIFT_REGISTER_WITH_SPI
- palSetPadMode(PAL_PORT(HC595_SHCP), PAL_PAD(HC595_SHCP), PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* SCK */
- palSetPadMode(PAL_PORT(HC595_DS), PAL_PAD(HC595_DS), PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* MOSI*/
- palSetPadMode(PAL_PORT(HC595_STCP), PAL_PAD(HC595_STCP), PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* CS*/
- spiStart(&SPID1, &hs_spicfg);
-#else
setPinOutput(HC595_DS);
setPinOutput(HC595_STCP);
setPinOutput(HC595_SHCP);
-#endif
+
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ if (row_pins[x] != NO_PIN) {
+ setPinInput_high(row_pins[x]);
+ }
+ }
+
unselect_cols();
}
bool matrix_scan_custom(matrix_row_t current_matrix[]) {
- bool matrix_has_changed = false;
-
matrix_row_t curr_matrix[MATRIX_ROWS] = {0};
// Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
- matrix_read_rows_on_col(curr_matrix, current_col);
+ 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);
}
- matrix_has_changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0;
- if (matrix_has_changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix));
+ bool changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0;
+ if (changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix));
- return matrix_has_changed;
+ return changed;
}
diff --git a/keyboards/keychron/k13_pro/readme.md b/keyboards/keychron/k13_pro/readme.md
index be867fd0d0..82fe3d7b26 100755
--- a/keyboards/keychron/k13_pro/readme.md
+++ b/keyboards/keychron/k13_pro/readme.md
@@ -3,8 +3,8 @@
A customizable 80% TKL keyboard.
* Keyboard Maintainer: [Keychron](https://github.com/keychron)
-* Hardware Supported: Keychron K1 Pro
-* Hardware Availability: [Keychron](https://www.keychron.com)
+* Hardware Supported: Keychron K13 Pro
+* Hardware Availability: [Keychron K13 Pro](https://drive.google.com/file/d/17S4Afhfs4DmwBcnkvo94ipLIVgL3rsy7/view?usp=share_link)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/keychron/k13_pro/rules.mk b/keyboards/keychron/k13_pro/rules.mk
index 1de119ff73..ee301839c3 100755
--- a/keyboards/keychron/k13_pro/rules.mk
+++ b/keyboards/keychron/k13_pro/rules.mk
@@ -7,9 +7,6 @@ EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
ENCODER_ENABLE = no # Enable Encoder
DIP_SWITCH_ENABLE = yes
BLUETOOTH_ENABLE = no
diff --git a/keyboards/keychron/k1_pro/ansi/rgb/config.h b/keyboards/keychron/k1_pro/ansi/rgb/config.h
index e7104c07e7..e6227054cc 100755
--- a/keyboards/keychron/k1_pro/ansi/rgb/config.h
+++ b/keyboards/keychron/k1_pro/ansi/rgb/config.h
@@ -25,13 +25,6 @@
# define DRIVER_2_LED_TOTAL 40
# define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
-/* Increase I2C speed to 1000 KHz */
-# define I2C1_TIMINGR_PRESC 0U
-# define I2C1_TIMINGR_SCLDEL 3U
-# define I2C1_TIMINGR_SDADEL 0U
-# define I2C1_TIMINGR_SCLH 15U
-# define I2C1_TIMINGR_SCLL 30U
-
/* Set to infinit, which is use in USB mode by default */
# define RGB_MATRIX_TIMEOUT RGB_MATRIX_TIMEOUT_INFINITE
diff --git a/keyboards/keychron/k1_pro/ansi/rgb/info.json b/keyboards/keychron/k1_pro/ansi/rgb/info.json
index 85f9e78d1e..ca4b4d079d 100755
--- a/keyboards/keychron/k1_pro/ansi/rgb/info.json
+++ b/keyboards/keychron/k1_pro/ansi/rgb/info.json
@@ -11,7 +11,7 @@
"processor": "STM32L432",
"bootloader": "stm32-dfu",
"layouts": {
- "LAYOUT_ansi_87": {
+ "LAYOUT_tkl_ansi": {
"layout": [
{"matrix":[0,0], "x":0, "y":0},
{"matrix":[0,1], "x":2, "y":0},
diff --git a/keyboards/keychron/k1_pro/ansi/rgb/keymaps/default/keymap.c b/keyboards/keychron/k1_pro/ansi/rgb/keymaps/default/keymap.c
index e2fddd9e4e..9cc8864559 100755
--- a/keyboards/keychron/k1_pro/ansi/rgb/keymaps/default/keymap.c
+++ b/keyboards/keychron/k1_pro/ansi/rgb/keymaps/default/keymap.c
@@ -25,35 +25,35 @@ enum layers{
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[MAC_BASE] = LAYOUT_ansi_87(
- KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, 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_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_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_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_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+ [MAC_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, 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_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_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_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_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
-[MAC_FN] = LAYOUT_ansi_87(
- _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- 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, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+ [MAC_FN] = LAYOUT_tkl_ansi(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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_87(
- 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_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_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_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_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+ [WIN_BASE] = LAYOUT_tkl_ansi(
+ 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_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_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_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_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
-[WIN_FN] = LAYOUT_ansi_87(
- _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- 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_FN] = LAYOUT_tkl_ansi(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
};
diff --git a/keyboards/keychron/k1_pro/ansi/rgb/keymaps/via/keymap.c b/keyboards/keychron/k1_pro/ansi/rgb/keymaps/via/keymap.c
index e2fddd9e4e..9cc8864559 100755
--- a/keyboards/keychron/k1_pro/ansi/rgb/keymaps/via/keymap.c
+++ b/keyboards/keychron/k1_pro/ansi/rgb/keymaps/via/keymap.c
@@ -25,35 +25,35 @@ enum layers{
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[MAC_BASE] = LAYOUT_ansi_87(
- KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, 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_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_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_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_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+ [MAC_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, 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_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_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_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_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
-[MAC_FN] = LAYOUT_ansi_87(
- _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- 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, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+ [MAC_FN] = LAYOUT_tkl_ansi(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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_87(
- 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_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_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_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_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+ [WIN_BASE] = LAYOUT_tkl_ansi(
+ 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_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_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_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_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
-[WIN_FN] = LAYOUT_ansi_87(
- _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- 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_FN] = LAYOUT_tkl_ansi(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
};
diff --git a/keyboards/keychron/k1_pro/ansi/rgb/rgb.c b/keyboards/keychron/k1_pro/ansi/rgb/rgb.c
index ce087a2d78..33fb65b997 100755
--- a/keyboards/keychron/k1_pro/ansi/rgb/rgb.c
+++ b/keyboards/keychron/k1_pro/ansi/rgb/rgb.c
@@ -1,4 +1,4 @@
-/* Copyright 2021 @ Keychron (https://www.keychron.com)
+/* 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
@@ -19,104 +19,104 @@
// clang-format off
#ifdef RGB_MATRIX_ENABLE
const ckled2001_led g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
-/* Refer to IS31 manual for these locations
+/* Refer to CKLED2001 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
- {0, I_1, G_1, H_1},
- {0, I_2, G_2, H_2},
- {0, I_3, G_3, H_3},
- {0, I_4, G_4, H_4},
- {0, I_5, G_5, H_5},
- {0, I_6, G_6, H_6},
- {0, I_7, G_7, H_7},
- {0, I_8, G_8, H_8},
- {0, I_9, G_9, H_9},
- {0, I_10, G_10, H_10},
- {0, I_11, G_11, H_11},
- {0, I_12, G_12, H_12},
- {0, I_13, G_13, H_13},
- {0, I_15, G_15, H_15},
- {0, I_16, G_16, H_16},
- {1, F_8, D_8, E_8},
+ {0, I_1, G_1, H_1},
+ {0, I_2, G_2, H_2},
+ {0, I_3, G_3, H_3},
+ {0, I_4, G_4, H_4},
+ {0, I_5, G_5, H_5},
+ {0, I_6, G_6, H_6},
+ {0, I_7, G_7, H_7},
+ {0, I_8, G_8, H_8},
+ {0, I_9, G_9, H_9},
+ {0, I_10, G_10, H_10},
+ {0, I_11, G_11, H_11},
+ {0, I_12, G_12, H_12},
+ {0, I_13, G_13, H_13},
+ {0, I_15, G_15, H_15},
+ {0, I_16, G_16, H_16},
+ {1, F_8, D_8, E_8},
- {0, F_1, D_1, E_1},
- {0, F_2, D_2, E_2},
- {0, F_3, D_3, E_3},
- {0, F_4, D_4, E_4},
- {0, F_5, D_5, E_5},
- {0, F_6, D_6, E_6},
- {0, F_7, D_7, E_7},
- {0, F_8, D_8, E_8},
- {0, F_9, D_9, E_9},
- {0, F_10, D_10, E_10},
- {0, F_11, D_11, E_11},
- {0, F_12, D_12, E_12},
- {0, F_13, D_13, E_13},
- {0, F_14, D_14, E_14},
- {0, F_15, D_15, E_15},
- {0, F_16, D_16, E_16},
- {1, F_9, D_9, E_9},
+ {0, F_1, D_1, E_1},
+ {0, F_2, D_2, E_2},
+ {0, F_3, D_3, E_3},
+ {0, F_4, D_4, E_4},
+ {0, F_5, D_5, E_5},
+ {0, F_6, D_6, E_6},
+ {0, F_7, D_7, E_7},
+ {0, F_8, D_8, E_8},
+ {0, F_9, D_9, E_9},
+ {0, F_10, D_10, E_10},
+ {0, F_11, D_11, E_11},
+ {0, F_12, D_12, E_12},
+ {0, F_13, D_13, E_13},
+ {0, F_14, D_14, E_14},
+ {0, F_15, D_15, E_15},
+ {0, F_16, D_16, E_16},
+ {1, F_9, D_9, E_9},
- {0, A_1, C_1, B_1},
- {0, A_2, C_2, B_2},
- {0, A_3, C_3, B_3},
- {0, A_4, C_4, B_4},
- {0, A_5, C_5, B_5},
- {0, A_6, C_6, B_6},
- {0, A_7, C_7, B_7},
- {0, A_8, C_8, B_8},
- {0, A_9, C_9, B_9},
- {0, A_10, C_10, B_10},
- {0, A_11, C_11, B_11},
- {0, A_12, C_12, B_12},
- {0, A_13, C_13, B_13},
- {0, A_14, C_14, B_14},
- {0, A_15, C_15, B_15},
- {0, A_16, C_16, B_16},
- {1, F_6, D_6, E_6},
+ {0, A_1, C_1, B_1},
+ {0, A_2, C_2, B_2},
+ {0, A_3, C_3, B_3},
+ {0, A_4, C_4, B_4},
+ {0, A_5, C_5, B_5},
+ {0, A_6, C_6, B_6},
+ {0, A_7, C_7, B_7},
+ {0, A_8, C_8, B_8},
+ {0, A_9, C_9, B_9},
+ {0, A_10, C_10, B_10},
+ {0, A_11, C_11, B_11},
+ {0, A_12, C_12, B_12},
+ {0, A_13, C_13, B_13},
+ {0, A_14, C_14, B_14},
+ {0, A_15, C_15, B_15},
+ {0, A_16, C_16, B_16},
+ {1, F_6, D_6, E_6},
- {1, I_1, G_1, H_1},
- {1, I_2, G_2, H_2},
- {1, I_3, G_3, H_3},
- {1, I_4, G_4, H_4},
- {1, I_5, G_5, H_5},
- {1, I_6, G_6, H_6},
- {1, I_7, G_7, H_7},
- {1, I_8, G_8, H_8},
- {1, I_9, G_9, H_9},
- {1, I_10, G_10, H_10},
- {1, I_11, G_11, H_11},
- {1, I_12, G_12, H_12},
- {1, I_14, G_14, H_14},
+ {1, I_1, G_1, H_1},
+ {1, I_2, G_2, H_2},
+ {1, I_3, G_3, H_3},
+ {1, I_4, G_4, H_4},
+ {1, I_5, G_5, H_5},
+ {1, I_6, G_6, H_6},
+ {1, I_7, G_7, H_7},
+ {1, I_8, G_8, H_8},
+ {1, I_9, G_9, H_9},
+ {1, I_10, G_10, H_10},
+ {1, I_11, G_11, H_11},
+ {1, I_12, G_12, H_12},
+ {1, I_14, G_14, H_14},
- {1, C_1, A_1, B_1},
- {1, C_3, A_3, B_3},
- {1, C_4, A_4, B_4},
- {1, C_5, A_5, B_5},
- {1, C_6, A_6, B_6},
- {1, C_7, A_7, B_7},
- {1, C_8, A_8, B_8},
- {1, C_9, A_9, B_9},
- {1, C_10, A_10, B_10},
- {1, C_11, A_11, B_11},
- {1, C_12, A_12, B_12},
- {1, C_14, A_14, B_14},
- {1, C_16, A_16, B_16},
+ {1, C_1, A_1, B_1},
+ {1, C_3, A_3, B_3},
+ {1, C_4, A_4, B_4},
+ {1, C_5, A_5, B_5},
+ {1, C_6, A_6, B_6},
+ {1, C_7, A_7, B_7},
+ {1, C_8, A_8, B_8},
+ {1, C_9, A_9, B_9},
+ {1, C_10, A_10, B_10},
+ {1, C_11, A_11, B_11},
+ {1, C_12, A_12, B_12},
+ {1, C_14, A_14, B_14},
+ {1, C_16, A_16, B_16},
- {1, F_1, D_1, E_1},
- {1, F_2, D_2, E_2},
- {1, F_3, D_3, E_3},
- {1, F_7, D_7, E_7},
- {1, F_11, D_11, E_11},
- {1, F_12, D_12, E_12},
- {1, F_13, D_13, E_13},
- {1, F_14, D_14, E_14},
- {1, F_15, D_15, E_15},
- {1, F_16, D_16, E_16},
- {1, C_15, A_15, B_15}
+ {1, F_1, D_1, E_1},
+ {1, F_2, D_2, E_2},
+ {1, F_3, D_3, E_3},
+ {1, F_7, D_7, E_7},
+ {1, F_11, D_11, E_11},
+ {1, F_12, D_12, E_12},
+ {1, F_13, D_13, E_13},
+ {1, F_14, D_14, E_14},
+ {1, F_15, D_15, E_15},
+ {1, F_16, D_16, E_16},
+ {1, C_15, A_15, B_15}
};
#define __ NO_LED
@@ -143,9 +143,9 @@ led_config_t g_led_config = {
},
{
// RGB LED Index to Flag
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4,
- 1, 8, 8, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1,
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 4, 8, 8, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1,
8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1
diff --git a/keyboards/keychron/k1_pro/ansi/white/config.h b/keyboards/keychron/k1_pro/ansi/white/config.h
index 74821447f8..ac29af2439 100755
--- a/keyboards/keychron/k1_pro/ansi/white/config.h
+++ b/keyboards/keychron/k1_pro/ansi/white/config.h
@@ -23,13 +23,6 @@
# define DRIVER_1_LED_TOTAL 87
# define LED_MATRIX_LED_COUNT DRIVER_1_LED_TOTAL
-/* Increase I2C speed to 1000 KHz */
-# define I2C1_TIMINGR_PRESC 0U
-# define I2C1_TIMINGR_SCLDEL 3U
-# define I2C1_TIMINGR_SDADEL 0U
-# define I2C1_TIMINGR_SCLH 15U
-# define I2C1_TIMINGR_SCLL 30U
-
/* Set to infinit, which is use in USB mode by default */
# define LED_MATRIX_TIMEOUT LED_MATRIX_TIMEOUT_INFINITE
diff --git a/keyboards/keychron/k1_pro/ansi/white/info.json b/keyboards/keychron/k1_pro/ansi/white/info.json
index 6bc3562e6e..8b7ad7c4b8 100755
--- a/keyboards/keychron/k1_pro/ansi/white/info.json
+++ b/keyboards/keychron/k1_pro/ansi/white/info.json
@@ -11,7 +11,7 @@
"processor": "STM32L432",
"bootloader": "stm32-dfu",
"layouts": {
- "LAYOUT_ansi_87": {
+ "LAYOUT_tkl_ansi": {
"layout": [
{"matrix":[0,0], "x":0, "y":0},
{"matrix":[0,1], "x":2, "y":0},
diff --git a/keyboards/keychron/k1_pro/ansi/white/keymaps/default/keymap.c b/keyboards/keychron/k1_pro/ansi/white/keymaps/default/keymap.c
index 84f25a2c77..2eb4c94345 100755
--- a/keyboards/keychron/k1_pro/ansi/white/keymaps/default/keymap.c
+++ b/keyboards/keychron/k1_pro/ansi/white/keymaps/default/keymap.c
@@ -25,7 +25,7 @@ enum layers{
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[MAC_BASE] = LAYOUT_ansi_87(
+[MAC_BASE] = LAYOUT_tkl_ansi(
KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, 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_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,
@@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
-[MAC_FN] = LAYOUT_ansi_87(
+[MAC_FN] = LAYOUT_tkl_ansi(
_______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
-[WIN_BASE] = LAYOUT_ansi_87(
+[WIN_BASE] = LAYOUT_tkl_ansi(
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_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,
@@ -49,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
-[WIN_FN] = LAYOUT_ansi_87(
+[WIN_FN] = LAYOUT_tkl_ansi(
_______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/k1_pro/ansi/white/keymaps/via/keymap.c b/keyboards/keychron/k1_pro/ansi/white/keymaps/via/keymap.c
index 84f25a2c77..2eb4c94345 100755
--- a/keyboards/keychron/k1_pro/ansi/white/keymaps/via/keymap.c
+++ b/keyboards/keychron/k1_pro/ansi/white/keymaps/via/keymap.c
@@ -25,7 +25,7 @@ enum layers{
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[MAC_BASE] = LAYOUT_ansi_87(
+[MAC_BASE] = LAYOUT_tkl_ansi(
KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, 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_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,
@@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
-[MAC_FN] = LAYOUT_ansi_87(
+[MAC_FN] = LAYOUT_tkl_ansi(
_______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
-[WIN_BASE] = LAYOUT_ansi_87(
+[WIN_BASE] = LAYOUT_tkl_ansi(
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_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,
@@ -49,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
-[WIN_FN] = LAYOUT_ansi_87(
+[WIN_FN] = LAYOUT_tkl_ansi(
_______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
BL_TOGG, BL_STEP, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/keychron/k1_pro/ansi/white/white.c b/keyboards/keychron/k1_pro/ansi/white/white.c
index d071614ff5..8f9a509ff4 100755
--- a/keyboards/keychron/k1_pro/ansi/white/white.c
+++ b/keyboards/keychron/k1_pro/ansi/white/white.c
@@ -1,4 +1,4 @@
-/* Copyright 2021 @ Keychron (https://www.keychron.com)
+/* 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
@@ -19,7 +19,7 @@
// clang-format off
#ifdef LED_MATRIX_ENABLE
const ckled2001_led g_ckled2001_leds[LED_MATRIX_LED_COUNT] = {
-/* Refer to IS31 manual for these locations
+/* Refer to CKLED2001 manual for these locations
* driver
* | LED address
* | | */
diff --git a/keyboards/keychron/k1_pro/config.h b/keyboards/keychron/k1_pro/config.h
index b254219bcf..92a91a236d 100755
--- a/keyboards/keychron/k1_pro/config.h
+++ b/keyboards/keychron/k1_pro/config.h
@@ -1,4 +1,4 @@
-/* Copyright 2021 @ Keychron (https://www.keychron.com)
+/* 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
@@ -40,6 +40,13 @@
#define LED_CAPS_LOCK_PIN A0
#define LED_PIN_ON_STATE 1
+/* Increase I2C speed to 1000 KHz */
+#define I2C1_TIMINGR_PRESC 0U
+#define I2C1_TIMINGR_SCLDEL 3U
+#define I2C1_TIMINGR_SDADEL 0U
+#define I2C1_TIMINGR_SCLH 15U
+#define I2C1_TIMINGR_SCLL 51U
+
#ifdef KC_BLUETOOTH_ENABLE
/* Hardware configuration */
# define USB_BT_MODE_SELECT_PIN A10
diff --git a/keyboards/keychron/k1_pro/k1_pro.c b/keyboards/keychron/k1_pro/k1_pro.c
index 8bb75b7b55..60189fc0fd 100755
--- a/keyboards/keychron/k1_pro/k1_pro.c
+++ b/keyboards/keychron/k1_pro/k1_pro.c
@@ -201,7 +201,8 @@ void matrix_scan_kb(void) {
#ifdef KC_BLUETOOTH_ENABLE
static void ckbt51_param_init(void) {
/* Set bluetooth device name */
- ckbt51_set_local_name(STR(PRODUCT));
+ // ckbt51_set_local_name(STR(PRODUCT));
+ ckbt51_set_local_name(PRODUCT);
/* Set bluetooth parameters */
module_param_t param = {.event_mode = 0x02,
.connected_idle_timeout = 7200,
@@ -229,6 +230,21 @@ void bluetooth_enter_disconnected_kb(uint8_t host_idx) {
}
}
+void ckbt51_default_ack_handler(uint8_t *data, uint8_t len) {
+ if (data[1] == 0x45) {
+ module_param_t param = {.event_mode = 0x02,
+ .connected_idle_timeout = 7200,
+ .pairing_timeout = 180,
+ .pairing_mode = 0,
+ .reconnect_timeout = 5,
+ .report_rate = 90,
+ .vendor_id_source = 1,
+ .verndor_id = 0, // Must be 0x3434
+ .product_id = PRODUCT_ID};
+ ckbt51_set_param(¶m);
+ }
+}
+
void bluetooth_pre_task(void) {
static uint8_t mode = 1;
diff --git a/keyboards/keychron/k1_pro/matrix.c b/keyboards/keychron/k1_pro/matrix.c
index 072cfc3280..22d2ac1e11 100755
--- a/keyboards/keychron/k1_pro/matrix.c
+++ b/keyboards/keychron/k1_pro/matrix.c
@@ -14,70 +14,15 @@
* along with this program. If not, see .
*/
-#include "stdint.h"
-#include "hal.h"
-#include "gpio.h"
#include "quantum.h"
#define HC595_STCP B0
#define HC595_SHCP A1
#define HC595_DS A7
-#define DIRECT_COL_NUM 1
-
pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-static inline void HC595_delay(uint16_t n) {
- while (n-- > 0) {
- asm volatile("nop" ::: "memory");
- }
-}
-
-#ifdef DRIVE_SHRIFT_REGISTER_WITH_SPI
-// clang-format off
-const SPIConfig hs_spicfg = {
- .circular = false,
- .slave = false,
- .data_cb = NULL,
- .error_cb = NULL,
- .ssport = PAL_PORT(HC595_STCP),
- .sspad = PAL_PAD(HC595_STCP),
- .cr1 = SPI_CR1_BR_1,
- .cr2 = SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0 | SPI_CR2_SSOE | SPI_CR2_NSSP
-};
-// clang-format on
-#endif
-static void HC595_output(uint16_t data) {
-#ifdef DRIVE_SHRIFT_REGISTER_WITH_SPI
- spiSend(&SPID1, 1, &data);
-#else
- uint8_t i;
- uint8_t n = 1;
-
- for (i = 16; i > 0; i--) {
- writePinLow(HC595_SHCP);
-
- if (data & 0x8000)
- writePinHigh(HC595_DS);
- else
- writePinLow(HC595_DS);
-
- data <<= 1;
-
- HC595_delay(n);
-
- writePinHigh(HC595_SHCP);
- HC595_delay(n);
- }
-
- HC595_delay(n);
- writePinLow(HC595_STCP);
- HC595_delay(n);
- writePinHigh(HC595_STCP);
-#endif
-}
-
static inline void setPinOutput_writeLow(pin_t pin) {
ATOMIC_BLOCK_FORCEON {
setPinOutput(pin);
@@ -85,7 +30,14 @@ static inline void setPinOutput_writeLow(pin_t pin) {
}
}
-static inline void setPinInputHigh_atomic(pin_t pin) {
+static inline void setPinOutput_writeHigh(pin_t pin) {
+ ATOMIC_BLOCK_FORCEON {
+ setPinOutput(pin);
+ writePinHigh(pin);
+ }
+}
+
+static inline void setPinInput_high(pin_t pin) {
ATOMIC_BLOCK_FORCEON {
setPinInputHigh(pin);
}
@@ -99,16 +51,65 @@ static inline uint8_t readMatrixPin(pin_t pin) {
}
}
+static inline void HC595_delay(uint16_t n) {
+ while (n-- > 0) {
+ asm volatile("nop" ::: "memory");
+ }
+}
+
+static void HC595_output(uint16_t data) {
+ ATOMIC_BLOCK_FORCEON {
+ for (uint8_t i = 0; i < MATRIX_COLS; i++) {
+ if (data & 0x1) {
+ writePinHigh(HC595_DS);
+ } else {
+ writePinLow(HC595_DS);
+ }
+
+ data = data >> 1;
+
+ writePinHigh(HC595_SHCP);
+ HC595_delay(1);
+ writePinLow(HC595_SHCP);
+ HC595_delay(1);
+ }
+ writePinHigh(HC595_STCP);
+ HC595_delay(1);
+ writePinLow(HC595_STCP);
+ HC595_delay(1);
+ }
+}
+
+static void HC595_output_oneBit(uint8_t data) {
+ ATOMIC_BLOCK_FORCEON {
+ if (data & 0x1) {
+ writePinHigh(HC595_DS);
+ } else {
+ writePinLow(HC595_DS);
+ }
+
+ writePinHigh(HC595_SHCP);
+ HC595_delay(1);
+ writePinLow(HC595_SHCP);
+ HC595_delay(1);
+
+ writePinHigh(HC595_STCP);
+ HC595_delay(1);
+ writePinLow(HC595_STCP);
+ HC595_delay(1);
+ }
+}
+
static bool select_col(uint8_t col) {
pin_t pin = col_pins[col];
- if (col < 1) {
- if (pin != NO_PIN) {
- setPinOutput_writeLow(pin);
- return true;
- }
+ if (pin != NO_PIN) {
+ setPinOutput_writeLow(pin);
+ return true;
} else {
- HC595_output(~(0x01 << (col - 1)));
+ if (col == 1) {
+ HC595_output_oneBit(0x00);
+ }
return true;
}
return false;
@@ -117,81 +118,96 @@ static bool select_col(uint8_t col) {
static void unselect_col(uint8_t col) {
pin_t pin = col_pins[col];
- if (col < 1) {
- if (pin != NO_PIN) {
- setPinInputHigh_atomic(pin);
- }
+ if (pin != NO_PIN) {
+#ifdef MATRIX_UNSELECT_DRIVE_HIGH
+ setPinOutput_writeHigh(pin);
+#else
+ setPinInput_high(pin);
+#endif
} else {
- if (col >= MATRIX_COLS - 1) HC595_output(0xFFFF);
+ HC595_output_oneBit(0x01);
}
}
static void unselect_cols(void) {
- if (col_pins[0] != NO_PIN) setPinInputHigh_atomic(col_pins[0]);
- HC595_output(0xFFFF);
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ pin_t pin = col_pins[x];
+ if (pin != NO_PIN) {
+#ifdef MATRIX_UNSELECT_DRIVE_HIGH
+ setPinOutput_writeHigh(pin);
+#else
+ setPinInput_high(pin);
+#endif
+ } else {
+ if (x == 1) HC595_output(0xFFFF);
+ }
+ }
}
void select_all_cols(void) {
- if (col_pins[0] != NO_PIN) setPinOutput_writeLow(col_pins[0]);
- HC595_output(0x0000);
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ pin_t pin = col_pins[x];
+ if (pin != NO_PIN) {
+ setPinOutput_writeLow(pin);
+ } else {
+ if (x == 1) HC595_output(0x0000);
+ }
+ }
}
-void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
+static void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col, matrix_row_t row_shifter) {
+ bool key_pressed = false;
+
// Select col
if (!select_col(current_col)) { // select col
return; // skip NO_PIN col
}
- HC595_delay(100);
+ matrix_output_select_delay();
// 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] |= (MATRIX_ROW_SHIFTER << current_col);
- // key_pressed = true;
+ current_matrix[row_index] |= row_shifter;
+ key_pressed = true;
} else {
// Pin HI, clear col bit
- current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
+ current_matrix[row_index] &= ~row_shifter;
}
}
+ // Unselect col
unselect_col(current_col);
- HC595_delay(100);
+ matrix_output_unselect_delay(current_col, key_pressed); // wait for all Row signals to go HIGH
}
void matrix_init_custom(void) {
- for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
- if (row_pins[x] != NO_PIN) {
- setPinInputHigh_atomic(row_pins[x]);
- }
- }
-#ifdef DRIVE_SHRIFT_REGISTER_WITH_SPI
- palSetPadMode(PAL_PORT(HC595_SHCP), PAL_PAD(HC595_SHCP), PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* SCK */
- palSetPadMode(PAL_PORT(HC595_DS), PAL_PAD(HC595_DS), PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* MOSI*/
- palSetPadMode(PAL_PORT(HC595_STCP), PAL_PAD(HC595_STCP), PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* CS*/
- spiStart(&SPID1, &hs_spicfg);
-#else
setPinOutput(HC595_DS);
setPinOutput(HC595_STCP);
setPinOutput(HC595_SHCP);
-#endif
+
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ if (row_pins[x] != NO_PIN) {
+ setPinInput_high(row_pins[x]);
+ }
+ }
+
unselect_cols();
}
bool matrix_scan_custom(matrix_row_t current_matrix[]) {
- bool matrix_has_changed = false;
-
matrix_row_t curr_matrix[MATRIX_ROWS] = {0};
// Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
- matrix_read_rows_on_col(curr_matrix, current_col);
+ 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);
}
- matrix_has_changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0;
- if (matrix_has_changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix));
+ bool changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0;
+ if (changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix));
- return matrix_has_changed;
+ return changed;
}
diff --git a/keyboards/keychron/k1_pro/readme.md b/keyboards/keychron/k1_pro/readme.md
index 485c381a4d..b98588e5d0 100755
--- a/keyboards/keychron/k1_pro/readme.md
+++ b/keyboards/keychron/k1_pro/readme.md
@@ -1,10 +1,12 @@
# Keychron K1 Pro
+
+
A customizable 80% TKL keyboard.
* Keyboard Maintainer: [Keychron](https://github.com/keychron)
* Hardware Supported: Keychron K1 Pro
-* Hardware Availability: [Keychron](https://www.keychron.com)
+* Hardware Availability: [Keychron K1 Pro QMK/VIA Wireless Custom Mechanical Keyboard](https://www.keychron.com/products/keychron-k1-pro-qmk-via-wireless-custom-mechanical-keyboard)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/keychron/k1_pro/rules.mk b/keyboards/keychron/k1_pro/rules.mk
index 1de119ff73..ee301839c3 100755
--- a/keyboards/keychron/k1_pro/rules.mk
+++ b/keyboards/keychron/k1_pro/rules.mk
@@ -7,9 +7,6 @@ EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
ENCODER_ENABLE = no # Enable Encoder
DIP_SWITCH_ENABLE = yes
BLUETOOTH_ENABLE = no
diff --git a/keyboards/keychron/k1_pro/via_json/k1_pro_us_rgb.json b/keyboards/keychron/k1_pro/via_json/k1_pro_us_rgb.json
new file mode 100755
index 0000000000..84fd847776
--- /dev/null
+++ b/keyboards/keychron/k1_pro/via_json/k1_pro_us_rgb.json
@@ -0,0 +1,289 @@
+{
+ "name": "Keychron K1 Pro",
+ "vendorId": "0x3434",
+ "productId": "0x0210",
+ "keycodes": ["qmk_lighting"],
+ "menus": [
+ {
+ "label": "Lighting",
+ "content": [
+ {
+ "label": "Backlight",
+ "content": [
+ {
+ "label": "Brightness",
+ "type": "range",
+ "options": [0, 255],
+ "content": ["id_qmk_rgb_matrix_brightness", 3, 1]
+ },
+ {
+ "label": "Effect",
+ "type": "dropdown",
+ "content": ["id_qmk_rgb_matrix_effect", 3, 2],
+ "options": [
+ ["None", 0],
+ ["Solid Color", 1],
+ ["Breathing", 2],
+ ["Band Spiral Val", 3],
+ ["Cycle All", 4],
+ ["Cycle Left Right", 5],
+ ["Cycle Up Down", 6],
+ ["Rainbow Moving Chevron", 7],
+ ["Cycle Out In", 8],
+ ["Cycle Out In Dual", 9],
+ ["Cycle Pinwheel", 10],
+ ["Cycle Spiral", 11],
+ ["Dual Beacon", 12],
+ ["Rainbow Beacon", 13],
+ ["Jellybean Raindrops", 14],
+ ["Pixel Rain", 15],
+ ["Typing Heatmap", 16],
+ ["Digital Rain", 17],
+ ["Reactive Simple", 18],
+ ["Reactive Multiwide", 19],
+ ["Reactive Multinexus", 20],
+ ["Splash", 21],
+ ["Solid Splash", 22]
+ ]
+ },
+ {
+ "showIf": "{id_qmk_rgb_matrix_effect} > 1",
+ "label": "Effect Speed",
+ "type": "range",
+ "options": [0, 255],
+ "content": ["id_qmk_rgb_matrix_effect_speed", 3, 3]
+ },
+ {
+ "showIf": "{id_qmk_rgb_matrix_effect} != 0 && ( {id_qmk_rgb_matrix_effect} < 4 || {id_qmk_rgb_matrix_effect} == 18 || ({id_qmk_rgb_matrix_effect} > 17 && {id_qmk_rgb_matrix_effect} != 21) ) ",
+ "label": "Color",
+ "type": "color",
+ "content": ["id_qmk_rgb_matrix_color", 3, 4]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "customKeycodes": [
+ {"name": "Left Option", "title": "Left Option", "shortName": "LOpt"},
+ {"name": "Right Option", "title": "Right Option", "shortName": "ROpt"},
+ {"name": "Left Cmd", "title": "Left Command", "shortName": "LCmd"},
+ {"name": "Right Cmd", "title": "Right Command", "shortName": "RCmd"},
+ {"name": "Misson Control", "title": "Misson Control, availabe in macOS", "shortName": "MCtrl"},
+ {"name": "Launch pad", "title": "Launch pad, availabe in macOS", "shortName": "LPad"},
+ {"name": "Task View", "title": "Task View in Windows", "shortName": "Task"},
+ {"name": "File Explorer", "title": "File Explorer in Windows", "shortName": "File"},
+ {"name": "Screen shot", "title": "Screenshot in macOS", "shortName": "SShot"},
+ {"name": "Cortana", "title": "Cortana in Windows", "shortName": "Cortana"},
+ {"name": "Siri", "title": "Siri in macOS", "shortName": "Siri"},
+ {"name": "Bluetooth Host 1", "title": "Bluetooth Host 1", "shortName": "BTH1"},
+ {"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
+ {"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
+ {"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
+ ],
+ "matrix": {"rows": 6, "cols": 17},
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "x": 1,
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "x": 0.5,
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ {
+ "x": 0.5,
+ "c": "#cccccc"
+ },
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "x": 0.25,
+ "c": "#aaaaaa"
+ },
+ "0,14",
+ "0,15",
+ "0,16"
+ ],
+ [
+ {
+ "y": 0.25
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ {
+ "x": 0.25
+ },
+ "1,14",
+ "1,15",
+ "1,16"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,13",
+ {
+ "x": 0.25
+ },
+ "2,14",
+ "2,15",
+ "2,16"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "3,13"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 2.75
+ },
+ "4,13",
+ {
+ "x": 1.25,
+ "c": "#777777"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,10",
+ {
+ "w": 1.25
+ },
+ "5,11",
+ {
+ "w": 1.25
+ },
+ "5,12",
+ {
+ "w": 1.25
+ },
+ "5,13",
+ {
+ "x": 0.25,
+ "c": "#777777"
+ },
+ "5,14",
+ "5,15",
+ "5,16"
+ ]
+ ]
+ }
+}
diff --git a/keyboards/keychron/k1_pro/via_json/k1_pro_us_white.json b/keyboards/keychron/k1_pro/via_json/k1_pro_us_white.json
new file mode 100755
index 0000000000..79e74c5929
--- /dev/null
+++ b/keyboards/keychron/k1_pro/via_json/k1_pro_us_white.json
@@ -0,0 +1,228 @@
+{
+ "name": "Keychron K1 Pro",
+ "vendorId": "0x3434",
+ "productId": "0x0213",
+ "keycodes": ["qmk_lighting"],
+ "customKeycodes": [
+ {"name": "Left Option", "title": "Left Option", "shortName": "LOpt"},
+ {"name": "Right Option", "title": "Right Option", "shortName": "ROpt"},
+ {"name": "Left Cmd", "title": "Left Command", "shortName": "LCmd"},
+ {"name": "Right Cmd", "title": "Right Command", "shortName": "RCmd"},
+ {"name": "Misson Control", "title": "Misson Control, availabe in macOS", "shortName": "MCtrl"},
+ {"name": "Launch pad", "title": "Launch pad, availabe in macOS", "shortName": "LPad"},
+ {"name": "Task View", "title": "Task View in Windows", "shortName": "Task"},
+ {"name": "File Explorer", "title": "File Explorer in Windows", "shortName": "File"},
+ {"name": "Screen shot", "title": "Screenshot in macOS", "shortName": "SShot"},
+ {"name": "Cortana", "title": "Cortana in Windows", "shortName": "Cortana"},
+ {"name": "Siri", "title": "Siri in macOS", "shortName": "Siri"},
+ {"name": "Bluetooth Host 1", "title": "Bluetooth Host 1", "shortName": "BTH1"},
+ {"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
+ {"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
+ {"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
+ ],
+ "matrix": {"rows": 6, "cols": 17},
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "x": 1,
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "x": 0.5,
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ {
+ "x": 0.5,
+ "c": "#cccccc"
+ },
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "x": 0.25,
+ "c": "#aaaaaa"
+ },
+ "0,14",
+ "0,15",
+ "0,16"
+ ],
+ [
+ {
+ "y": 0.25
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ {
+ "x": 0.25
+ },
+ "1,14",
+ "1,15",
+ "1,16"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,13",
+ {
+ "x": 0.25
+ },
+ "2,14",
+ "2,15",
+ "2,16"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "3,13"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 2.75
+ },
+ "4,13",
+ {
+ "x": 1.25,
+ "c": "#777777"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,10",
+ {
+ "w": 1.25
+ },
+ "5,11",
+ {
+ "w": 1.25
+ },
+ "5,12",
+ {
+ "w": 1.25
+ },
+ "5,13",
+ {
+ "x": 0.25,
+ "c": "#777777"
+ },
+ "5,14",
+ "5,15",
+ "5,16"
+ ]
+ ]
+ }
+}
diff --git a/keyboards/keychron/q2_pro/chconf.h b/keyboards/keychron/k2_pro/ansi/white/keymaps/candysign/config.h
similarity index 67%
rename from keyboards/keychron/q2_pro/chconf.h
rename to keyboards/keychron/k2_pro/ansi/white/keymaps/candysign/config.h
index 3f4365ac24..8aafbc3840 100755
--- a/keyboards/keychron/q2_pro/chconf.h
+++ b/keyboards/keychron/k2_pro/ansi/white/keymaps/candysign/config.h
@@ -1,4 +1,4 @@
-/* Copyright 2023 QMK
+/* 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
@@ -14,17 +14,7 @@
* along with this program. If not, see .
*/
-/*
- * This file was auto-generated by:
- * `qmk chibios-confmigrate -i keyboards/acheron/arctic/chconf.h -r platforms/chibios/common/configs/chconf.h`
- */
-
#pragma once
-#define CH_CFG_ST_FREQUENCY 10000
-
-#define CH_CFG_OPTIMIZE_SPEED FALSE
-
-#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
-
-#include_next
+#undef PRODUCT
+#define PRODUCT "CANDYSIGN KB1 Pro"
diff --git a/keyboards/keychron/k2_pro/ansi/white/keymaps/candysign/keymap.c b/keyboards/keychron/k2_pro/ansi/white/keymaps/candysign/keymap.c
new file mode 100755
index 0000000000..d685e3a413
--- /dev/null
+++ b/keyboards/keychron/k2_pro/ansi/white/keymaps/candysign/keymap.c
@@ -0,0 +1,59 @@
+/* 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[MAC_BASE] = LAYOUT_ansi_84(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, BL_DEC, BL_INC, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_DEL, 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_PGUP,
+ 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_PGDN,
+ 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_HOME,
+ 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_END,
+ KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD,MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[MAC_FN] = LAYOUT_ansi_84(
+ KC_TRNS, 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_TRNS, KC_TRNS, BL_TOGG,
+ KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ BL_TOGG, BL_STEP, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BAT_LVL, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+[WIN_BASE] = LAYOUT_ansi_84(
+ 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_DEL, 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_PGUP,
+ 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_PGDN,
+ 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_HOME,
+ 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_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[WIN_FN] = LAYOUT_ansi_84(
+ KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, BL_DEC, BL_INC, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, BL_TOGG,
+ KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ BL_TOGG, BL_STEP, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BAT_LVL, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
diff --git a/keyboards/keychron/k2_pro/ansi/white/keymaps/candysign/rules.mk b/keyboards/keychron/k2_pro/ansi/white/keymaps/candysign/rules.mk
new file mode 100755
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/keychron/k2_pro/ansi/white/keymaps/candysign/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/keychron/k2_pro/config.h b/keyboards/keychron/k2_pro/config.h
index 6f71e26b81..e595335891 100644
--- a/keyboards/keychron/k2_pro/config.h
+++ b/keyboards/keychron/k2_pro/config.h
@@ -44,6 +44,13 @@
#define LED_CAPS_LOCK_PIN A7
#define LED_PIN_ON_STATE 1
+/* Increase I2C speed to 1000 KHz */
+#define I2C1_TIMINGR_PRESC 0U
+#define I2C1_TIMINGR_SCLDEL 3U
+#define I2C1_TIMINGR_SDADEL 0U
+#define I2C1_TIMINGR_SCLH 15U
+#define I2C1_TIMINGR_SCLL 51U
+
#ifdef KC_BLUETOOTH_ENABLE
/* Hardware configuration */
# define USB_BT_MODE_SELECT_PIN A10
diff --git a/keyboards/keychron/k2_pro/jis/rgb/config.h b/keyboards/keychron/k2_pro/jis/rgb/config.h
new file mode 100755
index 0000000000..e43dd9d52a
--- /dev/null
+++ b/keyboards/keychron/k2_pro/jis/rgb/config.h
@@ -0,0 +1,101 @@
+/* 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
+
+#ifdef RGB_MATRIX_ENABLE
+/* RGB Matrix driver configuration */
+# define DRIVER_COUNT 2
+
+# define DRIVER_ADDR_1 0b1110111
+# define DRIVER_ADDR_2 0b1110100
+# define DRIVER_1_LED_COUNT 47
+# define DRIVER_2_LED_COUNT 40
+# define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_COUNT + DRIVER_2_LED_COUNT)
+
+/* 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 32
+
+# define DIM_CAPS_LOCK
+# define CAPS_LOCK_INDEX 46
+# define LOW_BAT_IND_INDEX 79
+
+/* RGB Matrix Animation modes. Explicitly enabled
+ * For full list of effects, see:
+ * https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+ */
+
+# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+// # define ENABLE_RGB_MATRIX_ALPHAS_MODS
+// # define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+// # define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_BREATHING
+// # define ENABLE_RGB_MATRIX_BAND_SAT
+// # define ENABLE_RGB_MATRIX_BAND_VAL
+// # define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+// # define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+// # define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# define ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define ENABLE_RGB_MATRIX_DUAL_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+// # define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+// # define ENABLE_RGB_MATRIX_RAINDROPS
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+// # define ENABLE_RGB_MATRIX_HUE_BREATHING
+// # define ENABLE_RGB_MATRIX_HUE_PENDULUM
+// # define ENABLE_RGB_MATRIX_HUE_WAVE
+# define ENABLE_RGB_MATRIX_PIXEL_RAIN
+// # define ENABLE_RGB_MATRIX_PIXEL_FLOW
+// # define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+
+/* enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined */
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+
+/* enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined*/
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_RGB_MATRIX_SPLASH
+// # define ENABLE_RGB_MATRIX_MULTISPLASH
+# define ENABLE_RGB_MATRIX_SOLID_SPLASH
+// # define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+/* Set LED driver current */
+# define CKLED2001_CURRENT_TUNE \
+ { 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38 }
+
+#endif
diff --git a/keyboards/keychron/k2_pro/jis/rgb/info.json b/keyboards/keychron/k2_pro/jis/rgb/info.json
new file mode 100755
index 0000000000..8910572942
--- /dev/null
+++ b/keyboards/keychron/k2_pro/jis/rgb/info.json
@@ -0,0 +1,111 @@
+{
+ "keyboard_name": "Keychron K2 Pro",
+ "manufacturer": "Keychron",
+ "url": "https://github.com/Keychron",
+ "maintainer": "lokher",
+ "usb": {
+ "vid": "0x3434",
+ "pid": "0x0223",
+ "device_version": "1.0.0"
+ },
+ "processor": "STM32L432",
+ "bootloader": "stm32-dfu",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix":[0,0], "x":0, "y":0},
+ {"matrix":[0,1], "x":1, "y":0},
+ {"matrix":[0,2], "x":2, "y":0},
+ {"matrix":[0,3], "x":3, "y":0},
+ {"matrix":[0,4], "x":4, "y":0},
+ {"matrix":[0,5], "x":5, "y":0},
+ {"matrix":[0,6], "x":6, "y":0},
+ {"matrix":[0,7], "x":7, "y":0},
+ {"matrix":[0,8], "x":8, "y":0},
+ {"matrix":[0,9], "x":9, "y":0},
+ {"matrix":[0,10], "x":10, "y":0},
+ {"matrix":[0,11], "x":11, "y":0},
+ {"matrix":[0,12], "x":12, "y":0},
+ {"matrix":[0,13], "x":13, "y":0},
+ {"matrix":[0,14], "x":14, "y":0},
+ {"matrix":[0,15], "x":15, "y":0},
+
+ {"matrix":[1,0], "x":0, "y":1},
+ {"matrix":[1,1], "x":1, "y":1},
+ {"matrix":[1,2], "x":2, "y":1},
+ {"matrix":[1,3], "x":3, "y":1},
+ {"matrix":[1,4], "x":4, "y":1},
+ {"matrix":[1,5], "x":5, "y":1},
+ {"matrix":[1,6], "x":6, "y":1},
+ {"matrix":[1,7], "x":7, "y":1},
+ {"matrix":[1,8], "x":8, "y":1},
+ {"matrix":[1,9], "x":9, "y":1},
+ {"matrix":[1,10], "x":10, "y":1},
+ {"matrix":[1,11], "x":11, "y":1},
+ {"matrix":[1,12], "x":12, "y":1},
+ {"matrix":[1,13], "x":13, "y":1},
+ {"matrix":[1,14], "x":14, "y":1},
+ {"matrix":[1,15], "x":15, "y":1},
+
+ {"matrix":[2,0], "x":0, "y":2, "w":1.5},
+ {"matrix":[2,1], "x":1.5, "y":2},
+ {"matrix":[2,2], "x":2.5, "y":2},
+ {"matrix":[2,3], "x":3.5, "y":2},
+ {"matrix":[2,4], "x":4.5, "y":2},
+ {"matrix":[2,5], "x":5.5, "y":2},
+ {"matrix":[2,6], "x":6.5, "y":2},
+ {"matrix":[2,7], "x":7.5, "y":2},
+ {"matrix":[2,8], "x":8.5, "y":2},
+ {"matrix":[2,9], "x":9.5, "y":2},
+ {"matrix":[2,10], "x":10.5, "y":2},
+ {"matrix":[2,11], "x":11.5, "y":2},
+ {"matrix":[2,12], "x":12.5, "y":2},
+ {"matrix":[2,15], "x":15, "y":2},
+
+ {"matrix":[3,0], "x":0, "y":3, "w":1.75},
+ {"matrix":[3,1], "x":1.75, "y":3},
+ {"matrix":[3,2], "x":2.75, "y":3},
+ {"matrix":[3,3], "x":3.75, "y":3},
+ {"matrix":[3,4], "x":4.75, "y":3},
+ {"matrix":[3,5], "x":5.75, "y":3},
+ {"matrix":[3,6], "x":6.75, "y":3},
+ {"matrix":[3,7], "x":7.75, "y":3},
+ {"matrix":[3,8], "x":8.75, "y":3},
+ {"matrix":[3,9], "x":9.75, "y":3},
+ {"matrix":[3,10], "x":10.75, "y":3},
+ {"matrix":[3,11], "x":11.75, "y":3},
+ {"matrix":[3,13], "x":12.75, "y":3},
+ {"matrix":[2,13], "x":13.75, "y":2, "w":1.25, "h":2},
+ {"matrix":[3,15], "x":15, "y":3},
+
+ {"matrix":[4,0], "x":0, "y":4, "w":2.25},
+ {"matrix":[4,2], "x":2.25, "y":4},
+ {"matrix":[4,3], "x":3.25, "y":4},
+ {"matrix":[4,4], "x":4.25, "y":4},
+ {"matrix":[4,5], "x":5.25, "y":4},
+ {"matrix":[4,6], "x":6.25, "y":4},
+ {"matrix":[4,7], "x":7.25, "y":4},
+ {"matrix":[4,8], "x":8.25, "y":4},
+ {"matrix":[4,9], "x":9.25, "y":4},
+ {"matrix":[4,10], "x":10.25, "y":4},
+ {"matrix":[4,11], "x":11.25, "y":4},
+ {"matrix":[4,12], "x":12.25, "y":4},
+ {"matrix":[4,13], "x":13.25, "y":4, "w":1.75},
+ {"matrix":[4,15], "x":15, "y":4},
+
+ {"matrix":[5,0], "x":0, "y":5, "w":1.25},
+ {"matrix":[5,1], "x":1.25, "y":5},
+ {"matrix":[5,2], "x":2.25, "y":5, "w":1.25},
+ {"matrix":[5,3], "x":3.5, "y":5},
+ {"matrix":[5,6], "x":4.5, "y":5, "w":4.5},
+ {"matrix":[5,8], "x":9, "y":5},
+ {"matrix":[5,9], "x":10, "y":5},
+ {"matrix":[5,10], "x":11, "y":5},
+ {"matrix":[5,11], "x":12, "y":5},
+ {"matrix":[5,12], "x":13, "y":5},
+ {"matrix":[5,13], "x":14, "y":5},
+ {"matrix":[5,15], "x":15, "y":5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keychron/k2_pro/jis/rgb/keymaps/default/keymap.c b/keyboards/keychron/k2_pro/jis/rgb/keymaps/default/keymap.c
new file mode 100755
index 0000000000..92dfaf4ce4
--- /dev/null
+++ b/keyboards/keychron/k2_pro/jis/rgb/keymaps/default/keymap.c
@@ -0,0 +1,59 @@
+/* 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
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_DEL, 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_INT3, KC_BSPC, KC_PGUP, // 32
+ 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_PGDN, // 46
+ 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_NUHS, KC_ENT, KC_HOME, // 61
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_END,
+ KC_LCTL, KC_LOPTN, KC_LCMMD, KC_LNG2, KC_SPC, KC_LNG1, KC_RCMMD,MO(MAC_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT(
+ KC_TRNS, 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_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BAT_LVL, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [WIN_BASE] = LAYOUT(
+ 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_DEL, 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_INT3, KC_PGUP,
+ 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_PGDN,
+ 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_NUHS, KC_ENT, KC_HOME,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_RALT, MO(WIN_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT(
+ KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BAT_LVL, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
diff --git a/keyboards/keychron/k2_pro/jis/rgb/keymaps/via/keymap.c b/keyboards/keychron/k2_pro/jis/rgb/keymaps/via/keymap.c
new file mode 100755
index 0000000000..92dfaf4ce4
--- /dev/null
+++ b/keyboards/keychron/k2_pro/jis/rgb/keymaps/via/keymap.c
@@ -0,0 +1,59 @@
+/* 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
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_DEL, 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_INT3, KC_BSPC, KC_PGUP, // 32
+ 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_PGDN, // 46
+ 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_NUHS, KC_ENT, KC_HOME, // 61
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_END,
+ KC_LCTL, KC_LOPTN, KC_LCMMD, KC_LNG2, KC_SPC, KC_LNG1, KC_RCMMD,MO(MAC_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT(
+ KC_TRNS, 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_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BAT_LVL, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [WIN_BASE] = LAYOUT(
+ 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_DEL, 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_INT3, KC_PGUP,
+ 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_PGDN,
+ 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_NUHS, KC_ENT, KC_HOME,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_RALT, MO(WIN_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT(
+ KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BAT_LVL, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
diff --git a/keyboards/keychron/k2_pro/jis/rgb/keymaps/via/rules.mk b/keyboards/keychron/k2_pro/jis/rgb/keymaps/via/rules.mk
new file mode 100755
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/keychron/k2_pro/jis/rgb/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/keychron/k2_pro/jis/rgb/rgb.c b/keyboards/keychron/k2_pro/jis/rgb/rgb.c
new file mode 100755
index 0000000000..5ed4c3a0de
--- /dev/null
+++ b/keyboards/keychron/k2_pro/jis/rgb/rgb.c
@@ -0,0 +1,153 @@
+/* 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"
+
+// clang-format off
+#ifdef RGB_MATRIX_ENABLE
+const ckled2001_led g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to CKLED2001 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, I_1, G_1, H_1},
+ {0, I_2, G_2, H_2},
+ {0, I_3, G_3, H_3},
+ {0, I_4, G_4, H_4},
+ {0, I_5, G_5, H_5},
+ {0, I_6, G_6, H_6},
+ {0, I_7, G_7, H_7},
+ {0, I_8, G_8, H_8},
+ {0, I_9, G_9, H_9},
+ {0, I_10, G_10, H_10},
+ {0, I_11, G_11, H_11},
+ {0, I_12, G_12, H_12},
+ {0, I_13, G_13, H_13},
+ {0, I_14, G_14, H_14},
+ {0, I_15, G_15, H_15},
+ {0, I_16, G_16, H_16},
+
+ {0, C_1, A_1, B_1},
+ {0, C_2, A_2, B_2},
+ {0, C_3, A_3, B_3},
+ {0, C_4, A_4, B_4},
+ {0, C_5, A_5, B_5},
+ {0, C_6, A_6, B_6},
+ {0, C_7, A_7, B_7},
+ {0, C_8, A_8, B_8},
+ {0, C_9, A_9, B_9},
+ {0, C_10, A_10, B_10},
+ {0, C_11, A_11, B_11},
+ {0, C_12, A_12, B_12},
+ {0, C_13, A_13, B_13},
+ {0, C_14, A_14, B_14},
+ {0, C_15, A_15, B_15},
+ {0, C_16, A_16, B_16},
+
+ {0, F_1, D_1, E_1},
+ {0, F_2, D_2, E_2},
+ {0, F_3, D_3, E_3},
+ {0, F_4, D_4, E_4},
+ {0, F_5, D_5, E_5},
+ {0, F_6, D_6, E_6},
+ {0, F_7, D_7, E_7},
+ {0, F_8, D_8, E_8},
+ {0, F_9, D_9, E_9},
+ {0, F_10, D_10, E_10},
+ {0, F_11, D_11, E_11},
+ {0, F_12, D_12, E_12},
+ {0, F_13, D_13, E_13},
+ {0, F_16, D_16, E_16},
+
+ {1, C_16, A_16, B_16},
+ {1, C_15, A_15, B_15},
+ {1, C_14, A_14, B_14},
+ {1, C_13, A_13, B_13},
+ {1, C_12, A_12, B_12},
+ {1, C_11, A_11, B_11},
+ {1, C_10, A_10, B_10},
+ {1, C_9, A_9, B_9},
+ {1, C_8, A_8, B_8},
+ {1, C_7, A_7, B_7},
+ {1, C_6, A_6, B_6},
+ {1, C_5, A_5, B_5},
+ {1, C_3, A_3, B_3},
+ {0, F_14, D_14, E_14},
+ {1, C_1, A_1, B_1},
+
+ {1, I_16, G_16, H_16},
+ {1, I_14, G_14, H_14},
+ {1, I_13, G_13, H_13},
+ {1, I_12, G_12, H_12},
+ {1, I_11, G_11, H_11},
+ {1, I_10, G_10, H_10},
+ {1, I_9, G_9, H_9},
+ {1, I_8, G_8, H_8},
+ {1, I_7, G_7, H_7},
+ {1, I_6, G_6, H_6},
+ {1, I_5, G_5, H_5},
+ {1, I_4, G_4, H_4},
+ {1, I_3, G_3, H_3},
+ {1, I_1, G_1, H_1},
+
+ {1, F_16, D_16, E_16},
+ {1, F_15, D_15, E_15},
+ {1, F_14, D_14, E_14},
+ {1, F_13, D_13, E_13},
+ {1, F_10, D_10, E_10},
+ {1, F_8, D_8, E_8},
+ {1, F_7, D_7, E_7},
+ {1, F_6, D_6, E_6},
+ {1, F_5, D_5, E_5},
+ {1, F_4, D_4, E_4},
+ {1, F_3, D_3, E_3},
+ {1, F_1, D_1, E_1}
+};
+
+#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, 59, __, 45 },
+ { 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, __, 58, __, 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 }
+ },
+ {
+ // LED Index to Physical Position
+ {0,0}, {15,0}, {30,0}, {45,0}, {60,0}, {75,0}, {90,0}, {105,0}, {119,0}, {134,0}, {149,0}, {164,0}, {179,0}, {194,0}, {209,0}, {224,0},
+ {0,13}, {15,13}, {30,13}, {45,13}, {60,13}, {75,13}, {90,13}, {105,13}, {119,13}, {134,13}, {149,13}, {164,13}, {179,13}, {194,13}, {209,13}, {224,13},
+ {4,26}, {22,26}, {37,26}, {52,26}, {67,26}, {82,26}, {97,26}, {112,26}, {127,26}, {142,26}, {157,26}, {172,26}, {187,26}, {224,26},
+ {6,38}, {26,38}, {41,38}, {56,38}, {71,38}, {86,38}, {101,38}, {116,38}, {131,38}, {146,38}, {161,38}, {175,38}, {190,38}, {211,34}, {224,38},
+ {9,51}, {34,51}, {49,51}, {64,51}, {78,51}, {93,51}, {108,51}, {123,51}, {138,51}, {153,51}, {168,51}, {183,51}, {204,51}, {224,51},
+ {2,64}, {19,64}, {35,64}, {52,64}, {93,64}, {134,64}, {149,64}, {164,64}, {179,64}, {194,64}, {209,64}, {224,64},
+ },
+ {
+ // RGB LED Index to Flag
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 8, 8, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1,
+ 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1
+ }
+};
+#endif
diff --git a/keyboards/keychron/k2_pro/jis/rgb/rules.mk b/keyboards/keychron/k2_pro/jis/rgb/rules.mk
new file mode 100755
index 0000000000..f5f4192470
--- /dev/null
+++ b/keyboards/keychron/k2_pro/jis/rgb/rules.mk
@@ -0,0 +1,2 @@
+RGB_MATRIX_ENABLE = yes
+RGB_MATRIX_DRIVER = CKLED2001
\ No newline at end of file
diff --git a/keyboards/keychron/k2_pro/jis/white/config.h b/keyboards/keychron/k2_pro/jis/white/config.h
new file mode 100755
index 0000000000..0dfb6ab8eb
--- /dev/null
+++ b/keyboards/keychron/k2_pro/jis/white/config.h
@@ -0,0 +1,76 @@
+/* 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
+
+#ifdef LED_MATRIX_ENABLE
+/* LED matrix driver configuration */
+# define DRIVER_COUNT 1
+# define DRIVER_ADDR_1 0b1110100
+# define DRIVER_1_LED_COUNT 87
+# define LED_MATRIX_LED_COUNT DRIVER_1_LED_COUNT
+
+/* 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 32
+
+# define DIM_CAPS_LOCK
+# define CAPS_LOCK_INDEX 46
+# define LOW_BAT_IND_INDEX 79
+
+/* LED Matrix Animation modes. Explicitly enabled
+ * For full list of effects, see:
+ * https://docs.qmk.fm/#/feature_led_matrix?id=led-matrix-effects
+ */
+# define LED_MATRIX_KEYPRESSES
+
+# define ENABLE_LED_MATRIX_NONE
+# define ENABLE_LED_MATRIX_SOLID
+// # define ENABLE_LED_MATRIX_ALPHAS_MODS
+# define ENABLE_LED_MATRIX_BREATHING
+// # define ENABLE_LED_MATRIX_BAND
+# define ENABLE_LED_MATRIX_BAND_PINWHEEL
+# define ENABLE_LED_MATRIX_BAND_SPIRAL
+# define ENABLE_LED_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_LED_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_LED_MATRIX_CYCLE_OUT_IN
+# define ENABLE_LED_MATRIX_DUAL_BEACON
+
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_SIMPLE
+// # define ENABLE_LED_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTIWIDE
+// # define ENABLE_LED_MATRIX_SOLID_REACTIVE_CROSS
+// # define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTICROSS
+// # define ENABLE_LED_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_LED_MATRIX_SOLID_SPLASH
+// # define ENABLE_LED_MATRIX_SOLID_MULTISPLASH
+
+# define ENABLE_LED_MATRIX_WAVE_LEFT_RIGHT
+# define ENABLE_LED_MATRIX_WAVE_UP_DOWN
+# define ENABLE_LED_MATRIX_EFFECT_MAX
+
+/* Use first 6 channels of LED driver */
+# define PHASE_CHANNEL MSKPHASE_6CHANNEL
+
+/* Set LED driver current */
+# define CKLED2001_CURRENT_TUNE \
+ { 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60 }
+
+#endif
diff --git a/keyboards/keychron/k2_pro/jis/white/info.json b/keyboards/keychron/k2_pro/jis/white/info.json
new file mode 100755
index 0000000000..8910572942
--- /dev/null
+++ b/keyboards/keychron/k2_pro/jis/white/info.json
@@ -0,0 +1,111 @@
+{
+ "keyboard_name": "Keychron K2 Pro",
+ "manufacturer": "Keychron",
+ "url": "https://github.com/Keychron",
+ "maintainer": "lokher",
+ "usb": {
+ "vid": "0x3434",
+ "pid": "0x0223",
+ "device_version": "1.0.0"
+ },
+ "processor": "STM32L432",
+ "bootloader": "stm32-dfu",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix":[0,0], "x":0, "y":0},
+ {"matrix":[0,1], "x":1, "y":0},
+ {"matrix":[0,2], "x":2, "y":0},
+ {"matrix":[0,3], "x":3, "y":0},
+ {"matrix":[0,4], "x":4, "y":0},
+ {"matrix":[0,5], "x":5, "y":0},
+ {"matrix":[0,6], "x":6, "y":0},
+ {"matrix":[0,7], "x":7, "y":0},
+ {"matrix":[0,8], "x":8, "y":0},
+ {"matrix":[0,9], "x":9, "y":0},
+ {"matrix":[0,10], "x":10, "y":0},
+ {"matrix":[0,11], "x":11, "y":0},
+ {"matrix":[0,12], "x":12, "y":0},
+ {"matrix":[0,13], "x":13, "y":0},
+ {"matrix":[0,14], "x":14, "y":0},
+ {"matrix":[0,15], "x":15, "y":0},
+
+ {"matrix":[1,0], "x":0, "y":1},
+ {"matrix":[1,1], "x":1, "y":1},
+ {"matrix":[1,2], "x":2, "y":1},
+ {"matrix":[1,3], "x":3, "y":1},
+ {"matrix":[1,4], "x":4, "y":1},
+ {"matrix":[1,5], "x":5, "y":1},
+ {"matrix":[1,6], "x":6, "y":1},
+ {"matrix":[1,7], "x":7, "y":1},
+ {"matrix":[1,8], "x":8, "y":1},
+ {"matrix":[1,9], "x":9, "y":1},
+ {"matrix":[1,10], "x":10, "y":1},
+ {"matrix":[1,11], "x":11, "y":1},
+ {"matrix":[1,12], "x":12, "y":1},
+ {"matrix":[1,13], "x":13, "y":1},
+ {"matrix":[1,14], "x":14, "y":1},
+ {"matrix":[1,15], "x":15, "y":1},
+
+ {"matrix":[2,0], "x":0, "y":2, "w":1.5},
+ {"matrix":[2,1], "x":1.5, "y":2},
+ {"matrix":[2,2], "x":2.5, "y":2},
+ {"matrix":[2,3], "x":3.5, "y":2},
+ {"matrix":[2,4], "x":4.5, "y":2},
+ {"matrix":[2,5], "x":5.5, "y":2},
+ {"matrix":[2,6], "x":6.5, "y":2},
+ {"matrix":[2,7], "x":7.5, "y":2},
+ {"matrix":[2,8], "x":8.5, "y":2},
+ {"matrix":[2,9], "x":9.5, "y":2},
+ {"matrix":[2,10], "x":10.5, "y":2},
+ {"matrix":[2,11], "x":11.5, "y":2},
+ {"matrix":[2,12], "x":12.5, "y":2},
+ {"matrix":[2,15], "x":15, "y":2},
+
+ {"matrix":[3,0], "x":0, "y":3, "w":1.75},
+ {"matrix":[3,1], "x":1.75, "y":3},
+ {"matrix":[3,2], "x":2.75, "y":3},
+ {"matrix":[3,3], "x":3.75, "y":3},
+ {"matrix":[3,4], "x":4.75, "y":3},
+ {"matrix":[3,5], "x":5.75, "y":3},
+ {"matrix":[3,6], "x":6.75, "y":3},
+ {"matrix":[3,7], "x":7.75, "y":3},
+ {"matrix":[3,8], "x":8.75, "y":3},
+ {"matrix":[3,9], "x":9.75, "y":3},
+ {"matrix":[3,10], "x":10.75, "y":3},
+ {"matrix":[3,11], "x":11.75, "y":3},
+ {"matrix":[3,13], "x":12.75, "y":3},
+ {"matrix":[2,13], "x":13.75, "y":2, "w":1.25, "h":2},
+ {"matrix":[3,15], "x":15, "y":3},
+
+ {"matrix":[4,0], "x":0, "y":4, "w":2.25},
+ {"matrix":[4,2], "x":2.25, "y":4},
+ {"matrix":[4,3], "x":3.25, "y":4},
+ {"matrix":[4,4], "x":4.25, "y":4},
+ {"matrix":[4,5], "x":5.25, "y":4},
+ {"matrix":[4,6], "x":6.25, "y":4},
+ {"matrix":[4,7], "x":7.25, "y":4},
+ {"matrix":[4,8], "x":8.25, "y":4},
+ {"matrix":[4,9], "x":9.25, "y":4},
+ {"matrix":[4,10], "x":10.25, "y":4},
+ {"matrix":[4,11], "x":11.25, "y":4},
+ {"matrix":[4,12], "x":12.25, "y":4},
+ {"matrix":[4,13], "x":13.25, "y":4, "w":1.75},
+ {"matrix":[4,15], "x":15, "y":4},
+
+ {"matrix":[5,0], "x":0, "y":5, "w":1.25},
+ {"matrix":[5,1], "x":1.25, "y":5},
+ {"matrix":[5,2], "x":2.25, "y":5, "w":1.25},
+ {"matrix":[5,3], "x":3.5, "y":5},
+ {"matrix":[5,6], "x":4.5, "y":5, "w":4.5},
+ {"matrix":[5,8], "x":9, "y":5},
+ {"matrix":[5,9], "x":10, "y":5},
+ {"matrix":[5,10], "x":11, "y":5},
+ {"matrix":[5,11], "x":12, "y":5},
+ {"matrix":[5,12], "x":13, "y":5},
+ {"matrix":[5,13], "x":14, "y":5},
+ {"matrix":[5,15], "x":15, "y":5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keychron/k2_pro/jis/white/keymaps/default/keymap.c b/keyboards/keychron/k2_pro/jis/white/keymaps/default/keymap.c
new file mode 100755
index 0000000000..92dfaf4ce4
--- /dev/null
+++ b/keyboards/keychron/k2_pro/jis/white/keymaps/default/keymap.c
@@ -0,0 +1,59 @@
+/* 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
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_DEL, 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_INT3, KC_BSPC, KC_PGUP, // 32
+ 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_PGDN, // 46
+ 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_NUHS, KC_ENT, KC_HOME, // 61
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_END,
+ KC_LCTL, KC_LOPTN, KC_LCMMD, KC_LNG2, KC_SPC, KC_LNG1, KC_RCMMD,MO(MAC_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT(
+ KC_TRNS, 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_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BAT_LVL, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [WIN_BASE] = LAYOUT(
+ 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_DEL, 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_INT3, KC_PGUP,
+ 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_PGDN,
+ 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_NUHS, KC_ENT, KC_HOME,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_RALT, MO(WIN_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT(
+ KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BAT_LVL, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
diff --git a/keyboards/keychron/k2_pro/jis/white/keymaps/via/keymap.c b/keyboards/keychron/k2_pro/jis/white/keymaps/via/keymap.c
new file mode 100755
index 0000000000..92dfaf4ce4
--- /dev/null
+++ b/keyboards/keychron/k2_pro/jis/white/keymaps/via/keymap.c
@@ -0,0 +1,59 @@
+/* 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
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_DEL, 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_INT3, KC_BSPC, KC_PGUP, // 32
+ 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_PGDN, // 46
+ 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_NUHS, KC_ENT, KC_HOME, // 61
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_END,
+ KC_LCTL, KC_LOPTN, KC_LCMMD, KC_LNG2, KC_SPC, KC_LNG1, KC_RCMMD,MO(MAC_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT(
+ KC_TRNS, 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_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BAT_LVL, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [WIN_BASE] = LAYOUT(
+ 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_DEL, 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_INT3, KC_PGUP,
+ 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_PGDN,
+ 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_NUHS, KC_ENT, KC_HOME,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_RALT, MO(WIN_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT(
+ KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BAT_LVL, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
diff --git a/keyboards/keychron/k2_pro/jis/white/keymaps/via/rules.mk b/keyboards/keychron/k2_pro/jis/white/keymaps/via/rules.mk
new file mode 100755
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/keychron/k2_pro/jis/white/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/keychron/k2_pro/jis/white/rules.mk b/keyboards/keychron/k2_pro/jis/white/rules.mk
new file mode 100755
index 0000000000..6b0c2a0769
--- /dev/null
+++ b/keyboards/keychron/k2_pro/jis/white/rules.mk
@@ -0,0 +1,2 @@
+LED_MATRIX_ENABLE = yes
+LED_MATRIX_DRIVER = CKLED2001
\ No newline at end of file
diff --git a/keyboards/keychron/k2_pro/jis/white/white.c b/keyboards/keychron/k2_pro/jis/white/white.c
new file mode 100755
index 0000000000..67b6330864
--- /dev/null
+++ b/keyboards/keychron/k2_pro/jis/white/white.c
@@ -0,0 +1,151 @@
+/* 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"
+
+// clang-format off
+#ifdef LED_MATRIX_ENABLE
+const ckled2001_led g_ckled2001_leds[LED_MATRIX_LED_COUNT] = {
+/* Refer to CKLED2001 manual for these locations
+ * driver
+ * | LED address
+ * | | */
+ {0, A_16},
+ {0, A_15},
+ {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, 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, 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_1},
+
+ {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_3},
+ {0, C_3},
+ {0, D_1},
+
+ {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_4},
+ {0, E_3},
+ {0, E_1},
+
+ {0, F_16},
+ {0, F_15},
+ {0, F_14},
+ {0, F_13},
+ {0, F_10},
+ {0, F_8},
+ {0, F_7},
+ {0, F_6},
+ {0, F_5},
+ {0, F_4},
+ {0, F_3},
+ {0, F_1},
+};
+
+#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, 59, __, 45 },
+ { 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, __, 58, __, 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 }
+ },
+ {
+ // LED Index to Physical Position
+ {0,0}, {15,0}, {30,0}, {45,0}, {60,0}, {75,0}, {90,0}, {105,0}, {119,0}, {134,0}, {149,0}, {164,0}, {179,0}, {194,0}, {209,0}, {224,0},
+ {0,13}, {15,13}, {30,13}, {45,13}, {60,13}, {75,13}, {90,13}, {105,13}, {119,13}, {134,13}, {149,13}, {164,13}, {179,13}, {194,13}, {209,13}, {224,13},
+ {4,26}, {22,26}, {37,26}, {52,26}, {67,26}, {82,26}, {97,26}, {112,26}, {127,26}, {142,26}, {157,26}, {172,26}, {187,26}, {224,26},
+ {6,38}, {26,38}, {41,38}, {56,38}, {71,38}, {86,38}, {101,38}, {116,38}, {131,38}, {146,38}, {161,38}, {175,38}, {190,38}, {211,34}, {224,38},
+ {9,51}, {34,51}, {49,51}, {64,51}, {78,51}, {93,51}, {108,51}, {123,51}, {138,51}, {153,51}, {168,51}, {183,51}, {204,51}, {224,51},
+ {2,64}, {19,64}, {35,64}, {52,64}, {93,64}, {134,64}, {149,64}, {164,64}, {179,64}, {194,64}, {209,64}, {224,64},
+ },
+ {
+ // RGB LED Index to Flag
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 8, 8, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1,
+ 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1
+ }
+};
+#endif
diff --git a/keyboards/keychron/k2_pro/k2_pro.c b/keyboards/keychron/k2_pro/k2_pro.c
old mode 100644
new mode 100755
index 9442f20307..b63b20652b
--- a/keyboards/keychron/k2_pro/k2_pro.c
+++ b/keyboards/keychron/k2_pro/k2_pro.c
@@ -48,7 +48,7 @@ key_combination_t key_comb_list[4] = {
};
#ifdef KC_BLUETOOTH_ENABLE
-bool firstDisconnect = true;
+bool firstDisconnect = true;
bool bt_factory_reset = false;
static virtual_timer_t pairing_key_timer;
extern uint8_t g_pwm_buffer[DRIVER_COUNT][192];
@@ -154,7 +154,7 @@ void keyboard_post_init_kb(void) {
ckbt51_init(false);
bluetooth_init();
-# endif
+#endif
power_on_indicator_timer_buffer = sync_timer_read32() | 1;
writePin(BAT_LOW_LED_PIN, BAT_LOW_LED_PIN_ON_STATE);
@@ -182,14 +182,15 @@ void matrix_scan_kb(void) {
#ifdef FACTORY_RESET_TASK
FACTORY_RESET_TASK();
-# endif
+#endif
matrix_scan_user();
}
#ifdef KC_BLUETOOTH_ENABLE
static void ckbt51_param_init(void) {
/* Set bluetooth device name */
- ckbt51_set_local_name(STR(PRODUCT));
+ // ckbt51_set_local_name(STR(PRODUCT));
+ ckbt51_set_local_name(PRODUCT);
/* Set bluetooth parameters */
module_param_t param = {.event_mode = 0x02,
.connected_idle_timeout = 7200,
@@ -201,6 +202,7 @@ static void ckbt51_param_init(void) {
.verndor_id = 0, // Must be 0x3434
.product_id = PRODUCT_ID};
ckbt51_set_param(¶m);
+ (void)param;
}
void bluetooth_enter_disconnected_kb(uint8_t host_idx) {
@@ -217,6 +219,21 @@ void bluetooth_enter_disconnected_kb(uint8_t host_idx) {
}
}
+void ckbt51_default_ack_handler(uint8_t *data, uint8_t len) {
+ if (data[1] == 0x45) {
+ module_param_t param = {.event_mode = 0x02,
+ .connected_idle_timeout = 7200,
+ .pairing_timeout = 180,
+ .pairing_mode = 0,
+ .reconnect_timeout = 5,
+ .report_rate = 90,
+ .vendor_id_source = 1,
+ .verndor_id = 0, // Must be 0x3434
+ .product_id = PRODUCT_ID};
+ ckbt51_set_param(¶m);
+ }
+}
+
void bluetooth_pre_task(void) {
static uint8_t mode = 1;
diff --git a/keyboards/keychron/k2_pro/k2_pro.h b/keyboards/keychron/k2_pro/k2_pro.h
old mode 100644
new mode 100755
index c89cdbf63f..d542b11bd6
--- a/keyboards/keychron/k2_pro/k2_pro.h
+++ b/keyboards/keychron/k2_pro/k2_pro.h
@@ -50,36 +50,3 @@ enum {
BAT_LVL,
NEW_SAFE_RANGE,
};
-
-#define LAYOUT_ansi_84( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2F, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3F, \
- K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4F, \
- K50, K51, K52, K56, K59, K5A, K5B, K5C, K5D, K5F \
-) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, ___, K1F }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, ___, K2F }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, ___, K3D, ___, K3F }, \
- { K40, ___, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, ___, K4F }, \
- { K50, K51, K52, ___, ___, ___, K56, ___, ___, K59, K5A, K5B, K5C, K5D, ___, K5F } \
-}
-
-#define LAYOUT_iso_85( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K3D, K2F, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K2D, K3F, \
- K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4F, \
- K50, K51, K52, K56, K59, K5A, K5B, K5C, K5D, K5F \
-) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, ___, K1F }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, ___, K2F }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, ___, K3D, ___, K3F }, \
- { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, ___, K4F }, \
- { K50, K51, K52, ___, ___, ___, K56, ___, ___, K59, K5A, K5B, K5C, K5D, ___, K5F } \
-}
-
diff --git a/keyboards/keychron/k2_pro/readme.md b/keyboards/keychron/k2_pro/readme.md
index 77f8752e8c..0fcad1af38 100644
--- a/keyboards/keychron/k2_pro/readme.md
+++ b/keyboards/keychron/k2_pro/readme.md
@@ -1,6 +1,6 @@
# Keychron K2 Pro
-
+
A customizable 84 keys TKL keyboard.
diff --git a/keyboards/keychron/k3_pro/config.h b/keyboards/keychron/k3_pro/config.h
index c31f3cc18b..d0b867d8e3 100644
--- a/keyboards/keychron/k3_pro/config.h
+++ b/keyboards/keychron/k3_pro/config.h
@@ -47,6 +47,13 @@
#define LED_CAPS_LOCK_PIN A0
#define LED_PIN_ON_STATE 1
+/* Increase I2C speed to 1000 KHz */
+#define I2C1_TIMINGR_PRESC 0U
+#define I2C1_TIMINGR_SCLDEL 3U
+#define I2C1_TIMINGR_SDADEL 0U
+#define I2C1_TIMINGR_SCLH 15U
+#define I2C1_TIMINGR_SCLL 51U
+
#ifdef KC_BLUETOOTH_ENABLE
/* Hardware configuration */
# define USB_BT_MODE_SELECT_PIN A10
diff --git a/keyboards/keychron/k3_pro/jis/rgb/config.h b/keyboards/keychron/k3_pro/jis/rgb/config.h
new file mode 100755
index 0000000000..ccb766077c
--- /dev/null
+++ b/keyboards/keychron/k3_pro/jis/rgb/config.h
@@ -0,0 +1,102 @@
+/* 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
+
+#ifdef RGB_MATRIX_ENABLE
+/* RGB Matrix driver configuration */
+# define DRIVER_COUNT 2
+
+# define DRIVER_ADDR_1 0b1110111
+# define DRIVER_ADDR_2 0b1110100
+# define DRIVER_1_LED_COUNT 47
+# define DRIVER_2_LED_COUNT 40
+# define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_COUNT + DRIVER_2_LED_COUNT)
+
+/* 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
+
+/* Caps lock indicating led */
+# define DIM_CAPS_LOCK
+# define CAPS_LOCK_INDEX 46
+# define LOW_BAT_IND_INDEX 79
+
+/* RGB Matrix Animation modes. Explicitly enabled
+ * For full list of effects, see:
+ * https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+ */
+
+# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+// # define ENABLE_RGB_MATRIX_ALPHAS_MODS
+// # define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+// # define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_BREATHING
+// # define ENABLE_RGB_MATRIX_BAND_SAT
+// # define ENABLE_RGB_MATRIX_BAND_VAL
+// # define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+// # define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+// # define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# define ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define ENABLE_RGB_MATRIX_DUAL_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+// # define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+// # define ENABLE_RGB_MATRIX_RAINDROPS
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+// # define ENABLE_RGB_MATRIX_HUE_BREATHING
+// # define ENABLE_RGB_MATRIX_HUE_PENDULUM
+// # define ENABLE_RGB_MATRIX_HUE_WAVE
+# define ENABLE_RGB_MATRIX_PIXEL_RAIN
+// # define ENABLE_RGB_MATRIX_PIXEL_FLOW
+// # define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+
+/* enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined */
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+
+/* enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined*/
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_RGB_MATRIX_SPLASH
+// # define ENABLE_RGB_MATRIX_MULTISPLASH
+# define ENABLE_RGB_MATRIX_SOLID_SPLASH
+// # define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+/* Set LED driver current */
+# define CKLED2001_CURRENT_TUNE \
+ { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }
+
+#endif
diff --git a/keyboards/keychron/k3_pro/jis/rgb/info.json b/keyboards/keychron/k3_pro/jis/rgb/info.json
new file mode 100755
index 0000000000..380e7c4f3d
--- /dev/null
+++ b/keyboards/keychron/k3_pro/jis/rgb/info.json
@@ -0,0 +1,111 @@
+{
+ "keyboard_name": "Keychron K3 Pro",
+ "manufacturer": "Keychron",
+ "url": "https://github.com/Keychron",
+ "maintainer": "lokher",
+ "usb": {
+ "vid": "0x3434",
+ "pid": "0x0232",
+ "device_version": "1.0.0"
+ },
+ "processor": "STM32L432",
+ "bootloader": "stm32-dfu",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix":[0, 0], "x":0, "y":0},
+ {"matrix":[0, 1], "x":1, "y":0},
+ {"matrix":[0, 2], "x":2, "y":0},
+ {"matrix":[0, 3], "x":3, "y":0},
+ {"matrix":[0, 4], "x":4, "y":0},
+ {"matrix":[0, 5], "x":5, "y":0},
+ {"matrix":[0, 6], "x":6, "y":0},
+ {"matrix":[0, 7], "x":7, "y":0},
+ {"matrix":[0, 8], "x":8, "y":0},
+ {"matrix":[0, 9], "x":9, "y":0},
+ {"matrix":[0,10], "x":10, "y":0},
+ {"matrix":[0,11], "x":11, "y":0},
+ {"matrix":[0,12], "x":12, "y":0},
+ {"matrix":[0,13], "x":13, "y":0},
+ {"matrix":[0,14], "x":14, "y":0},
+ {"matrix":[0,15], "x":15, "y":0},
+
+ {"matrix":[1, 0], "x":0, "y":1},
+ {"matrix":[1, 1], "x":1, "y":1},
+ {"matrix":[1, 2], "x":2, "y":1},
+ {"matrix":[1, 3], "x":3, "y":1},
+ {"matrix":[1, 4], "x":4, "y":1},
+ {"matrix":[1, 5], "x":5, "y":1},
+ {"matrix":[1, 6], "x":6, "y":1},
+ {"matrix":[1, 7], "x":7, "y":1},
+ {"matrix":[1, 8], "x":8, "y":1},
+ {"matrix":[1, 9], "x":9, "y":1},
+ {"matrix":[1,10], "x":10, "y":1},
+ {"matrix":[1,11], "x":11, "y":1},
+ {"matrix":[1,12], "x":12, "y":1},
+ {"matrix":[1,13], "x":13, "y":1},
+ {"matrix":[1,14], "x":14, "y":1},
+ {"matrix":[1,15], "x":15, "y":1},
+
+ {"matrix":[2, 0], "x":0, "y":2, "w":1.5},
+ {"matrix":[2, 1], "x":1.5, "y":2},
+ {"matrix":[2, 2], "x":2.5, "y":2},
+ {"matrix":[2, 3], "x":3.5, "y":2},
+ {"matrix":[2, 4], "x":4.5, "y":2},
+ {"matrix":[2, 5], "x":5.5, "y":2},
+ {"matrix":[2, 6], "x":6.5, "y":2},
+ {"matrix":[2, 7], "x":7.5, "y":2},
+ {"matrix":[2, 8], "x":8.5, "y":2},
+ {"matrix":[2, 9], "x":9.5, "y":2},
+ {"matrix":[2,10], "x":10.5, "y":2},
+ {"matrix":[2,11], "x":11.5, "y":2},
+ {"matrix":[2,12], "x":12.5, "y":2},
+ {"matrix":[2,15], "x":15, "y":2},
+
+ {"matrix":[3, 0], "x":0, "y":3, "w":1.75},
+ {"matrix":[3, 1], "x":1.75, "y":3},
+ {"matrix":[3, 2], "x":2.75, "y":3},
+ {"matrix":[3, 3], "x":3.75, "y":3},
+ {"matrix":[3, 4], "x":4.75, "y":3},
+ {"matrix":[3, 5], "x":5.75, "y":3},
+ {"matrix":[3, 6], "x":6.75, "y":3},
+ {"matrix":[3, 7], "x":7.75, "y":3},
+ {"matrix":[3, 8], "x":8.75, "y":3},
+ {"matrix":[3, 9], "x":9.75, "y":3},
+ {"matrix":[3,10], "x":10.75, "y":3},
+ {"matrix":[3,11], "x":11.75, "y":3},
+ {"matrix":[3,13], "x":12.75, "y":3, "w":2.25},
+ {"matrix":[2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+ {"matrix":[3,15], "x":15, "y":3},
+
+ {"matrix":[4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix":[4, 2], "x":2.25, "y":4},
+ {"matrix":[4, 3], "x":3.25, "y":4},
+ {"matrix":[4, 4], "x":4.25, "y":4},
+ {"matrix":[4, 5], "x":5.25, "y":4},
+ {"matrix":[4, 6], "x":6.25, "y":4},
+ {"matrix":[4, 7], "x":7.25, "y":4},
+ {"matrix":[4, 8], "x":8.25, "y":4},
+ {"matrix":[4, 9], "x":9.25, "y":4},
+ {"matrix":[4,10], "x":10.25, "y":4},
+ {"matrix":[4,11], "x":11.25, "y":4},
+ {"matrix":[4,13], "x":12.25, "y":4},
+ {"matrix":[4,14], "x":13.25, "y":4.25, "w":1.75},
+ {"matrix":[4,15], "x":15, "y":4},
+
+ {"matrix":[5, 0], "x":0, "y":5},
+ {"matrix":[5, 1], "x":1, "y":5},
+ {"matrix":[5, 2], "x":2, "y":5},
+ {"matrix":[5, 3], "x":3, "y":5.25},
+ {"matrix":[5, 6], "x":4, "y":5, "w":5},
+ {"matrix":[5, 9], "x":9, "y":5.25},
+ {"matrix":[5,10], "x":10, "y":5},
+ {"matrix":[5,11], "x":11, "y":5},
+ {"matrix":[5,12], "x":12, "y":5},
+ {"matrix":[5,13], "x":13, "y":5},
+ {"matrix":[5,14], "x":14, "y":5},
+ {"matrix":[5,15], "x":15, "y":5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keychron/k3_pro/jis/rgb/keymaps/default/keymap.c b/keyboards/keychron/k3_pro/jis/rgb/keymaps/default/keymap.c
new file mode 100755
index 0000000000..982b8caaa5
--- /dev/null
+++ b/keyboards/keychron/k3_pro/jis/rgb/keymaps/default/keymap.c
@@ -0,0 +1,59 @@
+/* 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
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_DEL, 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_INT3, KC_BSPC, KC_PGUP,
+ 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_PGDN,
+ 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_NUHS, KC_ENT, KC_HOME,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_END,
+ KC_LCTL, KC_LOPTN, KC_LCMMD, KC_LNG2, KC_SPC, KC_LNG1, KC_RCMMD,MO(MAC_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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(
+ 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_DEL, 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_INT3, KC_BSPC, KC_PGUP,
+ 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_PGDN,
+ 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_NUHS, KC_ENT, KC_HOME,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_END,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_RALT, MO(WIN_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
diff --git a/keyboards/keychron/k3_pro/jis/rgb/keymaps/via/keymap.c b/keyboards/keychron/k3_pro/jis/rgb/keymaps/via/keymap.c
new file mode 100755
index 0000000000..982b8caaa5
--- /dev/null
+++ b/keyboards/keychron/k3_pro/jis/rgb/keymaps/via/keymap.c
@@ -0,0 +1,59 @@
+/* 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
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_DEL, 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_INT3, KC_BSPC, KC_PGUP,
+ 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_PGDN,
+ 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_NUHS, KC_ENT, KC_HOME,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_END,
+ KC_LCTL, KC_LOPTN, KC_LCMMD, KC_LNG2, KC_SPC, KC_LNG1, KC_RCMMD,MO(MAC_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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(
+ 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_DEL, 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_INT3, KC_BSPC, KC_PGUP,
+ 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_PGDN,
+ 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_NUHS, KC_ENT, KC_HOME,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_END,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_RALT, MO(WIN_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
diff --git a/keyboards/keychron/k3_pro/jis/rgb/keymaps/via/rules.mk b/keyboards/keychron/k3_pro/jis/rgb/keymaps/via/rules.mk
new file mode 100755
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/keychron/k3_pro/jis/rgb/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/keychron/k3_pro/jis/rgb/rgb.c b/keyboards/keychron/k3_pro/jis/rgb/rgb.c
new file mode 100755
index 0000000000..d78ea186c0
--- /dev/null
+++ b/keyboards/keychron/k3_pro/jis/rgb/rgb.c
@@ -0,0 +1,153 @@
+/* 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"
+
+// clang-format off
+#ifdef RGB_MATRIX_ENABLE
+const ckled2001_led g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to CKLED2001 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, I_1, G_1, H_1},
+ {0, I_2, G_2, H_2},
+ {0, I_3, G_3, H_3},
+ {0, I_4, G_4, H_4},
+ {0, I_5, G_5, H_5},
+ {0, I_6, G_6, H_6},
+ {0, I_7, G_7, H_7},
+ {0, I_8, G_8, H_8},
+ {0, I_9, G_9, H_9},
+ {0, I_10, G_10, H_10},
+ {0, I_11, G_11, H_11},
+ {0, I_12, G_12, H_12},
+ {0, I_13, G_13, H_13},
+ {0, I_14, G_14, H_14},
+ {0, I_15, G_15, H_15},
+ {0, I_16, G_16, H_16},
+
+ {0, F_1, D_1, E_1},
+ {0, F_2, D_2, E_2},
+ {0, F_3, D_3, E_3},
+ {0, F_4, D_4, E_4},
+ {0, F_5, D_5, E_5},
+ {0, F_6, D_6, E_6},
+ {0, F_7, D_7, E_7},
+ {0, F_8, D_8, E_8},
+ {0, F_9, D_9, E_9},
+ {0, F_10, D_10, E_10},
+ {0, F_11, D_11, E_11},
+ {0, F_12, D_12, E_12},
+ {0, F_13, D_13, E_13},
+ {0, F_14, D_14, E_14},
+ {0, F_15, D_15, E_15},
+ {0, F_16, D_16, E_16},
+
+ {0, A_1, C_1, B_1},
+ {0, A_2, C_2, B_2},
+ {0, A_3, C_3, B_3},
+ {0, A_4, C_4, B_4},
+ {0, A_5, C_5, B_5},
+ {0, A_6, C_6, B_6},
+ {0, A_7, C_7, B_7},
+ {0, A_8, C_8, B_8},
+ {0, A_9, C_9, B_9},
+ {0, A_10, C_10, B_10},
+ {0, A_11, C_11, B_11},
+ {0, A_12, C_12, B_12},
+ {0, A_13, C_13, B_13},
+ {0, A_16, C_16, B_16},
+
+ {1, I_1, G_1, H_1},
+ {1, I_2, G_2, H_2},
+ {1, I_3, G_3, H_3},
+ {1, I_4, G_4, H_4},
+ {1, I_5, G_5, H_5},
+ {1, I_6, G_6, H_6},
+ {1, I_7, G_7, H_7},
+ {1, I_8, G_8, H_8},
+ {1, I_9, G_9, H_9},
+ {1, I_10, G_10, H_10},
+ {1, I_11, G_11, H_11},
+ {1, I_12, G_12, H_12},
+ {1, I_14, G_14, H_14},
+ {0, A_14, C_14, B_14},
+ {1, I_16, G_16, H_16},
+
+ {1, C_1, A_1, B_1},
+ {1, C_3, A_3, B_3},
+ {1, C_4, A_4, B_4},
+ {1, C_5, A_5, B_5},
+ {1, C_6, A_6, B_6},
+ {1, C_7, A_7, B_7},
+ {1, C_8, A_8, B_8},
+ {1, C_9, A_9, B_9},
+ {1, C_10, A_10, B_10},
+ {1, C_11, A_11, B_11},
+ {1, C_12, A_12, B_12},
+ {1, C_14, A_14, B_14},
+ {1, C_15, A_15, B_15},
+ {1, C_16, A_16, B_16},
+
+ {1, F_1, D_1, E_1},
+ {1, F_2, D_2, E_2},
+ {1, F_3, D_3, E_3},
+ {1, F_4, D_4, E_4},
+ {1, F_7, D_7, E_7},
+ {1, F_10, D_10, E_10},
+ {1, F_11, D_11, E_11},
+ {1, F_12, D_12, E_12},
+ {1, F_13, D_13, E_13},
+ {1, F_14, D_14, E_14},
+ {1, F_15, D_15, E_15},
+ {1, F_16, D_16, E_16},
+};
+
+#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, 59, __, 45 },
+ { 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, __, 58, __, 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 }
+ },
+ {
+ // LED Index to Physical Position
+ {0,0}, {15,0}, {30,0}, {45,0}, {60,0}, {75,0}, {90,0}, {105,0}, {119,0}, {134,0}, {149,0}, {164,0}, {179,0}, {194,0}, {209,0}, {224,0},
+ {0,13}, {15,13}, {30,13}, {45,13}, {60,13}, {75,13}, {90,13}, {105,13}, {119,13}, {134,13}, {149,13}, {164,13}, {179,13}, {194,13}, {209,13}, {224,13},
+ {4,26}, {22,26}, {37,26}, {52,26}, {67,26}, {82,26}, {97,26}, {112,26}, {127,26}, {142,26}, {157,26}, {172,26}, {187,26}, {224,26},
+ {6,38}, {26,38}, {41,38}, {56,38}, {71,38}, {86,38}, {101,38}, {116,38}, {131,38}, {146,38}, {161,38}, {175,38}, {190,38}, {207,32}, {224,38},
+ {9,51}, {34,51}, {49,51}, {64,51}, {78,51}, {93,51}, {108,51}, {123,51}, {138,51}, {153,51}, {168,51}, {183,51}, {203,51}, {224,51},
+ {0,64}, {15,64}, {30,64}, {45,64}, {90,64}, {134,64}, {149,64}, {164,64}, {179,64}, {194,64}, {209,64}, {224,64},
+ },
+ {
+ // RGB LED Index to Flag
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 4, 8, 8, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1
+ }
+};
+#endif
diff --git a/keyboards/keychron/k3_pro/jis/rgb/rules.mk b/keyboards/keychron/k3_pro/jis/rgb/rules.mk
new file mode 100755
index 0000000000..f5f4192470
--- /dev/null
+++ b/keyboards/keychron/k3_pro/jis/rgb/rules.mk
@@ -0,0 +1,2 @@
+RGB_MATRIX_ENABLE = yes
+RGB_MATRIX_DRIVER = CKLED2001
\ No newline at end of file
diff --git a/keyboards/keychron/k3_pro/jis/white/config.h b/keyboards/keychron/k3_pro/jis/white/config.h
new file mode 100755
index 0000000000..7e1b851372
--- /dev/null
+++ b/keyboards/keychron/k3_pro/jis/white/config.h
@@ -0,0 +1,76 @@
+/* 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
+
+#ifdef LED_MATRIX_ENABLE
+/* LED matrix driver configuration */
+# define DRIVER_COUNT 1
+# define DRIVER_ADDR_1 0b1110100
+# define LED_MATRIX_LED_COUNT 87
+
+/* 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
+
+/* Caps lock indicating led */
+# define DIM_CAPS_LOCK
+# define CAPS_LOCK_INDEX 46
+# define LOW_BAT_IND_INDEX 79
+
+/* LED Matrix Animation modes. Explicitly enabled
+ * For full list of effects, see:
+ * https://docs.qmk.fm/#/feature_led_matrix?id=led-matrix-effects
+ */
+# define LED_MATRIX_KEYPRESSES
+
+# define ENABLE_LED_MATRIX_NONE
+# define ENABLE_LED_MATRIX_SOLID
+// # define ENABLE_LED_MATRIX_ALPHAS_MODS
+# define ENABLE_LED_MATRIX_BREATHING
+// # define ENABLE_LED_MATRIX_BAND
+# define ENABLE_LED_MATRIX_BAND_PINWHEEL
+# define ENABLE_LED_MATRIX_BAND_SPIRAL
+# define ENABLE_LED_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_LED_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_LED_MATRIX_CYCLE_OUT_IN
+# define ENABLE_LED_MATRIX_DUAL_BEACON
+
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_SIMPLE
+// # define ENABLE_LED_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTIWIDE
+// # define ENABLE_LED_MATRIX_SOLID_REACTIVE_CROSS
+// # define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTICROSS
+// # define ENABLE_LED_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_LED_MATRIX_SOLID_SPLASH
+// # define ENABLE_LED_MATRIX_SOLID_MULTISPLASH
+
+# define ENABLE_LED_MATRIX_WAVE_LEFT_RIGHT
+# define ENABLE_LED_MATRIX_WAVE_UP_DOWN
+# define ENABLE_LED_MATRIX_EFFECT_MAX
+
+/* Use first 6 channels of LED driver */
+# define PHASE_CHANNEL MSKPHASE_6CHANNEL
+
+/* Set LED driver current */
+# define CKLED2001_CURRENT_TUNE \
+ { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 }
+
+#endif
diff --git a/keyboards/keychron/k3_pro/jis/white/info.json b/keyboards/keychron/k3_pro/jis/white/info.json
new file mode 100755
index 0000000000..ec8f9c09d9
--- /dev/null
+++ b/keyboards/keychron/k3_pro/jis/white/info.json
@@ -0,0 +1,111 @@
+{
+ "keyboard_name": "Keychron K3 Pro",
+ "manufacturer": "Keychron",
+ "url": "https://github.com/Keychron",
+ "maintainer": "lokher",
+ "usb": {
+ "vid": "0x3434",
+ "pid": "0x0235",
+ "device_version": "1.0.0"
+ },
+ "processor": "STM32L432",
+ "bootloader": "stm32-dfu",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix":[0, 0], "x":0, "y":0},
+ {"matrix":[0, 1], "x":1, "y":0},
+ {"matrix":[0, 2], "x":2, "y":0},
+ {"matrix":[0, 3], "x":3, "y":0},
+ {"matrix":[0, 4], "x":4, "y":0},
+ {"matrix":[0, 5], "x":5, "y":0},
+ {"matrix":[0, 6], "x":6, "y":0},
+ {"matrix":[0, 7], "x":7, "y":0},
+ {"matrix":[0, 8], "x":8, "y":0},
+ {"matrix":[0, 9], "x":9, "y":0},
+ {"matrix":[0,10], "x":10, "y":0},
+ {"matrix":[0,11], "x":11, "y":0},
+ {"matrix":[0,12], "x":12, "y":0},
+ {"matrix":[0,13], "x":13, "y":0},
+ {"matrix":[0,14], "x":14, "y":0},
+ {"matrix":[0,15], "x":15, "y":0},
+
+ {"matrix":[1, 0], "x":0, "y":1},
+ {"matrix":[1, 1], "x":1, "y":1},
+ {"matrix":[1, 2], "x":2, "y":1},
+ {"matrix":[1, 3], "x":3, "y":1},
+ {"matrix":[1, 4], "x":4, "y":1},
+ {"matrix":[1, 5], "x":5, "y":1},
+ {"matrix":[1, 6], "x":6, "y":1},
+ {"matrix":[1, 7], "x":7, "y":1},
+ {"matrix":[1, 8], "x":8, "y":1},
+ {"matrix":[1, 9], "x":9, "y":1},
+ {"matrix":[1,10], "x":10, "y":1},
+ {"matrix":[1,11], "x":11, "y":1},
+ {"matrix":[1,12], "x":12, "y":1},
+ {"matrix":[1,13], "x":13, "y":1},
+ {"matrix":[1,14], "x":14, "y":1},
+ {"matrix":[1,15], "x":15, "y":1},
+
+ {"matrix":[2, 0], "x":0, "y":2, "w":1.5},
+ {"matrix":[2, 1], "x":1.5, "y":2},
+ {"matrix":[2, 2], "x":2.5, "y":2},
+ {"matrix":[2, 3], "x":3.5, "y":2},
+ {"matrix":[2, 4], "x":4.5, "y":2},
+ {"matrix":[2, 5], "x":5.5, "y":2},
+ {"matrix":[2, 6], "x":6.5, "y":2},
+ {"matrix":[2, 7], "x":7.5, "y":2},
+ {"matrix":[2, 8], "x":8.5, "y":2},
+ {"matrix":[2, 9], "x":9.5, "y":2},
+ {"matrix":[2,10], "x":10.5, "y":2},
+ {"matrix":[2,11], "x":11.5, "y":2},
+ {"matrix":[2,12], "x":12.5, "y":2},
+ {"matrix":[2,15], "x":15, "y":2},
+
+ {"matrix":[3, 0], "x":0, "y":3, "w":1.75},
+ {"matrix":[3, 1], "x":1.75, "y":3},
+ {"matrix":[3, 2], "x":2.75, "y":3},
+ {"matrix":[3, 3], "x":3.75, "y":3},
+ {"matrix":[3, 4], "x":4.75, "y":3},
+ {"matrix":[3, 5], "x":5.75, "y":3},
+ {"matrix":[3, 6], "x":6.75, "y":3},
+ {"matrix":[3, 7], "x":7.75, "y":3},
+ {"matrix":[3, 8], "x":8.75, "y":3},
+ {"matrix":[3, 9], "x":9.75, "y":3},
+ {"matrix":[3,10], "x":10.75, "y":3},
+ {"matrix":[3,11], "x":11.75, "y":3},
+ {"matrix":[3,13], "x":12.75, "y":3, "w":2.25},
+ {"matrix":[2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+ {"matrix":[3,15], "x":15, "y":3},
+
+ {"matrix":[4,0], "x":0, "y":4.25, "w":2.25},
+ {"matrix":[4, 2], "x":2.25, "y":4},
+ {"matrix":[4, 3], "x":3.25, "y":4},
+ {"matrix":[4, 4], "x":4.25, "y":4},
+ {"matrix":[4, 5], "x":5.25, "y":4},
+ {"matrix":[4, 6], "x":6.25, "y":4},
+ {"matrix":[4, 7], "x":7.25, "y":4},
+ {"matrix":[4, 8], "x":8.25, "y":4},
+ {"matrix":[4, 9], "x":9.25, "y":4},
+ {"matrix":[4,10], "x":10.25, "y":4},
+ {"matrix":[4,11], "x":11.25, "y":4},
+ {"matrix":[4,13], "x":12.25, "y":4},
+ {"matrix":[4,14], "x":13.25, "y":4.25, "w":1.75},
+ {"matrix":[4,15], "x":15, "y":4},
+
+ {"matrix":[5, 0], "x":0, "y":5},
+ {"matrix":[5, 1], "x":1, "y":5},
+ {"matrix":[5, 2], "x":2, "y":5},
+ {"matrix":[5,3], "x":3, "y":5.25},
+ {"matrix":[5, 6], "x":4, "y":5, "w":5},
+ {"matrix":[5,9], "x":9, "y":5.25},
+ {"matrix":[5,10], "x":10, "y":5},
+ {"matrix":[5,11], "x":11, "y":5},
+ {"matrix":[5,12], "x":12, "y":5},
+ {"matrix":[5,13], "x":13, "y":5},
+ {"matrix":[5,14], "x":14, "y":5},
+ {"matrix":[5,15], "x":15, "y":5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keychron/k3_pro/jis/white/keymaps/default/keymap.c b/keyboards/keychron/k3_pro/jis/white/keymaps/default/keymap.c
new file mode 100755
index 0000000000..398ef2dce7
--- /dev/null
+++ b/keyboards/keychron/k3_pro/jis/white/keymaps/default/keymap.c
@@ -0,0 +1,59 @@
+/* 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
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, BL_DEC, BL_INC, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_DEL, 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_INT3, KC_BSPC, KC_PGUP,
+ 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_PGDN,
+ 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_NUHS, KC_ENT, KC_HOME,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_END,
+ KC_LCTL, KC_LOPTN, KC_LCMMD, KC_LNG2, KC_SPC, KC_LNG1, KC_RCMMD,MO(MAC_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_INC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [WIN_BASE] = LAYOUT(
+ 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_DEL, 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_INT3, KC_BSPC, KC_PGUP,
+ 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_PGDN,
+ 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_NUHS, KC_ENT, KC_HOME,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_RALT, MO(WIN_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, BL_DEC, BL_INC, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, BL_TOGG,
+ _______, BT_HST1, BT_HST2, BT_HST3, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_INC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
diff --git a/keyboards/keychron/k3_pro/jis/white/keymaps/via/keymap.c b/keyboards/keychron/k3_pro/jis/white/keymaps/via/keymap.c
new file mode 100755
index 0000000000..398ef2dce7
--- /dev/null
+++ b/keyboards/keychron/k3_pro/jis/white/keymaps/via/keymap.c
@@ -0,0 +1,59 @@
+/* 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
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, BL_DEC, BL_INC, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_DEL, 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_INT3, KC_BSPC, KC_PGUP,
+ 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_PGDN,
+ 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_NUHS, KC_ENT, KC_HOME,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_END,
+ KC_LCTL, KC_LOPTN, KC_LCMMD, KC_LNG2, KC_SPC, KC_LNG1, KC_RCMMD,MO(MAC_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [MAC_FN] = LAYOUT(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_INC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [WIN_BASE] = LAYOUT(
+ 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_DEL, 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_INT3, KC_BSPC, KC_PGUP,
+ 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_PGDN,
+ 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_NUHS, KC_ENT, KC_HOME,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_RALT, MO(WIN_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [WIN_FN] = LAYOUT(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, BL_DEC, BL_INC, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, BL_TOGG,
+ _______, BT_HST1, BT_HST2, BT_HST3, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_INC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
diff --git a/keyboards/keychron/k3_pro/jis/white/keymaps/via/rules.mk b/keyboards/keychron/k3_pro/jis/white/keymaps/via/rules.mk
new file mode 100755
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/keychron/k3_pro/jis/white/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/keychron/k3_pro/jis/white/rules.mk b/keyboards/keychron/k3_pro/jis/white/rules.mk
new file mode 100755
index 0000000000..6b0c2a0769
--- /dev/null
+++ b/keyboards/keychron/k3_pro/jis/white/rules.mk
@@ -0,0 +1,2 @@
+LED_MATRIX_ENABLE = yes
+LED_MATRIX_DRIVER = CKLED2001
\ No newline at end of file
diff --git a/keyboards/keychron/k3_pro/jis/white/white.c b/keyboards/keychron/k3_pro/jis/white/white.c
new file mode 100755
index 0000000000..c90e87bd8f
--- /dev/null
+++ b/keyboards/keychron/k3_pro/jis/white/white.c
@@ -0,0 +1,151 @@
+/* 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"
+
+// clang-format off
+#ifdef LED_MATRIX_ENABLE
+const ckled2001_led g_ckled2001_leds[LED_MATRIX_LED_COUNT] = {
+/* Refer to CKLED2001 manual for these locations
+ * driver
+ * | LED address
+ * | | */
+ {0, F_1},
+ {0, F_2},
+ {0, F_3},
+ {0, F_4},
+ {0, F_5},
+ {0, F_6},
+ {0, F_7},
+ {0, F_8},
+ {0, F_9},
+ {0, F_10},
+ {0, F_11},
+ {0, F_12},
+ {0, F_13},
+ {0, F_14},
+ {0, F_15},
+ {0, F_16},
+
+ {0, E_1},
+ {0, E_2},
+ {0, E_3},
+ {0, E_4},
+ {0, E_5},
+ {0, E_6},
+ {0, E_7},
+ {0, E_8},
+ {0, E_9},
+ {0, E_10},
+ {0, E_11},
+ {0, E_12},
+ {0, E_13},
+ {0, E_14},
+ {0, E_15},
+ {0, E_16},
+
+ {0, D_1},
+ {0, D_2},
+ {0, D_3},
+ {0, D_4},
+ {0, D_5},
+ {0, D_6},
+ {0, D_7},
+ {0, D_8},
+ {0, D_9},
+ {0, D_10},
+ {0, D_11},
+ {0, D_12},
+ {0, D_13},
+ {0, D_16},
+
+ {0, C_1},
+ {0, C_2},
+ {0, C_3},
+ {0, C_4},
+ {0, C_5},
+ {0, C_6},
+ {0, C_7},
+ {0, C_8},
+ {0, C_9},
+ {0, C_10},
+ {0, C_11},
+ {0, C_12},
+ {0, C_14},
+ {0, D_14},
+ {0, C_16},
+
+ {0, B_1},
+ {0, B_3},
+ {0, B_4},
+ {0, B_5},
+ {0, B_6},
+ {0, B_7},
+ {0, B_8},
+ {0, B_9},
+ {0, B_10},
+ {0, B_11},
+ {0, B_12},
+ {0, B_14},
+ {0, B_15},
+ {0, B_16},
+
+ {0, A_1},
+ {0, A_2},
+ {0, A_3},
+ {0, A_4},
+ {0, A_7},
+ {0, A_10},
+ {0, A_11},
+ {0, A_12},
+ {0, A_13},
+ {0, A_14},
+ {0, A_15},
+ {0, A_16},
+};
+
+#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, 59, __, 45 },
+ { 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, __, 58, __, 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 }
+ },
+ {
+ // LED Index to Physical Position
+ {0,0}, {15,0}, {30,0}, {45,0}, {60,0}, {75,0}, {90,0}, {105,0}, {119,0}, {134,0}, {149,0}, {164,0}, {179,0}, {194,0}, {209,0}, {224,0},
+ {0,13}, {15,13}, {30,13}, {45,13}, {60,13}, {75,13}, {90,13}, {105,13}, {119,13}, {134,13}, {149,13}, {164,13}, {179,13}, {194,13}, {209,13}, {224,13},
+ {4,26}, {22,26}, {37,26}, {52,26}, {67,26}, {82,26}, {97,26}, {112,26}, {127,26}, {142,26}, {157,26}, {172,26}, {187,26}, {224,26},
+ {6,38}, {26,38}, {41,38}, {56,38}, {71,38}, {86,38}, {101,38}, {116,38}, {131,38}, {146,38}, {161,38}, {175,38}, {190,38}, {207,32}, {224,38},
+ {9,51}, {34,51}, {49,51}, {64,51}, {78,51}, {93,51}, {108,51}, {123,51}, {138,51}, {153,51}, {168,51}, {183,51}, {203,51}, {224,51},
+ {0,64}, {15,64}, {30,64}, {45,64}, {90,64}, {134,64}, {149,64}, {164,64}, {179,64}, {194,64}, {209,64}, {224,64},
+ },
+ {
+ // RGB LED Index to Flag
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 4, 8, 8, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1
+ }
+};
+#endif
diff --git a/keyboards/keychron/k3_pro/k3_pro.c b/keyboards/keychron/k3_pro/k3_pro.c
old mode 100644
new mode 100755
index 08412fb9ab..6c9c4e92f5
--- a/keyboards/keychron/k3_pro/k3_pro.c
+++ b/keyboards/keychron/k3_pro/k3_pro.c
@@ -194,7 +194,8 @@ void matrix_scan_kb(void) {
#ifdef KC_BLUETOOTH_ENABLE
static void ckbt51_param_init(void) {
/* Set bluetooth device name */
- ckbt51_set_local_name(STR(PRODUCT));
+ // ckbt51_set_local_name(STR(PRODUCT));
+ ckbt51_set_local_name(PRODUCT);
/* Set bluetooth parameters */
module_param_t param = {.event_mode = 0x02,
.connected_idle_timeout = 7200,
@@ -222,6 +223,21 @@ void bluetooth_enter_disconnected_kb(uint8_t host_idx) {
}
}
+void ckbt51_default_ack_handler(uint8_t *data, uint8_t len) {
+ if (data[1] == 0x45) {
+ module_param_t param = {.event_mode = 0x02,
+ .connected_idle_timeout = 7200,
+ .pairing_timeout = 180,
+ .pairing_mode = 0,
+ .reconnect_timeout = 5,
+ .report_rate = 90,
+ .vendor_id_source = 1,
+ .verndor_id = 0, // Must be 0x3434
+ .product_id = PRODUCT_ID};
+ ckbt51_set_param(¶m);
+ }
+}
+
void bluetooth_pre_task(void) {
static uint8_t mode = 1;
diff --git a/keyboards/keychron/k3_pro/k3_pro.h b/keyboards/keychron/k3_pro/k3_pro.h
old mode 100644
new mode 100755
index eb120493ef..46aa84ba20
--- a/keyboards/keychron/k3_pro/k3_pro.h
+++ b/keyboards/keychron/k3_pro/k3_pro.h
@@ -50,36 +50,3 @@ enum {
BAT_LVL,
NEW_SAFE_RANGE,
};
-
-#define LAYOUT_ansi_84( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2F, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3F, \
- K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4E, K4F, \
- K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F \
-) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, ___, K1F }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, ___, K2F }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, ___, K3D, ___, K3F }, \
- { K40, ___, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, ___, K4D, K4E, K4F }, \
- { K50, K51, K52, ___, ___, ___, K56, ___, ___, ___, K5A, K5B, K5C, K5D, K5E, K5F } \
-}
-
-#define LAYOUT_iso_85( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2F, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3F, \
- K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4E, K4F, \
- K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F \
-) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, ___, K1F }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, ___, K2F }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, ___, K3D, ___, K3F }, \
- { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, ___, K4D, K4E, K4F }, \
- { K50, K51, K52, ___, ___, ___, K56, ___, ___, ___, K5A, K5B, K5C, K5D, K5E, K5F } \
-}
-
diff --git a/keyboards/keychron/k3_pro/readme.md b/keyboards/keychron/k3_pro/readme.md
index 18142d246a..8b8e69cfd8 100644
--- a/keyboards/keychron/k3_pro/readme.md
+++ b/keyboards/keychron/k3_pro/readme.md
@@ -1,6 +1,6 @@
# Keychron K3 Pro
-
+
A customizable 84 keys TKL keyboard.
diff --git a/keyboards/keychron/k3_pro/via_json/k3_pro_jis_rgb .json b/keyboards/keychron/k3_pro/via_json/k3_pro_jis_rgb .json
new file mode 100755
index 0000000000..0bc8cafb67
--- /dev/null
+++ b/keyboards/keychron/k3_pro/via_json/k3_pro_jis_rgb .json
@@ -0,0 +1,265 @@
+{
+ "name": "Keychron K3 Pro",
+ "vendorId": "0x3434",
+ "productId": "0x0232",
+ "keycodes": ["qmk_lighting"],
+ "menus": [
+ {
+ "label": "Lighting",
+ "content": [
+ {
+ "label": "Backlight",
+ "content": [
+ {
+ "label": "Brightness",
+ "type": "range",
+ "options": [0, 255],
+ "content": ["id_qmk_rgb_matrix_brightness", 3, 1]
+ },
+ {
+ "label": "Effect",
+ "type": "dropdown",
+ "content": ["id_qmk_rgb_matrix_effect", 3, 2],
+ "options": [
+ ["None", 0],
+ ["Solid Color", 1],
+ ["Breathing", 2],
+ ["Band Spiral Val", 3],
+ ["Cycle All", 4],
+ ["Cycle Left Right", 5],
+ ["Cycle Up Down", 6],
+ ["Rainbow Moving Chevron", 7],
+ ["Cycle Out In", 8],
+ ["Cycle Out In Dual", 9],
+ ["Cycle Pinwheel", 10],
+ ["Cycle Spiral", 11],
+ ["Dual Beacon", 12],
+ ["Rainbow Beacon", 13],
+ ["Jellybean Raindrops", 14],
+ ["Pixel Rain", 15],
+ ["Typing Heatmap", 16],
+ ["Digital Rain", 17],
+ ["Reactive Simple", 18],
+ ["Reactive Multiwide", 19],
+ ["Reactive Multinexus", 20],
+ ["Splash", 21],
+ ["Solid Splash", 22]
+ ]
+ },
+ {
+ "showIf": "{id_qmk_rgb_matrix_effect} > 1",
+ "label": "Effect Speed",
+ "type": "range",
+ "options": [0, 255],
+ "content": ["id_qmk_rgb_matrix_effect_speed", 3, 3]
+ },
+ {
+ "showIf": "{id_qmk_rgb_matrix_effect} != 0 && ( {id_qmk_rgb_matrix_effect} < 4 || {id_qmk_rgb_matrix_effect} == 18 || ({id_qmk_rgb_matrix_effect} > 17 && {id_qmk_rgb_matrix_effect} != 21) ) ",
+ "label": "Color",
+ "type": "color",
+ "content": ["id_qmk_rgb_matrix_color", 3, 4]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "customKeycodes": [
+ {"name": "Left Option", "title": "Left Option", "shortName": "LOpt"},
+ {"name": "Right Option", "title": "Right Option", "shortName": "ROpt"},
+ {"name": "Left Cmd", "title": "Left Command", "shortName": "LCmd"},
+ {"name": "Right Cmd", "title": "Right Command", "shortName": "RCmd"},
+ {"name": "Misson Control", "title": "Misson Control, availabe in macOS", "shortName": "MCtrl"},
+ {"name": "Launch pad", "title": "Launch pad, availabe in macOS", "shortName": "LPad"},
+ {"name": "Task View", "title": "Task View in Windows", "shortName": "Task"},
+ {"name": "File Explorer", "title": "File Explorer in Windows", "shortName": "File"},
+ {"name": "Screen shot", "title": "Screenshot in macOS", "shortName": "SShot"},
+ {"name": "Cortana", "title": "Cortana in Windows", "shortName": "Cortana"},
+ {"name": "Siri", "title": "Siri in macOS", "shortName": "Siri"},
+ {"name": "Bluetooth Host 1", "title": "Bluetooth Host 1", "shortName": "BTH1"},
+ {"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
+ {"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
+ {"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
+ ],
+ "matrix": {"rows": 6, "cols": 16},
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ {
+ "c": "#cccccc"
+ },
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,13",
+ "0,14",
+ "0,15"
+ ],
+ [
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "1,13",
+ "1,14",
+ "1,15"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "x": 0.25,
+ "c": "#777777",
+ "w": 1.25,
+ "h": 2,
+ "w2": 1.5,
+ "h2": 1,
+ "x2": -0.25
+ },
+ "2,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "2,15"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,13",
+ {
+ "x": 1.25
+ },
+ "3,15"
+ ],
+ [
+ {
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,11",
+ "4,13",
+ {
+ "c": "#777777",
+ "w": 1.75
+ },
+ "4,14",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,15"
+ ],
+ [
+ "5,0",
+ "5,1",
+ "5,2",
+ "5,3",
+ {
+ "c": "#cccccc",
+ "w": 5
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,9",
+ "5,10",
+ "5,11",
+ "5,12",
+ {
+ "c": "#777777"
+ },
+ "5,13",
+ "5,14",
+ "5,15"
+ ]
+ ]
+ }
+}
diff --git a/keyboards/keychron/k3_pro/via_json/k3_pro_jis_white.json b/keyboards/keychron/k3_pro/via_json/k3_pro_jis_white.json
new file mode 100755
index 0000000000..41e4bfd0c3
--- /dev/null
+++ b/keyboards/keychron/k3_pro/via_json/k3_pro_jis_white.json
@@ -0,0 +1,204 @@
+{
+ "name": "Keychron K3 Pro",
+ "vendorId": "0x3434",
+ "productId": "0x0235",
+ "keycodes": ["qmk_lighting"],
+ "customKeycodes": [
+ {"name": "Left Option", "title": "Left Option", "shortName": "LOpt"},
+ {"name": "Right Option", "title": "Right Option", "shortName": "ROpt"},
+ {"name": "Left Cmd", "title": "Left Command", "shortName": "LCmd"},
+ {"name": "Right Cmd", "title": "Right Command", "shortName": "RCmd"},
+ {"name": "Misson Control", "title": "Misson Control, availabe in macOS", "shortName": "MCtrl"},
+ {"name": "Launch pad", "title": "Launch pad, availabe in macOS", "shortName": "LPad"},
+ {"name": "Task View", "title": "Task View in Windows", "shortName": "Task"},
+ {"name": "File Explorer", "title": "File Explorer in Windows", "shortName": "File"},
+ {"name": "Screen shot", "title": "Screenshot in macOS", "shortName": "SShot"},
+ {"name": "Cortana", "title": "Cortana in Windows", "shortName": "Cortana"},
+ {"name": "Siri", "title": "Siri in macOS", "shortName": "Siri"},
+ {"name": "Bluetooth Host 1", "title": "Bluetooth Host 1", "shortName": "BTH1"},
+ {"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
+ {"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
+ {"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
+ ],
+ "matrix": {"rows": 6, "cols": 16},
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ {
+ "c": "#cccccc"
+ },
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,13",
+ "0,14",
+ "0,15"
+ ],
+ [
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "1,13",
+ "1,14",
+ "1,15"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "x": 0.25,
+ "c": "#777777",
+ "w": 1.25,
+ "h": 2,
+ "w2": 1.5,
+ "h2": 1,
+ "x2": -0.25
+ },
+ "2,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "2,15"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,13",
+ {
+ "x": 1.25
+ },
+ "3,15"
+ ],
+ [
+ {
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,11",
+ "4,13",
+ {
+ "c": "#777777",
+ "w": 1.75
+ },
+ "4,14",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,15"
+ ],
+ [
+ "5,0",
+ "5,1",
+ "5,2",
+ "5,3",
+ {
+ "c": "#cccccc",
+ "w": 5
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,9",
+ "5,10",
+ "5,11",
+ "5,12",
+ {
+ "c": "#777777"
+ },
+ "5,13",
+ "5,14",
+ "5,15"
+ ]
+ ]
+ }
+}
diff --git a/keyboards/keychron/k4_pro/config.h b/keyboards/keychron/k4_pro/config.h
index f206b504f5..b1c7d7d9a8 100644
--- a/keyboards/keychron/k4_pro/config.h
+++ b/keyboards/keychron/k4_pro/config.h
@@ -40,6 +40,13 @@
#define DIP_SWITCH_PINS \
{ A8 }
+/* Increase I2C speed to 1000 KHz */
+#define I2C1_TIMINGR_PRESC 0U
+#define I2C1_TIMINGR_SCLDEL 3U
+#define I2C1_TIMINGR_SDADEL 0U
+#define I2C1_TIMINGR_SCLH 15U
+#define I2C1_TIMINGR_SCLL 51U
+
#ifdef KC_BLUETOOTH_ENABLE
/* Hardware configuration */
# define USB_BT_MODE_SELECT_PIN A10
diff --git a/keyboards/keychron/k4_pro/iso/rgb/config.h b/keyboards/keychron/k4_pro/iso/rgb/config.h
new file mode 100755
index 0000000000..4ead364553
--- /dev/null
+++ b/keyboards/keychron/k4_pro/iso/rgb/config.h
@@ -0,0 +1,102 @@
+/* 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
+
+#ifdef RGB_MATRIX_ENABLE
+/* RGB Matrix driver configuration */
+# define DRIVER_COUNT 2
+
+# define DRIVER_ADDR_1 0b1110111
+# define DRIVER_ADDR_2 0b1110100
+# define DRIVER_1_LED_COUNT 48
+# define DRIVER_2_LED_COUNT 53
+# define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_COUNT + DRIVER_2_LED_COUNT)
+
+/* 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
+
+/* Indication led */
+# define CAPS_LOCK_INDEX 54
+# define NUM_LOCK_INDEX 33
+# define LOW_BAT_IND_INDEX 92
+
+/* RGB Matrix Animation modes. Explicitly enabled
+ * For full list of effects, see:
+ * https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+ */
+
+# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+// # define ENABLE_RGB_MATRIX_ALPHAS_MODS
+// # define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+// # define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_BREATHING
+// # define ENABLE_RGB_MATRIX_BAND_SAT
+// # define ENABLE_RGB_MATRIX_BAND_VAL
+// # define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+// # define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+// # define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# define ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define ENABLE_RGB_MATRIX_DUAL_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+// # define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+// # define ENABLE_RGB_MATRIX_RAINDROPS
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+// # define ENABLE_RGB_MATRIX_HUE_BREATHING
+// # define ENABLE_RGB_MATRIX_HUE_PENDULUM
+// # define ENABLE_RGB_MATRIX_HUE_WAVE
+# define ENABLE_RGB_MATRIX_PIXEL_RAIN
+// # define ENABLE_RGB_MATRIX_PIXEL_FLOW
+// # define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+
+/* enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined */
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+
+/* enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined*/
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_RGB_MATRIX_SPLASH
+// # define ENABLE_RGB_MATRIX_MULTISPLASH
+# define ENABLE_RGB_MATRIX_SOLID_SPLASH
+// # define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+/* Set LED driver current */
+# define CKLED2001_CURRENT_TUNE \
+ { 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 }
+
+#endif
diff --git a/keyboards/keychron/k4_pro/iso/rgb/info.json b/keyboards/keychron/k4_pro/iso/rgb/info.json
new file mode 100755
index 0000000000..9d6adf0fc4
--- /dev/null
+++ b/keyboards/keychron/k4_pro/iso/rgb/info.json
@@ -0,0 +1,125 @@
+{
+ "keyboard_name": "Keychron K4 Pro",
+ "manufacturer": "Keychron",
+ "url": "https://github.com/Keychron",
+ "maintainer": "lalalademaxiya1",
+ "usb": {
+ "vid": "0x3434",
+ "pid": "0x0241",
+ "device_version": "1.0.0"
+ },
+ "processor": "STM32L432",
+ "bootloader": "stm32-dfu",
+ "layouts": {
+ "LAYOUT_iso_101": {
+ "layout": [
+ {"matrix":[0,0], "x":0, "y":0},
+ {"matrix":[0,1], "x":1, "y":0},
+ {"matrix":[0,2], "x":2, "y":0},
+ {"matrix":[0,3], "x":3, "y":0},
+ {"matrix":[0,4], "x":4, "y":0},
+ {"matrix":[0,5], "x":5, "y":0},
+ {"matrix":[0,6], "x":6, "y":0},
+ {"matrix":[0,7], "x":7, "y":0},
+ {"matrix":[0,8], "x":8, "y":0},
+ {"matrix":[0,9], "x":9, "y":0},
+ {"matrix":[0,10], "x":10, "y":0},
+ {"matrix":[0,11], "x":11, "y":0},
+ {"matrix":[0,12], "x":12, "y":0},
+ {"matrix":[0,13], "x":13, "y":0},
+ {"matrix":[0,14], "x":14, "y":0},
+ {"matrix":[0,15], "x":15.5, "y":0},
+ {"matrix":[0,16], "x":16.5, "y":0},
+ {"matrix":[0,17], "x":17.5, "y":0},
+ {"matrix":[3,17], "x":18.5, "y":0},
+
+ {"matrix":[1,0], "x":0, "y":1.25},
+ {"matrix":[1,1], "x":1, "y":1.25},
+ {"matrix":[1,2], "x":2, "y":1.25},
+ {"matrix":[1,3], "x":3, "y":1.25},
+ {"matrix":[1,4], "x":4, "y":1.25},
+ {"matrix":[1,5], "x":5, "y":1.25},
+ {"matrix":[1,6], "x":6, "y":1.25},
+ {"matrix":[1,7], "x":7, "y":1.25},
+ {"matrix":[1,8], "x":8, "y":1.25},
+ {"matrix":[1,9], "x":9, "y":1.25},
+ {"matrix":[1,10], "x":10, "y":1.25},
+ {"matrix":[1,11], "x":11, "y":1.25},
+ {"matrix":[1,12], "x":12, "y":1.25},
+ {"matrix":[1,13], "x":13, "y":1.25, "w":2},
+ {"matrix":[1,14], "x":15.5, "y":1.25},
+ {"matrix":[1,15], "x":16.5, "y":1.25},
+ {"matrix":[1,16], "x":17.5, "y":1.25},
+ {"matrix":[1,17], "x":18.5, "y":1.25},
+
+ {"matrix":[2,0], "x":0, "y":2.25, "w":1.5},
+ {"matrix":[2,1], "x":1.5, "y":2.25},
+ {"matrix":[2,2], "x":2.5, "y":2.25},
+ {"matrix":[2,3], "x":3.5, "y":2.25},
+ {"matrix":[2,4], "x":4.5, "y":2.25},
+ {"matrix":[2,5], "x":5.5, "y":2.25},
+ {"matrix":[2,6], "x":6.5, "y":2.25},
+ {"matrix":[2,7], "x":7.5, "y":2.25},
+ {"matrix":[2,8], "x":8.5, "y":2.25},
+ {"matrix":[2,9], "x":9.5, "y":2.25},
+ {"matrix":[2,10], "x":10.5, "y":2.25},
+ {"matrix":[2,11], "x":11.5, "y":2.25},
+ {"matrix":[2,12], "x":12.5, "y":2.25},
+ {"matrix":[2,14], "x":15.5, "y":2.25},
+ {"matrix":[2,15], "x":16.5, "y":2.25},
+ {"matrix":[2,16], "x":17.5, "y":2.25},
+ {"matrix":[2,17], "x":18.5, "y":2.25, "h":2},
+
+ {"matrix":[3,0], "x":0, "y":3.25, "w":1.75},
+ {"matrix":[3,1], "x":1.75, "y":3.25},
+ {"matrix":[3,2], "x":2.75, "y":3.25},
+ {"matrix":[3,3], "x":3.75, "y":3.25},
+ {"matrix":[3,4], "x":4.75, "y":3.25},
+ {"matrix":[3,5], "x":5.75, "y":3.25},
+ {"matrix":[3,6], "x":6.75, "y":3.25},
+ {"matrix":[3,7], "x":7.75, "y":3.25},
+ {"matrix":[3,8], "x":8.75, "y":3.25},
+ {"matrix":[3,9], "x":9.75, "y":3.25},
+ {"matrix":[3,10], "x":10.75, "y":3.25},
+ {"matrix":[3,11], "x":11.75, "y":3.25},
+ {"matrix":[3,13], "x":12.75, "y":3.25},
+ {"matrix":[2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+ {"matrix":[3,14], "x":15.5, "y":3.25},
+ {"matrix":[3,15], "x":16.5, "y":3.25},
+ {"matrix":[3,16], "x":17.5, "y":3.25},
+
+ {"matrix":[4,0], "x":0, "y":4.25, "w":1.25},
+ {"matrix":[4,1], "x":1.25, "y":4.25},
+ {"matrix":[4,2], "x":2.25, "y":4.25},
+ {"matrix":[4,3], "x":3.25, "y":4.25},
+ {"matrix":[4,4], "x":4.25, "y":4.25},
+ {"matrix":[4,5], "x":5.25, "y":4.25},
+ {"matrix":[4,6], "x":6.25, "y":4.25},
+ {"matrix":[4,7], "x":7.25, "y":4.25},
+ {"matrix":[4,8], "x":8.25, "y":4.25},
+ {"matrix":[4,9], "x":9.25, "y":4.25},
+ {"matrix":[4,10], "x":10.25, "y":4.25},
+ {"matrix":[4,11], "x":11.25, "y":4.25},
+ {"matrix":[4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix":[4,13], "x":14.25, "y":4.5},
+ {"matrix":[4,14], "x":15.5, "y":4.25},
+ {"matrix":[4,15], "x":16.5, "y":4.25},
+ {"matrix":[4,16], "x":17.5, "y":4.25},
+ {"matrix":[4,17], "x":18.5, "y":4.25, "h":2},
+
+ {"matrix":[5,0], "x":0, "y":5.25, "w":1.25},
+ {"matrix":[5,1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix":[5,2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix":[5,6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix":[5,10], "x":10, "y":5.25},
+ {"matrix":[5,11], "x":11, "y":5.25},
+ {"matrix":[5,12], "x":12, "y":5.25},
+ {"matrix":[5,13], "x":13.25, "y":5.5},
+ {"matrix":[5,14], "x":14.25, "y":5.5},
+ {"matrix":[5,15], "x":15.25, "y":5.5},
+ {"matrix":[5,16], "x":16.5, "y":5.25},
+ {"matrix":[5,17], "x":17.5, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keychron/k4_pro/iso/rgb/keymaps/default/keymap.c b/keyboards/keychron/k4_pro/iso/rgb/keymaps/default/keymap.c
new file mode 100755
index 0000000000..6477ab0878
--- /dev/null
+++ b/keyboards/keychron/k4_pro/iso/rgb/keymaps/default/keymap.c
@@ -0,0 +1,56 @@
+/* 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
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_iso_101(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN, 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_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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, 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_PENT,
+ KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+ [MAC_FN] = LAYOUT_iso_101(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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_iso_101(
+ 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_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN, 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_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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, 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_PENT,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+ [WIN_FN] = LAYOUT_iso_101(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ )
+};
diff --git a/keyboards/keychron/k4_pro/iso/rgb/keymaps/via/keymap.c b/keyboards/keychron/k4_pro/iso/rgb/keymaps/via/keymap.c
new file mode 100755
index 0000000000..6477ab0878
--- /dev/null
+++ b/keyboards/keychron/k4_pro/iso/rgb/keymaps/via/keymap.c
@@ -0,0 +1,56 @@
+/* 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
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_iso_101(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN, 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_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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, 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_PENT,
+ KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+ [MAC_FN] = LAYOUT_iso_101(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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_iso_101(
+ 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_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN, 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_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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, 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_PENT,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+ [WIN_FN] = LAYOUT_iso_101(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ )
+};
diff --git a/keyboards/keychron/k4_pro/iso/rgb/keymaps/via/rules.mk b/keyboards/keychron/k4_pro/iso/rgb/keymaps/via/rules.mk
new file mode 100755
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/keychron/k4_pro/iso/rgb/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/keychron/k4_pro/iso/rgb/rgb.c b/keyboards/keychron/k4_pro/iso/rgb/rgb.c
new file mode 100755
index 0000000000..87a2214109
--- /dev/null
+++ b/keyboards/keychron/k4_pro/iso/rgb/rgb.c
@@ -0,0 +1,167 @@
+/* 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"
+
+// clang-format off
+#ifdef RGB_MATRIX_ENABLE
+const ckled2001_led g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to CKLED2001 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, I_1, G_1, H_1},
+ {0, I_2, G_2, H_2},
+ {0, I_3, G_3, H_3},
+ {0, I_4, G_4, H_4},
+ {0, I_5, G_5, H_5},
+ {0, I_6, G_6, H_6},
+ {0, I_7, G_7, H_7},
+ {0, I_8, G_8, H_8},
+ {0, I_9, G_9, H_9},
+ {0, I_10, G_10, H_10},
+ {0, I_11, G_11, H_11},
+ {0, I_12, G_12, H_12},
+ {0, I_13, G_13, H_13},
+ {0, I_14, G_14, H_14},
+ {0, I_15, G_15, H_15},
+ {0, I_16, G_16, H_16},
+ {1, F_1, D_1, E_1},
+ {1, F_2, D_2, E_2},
+ {1, F_3, D_3, E_3},
+
+ {0, C_1, A_1, B_1},
+ {0, C_2, A_2, B_2},
+ {0, C_3, A_3, B_3},
+ {0, C_4, A_4, B_4},
+ {0, C_5, A_5, B_5},
+ {0, C_6, A_6, B_6},
+ {0, C_7, A_7, B_7},
+ {0, C_8, A_8, B_8},
+ {0, C_9, A_9, B_9},
+ {0, C_10, A_10, B_10},
+ {0, C_11, A_11, B_11},
+ {0, C_12, A_12, B_12},
+ {0, C_13, A_13, B_13},
+ {0, C_14, A_14, B_14},
+ {0, C_15, A_15, B_15},
+ {0, C_16, A_16, B_16},
+ {1, F_4, D_4, E_4},
+ {1, F_5, D_5, E_5},
+
+ {0, F_1, D_1, E_1},
+ {0, F_2, D_2, E_2},
+ {0, F_3, D_3, E_3},
+ {0, F_4, D_4, E_4},
+ {0, F_5, D_5, E_5},
+ {0, F_6, D_6, E_6},
+ {0, F_7, D_7, E_7},
+ {0, F_8, D_8, E_8},
+ {0, F_9, D_9, E_9},
+ {0, F_10, D_10, E_10},
+ {0, F_11, D_11, E_11},
+ {0, F_12, D_12, E_12},
+ {0, F_13, D_13, E_13},
+ {0, F_15, D_15, E_15},
+ {0, F_16, D_16, E_16},
+ {1, F_6, D_6, E_6},
+ {1, F_7, D_7, E_7},
+
+ {1, C_16, A_16, B_16},
+ {1, C_15, A_15, B_15},
+ {1, C_14, A_14, B_14},
+ {1, C_13, A_13, B_13},
+ {1, C_12, A_12, B_12},
+ {1, C_11, A_11, B_11},
+ {1, C_10, A_10, B_10},
+ {1, C_9, A_9, B_9},
+ {1, C_8, A_8, B_8},
+ {1, C_7, A_7, B_7},
+ {1, C_6, A_6, B_6},
+ {1, C_5, A_5, B_5},
+ {1, C_3, A_3, B_3},
+ {0, F_14, D_14, E_14},
+ {1, C_2, A_2, B_2},
+ {1, C_1, A_1, B_1},
+ {1, F_8, D_8, E_8},
+
+ {1, I_16, G_16, H_16},
+ {1, I_15, G_15, H_15},
+ {1, I_14, G_14, H_14},
+ {1, I_13, G_13, H_13},
+ {1, I_12, G_12, H_12},
+ {1, I_11, G_11, H_11},
+ {1, I_10, G_10, H_10},
+ {1, I_9, G_9, H_9},
+ {1, I_8, G_8, H_8},
+ {1, I_7, G_7, H_7},
+ {1, I_6, G_6, H_6},
+ {1, I_5, G_5, H_5},
+ {1, I_4, G_4, H_4},
+ {1, I_3, G_3, H_3},
+ {1, I_2, G_2, H_2},
+ {1, I_1, G_1, H_1},
+ {1, F_9, D_9, E_9},
+ {1, F_10, D_10, E_10},
+
+ {1, L_16, J_16, K_16},
+ {1, L_15, J_15, K_15},
+ {1, L_14, J_14, K_14},
+ {1, L_10, J_10, K_10},
+ {1, L_6, J_6, K_6},
+ {1, L_5, J_5, K_5},
+ {1, L_4, J_4, K_4},
+ {1, L_3, J_3, K_3},
+ {1, L_2, J_2, K_2},
+ {1, L_1, J_1, K_1},
+ {1, F_11, D_11, E_11},
+ {1, F_12, D_12, E_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 },
+ { 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, 67, 50, 51, 52, 53 },
+ { 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, __, 66, 68, 69, 70, 18 },
+ { 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 }
+ },
+ {
+ // LED Index to Physical Position
+ {0,0}, {12,0}, {24,0}, {36,0}, {48,0}, {60,0}, {72,0}, {85,0}, {97,0}, {109,0}, {121,0}, {133,0}, {145,0}, {157,0}, {169,0}, {188,0}, {200,0}, {212,0}, {224,0},
+ {0,15}, {12,15}, {24,15}, {36,15}, {48,15}, {60,15}, {72,15}, {85,15}, {97,15}, {109,15}, {121,15}, {133,15}, {145,15}, {163,15}, {188,15}, {200,15}, {212,15}, {224,15},
+ {3,26}, {18,26}, {30,26}, {42,26}, {54,26}, {66,26}, {78,26}, {91,26}, {103,26}, {115,26}, {127,26}, {139,26}, {151,26}, {188,26}, {200,26}, {212,26}, {224,32},
+ {5,38}, {21,38}, {33,38}, {45,38}, {57,38}, {69,38}, {81,38}, {94,38}, {106,38}, {118,38}, {130,38}, {142,38}, {154,38}, {170,34}, {188,38}, {200,38}, {212,38},
+ {2,49}, {15,49}, {27,49}, {39,49}, {51,49}, {63,49}, {75,49}, {87,49}, {100,49}, {112,49}, {124,49}, {136,49}, {152,49}, {172,52}, {188,49}, {200,49}, {212,49}, {224,55},
+ {2,61}, {17,61}, {32,61}, {77,61}, {121,61}, {133,61}, {145,61}, {160,64}, {172,64}, {184,64}, {200,61}, {212,61},
+ },
+ {
+ // RGB LED Index to Flag
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4,
+ 1, 8, 8, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, 4,
+ 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 4, 4,
+ }
+};
+#endif
diff --git a/keyboards/keychron/k4_pro/iso/rgb/rules.mk b/keyboards/keychron/k4_pro/iso/rgb/rules.mk
new file mode 100755
index 0000000000..7af34ccd60
--- /dev/null
+++ b/keyboards/keychron/k4_pro/iso/rgb/rules.mk
@@ -0,0 +1,2 @@
+RGB_MATRIX_ENABLE = yes
+RGB_MATRIX_DRIVER = CKLED2001
diff --git a/keyboards/keychron/k4_pro/iso/white/config.h b/keyboards/keychron/k4_pro/iso/white/config.h
new file mode 100755
index 0000000000..96530c7a1f
--- /dev/null
+++ b/keyboards/keychron/k4_pro/iso/white/config.h
@@ -0,0 +1,75 @@
+/* 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
+
+#ifdef LED_MATRIX_ENABLE
+/* LED matrix driver configuration */
+# define DRIVER_COUNT 1
+# define DRIVER_ADDR_1 0b1110100
+# define DRIVER_1_LED_COUNT 101
+# define LED_MATRIX_LED_COUNT DRIVER_1_LED_COUNT
+
+/* 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
+
+/* Indicatoon led */
+# define LOW_BAT_IND_INDEX 92
+
+/* LED Matrix Animation modes. Explicitly enabled
+ * For full list of effects, see:
+ * https://docs.qmk.fm/#/feature_led_matrix?id=led-matrix-effects
+ */
+# define LED_MATRIX_KEYPRESSES
+
+# define ENABLE_LED_MATRIX_NONE
+# define ENABLE_LED_MATRIX_SOLID
+// # define ENABLE_LED_MATRIX_ALPHAS_MODS
+# define ENABLE_LED_MATRIX_BREATHING
+// # define ENABLE_LED_MATRIX_BAND
+# define ENABLE_LED_MATRIX_BAND_PINWHEEL
+# define ENABLE_LED_MATRIX_BAND_SPIRAL
+# define ENABLE_LED_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_LED_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_LED_MATRIX_CYCLE_OUT_IN
+# define ENABLE_LED_MATRIX_DUAL_BEACON
+
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_SIMPLE
+// # define ENABLE_LED_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTIWIDE
+// # define ENABLE_LED_MATRIX_SOLID_REACTIVE_CROSS
+// # define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTICROSS
+// # define ENABLE_LED_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_LED_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_LED_MATRIX_SOLID_SPLASH
+// # define ENABLE_LED_MATRIX_SOLID_MULTISPLASH
+
+# define ENABLE_LED_MATRIX_WAVE_LEFT_RIGHT
+# define ENABLE_LED_MATRIX_WAVE_UP_DOWN
+# define ENABLE_LED_MATRIX_EFFECT_MAX
+
+/* Use first 6 channels of LED driver */
+# define PHASE_CHANNEL MSKPHASE_7CHANNEL
+
+/* Set LED driver current */
+# define CKLED2001_CURRENT_TUNE \
+ { 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60 }
+
+#endif
diff --git a/keyboards/keychron/k4_pro/iso/white/info.json b/keyboards/keychron/k4_pro/iso/white/info.json
new file mode 100755
index 0000000000..2ca310c935
--- /dev/null
+++ b/keyboards/keychron/k4_pro/iso/white/info.json
@@ -0,0 +1,125 @@
+{
+ "keyboard_name": "Keychron K4 Pro",
+ "manufacturer": "Keychron",
+ "url": "https://github.com/Keychron",
+ "maintainer": "lalalademaxiya1",
+ "usb": {
+ "vid": "0x3434",
+ "pid": "0x0244",
+ "device_version": "1.0.0"
+ },
+ "processor": "STM32L432",
+ "bootloader": "stm32-dfu",
+ "layouts": {
+ "LAYOUT_iso_101": {
+ "layout": [
+ {"matrix":[0,0], "x":0, "y":0},
+ {"matrix":[0,1], "x":1, "y":0},
+ {"matrix":[0,2], "x":2, "y":0},
+ {"matrix":[0,3], "x":3, "y":0},
+ {"matrix":[0,4], "x":4, "y":0},
+ {"matrix":[0,5], "x":5, "y":0},
+ {"matrix":[0,6], "x":6, "y":0},
+ {"matrix":[0,7], "x":7, "y":0},
+ {"matrix":[0,8], "x":8, "y":0},
+ {"matrix":[0,9], "x":9, "y":0},
+ {"matrix":[0,10], "x":10, "y":0},
+ {"matrix":[0,11], "x":11, "y":0},
+ {"matrix":[0,12], "x":12, "y":0},
+ {"matrix":[0,13], "x":13, "y":0},
+ {"matrix":[0,14], "x":14, "y":0},
+ {"matrix":[0,15], "x":15.5, "y":0},
+ {"matrix":[0,16], "x":16.5, "y":0},
+ {"matrix":[0,17], "x":17.5, "y":0},
+ {"matrix":[3,17], "x":18.5, "y":0},
+
+ {"matrix":[1,0], "x":0, "y":1.25},
+ {"matrix":[1,1], "x":1, "y":1.25},
+ {"matrix":[1,2], "x":2, "y":1.25},
+ {"matrix":[1,3], "x":3, "y":1.25},
+ {"matrix":[1,4], "x":4, "y":1.25},
+ {"matrix":[1,5], "x":5, "y":1.25},
+ {"matrix":[1,6], "x":6, "y":1.25},
+ {"matrix":[1,7], "x":7, "y":1.25},
+ {"matrix":[1,8], "x":8, "y":1.25},
+ {"matrix":[1,9], "x":9, "y":1.25},
+ {"matrix":[1,10], "x":10, "y":1.25},
+ {"matrix":[1,11], "x":11, "y":1.25},
+ {"matrix":[1,12], "x":12, "y":1.25},
+ {"matrix":[1,13], "x":13, "y":1.25, "w":2},
+ {"matrix":[1,14], "x":15.5, "y":1.25},
+ {"matrix":[1,15], "x":16.5, "y":1.25},
+ {"matrix":[1,16], "x":17.5, "y":1.25},
+ {"matrix":[1,17], "x":18.5, "y":1.25},
+
+ {"matrix":[2,0], "x":0, "y":2.25, "w":1.5},
+ {"matrix":[2,1], "x":1.5, "y":2.25},
+ {"matrix":[2,2], "x":2.5, "y":2.25},
+ {"matrix":[2,3], "x":3.5, "y":2.25},
+ {"matrix":[2,4], "x":4.5, "y":2.25},
+ {"matrix":[2,5], "x":5.5, "y":2.25},
+ {"matrix":[2,6], "x":6.5, "y":2.25},
+ {"matrix":[2,7], "x":7.5, "y":2.25},
+ {"matrix":[2,8], "x":8.5, "y":2.25},
+ {"matrix":[2,9], "x":9.5, "y":2.25},
+ {"matrix":[2,10], "x":10.5, "y":2.25},
+ {"matrix":[2,11], "x":11.5, "y":2.25},
+ {"matrix":[2,12], "x":12.5, "y":2.25},
+ {"matrix":[2,14], "x":15.5, "y":2.25},
+ {"matrix":[2,15], "x":16.5, "y":2.25},
+ {"matrix":[2,16], "x":17.5, "y":2.25},
+ {"matrix":[2,17], "x":18.5, "y":2.25, "h":2},
+
+ {"matrix":[3,0], "x":0, "y":3.25, "w":1.75},
+ {"matrix":[3,1], "x":1.75, "y":3.25},
+ {"matrix":[3,2], "x":2.75, "y":3.25},
+ {"matrix":[3,3], "x":3.75, "y":3.25},
+ {"matrix":[3,4], "x":4.75, "y":3.25},
+ {"matrix":[3,5], "x":5.75, "y":3.25},
+ {"matrix":[3,6], "x":6.75, "y":3.25},
+ {"matrix":[3,7], "x":7.75, "y":3.25},
+ {"matrix":[3,8], "x":8.75, "y":3.25},
+ {"matrix":[3,9], "x":9.75, "y":3.25},
+ {"matrix":[3,10], "x":10.75, "y":3.25},
+ {"matrix":[3,11], "x":11.75, "y":3.25},
+ {"matrix":[3,13], "x":12.75, "y":3.25},
+ {"matrix":[2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+ {"matrix":[3,14], "x":15.5, "y":3.25},
+ {"matrix":[3,15], "x":16.5, "y":3.25},
+ {"matrix":[3,16], "x":17.5, "y":3.25},
+
+ {"matrix":[4,0], "x":0, "y":4.25, "w":1.25},
+ {"matrix":[4,1], "x":1.25, "y":4.25},
+ {"matrix":[4,2], "x":2.25, "y":4.25},
+ {"matrix":[4,3], "x":3.25, "y":4.25},
+ {"matrix":[4,4], "x":4.25, "y":4.25},
+ {"matrix":[4,5], "x":5.25, "y":4.25},
+ {"matrix":[4,6], "x":6.25, "y":4.25},
+ {"matrix":[4,7], "x":7.25, "y":4.25},
+ {"matrix":[4,8], "x":8.25, "y":4.25},
+ {"matrix":[4,9], "x":9.25, "y":4.25},
+ {"matrix":[4,10], "x":10.25, "y":4.25},
+ {"matrix":[4,11], "x":11.25, "y":4.25},
+ {"matrix":[4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix":[4,13], "x":14.25, "y":4.5},
+ {"matrix":[4,14], "x":15.5, "y":4.25},
+ {"matrix":[4,15], "x":16.5, "y":4.25},
+ {"matrix":[4,16], "x":17.5, "y":4.25},
+ {"matrix":[4,17], "x":18.5, "y":4.25, "h":2},
+
+ {"matrix":[5,0], "x":0, "y":5.25, "w":1.25},
+ {"matrix":[5,1], "x":1.25, "y":5.25, "w":1.25},
+ {"matrix":[5,2], "x":2.5, "y":5.25, "w":1.25},
+ {"matrix":[5,6], "x":3.75, "y":5.25, "w":6.25},
+ {"matrix":[5,10], "x":10, "y":5.25},
+ {"matrix":[5,11], "x":11, "y":5.25},
+ {"matrix":[5,12], "x":12, "y":5.25},
+ {"matrix":[5,13], "x":13.25, "y":5.5},
+ {"matrix":[5,14], "x":14.25, "y":5.5},
+ {"matrix":[5,15], "x":15.25, "y":5.5},
+ {"matrix":[5,16], "x":16.5, "y":5.25},
+ {"matrix":[5,17], "x":17.5, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keychron/k4_pro/iso/white/keymaps/default/keymap.c b/keyboards/keychron/k4_pro/iso/white/keymaps/default/keymap.c
new file mode 100755
index 0000000000..63e5c618cf
--- /dev/null
+++ b/keyboards/keychron/k4_pro/iso/white/keymaps/default/keymap.c
@@ -0,0 +1,56 @@
+/* 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
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_iso_101(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, BL_DEC, BL_INC, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN, 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_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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, 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_PENT,
+ KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+ [MAC_FN] = LAYOUT_iso_101(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_INC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+ [WIN_BASE] = LAYOUT_iso_101(
+ 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_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN, 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_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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, 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_PENT,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+ [WIN_FN] = LAYOUT_iso_101(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, BL_DEC, BL_INC, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, BL_TOGG,
+ _______, BT_HST1, BT_HST2, BT_HST3, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_INC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ )
+};
diff --git a/keyboards/keychron/k4_pro/iso/white/keymaps/via/keymap.c b/keyboards/keychron/k4_pro/iso/white/keymaps/via/keymap.c
new file mode 100755
index 0000000000..63e5c618cf
--- /dev/null
+++ b/keyboards/keychron/k4_pro/iso/white/keymaps/via/keymap.c
@@ -0,0 +1,56 @@
+/* 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
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ MAC_FN,
+ WIN_BASE,
+ WIN_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT_iso_101(
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, BL_DEC, BL_INC, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN, 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_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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, 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_PENT,
+ KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+ [MAC_FN] = LAYOUT_iso_101(
+ _______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_INC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+ [WIN_BASE] = LAYOUT_iso_101(
+ 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_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN, 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_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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, 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_PENT,
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
+ [WIN_FN] = LAYOUT_iso_101(
+ _______, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, BL_DEC, BL_INC, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, BL_TOGG,
+ _______, BT_HST1, BT_HST2, BT_HST3, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_INC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ )
+};
diff --git a/keyboards/keychron/k4_pro/iso/white/keymaps/via/rules.mk b/keyboards/keychron/k4_pro/iso/white/keymaps/via/rules.mk
new file mode 100755
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/keychron/k4_pro/iso/white/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/keychron/k4_pro/iso/white/rules.mk b/keyboards/keychron/k4_pro/iso/white/rules.mk
new file mode 100755
index 0000000000..6b0c2a0769
--- /dev/null
+++ b/keyboards/keychron/k4_pro/iso/white/rules.mk
@@ -0,0 +1,2 @@
+LED_MATRIX_ENABLE = yes
+LED_MATRIX_DRIVER = CKLED2001
\ No newline at end of file
diff --git a/keyboards/keychron/k4_pro/iso/white/white.c b/keyboards/keychron/k4_pro/iso/white/white.c
new file mode 100755
index 0000000000..ae0890c6cf
--- /dev/null
+++ b/keyboards/keychron/k4_pro/iso/white/white.c
@@ -0,0 +1,165 @@
+/* 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"
+
+// clang-format off
+#ifdef LED_MATRIX_ENABLE
+const ckled2001_led g_ckled2001_leds[LED_MATRIX_LED_COUNT] = {
+/* Refer to CKLED2001 manual for these locations
+ * driver
+ * | LED address
+ * | | */
+ {0, A_16},
+ {0, A_15},
+ {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, 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, G_4},
+ {0, G_5},
+
+ {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_2},
+ {0, C_1},
+ {0, G_6},
+ {0, G_7},
+
+ {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_3},
+ {0, C_3},
+ {0, D_2},
+ {0, D_1},
+ {0, G_8},
+
+ {0, E_16},
+ {0, E_15},
+ {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_4},
+ {0, E_3},
+ {0, E_2},
+ {0, E_1},
+ {0, G_9},
+ {0, G_10},
+
+ {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_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 },
+ { 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, 67, 50, 51, 52, 53 },
+ { 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, __, 66, 68, 69, 70, 18 },
+ { 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 }
+ },
+ {
+ // LED Index to Physical Position
+ {0,0}, {12,0}, {24,0}, {36,0}, {48,0}, {60,0}, {72,0}, {85,0}, {97,0}, {109,0}, {121,0}, {133,0}, {145,0}, {157,0}, {169,0}, {188,0}, {200,0}, {212,0}, {224,0},
+ {0,15}, {12,15}, {24,15}, {36,15}, {48,15}, {60,15}, {72,15}, {85,15}, {97,15}, {109,15}, {121,15}, {133,15}, {145,15}, {163,15}, {188,15}, {200,15}, {212,15}, {224,15},
+ {3,26}, {18,26}, {30,26}, {42,26}, {54,26}, {66,26}, {78,26}, {91,26}, {103,26}, {115,26}, {127,26}, {139,26}, {151,26}, {188,26}, {200,26}, {212,26}, {224,32},
+ {5,38}, {21,38}, {33,38}, {45,38}, {57,38}, {69,38}, {81,38}, {94,38}, {106,38}, {118,38}, {130,38}, {142,38}, {154,38}, {170,34}, {188,38}, {200,38}, {212,38},
+ {2,49}, {15,49}, {27,49}, {39,49}, {51,49}, {63,49}, {75,49}, {87,49}, {100,49}, {112,49}, {124,49}, {136,49}, {152,49}, {172,52}, {188,49}, {200,49}, {212,49}, {224,55},
+ {2,61}, {17,61}, {32,61}, {77,61}, {121,61}, {133,61}, {145,61}, {160,64}, {172,64}, {184,64}, {200,61}, {212,61},
+ },
+ {
+ // RGB LED Index to Flag
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, 4,
+ 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 4, 4,
+ }
+};
+#endif
diff --git a/keyboards/keychron/k4_pro/k4_pro.c b/keyboards/keychron/k4_pro/k4_pro.c
old mode 100644
new mode 100755
index f3d3e679d9..4c3afbac5b
--- a/keyboards/keychron/k4_pro/k4_pro.c
+++ b/keyboards/keychron/k4_pro/k4_pro.c
@@ -189,7 +189,8 @@ void matrix_scan_kb(void) {
#ifdef KC_BLUETOOTH_ENABLE
static void ckbt51_param_init(void) {
/* Set bluetooth device name */
- ckbt51_set_local_name(STR(PRODUCT));
+ // ckbt51_set_local_name(STR(PRODUCT));
+ ckbt51_set_local_name(PRODUCT);
/* Set bluetooth parameters */
module_param_t param = {.event_mode = 0x02,
.connected_idle_timeout = 7200,
@@ -217,6 +218,21 @@ void bluetooth_enter_disconnected_kb(uint8_t host_idx) {
}
}
+void ckbt51_default_ack_handler(uint8_t *data, uint8_t len) {
+ if (data[1] == 0x45) {
+ module_param_t param = {.event_mode = 0x02,
+ .connected_idle_timeout = 7200,
+ .pairing_timeout = 180,
+ .pairing_mode = 0,
+ .reconnect_timeout = 5,
+ .report_rate = 90,
+ .vendor_id_source = 1,
+ .verndor_id = 0, // Must be 0x3434
+ .product_id = PRODUCT_ID};
+ ckbt51_set_param(¶m);
+ }
+}
+
void bluetooth_pre_task(void) {
static uint8_t mode = 1;
diff --git a/keyboards/keychron/k4_pro/k4_pro.h b/keyboards/keychron/k4_pro/k4_pro.h
old mode 100644
new mode 100755
index 4518a35abf..46aa84ba20
--- a/keyboards/keychron/k4_pro/k4_pro.h
+++ b/keyboards/keychron/k4_pro/k4_pro.h
@@ -50,19 +50,3 @@ enum {
BAT_LVL,
NEW_SAFE_RANGE,
};
-
-#define LAYOUT_ansi_100( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H, K3H, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, K3F, K3G, \
- K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, \
- K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H \
-) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, ___, K3D, K3E, K3F, K3G, K3H }, \
- { K40, ___, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H }, \
- { K50, K51, K52, ___, ___, ___, K56, ___, ___, ___, K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H } \
-}
diff --git a/keyboards/keychron/k4_pro/readme.md b/keyboards/keychron/k4_pro/readme.md
index a1c94167da..3cbe1adc81 100644
--- a/keyboards/keychron/k4_pro/readme.md
+++ b/keyboards/keychron/k4_pro/readme.md
@@ -1,6 +1,6 @@
# Keychron K4 Pro
-
+
A customizable 100 keys keyboard.
diff --git a/keyboards/keychron/k4_pro/via_json/k4_pro_iso_rgb.json b/keyboards/keychron/k4_pro/via_json/k4_pro_iso_rgb.json
new file mode 100755
index 0000000000..4a86620f38
--- /dev/null
+++ b/keyboards/keychron/k4_pro/via_json/k4_pro_iso_rgb.json
@@ -0,0 +1,325 @@
+{
+ "name": "Keychron K4 Pro",
+ "vendorId": "0x3434",
+ "productId": "0x0241",
+ "keycodes": ["qmk_lighting"],
+ "menus": [
+ {
+ "label": "Lighting",
+ "content": [
+ {
+ "label": "Backlight",
+ "content": [
+ {
+ "label": "Brightness",
+ "type": "range",
+ "options": [0, 255],
+ "content": ["id_qmk_rgb_matrix_brightness", 3, 1]
+ },
+ {
+ "label": "Effect",
+ "type": "dropdown",
+ "content": ["id_qmk_rgb_matrix_effect", 3, 2],
+ "options": [
+ ["None", 0],
+ ["Solid Color", 1],
+ ["Breathing", 2],
+ ["Band Spiral Val", 3],
+ ["Cycle All", 4],
+ ["Cycle Left Right", 5],
+ ["Cycle Up Down", 6],
+ ["Rainbow Moving Chevron", 7],
+ ["Cycle Out In", 8],
+ ["Cycle Out In Dual", 9],
+ ["Cycle Pinwheel", 10],
+ ["Cycle Spiral", 11],
+ ["Dual Beacon", 12],
+ ["Rainbow Beacon", 13],
+ ["Jellybean Raindrops", 14],
+ ["Pixel Rain", 15],
+ ["Typing Heatmap", 16],
+ ["Digital Rain", 17],
+ ["Reactive Simple", 18],
+ ["Reactive Multiwide", 19],
+ ["Reactive Multinexus", 20],
+ ["Splash", 21],
+ ["Solid Splash", 22]
+ ]
+ },
+ {
+ "showIf": "{id_qmk_rgb_matrix_effect} > 1",
+ "label": "Effect Speed",
+ "type": "range",
+ "options": [0, 255],
+ "content": ["id_qmk_rgb_matrix_effect_speed", 3, 3]
+ },
+ {
+ "showIf": "{id_qmk_rgb_matrix_effect} != 0 && ( {id_qmk_rgb_matrix_effect} < 4 || {id_qmk_rgb_matrix_effect} == 18 || ({id_qmk_rgb_matrix_effect} > 17 && {id_qmk_rgb_matrix_effect} != 21) ) ",
+ "label": "Color",
+ "type": "color",
+ "content": ["id_qmk_rgb_matrix_color", 3, 4]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "customKeycodes": [
+ {"name": "Left Option", "title": "Left Option", "shortName": "LOpt"},
+ {"name": "Right Option", "title": "Right Option", "shortName": "ROpt"},
+ {"name": "Left Cmd", "title": "Left Command", "shortName": "LCmd"},
+ {"name": "Right Cmd", "title": "Right Command", "shortName": "RCmd"},
+ {"name": "Misson Control", "title": "Misson Control, availabe in macOS", "shortName": "MCtrl"},
+ {"name": "Launch pad", "title": "Launch pad, availabe in macOS", "shortName": "LPad"},
+ {"name": "Task View", "title": "Task View in Windows", "shortName": "Task"},
+ {"name": "File Explorer", "title": "File Explorer in Windows", "shortName": "File"},
+ {"name": "Screen shot", "title": "Screenshot in macOS", "shortName": "SShot"},
+ {"name": "Cortana", "title": "Cortana in Windows", "shortName": "Cortana"},
+ {"name": "Siri", "title": "Siri in macOS", "shortName": "Siri"},
+ {"name": "Bluetooth Host 1", "title": "Bluetooth Host 1", "shortName": "BTH1"},
+ {"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
+ {"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
+ {"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
+ ],
+ "matrix": {"rows": 6, "cols": 18},
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ {
+ "c": "#cccccc"
+ },
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,13",
+ "0,14",
+ {
+ "x": 0.5
+ },
+ "0,15",
+ "0,16",
+ "0,17",
+ "3,17"
+ ],
+ [
+ {
+ "y": 0.25
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ {
+ "x": 0.5,
+ "c": "#cccccc"
+ },
+ "1,14",
+ "1,15",
+ "1,16",
+ "1,17"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "x": 0.25,
+ "c": "#777777",
+ "w": 1.25,
+ "h": 2,
+ "w2": 1.5,
+ "h2": 1,
+ "x2": -0.25
+ },
+ "3,13",
+ {
+ "x": 0.5,
+ "c": "#cccccc"
+ },
+ "2,14",
+ "2,15",
+ "2,16",
+ {
+ "h": 2
+ },
+ "2,17"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa"
+ },
+ "2,13",
+ {
+ "x": 1.75,
+ "c": "#cccccc"
+ },
+ "3,14",
+ "3,15",
+ "3,16"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "4,0",
+ "4,1",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "4,12",
+ {
+ "x": 1.5,
+ "c": "#cccccc"
+ },
+ "4,14",
+ "4,15",
+ "4,16",
+ {
+ "h": 2
+ },
+ "4,17"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 14.25,
+ "c": "#777777"
+ },
+ "4,13"
+ ],
+ [
+ {
+ "y": -0.25,
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,10",
+ "5,11",
+ "5,12",
+ {
+ "x": 3.5,
+ "c": "#cccccc"
+ },
+ "5,16",
+ "5,17"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 13.25,
+ "c": "#777777"
+ },
+ "5,13",
+ "5,14",
+ "5,15"
+ ]
+ ]
+ }
+}
diff --git a/keyboards/keychron/k4_pro/via_json/k4_pro_iso_white.json b/keyboards/keychron/k4_pro/via_json/k4_pro_iso_white.json
new file mode 100755
index 0000000000..8462a7f8ac
--- /dev/null
+++ b/keyboards/keychron/k4_pro/via_json/k4_pro_iso_white.json
@@ -0,0 +1,264 @@
+{
+ "name": "Keychron K4 Pro",
+ "vendorId": "0x3434",
+ "productId": "0x0244",
+ "keycodes": ["qmk_lighting"],
+ "customKeycodes": [
+ {"name": "Left Option", "title": "Left Option", "shortName": "LOpt"},
+ {"name": "Right Option", "title": "Right Option", "shortName": "ROpt"},
+ {"name": "Left Cmd", "title": "Left Command", "shortName": "LCmd"},
+ {"name": "Right Cmd", "title": "Right Command", "shortName": "RCmd"},
+ {"name": "Misson Control", "title": "Misson Control, availabe in macOS", "shortName": "MCtrl"},
+ {"name": "Launch pad", "title": "Launch pad, availabe in macOS", "shortName": "LPad"},
+ {"name": "Task View", "title": "Task View in Windows", "shortName": "Task"},
+ {"name": "File Explorer", "title": "File Explorer in Windows", "shortName": "File"},
+ {"name": "Screen shot", "title": "Screenshot in macOS", "shortName": "SShot"},
+ {"name": "Cortana", "title": "Cortana in Windows", "shortName": "Cortana"},
+ {"name": "Siri", "title": "Siri in macOS", "shortName": "Siri"},
+ {"name": "Bluetooth Host 1", "title": "Bluetooth Host 1", "shortName": "BTH1"},
+ {"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
+ {"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
+ {"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
+ ],
+ "matrix": {"rows": 6, "cols": 18},
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ {
+ "c": "#cccccc"
+ },
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,13",
+ "0,14",
+ {
+ "x": 0.5
+ },
+ "0,15",
+ "0,16",
+ "0,17",
+ "3,17"
+ ],
+ [
+ {
+ "y": 0.25
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ {
+ "x": 0.5,
+ "c": "#cccccc"
+ },
+ "1,14",
+ "1,15",
+ "1,16",
+ "1,17"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "x": 0.25,
+ "c": "#777777",
+ "w": 1.25,
+ "h": 2,
+ "w2": 1.5,
+ "h2": 1,
+ "x2": -0.25
+ },
+ "3,13",
+ {
+ "x": 0.5,
+ "c": "#cccccc"
+ },
+ "2,14",
+ "2,15",
+ "2,16",
+ {
+ "h": 2
+ },
+ "2,17"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa"
+ },
+ "2,13",
+ {
+ "x": 1.75,
+ "c": "#cccccc"
+ },
+ "3,14",
+ "3,15",
+ "3,16"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "4,0",
+ "4,1",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "4,12",
+ {
+ "x": 1.5,
+ "c": "#cccccc"
+ },
+ "4,14",
+ "4,15",
+ "4,16",
+ {
+ "h": 2
+ },
+ "4,17"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 14.25,
+ "c": "#777777"
+ },
+ "4,13"
+ ],
+ [
+ {
+ "y": -0.25,
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,10",
+ "5,11",
+ "5,12",
+ {
+ "x": 3.5,
+ "c": "#cccccc"
+ },
+ "5,16",
+ "5,17"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 13.25,
+ "c": "#777777"
+ },
+ "5,13",
+ "5,14",
+ "5,15"
+ ]
+ ]
+ }
+}
diff --git a/keyboards/keychron/k5_pro/ansi/rgb/config.h b/keyboards/keychron/k5_pro/ansi/rgb/config.h
index 7c0deb60e1..83294b9d52 100755
--- a/keyboards/keychron/k5_pro/ansi/rgb/config.h
+++ b/keyboards/keychron/k5_pro/ansi/rgb/config.h
@@ -25,13 +25,6 @@
# define DRIVER_2_LED_TOTAL 50
# define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
-/* Increase I2C speed to 1000 KHz */
-# define I2C1_TIMINGR_PRESC 0U
-# define I2C1_TIMINGR_SCLDEL 3U
-# define I2C1_TIMINGR_SDADEL 0U
-# define I2C1_TIMINGR_SCLH 15U
-# define I2C1_TIMINGR_SCLL 30U
-
/* Set to infinit, which is use in USB mode by default */
# define RGB_MATRIX_TIMEOUT RGB_MATRIX_TIMEOUT_INFINITE
diff --git a/keyboards/keychron/k5_pro/ansi/rgb/rgb.c b/keyboards/keychron/k5_pro/ansi/rgb/rgb.c
index 4eb555ed64..f20c3d1e97 100755
--- a/keyboards/keychron/k5_pro/ansi/rgb/rgb.c
+++ b/keyboards/keychron/k5_pro/ansi/rgb/rgb.c
@@ -19,7 +19,7 @@
// clang-format off
#ifdef RGB_MATRIX_ENABLE
const ckled2001_led g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
-/* Refer to IS31 manual for these locations
+/* Refer to CKLED2001 manual for these locations
* driver
* | R location
* | | G location
diff --git a/keyboards/keychron/k5_pro/ansi/white/config.h b/keyboards/keychron/k5_pro/ansi/white/config.h
index 5c7351d955..3c2d99a4cf 100755
--- a/keyboards/keychron/k5_pro/ansi/white/config.h
+++ b/keyboards/keychron/k5_pro/ansi/white/config.h
@@ -23,13 +23,6 @@
# define DRIVER_1_LED_TOTAL 108
# define LED_MATRIX_LED_COUNT DRIVER_1_LED_TOTAL
-/* Increase I2C speed to 1000 KHz */
-# define I2C1_TIMINGR_PRESC 0U
-# define I2C1_TIMINGR_SCLDEL 3U
-# define I2C1_TIMINGR_SDADEL 0U
-# define I2C1_TIMINGR_SCLH 15U
-# define I2C1_TIMINGR_SCLL 30U
-
/* Set to infinit, which is use in USB mode by default */
# define LED_MATRIX_TIMEOUT LED_MATRIX_TIMEOUT_INFINITE
diff --git a/keyboards/keychron/k5_pro/ansi/white/white.c b/keyboards/keychron/k5_pro/ansi/white/white.c
index 2826b0249b..214f7a4238 100755
--- a/keyboards/keychron/k5_pro/ansi/white/white.c
+++ b/keyboards/keychron/k5_pro/ansi/white/white.c
@@ -19,7 +19,7 @@
// clang-format off
#ifdef LED_MATRIX_ENABLE
const ckled2001_led g_ckled2001_leds[LED_MATRIX_LED_COUNT] = {
-/* Refer to IS31 manual for these locations
+/* Refer to CKLED2001 manual for these locations
* driver
* | LED address
* | | */
diff --git a/keyboards/keychron/k5_pro/config.h b/keyboards/keychron/k5_pro/config.h
index e9ed742789..92a4b1192f 100755
--- a/keyboards/keychron/k5_pro/config.h
+++ b/keyboards/keychron/k5_pro/config.h
@@ -41,6 +41,13 @@
#define LED_CAPS_LOCK_PIN A0
#define LED_PIN_ON_STATE 1
+/* Increase I2C speed to 1000 KHz */
+#define I2C1_TIMINGR_PRESC 0U
+#define I2C1_TIMINGR_SCLDEL 3U
+#define I2C1_TIMINGR_SDADEL 0U
+#define I2C1_TIMINGR_SCLH 15U
+#define I2C1_TIMINGR_SCLL 51U
+
#ifdef KC_BLUETOOTH_ENABLE
/* Hardware configuration */
# define USB_BT_MODE_SELECT_PIN A10
diff --git a/keyboards/keychron/k5_pro/k5_pro.c b/keyboards/keychron/k5_pro/k5_pro.c
index 408d2c60ef..42940fff2b 100755
--- a/keyboards/keychron/k5_pro/k5_pro.c
+++ b/keyboards/keychron/k5_pro/k5_pro.c
@@ -201,7 +201,8 @@ void matrix_scan_kb(void) {
#ifdef KC_BLUETOOTH_ENABLE
static void ckbt51_param_init(void) {
/* Set bluetooth device name */
- ckbt51_set_local_name(STR(PRODUCT));
+ // ckbt51_set_local_name(STR(PRODUCT));
+ ckbt51_set_local_name(PRODUCT);
/* Set bluetooth parameters */
module_param_t param = {.event_mode = 0x02,
.connected_idle_timeout = 7200,
@@ -215,6 +216,21 @@ static void ckbt51_param_init(void) {
ckbt51_set_param(¶m);
}
+void ckbt51_default_ack_handler(uint8_t *data, uint8_t len) {
+ if (data[1] == 0x45) {
+ module_param_t param = {.event_mode = 0x02,
+ .connected_idle_timeout = 7200,
+ .pairing_timeout = 180,
+ .pairing_mode = 0,
+ .reconnect_timeout = 5,
+ .report_rate = 90,
+ .vendor_id_source = 1,
+ .verndor_id = 0, // Must be 0x3434
+ .product_id = PRODUCT_ID};
+ ckbt51_set_param(¶m);
+ }
+}
+
void bluetooth_enter_disconnected_kb(uint8_t host_idx) {
if (bt_factory_reset) {
bt_factory_reset = false;
diff --git a/keyboards/keychron/k5_pro/matrix.c b/keyboards/keychron/k5_pro/matrix.c
index 3bae52ab1a..3b422d9d2b 100755
--- a/keyboards/keychron/k5_pro/matrix.c
+++ b/keyboards/keychron/k5_pro/matrix.c
@@ -14,9 +14,6 @@
* along with this program. If not, see .
*/
-#include "stdint.h"
-#include "hal.h"
-#include "gpio.h"
#include "quantum.h"
#define HC595_STCP B0
@@ -26,56 +23,6 @@
pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-static inline void HC595_delay(uint16_t n) {
- while (n-- > 0) {
- asm volatile("nop" ::: "memory");
- }
-}
-
-#ifdef DRIVE_SHRIFT_REGISTER_WITH_SPI
-// clang-format off
-const SPIConfig hs_spicfg = {
- .circular = false,
- .slave = false,
- .data_cb = NULL,
- .error_cb = NULL,
- .ssport = PAL_PORT(HC595_STCP),
- .sspad = PAL_PAD(HC595_STCP),
- .cr1 = SPI_CR1_BR_1,
- .cr2 = SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0 | SPI_CR2_SSOE | SPI_CR2_NSSP
-};
-// clang-format on
-#endif
-static void HC595_output(uint32_t data) {
-#ifdef DRIVE_SHRIFT_REGISTER_WITH_SPI
- spiSend(&SPID1, 1, &data);
-#else
- uint8_t i;
- uint8_t n = 1;
-
- for (i = 0; i < MATRIX_COLS; i++) {
- writePinLow(HC595_SHCP);
-
- if (data & 0x0001)
- writePinHigh(HC595_DS);
- else
- writePinLow(HC595_DS);
-
- data >>= 1;
-
- HC595_delay(n);
-
- writePinHigh(HC595_SHCP);
- HC595_delay(n);
- }
-
- HC595_delay(n);
- writePinLow(HC595_STCP);
- HC595_delay(n);
- writePinHigh(HC595_STCP);
-#endif
-}
-
static inline void setPinOutput_writeLow(pin_t pin) {
ATOMIC_BLOCK_FORCEON {
setPinOutput(pin);
@@ -83,7 +30,14 @@ static inline void setPinOutput_writeLow(pin_t pin) {
}
}
-static inline void setPinInputHigh_atomic(pin_t pin) {
+static inline void setPinOutput_writeHigh(pin_t pin) {
+ ATOMIC_BLOCK_FORCEON {
+ setPinOutput(pin);
+ writePinHigh(pin);
+ }
+}
+
+static inline void setPinInput_high(pin_t pin) {
ATOMIC_BLOCK_FORCEON {
setPinInputHigh(pin);
}
@@ -97,16 +51,65 @@ static inline uint8_t readMatrixPin(pin_t pin) {
}
}
+static inline void HC595_delay(uint16_t n) {
+ while (n-- > 0) {
+ asm volatile("nop" ::: "memory");
+ }
+}
+
+static void HC595_output(uint32_t data) {
+ ATOMIC_BLOCK_FORCEON {
+ for (uint8_t i = 0; i < MATRIX_COLS; i++) {
+ if (data & 0x1) {
+ writePinHigh(HC595_DS);
+ } else {
+ writePinLow(HC595_DS);
+ }
+
+ data = data >> 1;
+
+ writePinHigh(HC595_SHCP);
+ HC595_delay(1);
+ writePinLow(HC595_SHCP);
+ HC595_delay(1);
+ }
+ writePinHigh(HC595_STCP);
+ HC595_delay(1);
+ writePinLow(HC595_STCP);
+ HC595_delay(1);
+ }
+}
+
+static void HC595_output_oneBit(uint8_t data) {
+ ATOMIC_BLOCK_FORCEON {
+ if (data & 0x1) {
+ writePinHigh(HC595_DS);
+ } else {
+ writePinLow(HC595_DS);
+ }
+
+ writePinHigh(HC595_SHCP);
+ HC595_delay(1);
+ writePinLow(HC595_SHCP);
+ HC595_delay(1);
+
+ writePinHigh(HC595_STCP);
+ HC595_delay(1);
+ writePinLow(HC595_STCP);
+ HC595_delay(1);
+ }
+}
+
static bool select_col(uint8_t col) {
pin_t pin = col_pins[col];
- if (col < 0) {
- if (pin != NO_PIN) {
- setPinOutput_writeLow(pin);
- return true;
- }
+ if (pin != NO_PIN) {
+ setPinOutput_writeLow(pin);
+ return true;
} else {
- HC595_output(~(0x01 << (MATRIX_COLS - 1 - col)));
+ if (col == 0) {
+ HC595_output_oneBit(0x00);
+ }
return true;
}
return false;
@@ -115,81 +118,96 @@ static bool select_col(uint8_t col) {
static void unselect_col(uint8_t col) {
pin_t pin = col_pins[col];
- if (col < 0) {
- if (pin != NO_PIN) {
- setPinInputHigh_atomic(pin);
- }
+ if (pin != NO_PIN) {
+#ifdef MATRIX_UNSELECT_DRIVE_HIGH
+ setPinOutput_writeHigh(pin);
+#else
+ setPinInput_high(pin);
+#endif
} else {
- if (col >= MATRIX_COLS - 1) HC595_output(0xFFFFFFFF);
+ HC595_output_oneBit(0x01);
}
}
static void unselect_cols(void) {
- if (col_pins[0] != NO_PIN) setPinInputHigh_atomic(col_pins[0]);
- HC595_output(0xFFFFFFFF);
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ pin_t pin = col_pins[x];
+ if (pin != NO_PIN) {
+#ifdef MATRIX_UNSELECT_DRIVE_HIGH
+ setPinOutput_writeHigh(pin);
+#else
+ setPinInput_high(pin);
+#endif
+ } else {
+ if (x == 0) HC595_output(0xFFFFFFFF);
+ }
+ }
}
void select_all_cols(void) {
- if (col_pins[0] != NO_PIN) setPinOutput_writeLow(col_pins[0]);
- HC595_output(0x00000000);
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ pin_t pin = col_pins[x];
+ if (pin != NO_PIN) {
+ setPinOutput_writeLow(pin);
+ } else {
+ if (x == 0) HC595_output(0x00000000);
+ }
+ }
}
-void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
+static void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col, matrix_row_t row_shifter) {
+ bool key_pressed = false;
+
// Select col
if (!select_col(current_col)) { // select col
return; // skip NO_PIN col
}
- HC595_delay(100);
+ matrix_output_select_delay();
// 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] |= (MATRIX_ROW_SHIFTER << current_col);
- // key_pressed = true;
+ current_matrix[row_index] |= row_shifter;
+ key_pressed = true;
} else {
// Pin HI, clear col bit
- current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
+ current_matrix[row_index] &= ~row_shifter;
}
}
+ // Unselect col
unselect_col(current_col);
- HC595_delay(100);
+ matrix_output_unselect_delay(current_col, key_pressed); // wait for all Row signals to go HIGH
}
void matrix_init_custom(void) {
- for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
- if (row_pins[x] != NO_PIN) {
- setPinInputHigh_atomic(row_pins[x]);
- }
- }
-#ifdef DRIVE_SHRIFT_REGISTER_WITH_SPI
- palSetPadMode(PAL_PORT(HC595_SHCP), PAL_PAD(HC595_SHCP), PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* SCK */
- palSetPadMode(PAL_PORT(HC595_DS), PAL_PAD(HC595_DS), PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* MOSI*/
- palSetPadMode(PAL_PORT(HC595_STCP), PAL_PAD(HC595_STCP), PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* CS*/
- spiStart(&SPID1, &hs_spicfg);
-#else
setPinOutput(HC595_DS);
setPinOutput(HC595_STCP);
setPinOutput(HC595_SHCP);
-#endif
+
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ if (row_pins[x] != NO_PIN) {
+ setPinInput_high(row_pins[x]);
+ }
+ }
+
unselect_cols();
}
bool matrix_scan_custom(matrix_row_t current_matrix[]) {
- bool matrix_has_changed = false;
-
matrix_row_t curr_matrix[MATRIX_ROWS] = {0};
// Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
- matrix_read_rows_on_col(curr_matrix, current_col);
+ 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);
}
- matrix_has_changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0;
- if (matrix_has_changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix));
+ bool changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0;
+ if (changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix));
- return matrix_has_changed;
+ return changed;
}
diff --git a/keyboards/keychron/k5_pro/readme.md b/keyboards/keychron/k5_pro/readme.md
index 63b070d3b6..a02434fa90 100755
--- a/keyboards/keychron/k5_pro/readme.md
+++ b/keyboards/keychron/k5_pro/readme.md
@@ -1,10 +1,12 @@
# Keychron K5 Pro
+
+
A customizable 100% keyboard.
* Keyboard Maintainer: [Keychron](https://github.com/keychron)
* Hardware Supported: Keychron K5 Pro
-* Hardware Availability: [Keychron](https://www.keychron.com)
+* Hardware Availability: [Keychron K5 Pro]()
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/keychron/k5_pro/via_json/k5_pro_ansi_rgb_v1.00.json b/keyboards/keychron/k5_pro/via_json/k5_pro_ansi_rgb_v1.00.json
index c6dad89b84..7528f32040 100755
--- a/keyboards/keychron/k5_pro/via_json/k5_pro_ansi_rgb_v1.00.json
+++ b/keyboards/keychron/k5_pro/via_json/k5_pro_ansi_rgb_v1.00.json
@@ -21,29 +21,29 @@
"type": "dropdown",
"content": ["id_qmk_rgb_matrix_effect", 3, 2],
"options": [
- ["00. None", 0],
- ["01. SOLID_COLOR", 1],
- ["02. BREATHING", 2],
- ["03. BAND_SPIRAL_VAL", 3],
- ["04. CYCLE_ALL", 4],
- ["05. CYCLE_LEFT_RIGHT", 5],
- ["06. CYCLE_UP_DOWN", 6],
- ["07. RAINBOW_MOVING_CHEVRON", 7],
- ["08. CYCLE_OUT_IN", 8],
- ["09. CYCLE_OUT_IN_DUAL", 9],
- ["10. CYCLE_PINWHEEL", 10],
- ["11. CYCKE_SPIRAL", 11],
- ["12. DUAL_BEACON", 12],
- ["13. RAINBOW_BEACON", 13],
- ["14. JELLYBEAN_RAINDROPS", 14],
- ["15. PIXEL_RAIN", 15],
- ["16. TYPING_HEATMAP", 16],
- ["17. DIGITAL_RAIN", 17],
- ["18. REACTIVE_SIMPLE", 18],
- ["19. REACTIVE_MULTIWIDE", 19],
- ["20. REACTIVE_MULTINEXUS", 20],
- ["21. SPLASH", 21],
- ["22. SOLID_SPLASH", 22]
+ ["None", 0],
+ ["Solid Color", 1],
+ ["Breathing", 2],
+ ["Band Spiral Val", 3],
+ ["Cycle All", 4],
+ ["Cycle Left Right", 5],
+ ["Cycle Up Down", 6],
+ ["Rainbow Moving Chevron", 7],
+ ["Cycle Out In", 8],
+ ["Cycle Out In Dual", 9],
+ ["Cycle Pinwheel", 10],
+ ["Cycle Spiral", 11],
+ ["Dual Beacon", 12],
+ ["Rainbow Beacon", 13],
+ ["Jellybean Raindrops", 14],
+ ["Pixel Rain", 15],
+ ["Typing Heatmap", 16],
+ ["Digital Rain", 17],
+ ["Reactive Simple", 18],
+ ["Reactive Multiwide", 19],
+ ["Reactive Multinexus", 20],
+ ["Splash", 21],
+ ["Solid Splash", 22]
]
},
{
@@ -54,7 +54,7 @@
"content": ["id_qmk_rgb_matrix_effect_speed", 3, 3]
},
{
- "showIf": "{id_qmk_rgb_matrix_effect} != 0",
+ "showIf": "{id_qmk_rgb_matrix_effect} != 0 && ( {id_qmk_rgb_matrix_effect} < 4 || {id_qmk_rgb_matrix_effect} == 18 || ({id_qmk_rgb_matrix_effect} > 17 && {id_qmk_rgb_matrix_effect} != 21) ) ",
"label": "Color",
"type": "color",
"content": ["id_qmk_rgb_matrix_color", 3, 4]
@@ -65,81 +65,21 @@
}
],
"customKeycodes": [
- {
- "name": "Left Option",
- "title": "Left Option in macOS",
- "shortName": "LOpt"
- },
- {
- "name": "Right Option",
- "title": "Right Option in macOS",
- "shortName": "ROpt"
- },
- {
- "name": "Left Cmd",
- "title": "Left Command in macOS",
- "shortName": "LCmd"
- },
- {
- "name": "Right Cmd",
- "title": "Right Command in macOS",
- "shortName": "RCmd"
- },
- {
- "name": "Mission Control",
- "title": "Mission Control in macOS",
- "shortName": "MCtrl"
- },
- {
- "name": "Launch Pad",
- "title": "Launch Pad in macOS",
- "shortName": "LPad"
- },
- {
- "name": "Task View",
- "title": "Task View in windows",
- "shortName": "Task"
- },
- {
- "name": "File Explorer",
- "title": "File Explorer in windows",
- "shortName": "File"
- },
- {
- "name": "Screen Shot",
- "title": "Screenshot in macOS",
- "shortName": "SShot"
- },
- {
- "name": "Cortana",
- "title": "Cortana in windows",
- "shortName": "Cortana"
- },
- {
- "name": "Siri",
- "title": "Siri in macOS",
- "shortName": "Siri"
- },
- {
- "name": "Bluetooth Host 1",
- "title": "Bluetooth Host 1",
- "shortName": "BTH1"
- },
- {
- "name": "Bluetooth Host 2",
- "title": "Bluetooth Host 2",
- "shortName": "BTH2"
- },
- {
- "name": "Bluetooth Host 3",
- "title": "Bluetooth Host 3",
- "shortName": "BTH3"
- },
- {
- "name": "Battery Level",
- "title": "Show battery level",
- "shortName": "Batt"
- }
+ {"name": "Left Option", "title": "Left Option", "shortName": "LOpt"},
+ {"name": "Right Option", "title": "Right Option", "shortName": "ROpt"},
+ {"name": "Left Cmd", "title": "Left Command", "shortName": "LCmd"},
+ {"name": "Right Cmd", "title": "Right Command", "shortName": "RCmd"},
+ {"name": "Misson Control", "title": "Misson Control, availabe in macOS", "shortName": "MCtrl"},
+ {"name": "Launch pad", "title": "Launch pad, availabe in macOS", "shortName": "LPad"},
+ {"name": "Task View", "title": "Task View in Windows", "shortName": "Task"},
+ {"name": "File Explorer", "title": "File Explorer in Windows", "shortName": "File"},
+ {"name": "Screen shot", "title": "Screenshot in macOS", "shortName": "SShot"},
+ {"name": "Cortana", "title": "Cortana in Windows", "shortName": "Cortana"},
+ {"name": "Siri", "title": "Siri in macOS", "shortName": "Siri"},
+ {"name": "Bluetooth Host 1", "title": "Bluetooth Host 1", "shortName": "BTH1"},
+ {"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
+ {"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
+ {"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
],
"matrix": {"rows": 6, "cols": 21},
"layouts": {
@@ -158,27 +98,31 @@
"0,3",
"0,4",
{
- "x": 0.5
+ "x": 0.5,
+ "c": "#aaaaaa"
},
"0,5",
"0,6",
"0,7",
"0,8",
{
- "x": 0.5
+ "x": 0.5,
+ "c": "#cccccc"
},
"0,9",
"0,10",
"0,11",
"0,12",
{
- "x": 0.25
+ "x": 0.25,
+ "c": "#aaaaaa"
},
"0,14",
"0,15",
"0,16",
{
- "x": 0.25
+ "x": 0.25,
+ "c": "#cccccc"
},
"0,17",
"0,18",
@@ -187,9 +131,13 @@
],
[
{
- "y": 0.25
+ "y": 0.25,
+ "c": "#aaaaaa"
},
"1,0",
+ {
+ "c": "#cccccc"
+ },
"1,1",
"1,2",
"1,3",
@@ -244,12 +192,12 @@
"2,11",
"2,12",
{
+ "c": "#aaaaaa",
"w": 1.5
},
"2,13",
{
- "x": 0.25,
- "c": "#aaaaaa"
+ "x": 0.25
},
"2,14",
"2,15",
@@ -369,12 +317,10 @@
},
"5,11",
{
- "c": "#cccccc",
"w": 1.25
},
"5,12",
{
- "c": "#aaaaaa",
"w": 1.25
},
"5,13",
diff --git a/keyboards/keychron/k5_pro/via_json/k5_pro_ansi_white_v1.00.json b/keyboards/keychron/k5_pro/via_json/k5_pro_ansi_white_v1.00.json
index e11af48486..75db3294af 100755
--- a/keyboards/keychron/k5_pro/via_json/k5_pro_ansi_white_v1.00.json
+++ b/keyboards/keychron/k5_pro/via_json/k5_pro_ansi_white_v1.00.json
@@ -4,81 +4,21 @@
"productId": "0x0253",
"keycodes": ["qmk_lighting"],
"customKeycodes": [
- {
- "name": "Left Option",
- "title": "Left Option in macOS",
- "shortName": "LOpt"
- },
- {
- "name": "Right Option",
- "title": "Right Option in macOS",
- "shortName": "ROpt"
- },
- {
- "name": "Left Cmd",
- "title": "Left Command in macOS",
- "shortName": "LCmd"
- },
- {
- "name": "Right Cmd",
- "title": "Right Command in macOS",
- "shortName": "RCmd"
- },
- {
- "name": "Mission Control",
- "title": "Mission Control in macOS",
- "shortName": "MCtrl"
- },
- {
- "name": "Launch Pad",
- "title": "Launch Pad in macOS",
- "shortName": "LPad"
- },
- {
- "name": "Task View",
- "title": "Task View in windows",
- "shortName": "Task"
- },
- {
- "name": "File Explorer",
- "title": "File Explorer in windows",
- "shortName": "File"
- },
- {
- "name": "Screen Shot",
- "title": "Screenshot in macOS",
- "shortName": "SShot"
- },
- {
- "name": "Cortana",
- "title": "Cortana in windows",
- "shortName": "Cortana"
- },
- {
- "name": "Siri",
- "title": "Siri in macOS",
- "shortName": "Siri"
- },
- {
- "name": "Bluetooth Host 1",
- "title": "Bluetooth Host 1",
- "shortName": "BTH1"
- },
- {
- "name": "Bluetooth Host 2",
- "title": "Bluetooth Host 2",
- "shortName": "BTH2"
- },
- {
- "name": "Bluetooth Host 3",
- "title": "Bluetooth Host 3",
- "shortName": "BTH3"
- },
- {
- "name": "Battery Level",
- "title": "Show battery level",
- "shortName": "Batt"
- }
+ {"name": "Left Option", "title": "Left Option", "shortName": "LOpt"},
+ {"name": "Right Option", "title": "Right Option", "shortName": "ROpt"},
+ {"name": "Left Cmd", "title": "Left Command", "shortName": "LCmd"},
+ {"name": "Right Cmd", "title": "Right Command", "shortName": "RCmd"},
+ {"name": "Misson Control", "title": "Misson Control, availabe in macOS", "shortName": "MCtrl"},
+ {"name": "Launch pad", "title": "Launch pad, availabe in macOS", "shortName": "LPad"},
+ {"name": "Task View", "title": "Task View in Windows", "shortName": "Task"},
+ {"name": "File Explorer", "title": "File Explorer in Windows", "shortName": "File"},
+ {"name": "Screen shot", "title": "Screenshot in macOS", "shortName": "SShot"},
+ {"name": "Cortana", "title": "Cortana in Windows", "shortName": "Cortana"},
+ {"name": "Siri", "title": "Siri in macOS", "shortName": "Siri"},
+ {"name": "Bluetooth Host 1", "title": "Bluetooth Host 1", "shortName": "BTH1"},
+ {"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
+ {"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
+ {"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
],
"matrix": {"rows": 6, "cols": 21},
"layouts": {
@@ -97,27 +37,31 @@
"0,3",
"0,4",
{
- "x": 0.5
+ "x": 0.5,
+ "c": "#aaaaaa"
},
"0,5",
"0,6",
"0,7",
"0,8",
{
- "x": 0.5
+ "x": 0.5,
+ "c": "#cccccc"
},
"0,9",
"0,10",
"0,11",
"0,12",
{
- "x": 0.25
+ "x": 0.25,
+ "c": "#aaaaaa"
},
"0,14",
"0,15",
"0,16",
{
- "x": 0.25
+ "x": 0.25,
+ "c": "#cccccc"
},
"0,17",
"0,18",
@@ -126,9 +70,13 @@
],
[
{
- "y": 0.25
+ "y": 0.25,
+ "c": "#aaaaaa"
},
"1,0",
+ {
+ "c": "#cccccc"
+ },
"1,1",
"1,2",
"1,3",
@@ -183,12 +131,12 @@
"2,11",
"2,12",
{
+ "c": "#aaaaaa",
"w": 1.5
},
"2,13",
{
- "x": 0.25,
- "c": "#aaaaaa"
+ "x": 0.25
},
"2,14",
"2,15",
@@ -308,12 +256,10 @@
},
"5,11",
{
- "c": "#cccccc",
"w": 1.25
},
"5,12",
{
- "c": "#aaaaaa",
"w": 1.25
},
"5,13",
diff --git a/keyboards/keychron/k6_pro/config.h b/keyboards/keychron/k6_pro/config.h
index 025d1fe783..81e02a5fef 100644
--- a/keyboards/keychron/k6_pro/config.h
+++ b/keyboards/keychron/k6_pro/config.h
@@ -44,6 +44,13 @@
#define LED_CAPS_LOCK_PIN A7
#define LED_PIN_ON_STATE 1
+/* Increase I2C speed to 1000 KHz */
+#define I2C1_TIMINGR_PRESC 0U
+#define I2C1_TIMINGR_SCLDEL 3U
+#define I2C1_TIMINGR_SDADEL 0U
+#define I2C1_TIMINGR_SCLH 15U
+#define I2C1_TIMINGR_SCLL 51U
+
#ifdef KC_BLUETOOTH_ENABLE
/* Hardware configuration */
# define USB_BT_MODE_SELECT_PIN A10
@@ -60,7 +67,6 @@
# define HOST_DEVICES_COUNT 3
-
# if defined(RGB_MATRIX_ENABLE) || defined(LED_MATRIX_ENABLE)
# define LED_DRIVER_SHUTDOWN_PIN C14
diff --git a/keyboards/keychron/k6_pro/jis/rgb/config.h b/keyboards/keychron/k6_pro/jis/rgb/config.h
new file mode 100755
index 0000000000..cae428a714
--- /dev/null
+++ b/keyboards/keychron/k6_pro/jis/rgb/config.h
@@ -0,0 +1,97 @@
+/* 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 .
+ */
+
+#ifdef RGB_MATRIX_ENABLE
+/* RGB Matrix Driver Configuration */
+# define DRIVER_COUNT 2
+
+# define DRIVER_ADDR_1 0b1110111
+# define DRIVER_ADDR_2 0b1110100
+# define DRIVER_1_LED_COUNT 30
+# define DRIVER_2_LED_COUNT 41
+# define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_COUNT + DRIVER_2_LED_COUNT)
+
+/* 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 32
+
+# define DIM_CAPS_LOCK
+# define CAPS_LOCK_INDEX 30
+# define LOW_BAT_IND_INDEX 63
+
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+
+# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+// #define ENABLE_RGB_MATRIX_ALPHAS_MODS
+// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_BREATHING
+// #define ENABLE_RGB_MATRIX_BAND_SAT
+// #define ENABLE_RGB_MATRIX_BAND_VAL
+// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# define ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define ENABLE_RGB_MATRIX_DUAL_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+// #define ENABLE_RGB_MATRIX_RAINDROPS
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+// #define ENABLE_RGB_MATRIX_HUE_BREATHING
+// #define ENABLE_RGB_MATRIX_HUE_PENDULUM
+// #define ENABLE_RGB_MATRIX_HUE_WAVE
+# define ENABLE_RGB_MATRIX_PIXEL_RAIN
+// #define ENABLE_RGB_MATRIX_PIXEL_FLOW
+// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_RGB_MATRIX_SPLASH
+// #define ENABLE_RGB_MATRIX_MULTISPLASH
+# define ENABLE_RGB_MATRIX_SOLID_SPLASH
+// #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+/* Set LED driver current */
+# define CKLED2001_CURRENT_TUNE \
+ { 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38 }
+
+#endif
diff --git a/keyboards/keychron/k6_pro/jis/rgb/info.json b/keyboards/keychron/k6_pro/jis/rgb/info.json
new file mode 100755
index 0000000000..fde6618319
--- /dev/null
+++ b/keyboards/keychron/k6_pro/jis/rgb/info.json
@@ -0,0 +1,94 @@
+{
+ "keyboard_name": "Keychron K6 Pro",
+ "manufacturer": "Keychron",
+ "url": "https://github.com/Keychron",
+ "maintainer": "lokher",
+ "usb": {
+ "vid": "0x3434",
+ "pid": "0x0262",
+ "device_version": "1.0.0"
+ },
+ "processor": "STM32L432",
+ "bootloader": "stm32-dfu",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix":[0,0], "x":0, "y":0},
+ {"matrix":[0,1], "x":1, "y":0},
+ {"matrix":[0,2], "x":2, "y":0},
+ {"matrix":[0,3], "x":3, "y":0},
+ {"matrix":[0,4], "x":4, "y":0},
+ {"matrix":[0,5], "x":5, "y":0},
+ {"matrix":[0,6], "x":6, "y":0},
+ {"matrix":[0,7], "x":7, "y":0},
+ {"matrix":[0,8], "x":8, "y":0},
+ {"matrix":[0,9], "x":9, "y":0},
+ {"matrix":[0,10], "x":10, "y":0},
+ {"matrix":[0,11], "x":11, "y":0},
+ {"matrix":[0,12], "x":12, "y":0},
+ {"matrix":[2,12], "x":13, "y":0},
+ {"matrix":[0,13], "x":14, "y":0},
+ {"matrix":[0,14], "x":15, "y":0},
+
+ {"matrix":[1,0], "x":0, "y":1, "w":1.5},
+ {"matrix":[1,1], "x":1.5, "y":1},
+ {"matrix":[1,2], "x":2.5, "y":1},
+ {"matrix":[1,3], "x":3.5, "y":1},
+ {"matrix":[1,4], "x":4.5, "y":1},
+ {"matrix":[1,5], "x":5.5, "y":1},
+ {"matrix":[1,6], "x":6.5, "y":1},
+ {"matrix":[1,7], "x":7.5, "y":1},
+ {"matrix":[1,8], "x":8.5, "y":1},
+ {"matrix":[1,9], "x":9.5, "y":1},
+ {"matrix":[1,10], "x":10.5, "y":1},
+ {"matrix":[1,11], "x":11.5, "y":1},
+ {"matrix":[1,12], "x":12.5, "y":1},
+ {"matrix":[1,14], "x":15, "y":1},
+
+ {"matrix":[2,0], "x":0, "y":2, "w":1.75},
+ {"matrix":[2,1], "x":1.75, "y":2},
+ {"matrix":[2,2], "x":2.75, "y":2},
+ {"matrix":[2,3], "x":3.75, "y":2},
+ {"matrix":[2,4], "x":4.75, "y":2},
+ {"matrix":[2,5], "x":5.75, "y":2},
+ {"matrix":[2,6], "x":6.75, "y":2},
+ {"matrix":[2,7], "x":7.75, "y":2},
+ {"matrix":[2,8], "x":8.75, "y":2},
+ {"matrix":[2,9], "x":9.75, "y":2},
+ {"matrix":[2,10], "x":10.75, "y":2},
+ {"matrix":[2,11], "x":11.75, "y":2},
+ {"matrix":[2,13], "x":12.75, "y":2},
+ {"matrix":[1,13], "x":13.75, "y":1, "w":1.25, "h":2},
+ {"matrix":[2,14], "x":15, "y":2},
+
+ {"matrix":[3,0], "x":0, "y":3, "w":2.25},
+ {"matrix":[3,2], "x":2.25, "y":3},
+ {"matrix":[3,3], "x":3.25, "y":3},
+ {"matrix":[3,4], "x":4.25, "y":3},
+ {"matrix":[3,5], "x":5.25, "y":3},
+ {"matrix":[3,6], "x":6.25, "y":3},
+ {"matrix":[3,7], "x":7.25, "y":3},
+ {"matrix":[3,8], "x":8.25, "y":3},
+ {"matrix":[3,9], "x":9.25, "y":3},
+ {"matrix":[3,10], "x":10.25, "y":3},
+ {"matrix":[3,11], "x":11.25, "y":3},
+ {"matrix":[3,12], "x":12.25, "y":3},
+ {"matrix":[3,13], "x":13.25, "y":3, "w":1.75},
+ {"matrix":[3,14], "x":15, "y":3},
+
+ {"matrix":[4,0], "x":0, "y":4, "w":1.25},
+ {"matrix":[4,1], "x":1.25, "y":4},
+ {"matrix":[4,2], "x":2.25, "y":4, "w":1.25},
+ {"matrix":[4,3], "x":3.5, "y":4},
+ {"matrix":[4,6], "x":4.5, "y":4, "w":4.5},
+ {"matrix":[4,8], "x":9, "y":4},
+ {"matrix":[4,9], "x":10, "y":4},
+ {"matrix":[4,10], "x":11, "y":4},
+ {"matrix":[4,11], "x":12, "y":4},
+ {"matrix":[4,12], "x":13, "y":4},
+ {"matrix":[4,13], "x":14, "y":4},
+ {"matrix":[4,14], "x":15, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keychron/k6_pro/jis/rgb/keymaps/default/keymap.c b/keyboards/keychron/k6_pro/jis/rgb/keymaps/default/keymap.c
new file mode 100755
index 0000000000..573314c824
--- /dev/null
+++ b/keyboards/keychron/k6_pro/jis/rgb/keymaps/default/keymap.c
@@ -0,0 +1,63 @@
+/* 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 QMK_KEYBOARD_H
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ WIN_BASE,
+ MAC_FN1,
+ WIN_FN1,
+ FN2
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT(
+ KC_ESC, 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_INT3, KC_BSPC, RGB_MOD,
+ 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_HOME,
+ 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_NUHS, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_PGDN,
+ KC_LCTL, KC_LOPTN, KC_LCMMD, KC_LNG2, KC_SPC, KC_LNG1, MO(MAC_FN1),MO(FN2), KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [WIN_BASE] = LAYOUT(
+ KC_ESC, 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_INT3, KC_BSPC, RGB_MOD,
+ 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_HOME,
+ 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_NUHS, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, MO(WIN_FN1),MO(FN2), KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [MAC_FN1] = LAYOUT(
+ KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [WIN_FN1] = LAYOUT(
+ KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [FN2] = LAYOUT(
+ KC_TILD, 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_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BAT_LVL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
diff --git a/keyboards/keychron/k6_pro/jis/rgb/keymaps/via/keymap.c b/keyboards/keychron/k6_pro/jis/rgb/keymaps/via/keymap.c
new file mode 100755
index 0000000000..34101f9c8a
--- /dev/null
+++ b/keyboards/keychron/k6_pro/jis/rgb/keymaps/via/keymap.c
@@ -0,0 +1,64 @@
+/* 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 QMK_KEYBOARD_H
+
+// clang-format off
+enum layers{
+ MAC_BASE,
+ WIN_BASE,
+ MAC_FN1,
+ WIN_FN1,
+ FN2
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [MAC_BASE] = LAYOUT(
+ KC_ESC, 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_INT3, KC_BSPC, RGB_MOD,
+ 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_HOME,
+ 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_NUHS, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_PGDN,
+ KC_LCTL, KC_LOPTN, KC_LCMMD, KC_LNG2, KC_SPC, KC_LNG1, MO(MAC_FN1),MO(FN2), KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [WIN_BASE] = LAYOUT(
+ KC_ESC, 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_INT3, KC_BSPC, RGB_MOD,
+ 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_HOME,
+ 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_NUHS, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, MO(WIN_FN1),MO(FN2), KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
+
+ [MAC_FN1] = LAYOUT(
+ KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [WIN_FN1] = LAYOUT(
+ KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [FN2] = LAYOUT(
+ KC_TILD, 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_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BAT_LVL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
diff --git a/keyboards/keychron/k6_pro/jis/rgb/keymaps/via/rules.mk b/keyboards/keychron/k6_pro/jis/rgb/keymaps/via/rules.mk
new file mode 100755
index 0000000000..4eae6e776c
--- /dev/null
+++ b/keyboards/keychron/k6_pro/jis/rgb/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+OPT_DEFS += -DDYNAMIC_KEYMAP_LAYER_COUNT=5
diff --git a/keyboards/keychron/k6_pro/jis/rgb/rgb.c b/keyboards/keychron/k6_pro/jis/rgb/rgb.c
new file mode 100755
index 0000000000..edf78e538c
--- /dev/null
+++ b/keyboards/keychron/k6_pro/jis/rgb/rgb.c
@@ -0,0 +1,133 @@
+/* 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"
+
+// clang-format off
+#ifdef RGB_MATRIX_ENABLE
+const ckled2001_led g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to CKLED2001 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, C_16, A_16, B_16},
+ {0, C_15, A_15, B_15},
+ {0, C_14, A_14, B_14},
+ {0, C_13, A_13, B_13},
+ {0, C_12, A_12, B_12},
+ {0, C_11, A_11, B_11},
+ {0, C_10, A_10, B_10},
+ {0, C_9, A_9, B_9},
+ {0, C_8, A_8, B_8},
+ {0, C_7, A_7, B_7},
+ {0, C_6, A_6, B_6},
+ {0, C_5, A_5, B_5},
+ {0, C_4, A_4, B_4},
+ {1, C_4, A_4, B_4},
+ {0, C_3, A_3, B_3},
+ {0, C_2, A_2, B_2},
+
+ {0, F_16, D_16, E_16},
+ {0, F_15, D_15, E_15},
+ {0, F_14, D_14, E_14},
+ {0, F_13, D_13, E_13},
+ {0, F_12, D_12, E_12},
+ {0, F_11, D_11, E_11},
+ {0, F_10, D_10, E_10},
+ {0, F_9, D_9, E_9},
+ {0, F_8, D_8, E_8},
+ {0, F_7, D_7, E_7},
+ {0, F_6, D_6, E_6},
+ {0, F_5, D_5, E_5},
+ {0, F_4, D_4, E_4},
+ {0, F_2, D_2, E_2},
+
+ {1, C_16, A_16, B_16},
+ {1, C_15, A_15, B_15},
+ {1, C_14, A_14, B_14},
+ {1, C_13, A_13, B_13},
+ {1, C_12, A_12, B_12},
+ {1, C_11, A_11, B_11},
+ {1, C_10, A_10, B_10},
+ {1, C_9, A_9, B_9},
+ {1, C_8, A_8, B_8},
+ {1, C_7, A_7, B_7},
+ {1, C_6, A_6, B_6},
+ {1, C_5, A_5, B_5},
+ {1, C_3, A_3, B_3},
+ {0, F_3, D_3, E_3},
+ {1, C_2, A_2, B_2},
+
+ {1, I_16, G_16, H_16},
+ {1, I_14, G_14, H_14},
+ {1, I_13, G_13, H_13},
+ {1, I_12, G_12, H_12},
+ {1, I_11, G_11, H_11},
+ {1, I_10, G_10, H_10},
+ {1, I_9, G_9, H_9},
+ {1, I_8, G_8, H_8},
+ {1, I_7, G_7, H_7},
+ {1, I_6, G_6, H_6},
+ {1, I_5, G_5, H_5},
+ {1, I_4, G_4, H_4},
+ {1, I_3, G_3, H_3},
+ {1, I_2, G_2, H_2},
+
+ {1, F_16, D_16, E_16},
+ {1, F_15, D_15, E_15},
+ {1, F_14, D_14, E_14},
+ {1, F_13, D_13, E_13},
+ {1, F_10, D_10, E_10},
+ {1, F_8, D_8, E_8},
+ {1, F_7, D_7, E_7},
+ {1, F_6, D_6, E_6},
+ {1, F_5, D_5, E_5},
+ {1, F_4, D_4, E_4},
+ {1, F_3, D_3, E_3},
+ {1, F_2, D_2, E_2},
+};
+
+#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, 14, 15 },
+ { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 43, 29 },
+ { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 13, 42, 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 }
+ },
+ {
+ // LED Index to Physical Position
+ {0, 0}, {14, 0}, {29, 0}, {44, 0}, {59, 0}, {74, 0}, {89, 0}, {104, 0}, {119, 0}, {134, 0}, {149, 0}, {164, 0}, {179, 0}, {194,0}, {209, 0}, {224, 0},
+ {3,16}, {22,16}, {37,16}, {52,16}, {67,16}, {82,16}, {97, 16}, {112, 16}, {126, 16}, {141, 16}, {156, 16}, {171, 16}, {186, 16}, {224, 16},
+ {5,32}, {26,32}, {41,32}, {55,32}, {70,32}, {85,32}, {100,32}, {115, 32}, {130, 32}, {145, 32}, {160, 32}, {175, 32}, {204, 32}, {207, 24}, {224, 32},
+ {9,48}, {33,48}, {48,48}, {63,48}, {78,48}, {93,48}, {108,48}, {123, 48}, {138, 48}, {153, 48}, {167, 48}, {182, 48}, {203, 48}, {224, 48},
+ {1,64}, {18,64}, {35,64}, {52,64}, {93,64}, {134, 64}, {149, 64}, {164, 64}, {179, 64}, {194, 64}, {209, 64}, {224, 64}
+ },
+ {
+ // RGB LED Index to Flag
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 1, 8, 8, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1,
+ 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
+ }
+};
+#endif
diff --git a/keyboards/keychron/k6_pro/jis/rgb/rules.mk b/keyboards/keychron/k6_pro/jis/rgb/rules.mk
new file mode 100755
index 0000000000..f5f4192470
--- /dev/null
+++ b/keyboards/keychron/k6_pro/jis/rgb/rules.mk
@@ -0,0 +1,2 @@
+RGB_MATRIX_ENABLE = yes
+RGB_MATRIX_DRIVER = CKLED2001
\ No newline at end of file
diff --git a/keyboards/keychron/k6_pro/k6_pro.c b/keyboards/keychron/k6_pro/k6_pro.c
old mode 100644
new mode 100755
index 6af3ecdf7b..f29cd82ad5
--- a/keyboards/keychron/k6_pro/k6_pro.c
+++ b/keyboards/keychron/k6_pro/k6_pro.c
@@ -186,7 +186,8 @@ void matrix_scan_kb(void) {
#ifdef KC_BLUETOOTH_ENABLE
static void ckbt51_param_init(void) {
/* Set bluetooth device name */
- ckbt51_set_local_name(STR(PRODUCT));
+ // ckbt51_set_local_name(STR(PRODUCT));
+ ckbt51_set_local_name(PRODUCT);
/* Set bluetooth parameters */
module_param_t param = {.event_mode = 0x02,
.connected_idle_timeout = 7200,
@@ -214,6 +215,21 @@ void bluetooth_enter_disconnected_kb(uint8_t host_idx) {
}
}
+void ckbt51_default_ack_handler(uint8_t *data, uint8_t len) {
+ if (data[1] == 0x45) {
+ module_param_t param = {.event_mode = 0x02,
+ .connected_idle_timeout = 7200,
+ .pairing_timeout = 180,
+ .pairing_mode = 0,
+ .reconnect_timeout = 5,
+ .report_rate = 90,
+ .vendor_id_source = 1,
+ .verndor_id = 0, // Must be 0x3434
+ .product_id = PRODUCT_ID};
+ ckbt51_set_param(¶m);
+ }
+}
+
void bluetooth_pre_task(void) {
static uint8_t mode = 1;
diff --git a/keyboards/keychron/k6_pro/k6_pro.h b/keyboards/keychron/k6_pro/k6_pro.h
old mode 100644
new mode 100755
index b967a45ead..d542b11bd6
--- a/keyboards/keychron/k6_pro/k6_pro.h
+++ b/keyboards/keychron/k6_pro/k6_pro.h
@@ -50,32 +50,3 @@ enum {
BAT_LVL,
NEW_SAFE_RANGE,
};
-
-#define LAYOUT_ansi_68( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
- K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
- K40, K41, K42, K46, K49, K4A, K4B, K4C, K4D, K4E \
-) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, ___, K2D, K2E }, \
- { K30, ___, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
- { K40, K41, K42, ___, ___, ___, K46, ___, ___, K49, K4A, K4B, K4C, K4D, K4E }, \
-}
-
-#define LAYOUT_iso_69( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
- K40, K41, K42, K46, K49, K4A, K4B, K4C, K4D, K4E \
-) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K2D, K1E }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, ___, K1D, K2E }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
- { K40, K41, K42, ___, ___, ___, K46, ___, ___, K49, K4A, K4B, K4C, K4D, K4E }, \
-}
-
diff --git a/keyboards/keychron/k6_pro/readme.md b/keyboards/keychron/k6_pro/readme.md
index 899373d506..b197df2d32 100644
--- a/keyboards/keychron/k6_pro/readme.md
+++ b/keyboards/keychron/k6_pro/readme.md
@@ -1,6 +1,6 @@
# Keychron K6 Pro
-
+
A customizable 68 keys TKL keyboard.
diff --git a/keyboards/keychron/k6_pro/via_json/k6_pro_jis_rgb.json b/keyboards/keychron/k6_pro/via_json/k6_pro_jis_rgb.json
index 93b943d022..a9ddb73821 100644
--- a/keyboards/keychron/k6_pro/via_json/k6_pro_jis_rgb.json
+++ b/keyboards/keychron/k6_pro/via_json/k6_pro_jis_rgb.json
@@ -82,167 +82,168 @@
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
],
"matrix": {"rows": 5, "cols": 15},
- "layouts":{
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- "2,12",
- "0,13",
- {
- "c": "#cccccc"
- },
- "0,14"
- ],
- [
- {
- "w":1.50,
- "c": "#aaaaaa"
- },
- "1,0",
- {
- "c": "#cccccc"
- },
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "x": 0.25,
- "c": "#777777",
- "w": 1.25,
- "h": 2,
- "w2": 1.5,
- "h2": 1,
- "x2": -0.25
- },
- "1,13",
- {
- "c": "#cccccc"
- },
- "1,14"
- ],
- [
- {
- "w":1.75,
- "c": "#aaaaaa"
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,13",
- {
- "x": 1.25,
- "c": "#cccccc"
- },
- "2,14"
- ],
- [
- {
- "w":2.25,
- "c": "#aaaaaa"
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- "3,12",
- {
- "w":1.75,
- "c": "#aaaaaa"
- },
- "3,13",
- {
- "c": "#cccccc"
- },
- "3,14"
- ],
- [
- {
- "w":1.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "w":1
- },
- "4,1",
- {
- "w":1.25
- },
- "4,2",
- {
- "w":1,
- "c": "#cccccc"
- },
- "4,3",
- {
- "w":4.5
- },
- "4,6",
- {
- "c": "#aaaaaa"
- },
- "4,8",
- "4,9",
- {
- "c": "#cccccc"
- },
- "4,10",
- "4,11",
- {
- "c": "#777777"
- },
- "4,12",
- "4,13",
- "4,14"
- ]]
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ "2,12",
+ "0,13",
+ {
+ "c": "#cccccc"
+ },
+ "0,14"
+ ],
+ [
+ {
+ "w":1.50,
+ "c": "#aaaaaa"
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "x": 0.25,
+ "c": "#777777",
+ "w": 1.25,
+ "h": 2,
+ "w2": 1.5,
+ "h2": 1,
+ "x2": -0.25
+ },
+ "1,13",
+ {
+ "c": "#cccccc"
+ },
+ "1,14"
+ ],
+ [
+ {
+ "w":1.75,
+ "c": "#aaaaaa"
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,13",
+ {
+ "x": 1.25,
+ "c": "#cccccc"
+ },
+ "2,14"
+ ],
+ [
+ {
+ "w":2.25,
+ "c": "#aaaaaa"
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ "3,12",
+ {
+ "w":1.75,
+ "c": "#aaaaaa"
+ },
+ "3,13",
+ {
+ "c": "#cccccc"
+ },
+ "3,14"
+ ],
+ [
+ {
+ "w":1.25,
+ "c": "#aaaaaa"
+ },
+ "4,0",
+ {
+ "w":1
+ },
+ "4,1",
+ {
+ "w":1.25
+ },
+ "4,2",
+ {
+ "w":1,
+ "c": "#cccccc"
+ },
+ "4,3",
+ {
+ "w":4.5
+ },
+ "4,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,8",
+ "4,9",
+ {
+ "c": "#cccccc"
+ },
+ "4,10",
+ "4,11",
+ {
+ "c": "#777777"
+ },
+ "4,12",
+ "4,13",
+ "4,14"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k7_pro/config.h b/keyboards/keychron/k7_pro/config.h
index 4fcdd90a9f..1703f746d1 100644
--- a/keyboards/keychron/k7_pro/config.h
+++ b/keyboards/keychron/k7_pro/config.h
@@ -47,6 +47,13 @@
#define LED_CAPS_LOCK_PIN A0
#define LED_PIN_ON_STATE 1
+/* Increase I2C speed to 1000 KHz */
+#define I2C1_TIMINGR_PRESC 0U
+#define I2C1_TIMINGR_SCLDEL 3U
+#define I2C1_TIMINGR_SDADEL 0U
+#define I2C1_TIMINGR_SCLH 15U
+#define I2C1_TIMINGR_SCLL 51U
+
#ifdef KC_BLUETOOTH_ENABLE
/* Hardware configuration */
# define USB_BT_MODE_SELECT_PIN A10
diff --git a/keyboards/keychron/k7_pro/k7_pro.c b/keyboards/keychron/k7_pro/k7_pro.c
old mode 100644
new mode 100755
index 31259eff2c..19f4c7cc40
--- a/keyboards/keychron/k7_pro/k7_pro.c
+++ b/keyboards/keychron/k7_pro/k7_pro.c
@@ -186,7 +186,8 @@ void matrix_scan_kb(void) {
#ifdef KC_BLUETOOTH_ENABLE
static void ckbt51_param_init(void) {
/* Set bluetooth device name */
- ckbt51_set_local_name(STR(PRODUCT));
+ // ckbt51_set_local_name(STR(PRODUCT));
+ ckbt51_set_local_name(PRODUCT);
/* Set bluetooth parameters */
module_param_t param = {.event_mode = 0x02,
.connected_idle_timeout = 7200,
@@ -214,6 +215,21 @@ void bluetooth_enter_disconnected_kb(uint8_t host_idx) {
}
}
+void ckbt51_default_ack_handler(uint8_t *data, uint8_t len) {
+ if (data[1] == 0x45) {
+ module_param_t param = {.event_mode = 0x02,
+ .connected_idle_timeout = 7200,
+ .pairing_timeout = 180,
+ .pairing_mode = 0,
+ .reconnect_timeout = 5,
+ .report_rate = 90,
+ .vendor_id_source = 1,
+ .verndor_id = 0, // Must be 0x3434
+ .product_id = PRODUCT_ID};
+ ckbt51_set_param(¶m);
+ }
+}
+
void bluetooth_pre_task(void) {
static uint8_t mode = 1;
diff --git a/keyboards/keychron/k7_pro/k7_pro.h b/keyboards/keychron/k7_pro/k7_pro.h
old mode 100644
new mode 100755
index 7fbfbf92be..d542b11bd6
--- a/keyboards/keychron/k7_pro/k7_pro.h
+++ b/keyboards/keychron/k7_pro/k7_pro.h
@@ -50,32 +50,3 @@ enum {
BAT_LVL,
NEW_SAFE_RANGE,
};
-
-#define LAYOUT_ansi_68( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0F, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2F, \
- K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, K3F, \
- K40, K41, K42, K46, K4A, K4B, K4C, K4D, K4E, K4F \
-) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, ___, K0F }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, ___, K1F }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, ___, K2D, ___, K2F }, \
- { K30, ___, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, ___, K3D, K3E, K3F }, \
- { K40, K41, K42, ___, ___, ___, K46, ___, ___, ___, K4A, K4B, K4C, K4D, K4E, K4F }, \
-}
-
-#define LAYOUT_iso_69( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0F, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2F, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, K3F, \
- K40, K41, K42, K46, K4A, K4B, K4C, K4D, K4E, K4F \
-) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, ___, K0F }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, ___, K1F }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, ___, K2D, ___, K2F }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, ___, K3D, K3E, K3F }, \
- { K40, K41, K42, ___, ___, ___, K46, ___, ___, ___, K4A, K4B, K4C, K4D, K4E, K4F }, \
-}
-
diff --git a/keyboards/keychron/k7_pro/readme.md b/keyboards/keychron/k7_pro/readme.md
index 9dd303a47a..f8881345ba 100644
--- a/keyboards/keychron/k7_pro/readme.md
+++ b/keyboards/keychron/k7_pro/readme.md
@@ -1,6 +1,6 @@
# Keychron K7 Pro
-
+
A customizable 68 keys TKL low profile switch keyboard.
diff --git a/keyboards/keychron/k8_pro/config.h b/keyboards/keychron/k8_pro/config.h
index 84e86b388f..79c56e1a2c 100644
--- a/keyboards/keychron/k8_pro/config.h
+++ b/keyboards/keychron/k8_pro/config.h
@@ -44,6 +44,13 @@
#define LED_CAPS_LOCK_PIN A7
#define LED_PIN_ON_STATE 1
+/* Increase I2C speed to 1000 KHz */
+#define I2C1_TIMINGR_PRESC 0U
+#define I2C1_TIMINGR_SCLDEL 3U
+#define I2C1_TIMINGR_SDADEL 0U
+#define I2C1_TIMINGR_SCLH 15U
+#define I2C1_TIMINGR_SCLL 51U
+
#ifdef KC_BLUETOOTH_ENABLE
/* Hardware configuration */
# define USB_BT_MODE_SELECT_PIN A10
diff --git a/keyboards/keychron/k8_pro/k8_pro.c b/keyboards/keychron/k8_pro/k8_pro.c
old mode 100644
new mode 100755
index f8b4f6d99e..4b7a4f42fb
--- a/keyboards/keychron/k8_pro/k8_pro.c
+++ b/keyboards/keychron/k8_pro/k8_pro.c
@@ -48,7 +48,7 @@ key_combination_t key_comb_list[4] = {
};
#ifdef KC_BLUETOOTH_ENABLE
-bool firstDisconnect = true;
+bool firstDisconnect = true;
bool bt_factory_reset = false;
static virtual_timer_t pairing_key_timer;
extern uint8_t g_pwm_buffer[DRIVER_COUNT][192];
@@ -154,14 +154,14 @@ void keyboard_post_init_kb(void) {
ckbt51_init(false);
bluetooth_init();
-# endif
+#endif
power_on_indicator_timer_buffer = sync_timer_read32() | 1;
writePin(BAT_LOW_LED_PIN, BAT_LOW_LED_PIN_ON_STATE);
writePin(LED_CAPS_LOCK_PIN, LED_PIN_ON_STATE);
-# ifdef KC_BLUETOOTH_ENABLE
+#ifdef KC_BLUETOOTH_ENABLE
writePin(H3, HOST_LED_PIN_ON_STATE);
-# endif
+#endif
keyboard_post_init_user();
}
@@ -189,14 +189,15 @@ void matrix_scan_kb(void) {
#ifdef FACTORY_RESET_TASK
FACTORY_RESET_TASK();
-# endif
+#endif
matrix_scan_user();
}
#ifdef KC_BLUETOOTH_ENABLE
static void ckbt51_param_init(void) {
/* Set bluetooth device name */
- ckbt51_set_local_name(STR(PRODUCT));
+ // ckbt51_set_local_name(STR(PRODUCT));
+ ckbt51_set_local_name(PRODUCT);
/* Set bluetooth parameters */
module_param_t param = {.event_mode = 0x02,
.connected_idle_timeout = 7200,
@@ -224,6 +225,21 @@ void bluetooth_enter_disconnected_kb(uint8_t host_idx) {
}
}
+void ckbt51_default_ack_handler(uint8_t *data, uint8_t len) {
+ if (data[1] == 0x45) {
+ module_param_t param = {.event_mode = 0x02,
+ .connected_idle_timeout = 7200,
+ .pairing_timeout = 180,
+ .pairing_mode = 0,
+ .reconnect_timeout = 5,
+ .report_rate = 90,
+ .vendor_id_source = 1,
+ .verndor_id = 0, // Must be 0x3434
+ .product_id = PRODUCT_ID};
+ ckbt51_set_param(¶m);
+ }
+}
+
void bluetooth_pre_task(void) {
static uint8_t mode = 1;
diff --git a/keyboards/keychron/k8_pro/k8_pro.h b/keyboards/keychron/k8_pro/k8_pro.h
old mode 100644
new mode 100755
index 07be83643e..a71b06ec83
--- a/keyboards/keychron/k8_pro/k8_pro.h
+++ b/keyboards/keychron/k8_pro/k8_pro.h
@@ -50,51 +50,3 @@ enum {
BAT_LVL,
NEW_SAFE_RANGE,
};
-
-#define LAYOUT_ansi_87( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0F, K0G, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
- K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \
- K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K5G \
-) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, ___, K0E, K0F, K0G }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, ___, K3D, ___, ___, ___ }, \
- { K40, ___, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, ___, K4D, ___, K4F, ___ }, \
- { K50, K51, K52, ___, ___, ___, K56, ___, ___, ___, K5A, K5B, K5C, K5D, K5E, K5F, K5G } \
-}
-
-#define LAYOUT_iso_88( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0F, K0G, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
- K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \
- K50, K51, K52, K56, K5A, K5B, K5C, K5D, K5E, K5F, K5G \
-) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, ___, K0E, K0F, K0G }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K3D, K2E, K2F, K2G }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, ___, K2D, ___, ___, ___ }, \
- { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, ___, K4D, ___, K4F, ___ }, \
- { K50, K51, K52, ___, ___, ___, K56, ___, ___, ___, K5A, K5B, K5C, K5D, K5E, K5F, K5G } \
-}
-
-#define LAYOUT_jis_91( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0F, K0G, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K0D, K1E, K1F, K1G, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
- K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4F, \
- K50, K51, K52, K53, K56, K59, K5A, K5B, K5C, K5D, K5E, K5F, K5G \
-) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K3D, K2E, K2F, K2G }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, ___, K2D, ___, ___, ___ }, \
- { K40, ___, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, ___, K4F, ___ }, \
- { K50, K51, K52, K53, ___, ___, K56, ___, ___, K59, K5A, K5B, K5C, K5D, K5E, K5F, K5G } \
-}
diff --git a/keyboards/keychron/k8_pro/readme.md b/keyboards/keychron/k8_pro/readme.md
index e44c406920..f9dbc5920c 100644
--- a/keyboards/keychron/k8_pro/readme.md
+++ b/keyboards/keychron/k8_pro/readme.md
@@ -1,6 +1,6 @@
# Keychron K8 Pro
-
+
A customizable 87 keys TKL keyboard.
diff --git a/keyboards/keychron/k9_pro/ansi/rgb/config.h b/keyboards/keychron/k9_pro/ansi/rgb/config.h
index a0c543a105..9fa8482dfe 100755
--- a/keyboards/keychron/k9_pro/ansi/rgb/config.h
+++ b/keyboards/keychron/k9_pro/ansi/rgb/config.h
@@ -23,13 +23,6 @@
# define DRIVER_1_LED_COUNT 61
# define RGB_MATRIX_LED_COUNT DRIVER_1_LED_COUNT
-/* Increase I2C speed to 1000 KHz */
-# define I2C1_TIMINGR_PRESC 0U
-# define I2C1_TIMINGR_SCLDEL 3U
-# define I2C1_TIMINGR_SDADEL 0U
-# define I2C1_TIMINGR_SCLH 15U
-# define I2C1_TIMINGR_SCLL 30U
-
/* Set to infinite, which is use in USB mode by default */
# define RGB_MATRIX_TIMEOUT RGB_MATRIX_TIMEOUT_INFINITE
diff --git a/keyboards/keychron/k9_pro/ansi/rgb/rgb.c b/keyboards/keychron/k9_pro/ansi/rgb/rgb.c
index c6c1025f6f..5c21608995 100755
--- a/keyboards/keychron/k9_pro/ansi/rgb/rgb.c
+++ b/keyboards/keychron/k9_pro/ansi/rgb/rgb.c
@@ -19,77 +19,77 @@
// clang-format off
#ifdef RGB_MATRIX_ENABLE
const ckled2001_led g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
-/* Refer to IS31 manual for these locations
+/* Refer to CKLED2001 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
- {0, L_1, J_1, K_1},
- {0, L_2, J_2, K_2},
- {0, L_3, J_3, K_3},
- {0, L_4, J_4, K_4},
- {0, L_5, J_5, K_5},
- {0, L_6, J_6, K_6},
- {0, L_7, J_7, K_7},
- {0, L_8, J_8, K_8},
- {0, L_9, J_9, K_9},
- {0, L_10, J_10, K_10},
- {0, L_11, J_11, K_11},
- {0, L_12, J_12, K_12},
- {0, L_13, J_13, K_13},
- {0, L_14, J_14, K_14},
+ {0, L_1, J_1, K_1},
+ {0, L_2, J_2, K_2},
+ {0, L_3, J_3, K_3},
+ {0, L_4, J_4, K_4},
+ {0, L_5, J_5, K_5},
+ {0, L_6, J_6, K_6},
+ {0, L_7, J_7, K_7},
+ {0, L_8, J_8, K_8},
+ {0, L_9, J_9, K_9},
+ {0, L_10, J_10, K_10},
+ {0, L_11, J_11, K_11},
+ {0, L_12, J_12, K_12},
+ {0, L_13, J_13, K_13},
+ {0, L_14, J_14, K_14},
- {0, I_1, G_1, H_1},
- {0, I_2, G_2, H_2},
- {0, I_3, G_3, H_3},
- {0, I_4, G_4, H_4},
- {0, I_5, G_5, H_5},
- {0, I_6, G_6, H_6},
- {0, I_7, G_7, H_7},
- {0, I_8, G_8, H_8},
- {0, I_9, G_9, H_9},
- {0, I_10, G_10, H_10},
- {0, I_11, G_11, H_11},
- {0, I_12, G_12, H_12},
- {0, I_13, G_13, H_13},
- {0, I_14, G_14, H_14},
+ {0, I_1, G_1, H_1},
+ {0, I_2, G_2, H_2},
+ {0, I_3, G_3, H_3},
+ {0, I_4, G_4, H_4},
+ {0, I_5, G_5, H_5},
+ {0, I_6, G_6, H_6},
+ {0, I_7, G_7, H_7},
+ {0, I_8, G_8, H_8},
+ {0, I_9, G_9, H_9},
+ {0, I_10, G_10, H_10},
+ {0, I_11, G_11, H_11},
+ {0, I_12, G_12, H_12},
+ {0, I_13, G_13, H_13},
+ {0, I_14, G_14, H_14},
- {0, F_1, D_1, E_1},
- {0, F_2, D_2, E_2},
- {0, F_3, D_3, E_3},
- {0, F_4, D_4, E_4},
- {0, F_5, D_5, E_5},
- {0, F_6, D_6, E_6},
- {0, F_7, D_7, E_7},
- {0, F_8, D_8, E_8},
- {0, F_9, D_9, E_9},
- {0, F_10, D_10, E_10},
- {0, F_11, D_11, E_11},
- {0, F_12, D_12, E_12},
- {0, F_14, D_14, E_14},
+ {0, F_1, D_1, E_1},
+ {0, F_2, D_2, E_2},
+ {0, F_3, D_3, E_3},
+ {0, F_4, D_4, E_4},
+ {0, F_5, D_5, E_5},
+ {0, F_6, D_6, E_6},
+ {0, F_7, D_7, E_7},
+ {0, F_8, D_8, E_8},
+ {0, F_9, D_9, E_9},
+ {0, F_10, D_10, E_10},
+ {0, F_11, D_11, E_11},
+ {0, F_12, D_12, E_12},
+ {0, F_14, D_14, E_14},
- {0, C_1, A_1, B_1},
- {0, C_3, A_3, B_3},
- {0, C_4, A_4, B_4},
- {0, C_5, A_5, B_5},
- {0, C_6, A_6, B_6},
- {0, C_7, A_7, B_7},
- {0, C_8, A_8, B_8},
- {0, C_9, A_9, B_9},
- {0, C_10, A_10, B_10},
- {0, C_11, A_11, B_11},
- {0, C_12, A_12, B_12},
- {0, C_14, A_14, B_14},
+ {0, C_1, A_1, B_1},
+ {0, C_3, A_3, B_3},
+ {0, C_4, A_4, B_4},
+ {0, C_5, A_5, B_5},
+ {0, C_6, A_6, B_6},
+ {0, C_7, A_7, B_7},
+ {0, C_8, A_8, B_8},
+ {0, C_9, A_9, B_9},
+ {0, C_10, A_10, B_10},
+ {0, C_11, A_11, B_11},
+ {0, C_12, A_12, B_12},
+ {0, C_14, A_14, B_14},
- {0, C_15, A_15, B_15},
- {0, C_16, A_16, B_16},
- {0, F_15, D_15, E_15},
- {0, F_16, D_16, E_16},
- {0, I_15, G_15, H_15},
- {0, I_16, G_16, H_16},
- {0, L_15, J_15, K_15},
- {0, L_16, J_16, K_16},
+ {0, C_15, A_15, B_15},
+ {0, C_16, A_16, B_16},
+ {0, F_15, D_15, E_15},
+ {0, F_16, D_16, E_16},
+ {0, I_15, G_15, H_15},
+ {0, I_16, G_16, H_16},
+ {0, L_15, J_15, K_15},
+ {0, L_16, J_16, K_16},
};
#define __ NO_LED
diff --git a/keyboards/keychron/k9_pro/config.h b/keyboards/keychron/k9_pro/config.h
index ecc63874cf..2aaa8929fa 100755
--- a/keyboards/keychron/k9_pro/config.h
+++ b/keyboards/keychron/k9_pro/config.h
@@ -41,6 +41,13 @@
#define LED_CAPS_LOCK_PIN A0
#define LED_PIN_ON_STATE 1
+/* Increase I2C speed to 1000 KHz */
+#define I2C1_TIMINGR_PRESC 0U
+#define I2C1_TIMINGR_SCLDEL 3U
+#define I2C1_TIMINGR_SDADEL 0U
+#define I2C1_TIMINGR_SCLH 15U
+#define I2C1_TIMINGR_SCLL 51U
+
#ifdef KC_BLUETOOTH_ENABLE
/* Hardware configuration */
# define USB_BT_MODE_SELECT_PIN A10
diff --git a/keyboards/keychron/k9_pro/k9_pro.c b/keyboards/keychron/k9_pro/k9_pro.c
index d28b8728d5..6edf3a914b 100755
--- a/keyboards/keychron/k9_pro/k9_pro.c
+++ b/keyboards/keychron/k9_pro/k9_pro.c
@@ -1,4 +1,4 @@
-/* Copyright 2022 @ Keychron (https://www.keychron.com)
+/* 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
@@ -192,7 +192,8 @@ void matrix_scan_kb(void) {
#ifdef KC_BLUETOOTH_ENABLE
static void ckbt51_param_init(void) {
/* Set bluetooth device name */
- ckbt51_set_local_name(STR(PRODUCT));
+ // ckbt51_set_local_name(STR(PRODUCT));
+ ckbt51_set_local_name(PRODUCT);
/* Set bluetooth parameters */
module_param_t param = {.event_mode = 0x02,
.connected_idle_timeout = 7200,
@@ -220,6 +221,21 @@ void bluetooth_enter_disconnected_kb(uint8_t host_idx) {
}
}
+void ckbt51_default_ack_handler(uint8_t *data, uint8_t len) {
+ if (data[1] == 0x45) {
+ module_param_t param = {.event_mode = 0x02,
+ .connected_idle_timeout = 7200,
+ .pairing_timeout = 180,
+ .pairing_mode = 0,
+ .reconnect_timeout = 5,
+ .report_rate = 90,
+ .vendor_id_source = 1,
+ .verndor_id = 0, // Must be 0x3434
+ .product_id = PRODUCT_ID};
+ ckbt51_set_param(¶m);
+ }
+}
+
void bluetooth_pre_task(void) {
static uint8_t mode = 1;
diff --git a/keyboards/keychron/k9_pro/matrix.c b/keyboards/keychron/k9_pro/matrix.c
index cfad39b5c9..c6710b22d5 100755
--- a/keyboards/keychron/k9_pro/matrix.c
+++ b/keyboards/keychron/k9_pro/matrix.c
@@ -14,9 +14,6 @@
* along with this program. If not, see .
*/
-#include "stdint.h"
-#include "hal.h"
-#include "gpio.h"
#include "quantum.h"
#define HC595_STCP B0
@@ -26,56 +23,6 @@
pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-static inline void HC595_delay(uint16_t n) {
- while (n-- > 0) {
- asm volatile("nop" ::: "memory");
- }
-}
-
-#ifdef DRIVE_SHRIFT_REGISTER_WITH_SPI
-// clang-format off
-const SPIConfig hs_spicfg = {
- .circular = false,
- .slave = false,
- .data_cb = NULL,
- .error_cb = NULL,
- .ssport = PAL_PORT(HC595_STCP),
- .sspad = PAL_PAD(HC595_STCP),
- .cr1 = SPI_CR1_BR_1,
- .cr2 = SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0 | SPI_CR2_SSOE | SPI_CR2_NSSP
-};
-// clang-format on
-#endif
-static void HC595_output(uint16_t data) {
-#ifdef DRIVE_SHRIFT_REGISTER_WITH_SPI
- spiSend(&SPID1, 1, &data);
-#else
- uint8_t i;
- uint8_t n = 1;
-
- for (i = 16; i > 0; i--) {
- writePinLow(HC595_SHCP);
-
- if (data & 0x8000)
- writePinHigh(HC595_DS);
- else
- writePinLow(HC595_DS);
-
- data <<= 1;
-
- HC595_delay(n);
-
- writePinHigh(HC595_SHCP);
- HC595_delay(n);
- }
-
- HC595_delay(n);
- writePinLow(HC595_STCP);
- HC595_delay(n);
- writePinHigh(HC595_STCP);
-#endif
-}
-
static inline void setPinOutput_writeLow(pin_t pin) {
ATOMIC_BLOCK_FORCEON {
setPinOutput(pin);
@@ -83,7 +30,14 @@ static inline void setPinOutput_writeLow(pin_t pin) {
}
}
-static inline void setPinInputHigh_atomic(pin_t pin) {
+static inline void setPinOutput_writeHigh(pin_t pin) {
+ ATOMIC_BLOCK_FORCEON {
+ setPinOutput(pin);
+ writePinHigh(pin);
+ }
+}
+
+static inline void setPinInput_high(pin_t pin) {
ATOMIC_BLOCK_FORCEON {
setPinInputHigh(pin);
}
@@ -97,16 +51,65 @@ static inline uint8_t readMatrixPin(pin_t pin) {
}
}
+static inline void HC595_delay(uint16_t n) {
+ while (n-- > 0) {
+ asm volatile("nop" ::: "memory");
+ }
+}
+
+static void HC595_output(uint16_t data) {
+ ATOMIC_BLOCK_FORCEON {
+ for (uint8_t i = 0; i < MATRIX_COLS; i++) {
+ if (data & 0x1) {
+ writePinHigh(HC595_DS);
+ } else {
+ writePinLow(HC595_DS);
+ }
+
+ data = data >> 1;
+
+ writePinHigh(HC595_SHCP);
+ HC595_delay(1);
+ writePinLow(HC595_SHCP);
+ HC595_delay(1);
+ }
+ writePinHigh(HC595_STCP);
+ HC595_delay(1);
+ writePinLow(HC595_STCP);
+ HC595_delay(1);
+ }
+}
+
+static void HC595_output_oneBit(uint8_t data) {
+ ATOMIC_BLOCK_FORCEON {
+ if (data & 0x1) {
+ writePinHigh(HC595_DS);
+ } else {
+ writePinLow(HC595_DS);
+ }
+
+ writePinHigh(HC595_SHCP);
+ HC595_delay(1);
+ writePinLow(HC595_SHCP);
+ HC595_delay(1);
+
+ writePinHigh(HC595_STCP);
+ HC595_delay(1);
+ writePinLow(HC595_STCP);
+ HC595_delay(1);
+ }
+}
+
static bool select_col(uint8_t col) {
pin_t pin = col_pins[col];
- if (col < 0) {
- if (pin != NO_PIN) {
- setPinOutput_writeLow(pin);
- return true;
- }
+ if (pin != NO_PIN) {
+ setPinOutput_writeLow(pin);
+ return true;
} else {
- HC595_output(~(0x01 << col));
+ if (col == 0) {
+ HC595_output_oneBit(0x00);
+ }
return true;
}
return false;
@@ -115,81 +118,96 @@ static bool select_col(uint8_t col) {
static void unselect_col(uint8_t col) {
pin_t pin = col_pins[col];
- if (col < 0) {
- if (pin != NO_PIN) {
- setPinInputHigh_atomic(pin);
- }
+ if (pin != NO_PIN) {
+#ifdef MATRIX_UNSELECT_DRIVE_HIGH
+ setPinOutput_writeHigh(pin);
+#else
+ setPinInput_high(pin);
+#endif
} else {
- if (col >= MATRIX_COLS - 1) HC595_output(0xFFFF);
+ HC595_output_oneBit(0x01);
}
}
static void unselect_cols(void) {
- if (col_pins[0] != NO_PIN) setPinInputHigh_atomic(col_pins[0]);
- HC595_output(0xFFFF);
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ pin_t pin = col_pins[x];
+ if (pin != NO_PIN) {
+#ifdef MATRIX_UNSELECT_DRIVE_HIGH
+ setPinOutput_writeHigh(pin);
+#else
+ setPinInput_high(pin);
+#endif
+ } else {
+ if (x == 0) HC595_output(0xFFFF);
+ }
+ }
}
void select_all_cols(void) {
- if (col_pins[0] != NO_PIN) setPinOutput_writeLow(col_pins[0]);
- HC595_output(0x0000);
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ pin_t pin = col_pins[x];
+ if (pin != NO_PIN) {
+ setPinOutput_writeLow(pin);
+ } else {
+ if (x == 0) HC595_output(0x0000);
+ }
+ }
}
-void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
+static void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col, matrix_row_t row_shifter) {
+ bool key_pressed = false;
+
// Select col
if (!select_col(current_col)) { // select col
return; // skip NO_PIN col
}
- HC595_delay(100);
+ matrix_output_select_delay();
// 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] |= (MATRIX_ROW_SHIFTER << current_col);
- // key_pressed = true;
+ current_matrix[row_index] |= row_shifter;
+ key_pressed = true;
} else {
// Pin HI, clear col bit
- current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
+ current_matrix[row_index] &= ~row_shifter;
}
}
+ // Unselect col
unselect_col(current_col);
- HC595_delay(100);
+ matrix_output_unselect_delay(current_col, key_pressed); // wait for all Row signals to go HIGH
}
void matrix_init_custom(void) {
- for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
- if (row_pins[x] != NO_PIN) {
- setPinInputHigh_atomic(row_pins[x]);
- }
- }
-#ifdef DRIVE_SHRIFT_REGISTER_WITH_SPI
- palSetPadMode(PAL_PORT(HC595_SHCP), PAL_PAD(HC595_SHCP), PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* SCK */
- palSetPadMode(PAL_PORT(HC595_DS), PAL_PAD(HC595_DS), PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* MOSI*/
- palSetPadMode(PAL_PORT(HC595_STCP), PAL_PAD(HC595_STCP), PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* CS*/
- spiStart(&SPID1, &hs_spicfg);
-#else
setPinOutput(HC595_DS);
setPinOutput(HC595_STCP);
setPinOutput(HC595_SHCP);
-#endif
+
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ if (row_pins[x] != NO_PIN) {
+ setPinInput_high(row_pins[x]);
+ }
+ }
+
unselect_cols();
}
bool matrix_scan_custom(matrix_row_t current_matrix[]) {
- bool matrix_has_changed = false;
-
matrix_row_t curr_matrix[MATRIX_ROWS] = {0};
// Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
- matrix_read_rows_on_col(curr_matrix, current_col);
+ 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);
}
- matrix_has_changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0;
- if (matrix_has_changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix));
+ bool changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0;
+ if (changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix));
- return matrix_has_changed;
+ return changed;
}
diff --git a/keyboards/keychron/k9_pro/readme.md b/keyboards/keychron/k9_pro/readme.md
index f3b5aa7c86..a42f295a0a 100755
--- a/keyboards/keychron/k9_pro/readme.md
+++ b/keyboards/keychron/k9_pro/readme.md
@@ -1,10 +1,12 @@
# Keychron K9 Pro
+![Keychron K9 Pro]()
+
A customizable 60% keyboard.
* Keyboard Maintainer: [Keychron](https://github.com/keychron)
* Hardware Supported: Keychron K9 Pro
-* Hardware Availability: [Keychron](https://www.keychron.com/)
+* Hardware Availability: [Keychron K9 Pro]()
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/keychron/k9_pro/rules.mk b/keyboards/keychron/k9_pro/rules.mk
index 1de119ff73..ee301839c3 100755
--- a/keyboards/keychron/k9_pro/rules.mk
+++ b/keyboards/keychron/k9_pro/rules.mk
@@ -7,9 +7,6 @@ EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
ENCODER_ENABLE = no # Enable Encoder
DIP_SWITCH_ENABLE = yes
BLUETOOTH_ENABLE = no
diff --git a/keyboards/keychron/q2_pro/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q2_pro/ansi_encoder/ansi_encoder.c
index e74af39920..ca92d5e5f1 100755
--- a/keyboards/keychron/q2_pro/ansi_encoder/ansi_encoder.c
+++ b/keyboards/keychron/q2_pro/ansi_encoder/ansi_encoder.c
@@ -18,83 +18,83 @@
#ifdef RGB_MATRIX_ENABLE
const ckled2001_led g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
-/* Refer to IS31 manual for these locations
+/* Refer to CKLED2001 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
- {0, C_16, A_16, B_16},
- {0, C_15, A_15, B_15},
- {0, C_14, A_14, B_14},
- {0, C_13, A_13, B_13},
- {0, C_12, A_12, B_12},
- {0, C_11, A_11, B_11},
- {0, C_10, A_10, B_10},
- {0, C_9, A_9, B_9},
- {0, C_8, A_8, B_8},
- {0, C_7, A_7, B_7},
- {0, C_6, A_6, B_6},
- {0, C_5, A_5, B_5},
- {0, C_4, A_4, B_4},
- {0, C_3, A_3, B_3},
- {0, C_1, A_1, B_1},
+ {0, C_16, A_16, B_16},
+ {0, C_15, A_15, B_15},
+ {0, C_14, A_14, B_14},
+ {0, C_13, A_13, B_13},
+ {0, C_12, A_12, B_12},
+ {0, C_11, A_11, B_11},
+ {0, C_10, A_10, B_10},
+ {0, C_9, A_9, B_9},
+ {0, C_8, A_8, B_8},
+ {0, C_7, A_7, B_7},
+ {0, C_6, A_6, B_6},
+ {0, C_5, A_5, B_5},
+ {0, C_4, A_4, B_4},
+ {0, C_3, A_3, B_3},
+ {0, C_1, A_1, B_1},
- {0, F_16, D_16, E_16},
- {0, F_15, D_15, E_15},
- {0, F_14, D_14, E_14},
- {0, F_13, D_13, E_13},
- {0, F_12, D_12, E_12},
- {0, F_11, D_11, E_11},
- {0, F_10, D_10, E_10},
- {0, F_9, D_9, E_9},
- {0, F_8, D_8, E_8},
- {0, F_7, D_7, E_7},
- {0, F_6, D_6, E_6},
- {0, F_5, D_5, E_5},
- {0, F_4, D_4, E_4},
- {0, F_3, D_3, E_3},
- {0, F_1, D_1, E_1},
+ {0, F_16, D_16, E_16},
+ {0, F_15, D_15, E_15},
+ {0, F_14, D_14, E_14},
+ {0, F_13, D_13, E_13},
+ {0, F_12, D_12, E_12},
+ {0, F_11, D_11, E_11},
+ {0, F_10, D_10, E_10},
+ {0, F_9, D_9, E_9},
+ {0, F_8, D_8, E_8},
+ {0, F_7, D_7, E_7},
+ {0, F_6, D_6, E_6},
+ {0, F_5, D_5, E_5},
+ {0, F_4, D_4, E_4},
+ {0, F_3, D_3, E_3},
+ {0, F_1, D_1, E_1},
- {1, C_16, A_16, B_16},
- {1, C_15, A_15, B_15},
- {1, C_14, A_14, B_14},
- {1, C_13, A_13, B_13},
- {1, C_12, A_12, B_12},
- {1, C_11, A_11, B_11},
- {1, C_10, A_10, B_10},
- {1, C_9, A_9, B_9},
- {1, C_8, A_8, B_8},
- {1, C_7, A_7, B_7},
- {1, C_6, A_6, B_6},
- {1, C_5, A_5, B_5},
- {1, C_3, A_3, B_3},
- {1, C_1, A_1, B_1},
+ {1, C_16, A_16, B_16},
+ {1, C_15, A_15, B_15},
+ {1, C_14, A_14, B_14},
+ {1, C_13, A_13, B_13},
+ {1, C_12, A_12, B_12},
+ {1, C_11, A_11, B_11},
+ {1, C_10, A_10, B_10},
+ {1, C_9, A_9, B_9},
+ {1, C_8, A_8, B_8},
+ {1, C_7, A_7, B_7},
+ {1, C_6, A_6, B_6},
+ {1, C_5, A_5, B_5},
+ {1, C_3, A_3, B_3},
+ {1, C_1, A_1, B_1},
- {1, I_16, G_16, H_16},
- {1, I_14, G_14, H_14},
- {1, I_13, G_13, H_13},
- {1, I_12, G_12, H_12},
- {1, I_11, G_11, H_11},
- {1, I_10, G_10, H_10},
- {1, I_9, G_9, H_9},
- {1, I_8, G_8, H_8},
- {1, I_7, G_7, H_7},
- {1, I_6, G_6, H_6},
- {1, I_5, G_5, H_5},
- {1, I_3, G_3, H_3},
- {1, I_2, G_2, H_2},
+ {1, I_16, G_16, H_16},
+ {1, I_14, G_14, H_14},
+ {1, I_13, G_13, H_13},
+ {1, I_12, G_12, H_12},
+ {1, I_11, G_11, H_11},
+ {1, I_10, G_10, H_10},
+ {1, I_9, G_9, H_9},
+ {1, I_8, G_8, H_8},
+ {1, I_7, G_7, H_7},
+ {1, I_6, G_6, H_6},
+ {1, I_5, G_5, H_5},
+ {1, I_3, G_3, H_3},
+ {1, I_2, G_2, H_2},
- {1, F_16, D_16, E_16},
- {1, F_15, D_15, E_15},
- {1, F_14, D_14, E_14},
- {1, F_10, D_10, E_10},
- {1, F_6, D_6, E_6},
- {1, F_5, D_5, E_5},
- {1, F_4, D_4, E_4},
- {1, F_3, D_3, E_3},
- {1, F_2, D_2, E_2},
- {1, F_1, D_1, E_1}
+ {1, F_16, D_16, E_16},
+ {1, F_15, D_15, E_15},
+ {1, F_14, D_14, E_14},
+ {1, F_10, D_10, E_10},
+ {1, F_6, D_6, E_6},
+ {1, F_5, D_5, E_5},
+ {1, F_4, D_4, E_4},
+ {1, F_3, D_3, E_3},
+ {1, F_2, D_2, E_2},
+ {1, F_1, D_1, E_1}
};
#define __ NO_LED
diff --git a/keyboards/keychron/q2_pro/ansi_encoder/config.h b/keyboards/keychron/q2_pro/ansi_encoder/config.h
index 5812a72a1d..9349e263bc 100755
--- a/keyboards/keychron/q2_pro/ansi_encoder/config.h
+++ b/keyboards/keychron/q2_pro/ansi_encoder/config.h
@@ -28,13 +28,6 @@
# define DRIVER_2_LED_TOTAL 37
# define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
-/* Increase I2C speed to 1000 KHz */
-# define I2C1_TIMINGR_PRESC 0U
-# define I2C1_TIMINGR_SCLDEL 3U
-# define I2C1_TIMINGR_SDADEL 0U
-# define I2C1_TIMINGR_SCLH 15U
-# define I2C1_TIMINGR_SCLL 30U
-
/* Set to infinit, which is use in USB mode by default */
# define RGB_MATRIX_TIMEOUT RGB_MATRIX_TIMEOUT_INFINITE
diff --git a/keyboards/keychron/q2_pro/config.h b/keyboards/keychron/q2_pro/config.h
index b42ea8559b..756af46e08 100755
--- a/keyboards/keychron/q2_pro/config.h
+++ b/keyboards/keychron/q2_pro/config.h
@@ -36,6 +36,13 @@
#define DIP_SWITCH_PINS \
{ A8 }
+/* Increase I2C speed to 1000 KHz */
+#define I2C1_TIMINGR_PRESC 0U
+#define I2C1_TIMINGR_SCLDEL 3U
+#define I2C1_TIMINGR_SDADEL 0U
+#define I2C1_TIMINGR_SCLH 15U
+#define I2C1_TIMINGR_SCLL 51U
+
#ifdef KC_BLUETOOTH_ENABLE
/* Hardware configuration */
# define USB_BT_MODE_SELECT_PIN C15
diff --git a/keyboards/keychron/q2_pro/matrix.c b/keyboards/keychron/q2_pro/matrix.c
index b20774d370..c6710b22d5 100755
--- a/keyboards/keychron/q2_pro/matrix.c
+++ b/keyboards/keychron/q2_pro/matrix.c
@@ -14,70 +14,15 @@
* along with this program. If not, see .
*/
-#include "stdint.h"
-#include "hal.h"
-#include "gpio.h"
#include "quantum.h"
#define HC595_STCP B0
#define HC595_SHCP A1
#define HC595_DS A7
-#define DIRECT_COL_NUM 1
-
pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
-static inline void HC595_delay(uint16_t n) {
- while (n-- > 0) {
- asm volatile("nop" ::: "memory");
- }
-}
-
-#ifdef DRIVE_SHRIFT_REGISTER_WITH_SPI
-// clang-format off
-const SPIConfig hs_spicfg = {
- .circular = false,
- .slave = false,
- .data_cb = NULL,
- .error_cb = NULL,
- .ssport = PAL_PORT(HC595_STCP),
- .sspad = PAL_PAD(HC595_STCP),
- .cr1 = SPI_CR1_BR_1,
- .cr2 = SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0 | SPI_CR2_SSOE | SPI_CR2_NSSP
-};
-// clang-format on
-#endif
-static void HC595_output(uint16_t data) {
-#ifdef DRIVE_SHRIFT_REGISTER_WITH_SPI
- spiSend(&SPID1, 1, &data);
-#else
- uint8_t i;
- uint8_t n = 1;
-
- for (i = 16; i > 0; i--) {
- writePinLow(HC595_SHCP);
-
- if (data & 0x8000)
- writePinHigh(HC595_DS);
- else
- writePinLow(HC595_DS);
-
- data <<= 1;
-
- HC595_delay(n);
-
- writePinHigh(HC595_SHCP);
- HC595_delay(n);
- }
-
- HC595_delay(n);
- writePinLow(HC595_STCP);
- HC595_delay(n);
- writePinHigh(HC595_STCP);
-#endif
-}
-
static inline void setPinOutput_writeLow(pin_t pin) {
ATOMIC_BLOCK_FORCEON {
setPinOutput(pin);
@@ -85,7 +30,14 @@ static inline void setPinOutput_writeLow(pin_t pin) {
}
}
-static inline void setPinInputHigh_atomic(pin_t pin) {
+static inline void setPinOutput_writeHigh(pin_t pin) {
+ ATOMIC_BLOCK_FORCEON {
+ setPinOutput(pin);
+ writePinHigh(pin);
+ }
+}
+
+static inline void setPinInput_high(pin_t pin) {
ATOMIC_BLOCK_FORCEON {
setPinInputHigh(pin);
}
@@ -99,16 +51,65 @@ static inline uint8_t readMatrixPin(pin_t pin) {
}
}
+static inline void HC595_delay(uint16_t n) {
+ while (n-- > 0) {
+ asm volatile("nop" ::: "memory");
+ }
+}
+
+static void HC595_output(uint16_t data) {
+ ATOMIC_BLOCK_FORCEON {
+ for (uint8_t i = 0; i < MATRIX_COLS; i++) {
+ if (data & 0x1) {
+ writePinHigh(HC595_DS);
+ } else {
+ writePinLow(HC595_DS);
+ }
+
+ data = data >> 1;
+
+ writePinHigh(HC595_SHCP);
+ HC595_delay(1);
+ writePinLow(HC595_SHCP);
+ HC595_delay(1);
+ }
+ writePinHigh(HC595_STCP);
+ HC595_delay(1);
+ writePinLow(HC595_STCP);
+ HC595_delay(1);
+ }
+}
+
+static void HC595_output_oneBit(uint8_t data) {
+ ATOMIC_BLOCK_FORCEON {
+ if (data & 0x1) {
+ writePinHigh(HC595_DS);
+ } else {
+ writePinLow(HC595_DS);
+ }
+
+ writePinHigh(HC595_SHCP);
+ HC595_delay(1);
+ writePinLow(HC595_SHCP);
+ HC595_delay(1);
+
+ writePinHigh(HC595_STCP);
+ HC595_delay(1);
+ writePinLow(HC595_STCP);
+ HC595_delay(1);
+ }
+}
+
static bool select_col(uint8_t col) {
pin_t pin = col_pins[col];
- if (col < 0) {
- if (pin != NO_PIN) {
- setPinOutput_writeLow(pin);
- return true;
- }
+ if (pin != NO_PIN) {
+ setPinOutput_writeLow(pin);
+ return true;
} else {
- HC595_output(~(0x01 << col));
+ if (col == 0) {
+ HC595_output_oneBit(0x00);
+ }
return true;
}
return false;
@@ -117,81 +118,96 @@ static bool select_col(uint8_t col) {
static void unselect_col(uint8_t col) {
pin_t pin = col_pins[col];
- if (col < 0) {
- if (pin != NO_PIN) {
- setPinInputHigh_atomic(pin);
- }
+ if (pin != NO_PIN) {
+#ifdef MATRIX_UNSELECT_DRIVE_HIGH
+ setPinOutput_writeHigh(pin);
+#else
+ setPinInput_high(pin);
+#endif
} else {
- if (col >= MATRIX_COLS - 1) HC595_output(0xFFFF);
+ HC595_output_oneBit(0x01);
}
}
static void unselect_cols(void) {
- if (col_pins[0] != NO_PIN) setPinInputHigh_atomic(col_pins[0]);
- HC595_output(0xFFFF);
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ pin_t pin = col_pins[x];
+ if (pin != NO_PIN) {
+#ifdef MATRIX_UNSELECT_DRIVE_HIGH
+ setPinOutput_writeHigh(pin);
+#else
+ setPinInput_high(pin);
+#endif
+ } else {
+ if (x == 0) HC595_output(0xFFFF);
+ }
+ }
}
void select_all_cols(void) {
- if (col_pins[0] != NO_PIN) setPinOutput_writeLow(col_pins[0]);
- HC595_output(0x0000);
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ pin_t pin = col_pins[x];
+ if (pin != NO_PIN) {
+ setPinOutput_writeLow(pin);
+ } else {
+ if (x == 0) HC595_output(0x0000);
+ }
+ }
}
-void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
+static void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col, matrix_row_t row_shifter) {
+ bool key_pressed = false;
+
// Select col
if (!select_col(current_col)) { // select col
return; // skip NO_PIN col
}
- HC595_delay(100);
+ matrix_output_select_delay();
// 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] |= (MATRIX_ROW_SHIFTER << current_col);
- // key_pressed = true;
+ current_matrix[row_index] |= row_shifter;
+ key_pressed = true;
} else {
// Pin HI, clear col bit
- current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
+ current_matrix[row_index] &= ~row_shifter;
}
}
+ // Unselect col
unselect_col(current_col);
- HC595_delay(100);
+ matrix_output_unselect_delay(current_col, key_pressed); // wait for all Row signals to go HIGH
}
void matrix_init_custom(void) {
- for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
- if (row_pins[x] != NO_PIN) {
- setPinInputHigh_atomic(row_pins[x]);
- }
- }
-#ifdef DRIVE_SHRIFT_REGISTER_WITH_SPI
- palSetPadMode(PAL_PORT(HC595_SHCP), PAL_PAD(HC595_SHCP), PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* SCK */
- palSetPadMode(PAL_PORT(HC595_DS), PAL_PAD(HC595_DS), PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* MOSI*/
- palSetPadMode(PAL_PORT(HC595_STCP), PAL_PAD(HC595_STCP), PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* CS*/
- spiStart(&SPID1, &hs_spicfg);
-#else
setPinOutput(HC595_DS);
setPinOutput(HC595_STCP);
setPinOutput(HC595_SHCP);
-#endif
+
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ if (row_pins[x] != NO_PIN) {
+ setPinInput_high(row_pins[x]);
+ }
+ }
+
unselect_cols();
}
bool matrix_scan_custom(matrix_row_t current_matrix[]) {
- bool matrix_has_changed = false;
-
matrix_row_t curr_matrix[MATRIX_ROWS] = {0};
// Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
- matrix_read_rows_on_col(curr_matrix, current_col);
+ 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);
}
- matrix_has_changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0;
- if (matrix_has_changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix));
+ bool changed = memcmp(current_matrix, curr_matrix, sizeof(curr_matrix)) != 0;
+ if (changed) memcpy(current_matrix, curr_matrix, sizeof(curr_matrix));
- return matrix_has_changed;
+ return changed;
}
diff --git a/keyboards/keychron/q2_pro/q2_pro.c b/keyboards/keychron/q2_pro/q2_pro.c
index 1c430e4e66..72e36b4a54 100755
--- a/keyboards/keychron/q2_pro/q2_pro.c
+++ b/keyboards/keychron/q2_pro/q2_pro.c
@@ -176,7 +176,8 @@ void matrix_scan_kb(void) {
#ifdef KC_BLUETOOTH_ENABLE
static void ckbt51_param_init(void) {
/* Set bluetooth device name */
- ckbt51_set_local_name(STR(PRODUCT));
+ // ckbt51_set_local_name(STR(PRODUCT));
+ ckbt51_set_local_name(PRODUCT);
/* Set bluetooth parameters */
module_param_t param = {.event_mode = 0x02,
.connected_idle_timeout = 7200,
@@ -204,6 +205,21 @@ void bluetooth_enter_disconnected_kb(uint8_t host_idx) {
}
}
+void ckbt51_default_ack_handler(uint8_t *data, uint8_t len) {
+ if (data[1] == 0x45) {
+ module_param_t param = {.event_mode = 0x02,
+ .connected_idle_timeout = 7200,
+ .pairing_timeout = 180,
+ .pairing_mode = 0,
+ .reconnect_timeout = 5,
+ .report_rate = 90,
+ .vendor_id_source = 1,
+ .verndor_id = 0, // Must be 0x3434
+ .product_id = PRODUCT_ID};
+ ckbt51_set_param(¶m);
+ }
+}
+
void bluetooth_pre_task(void) {
static uint8_t mode = 1;
diff --git a/keyboards/keychron/q2_pro/readme.md b/keyboards/keychron/q2_pro/readme.md
index c7cbdfe0b0..f46a26f308 100755
--- a/keyboards/keychron/q2_pro/readme.md
+++ b/keyboards/keychron/q2_pro/readme.md
@@ -1,18 +1,20 @@
# Keychron Q2 Pro
+![Keychron Q2 Pro]()
+
A customizable 60% keyboard.
* Keyboard Maintainer: [Keychron](https://github.com/keychron)
* Hardware Supported: Keychron Q2 Pro
-* Hardware Availability: [Keychron](https://www.keychron.com/)
+* Hardware Availability: [Keychron Q2 Pro]()
Make example for this keyboard (after setting up your build environment):
- make keychron/q2_pro/ansi/rgb:default
+ make keychron/q2_pro/ansi_encoder:default
Flashing example for this keyboard:
- make keychron/q2_pro/ansi/rgb:default:flash
+ make keychron/q2_pro/ansi_encoder:default:flash
**Reset Key**: Connect the USB cable, toggle mode switch to "Off", hold down the *Esc* key or reset button underneath space bar, then toggle then switch to "Cable".
diff --git a/keyboards/keychron/q2_pro/rules.mk b/keyboards/keychron/q2_pro/rules.mk
index d1f9ae0f7c..0824dfed8b 100755
--- a/keyboards/keychron/q2_pro/rules.mk
+++ b/keyboards/keychron/q2_pro/rules.mk
@@ -7,9 +7,6 @@ EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
DIP_SWITCH_ENABLE = yes
BLUETOOTH_ENABLE = no
BLUETOOTH_DRIVER = custom
diff --git a/keyboards/keychron/q3_pro/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q3_pro/ansi_encoder/ansi_encoder.c
index 0109bbd699..79a02ccfc5 100755
--- a/keyboards/keychron/q3_pro/ansi_encoder/ansi_encoder.c
+++ b/keyboards/keychron/q3_pro/ansi_encoder/ansi_encoder.c
@@ -19,109 +19,109 @@
// clang-format off
#ifdef RGB_MATRIX_ENABLE
const ckled2001_led g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
-/* Refer to IS31 manual for these locations
+/* Refer to CKLED2001 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
// {0, I_1, G_1, H_1},
- {0, I_2, G_2, H_2},
- {0, I_3, G_3, H_3},
- {0, I_4, G_4, H_4},
- {0, I_5, G_5, H_5},
- {0, I_6, G_6, H_6},
- {0, I_7, G_7, H_7},
- {0, I_8, G_8, H_8},
- {0, I_9, G_9, H_9},
- {0, I_10, G_10, H_10},
- {0, I_11, G_11, H_11},
- {0, I_12, G_12, H_12},
- {0, I_13, G_13, H_13},
- {0, I_14, G_14, H_14},
- {0, I_15, G_15, H_15},
- {0, I_16, G_16, H_16},
- {1, C_4, A_4, B_4}, // 16
+ {0, I_2, G_2, H_2},
+ {0, I_3, G_3, H_3},
+ {0, I_4, G_4, H_4},
+ {0, I_5, G_5, H_5},
+ {0, I_6, G_6, H_6},
+ {0, I_7, G_7, H_7},
+ {0, I_8, G_8, H_8},
+ {0, I_9, G_9, H_9},
+ {0, I_10, G_10, H_10},
+ {0, I_11, G_11, H_11},
+ {0, I_12, G_12, H_12},
+ {0, I_13, G_13, H_13},
+ {0, I_14, G_14, H_14},
+ {0, I_15, G_15, H_15},
+ {0, I_16, G_16, H_16},
+ {1, C_4, A_4, B_4}, // 16
- {0, C_1, A_1, B_1},
- {0, C_2, A_2, B_2},
- {0, C_3, A_3, B_3},
- {0, C_4, A_4, B_4},
- {0, C_5, A_5, B_5},
- {0, C_6, A_6, B_6},
- {0, C_7, A_7, B_7},
- {0, C_8, A_8, B_8},
- {0, C_9, A_9, B_9},
- {0, C_10, A_10, B_10},
- {0, C_11, A_11, B_11},
- {0, C_12, A_12, B_12},
- {0, C_13, A_13, B_13},
- {0, C_14, A_14, B_14},
- {0, C_15, A_15, B_15},
- {0, C_16, A_16, B_16},
- {1, C_2, A_2, B_2}, // 17
+ {0, C_1, A_1, B_1},
+ {0, C_2, A_2, B_2},
+ {0, C_3, A_3, B_3},
+ {0, C_4, A_4, B_4},
+ {0, C_5, A_5, B_5},
+ {0, C_6, A_6, B_6},
+ {0, C_7, A_7, B_7},
+ {0, C_8, A_8, B_8},
+ {0, C_9, A_9, B_9},
+ {0, C_10, A_10, B_10},
+ {0, C_11, A_11, B_11},
+ {0, C_12, A_12, B_12},
+ {0, C_13, A_13, B_13},
+ {0, C_14, A_14, B_14},
+ {0, C_15, A_15, B_15},
+ {0, C_16, A_16, B_16},
+ {1, C_2, A_2, B_2}, // 17
- {1, F_13, D_13, E_13},
- {0, F_1, D_1, E_1},
- {0, F_2, D_2, E_2},
- {0, F_3, D_3, E_3},
- {0, F_4, D_4, E_4},
- {0, F_5, D_5, E_5},
- {0, F_6, D_6, E_6},
- {0, F_7, D_7, E_7},
- {0, F_8, D_8, E_8},
- {0, F_9, D_9, E_9},
- {0, F_10, D_10, E_10},
- {0, F_11, D_11, E_11},
- {0, F_12, D_12, E_12},
- {0, F_13, D_13, E_13},
- {0, F_14, D_14, E_14},
- {0, F_15, D_15, E_15},
- {0, F_16, D_16, E_16},
- {1, C_1, A_1, B_1}, // 17
+ {1, F_13, D_13, E_13},
+ {0, F_1, D_1, E_1},
+ {0, F_2, D_2, E_2},
+ {0, F_3, D_3, E_3},
+ {0, F_4, D_4, E_4},
+ {0, F_5, D_5, E_5},
+ {0, F_6, D_6, E_6},
+ {0, F_7, D_7, E_7},
+ {0, F_8, D_8, E_8},
+ {0, F_9, D_9, E_9},
+ {0, F_10, D_10, E_10},
+ {0, F_11, D_11, E_11},
+ {0, F_12, D_12, E_12},
+ {0, F_13, D_13, E_13},
+ {0, F_14, D_14, E_14},
+ {0, F_15, D_15, E_15},
+ {0, F_16, D_16, E_16},
+ {1, C_1, A_1, B_1}, // 17
- {1, F_12, D_12, E_12},
- {1, C_16, A_16, B_16},
- {1, C_15, A_15, B_15},
- {1, C_14, A_14, B_14},
- {1, C_13, A_13, B_13},
- {1, C_12, A_12, B_12},
- {1, C_11, A_11, B_11},
- {1, C_10, A_10, B_10},
- {1, C_9, A_9, B_9},
- {1, C_8, A_8, B_8},
- {1, C_7, A_7, B_7},
- {1, C_6, A_6, B_6},
- {1, C_5, A_5, B_5},
- {1, C_3, A_3, B_3}, // 13
+ {1, F_12, D_12, E_12},
+ {1, C_16, A_16, B_16},
+ {1, C_15, A_15, B_15},
+ {1, C_14, A_14, B_14},
+ {1, C_13, A_13, B_13},
+ {1, C_12, A_12, B_12},
+ {1, C_11, A_11, B_11},
+ {1, C_10, A_10, B_10},
+ {1, C_9, A_9, B_9},
+ {1, C_8, A_8, B_8},
+ {1, C_7, A_7, B_7},
+ {1, C_6, A_6, B_6},
+ {1, C_5, A_5, B_5},
+ {1, C_3, A_3, B_3}, // 13
- {1, F_8, D_8, E_8},
- {1, I_16, G_16, H_16},
- {1, I_14, G_14, H_14},
- {1, I_13, G_13, H_13},
- {1, I_12, G_12, H_12},
- {1, I_11, G_11, H_11},
- {1, I_10, G_10, H_10},
- {1, I_9, G_9, H_9},
- {1, I_8, G_8, H_8},
- {1, I_7, G_7, H_7},
- {1, I_6, G_6, H_6},
- {1, I_5, G_5, H_5},
- {1, I_3, G_3, H_3},
- {1, I_1, G_1, H_1}, // 13
+ {1, F_8, D_8, E_8},
+ {1, I_16, G_16, H_16},
+ {1, I_14, G_14, H_14},
+ {1, I_13, G_13, H_13},
+ {1, I_12, G_12, H_12},
+ {1, I_11, G_11, H_11},
+ {1, I_10, G_10, H_10},
+ {1, I_9, G_9, H_9},
+ {1, I_8, G_8, H_8},
+ {1, I_7, G_7, H_7},
+ {1, I_6, G_6, H_6},
+ {1, I_5, G_5, H_5},
+ {1, I_3, G_3, H_3},
+ {1, I_1, G_1, H_1}, // 13
- {1, F_7, D_7, E_7},
- {1, F_16, D_16, E_16},
- {1, F_15, D_15, E_15},
- {1, F_14, D_14, E_14},
- {1, F_10, D_10, E_10},
- {1, F_6, D_6, E_6},
- {1, F_5, D_5, E_5},
- {1, F_4, D_4, E_4},
- {1, F_3, D_3, E_3},
- {1, F_2, D_2, E_2},
- {1, F_1, D_1, E_1},
- {1, I_2, G_2, H_2},
+ {1, F_7, D_7, E_7},
+ {1, F_16, D_16, E_16},
+ {1, F_15, D_15, E_15},
+ {1, F_14, D_14, E_14},
+ {1, F_10, D_10, E_10},
+ {1, F_6, D_6, E_6},
+ {1, F_5, D_5, E_5},
+ {1, F_4, D_4, E_4},
+ {1, F_3, D_3, E_3},
+ {1, F_2, D_2, E_2},
+ {1, F_1, D_1, E_1},
+ {1, I_2, G_2, H_2},
};
#define __ NO_LED
@@ -148,7 +148,7 @@ led_config_t g_led_config = {
{
// RGB LED Index to Flag
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1,
+ 4, 8, 8, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1,
4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1,
4, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
diff --git a/keyboards/keychron/q3_pro/ansi_encoder/config.h b/keyboards/keychron/q3_pro/ansi_encoder/config.h
index ef89dd14b3..8c0fbb754c 100755
--- a/keyboards/keychron/q3_pro/ansi_encoder/config.h
+++ b/keyboards/keychron/q3_pro/ansi_encoder/config.h
@@ -26,13 +26,6 @@
# define DRIVER_2_LED_COUNT 44
# define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_COUNT + DRIVER_2_LED_COUNT)
-/* Increase I2C speed to 1000 KHz */
-# define I2C1_TIMINGR_PRESC 0U
-# define I2C1_TIMINGR_SCLDEL 3U
-# define I2C1_TIMINGR_SDADEL 0U
-# define I2C1_TIMINGR_SCLH 15U
-# define I2C1_TIMINGR_SCLL 30U
-
/* Scan phase of led driver set as MSKPHASE_9CHANNEL(defined as 0x03 in CKLED2001.h) */
# define PHASE_CHANNEL MSKPHASE_9CHANNEL
diff --git a/keyboards/keychron/q3_pro/ansi_encoder/keymaps/via/keymap.c b/keyboards/keychron/q3_pro/ansi_encoder/keymaps/via/keymap.c
index c83f780278..7751eb94e5 100755
--- a/keyboards/keychron/q3_pro/ansi_encoder/keymaps/via/keymap.c
+++ b/keyboards/keychron/q3_pro/ansi_encoder/keymaps/via/keymap.c
@@ -29,10 +29,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_ansi_92(
KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_SIRI, 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_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_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_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_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+ MACRO01, 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,
+ MACRO02, 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,
+ MACRO03, 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,
+ MACRO04, KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD, KC_ROPTN, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[MAC_FN] = LAYOUT_ansi_92(
RGB_TOG, _______, 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,
@@ -45,10 +45,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[WIN_BASE] = LAYOUT_ansi_92(
KC_MUTE, 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_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_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_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_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+ MACRO01, 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,
+ MACRO02, 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,
+ MACRO03, 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,
+ MACRO04, KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[WIN_FN] = LAYOUT_ansi_92(
RGB_TOG, _______, 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,
diff --git a/keyboards/keychron/q3_pro/config.h b/keyboards/keychron/q3_pro/config.h
index 7dc65d60da..a4f7aca1a5 100755
--- a/keyboards/keychron/q3_pro/config.h
+++ b/keyboards/keychron/q3_pro/config.h
@@ -36,6 +36,13 @@
#define DIP_SWITCH_PINS \
{ A8 }
+/* Increase I2C speed to 1000 KHz */
+#define I2C1_TIMINGR_PRESC 0U
+#define I2C1_TIMINGR_SCLDEL 3U
+#define I2C1_TIMINGR_SDADEL 0U
+#define I2C1_TIMINGR_SCLH 15U
+#define I2C1_TIMINGR_SCLL 51U
+
#ifdef KC_BLUETOOTH_ENABLE
/* Hardware configuration */
# define USB_BT_MODE_SELECT_PIN C15
@@ -48,8 +55,6 @@
# define USB_POWER_CONNECTED_LEVEL 0
# define BAT_LOW_LED_PIN_STATE 1
-// # define BAT_LOW_LED_PIN NO_PIN
-// # define BAT_LOW_LED_PIN_ON_STATE 1
# define HOST_DEVICES_COUNT 3
diff --git a/keyboards/keychron/q3_pro/matrix.c b/keyboards/keychron/q3_pro/matrix.c
index 6dadb7cc27..f9d71e31a0 100755
--- a/keyboards/keychron/q3_pro/matrix.c
+++ b/keyboards/keychron/q3_pro/matrix.c
@@ -27,11 +27,9 @@ pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
extern indicator_config_t indicator_config;
static uint32_t power_on_indicator_timer_buffer;
-extern bool bat_low_led_pin_state;
+extern bool bat_low_led_pin_state;
-#ifndef POWER_ON_LED_DURATION
-# define POWER_ON_LED_DURATION 3000
-#endif
+#define POWER_ON_LED_DURATION 3000
static inline void HC595_delay(uint16_t n) {
while (n-- > 0) {
@@ -72,7 +70,7 @@ static inline void setPinOutput_writeLow(pin_t pin) {
}
}
-static inline void setPinInputHigh_atomic(pin_t pin) {
+static inline void setPinInput_high(pin_t pin) {
ATOMIC_BLOCK_FORCEON {
setPinInputHigh(pin);
}
@@ -141,7 +139,11 @@ static void unselect_col(uint8_t col) {
uint32_t value = 0;
if (pin != NO_PIN) {
- setPinInputHigh_atomic(pin);
+#ifdef MATRIX_UNSELECT_DRIVE_HIGH
+ setPinOutput_writeHigh(pin);
+#else
+ setPinInput_high(pin);
+#endif
} else {
if (power_on_indicator_timer_buffer) {
if (sync_timer_elapsed32(power_on_indicator_timer_buffer) > POWER_ON_LED_DURATION) {
@@ -202,17 +204,37 @@ static void unselect_col(uint8_t col) {
}
static void unselect_cols(void) {
- if (col_pins[0] != NO_PIN) setPinInputHigh_atomic(col_pins[0]);
- HC595_output(0xFFFFFFFF);
- power_on_indicator_timer_buffer = sync_timer_read32() | 1;
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ pin_t pin = col_pins[x];
+ if (pin != NO_PIN) {
+#ifdef MATRIX_UNSELECT_DRIVE_HIGH
+ setPinOutput_writeHigh(pin);
+#else
+ setPinInput_high(pin);
+#endif
+ } else {
+ if (x == 0) {
+ HC595_output(0xFFFFFFFF);
+ power_on_indicator_timer_buffer = sync_timer_read32() | 1;
+ }
+ }
+ }
}
void select_all_cols(void) {
- if (col_pins[0] != NO_PIN) setPinOutput_writeLow(col_pins[0]);
- if (host_keyboard_led_state().caps_lock) {
- HC595_output(0x00000000 | (2 << 0));
- } else {
- HC595_output(0x00000000);
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ pin_t pin = col_pins[x];
+ if (pin != NO_PIN) {
+ setPinOutput_writeLow(pin);
+ } else {
+ if (x == 0) {
+ if (host_keyboard_led_state().caps_lock) {
+ HC595_output(0x00000000 | (2 << 0));
+ } else {
+ HC595_output(0x00000000);
+ }
+ }
+ }
}
}
@@ -245,11 +267,13 @@ 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_atomic(row_pins[x]);
+ setPinInput_high(row_pins[x]);
}
}
+
unselect_cols();
}
diff --git a/keyboards/keychron/q3_pro/q3_pro.c b/keyboards/keychron/q3_pro/q3_pro.c
index bd66427785..b6c9815d02 100755
--- a/keyboards/keychron/q3_pro/q3_pro.c
+++ b/keyboards/keychron/q3_pro/q3_pro.c
@@ -176,7 +176,8 @@ void matrix_scan_kb(void) {
#ifdef KC_BLUETOOTH_ENABLE
static void ckbt51_param_init(void) {
/* Set bluetooth device name */
- ckbt51_set_local_name(STR(PRODUCT));
+ // ckbt51_set_local_name(STR(PRODUCT));
+ ckbt51_set_local_name(PRODUCT);
/* Set bluetooth parameters */
module_param_t param = {.event_mode = 0x02,
.connected_idle_timeout = 7200,
@@ -204,6 +205,21 @@ void bluetooth_enter_disconnected_kb(uint8_t host_idx) {
}
}
+void ckbt51_default_ack_handler(uint8_t *data, uint8_t len) {
+ if (data[1] == 0x45) {
+ module_param_t param = {.event_mode = 0x02,
+ .connected_idle_timeout = 7200,
+ .pairing_timeout = 180,
+ .pairing_mode = 0,
+ .reconnect_timeout = 5,
+ .report_rate = 90,
+ .vendor_id_source = 1,
+ .verndor_id = 0, // Must be 0x3434
+ .product_id = PRODUCT_ID};
+ ckbt51_set_param(¶m);
+ }
+}
+
void bluetooth_pre_task(void) {
static uint8_t mode = 1;
diff --git a/keyboards/keychron/q3_pro/readme.md b/keyboards/keychron/q3_pro/readme.md
index 0929ad417e..d3008e7690 100755
--- a/keyboards/keychron/q3_pro/readme.md
+++ b/keyboards/keychron/q3_pro/readme.md
@@ -1,18 +1,20 @@
# Keychron Q3 Pro
+![Keychron Q3 Pro]()
+
A customizable 80% TKL keyboard.
* Keyboard Maintainer: [Keychron](https://github.com/keychron)
-* Hardware Supported: Keychron K2 Pro
-* Hardware Availability: [Keychron K2 Pro QMK/VIA Wireless Mechanical Keyboard](https://www.keychron.com/products/keychron-k2-pro-qmk-via-wireless-mechanical-keyboard)
+* Hardware Supported: Keychron Q3 Pro
+* Hardware Availability: [Keychron Q3 Pro]()
Make example for this keyboard (after setting up your build environment):
- make keychron/q3_pro/encoder/ansi/rgb:default
+ make keychron/q3_pro/ansi_encoder:default
Flashing example for this keyboard:
- make keychron/q3_pro/encoder/ansi/rgb:default:flash
+ make keychron/q3_pro/ansi_encoder:default:flash
**Reset Key**: Connect the USB cable, toggle mode switch to "Off", hold down the *Esc* key or reset button underneath space bar, then toggle then switch to "Cable".
diff --git a/keyboards/keychron/q3_pro/rules.mk b/keyboards/keychron/q3_pro/rules.mk
index 1697bc331e..5f5fafa281 100755
--- a/keyboards/keychron/q3_pro/rules.mk
+++ b/keyboards/keychron/q3_pro/rules.mk
@@ -7,9 +7,6 @@ EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
ENCODER_ENABLE = yes # Enable Encoder
DIP_SWITCH_ENABLE = yes
BLUETOOTH_ENABLE = no
From 75e4424287040ec570def18142390810a0b62389 Mon Sep 17 00:00:00 2001
From: lalalademaxiya1 <2831039915@qq.com>
Date: Wed, 15 Mar 2023 17:06:21 +0800
Subject: [PATCH 2/7] Update readme.md
---
keyboards/keychron/k13_pro/readme.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/keyboards/keychron/k13_pro/readme.md b/keyboards/keychron/k13_pro/readme.md
index 82fe3d7b26..eb6ffefcd3 100755
--- a/keyboards/keychron/k13_pro/readme.md
+++ b/keyboards/keychron/k13_pro/readme.md
@@ -1,10 +1,12 @@
# Keychron K13 Pro
+
+
A customizable 80% TKL keyboard.
* Keyboard Maintainer: [Keychron](https://github.com/keychron)
* Hardware Supported: Keychron K13 Pro
-* Hardware Availability: [Keychron K13 Pro](https://drive.google.com/file/d/17S4Afhfs4DmwBcnkvo94ipLIVgL3rsy7/view?usp=share_link)
+* Hardware Availability: [Keychron K13 Pro]()
Make example for this keyboard (after setting up your build environment):
From 1ff70d666a4c5f8ffa45adbdbd3f2628a4cbbdb4 Mon Sep 17 00:00:00 2001
From: lalalademaxiya1 <2831039915@qq.com>
Date: Thu, 16 Mar 2023 11:49:53 +0800
Subject: [PATCH 3/7] Added pal callback function for Q2Pro and Q3Pro
---
.../k10_pro/via_json/k10_pro_ansi_rgb.json | 510 +++++++++---------
.../k10_pro/via_json/k10_pro_ansi_white.json | 510 +++++++++---------
keyboards/keychron/k2_pro/jis/rgb/info.json | 2 +-
keyboards/keychron/k2_pro/jis/white/info.json | 2 +-
.../k2_pro/jis/white/keymaps/default/keymap.c | 16 +-
.../k2_pro/jis/white/keymaps/via/keymap.c | 16 +-
keyboards/keychron/k2_pro/readme.md | 2 +-
.../k2_pro/via_json/k2_pro_ansi_rgb.json | 354 ++++++------
.../k2_pro/via_json/k2_pro_ansi_white.json | 353 ++++++------
.../k2_pro/via_json/k2_pro_iso_rgb.json | 367 ++++++-------
.../k2_pro/via_json/k2_pro_iso_white.json | 368 ++++++-------
.../k3_pro/via_json/k3_pro_ansi_rgb.json | 354 ++++++------
.../k3_pro/via_json/k3_pro_ansi_white.json | 354 ++++++------
.../k3_pro/via_json/k3_pro_iso_rgb .json | 368 ++++++-------
.../k3_pro/via_json/k3_pro_iso_white.json | 365 +++++++------
.../k4_pro/via_json/k4_pro_ansi_rgb.json | 457 ++++++++--------
.../k4_pro/via_json/k4_pro_ansi_white.json | 457 ++++++++--------
.../k6_pro/via_json/k6_pro_ansi_rgb.json | 313 ++++++-----
.../k6_pro/via_json/k6_pro_ansi_white.json | 311 ++++++-----
.../k6_pro/via_json/k6_pro_iso_rgb.json | 329 +++++------
.../k6_pro/via_json/k6_pro_iso_white.json | 327 +++++------
.../k6_pro/via_json/k6_pro_jis_rgb.json | 62 +--
.../k7_pro/via_json/k7_pro_ansi_rgb.json | 307 ++++++-----
.../k7_pro/via_json/k7_pro_ansi_white.json | 307 ++++++-----
.../k8_pro/via_json/k8_pro_ansi_rgb.json | 404 +++++++-------
.../k8_pro/via_json/k8_pro_ansi_white.json | 402 +++++++-------
.../k8_pro/via_json/k8_pro_iso_rgb.json | 412 +++++++-------
.../k8_pro/via_json/k8_pro_iso_white.json | 410 +++++++-------
.../k8_pro/via_json/k8_pro_jis_rgb.json | 412 +++++++-------
.../k8_pro/via_json/k8_pro_jis_white.json | 412 +++++++-------
keyboards/keychron/q2_pro/q2_pro.c | 21 +
keyboards/keychron/q3_pro/q3_pro.c | 17 +
quantum/encoder.c | 17 +-
quantum/encoder.h | 1 +
34 files changed, 4729 insertions(+), 4590 deletions(-)
diff --git a/keyboards/keychron/k10_pro/via_json/k10_pro_ansi_rgb.json b/keyboards/keychron/k10_pro/via_json/k10_pro_ansi_rgb.json
index 0301d74da8..a63cc2a3c4 100644
--- a/keyboards/keychron/k10_pro/via_json/k10_pro_ansi_rgb.json
+++ b/keyboards/keychron/k10_pro/via_json/k10_pro_ansi_rgb.json
@@ -80,257 +80,265 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 6, "cols": 21},
-"layouts":{
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "x": 1.0,
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- {
- "x": 0.5
- },
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- {
- "x": 0.5
- },
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- {
- "x": 0.25
- },
- "0,14",
- "0,15",
- "0,16",
- {
- "x": 0.25
- },
- "0,17",
- "0,18",
- "0,19",
- "0,20"
- ],
- [
- {
- "y": 0.25
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "c": "#aaaaaa",
- "w": 2
- },
- "1,13",
- {
- "x": 0.25
- },
- "1,14",
- "1,15",
- "1,16",
- {
- "x": 0.25
- },
- "1,17",
- "1,18",
- "1,19",
- "1,20"
- ],
- [
- {
- "w": 1.5
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "w": 1.5
- },
- "2,13",
- {
- "c": "#aaaaaa"
- },
- {
- "x": 0.25
- },
- "2,14",
- "2,15",
- "2,16",
- {
- "x": 0.25
- },
- "2,17",
- "2,18",
- "2,19",
- {
- "h": 2
- },
- "2,20"
- ],
- [
- {
- "w":1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- {
- "c": "#777777",
- "w":2.25
- },
- "3,13",
- {
- "c": "#cccccc",
- "x": 3.5
- },
- "3,17",
- "3,18",
- "3,19"
- ],
- [
- {
- "c": "#aaaaaa",
- "w":2.25
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- {
- "c": "#aaaaaa",
- "w": 2.75
- },
- "4,13",
- {
- "x": 1.25,
- "c": "#777777"
- },
- "4,15",
- {
- "c": "#cccccc",
- "x": 1.25
- },
- "4,17",
- "4,18",
- "4,19",
- {
- "h": 2
- },
- "4,20"
- ],
- [
- {
- "c": "#aaaaaa",
- "w":1.25
- },
- "5,0",
- {
- "w":1.25
- },
- "5,1",
- {
- "w":1.25
- },
- "5,2",
- {
- "c": "#cccccc",
- "w": 6.25
- },
- "5,6",
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "5,10",
- {
- "w": 1.25
- },
- "5,11",
- {
- "w": 1.25,
- "c": "#cccccc"
- },
- "5,12",
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "5,13",
- {
- "x": 0.25,
- "c": "#777777"
- },
- "5,14",
- "5,15",
- "5,16",
- {
- "c": "#cccccc",
- "x": 0.25
- },
- "5,17",
- "5,18",
- "5,19"
- ]
-]
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "x": 1,
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "x": 0.5,
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ {
+ "x": 0.5,
+ "c": "#cccccc"
+ },
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "x": 0.25,
+ "c": "#aaaaaa"
+ },
+ "0,14",
+ "0,15",
+ "0,16",
+ {
+ "x": 0.25,
+ "c": "#cccccc"
+ },
+ "0,17",
+ "0,18",
+ "0,19",
+ "0,20"
+ ],
+ [
+ {
+ "y": 0.25,
+ "c": "#aaaaaa"
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ {
+ "x": 0.25
+ },
+ "1,14",
+ "1,15",
+ "1,16",
+ {
+ "x": 0.25,
+ "c": "#cccccc"
+ },
+ "1,17",
+ "1,18",
+ "1,19",
+ "1,20"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,13",
+ {
+ "x": 0.25
+ },
+ "2,14",
+ "2,15",
+ "2,16",
+ {
+ "x": 0.25,
+ "c": "#cccccc"
+ },
+ "2,17",
+ "2,18",
+ "2,19",
+ {
+ "h": 2
+ },
+ "2,20"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "3,13",
+ {
+ "x": 3.5,
+ "c": "#cccccc"
+ },
+ "3,17",
+ "3,18",
+ "3,19"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 2.75
+ },
+ "4,13",
+ {
+ "x": 1.25,
+ "c": "#777777"
+ },
+ "4,15",
+ {
+ "x": 1.25,
+ "c": "#cccccc"
+ },
+ "4,17",
+ "4,18",
+ "4,19",
+ {
+ "h": 2
+ },
+ "4,20"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,10",
+ {
+ "w": 1.25
+ },
+ "5,11",
+ {
+ "w": 1.25
+ },
+ "5,12",
+ {
+ "w": 1.25
+ },
+ "5,13",
+ {
+ "x": 0.25,
+ "c": "#777777"
+ },
+ "5,14",
+ "5,15",
+ "5,16",
+ {
+ "x": 0.25,
+ "c": "#cccccc"
+ },
+ "5,17",
+ "5,18",
+ "5,19"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k10_pro/via_json/k10_pro_ansi_white.json b/keyboards/keychron/k10_pro/via_json/k10_pro_ansi_white.json
index 1efc78fb18..a3ba225638 100644
--- a/keyboards/keychron/k10_pro/via_json/k10_pro_ansi_white.json
+++ b/keyboards/keychron/k10_pro/via_json/k10_pro_ansi_white.json
@@ -20,257 +20,265 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 6, "cols": 21},
-"layouts":{
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "x": 1.0,
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- {
- "x": 0.5
- },
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- {
- "x": 0.5
- },
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- {
- "x": 0.25
- },
- "0,14",
- "0,15",
- "0,16",
- {
- "x": 0.25
- },
- "0,17",
- "0,18",
- "0,19",
- "0,20"
- ],
- [
- {
- "y": 0.25
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "c": "#aaaaaa",
- "w": 2
- },
- "1,13",
- {
- "x": 0.25
- },
- "1,14",
- "1,15",
- "1,16",
- {
- "x": 0.25
- },
- "1,17",
- "1,18",
- "1,19",
- "1,20"
- ],
- [
- {
- "w": 1.5
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "w": 1.5
- },
- "2,13",
- {
- "c": "#aaaaaa"
- },
- {
- "x": 0.25
- },
- "2,14",
- "2,15",
- "2,16",
- {
- "x": 0.25
- },
- "2,17",
- "2,18",
- "2,19",
- {
- "h": 2
- },
- "2,20"
- ],
- [
- {
- "w":1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- {
- "c": "#777777",
- "w":2.25
- },
- "3,13",
- {
- "c": "#cccccc",
- "x": 3.5
- },
- "3,17",
- "3,18",
- "3,19"
- ],
- [
- {
- "c": "#aaaaaa",
- "w":2.25
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- {
- "c": "#aaaaaa",
- "w": 2.75
- },
- "4,13",
- {
- "x": 1.25,
- "c": "#777777"
- },
- "4,15",
- {
- "c": "#cccccc",
- "x": 1.25
- },
- "4,17",
- "4,18",
- "4,19",
- {
- "h": 2
- },
- "4,20"
- ],
- [
- {
- "c": "#aaaaaa",
- "w":1.25
- },
- "5,0",
- {
- "w":1.25
- },
- "5,1",
- {
- "w":1.25
- },
- "5,2",
- {
- "c": "#cccccc",
- "w": 6.25
- },
- "5,6",
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "5,10",
- {
- "w": 1.25
- },
- "5,11",
- {
- "w": 1.25,
- "c": "#cccccc"
- },
- "5,12",
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "5,13",
- {
- "x": 0.25,
- "c": "#777777"
- },
- "5,14",
- "5,15",
- "5,16",
- {
- "c": "#cccccc",
- "x": 0.25
- },
- "5,17",
- "5,18",
- "5,19"
- ]
-]
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "x": 1,
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "x": 0.5,
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ {
+ "x": 0.5,
+ "c": "#cccccc"
+ },
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "x": 0.25,
+ "c": "#aaaaaa"
+ },
+ "0,14",
+ "0,15",
+ "0,16",
+ {
+ "x": 0.25,
+ "c": "#cccccc"
+ },
+ "0,17",
+ "0,18",
+ "0,19",
+ "0,20"
+ ],
+ [
+ {
+ "y": 0.25,
+ "c": "#aaaaaa"
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ {
+ "x": 0.25
+ },
+ "1,14",
+ "1,15",
+ "1,16",
+ {
+ "x": 0.25,
+ "c": "#cccccc"
+ },
+ "1,17",
+ "1,18",
+ "1,19",
+ "1,20"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,13",
+ {
+ "x": 0.25
+ },
+ "2,14",
+ "2,15",
+ "2,16",
+ {
+ "x": 0.25,
+ "c": "#cccccc"
+ },
+ "2,17",
+ "2,18",
+ "2,19",
+ {
+ "h": 2
+ },
+ "2,20"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "3,13",
+ {
+ "x": 3.5,
+ "c": "#cccccc"
+ },
+ "3,17",
+ "3,18",
+ "3,19"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 2.75
+ },
+ "4,13",
+ {
+ "x": 1.25,
+ "c": "#777777"
+ },
+ "4,15",
+ {
+ "x": 1.25,
+ "c": "#cccccc"
+ },
+ "4,17",
+ "4,18",
+ "4,19",
+ {
+ "h": 2
+ },
+ "4,20"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,10",
+ {
+ "w": 1.25
+ },
+ "5,11",
+ {
+ "w": 1.25
+ },
+ "5,12",
+ {
+ "w": 1.25
+ },
+ "5,13",
+ {
+ "x": 0.25,
+ "c": "#777777"
+ },
+ "5,14",
+ "5,15",
+ "5,16",
+ {
+ "x": 0.25,
+ "c": "#cccccc"
+ },
+ "5,17",
+ "5,18",
+ "5,19"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k2_pro/jis/rgb/info.json b/keyboards/keychron/k2_pro/jis/rgb/info.json
index 8910572942..a7fb5bcdbf 100755
--- a/keyboards/keychron/k2_pro/jis/rgb/info.json
+++ b/keyboards/keychron/k2_pro/jis/rgb/info.json
@@ -5,7 +5,7 @@
"maintainer": "lokher",
"usb": {
"vid": "0x3434",
- "pid": "0x0223",
+ "pid": "0x0222",
"device_version": "1.0.0"
},
"processor": "STM32L432",
diff --git a/keyboards/keychron/k2_pro/jis/white/info.json b/keyboards/keychron/k2_pro/jis/white/info.json
index 8910572942..a1356e3eab 100755
--- a/keyboards/keychron/k2_pro/jis/white/info.json
+++ b/keyboards/keychron/k2_pro/jis/white/info.json
@@ -5,7 +5,7 @@
"maintainer": "lokher",
"usb": {
"vid": "0x3434",
- "pid": "0x0223",
+ "pid": "0x0225",
"device_version": "1.0.0"
},
"processor": "STM32L432",
diff --git a/keyboards/keychron/k2_pro/jis/white/keymaps/default/keymap.c b/keyboards/keychron/k2_pro/jis/white/keymaps/default/keymap.c
index 92dfaf4ce4..8fc7ec7e4e 100755
--- a/keyboards/keychron/k2_pro/jis/white/keymaps/default/keymap.c
+++ b/keyboards/keychron/k2_pro/jis/white/keymaps/default/keymap.c
@@ -26,7 +26,7 @@ enum layers{
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT(
- KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_DEL, RGB_MOD,
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_DEL, 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_INT3, KC_BSPC, KC_PGUP, // 32
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_PGDN, // 46
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_NUHS, KC_ENT, KC_HOME, // 61
@@ -34,15 +34,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LOPTN, KC_LCMMD, KC_LNG2, KC_SPC, KC_LNG1, KC_RCMMD,MO(MAC_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
[MAC_FN] = LAYOUT(
- KC_TRNS, 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_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, 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_TRNS, KC_TRNS, BL_TOGG,
KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ BL_TOGG, BL_STEP, BL_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, BL_DOWN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BAT_LVL, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[WIN_BASE] = LAYOUT(
- 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_DEL, RGB_MOD,
+ 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_DEL, 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_INT3, KC_PGUP,
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_PGDN,
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_NUHS, KC_ENT, KC_HOME,
@@ -50,10 +50,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_RALT, MO(WIN_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
[WIN_FN] = LAYOUT(
- KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, BL_TOGG,
KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ BL_TOGG, BL_STEP, BL_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, BL_DOWN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BAT_LVL, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
};
diff --git a/keyboards/keychron/k2_pro/jis/white/keymaps/via/keymap.c b/keyboards/keychron/k2_pro/jis/white/keymaps/via/keymap.c
index 92dfaf4ce4..8fc7ec7e4e 100755
--- a/keyboards/keychron/k2_pro/jis/white/keymaps/via/keymap.c
+++ b/keyboards/keychron/k2_pro/jis/white/keymaps/via/keymap.c
@@ -26,7 +26,7 @@ enum layers{
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT(
- KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_DEL, RGB_MOD,
+ KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LNPD, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNAP, KC_DEL, 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_INT3, KC_BSPC, KC_PGUP, // 32
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_PGDN, // 46
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_NUHS, KC_ENT, KC_HOME, // 61
@@ -34,15 +34,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LOPTN, KC_LCMMD, KC_LNG2, KC_SPC, KC_LNG1, KC_RCMMD,MO(MAC_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
[MAC_FN] = LAYOUT(
- KC_TRNS, 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_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, 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_TRNS, KC_TRNS, BL_TOGG,
KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ BL_TOGG, BL_STEP, BL_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, BL_DOWN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BAT_LVL, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[WIN_BASE] = LAYOUT(
- 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_DEL, RGB_MOD,
+ 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_DEL, 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_INT3, KC_PGUP,
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_PGDN,
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_NUHS, KC_ENT, KC_HOME,
@@ -50,10 +50,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_RALT, MO(WIN_FN),KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
[WIN_FN] = LAYOUT(
- KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, RGB_TOG,
+ KC_TRNS, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, BL_DOWN, BL_UP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, BL_TOGG,
KC_TRNS, BT_HST1, BT_HST2, BT_HST3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ BL_TOGG, BL_STEP, BL_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, BL_DOWN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BAT_LVL, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
};
diff --git a/keyboards/keychron/k2_pro/readme.md b/keyboards/keychron/k2_pro/readme.md
index 0fcad1af38..5eb8fa477e 100644
--- a/keyboards/keychron/k2_pro/readme.md
+++ b/keyboards/keychron/k2_pro/readme.md
@@ -1,6 +1,6 @@
# Keychron K2 Pro
-
+
A customizable 84 keys TKL keyboard.
diff --git a/keyboards/keychron/k2_pro/via_json/k2_pro_ansi_rgb.json b/keyboards/keychron/k2_pro/via_json/k2_pro_ansi_rgb.json
index 8f1a1cf01b..89ee59fbca 100644
--- a/keyboards/keychron/k2_pro/via_json/k2_pro_ansi_rgb.json
+++ b/keyboards/keychron/k2_pro/via_json/k2_pro_ansi_rgb.json
@@ -80,182 +80,186 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 6, "cols": 16},
"layouts": {
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- "0,13",
- "0,14",
- "0,15"
- ],
- [
- {
- "y": 0.25
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "c": "#aaaaaa",
- "w": 2
- },
- "1,13",
- "1,15"
- ],
- [
- {
- "w": 1.5
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "w": 1.5
- },
- "2,13",
- {
- "c": "#aaaaaa"
- },
- "2,15"
- ],
- [
- {
- "w": 1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- {
- "c": "#777777",
- "w": 2.25
- },
- "3,13",
- {
- "c": "#cccccc"
- },
- "3,15"
- ],
- [
- {
- "w": 2.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- {
- "c": "#aaaaaa",
- "w": 1.75
- },
- "4,12",
- {
- "c": "#777777"
- },
- "4,13",
- {
- "c": "#cccccc"
- },
- "4,15"
- ],
- [
- {
- "c": "#aaaaaa",
- "w": 1.25
- },
- "5,0",
- {
- "w": 1.25
- },
- "5,1",
- {
- "w": 1.25
- },
- "5,2",
- {
- "c": "#cccccc",
- "w": 6.25
- },
- "5,6",
-
- {
- "c": "#aaaaaa"
- },
- "5,9",
- "5,10",
- "5,11",
- {
- "c": "#777777"
- },
- "5,12",
- "5,13",
- "5,15"
- ]
-]
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ {
+ "c": "#cccccc"
+ },
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,13",
+ "0,14",
+ "0,15"
+ ],
+ [
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ "1,15"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,13",
+ "2,15"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "3,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,15"
+ ],
+ [
+ {
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "4,12",
+ {
+ "c": "#777777"
+ },
+ "4,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,9",
+ "5,10",
+ "5,11",
+ {
+ "c": "#777777"
+ },
+ "5,12",
+ "5,13",
+ "5,15"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k2_pro/via_json/k2_pro_ansi_white.json b/keyboards/keychron/k2_pro/via_json/k2_pro_ansi_white.json
index 40ca875373..fe6cf04c66 100644
--- a/keyboards/keychron/k2_pro/via_json/k2_pro_ansi_white.json
+++ b/keyboards/keychron/k2_pro/via_json/k2_pro_ansi_white.json
@@ -19,181 +19,186 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 6, "cols": 16},
"layouts": {
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- "0,13",
- "0,14",
- "0,15"
- ],
- [
- {
- "y": 0.25
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "c": "#aaaaaa",
- "w": 2
- },
- "1,13",
- "1,15"
- ],
- [
- {
- "w": 1.5
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "w": 1.5
- },
- "2,13",
- {
- "c": "#aaaaaa"
- },
- "2,15"
- ],
- [
- {
- "w": 1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- {
- "c": "#777777",
- "w": 2.25
- },
- "3,13",
- {
- "c": "#cccccc"
- },
- "3,15"
- ],
- [
- {
- "w": 2.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- {
- "c": "#aaaaaa",
- "w": 1.75
- },
- "4,12",
- {
- "c": "#777777"
- },
- "4,13",
- {
- "c": "#cccccc"
- },
- "4,15"
- ],
- [
- {
- "c": "#aaaaaa",
- "w": 1.25
- },
- "5,0",
- {
- "w": 1.25
- },
- "5,1",
- {
- "w": 1.25
- },
- "5,2",
- {
- "c": "#cccccc",
- "w": 6.25
- },
- "5,6",
- {
- "c": "#aaaaaa"
- },
- "5,9",
- "5,10",
- "5,11",
- {
- "c": "#777777"
- },
- "5,12",
- "5,13",
- "5,15"
- ]
-]
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ {
+ "c": "#cccccc"
+ },
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,13",
+ "0,14",
+ "0,15"
+ ],
+ [
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ "1,15"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,13",
+ "2,15"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "3,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,15"
+ ],
+ [
+ {
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "4,12",
+ {
+ "c": "#777777"
+ },
+ "4,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,9",
+ "5,10",
+ "5,11",
+ {
+ "c": "#777777"
+ },
+ "5,12",
+ "5,13",
+ "5,15"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k2_pro/via_json/k2_pro_iso_rgb.json b/keyboards/keychron/k2_pro/via_json/k2_pro_iso_rgb.json
index 94920bc47e..de9a24ab44 100644
--- a/keyboards/keychron/k2_pro/via_json/k2_pro_iso_rgb.json
+++ b/keyboards/keychron/k2_pro/via_json/k2_pro_iso_rgb.json
@@ -80,187 +80,194 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 6, "cols": 16},
"layouts": {
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- "0,13",
- "0,14",
- "0,15"
- ],
- [
- {
- "y": 0.25
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "c": "#aaaaaa",
- "w": 2
- },
- "1,13",
- "1,15"
- ],
- [
- {
- "w": 1.5
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "x": 0.25,
- "c": "#777777",
- "w": 1.25,
- "h": 2,
- "w2": 1.5,
- "h2": 1,
- "x2": -0.25
- },
- "2,13",
- {
- "c": "#aaaaaa"
- },
- "2,15"
- ],
- [
- {
- "w": 1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- "3,13",
- {
- "c": "#cccccc"
- },
- {
- "x": 1.25
- },
- "3,15"
- ],
- [
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,1",
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- {
- "c": "#aaaaaa",
- "w": 1.75
- },
- "4,12",
- {
- "c": "#777777"
- },
- "4,13",
- {
- "c": "#cccccc"
- },
- "4,15"
- ],
- [
- {
- "c": "#aaaaaa",
- "w": 1.25
- },
- "5,0",
- {
- "w": 1.25
- },
- "5,1",
- {
- "w": 1.25
- },
- "5,2",
- {
- "c": "#cccccc",
- "w": 6.25
- },
- "5,6",
- {
- "c": "#aaaaaa"
- },
- "5,9",
- "5,10",
- "5,11",
- {
- "c": "#777777"
- },
- "5,12",
- "5,13",
- "5,15"
- ]
-]
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ {
+ "c": "#cccccc"
+ },
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,13",
+ "0,14",
+ "0,15"
+ ],
+ [
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ "1,15"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "x": 0.25,
+ "c": "#777777",
+ "w": 1.25,
+ "h": 2,
+ "w2": 1.5,
+ "h2": 1,
+ "x2": -0.25
+ },
+ "2,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "2,15"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,13",
+ {
+ "x": 1.25
+ },
+ "3,15"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "4,0",
+ "4,1",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "4,12",
+ {
+ "c": "#777777"
+ },
+ "4,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,9",
+ "5,10",
+ "5,11",
+ {
+ "c": "#777777"
+ },
+ "5,12",
+ "5,13",
+ "5,15"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k2_pro/via_json/k2_pro_iso_white.json b/keyboards/keychron/k2_pro/via_json/k2_pro_iso_white.json
index 61d89dce22..d67f9f77ef 100644
--- a/keyboards/keychron/k2_pro/via_json/k2_pro_iso_white.json
+++ b/keyboards/keychron/k2_pro/via_json/k2_pro_iso_white.json
@@ -19,188 +19,194 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 6, "cols": 16},
"layouts": {
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- "0,13",
- "0,14",
- "0,15"
- ],
- [
- {
- "y": 0.25
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "c": "#aaaaaa",
- "w": 2
- },
- "1,13",
- "1,15"
- ],
- [
- {
- "w": 1.5
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "x": 0.25,
- "c": "#777777",
- "w": 1.25,
- "h": 2,
- "w2": 1.5,
- "h2": 1,
- "x2": -0.25
- },
- "2,13",
- {
- "c": "#aaaaaa"
- },
- "2,15"
- ],
- [
- {
- "w": 1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- "3,13",
- {
- "c": "#cccccc"
- },
- {
- "x": 1.25
- },
- "3,15"
- ],
- [
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,1",
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- {
- "c": "#aaaaaa",
- "w": 1.75
- },
- "4,12",
- {
- "c": "#777777"
- },
- "4,13",
- {
- "c": "#cccccc"
- },
- "4,15"
- ],
- [
- {
- "c": "#aaaaaa",
- "w": 1.25
- },
- "5,0",
- {
- "w": 1.25
- },
- "5,1",
- {
- "w": 1.25
- },
- "5,2",
- {
- "c": "#cccccc",
- "w": 6.25
- },
- "5,6",
-
- {
- "c": "#aaaaaa"
- },
- "5,9",
- "5,10",
- "5,11",
- {
- "c": "#777777"
- },
- "5,12",
- "5,13",
- "5,15"
- ]
-]
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ {
+ "c": "#cccccc"
+ },
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,13",
+ "0,14",
+ "0,15"
+ ],
+ [
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ "1,15"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "x": 0.25,
+ "c": "#777777",
+ "w": 1.25,
+ "h": 2,
+ "w2": 1.5,
+ "h2": 1,
+ "x2": -0.25
+ },
+ "2,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "2,15"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,13",
+ {
+ "x": 1.25
+ },
+ "3,15"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "4,0",
+ "4,1",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "4,12",
+ {
+ "c": "#777777"
+ },
+ "4,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,9",
+ "5,10",
+ "5,11",
+ {
+ "c": "#777777"
+ },
+ "5,12",
+ "5,13",
+ "5,15"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k3_pro/via_json/k3_pro_ansi_rgb.json b/keyboards/keychron/k3_pro/via_json/k3_pro_ansi_rgb.json
index e334217adb..c06e51c636 100644
--- a/keyboards/keychron/k3_pro/via_json/k3_pro_ansi_rgb.json
+++ b/keyboards/keychron/k3_pro/via_json/k3_pro_ansi_rgb.json
@@ -80,182 +80,186 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 6, "cols": 16},
"layouts": {
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- "0,13",
- "0,14",
- "0,15"
- ],
- [
- {
- "y": 0.25
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "c": "#aaaaaa",
- "w": 2
- },
- "1,13",
- "1,15"
- ],
- [
- {
- "w": 1.5
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "w": 1.5
- },
- "2,13",
- {
- "c": "#aaaaaa"
- },
- "2,15"
- ],
- [
- {
- "w": 1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- {
- "c": "#777777",
- "w": 2.25
- },
- "3,13",
- {
- "c": "#cccccc"
- },
- "3,15"
- ],
- [
- {
- "w": 2.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- {
- "c": "#aaaaaa",
- "w": 1.75
- },
- "4,13",
- {
- "c": "#777777"
- },
- "4,14",
- {
- "c": "#cccccc"
- },
- "4,15"
- ],
- [
- {
- "c": "#aaaaaa",
- "w": 1.25
- },
- "5,0",
- {
- "w": 1.25
- },
- "5,1",
- {
- "w": 1.25
- },
- "5,2",
- {
- "c": "#cccccc",
- "w": 6.25
- },
- "5,6",
-
- {
- "c": "#aaaaaa"
- },
- "5,10",
- "5,11",
- "5,12",
- {
- "c": "#777777"
- },
- "5,13",
- "5,14",
- "5,15"
- ]
-]
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ {
+ "c": "#cccccc"
+ },
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,13",
+ "0,14",
+ "0,15"
+ ],
+ [
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ "1,15"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,13",
+ "2,15"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "3,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,15"
+ ],
+ [
+ {
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "4,13",
+ {
+ "c": "#777777"
+ },
+ "4,14",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,10",
+ "5,11",
+ "5,12",
+ {
+ "c": "#777777"
+ },
+ "5,13",
+ "5,14",
+ "5,15"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k3_pro/via_json/k3_pro_ansi_white.json b/keyboards/keychron/k3_pro/via_json/k3_pro_ansi_white.json
index 95c17b6a4c..1784904397 100644
--- a/keyboards/keychron/k3_pro/via_json/k3_pro_ansi_white.json
+++ b/keyboards/keychron/k3_pro/via_json/k3_pro_ansi_white.json
@@ -19,182 +19,186 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 6, "cols": 16},
"layouts": {
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- "0,13",
- "0,14",
- "0,15"
- ],
- [
- {
- "y": 0.25
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "c": "#aaaaaa",
- "w": 2
- },
- "1,13",
- "1,15"
- ],
- [
- {
- "w": 1.5
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "w": 1.5
- },
- "2,13",
- {
- "c": "#aaaaaa"
- },
- "2,15"
- ],
- [
- {
- "w": 1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- {
- "c": "#777777",
- "w": 2.25
- },
- "3,13",
- {
- "c": "#cccccc"
- },
- "3,15"
- ],
- [
- {
- "w": 2.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- {
- "c": "#aaaaaa",
- "w": 1.75
- },
- "4,13",
- {
- "c": "#777777"
- },
- "4,14",
- {
- "c": "#cccccc"
- },
- "4,15"
- ],
- [
- {
- "c": "#aaaaaa",
- "w": 1.25
- },
- "5,0",
- {
- "w": 1.25
- },
- "5,1",
- {
- "w": 1.25
- },
- "5,2",
- {
- "c": "#cccccc",
- "w": 6.25
- },
- "5,6",
-
- {
- "c": "#aaaaaa"
- },
- "5,10",
- "5,11",
- "5,12",
- {
- "c": "#777777"
- },
- "5,13",
- "5,14",
- "5,15"
- ]
-]
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ {
+ "c": "#cccccc"
+ },
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,13",
+ "0,14",
+ "0,15"
+ ],
+ [
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ "1,15"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,13",
+ "2,15"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "3,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,15"
+ ],
+ [
+ {
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "4,13",
+ {
+ "c": "#777777"
+ },
+ "4,14",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,10",
+ "5,11",
+ "5,12",
+ {
+ "c": "#777777"
+ },
+ "5,13",
+ "5,14",
+ "5,15"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k3_pro/via_json/k3_pro_iso_rgb .json b/keyboards/keychron/k3_pro/via_json/k3_pro_iso_rgb .json
index a3375c5551..cd5bdd373f 100644
--- a/keyboards/keychron/k3_pro/via_json/k3_pro_iso_rgb .json
+++ b/keyboards/keychron/k3_pro/via_json/k3_pro_iso_rgb .json
@@ -20,188 +20,194 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 6, "cols": 16},
"layouts": {
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- "0,13",
- "0,14",
- "0,15"
- ],
- [
- {
- "y": 0.25
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "c": "#aaaaaa",
- "w": 2
- },
- "1,13",
- "1,15"
- ],
- [
- {
- "w": 1.5
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "x": 0.25,
- "c": "#777777",
- "w": 1.25,
- "h": 2,
- "w2": 1.5,
- "h2": 1,
- "x2": -0.25
- },
- "2,13",
- {
- "c": "#aaaaaa"
- },
- "2,15"
- ],
- [
- {
- "w": 1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- "3,13",
- {
- "c": "#cccccc"
- },
- {
- "x": 1.25
- },
- "3,15"
- ],
- [
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,1",
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- {
- "c": "#aaaaaa",
- "w": 1.75
- },
- "4,13",
- {
- "c": "#777777"
- },
- "4,14",
- {
- "c": "#cccccc"
- },
- "4,15"
- ],
- [
- {
- "c": "#aaaaaa",
- "w": 1.25
- },
- "5,0",
- {
- "w": 1.25
- },
- "5,1",
- {
- "w": 1.25
- },
- "5,2",
- {
- "c": "#cccccc",
- "w": 6.25
- },
- "5,6",
-
- {
- "c": "#aaaaaa"
- },
- "5,10",
- "5,11",
- "5,12",
- {
- "c": "#777777"
- },
- "5,13",
- "5,14",
- "5,15"
- ]
-]
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ {
+ "c": "#cccccc"
+ },
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,13",
+ "0,14",
+ "0,15"
+ ],
+ [
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ "1,15"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "x": 0.25,
+ "c": "#777777",
+ "w": 1.25,
+ "h": 2,
+ "w2": 1.5,
+ "h2": 1,
+ "x2": -0.25
+ },
+ "2,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "2,15"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,13",
+ {
+ "x": 1.25
+ },
+ "3,15"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "4,0",
+ "4,1",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "4,13",
+ {
+ "c": "#777777"
+ },
+ "4,14",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,10",
+ "5,11",
+ "5,12",
+ {
+ "c": "#777777"
+ },
+ "5,13",
+ "5,14",
+ "5,15"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k3_pro/via_json/k3_pro_iso_white.json b/keyboards/keychron/k3_pro/via_json/k3_pro_iso_white.json
index 185b0c7831..e855ccac6d 100644
--- a/keyboards/keychron/k3_pro/via_json/k3_pro_iso_white.json
+++ b/keyboards/keychron/k3_pro/via_json/k3_pro_iso_white.json
@@ -22,184 +22,191 @@
],
"matrix": {"rows": 6, "cols": 16},
"layouts": {
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- "0,13",
- "0,14",
- "0,15"
- ],
- [
- {
- "y": 0.25
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "c": "#aaaaaa",
- "w": 2
- },
- "1,13",
- "1,15"
- ],
- [
- {
- "w": 1.5
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "x": 0.25,
- "c": "#777777",
- "w": 1.25,
- "h": 2,
- "w2": 1.5,
- "h2": 1,
- "x2": -0.25
- },
- "2,13",
- {
- "c": "#aaaaaa"
- },
- "2,15"
- ],
- [
- {
- "w": 1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- "3,13",
- {
- "c": "#cccccc"
- },
- {
- "x": 1.25
- },
- "3,15"
- ],
- [
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,1",
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- {
- "c": "#aaaaaa",
- "w": 1.75
- },
- "4,13",
- {
- "c": "#777777"
- },
- "4,14",
- {
- "c": "#cccccc"
- },
- "4,15"
- ],
- [
- {
- "c": "#aaaaaa",
- "w": 1.25
- },
- "5,0",
- {
- "w": 1.25
- },
- "5,1",
- {
- "w": 1.25
- },
- "5,2",
- {
- "c": "#cccccc",
- "w": 6.25
- },
- "5,6",
- {
- "c": "#aaaaaa"
- },
- "5,10",
- "5,11",
- "5,12",
- {
- "c": "#777777"
- },
- "5,13",
- "5,14",
- "5,15"
- ]
-]
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ {
+ "c": "#cccccc"
+ },
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,13",
+ "0,14",
+ "0,15"
+ ],
+ [
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ "1,15"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "x": 0.25,
+ "c": "#777777",
+ "w": 1.25,
+ "h": 2,
+ "w2": 1.5,
+ "h2": 1,
+ "x2": -0.25
+ },
+ "2,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "2,15"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,13",
+ {
+ "x": 1.25
+ },
+ "3,15"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "4,0",
+ "4,1",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "4,13",
+ {
+ "c": "#777777"
+ },
+ "4,14",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,10",
+ "5,11",
+ "5,12",
+ {
+ "c": "#777777"
+ },
+ "5,13",
+ "5,14",
+ "5,15"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k4_pro/via_json/k4_pro_ansi_rgb.json b/keyboards/keychron/k4_pro/via_json/k4_pro_ansi_rgb.json
index daf83d4802..8db94e1c66 100644
--- a/keyboards/keychron/k4_pro/via_json/k4_pro_ansi_rgb.json
+++ b/keyboards/keychron/k4_pro/via_json/k4_pro_ansi_rgb.json
@@ -80,228 +80,241 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 6, "cols": 18},
-"layouts":{
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- "0,13",
- "0,14",
- {
- "x":0.55
- },
- "0,15",
- "0,16",
- "0,17",
- "3,17"
- ],
- [
- {
- "y":0.26
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "c": "#aaaaaa",
- "w": 2.00
- },
- "1,13",
- {
- "x":0.55,
- "c": "#cccccc"
- },
- "1,14",
- "1,15",
- "1,16",
- "1,17"
- ],
- [
- {
- "w":1.50
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "w":1.50
- },
- "2,13",
- {
- "c": "#aaaaaa",
- "x":0.56
- },
- "2,14",
- "2,15",
- "2,16",
- {
- "h":2.00
- },
- "2,17"
- ],
- [
- {
- "w":1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- {
- "c": "#777777",
- "w":2.25
- },
- "3,13",
- {
- "x":0.56,
- "c": "#cccccc"
- },
- "3,14",
- "3,15",
- "3,16"
- ],
- [
- {
- "c": "#aaaaaa",
- "w":2.25
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- {
- "c": "#aaaaaa",
- "w":1.75
- },
- "4,12",
- {
- "x":0.28,
- "y": 0.25,
- "c": "#777777"
- },
- "4,13",
- {
- "x":0.28,
- "y": -0.25,
- "c": "#cccccc"
- },
- "4,14",
- "4,15",
- "4,16",
- {
- "h":2
- },
- "4,17"
- ],
- [
- {
- "c": "#aaaaaa",
- "w":1.25
- },
- "5,0",
- {
- "w":1.25
- },
- "5,1",
- {
- "w":1.25
- },
- "5,2",
- {
- "c": "#cccccc",
- "w":6.25
- },
- "5,6",
- {
- "c": "#aaaaaa"
- },
- "5,10",
- {
- "c": "#cccccc"
- },
- "5,11",
- {
- "c": "#aaaaaa"
- },
- "5,12",
- {
- "x":0.28,
- "y": 0.25,
- "c": "#777777"
- },
- "5,13",
- "5,14",
- "5,15",
- {
- "x":0.28,
- "y": -0.25,
- "c": "#cccccc"
- },
- "5,16",
- "5,17"
- ]]
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ {
+ "c": "#cccccc"
+ },
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,13",
+ "0,14",
+ {
+ "x": 0.5500000000000007
+ },
+ "0,15",
+ "0,16",
+ "0,17",
+ "3,17"
+ ],
+ [
+ {
+ "y": 0.26
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ {
+ "x": 0.5500000000000007,
+ "c": "#cccccc"
+ },
+ "1,14",
+ "1,15",
+ "1,16",
+ "1,17"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,13",
+ {
+ "x": 0.5600000000000005,
+ "c": "#cccccc"
+ },
+ "2,14",
+ "2,15",
+ "2,16",
+ {
+ "h": 2
+ },
+ "2,17"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "3,13",
+ {
+ "x": 0.5600000000000005,
+ "c": "#cccccc"
+ },
+ "3,14",
+ "3,15",
+ "3,16"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "4,12",
+ {
+ "x": 1.5599999999999987,
+ "c": "#cccccc"
+ },
+ "4,14",
+ "4,15",
+ "4,16",
+ {
+ "h": 2
+ },
+ "4,17"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 14.28,
+ "c": "#777777"
+ },
+ "4,13"
+ ],
+ [
+ {
+ "y": -0.25,
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,10",
+ "5,11",
+ "5,12",
+ {
+ "x": 3.5600000000000023,
+ "c": "#cccccc"
+ },
+ "5,16",
+ "5,17"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 13.28,
+ "c": "#777777"
+ },
+ "5,13",
+ "5,14",
+ "5,15"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k4_pro/via_json/k4_pro_ansi_white.json b/keyboards/keychron/k4_pro/via_json/k4_pro_ansi_white.json
index 15a66ad702..a26782c88d 100644
--- a/keyboards/keychron/k4_pro/via_json/k4_pro_ansi_white.json
+++ b/keyboards/keychron/k4_pro/via_json/k4_pro_ansi_white.json
@@ -19,228 +19,241 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 6, "cols": 18},
-"layouts":{
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- "0,13",
- "0,14",
- {
- "x":0.55
- },
- "0,15",
- "0,16",
- "0,17",
- "3,17"
- ],
- [
- {
- "y":0.26
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "c": "#aaaaaa",
- "w": 2.00
- },
- "1,13",
- {
- "x":0.55,
- "c": "#cccccc"
- },
- "1,14",
- "1,15",
- "1,16",
- "1,17"
- ],
- [
- {
- "w":1.50
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "w":1.50
- },
- "2,13",
- {
- "c": "#aaaaaa",
- "x":0.56
- },
- "2,14",
- "2,15",
- "2,16",
- {
- "h":2.00
- },
- "2,17"
- ],
- [
- {
- "w":1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- {
- "c": "#777777",
- "w":2.25
- },
- "3,13",
- {
- "x":0.56,
- "c": "#cccccc"
- },
- "3,14",
- "3,15",
- "3,16"
- ],
- [
- {
- "c": "#aaaaaa",
- "w":2.25
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- {
- "c": "#aaaaaa",
- "w":1.75
- },
- "4,12",
- {
- "x":0.28,
- "y": 0.25,
- "c": "#777777"
- },
- "4,13",
- {
- "x":0.28,
- "y": -0.25,
- "c": "#cccccc"
- },
- "4,14",
- "4,15",
- "4,16",
- {
- "h":2
- },
- "4,17"
- ],
- [
- {
- "c": "#aaaaaa",
- "w":1.25
- },
- "5,0",
- {
- "w":1.25
- },
- "5,1",
- {
- "w":1.25
- },
- "5,2",
- {
- "c": "#cccccc",
- "w":6.25
- },
- "5,6",
- {
- "c": "#aaaaaa"
- },
- "5,10",
- {
- "c": "#cccccc"
- },
- "5,11",
- {
- "c": "#aaaaaa"
- },
- "5,12",
- {
- "x":0.28,
- "y": 0.25,
- "c": "#777777"
- },
- "5,13",
- "5,14",
- "5,15",
- {
- "x":0.28,
- "y": -0.25,
- "c": "#cccccc"
- },
- "5,16",
- "5,17"
- ]]
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ {
+ "c": "#cccccc"
+ },
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,13",
+ "0,14",
+ {
+ "x": 0.5500000000000007
+ },
+ "0,15",
+ "0,16",
+ "0,17",
+ "3,17"
+ ],
+ [
+ {
+ "y": 0.26
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ {
+ "x": 0.5500000000000007,
+ "c": "#cccccc"
+ },
+ "1,14",
+ "1,15",
+ "1,16",
+ "1,17"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,13",
+ {
+ "x": 0.5600000000000005,
+ "c": "#cccccc"
+ },
+ "2,14",
+ "2,15",
+ "2,16",
+ {
+ "h": 2
+ },
+ "2,17"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "3,13",
+ {
+ "x": 0.5600000000000005,
+ "c": "#cccccc"
+ },
+ "3,14",
+ "3,15",
+ "3,16"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "4,12",
+ {
+ "x": 1.5599999999999987,
+ "c": "#cccccc"
+ },
+ "4,14",
+ "4,15",
+ "4,16",
+ {
+ "h": 2
+ },
+ "4,17"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 14.28,
+ "c": "#777777"
+ },
+ "4,13"
+ ],
+ [
+ {
+ "y": -0.25,
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,10",
+ "5,11",
+ "5,12",
+ {
+ "x": 3.5600000000000023,
+ "c": "#cccccc"
+ },
+ "5,16",
+ "5,17"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 13.28,
+ "c": "#777777"
+ },
+ "5,13",
+ "5,14",
+ "5,15"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k6_pro/via_json/k6_pro_ansi_rgb.json b/keyboards/keychron/k6_pro/via_json/k6_pro_ansi_rgb.json
index 39f1933b08..284e9ed2d3 100644
--- a/keyboards/keychron/k6_pro/via_json/k6_pro_ansi_rgb.json
+++ b/keyboards/keychron/k6_pro/via_json/k6_pro_ansi_rgb.json
@@ -80,163 +80,162 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 5, "cols": 15},
- "layouts":{
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- {
- "w":2.00
- },
- "0,13",
- {
- "c": "#cccccc"
- },
- "0,14"
- ],
- [
- {
- "w":1.50,
- "c": "#aaaaaa"
- },
- "1,0",
- {
- "c": "#cccccc"
- },
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "w":1.50
- },
- "1,13",
- "1,14"
- ],
- [
- {
- "w":1.75,
- "c": "#aaaaaa"
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- {
- "w":2.25,
- "c": "#777777"
- },
- "2,13",
- {
- "c": "#cccccc"
- },
- "2,14"
- ],
- [
- {
- "w":2.25,
- "c": "#aaaaaa"
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- {
- "w":1.75,
- "c": "#aaaaaa"
- },
- "3,12",
- {
- "c": "#777777"
- },
- "3,13",
- {
- "c": "#cccccc"
- },
- "3,14"
- ],
- [
- {
- "w":1.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "w":1.25
- },
- "4,1",
- {
- "w":1.25
- },
- "4,2",
- {
- "w":6.25,
- "c": "#cccccc"
- },
- "4,6",
- {
- "c": "#aaaaaa"
- },
- "4,9",
- {
- "c": "#cccccc"
- },
- "4,10",
- "4,11",
- {
- "c": "#777777"
- },
- "4,12",
- "4,13",
- "4,14"
- ]]
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ {
+ "c": "#cccccc"
+ },
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "0,13",
+ "0,14"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "1,13",
+ "1,14"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "2,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "2,14"
+ ],
+ [
+ {
+ "w": 2.25
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "3,12",
+ {
+ "c": "#777777"
+ },
+ "3,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,14"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "4,0",
+ {
+ "w": 1.25
+ },
+ "4,1",
+ {
+ "w": 1.25
+ },
+ "4,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "4,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#777777"
+ },
+ "4,12",
+ "4,13",
+ "4,14"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k6_pro/via_json/k6_pro_ansi_white.json b/keyboards/keychron/k6_pro/via_json/k6_pro_ansi_white.json
index 26d6bf7834..84c85cdd1f 100644
--- a/keyboards/keychron/k6_pro/via_json/k6_pro_ansi_white.json
+++ b/keyboards/keychron/k6_pro/via_json/k6_pro_ansi_white.json
@@ -21,161 +21,160 @@
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
],
"matrix": {"rows": 5, "cols": 15},
- "layouts":{
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- {
- "w":2.00
- },
- "0,13",
- {
- "c": "#cccccc"
- },
- "0,14"
- ],
- [
- {
- "w":1.50,
- "c": "#aaaaaa"
- },
- "1,0",
- {
- "c": "#cccccc"
- },
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "w":1.50
- },
- "1,13",
- "1,14"
- ],
- [
- {
- "w":1.75,
- "c": "#aaaaaa"
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- {
- "w":2.25,
- "c": "#777777"
- },
- "2,13",
- {
- "c": "#cccccc"
- },
- "2,14"
- ],
- [
- {
- "w":2.25,
- "c": "#aaaaaa"
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- {
- "w":1.75,
- "c": "#aaaaaa"
- },
- "3,12",
- {
- "c": "#777777"
- },
- "3,13",
- {
- "c": "#cccccc"
- },
- "3,14"
- ],
- [
- {
- "w":1.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "w":1.25
- },
- "4,1",
- {
- "w":1.25
- },
- "4,2",
- {
- "w":6.25,
- "c": "#cccccc"
- },
- "4,6",
- {
- "c": "#aaaaaa"
- },
- "4,9",
- {
- "c": "#cccccc"
- },
- "4,10",
- "4,11",
- {
- "c": "#777777"
- },
- "4,12",
- "4,13",
- "4,14"
- ]]
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ {
+ "c": "#cccccc"
+ },
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "0,13",
+ "0,14"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "1,13",
+ "1,14"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "2,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "2,14"
+ ],
+ [
+ {
+ "w": 2.25
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "3,12",
+ {
+ "c": "#777777"
+ },
+ "3,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,14"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "4,0",
+ {
+ "w": 1.25
+ },
+ "4,1",
+ {
+ "w": 1.25
+ },
+ "4,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "4,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#777777"
+ },
+ "4,12",
+ "4,13",
+ "4,14"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k6_pro/via_json/k6_pro_iso_rgb.json b/keyboards/keychron/k6_pro/via_json/k6_pro_iso_rgb.json
index 47519ca522..9addc88194 100644
--- a/keyboards/keychron/k6_pro/via_json/k6_pro_iso_rgb.json
+++ b/keyboards/keychron/k6_pro/via_json/k6_pro_iso_rgb.json
@@ -80,170 +80,171 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 5, "cols": 15},
- "layouts":{
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- {
- "w":2.00
- },
- "0,13",
- {
- "c": "#cccccc"
- },
- "0,14"
- ],
- [
- {
- "w":1.50,
- "c": "#aaaaaa"
- },
- "1,0",
- {
- "c": "#cccccc"
- },
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "x": 0.25,
- "c": "#777777",
- "w": 1.25,
- "h": 2,
- "w2": 1.5,
- "h2": 1,
- "x2": -0.25
- },
- "1,13",
- {
- "c": "#cccccc"
- },
- "1,14"
- ],
- [
- {
- "w":1.75,
- "c": "#aaaaaa"
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,13",
- {
- "x": 1.25,
- "c": "#cccccc"
- },
- "2,14"
- ],
- [
- {
- "w":1.25,
- "c": "#aaaaaa"
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- {
- "w":1.75,
- "c": "#aaaaaa"
- },
- "3,12",
- {
- "c": "#777777"
- },
- "3,13",
- {
- "c": "#cccccc"
- },
- "3,14"
- ],
- [
- {
- "w":1.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "w":1.25
- },
- "4,1",
- {
- "w":1.25
- },
- "4,2",
- {
- "w":6.25,
- "c": "#cccccc"
- },
- "4,6",
- {
- "c": "#aaaaaa"
- },
- "4,9",
- {
- "c": "#cccccc"
- },
- "4,10",
- "4,11",
- {
- "c": "#777777"
- },
- "4,12",
- "4,13",
- "4,14"
- ]]
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "w":2.00
+ },
+ "0,13",
+ {
+ "c": "#cccccc"
+ },
+ "0,14"
+ ],
+ [
+ {
+ "w":1.50,
+ "c": "#aaaaaa"
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "x": 0.25,
+ "c": "#777777",
+ "w": 1.25,
+ "h": 2,
+ "w2": 1.5,
+ "h2": 1,
+ "x2": -0.25
+ },
+ "1,13",
+ {
+ "c": "#cccccc"
+ },
+ "1,14"
+ ],
+ [
+ {
+ "w":1.75,
+ "c": "#aaaaaa"
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,13",
+ {
+ "x": 1.25,
+ "c": "#cccccc"
+ },
+ "2,14"
+ ],
+ [
+ {
+ "w":1.25,
+ "c": "#aaaaaa"
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "w":1.75,
+ "c": "#aaaaaa"
+ },
+ "3,12",
+ {
+ "c": "#777777"
+ },
+ "3,13",
+ {
+ "c": "#cccccc"
+ },
+ "3,14"
+ ],
+ [
+ {
+ "w":1.25,
+ "c": "#aaaaaa"
+ },
+ "4,0",
+ {
+ "w":1.25
+ },
+ "4,1",
+ {
+ "w":1.25
+ },
+ "4,2",
+ {
+ "w":6.25,
+ "c": "#cccccc"
+ },
+ "4,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,9",
+ {
+ "c": "#cccccc"
+ },
+ "4,10",
+ "4,11",
+ {
+ "c": "#777777"
+ },
+ "4,12",
+ "4,13",
+ "4,14"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k6_pro/via_json/k6_pro_iso_white.json b/keyboards/keychron/k6_pro/via_json/k6_pro_iso_white.json
index c2bffbad7c..209bb52afd 100644
--- a/keyboards/keychron/k6_pro/via_json/k6_pro_iso_white.json
+++ b/keyboards/keychron/k6_pro/via_json/k6_pro_iso_white.json
@@ -21,168 +21,169 @@
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
],
"matrix": {"rows": 5, "cols": 15},
- "layouts":{
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- {
- "w":2.00
- },
- "0,13",
- {
- "c": "#cccccc"
- },
- "0,14"
- ],
- [
- {
- "w":1.50,
- "c": "#aaaaaa"
- },
- "1,0",
- {
- "c": "#cccccc"
- },
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "x": 0.25,
- "c": "#777777",
- "w": 1.25,
- "h": 2,
- "w2": 1.5,
- "h2": 1,
- "x2": -0.25
- },
- "1,13",
- {
- "c": "#cccccc"
- },
- "1,14"
- ],
- [
- {
- "w":1.75,
- "c": "#aaaaaa"
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,13",
- {
- "x": 1.25,
- "c": "#cccccc"
- },
- "2,14"
- ],
- [
- {
- "w":1.25,
- "c": "#aaaaaa"
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- {
- "w":1.75,
- "c": "#aaaaaa"
- },
- "3,12",
- {
- "c": "#777777"
- },
- "3,13",
- {
- "c": "#cccccc"
- },
- "3,14"
- ],
- [
- {
- "w":1.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "w":1.25
- },
- "4,1",
- {
- "w":1.25
- },
- "4,2",
- {
- "w":6.25,
- "c": "#cccccc"
- },
- "4,6",
- {
- "c": "#aaaaaa"
- },
- "4,9",
- {
- "c": "#cccccc"
- },
- "4,10",
- "4,11",
- {
- "c": "#777777"
- },
- "4,12",
- "4,13",
- "4,14"
- ]]
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "w":2.00
+ },
+ "0,13",
+ {
+ "c": "#cccccc"
+ },
+ "0,14"
+ ],
+ [
+ {
+ "w":1.50,
+ "c": "#aaaaaa"
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "x": 0.25,
+ "c": "#777777",
+ "w": 1.25,
+ "h": 2,
+ "w2": 1.5,
+ "h2": 1,
+ "x2": -0.25
+ },
+ "1,13",
+ {
+ "c": "#cccccc"
+ },
+ "1,14"
+ ],
+ [
+ {
+ "w":1.75,
+ "c": "#aaaaaa"
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,13",
+ {
+ "x": 1.25,
+ "c": "#cccccc"
+ },
+ "2,14"
+ ],
+ [
+ {
+ "w":1.25,
+ "c": "#aaaaaa"
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "w":1.75,
+ "c": "#aaaaaa"
+ },
+ "3,12",
+ {
+ "c": "#777777"
+ },
+ "3,13",
+ {
+ "c": "#cccccc"
+ },
+ "3,14"
+ ],
+ [
+ {
+ "w":1.25,
+ "c": "#aaaaaa"
+ },
+ "4,0",
+ {
+ "w":1.25
+ },
+ "4,1",
+ {
+ "w":1.25
+ },
+ "4,2",
+ {
+ "w":6.25,
+ "c": "#cccccc"
+ },
+ "4,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,9",
+ {
+ "c": "#cccccc"
+ },
+ "4,10",
+ "4,11",
+ {
+ "c": "#777777"
+ },
+ "4,12",
+ "4,13",
+ "4,14"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k6_pro/via_json/k6_pro_jis_rgb.json b/keyboards/keychron/k6_pro/via_json/k6_pro_jis_rgb.json
index a9ddb73821..515e233a3f 100644
--- a/keyboards/keychron/k6_pro/via_json/k6_pro_jis_rgb.json
+++ b/keyboards/keychron/k6_pro/via_json/k6_pro_jis_rgb.json
@@ -80,11 +80,11 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 5, "cols": 15},
"layouts": {
"keymap": [
- [
+ [
{
"c": "#777777"
},
@@ -96,25 +96,30 @@
"0,2",
"0,3",
"0,4",
+ {
+ "c": "#aaaaaa"
+ },
"0,5",
"0,6",
"0,7",
"0,8",
"0,9",
- "0,10",
- "0,11",
- "0,12",
- "2,12",
- "0,13",
{
"c": "#cccccc"
},
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "2,12",
+ "0,13",
"0,14"
],
[
{
- "w":1.50,
- "c": "#aaaaaa"
+ "w": 1.5
},
"1,0",
{
@@ -143,14 +148,13 @@
},
"1,13",
{
- "c": "#cccccc"
+ "c": "#aaaaaa"
},
"1,14"
],
[
{
- "w":1.75,
- "c": "#aaaaaa"
+ "w": 1.75
},
"2,0",
{
@@ -167,17 +171,18 @@
"2,9",
"2,10",
"2,11",
+ {
+ "c": "#aaaaaa"
+ },
"2,13",
{
- "x": 1.25,
- "c": "#cccccc"
+ "x": 1.25
},
"2,14"
],
[
{
- "w":2.25,
- "c": "#aaaaaa"
+ "w": 2.25
},
"3,0",
{
@@ -193,38 +198,30 @@
"3,9",
"3,10",
"3,11",
- "3,12",
{
- "w":1.75,
"c": "#aaaaaa"
},
- "3,13",
+ "3,12",
{
- "c": "#cccccc"
+ "w": 1.75
},
+ "3,13",
"3,14"
],
[
{
- "w":1.25,
- "c": "#aaaaaa"
+ "w": 1.25
},
"4,0",
- {
- "w":1
- },
"4,1",
{
- "w":1.25
+ "w": 1.25
},
"4,2",
- {
- "w":1,
- "c": "#cccccc"
- },
"4,3",
{
- "w":4.5
+ "c": "#cccccc",
+ "w": 4.5
},
"4,6",
{
@@ -232,9 +229,6 @@
},
"4,8",
"4,9",
- {
- "c": "#cccccc"
- },
"4,10",
"4,11",
{
diff --git a/keyboards/keychron/k7_pro/via_json/k7_pro_ansi_rgb.json b/keyboards/keychron/k7_pro/via_json/k7_pro_ansi_rgb.json
index a94b23cdec..50b05af2a7 100644
--- a/keyboards/keychron/k7_pro/via_json/k7_pro_ansi_rgb.json
+++ b/keyboards/keychron/k7_pro/via_json/k7_pro_ansi_rgb.json
@@ -80,163 +80,156 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 5, "cols": 16},
- "layouts":{
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- {
- "w":2.00
- },
- "0,13",
- {
- "c": "#cccccc"
- },
- "0,15"
- ],
- [
- {
- "w":1.50,
- "c": "#aaaaaa"
- },
- "1,0",
- {
- "c": "#cccccc"
- },
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "w":1.50
- },
- "1,13",
- "1,15"
- ],
- [
- {
- "w":1.75,
- "c": "#aaaaaa"
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- {
- "w":2.25,
- "c": "#777777"
- },
- "2,13",
- {
- "c": "#cccccc"
- },
- "2,15"
- ],
- [
- {
- "w":2.25,
- "c": "#aaaaaa"
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- {
- "w":1.75,
- "c": "#aaaaaa"
- },
- "3,13",
- {
- "c": "#777777"
- },
- "3,14",
- {
- "c": "#cccccc"
- },
- "3,15"
- ],
- [
- {
- "w":1.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "w":1.25
- },
- "4,1",
- {
- "w":1.25
- },
- "4,2",
- {
- "w":6.25,
- "c": "#cccccc"
- },
- "4,6",
- {
- "c": "#aaaaaa"
- },
- "4,10",
- {
- "c": "#cccccc"
- },
- "4,11",
- "4,12",
- {
- "c": "#777777"
- },
- "4,13",
- "4,14",
- "4,15"
- ]]
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "0,13",
+ "0,15"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "1,13",
+ "1,15"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "2,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "2,15"
+ ],
+ [
+ {
+ "w": 2.25
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "3,13",
+ {
+ "c": "#777777"
+ },
+ "3,14",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,15"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "4,0",
+ {
+ "w": 1.25
+ },
+ "4,1",
+ {
+ "w": 1.25
+ },
+ "4,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "4,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,10",
+ "4,11",
+ "4,12",
+ {
+ "c": "#777777"
+ },
+ "4,13",
+ "4,14",
+ "4,15"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k7_pro/via_json/k7_pro_ansi_white.json b/keyboards/keychron/k7_pro/via_json/k7_pro_ansi_white.json
index 3769ee5876..9d33e3a728 100644
--- a/keyboards/keychron/k7_pro/via_json/k7_pro_ansi_white.json
+++ b/keyboards/keychron/k7_pro/via_json/k7_pro_ansi_white.json
@@ -19,163 +19,156 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 5, "cols": 16},
- "layouts":{
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- {
- "w":2.00
- },
- "0,13",
- {
- "c": "#cccccc"
- },
- "0,15"
- ],
- [
- {
- "w":1.50,
- "c": "#aaaaaa"
- },
- "1,0",
- {
- "c": "#cccccc"
- },
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "w":1.50
- },
- "1,13",
- "1,15"
- ],
- [
- {
- "w":1.75,
- "c": "#aaaaaa"
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- {
- "w":2.25,
- "c": "#777777"
- },
- "2,13",
- {
- "c": "#cccccc"
- },
- "2,15"
- ],
- [
- {
- "w":2.25,
- "c": "#aaaaaa"
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- {
- "w":1.75,
- "c": "#aaaaaa"
- },
- "3,13",
- {
- "c": "#777777"
- },
- "3,14",
- {
- "c": "#cccccc"
- },
- "3,15"
- ],
- [
- {
- "w":1.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "w":1.25
- },
- "4,1",
- {
- "w":1.25
- },
- "4,2",
- {
- "w":6.25,
- "c": "#cccccc"
- },
- "4,6",
- {
- "c": "#aaaaaa"
- },
- "4,10",
- {
- "c": "#cccccc"
- },
- "4,11",
- "4,12",
- {
- "c": "#777777"
- },
- "4,13",
- "4,14",
- "4,15"
- ]]
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "0,13",
+ "0,15"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "1,13",
+ "1,15"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "2,13",
+ {
+ "c": "#aaaaaa"
+ },
+ "2,15"
+ ],
+ [
+ {
+ "w": 2.25
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "3,13",
+ {
+ "c": "#777777"
+ },
+ "3,14",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,15"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "4,0",
+ {
+ "w": 1.25
+ },
+ "4,1",
+ {
+ "w": 1.25
+ },
+ "4,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "4,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,10",
+ "4,11",
+ "4,12",
+ {
+ "c": "#777777"
+ },
+ "4,13",
+ "4,14",
+ "4,15"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k8_pro/via_json/k8_pro_ansi_rgb.json b/keyboards/keychron/k8_pro/via_json/k8_pro_ansi_rgb.json
index 23760da415..c7fb4fd806 100644
--- a/keyboards/keychron/k8_pro/via_json/k8_pro_ansi_rgb.json
+++ b/keyboards/keychron/k8_pro/via_json/k8_pro_ansi_rgb.json
@@ -80,208 +80,210 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 6, "cols": 17},
"layouts": {
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "x": 1.0,
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- {
- "x": 0.5
- },
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- {
- "x": 0.5
- },
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- {
- "x": 0.25
- },
- "0,14",
- "0,15",
- "0,16"
- ],
- [
- {
- "y": 0.25
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "c": "#aaaaaa",
- "w": 2
- },
- "1,13",
- {
- "x": 0.25
- },
- "1,14",
- "1,15",
- "1,16"
- ],
- [
- {
- "w": 1.5
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "w": 1.5
- },
- "2,13",
- {
- "c": "#aaaaaa"
- },
- {
- "x": 0.25
- },
- "2,14",
- "2,15",
- "2,16"
- ],
- [
- {
- "w": 1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- {
- "c": "#777777",
- "w": 2.25
- },
- "3,13"
- ],
- [
- {
- "w": 2.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- {
- "c": "#aaaaaa",
- "w": 2.75
- },
- "4,13",
- {
- "x": 1.25,
- "c": "#777777"
- },
- "4,15"
- ],
- [
- {
- "c": "#aaaaaa",
- "w": 1.25
- },
- "5,0",
- {
- "w": 1.25
- },
- "5,1",
- {
- "w": 1.25
- },
- "5,2",
- {
- "c": "#cccccc",
- "w": 6.25
- },
- "5,6",
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "5,10",
- {
- "w": 1.25
- },
- "5,11",
- {
- "w": 1.25,
- "c": "#cccccc"
- },
- "5,12",
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "5,13",
- {
- "x": 0.25,
- "c": "#777777"
- },
- "5,14",
- "5,15",
- "5,16"
- ]
-]
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "x": 1,
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "x": 0.5,
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ {
+ "x": 0.5,
+ "c": "#cccccc"
+ },
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "x": 0.25,
+ "c": "#aaaaaa"
+ },
+ "0,14",
+ "0,15",
+ "0,16"
+ ],
+ [
+ {
+ "y": 0.25
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ {
+ "x": 0.25
+ },
+ "1,14",
+ "1,15",
+ "1,16"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,13",
+ {
+ "x": 0.25
+ },
+ "2,14",
+ "2,15",
+ "2,16"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "3,13"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 2.75
+ },
+ "4,13",
+ {
+ "x": 1.25,
+ "c": "#777777"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,10",
+ {
+ "w": 1.25
+ },
+ "5,11",
+ {
+ "w": 1.25
+ },
+ "5,12",
+ {
+ "w": 1.25
+ },
+ "5,13",
+ {
+ "x": 0.25,
+ "c": "#777777"
+ },
+ "5,14",
+ "5,15",
+ "5,16"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k8_pro/via_json/k8_pro_ansi_white.json b/keyboards/keychron/k8_pro/via_json/k8_pro_ansi_white.json
index e7ba87de5d..73edacfb06 100644
--- a/keyboards/keychron/k8_pro/via_json/k8_pro_ansi_white.json
+++ b/keyboards/keychron/k8_pro/via_json/k8_pro_ansi_white.json
@@ -22,205 +22,207 @@
],
"matrix": {"rows": 6, "cols": 17},
"layouts": {
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "x": 1.0,
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- {
- "x": 0.5
- },
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- {
- "x": 0.5
- },
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- {
- "x": 0.25
- },
- "0,14",
- "0,15",
- "0,16"
- ],
- [
- {
- "y": 0.25
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "c": "#aaaaaa",
- "w": 2
- },
- "1,13",
- {
- "x": 0.25
- },
- "1,14",
- "1,15",
- "1,16"
- ],
- [
- {
- "w": 1.5
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "w": 1.5
- },
- "2,13",
- {
- "c": "#aaaaaa"
- },
- {
- "x": 0.25
- },
- "2,14",
- "2,15",
- "2,16"
- ],
- [
- {
- "w": 1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- {
- "c": "#777777",
- "w": 2.25
- },
- "3,13"
- ],
- [
- {
- "w": 2.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- {
- "c": "#aaaaaa",
- "w": 2.75
- },
- "4,13",
- {
- "x": 1.25,
- "c": "#777777"
- },
- "4,15"
- ],
- [
- {
- "c": "#aaaaaa",
- "w": 1.25
- },
- "5,0",
- {
- "w": 1.25
- },
- "5,1",
- {
- "w": 1.25
- },
- "5,2",
- {
- "c": "#cccccc",
- "w": 6.25
- },
- "5,6",
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "5,10",
- {
- "w": 1.25
- },
- "5,11",
- {
- "w": 1.25,
- "c": "#cccccc"
- },
- "5,12",
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "5,13",
- {
- "x": 0.25,
- "c": "#777777"
- },
- "5,14",
- "5,15",
- "5,16"
- ]
-]
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "x": 1,
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "x": 0.5,
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ {
+ "x": 0.5,
+ "c": "#cccccc"
+ },
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "x": 0.25,
+ "c": "#aaaaaa"
+ },
+ "0,14",
+ "0,15",
+ "0,16"
+ ],
+ [
+ {
+ "y": 0.25
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ {
+ "x": 0.25
+ },
+ "1,14",
+ "1,15",
+ "1,16"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "2,13",
+ {
+ "x": 0.25
+ },
+ "2,14",
+ "2,15",
+ "2,16"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "3,13"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 2.75
+ },
+ "4,13",
+ {
+ "x": 1.25,
+ "c": "#777777"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,10",
+ {
+ "w": 1.25
+ },
+ "5,11",
+ {
+ "w": 1.25
+ },
+ "5,12",
+ {
+ "w": 1.25
+ },
+ "5,13",
+ {
+ "x": 0.25,
+ "c": "#777777"
+ },
+ "5,14",
+ "5,15",
+ "5,16"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k8_pro/via_json/k8_pro_iso_rgb.json b/keyboards/keychron/k8_pro/via_json/k8_pro_iso_rgb.json
index db0d15ab01..f345c7554a 100644
--- a/keyboards/keychron/k8_pro/via_json/k8_pro_iso_rgb.json
+++ b/keyboards/keychron/k8_pro/via_json/k8_pro_iso_rgb.json
@@ -80,211 +80,215 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 6, "cols": 17},
"layouts": {
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "x": 1.0,
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- {
- "x": 0.5
- },
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- {
- "x": 0.5
- },
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- {
- "x": 0.25
- },
- "0,14",
- "0,15",
- "0,16"
- ],
- [
- {
- "y": 0.25
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "c": "#aaaaaa",
- "w": 2
- },
- "1,13",
- {
- "x": 0.25
- },
- "1,14",
- "1,15",
- "1,16"
- ],
- [
- {
- "w": 1.5
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "x": 0.25,
- "c": "#777777",
- "w": 1.25,
- "h": 2,
- "w2": 1.5,
- "h2": 1,
- "x2": -0.25
- },
- "2,13",
- {
- "c": "#aaaaaa"
- },
- {
- "x": 0.25
- },
- "2,14",
- "2,15",
- "2,16"
- ],
- [
- {
- "w": 1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- "3,13"
- ],
- [
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,1",
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- {
- "c": "#aaaaaa",
- "w": 2.75
- },
- "4,13",
- {
- "x": 1.25,
- "c": "#777777"
- },
- "4,15"
- ],
- [
- {
- "c": "#aaaaaa",
- "w": 1.25
- },
- "5,0",
- {
- "w": 1.25
- },
- "5,1",
- {
- "w": 1.25
- },
- "5,2",
- {
- "c": "#cccccc",
- "w": 6.25
- },
- "5,6",
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "5,10",
- {
- "w": 1.25
- },
- "5,11",
- {
- "w": 1.25,
- "c": "#cccccc"
- },
- "5,12",
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "5,13",
- {
- "x": 0.25,
- "c": "#777777"
- },
- "5,14",
- "5,15",
- "5,16"
- ]
-]
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "x": 1,
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "x": 0.5,
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ {
+ "x": 0.5,
+ "c": "#cccccc"
+ },
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "x": 0.25,
+ "c": "#aaaaaa"
+ },
+ "0,14",
+ "0,15",
+ "0,16"
+ ],
+ [
+ {
+ "y": 0.25
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ {
+ "x": 0.25
+ },
+ "1,14",
+ "1,15",
+ "1,16"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "x": 0.25,
+ "c": "#777777",
+ "w": 1.25,
+ "h": 2,
+ "w2": 1.5,
+ "h2": 1,
+ "x2": -0.25
+ },
+ "2,13",
+ {
+ "x": 0.25,
+ "c": "#aaaaaa"
+ },
+ "2,14",
+ "2,15",
+ "2,16"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,13"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "4,0",
+ "4,1",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 2.75
+ },
+ "4,13",
+ {
+ "x": 1.25,
+ "c": "#777777"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,10",
+ {
+ "w": 1.25
+ },
+ "5,11",
+ {
+ "w": 1.25
+ },
+ "5,12",
+ {
+ "w": 1.25
+ },
+ "5,13",
+ {
+ "x": 0.25,
+ "c": "#777777"
+ },
+ "5,14",
+ "5,15",
+ "5,16"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k8_pro/via_json/k8_pro_iso_white.json b/keyboards/keychron/k8_pro/via_json/k8_pro_iso_white.json
index 3f41280d78..457a3a4279 100644
--- a/keyboards/keychron/k8_pro/via_json/k8_pro_iso_white.json
+++ b/keyboards/keychron/k8_pro/via_json/k8_pro_iso_white.json
@@ -22,208 +22,212 @@
],
"matrix": {"rows": 6, "cols": 17},
"layouts": {
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "x": 1.0,
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- {
- "x": 0.5
- },
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- {
- "x": 0.5
- },
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- {
- "x": 0.25
- },
- "0,14",
- "0,15",
- "0,16"
- ],
- [
- {
- "y": 0.25
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- {
- "c": "#aaaaaa",
- "w": 2
- },
- "1,13",
- {
- "x": 0.25
- },
- "1,14",
- "1,15",
- "1,16"
- ],
- [
- {
- "w": 1.5
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "x": 0.25,
- "c": "#777777",
- "w": 1.25,
- "h": 2,
- "w2": 1.5,
- "h2": 1,
- "x2": -0.25
- },
- "2,13",
- {
- "c": "#aaaaaa"
- },
- {
- "x": 0.25
- },
- "2,14",
- "2,15",
- "2,16"
- ],
- [
- {
- "w": 1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- "3,13"
- ],
- [
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,1",
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- {
- "c": "#aaaaaa",
- "w": 2.75
- },
- "4,13",
- {
- "x": 1.25,
- "c": "#777777"
- },
- "4,15"
- ],
- [
- {
- "c": "#aaaaaa",
- "w": 1.25
- },
- "5,0",
- {
- "w": 1.25
- },
- "5,1",
- {
- "w": 1.25
- },
- "5,2",
- {
- "c": "#cccccc",
- "w": 6.25
- },
- "5,6",
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "5,10",
- {
- "w": 1.25
- },
- "5,11",
- {
- "w": 1.25,
- "c": "#cccccc"
- },
- "5,12",
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "5,13",
- {
- "x": 0.25,
- "c": "#777777"
- },
- "5,14",
- "5,15",
- "5,16"
- ]
-]
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "x": 1,
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "x": 0.5,
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ {
+ "x": 0.5,
+ "c": "#cccccc"
+ },
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "x": 0.25,
+ "c": "#aaaaaa"
+ },
+ "0,14",
+ "0,15",
+ "0,16"
+ ],
+ [
+ {
+ "y": 0.25
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "1,13",
+ {
+ "x": 0.25
+ },
+ "1,14",
+ "1,15",
+ "1,16"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "x": 0.25,
+ "c": "#777777",
+ "w": 1.25,
+ "h": 2,
+ "w2": 1.5,
+ "h2": 1,
+ "x2": -0.25
+ },
+ "2,13",
+ {
+ "x": 0.25,
+ "c": "#aaaaaa"
+ },
+ "2,14",
+ "2,15",
+ "2,16"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,13"
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "4,0",
+ "4,1",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa",
+ "w": 2.75
+ },
+ "4,13",
+ {
+ "x": 1.25,
+ "c": "#777777"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,0",
+ {
+ "w": 1.25
+ },
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ {
+ "c": "#cccccc",
+ "w": 6.25
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,10",
+ {
+ "w": 1.25
+ },
+ "5,11",
+ {
+ "w": 1.25
+ },
+ "5,12",
+ {
+ "w": 1.25
+ },
+ "5,13",
+ {
+ "x": 0.25,
+ "c": "#777777"
+ },
+ "5,14",
+ "5,15",
+ "5,16"
+ ]
+ ]
}
}
diff --git a/keyboards/keychron/k8_pro/via_json/k8_pro_jis_rgb.json b/keyboards/keychron/k8_pro/via_json/k8_pro_jis_rgb.json
index b7b9713e44..d1572f02a4 100644
--- a/keyboards/keychron/k8_pro/via_json/k8_pro_jis_rgb.json
+++ b/keyboards/keychron/k8_pro/via_json/k8_pro_jis_rgb.json
@@ -80,209 +80,215 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 6, "cols": 17},
"layouts": {
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "x": 1.0,
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- {
- "x": 0.5
- },
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- {
- "x": 0.5
- },
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- {
- "x": 0.25
- },
- "0,14",
- "0,15",
- "0,16"
- ],
- [
- {
- "y": 0.25
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- "1,13",
- "0,13",
- {
- "x": 0.25
- },
- "1,14",
- "1,15",
- "1,16"
- ],
- [
- {
- "w": 1.5
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "x": 0.25,
- "c": "#777777",
- "w": 1.25,
- "h": 2,
- "w2": 1.5,
- "h2": 1,
- "x2": -0.25
- },
- "2,13",
- {
- "c": "#aaaaaa"
- },
- {
- "x": 0.25
- },
- "2,14",
- "2,15",
- "2,16"
- ],
- [
- {
- "w": 1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- "3,13"
- ],
- [
- {
- "w": 2.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- "4,12",
- {
- "c": "#aaaaaa",
- "w":1.75
- },
- "4,13",
- {
- "x": 1.25,
- "c": "#777777"
- },
- "4,15"
- ],
- [
- {
- "c": "#aaaaaa",
- "w": 1.25
- },
- "5,0",
- "5,1",
- {
- "w": 1.25
- },
- "5,2",
- {
- "c": "#cccccc"
- },
- "5,3",
- {
- "w":4.75
- },
- "5,6",
- "5,9",
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "5,10",
- {
- "w": 1.25
- },
-
- "5,11",
- {
- "c": "#cccccc"
- },
- "5,12",
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "5,13",
- {
- "x": 0.25,
- "c": "#777777"
- },
- "5,14",
- "5,15",
- "5,16"
- ]
-]
- }
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "x": 1,
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "x": 0.5,
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ {
+ "x": 0.5,
+ "c": "#cccccc"
+ },
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "x": 0.25,
+ "c": "#aaaaaa"
+ },
+ "0,14",
+ "0,15",
+ "0,16"
+ ],
+ [
+ {
+ "y": 0.25
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "1,13",
+ "0,13",
+ {
+ "x": 0.25
+ },
+ "1,14",
+ "1,15",
+ "1,16"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "x": 0.25,
+ "c": "#777777",
+ "w": 1.25,
+ "h": 2,
+ "w2": 1.5,
+ "h2": 1,
+ "x2": -0.25
+ },
+ "2,13",
+ {
+ "x": 0.25,
+ "c": "#aaaaaa"
+ },
+ "2,14",
+ "2,15",
+ "2,16"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,13"
+ ],
+ [
+ {
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,12",
+ {
+ "w": 1.75
+ },
+ "4,13",
+ {
+ "x": 1.25,
+ "c": "#777777"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,0",
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ "5,3",
+ {
+ "c": "#cccccc",
+ "w": 4.75
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,9",
+ {
+ "w": 1.25
+ },
+ "5,10",
+ {
+ "w": 1.25
+ },
+ "5,11",
+ "5,12",
+ {
+ "w": 1.25
+ },
+ "5,13",
+ {
+ "x": 0.25,
+ "c": "#777777"
+ },
+ "5,14",
+ "5,15",
+ "5,16"
+ ]
+ ]
+ }
}
diff --git a/keyboards/keychron/k8_pro/via_json/k8_pro_jis_white.json b/keyboards/keychron/k8_pro/via_json/k8_pro_jis_white.json
index cc492e66e0..4abc685456 100644
--- a/keyboards/keychron/k8_pro/via_json/k8_pro_jis_white.json
+++ b/keyboards/keychron/k8_pro/via_json/k8_pro_jis_white.json
@@ -19,209 +19,215 @@
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
- ],
+ ],
"matrix": {"rows": 6, "cols": 17},
"layouts": {
- "keymap":[
- [
- {
- "c": "#777777"
- },
- "0,0",
- {
- "x": 1.0,
- "c": "#cccccc"
- },
- "0,1",
- "0,2",
- "0,3",
- "0,4",
- {
- "x": 0.5
- },
- "0,5",
- "0,6",
- "0,7",
- "0,8",
- {
- "x": 0.5
- },
- "0,9",
- "0,10",
- "0,11",
- "0,12",
- {
- "x": 0.25
- },
- "0,14",
- "0,15",
- "0,16"
- ],
- [
- {
- "y": 0.25
- },
- "1,0",
- "1,1",
- "1,2",
- "1,3",
- "1,4",
- "1,5",
- "1,6",
- "1,7",
- "1,8",
- "1,9",
- "1,10",
- "1,11",
- "1,12",
- "1,13",
- "0,13",
- {
- "x": 0.25
- },
- "1,14",
- "1,15",
- "1,16"
- ],
- [
- {
- "w": 1.5
- },
- "2,0",
- {
- "c": "#cccccc"
- },
- "2,1",
- "2,2",
- "2,3",
- "2,4",
- "2,5",
- "2,6",
- "2,7",
- "2,8",
- "2,9",
- "2,10",
- "2,11",
- "2,12",
- {
- "x": 0.25,
- "c": "#777777",
- "w": 1.25,
- "h": 2,
- "w2": 1.5,
- "h2": 1,
- "x2": -0.25
- },
- "2,13",
- {
- "c": "#aaaaaa"
- },
- {
- "x": 0.25
- },
- "2,14",
- "2,15",
- "2,16"
- ],
- [
- {
- "w": 1.75
- },
- "3,0",
- {
- "c": "#cccccc"
- },
- "3,1",
- "3,2",
- "3,3",
- "3,4",
- "3,5",
- "3,6",
- "3,7",
- "3,8",
- "3,9",
- "3,10",
- "3,11",
- "3,13"
- ],
- [
- {
- "w": 2.25,
- "c": "#aaaaaa"
- },
- "4,0",
- {
- "c": "#cccccc"
- },
- "4,2",
- "4,3",
- "4,4",
- "4,5",
- "4,6",
- "4,7",
- "4,8",
- "4,9",
- "4,10",
- "4,11",
- "4,12",
- {
- "c": "#aaaaaa",
- "w":1.75
- },
- "4,13",
- {
- "x": 1.25,
- "c": "#777777"
- },
- "4,15"
- ],
- [
- {
- "c": "#aaaaaa",
- "w": 1.25
- },
- "5,0",
- "5,1",
- {
- "w": 1.25
- },
- "5,2",
- {
- "c": "#cccccc"
- },
- "5,3",
- {
- "w":4.75
- },
- "5,6",
- "5,9",
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "5,10",
- {
- "w": 1.25
- },
-
- "5,11",
- {
- "c": "#cccccc"
- },
- "5,12",
- {
- "w": 1.25,
- "c": "#aaaaaa"
- },
- "5,13",
- {
- "x": 0.25,
- "c": "#777777"
- },
- "5,14",
- "5,15",
- "5,16"
- ]
-]
- }
+ "keymap": [
+ [
+ {
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "x": 1,
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ {
+ "x": 0.5,
+ "c": "#aaaaaa"
+ },
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ {
+ "x": 0.5,
+ "c": "#cccccc"
+ },
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "x": 0.25,
+ "c": "#aaaaaa"
+ },
+ "0,14",
+ "0,15",
+ "0,16"
+ ],
+ [
+ {
+ "y": 0.25
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa"
+ },
+ "1,13",
+ "0,13",
+ {
+ "x": 0.25
+ },
+ "1,14",
+ "1,15",
+ "1,16"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ "2,12",
+ {
+ "x": 0.25,
+ "c": "#777777",
+ "w": 1.25,
+ "h": 2,
+ "w2": 1.5,
+ "h2": 1,
+ "x2": -0.25
+ },
+ "2,13",
+ {
+ "x": 0.25,
+ "c": "#aaaaaa"
+ },
+ "2,14",
+ "2,15",
+ "2,16"
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "3,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,1",
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa"
+ },
+ "3,13"
+ ],
+ [
+ {
+ "w": 2.25
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "4,2",
+ "4,3",
+ "4,4",
+ "4,5",
+ "4,6",
+ "4,7",
+ "4,8",
+ "4,9",
+ "4,10",
+ "4,11",
+ {
+ "c": "#aaaaaa"
+ },
+ "4,12",
+ {
+ "w": 1.75
+ },
+ "4,13",
+ {
+ "x": 1.25,
+ "c": "#777777"
+ },
+ "4,15"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,0",
+ "5,1",
+ {
+ "w": 1.25
+ },
+ "5,2",
+ "5,3",
+ {
+ "c": "#cccccc",
+ "w": 4.75
+ },
+ "5,6",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,9",
+ {
+ "w": 1.25
+ },
+ "5,10",
+ {
+ "w": 1.25
+ },
+ "5,11",
+ "5,12",
+ {
+ "w": 1.25
+ },
+ "5,13",
+ {
+ "x": 0.25,
+ "c": "#777777"
+ },
+ "5,14",
+ "5,15",
+ "5,16"
+ ]
+ ]
+ }
}
diff --git a/keyboards/keychron/q2_pro/q2_pro.c b/keyboards/keychron/q2_pro/q2_pro.c
index 72e36b4a54..55551bbc58 100755
--- a/keyboards/keychron/q2_pro/q2_pro.c
+++ b/keyboards/keychron/q2_pro/q2_pro.c
@@ -141,6 +141,14 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
return true;
}
+#ifdef KC_BLUETOOTH_ENABLE
+void encoder0_pad_cb(void *param) {
+ (void)param;
+
+ encoder_insert_state();
+}
+#endif
+
void keyboard_post_init_kb(void) {
dip_switch_read(true);
@@ -155,6 +163,15 @@ void keyboard_post_init_kb(void) {
ckbt51_init(false);
bluetooth_init();
+
+ pin_t encoders_pad_a[NUM_ENCODERS] = ENCODERS_PAD_A;
+ pin_t encoders_pad_b[NUM_ENCODERS] = ENCODERS_PAD_B;
+ for (uint8_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], encoder0_pad_cb, NULL);
+ palSetLineCallback(encoders_pad_b[i], encoder0_pad_cb, NULL);
+ }
#endif
keyboard_post_init_user();
@@ -289,3 +306,7 @@ void raw_hid_receive(uint8_t *data, uint8_t length) {
}
}
#endif
+
+void restart_usb_driver(USBDriver *usbp) {
+ (void)usbp;
+}
diff --git a/keyboards/keychron/q3_pro/q3_pro.c b/keyboards/keychron/q3_pro/q3_pro.c
index b6c9815d02..a3437ff669 100755
--- a/keyboards/keychron/q3_pro/q3_pro.c
+++ b/keyboards/keychron/q3_pro/q3_pro.c
@@ -140,6 +140,14 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
return true;
}
+#ifdef KC_BLUETOOTH_ENABLE
+void encoder0_pad_cb(void *param) {
+ (void)param;
+
+ encoder_insert_state();
+}
+#endif
+
void keyboard_post_init_kb(void) {
dip_switch_read(true);
@@ -154,6 +162,15 @@ void keyboard_post_init_kb(void) {
ckbt51_init(false);
bluetooth_init();
+
+ pin_t encoders_pad_a[NUM_ENCODERS] = ENCODERS_PAD_A;
+ pin_t encoders_pad_b[NUM_ENCODERS] = ENCODERS_PAD_B;
+ for (uint8_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], encoder0_pad_cb, NULL);
+ palSetLineCallback(encoders_pad_b[i], encoder0_pad_cb, NULL);
+ }
#endif
keyboard_post_init_user();
diff --git a/quantum/encoder.c b/quantum/encoder.c
index 3aee340249..25ddab0c3c 100644
--- a/quantum/encoder.c
+++ b/quantum/encoder.c
@@ -54,8 +54,9 @@ static uint8_t encoder_resolutions[NUM_ENCODERS] = ENCODER_RESOLUTIONS;
#endif
static int8_t encoder_LUT[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0};
-static uint8_t encoder_state[NUM_ENCODERS] = {0};
-static int8_t encoder_pulses[NUM_ENCODERS] = {0};
+static uint8_t encoder_state[NUM_ENCODERS] = {0};
+static int8_t encoder_pulses[NUM_ENCODERS] = {0};
+static bool encoder_external_update[NUM_ENCODERS] = {false};
// encoder counts
static uint8_t thisCount;
@@ -221,10 +222,11 @@ bool encoder_read(void) {
bool changed = false;
for (uint8_t i = 0; i < thisCount; i++) {
uint8_t new_status = (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1);
- if ((encoder_state[i] & 0x3) != new_status) {
+ if ((encoder_state[i] & 0x3) != new_status || encoder_external_update[i]) {
encoder_state[i] <<= 2;
encoder_state[i] |= new_status;
changed |= encoder_update(i, encoder_state[i]);
+ encoder_external_update[i] = false;
}
}
return changed;
@@ -268,3 +270,12 @@ void encoder_update_raw(uint8_t *slave_state) {
if (changed) last_encoder_activity_trigger();
}
#endif
+
+void encoder_insert_state(void) {
+ for (uint8_t i = 0; i < thisCount; i++) {
+ encoder_state[i] <<= 2;
+ encoder_state[i] |= (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1);
+ encoder_pulses[i] += encoder_LUT[encoder_state[i] & 0xF];
+ encoder_external_update[i] = true;
+ }
+}
diff --git a/quantum/encoder.h b/quantum/encoder.h
index 4eb67fa25d..bc02889ee8 100644
--- a/quantum/encoder.h
+++ b/quantum/encoder.h
@@ -25,6 +25,7 @@ bool encoder_read(void);
bool encoder_update_kb(uint8_t index, bool clockwise);
bool encoder_update_user(uint8_t index, bool clockwise);
+void encoder_insert_state(void);
#ifdef SPLIT_KEYBOARD
From 89be39f130c8a16db6763c849cbff2975fd3a9b9 Mon Sep 17 00:00:00 2001
From: lalalademaxiya1 <2831039915@qq.com>
Date: Thu, 16 Mar 2023 12:16:36 +0800
Subject: [PATCH 4/7] Update encoder.c and encoder.h
---
quantum/encoder.c | 22 ++++++++++------------
quantum/encoder.h | 2 +-
2 files changed, 11 insertions(+), 13 deletions(-)
diff --git a/quantum/encoder.c b/quantum/encoder.c
index 25ddab0c3c..7b3738f9a1 100644
--- a/quantum/encoder.c
+++ b/quantum/encoder.c
@@ -56,7 +56,7 @@ static int8_t encoder_LUT[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1,
static uint8_t encoder_state[NUM_ENCODERS] = {0};
static int8_t encoder_pulses[NUM_ENCODERS] = {0};
-static bool encoder_external_update[NUM_ENCODERS] = {false};
+static bool encoder_interrupt_update[NUM_ENCODERS] = {false};
// encoder counts
static uint8_t thisCount;
@@ -222,16 +222,23 @@ bool encoder_read(void) {
bool changed = false;
for (uint8_t i = 0; i < thisCount; i++) {
uint8_t new_status = (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1);
- if ((encoder_state[i] & 0x3) != new_status || encoder_external_update[i]) {
+ if ((encoder_state[i] & 0x3) != new_status || encoder_interrupt_update[i]) {
encoder_state[i] <<= 2;
encoder_state[i] |= new_status;
changed |= encoder_update(i, encoder_state[i]);
- encoder_external_update[i] = false;
+ encoder_interrupt_update[i] = false;
}
}
return changed;
}
+void encoder_inerrupt_read(uint8_t index) {
+ encoder_state[index] <<= 2;
+ encoder_state[index] |= (readPin(encoders_pad_a[index]) << 0) | (readPin(encoders_pad_b[index]) << 1);
+ encoder_pulses[index] += encoder_LUT[encoder_state[index] & 0xF];
+ encoder_interrupt_update[index] = true;
+}
+
#ifdef SPLIT_KEYBOARD
void last_encoder_activity_trigger(void);
@@ -270,12 +277,3 @@ void encoder_update_raw(uint8_t *slave_state) {
if (changed) last_encoder_activity_trigger();
}
#endif
-
-void encoder_insert_state(void) {
- for (uint8_t i = 0; i < thisCount; i++) {
- encoder_state[i] <<= 2;
- encoder_state[i] |= (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1);
- encoder_pulses[i] += encoder_LUT[encoder_state[i] & 0xF];
- encoder_external_update[i] = true;
- }
-}
diff --git a/quantum/encoder.h b/quantum/encoder.h
index bc02889ee8..fb0fd18aa8 100644
--- a/quantum/encoder.h
+++ b/quantum/encoder.h
@@ -25,7 +25,7 @@ bool encoder_read(void);
bool encoder_update_kb(uint8_t index, bool clockwise);
bool encoder_update_user(uint8_t index, bool clockwise);
-void encoder_insert_state(void);
+void encoder_inerrupt_read(uint8_t index);
#ifdef SPLIT_KEYBOARD
From 0b639a4dee0d71cf21d03aca8988168471d48e99 Mon Sep 17 00:00:00 2001
From: lalalademaxiya1 <2831039915@qq.com>
Date: Thu, 16 Mar 2023 12:26:58 +0800
Subject: [PATCH 5/7] Update readme.md
---
keyboards/keychron/k5_pro/readme.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/keyboards/keychron/k5_pro/readme.md b/keyboards/keychron/k5_pro/readme.md
index a02434fa90..a53b180b5e 100755
--- a/keyboards/keychron/k5_pro/readme.md
+++ b/keyboards/keychron/k5_pro/readme.md
@@ -1,6 +1,6 @@
# Keychron K5 Pro
-
+
A customizable 100% keyboard.
From 0170134118ae902a804cefd7bdff8bc122d25da4 Mon Sep 17 00:00:00 2001
From: lalalademaxiya1 <2831039915@qq.com>
Date: Thu, 16 Mar 2023 14:23:24 +0800
Subject: [PATCH 6/7] Update k6_pro_jis_rgb.json
---
keyboards/keychron/k6_pro/via_json/k6_pro_jis_rgb.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/keyboards/keychron/k6_pro/via_json/k6_pro_jis_rgb.json b/keyboards/keychron/k6_pro/via_json/k6_pro_jis_rgb.json
index 515e233a3f..c8cb3f7e4a 100644
--- a/keyboards/keychron/k6_pro/via_json/k6_pro_jis_rgb.json
+++ b/keyboards/keychron/k6_pro/via_json/k6_pro_jis_rgb.json
@@ -103,10 +103,10 @@
"0,6",
"0,7",
"0,8",
- "0,9",
{
"c": "#cccccc"
},
+ "0,9",
"0,10",
"0,11",
"0,12",
From 0f35f0e2ed1343765422bc9abf4fe240768b4130 Mon Sep 17 00:00:00 2001
From: lalalademaxiya1 <2831039915@qq.com>
Date: Thu, 16 Mar 2023 14:56:17 +0800
Subject: [PATCH 7/7] Update encoder.c
---
quantum/encoder.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/quantum/encoder.c b/quantum/encoder.c
index 7b3738f9a1..e2029fa376 100644
--- a/quantum/encoder.c
+++ b/quantum/encoder.c
@@ -40,6 +40,7 @@ extern volatile bool isLeftHand;
static pin_t encoders_pad_a[NUM_ENCODERS_MAX_PER_SIDE] = ENCODERS_PAD_A;
static pin_t encoders_pad_b[NUM_ENCODERS_MAX_PER_SIDE] = ENCODERS_PAD_B;
+static bool encoder_interrupt_update[NUM_ENCODERS] = {false};
#ifdef ENCODER_RESOLUTIONS
static uint8_t encoder_resolutions[NUM_ENCODERS] = ENCODER_RESOLUTIONS;
@@ -56,7 +57,6 @@ static int8_t encoder_LUT[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1,
static uint8_t encoder_state[NUM_ENCODERS] = {0};
static int8_t encoder_pulses[NUM_ENCODERS] = {0};
-static bool encoder_interrupt_update[NUM_ENCODERS] = {false};
// encoder counts
static uint8_t thisCount;