summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlokher <lokher@gmail.com>2023-03-16 12:07:35 +0800
committerlokher <lokher@gmail.com>2023-03-16 12:07:35 +0800
commit77cbe1469a6a83ef00a5eaffce318a176bfacdd4 (patch)
treeccdf99aba0b4e1cbcbf152be0cd200dc73fa3f1b
parentee715fc26ade41e56f47e60527f17d5cbdfb584b (diff)
add q1_pro;add 'encoder_inerrupt_read' to encoder.c;change factory test key definition to config.h
-rw-r--r--keyboards/keychron/bluetooth/factory_test.c54
-rw-r--r--keyboards/keychron/k10_pro/config.h4
-rwxr-xr-xkeyboards/keychron/k1_pro/config.h4
-rw-r--r--keyboards/keychron/k2_pro/config.h5
-rw-r--r--keyboards/keychron/k3_pro/config.h4
-rw-r--r--keyboards/keychron/k4_pro/config.h4
-rwxr-xr-xkeyboards/keychron/k5_pro/config.h4
-rw-r--r--keyboards/keychron/k6_pro/config.h5
-rw-r--r--keyboards/keychron/k6_pro/iso/rgb/keymaps/default/keymap.c4
-rw-r--r--keyboards/keychron/k7_pro/config.h4
-rw-r--r--keyboards/keychron/k8_pro/config.h4
-rwxr-xr-xkeyboards/keychron/k9_pro/config.h4
-rw-r--r--keyboards/keychron/q1_pro/ansi_knob/ansi_knob.c144
-rw-r--r--keyboards/keychron/q1_pro/ansi_knob/config.h106
-rw-r--r--keyboards/keychron/q1_pro/ansi_knob/info.json111
-rw-r--r--keyboards/keychron/q1_pro/ansi_knob/keymaps/default/keymap.c68
-rw-r--r--keyboards/keychron/q1_pro/ansi_knob/keymaps/via/keymap.c69
-rw-r--r--keyboards/keychron/q1_pro/ansi_knob/keymaps/via/rules.mk1
-rw-r--r--keyboards/keychron/q1_pro/ansi_knob/rules.mk4
-rw-r--r--keyboards/keychron/q1_pro/config.h92
-rw-r--r--keyboards/keychron/q1_pro/halconf.h28
-rw-r--r--keyboards/keychron/q1_pro/iso_knob/config.h110
-rw-r--r--keyboards/keychron/q1_pro/iso_knob/info.json112
-rw-r--r--keyboards/keychron/q1_pro/iso_knob/iso_knob.c146
-rw-r--r--keyboards/keychron/q1_pro/iso_knob/keymaps/default/keymap.c68
-rw-r--r--keyboards/keychron/q1_pro/iso_knob/keymaps/via/keymap.c68
-rw-r--r--keyboards/keychron/q1_pro/iso_knob/keymaps/via/rules.mk1
-rw-r--r--keyboards/keychron/q1_pro/iso_knob/rules.mk4
-rw-r--r--keyboards/keychron/q1_pro/matrix.c176
-rw-r--r--keyboards/keychron/q1_pro/mcuconf.h39
-rw-r--r--keyboards/keychron/q1_pro/q1_pro.c293
-rw-r--r--keyboards/keychron/q1_pro/q1_pro.h60
-rw-r--r--keyboards/keychron/q1_pro/readme.md21
-rw-r--r--keyboards/keychron/q1_pro/rules.mk32
-rwxr-xr-xkeyboards/keychron/q2_pro/config.h6
-rwxr-xr-xkeyboards/keychron/q3_pro/config.h6
-rw-r--r--quantum/encoder.c11
-rw-r--r--quantum/encoder.h1
38 files changed, 1842 insertions, 35 deletions
diff --git a/keyboards/keychron/bluetooth/factory_test.c b/keyboards/keychron/bluetooth/factory_test.c
index 9de130a26b..b8183040cf 100644
--- a/keyboards/keychron/bluetooth/factory_test.c
+++ b/keyboards/keychron/bluetooth/factory_test.c
@@ -16,15 +16,19 @@
#include "quantum.h"
#include "raw_hid.h"
-#include "via.h"
-#include "indicator.h"
#ifdef KC_BLUETOOTH_ENABLE
#include "transport.h"
-#include "battery.h"
-#include "lpm.h"
#include "ckbt51.h"
#endif
+#ifndef BL_TEST_KEY1
+# define BL_TEST_KEY1 KC_RIGHT
+#endif
+
+#ifndef BL_TEST_KEY2
+# define BL_TEST_KEY2 KC_HOME
+#endif
+
extern bool bt_factory_reset;
enum {
@@ -40,10 +44,10 @@ enum {
KEY_PRESS_FN = 0x01 << 0,
KEY_PRESS_J = 0x01 << 1,
KEY_PRESS_Z = 0x01 << 2,
- KEY_PRESS_RIGHT = 0x01 << 3,
- KEY_PRESS_HOME = 0x01 << 4,
+ KEY_PRESS_BL_KEY1 = 0x01 << 3,
+ KEY_PRESS_BL_KEY2 = 0x01 << 4,
KEY_PRESS_FACTORY_RESET = KEY_PRESS_FN | KEY_PRESS_J | KEY_PRESS_Z,
- KEY_PRESS_BACKLIGTH_TEST = KEY_PRESS_FN | KEY_PRESS_RIGHT | KEY_PRESS_HOME,
+ KEY_PRESS_BACKLIGTH_TEST = KEY_PRESS_FN | KEY_PRESS_BL_KEY1 | KEY_PRESS_BL_KEY2,
};
enum {
@@ -69,7 +73,7 @@ static uint8_t factory_reset_ind_state = 0;
static bool report_os_sw_state = false;
void factory_timer_start(void) {
- factory_reset_timer = sync_timer_read32() == 0 ? 1 : sync_timer_read32();
+ factory_reset_timer = timer_read32() == 0 ? 1 : timer_read32();
}
static inline void factory_timer_check(void) {
@@ -77,7 +81,7 @@ static inline void factory_timer_check(void) {
factory_reset_timer = 0;
if (factory_reset_state == KEY_PRESS_FACTORY_RESET) {
- factory_reset_ind_timer = sync_timer_read32() == 0 ? 1 : sync_timer_read32();
+ factory_reset_ind_timer = timer_read32() == 0 ? 1 : timer_read32();
factory_reset_ind_state++;
layer_state_t default_layer_tmp = default_layer_state;
@@ -110,21 +114,24 @@ static inline void factory_timer_check(void) {
}
static inline void factory_reset_ind_timer_check(void) {
- if (factory_reset_ind_timer && sync_timer_elapsed32(factory_reset_ind_timer) > 250) {
+ if (factory_reset_ind_timer && timer_elapsed32(factory_reset_ind_timer) > 250) {
if (factory_reset_ind_state++ > 6) {
factory_reset_ind_timer = factory_reset_ind_state = 0;
} else {
- factory_reset_ind_timer = sync_timer_read32() == 0 ? 1 : sync_timer_read32();
+ factory_reset_ind_timer = timer_read32() == 0 ? 1 : timer_read32();
}
}
}
void process_record_factory_reset(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
- case MO(1): /* fall through */
- case MO(2):
- case MO(3):
- case MO(4):
+#if defined(FN_KEY1) || defined(FN_KEY2)
+# ifdef FN_KEY1
+ case FN_KEY1: /* fall through */
+# endif
+# ifdef FN_KEY2
+ case FN_KEY2:
+# endif
if (record->event.pressed) {
factory_reset_state |= KEY_PRESS_FN;
} else {
@@ -132,6 +139,7 @@ void process_record_factory_reset(uint16_t keycode, keyrecord_t *record) {
factory_reset_timer = 0;
}
break;
+#endif
case KC_J:
if (record->event.pressed) {
factory_reset_state |= KEY_PRESS_J;
@@ -150,34 +158,38 @@ void process_record_factory_reset(uint16_t keycode, keyrecord_t *record) {
factory_reset_timer = 0;
}
break;
- case KC_RIGHT:
+#ifdef BL_TEST_KEY1
+ case BL_TEST_KEY1:
if (record->event.pressed) {
if (backlight_test_mode) {
if (++backlight_test_mode >= BACKLIGHT_TEST_MAX) {
backlight_test_mode = BACKLIGHT_TEST_WHITE;
}
} else {
- factory_reset_state |= KEY_PRESS_RIGHT;
+ factory_reset_state |= KEY_PRESS_BL_KEY1;
if (factory_reset_state == 0x19) factory_timer_start();
}
} else {
- factory_reset_state &= ~KEY_PRESS_RIGHT;
+ factory_reset_state &= ~KEY_PRESS_BL_KEY1;
factory_reset_timer = 0;
}
break;
- case KC_HOME:
+#endif
+#ifdef BL_TEST_KEY2
+ case BL_TEST_KEY2:
if (record->event.pressed) {
if (backlight_test_mode) {
backlight_test_mode = BACKLIGHT_TEST_OFF;
} else {
- factory_reset_state |= KEY_PRESS_HOME;
+ factory_reset_state |= KEY_PRESS_BL_KEY2;
if (factory_reset_state == 0x19) factory_timer_start();
}
} else {
- factory_reset_state &= ~KEY_PRESS_HOME;
+ factory_reset_state &= ~KEY_PRESS_BL_KEY2;
factory_reset_timer = 0;
}
break;
+#endif
}
}
diff --git a/keyboards/keychron/k10_pro/config.h b/keyboards/keychron/k10_pro/config.h
index 4a4c104d5d..504c581294 100644
--- a/keyboards/keychron/k10_pro/config.h
+++ b/keyboards/keychron/k10_pro/config.h
@@ -98,4 +98,6 @@
#define FEE_DENSITY_BYTES FEE_PAGE_SIZE
#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
-//#define NO_PRINT
+/* Factory test keys */
+#define FN_KEY1 MO(1)
+#define FN_KEY2 MO(3)
diff --git a/keyboards/keychron/k1_pro/config.h b/keyboards/keychron/k1_pro/config.h
index b254219bcf..23abae9d4d 100755
--- a/keyboards/keychron/k1_pro/config.h
+++ b/keyboards/keychron/k1_pro/config.h
@@ -94,4 +94,8 @@
#define FEE_DENSITY_BYTES FEE_PAGE_SIZE
#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
+/* Factory test keys */
+#define FN_KEY1 MO(1)
+#define FN_KEY2 MO(3)
+
#define INVERT_OS_SWITCH_STATTE
diff --git a/keyboards/keychron/k2_pro/config.h b/keyboards/keychron/k2_pro/config.h
index 6f71e26b81..0573b5165c 100644
--- a/keyboards/keychron/k2_pro/config.h
+++ b/keyboards/keychron/k2_pro/config.h
@@ -94,5 +94,6 @@
#define FEE_DENSITY_BYTES FEE_PAGE_SIZE
#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
-
-//#define NO_PRINT
+/* Factory test keys */
+#define FN_KEY1 MO(1)
+#define FN_KEY2 MO(3)
diff --git a/keyboards/keychron/k3_pro/config.h b/keyboards/keychron/k3_pro/config.h
index c31f3cc18b..0884cc2346 100644
--- a/keyboards/keychron/k3_pro/config.h
+++ b/keyboards/keychron/k3_pro/config.h
@@ -101,4 +101,6 @@
#define FEE_DENSITY_BYTES FEE_PAGE_SIZE
#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
-//#define NO_PRINT
+/* Factory test keys */
+#define FN_KEY1 MO(1)
+#define FN_KEY2 MO(3)
diff --git a/keyboards/keychron/k4_pro/config.h b/keyboards/keychron/k4_pro/config.h
index f206b504f5..5c9bbc4280 100644
--- a/keyboards/keychron/k4_pro/config.h
+++ b/keyboards/keychron/k4_pro/config.h
@@ -90,4 +90,6 @@
#define FEE_DENSITY_BYTES FEE_PAGE_SIZE
#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
-//#define NO_PRINT
+/* Factory test keys */
+#define FN_KEY1 MO(1)
+#define FN_KEY2 MO(3)
diff --git a/keyboards/keychron/k5_pro/config.h b/keyboards/keychron/k5_pro/config.h
index e9ed742789..115abafedd 100755
--- a/keyboards/keychron/k5_pro/config.h
+++ b/keyboards/keychron/k5_pro/config.h
@@ -94,3 +94,7 @@
/* Emulated EEPROM configuration */
#define FEE_DENSITY_BYTES FEE_PAGE_SIZE
#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
+
+/* Factory test keys */
+#define FN_KEY1 MO(1)
+#define FN_KEY2 MO(3)
diff --git a/keyboards/keychron/k6_pro/config.h b/keyboards/keychron/k6_pro/config.h
index 025d1fe783..af5ab56dd5 100644
--- a/keyboards/keychron/k6_pro/config.h
+++ b/keyboards/keychron/k6_pro/config.h
@@ -95,5 +95,6 @@
#define FEE_DENSITY_BYTES FEE_PAGE_SIZE
#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
-
-//#define NO_PRINT
+/* Factory test keys */
+#define FN_KEY1 MO(2)
+#define FN_KEY2 MO(3)
diff --git a/keyboards/keychron/k6_pro/iso/rgb/keymaps/default/keymap.c b/keyboards/keychron/k6_pro/iso/rgb/keymaps/default/keymap.c
index 96bd8fbaf1..61fddbc1c6 100644
--- a/keyboards/keychron/k6_pro/iso/rgb/keymaps/default/keymap.c
+++ b/keyboards/keychron/k6_pro/iso/rgb/keymaps/default/keymap.c
@@ -30,14 +30,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_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_BSLS, 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_ENT, KC_PGUP,
- 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_PGDN,
+ 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_PGDN,
KC_LCTL, KC_LOPTN, KC_LCMMD, KC_SPC, KC_RCMMD,MO(MAC_FN1),MO(FN2), KC_LEFT, KC_DOWN, KC_RGHT),
[WIN_BASE] = LAYOUT_iso_69(
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_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_BSLS, 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_ENT, KC_PGUP,
- 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_PGDN,
+ 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_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN1),MO(FN2), KC_LEFT, KC_DOWN, KC_RGHT),
[MAC_FN1] = LAYOUT_iso_69(
diff --git a/keyboards/keychron/k7_pro/config.h b/keyboards/keychron/k7_pro/config.h
index 4fcdd90a9f..93e77c7951 100644
--- a/keyboards/keychron/k7_pro/config.h
+++ b/keyboards/keychron/k7_pro/config.h
@@ -97,4 +97,6 @@
#define FEE_DENSITY_BYTES FEE_PAGE_SIZE
#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
-//#define NO_PRINT
+/* Factory test keys */
+#define FN_KEY1 MO(2)
+#define FN_KEY2 MO(3)
diff --git a/keyboards/keychron/k8_pro/config.h b/keyboards/keychron/k8_pro/config.h
index 84e86b388f..9d5e33949e 100644
--- a/keyboards/keychron/k8_pro/config.h
+++ b/keyboards/keychron/k8_pro/config.h
@@ -98,4 +98,6 @@
#define FEE_DENSITY_BYTES FEE_PAGE_SIZE
#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
-//#define NO_PRINT
+/* Factory test keys */
+#define FN_KEY1 MO(1)
+#define FN_KEY2 MO(3)
diff --git a/keyboards/keychron/k9_pro/config.h b/keyboards/keychron/k9_pro/config.h
index ecc63874cf..d049cfefe2 100755
--- a/keyboards/keychron/k9_pro/config.h
+++ b/keyboards/keychron/k9_pro/config.h
@@ -90,3 +90,7 @@
/* Emulated EEPROM configuration */
#define FEE_DENSITY_BYTES FEE_PAGE_SIZE
#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047
+
+/* Factory test keys */
+#define FN_KEY1 MO(2)
+#define FN_KEY2 MO(3)
diff --git a/keyboards/keychron/q1_pro/ansi_knob/ansi_knob.c b/keyboards/keychron/q1_pro/ansi_knob/ansi_knob.c
new file mode 100644
index 0000000000..06bf110dc5
--- /dev/null
+++ b/keyboards/keychron/q1_pro/ansi_knob/ansi_knob.c
@@ -0,0 +1,144 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "quantum.h"
+
+// clang-format off
+#ifdef RGB_MATRIX_ENABLE
+const ckled2001_led g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
+/* Refer to CKLED 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_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_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_14, D_14, E_14},
+ {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},
+ {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, 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}
+};
+
+led_config_t g_led_config = {
+ {
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, NO_LED, 14 },
+ { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, NO_LED, 29 },
+ { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, NO_LED, 44 },
+ { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, NO_LED, 57, NO_LED, 58 },
+ { 59, NO_LED, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, NO_LED, 70, 71, NO_LED },
+ { 72, 73, 74, NO_LED, NO_LED, NO_LED, 75, NO_LED, NO_LED, NO_LED, 76, 77, 78, 79, 80, 81 }
+ },
+ {
+ {0, 0}, {18, 0}, {32, 0}, {47, 0}, {62, 0}, {80, 0}, {95, 0}, {109, 0}, {124, 0}, {142, 0}, {157, 0}, {172, 0}, {186, 0}, {205, 0}, {223, 0},
+ {0,14}, {14,14}, {29,14}, {43,14}, {58,14}, {73,14}, {87,14}, {102, 14}, {117, 14}, {131, 14}, {146, 14}, {161, 14}, {175, 14}, {197, 14}, {224, 14},
+ {3,26}, {21,26}, {36,26}, {51,26}, {65,26}, {80,26}, {95,26}, {109, 26}, {124, 26}, {139, 26}, {153, 26}, {168, 26}, {183, 26}, {201, 26}, {224, 26},
+ {5,37}, {25,37}, {40,37}, {54,37}, {69,37}, {84,37}, {98,37}, {113, 37}, {128, 37}, {142, 37}, {157, 37}, {172, 37}, {195, 37}, {224, 37},
+ {9,50}, {32,50}, {47,50}, {62,50}, {76,50}, {91,50}, {106, 50}, {120, 50}, {135, 50}, {150, 50}, {164, 50}, {185, 50}, {209, 50},
+ {1,62}, {20,62}, {38,62}, {93,62}, {146, 62}, {161, 62}, {176, 62}, {194, 62}, {209, 62}, {224, 62}
+
+ },
+ {
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4
+ }
+};
+#endif
diff --git a/keyboards/keychron/q1_pro/ansi_knob/config.h b/keyboards/keychron/q1_pro/ansi_knob/config.h
new file mode 100644
index 0000000000..d6b3e80c6c
--- /dev/null
+++ b/keyboards/keychron/q1_pro/ansi_knob/config.h
@@ -0,0 +1,106 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* Encoder Configuration */
+#ifdef ENCODER_ENABLE
+# define ENCODER_RESOLUTION 4
+# define ENCODER_DEFAULT_POS 0x3
+#endif
+
+#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 45
+# define DRIVER_2_LED_COUNT 37
+# 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 CAPS_LOCK_INDEX 45
+# define LOW_BAT_IND_INDEX 75
+
+/* 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/q1_pro/ansi_knob/info.json b/keyboards/keychron/q1_pro/ansi_knob/info.json
new file mode 100644
index 0000000000..304f2d3090
--- /dev/null
+++ b/keyboards/keychron/q1_pro/ansi_knob/info.json
@@ -0,0 +1,111 @@
+{
+ "keyboard_name": "Keychron Q1 Pro",
+ "manufacturer": "Keychron",
+ "url": "https://github.com/Keychron",
+ "maintainer": "lokher",
+ "usb": {
+ "vid": "0x3434",
+ "pid": "0x0610",
+ "device_version": "1.0.0"
+ },
+ "encoder": {
+ "rotary": [
+ {"pin_a": "A10", "pin_b": "A0"}
+ ]
+ },
+ "processor": "STM32L432",
+ "bootloader": "stm32-dfu",
+ "layouts": {
+ "LAYOUT_ansi_82": {
+ "layout": [
+ {"matrix":[0, 0], "x":0, "y":0},
+ {"matrix":[0, 1], "x":1.25, "y":0},
+ {"matrix":[0, 2], "x":2.25, "y":0},
+ {"matrix":[0, 3], "x":3.25, "y":0},
+ {"matrix":[0, 4], "x":4.25, "y":0},
+ {"matrix":[0, 5], "x":5.5, "y":0},
+ {"matrix":[0, 6], "x":6.5, "y":0},
+ {"matrix":[0, 7], "x":7.5, "y":0},
+ {"matrix":[0, 8], "x":8.5, "y":0},
+ {"matrix":[0, 9], "x":9.75, "y":0},
+ {"matrix":[0,10], "x":10.75, "y":0},
+ {"matrix":[0,11], "x":11.75, "y":0},
+ {"matrix":[0,12], "x":12.75, "y":0},
+ {"matrix":[0,13], "x":14, "y":0},
+ {"matrix":[0,15], "x":15.25, "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,15], "x":15.25, "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,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix":[2,15], "x":15.25, "y":2.25},
+
+ {"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