Add QK_CR_0-QK_CR_51 custom keycode

These keycodes are used by Keychron Quick Start
This commit is contained in:
lokher
2025-10-31 11:09:07 +08:00
parent 1d4ddaf2f5
commit d7188deb4f
6 changed files with 121 additions and 5 deletions

View File

@@ -69,6 +69,8 @@ void get_support_feature(uint8_t *data) {
| FEATURE_KEYCHRON_RGB
# endif
;
data[2] = (FEATURE_QUICK_START >> 8);
}
void get_firmware_version(uint8_t *data) {
@@ -151,12 +153,13 @@ bool kc_raw_hid_rx(uint8_t src, uint8_t *data, uint8_t length) {
# ifdef USB_REPORT_INTERVAL_ENABLE
| MISC_REPORT_REATE
# endif
;
| MISC_QUICK_START;
break;
case DFU_INFO_GET:
dfu_info_rx(data, length);
break;
case LANGUAGE_GET ... LANGUAGE_SET:
language_rx(data, length);
break;

View File

@@ -41,6 +41,8 @@ enum {
FEATURE_DYNAMIC_DEBOUNCE = 0x01U << 5,
FEATURE_SNAP_CLICK = 0x01U << 6,
FEATURE_KEYCHRON_RGB = 0x01U << 7,
FEATURE_QUICK_START = 0x01 << 8
};
enum {
@@ -50,6 +52,7 @@ enum {
MISC_SNAP_CLICK = 0x01 << 3,
MISC_WIRELESS_LPM = 0x01 << 4,
MISC_REPORT_REATE = 0x01 << 5,
MISC_QUICK_START = 0x01 << 6
};
enum {
@@ -71,4 +74,3 @@ enum {
};
void kc_raw_hid_send(uint8_t src, uint8_t *data, uint8_t len);

View File

@@ -972,7 +972,7 @@ __attribute__((weak)) void register_code(uint8_t code) {
#ifdef EXTRAKEY_ENABLE
} else if (IS_SYSTEM_KEYCODE(code)) {
host_system_send(KEYCODE2SYSTEM(code));
} else if (IS_CONSUMER_KEYCODE(code)) {
} else if (IS_CONSUMER_KEYCODE(code) || IS_CONSUMER_RESERVED_KEYCODE(code)) {
host_consumer_send(KEYCODE2CONSUMER(code));
#endif
@@ -1029,7 +1029,7 @@ __attribute__((weak)) void unregister_code(uint8_t code) {
#ifdef EXTRAKEY_ENABLE
} else if (IS_SYSTEM_KEYCODE(code)) {
host_system_send(0);
} else if (IS_CONSUMER_KEYCODE(code)) {
} else if (IS_CONSUMER_KEYCODE(code) || IS_CONSUMER_RESERVED_KEYCODE(code)) {
host_consumer_send(0);
#endif

View File

@@ -834,6 +834,58 @@ enum qk_keycode_defines {
QK_USER_29 = 0x7E5D,
QK_USER_30 = 0x7E5E,
QK_USER_31 = 0x7E5F,
QK_CONSUMER_RESERVED_0 = 0x07F00,
QK_CONSUMER_RESERVED_1 = 0x07F01,
QK_CONSUMER_RESERVED_2 = 0x07F02,
QK_CONSUMER_RESERVED_3 = 0x07F03,
QK_CONSUMER_RESERVED_4 = 0x07F04,
QK_CONSUMER_RESERVED_5 = 0x07F05,
QK_CONSUMER_RESERVED_6 = 0x07F06,
QK_CONSUMER_RESERVED_7 = 0x07F07,
QK_CONSUMER_RESERVED_8 = 0x07F08,
QK_CONSUMER_RESERVED_9 = 0x07F09,
QK_CONSUMER_RESERVED_10 = 0x07F0A,
QK_CONSUMER_RESERVED_11 = 0x07F0B,
QK_CONSUMER_RESERVED_12 = 0x07F0C,
QK_CONSUMER_RESERVED_13 = 0x07F0D,
QK_CONSUMER_RESERVED_14 = 0x07F0E,
QK_CONSUMER_RESERVED_15 = 0x07F0F,
QK_CONSUMER_RESERVED_16 = 0x07F10,
QK_CONSUMER_RESERVED_17 = 0x07F11,
QK_CONSUMER_RESERVED_18 = 0x07F12,
QK_CONSUMER_RESERVED_19 = 0x07F13,
QK_CONSUMER_RESERVED_20 = 0x07F14,
QK_CONSUMER_RESERVED_21 = 0x07F15,
QK_CONSUMER_RESERVED_22 = 0x07F16,
QK_CONSUMER_RESERVED_23 = 0x07F17,
QK_CONSUMER_RESERVED_24 = 0x07F18,
QK_CONSUMER_RESERVED_25 = 0x07F19,
QK_CONSUMER_RESERVED_26 = 0x07F1A,
QK_CONSUMER_RESERVED_27 = 0x07F1B,
QK_CONSUMER_RESERVED_28 = 0x07F1C,
QK_CONSUMER_RESERVED_29 = 0x07F1D,
QK_CONSUMER_RESERVED_30 = 0x07F1E,
QK_CONSUMER_RESERVED_31 = 0x07F1F,
QK_CONSUMER_RESERVED_32 = 0x07F20,
QK_CONSUMER_RESERVED_33 = 0x07F21,
QK_CONSUMER_RESERVED_34 = 0x07F22,
QK_CONSUMER_RESERVED_35 = 0x07F23,
QK_CONSUMER_RESERVED_36 = 0x07F24,
QK_CONSUMER_RESERVED_37 = 0x07F25,
QK_CONSUMER_RESERVED_38 = 0x07F26,
QK_CONSUMER_RESERVED_39 = 0x07F27,
QK_CONSUMER_RESERVED_40 = 0x07F28,
QK_CONSUMER_RESERVED_41 = 0x07F29,
QK_CONSUMER_RESERVED_42 = 0x07F2A,
QK_CONSUMER_RESERVED_43 = 0x07F2B,
QK_CONSUMER_RESERVED_44 = 0x07F2C,
QK_CONSUMER_RESERVED_45 = 0x07F2D,
QK_CONSUMER_RESERVED_46 = 0x07F2E,
QK_CONSUMER_RESERVED_47 = 0x07F2F,
QK_CONSUMER_RESERVED_48 = 0x07F30,
QK_CONSUMER_RESERVED_49 = 0x07F31,
QK_CONSUMER_RESERVED_50 = 0x07F32,
QK_CONSUMER_RESERVED_51 = 0x07F33,
// Alias
XXXXXXX = KC_NO,
@@ -1457,6 +1509,58 @@ enum qk_keycode_defines {
QK_REP = QK_REPEAT_KEY,
QK_AREP = QK_ALT_REPEAT_KEY,
QK_LLCK = QK_LAYER_LOCK,
QK_CR_0 = QK_CONSUMER_RESERVED_0,
QK_CR_1 = QK_CONSUMER_RESERVED_1,
QK_CR_2 = QK_CONSUMER_RESERVED_2,
QK_CR_3 = QK_CONSUMER_RESERVED_3,
QK_CR_4 = QK_CONSUMER_RESERVED_4,
QK_CR_5 = QK_CONSUMER_RESERVED_5,
QK_CR_6 = QK_CONSUMER_RESERVED_6,
QK_CR_7 = QK_CONSUMER_RESERVED_7,
QK_CR_8 = QK_CONSUMER_RESERVED_8,
QK_CR_9 = QK_CONSUMER_RESERVED_9,
QK_CR_10 = QK_CONSUMER_RESERVED_10,
QK_CR_11 = QK_CONSUMER_RESERVED_11,
QK_CR_12 = QK_CONSUMER_RESERVED_12,
QK_CR_13 = QK_CONSUMER_RESERVED_13,
QK_CR_14 = QK_CONSUMER_RESERVED_14,
QK_CR_15 = QK_CONSUMER_RESERVED_15,
QK_CR_16 = QK_CONSUMER_RESERVED_16,
QK_CR_17 = QK_CONSUMER_RESERVED_17,
QK_CR_18 = QK_CONSUMER_RESERVED_18,
QK_CR_19 = QK_CONSUMER_RESERVED_19,
QK_CR_20 = QK_CONSUMER_RESERVED_20,
QK_CR_21 = QK_CONSUMER_RESERVED_21,
QK_CR_22 = QK_CONSUMER_RESERVED_22,
QK_CR_23 = QK_CONSUMER_RESERVED_23,
QK_CR_24 = QK_CONSUMER_RESERVED_24,
QK_CR_25 = QK_CONSUMER_RESERVED_25,
QK_CR_26 = QK_CONSUMER_RESERVED_26,
QK_CR_27 = QK_CONSUMER_RESERVED_27,
QK_CR_28 = QK_CONSUMER_RESERVED_28,
QK_CR_29 = QK_CONSUMER_RESERVED_29,
QK_CR_30 = QK_CONSUMER_RESERVED_30,
QK_CR_31 = QK_CONSUMER_RESERVED_31,
QK_CR_32 = QK_CONSUMER_RESERVED_32,
QK_CR_33 = QK_CONSUMER_RESERVED_33,
QK_CR_34 = QK_CONSUMER_RESERVED_34,
QK_CR_35 = QK_CONSUMER_RESERVED_35,
QK_CR_36 = QK_CONSUMER_RESERVED_36,
QK_CR_37 = QK_CONSUMER_RESERVED_37,
QK_CR_38 = QK_CONSUMER_RESERVED_38,
QK_CR_39 = QK_CONSUMER_RESERVED_39,
QK_CR_40 = QK_CONSUMER_RESERVED_40,
QK_CR_41 = QK_CONSUMER_RESERVED_41,
QK_CR_42 = QK_CONSUMER_RESERVED_42,
QK_CR_43 = QK_CONSUMER_RESERVED_43,
QK_CR_44 = QK_CONSUMER_RESERVED_44,
QK_CR_45 = QK_CONSUMER_RESERVED_45,
QK_CR_46 = QK_CONSUMER_RESERVED_46,
QK_CR_47 = QK_CONSUMER_RESERVED_47,
QK_CR_48 = QK_CONSUMER_RESERVED_48,
QK_CR_49 = QK_CONSUMER_RESERVED_49,
QK_CR_50 = QK_CONSUMER_RESERVED_50,
QK_CR_51 = QK_CONSUMER_RESERVED_51,
};
// Range Helpers
@@ -1518,6 +1622,7 @@ enum qk_keycode_defines {
#define IS_QUANTUM_KEYCODE(code) ((code) >= QK_BOOTLOADER && (code) <= QK_LAYER_LOCK)
#define IS_KB_KEYCODE(code) ((code) >= QK_KB_0 && (code) <= QK_KB_31)
#define IS_USER_KEYCODE(code) ((code) >= QK_USER_0 && (code) <= QK_USER_31)
#define IS_CONSUMER_RESERVED_KEYCODE(code) ((code) >= QK_CONSUMER_RESERVED_0 && (code) <= QK_CONSUMER_RESERVED_51)
// Switch statement Helpers
#define INTERNAL_KEYCODE_RANGE KC_NO ... KC_TRANSPARENT
@@ -1544,3 +1649,4 @@ enum qk_keycode_defines {
#define QUANTUM_KEYCODE_RANGE QK_BOOTLOADER ... QK_LAYER_LOCK
#define KB_KEYCODE_RANGE QK_KB_0 ... QK_KB_31
#define USER_KEYCODE_RANGE QK_USER_0 ... QK_USER_31
#define RESERVED_KEYCODE_RAGE QK_CONSUMER_RESERVED_0 ... QK_CONSUMER_RESERVED_51

View File

@@ -74,6 +74,9 @@ action_t action_for_keycode(uint16_t keycode) {
case CONSUMER_KEYCODE_RANGE:
action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(keycode));
break;
case RESERVED_KEYCODE_RAGE:
action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(keycode));
break;
#endif
case MOUSE_KEYCODE_RANGE:
action.code = ACTION_MOUSEKEY(keycode);

View File

@@ -288,7 +288,7 @@ static inline uint16_t KEYCODE2SYSTEM(uint8_t key) {
}
/* keycode to consumer usage */
static inline uint16_t KEYCODE2CONSUMER(uint8_t key) {
static inline uint16_t KEYCODE2CONSUMER(uint16_t key) {
switch (key) {
case KC_AUDIO_MUTE:
return AUDIO_MUTE;
@@ -344,6 +344,8 @@ static inline uint16_t KEYCODE2CONSUMER(uint8_t key) {
return AC_DESKTOP_SHOW_ALL_WINDOWS;
case KC_LAUNCHPAD:
return AC_SOFT_KEY_LEFT;
case RESERVED_KEYCODE_RAGE:
return 0x1CC + (key - QK_CONSUMER_RESERVED_0);
default:
return 0;
}