diff --git a/Controllers/QMKController/QMKKeychronController/QMKKeychronController.cpp b/Controllers/QMKController/QMKKeychronController/QMKKeychronController.cpp index f6abb9bd7..2d931dbaa 100644 --- a/Controllers/QMKController/QMKKeychronController/QMKKeychronController.cpp +++ b/Controllers/QMKController/QMKKeychronController/QMKKeychronController.cpp @@ -159,18 +159,29 @@ QMKKeychronController::QMKKeychronController(hid_device* dev_handle, const char /*-----------------------------------------------------*\ | Apply matrix corrections | \*-----------------------------------------------------*/ + const std::vector raw_led_info = led_info; + for(unsigned int patch_idx = 0; patch_idx < KEYCHRON_PATCH_COUNT; patch_idx++) { if(dev_pid == keychron_patches[patch_idx]->pid) { - for(unsigned int patch_entry_idx = 0; patch_entry_idx < keychron_patches[patch_idx]->num_entries; patch_entry_idx++) + for(unsigned int patch_entry_idx = 0; + patch_entry_idx < keychron_patches[patch_idx]->num_entries; + patch_entry_idx++) { - const keychron_patch_entry& patch_entry = keychron_patches[patch_idx]->patch[patch_entry_idx]; + const keychron_patch_entry& patch_entry = + keychron_patches[patch_idx]->patch[patch_entry_idx]; - if(patch_entry.led_idx < led_info.size()) + for(unsigned int led_idx = 0; led_idx < raw_led_info.size(); led_idx++) { - led_info[patch_entry.led_idx].row = patch_entry.row; - led_info[patch_entry.led_idx].col = patch_entry.col; + if(raw_led_info[led_idx].valid && + raw_led_info[led_idx].row == patch_entry.source_row && + raw_led_info[led_idx].col == patch_entry.source_col) + { + led_info[led_idx].row = patch_entry.row; + led_info[led_idx].col = patch_entry.col; + break; + } } } diff --git a/Controllers/QMKController/QMKKeychronController/QMKKeychronController_Devices.cpp b/Controllers/QMKController/QMKKeychronController/QMKKeychronController_Devices.cpp index 62c8e2612..34d6bf135 100644 --- a/Controllers/QMKController/QMKKeychronController/QMKKeychronController_Devices.cpp +++ b/Controllers/QMKController/QMKKeychronController/QMKKeychronController_Devices.cpp @@ -1,10 +1,13 @@ /*---------------------------------------------------------*\ -| QMKKechronController_Devices.cpp | +| QMKKeychronController_Devices.cpp | | | -| Keychron device matrix correction data | +| Keychron device matrix correction data | | | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | +| Generated from hand-corrected raw-to-display matrix | +| mappings. | +| | +| This file is part of the OpenRGB project | +| SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ #include "QMKKeychronController_Devices.h" @@ -13,5254 +16,6980 @@ /*---------------------------------------------------------*\ | Keychron Patch Types | -| The Keychron protocol does not provide RGB matrix X/Y | -| coordinates, only the position in the wiring matrix. | -| For most Keychron keyboards, the wiring matrix mostly | -| matches the physical position, but there are often a | -| few misplaced LEDs. Implement a matrix patching system | -| to apply keyboard-specific patches for these misplaced | -| LEDs. | +| | +| The Keychron protocol does not provide RGB matrix X/Y | +| coordinates, only the position in the wiring matrix. | +| For most Keychron keyboards, the wiring matrix mostly | +| matches the physical position, but there are often a | +| few misplaced LEDs. Implement a matrix patching system | +| to apply keyboard-specific patches for these misplaced | +| LEDs. | \*---------------------------------------------------------*/ /*---------------------------------------------------------*\ | Geometry Group 1: | -| 0x0522 C2 Pro 8K | +| 0x0106 Keychron Q1V2 ANSI | +| 0x0107 Keychron Q1V2 ANSI | +| 0x0108 Keychron Q1V2 ISO | +| 0x0109 Keychron Q1V2 ISO | +| 0x0310 Keychron V1 ANSI | +| 0x0311 Keychron V1 ANSI | +| 0x0312 Keychron V1 ISO | +| 0x0313 Keychron V1 ISO | +| 0x0610 Keychron Q1 Pro ANSI | +| 0x0611 Keychron Q1 Pro ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_001_patch_entries[] = +static const keychron_patch_entry q1v2_ansi_0106_entries[] = { - { 35, 1, 19 }, - { 36, 1, 20 }, - { 56, 2, 19 }, - { 57, 2, 20 }, - { 70, 3, 12 }, - { 73, 3, 19 }, - { 85, 4, 12 }, - { 89, 4, 19 }, - { 90, 4, 20 }, - { 103, 5, 19 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 3, 13, 3, 12 }, + { 4, 13, 4, 12 }, }; -static const keychron_patch keychron_c2_pro_8k_patch = +static const keychron_patch q1v2_ansi_0106_patch = { - KEYCHRON_C2_PRO_8K_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_001_patch_entries), - keychron_group_001_patch_entries + KEYCHRON_Q1V2_ANSI_0106_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_ansi_0106_entries), + q1v2_ansi_0106_entries +}; + +static const keychron_patch q1v2_ansi_0107_patch = +{ + KEYCHRON_Q1V2_ANSI_0107_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_ansi_0106_entries), + q1v2_ansi_0106_entries +}; + +static const keychron_patch q1v2_iso_0108_patch = +{ + KEYCHRON_Q1V2_ISO_0108_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_ansi_0106_entries), + q1v2_ansi_0106_entries +}; + +static const keychron_patch q1v2_iso_0109_patch = +{ + KEYCHRON_Q1V2_ISO_0109_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_ansi_0106_entries), + q1v2_ansi_0106_entries +}; + +static const keychron_patch v1_ansi_0310_patch = +{ + KEYCHRON_V1_ANSI_0310_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_ansi_0106_entries), + q1v2_ansi_0106_entries +}; + +static const keychron_patch v1_ansi_0311_patch = +{ + KEYCHRON_V1_ANSI_0311_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_ansi_0106_entries), + q1v2_ansi_0106_entries +}; + +static const keychron_patch v1_iso_0312_patch = +{ + KEYCHRON_V1_ISO_0312_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_ansi_0106_entries), + q1v2_ansi_0106_entries +}; + +static const keychron_patch v1_iso_0313_patch = +{ + KEYCHRON_V1_ISO_0313_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_ansi_0106_entries), + q1v2_ansi_0106_entries +}; + +static const keychron_patch q1_pro_ansi_patch = +{ + KEYCHRON_Q1_PRO_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_ansi_0106_entries), + q1v2_ansi_0106_entries +}; + +static const keychron_patch q1_pro_iso_patch = +{ + KEYCHRON_Q1_PRO_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_ansi_0106_entries), + q1v2_ansi_0106_entries }; /*---------------------------------------------------------*\ | Geometry Group 2: | -| 0x0532 C3 Pro 8K JIS | +| 0x010A Keychron Q1V2 JIS | +| 0x010B Keychron Q1V2 JIS | +| 0x0913 Keychron V1 Max ANSI | +| 0x0C10 Keychron V1 Ultra 8K ANSI | +| 0x0C11 Keychron V1 Ultra 8K ISO | +| 0x0C13 Keychron V1 Ultra SE ANSI | +| 0x0C14 Keychron V1 Ultra 8K | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_002_patch_entries[] = +static const keychron_patch_entry q1v2_jis_010a_entries[] = { - { 13, 0, 15 }, - { 14, 0, 16 }, - { 15, 0, 17 }, - { 29, 1, 13 }, - { 30, 1, 14 }, - { 31, 1, 15 }, - { 32, 1, 16 }, - { 33, 1, 17 }, - { 48, 2, 15 }, - { 49, 2, 16 }, - { 50, 2, 17 }, - { 63, 3, 12 }, - { 77, 4, 16 }, - { 88, 5, 15 }, - { 89, 5, 16 }, - { 90, 5, 17 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 3, 13, 3, 12 }, }; -static const keychron_patch keychron_c3_pro_8k_jis_patch = +static const keychron_patch q1v2_jis_010a_patch = { - KEYCHRON_C3_PRO_8K_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_002_patch_entries), - keychron_group_002_patch_entries + KEYCHRON_Q1V2_JIS_010A_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_jis_010a_entries), + q1v2_jis_010a_entries }; +static const keychron_patch q1v2_jis_010b_patch = +{ + KEYCHRON_Q1V2_JIS_010B_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_jis_010a_entries), + q1v2_jis_010a_entries +}; + +static const keychron_patch v1_max_ansi_patch = +{ + KEYCHRON_V1_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_jis_010a_entries), + q1v2_jis_010a_entries +}; + +static const keychron_patch v1_ultra_8k_ansi_patch = +{ + KEYCHRON_V1_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_jis_010a_entries), + q1v2_jis_010a_entries +}; + +static const keychron_patch v1_ultra_8k_iso_patch = +{ + KEYCHRON_V1_ULTRA_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_jis_010a_entries), + q1v2_jis_010a_entries +}; + +static const keychron_patch v1_ultra_se_ansi_patch = +{ + KEYCHRON_V1_ULTRA_SE_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_jis_010a_entries), + q1v2_jis_010a_entries +}; + +static const keychron_patch v1_ultra_8k_patch = +{ + KEYCHRON_V1_ULTRA_8K_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1v2_jis_010a_entries), + q1v2_jis_010a_entries +}; /*---------------------------------------------------------*\ | Geometry Group 3: | -| 0x0A11 K1 Max ISO | +| 0x0110 Keychron Q2 ANSI | +| 0x0112 Keychron Q2 ISO | +| 0x0320 Keychron V2 ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_003_patch_entries[] = +static const keychron_patch_entry q2_ansi_0110_entries[] = { - { 62, 3, 12 }, - { 75, 4, 12 }, + { 0, 14, 0, 15 }, + { 1, 14, 1, 15 }, + { 2, 12, 4, 14 }, + { 2, 13, 2, 12 }, + { 2, 14, 2, 15 }, + { 3, 13, 3, 12 }, + { 4, 14, 4, 15 }, }; -static const keychron_patch keychron_k1_max_iso_patch = +static const keychron_patch q2_ansi_0110_patch = { - KEYCHRON_K1_MAX_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_003_patch_entries), - keychron_group_003_patch_entries + KEYCHRON_Q2_ANSI_0110_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q2_ansi_0110_entries), + q2_ansi_0110_entries }; +static const keychron_patch q2_iso_0112_patch = +{ + KEYCHRON_Q2_ISO_0112_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q2_ansi_0110_entries), + q2_ansi_0110_entries +}; + +static const keychron_patch v2_ansi_0320_patch = +{ + KEYCHRON_V2_ANSI_0320_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q2_ansi_0110_entries), + q2_ansi_0110_entries +}; /*---------------------------------------------------------*\ | Geometry Group 4: | -| 0x0A12 K1 Max JIS | +| 0x0111 Keychron Q2 ANSI | +| 0x0113 Keychron Q2 ISO | +| 0x0321 Keychron V2 ANSI | +| 0x0323 Keychron V2 ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_004_patch_entries[] = +static const keychron_patch_entry q2_ansi_0111_entries[] = { - { 13, 0, 15 }, - { 14, 0, 16 }, - { 15, 0, 17 }, - { 33, 1, 17 }, - { 48, 2, 15 }, - { 49, 2, 16 }, - { 50, 2, 17 }, - { 63, 3, 12 }, - { 77, 4, 16 }, - { 88, 5, 15 }, - { 89, 5, 16 }, - { 90, 5, 17 }, + { 1, 14, 1, 15 }, + { 2, 12, 4, 14 }, + { 2, 13, 2, 12 }, + { 2, 14, 2, 15 }, + { 3, 13, 3, 12 }, + { 4, 14, 4, 15 }, }; -static const keychron_patch keychron_k1_max_jis_patch = +static const keychron_patch q2_ansi_0111_patch = { - KEYCHRON_K1_MAX_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_004_patch_entries), - keychron_group_004_patch_entries + KEYCHRON_Q2_ANSI_0111_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q2_ansi_0111_entries), + q2_ansi_0111_entries }; +static const keychron_patch q2_iso_0113_patch = +{ + KEYCHRON_Q2_ISO_0113_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q2_ansi_0111_entries), + q2_ansi_0111_entries +}; + +static const keychron_patch v2_ansi_0321_patch = +{ + KEYCHRON_V2_ANSI_0321_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q2_ansi_0111_entries), + q2_ansi_0111_entries +}; + +static const keychron_patch v2_iso_patch = +{ + KEYCHRON_V2_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q2_ansi_0111_entries), + q2_ansi_0111_entries +}; /*---------------------------------------------------------*\ | Geometry Group 5: | -| 0x0A10 K1 Max | +| 0x0120 Keychron Q3 ANSI | +| 0x0122 Keychron Q3 ISO | +| 0x0330 Keychron V3 ANSI | +| 0x0332 Keychron V3 ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_005_patch_entries[] = +static const keychron_patch_entry q3_ansi_0120_entries[] = { - { 62, 3, 12 }, - { 74, 4, 12 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 3, 12, 2, 16 }, + { 3, 13, 3, 12 }, + { 3, 14, 0, 16 }, + { 3, 15, 1, 16 }, + { 4, 13, 4, 12 }, + { 4, 14, 5, 16 }, }; -static const keychron_patch keychron_k1_max_patch = +static const keychron_patch q3_ansi_0120_patch = { - KEYCHRON_K1_MAX_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_005_patch_entries), - keychron_group_005_patch_entries + KEYCHRON_Q3_ANSI_0120_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_ansi_0120_entries), + q3_ansi_0120_entries }; +static const keychron_patch q3_iso_0122_patch = +{ + KEYCHRON_Q3_ISO_0122_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_ansi_0120_entries), + q3_ansi_0120_entries +}; + +static const keychron_patch v3_ansi_0330_patch = +{ + KEYCHRON_V3_ANSI_0330_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_ansi_0120_entries), + q3_ansi_0120_entries +}; + +static const keychron_patch v3_iso_0332_patch = +{ + KEYCHRON_V3_ISO_0332_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_ansi_0120_entries), + q3_ansi_0120_entries +}; /*---------------------------------------------------------*\ | Geometry Group 6: | -| 0x0D12 K1 Version 6 JIS | +| 0x0121 Keychron Q3 ANSI | +| 0x0331 Keychron V3 ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_006_patch_entries[] = +static const keychron_patch_entry q3_ansi_0121_entries[] = { - { 13, 0, 15 }, - { 14, 0, 16 }, - { 15, 0, 17 }, - { 30, 1, 14 }, - { 31, 1, 15 }, - { 32, 1, 16 }, - { 33, 1, 17 }, - { 48, 2, 15 }, - { 49, 2, 16 }, - { 50, 2, 17 }, - { 63, 3, 12 }, - { 77, 4, 16 }, - { 88, 5, 15 }, - { 89, 5, 16 }, - { 90, 5, 17 }, + { 3, 12, 2, 16 }, + { 3, 13, 3, 12 }, + { 3, 14, 0, 16 }, + { 3, 15, 1, 16 }, + { 4, 13, 4, 12 }, + { 4, 14, 5, 16 }, }; -static const keychron_patch keychron_k1_v6_jis_patch = +static const keychron_patch q3_ansi_0121_patch = { - KEYCHRON_K1_V6_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_006_patch_entries), - keychron_group_006_patch_entries + KEYCHRON_Q3_ANSI_0121_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_ansi_0121_entries), + q3_ansi_0121_entries }; +static const keychron_patch v3_ansi_0331_patch = +{ + KEYCHRON_V3_ANSI_0331_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_ansi_0121_entries), + q3_ansi_0121_entries +}; + +/*---------------------------------------------------------*\ +| Geometry Group 7: | +| 0x0123 Keychron Q3 ISO | +| 0x0333 Keychron V3 ISO | +\*---------------------------------------------------------*/ +static const keychron_patch_entry q3_iso_0123_entries[] = +{ + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 3, 12, 2, 16 }, + { 3, 13, 3, 12 }, + { 3, 14, 0, 16 }, + { 3, 15, 1, 16 }, + { 4, 13, 4, 12 }, + { 4, 14, 5, 16 }, +}; + +static const keychron_patch q3_iso_0123_patch = +{ + KEYCHRON_Q3_ISO_0123_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_iso_0123_entries), + q3_iso_0123_entries +}; + +static const keychron_patch v3_iso_0333_patch = +{ + KEYCHRON_V3_ISO_0333_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_iso_0123_entries), + q3_iso_0123_entries +}; + +/*---------------------------------------------------------*\ +| Geometry Group 8: | +| 0x0140 Keychron Q4 ANSI | +| 0x0142 Keychron Q4 ISO | +| 0x0170 Keychron Q7 ANSI | +| 0x0172 Keychron Q7 ISO | +| 0x0270 Keychron K7 Pro RGB | +| 0x0271 Keychron K7 Pro ISO RGB | +| 0x0340 Keychron V4 ANSI | +| 0x0342 Keychron V4 ISO | +| 0x0370 Keychron V7 ANSI | +| 0x0372 Keychron V7 ISO | +| 0x0620 Keychron Q2 Pro ANSI | +| 0x0621 Keychron Q2 Pro ISO | +| 0x0640 Keychron Q4 Pro ANSI RGB | +| 0x0940 Keychron V4 Max ANSI | +| 0x0A70 Keychron K7 Max ANSI RGB | +| 0x0A71 Keychron K7 Max ISO RGB | +| 0x0A90 Keychron K9 Max ANSI RGB | +\*---------------------------------------------------------*/ +static const keychron_patch_entry q4_ansi_entries[] = +{ + { 2, 13, 2, 12 }, + { 3, 13, 3, 12 }, +}; + +static const keychron_patch q4_ansi_patch = +{ + KEYCHRON_Q4_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; + +static const keychron_patch q4_iso_patch = +{ + KEYCHRON_Q4_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; + +static const keychron_patch q7_ansi_patch = +{ + KEYCHRON_Q7_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; + +static const keychron_patch q7_iso_patch = +{ + KEYCHRON_Q7_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; + +static const keychron_patch k7_pro_rgb_patch = +{ + KEYCHRON_K7_PRO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; + +static const keychron_patch k7_pro_iso_rgb_patch = +{ + KEYCHRON_K7_PRO_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; + +static const keychron_patch v4_ansi_patch = +{ + KEYCHRON_V4_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; + +static const keychron_patch v4_iso_patch = +{ + KEYCHRON_V4_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; + +static const keychron_patch v7_ansi_patch = +{ + KEYCHRON_V7_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; + +static const keychron_patch v7_iso_patch = +{ + KEYCHRON_V7_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; + +static const keychron_patch q2_pro_ansi_patch = +{ + KEYCHRON_Q2_PRO_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; + +static const keychron_patch q2_pro_iso_patch = +{ + KEYCHRON_Q2_PRO_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; + +static const keychron_patch q4_pro_ansi_rgb_patch = +{ + KEYCHRON_Q4_PRO_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; + +static const keychron_patch v4_max_ansi_patch = +{ + KEYCHRON_V4_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; + +static const keychron_patch k7_max_ansi_rgb_patch = +{ + KEYCHRON_K7_MAX_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; + +static const keychron_patch k7_max_iso_rgb_patch = +{ + KEYCHRON_K7_MAX_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; + +static const keychron_patch k9_max_ansi_rgb_patch = +{ + KEYCHRON_K9_MAX_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_ansi_entries), + q4_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 9: | -| 0x0AA1 K10 Max ISO | -| 0x16A1 K10 Ultra 8K ISO | +| 0x0150 Keychron Q5 ANSI | +| 0x0152 Keychron Q5 ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_009_patch_entries[] = +static const keychron_patch_entry q5_ansi_0150_entries[] = { - { 19, 0, 20 }, - { 40, 1, 20 }, - { 61, 2, 20 }, - { 90, 4, 12 }, - { 95, 4, 20 }, - { 107, 5, 17 }, + { 2, 14, 2, 18 }, + { 3, 12, 0, 18 }, + { 3, 13, 3, 12 }, + { 3, 14, 1, 18 }, + { 4, 13, 4, 12 }, + { 5, 5, 4, 18 }, + { 5, 10, 5, 9 }, + { 5, 11, 5, 10 }, + { 5, 12, 5, 11 }, }; -static const keychron_patch keychron_k10_max_iso_patch = +static const keychron_patch q5_ansi_0150_patch = { - KEYCHRON_K10_MAX_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_009_patch_entries), - keychron_group_009_patch_entries + KEYCHRON_Q5_ANSI_0150_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q5_ansi_0150_entries), + q5_ansi_0150_entries }; -static const keychron_patch keychron_k10_ultra_8k_iso_16a1_patch = +static const keychron_patch q5_iso_0152_patch = { - KEYCHRON_K10_ULTRA_8K_ISO_16A1_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_009_patch_entries), - keychron_group_009_patch_entries + KEYCHRON_Q5_ISO_0152_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q5_ansi_0150_entries), + q5_ansi_0150_entries }; - /*---------------------------------------------------------*\ | Geometry Group 10: | -| 0x0AA2 K10 Max JIS | +| 0x0151 Keychron Q5 ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_010_patch_entries[] = +static const keychron_patch_entry q5_ansi_0151_entries[] = { - { 13, 0, 15 }, - { 14, 0, 16 }, - { 15, 0, 17 }, - { 16, 0, 18 }, - { 17, 0, 19 }, - { 18, 0, 20 }, - { 19, 0, 21 }, - { 33, 1, 13 }, - { 34, 1, 14 }, - { 35, 1, 15 }, - { 36, 1, 16 }, - { 37, 1, 17 }, - { 38, 1, 18 }, - { 39, 1, 19 }, - { 40, 1, 20 }, - { 41, 1, 21 }, - { 56, 2, 15 }, - { 57, 2, 16 }, - { 58, 2, 17 }, - { 59, 2, 18 }, - { 60, 2, 19 }, - { 61, 2, 20 }, - { 62, 2, 21 }, - { 76, 3, 18 }, - { 77, 3, 19 }, - { 78, 3, 20 }, - { 92, 4, 16 }, - { 93, 4, 18 }, - { 94, 4, 19 }, - { 95, 4, 20 }, - { 96, 4, 21 }, - { 107, 5, 15 }, - { 108, 5, 16 }, - { 109, 5, 17 }, - { 111, 5, 20 }, + { 0, 7, 0, 6 }, + { 0, 8, 0, 7 }, + { 0, 9, 0, 8 }, + { 0, 10, 0, 9 }, + { 0, 11, 0, 10 }, + { 0, 12, 0, 11 }, + { 0, 13, 0, 12 }, + { 0, 14, 0, 13 }, + { 0, 15, 0, 14 }, + { 0, 16, 0, 15 }, + { 0, 17, 0, 16 }, + { 1, 15, 1, 14 }, + { 1, 16, 1, 15 }, + { 1, 17, 1, 16 }, + { 2, 14, 2, 17 }, + { 2, 15, 2, 14 }, + { 2, 16, 2, 15 }, + { 2, 17, 2, 16 }, + { 3, 13, 3, 12 }, + { 3, 14, 1, 17 }, + { 3, 15, 3, 14 }, + { 3, 16, 3, 15 }, + { 3, 17, 3, 16 }, + { 4, 13, 4, 12 }, + { 4, 14, 4, 13 }, + { 4, 15, 4, 14 }, + { 4, 16, 4, 15 }, + { 4, 17, 4, 16 }, + { 5, 5, 4, 17 }, + { 5, 10, 5, 9 }, + { 5, 11, 5, 10 }, + { 5, 12, 5, 11 }, + { 5, 13, 5, 12 }, + { 5, 14, 5, 13 }, + { 5, 15, 5, 14 }, + { 5, 16, 5, 15 }, + { 5, 17, 5, 16 }, }; -static const keychron_patch keychron_k10_max_jis_patch = +static const keychron_patch q5_ansi_0151_patch = { - KEYCHRON_K10_MAX_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_010_patch_entries), - keychron_group_010_patch_entries + KEYCHRON_Q5_ANSI_0151_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q5_ansi_0151_entries), + q5_ansi_0151_entries }; - /*---------------------------------------------------------*\ | Geometry Group 11: | -| 0x0AA0 K10 Max | -| 0x16A0 K10 Ultra 8K | +| 0x0153 Keychron Q5 ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_011_patch_entries[] = +static const keychron_patch_entry q5_iso_0153_entries[] = { - { 19, 0, 20 }, - { 40, 1, 20 }, - { 61, 2, 20 }, - { 89, 4, 12 }, - { 94, 4, 20 }, - { 106, 5, 17 }, + { 2, 14, 2, 18 }, + { 3, 13, 3, 12 }, + { 3, 14, 1, 18 }, + { 4, 13, 4, 12 }, + { 5, 5, 4, 18 }, + { 5, 10, 5, 9 }, + { 5, 11, 5, 10 }, + { 5, 12, 5, 11 }, }; -static const keychron_patch keychron_k10_max_patch = +static const keychron_patch q5_iso_0153_patch = { - KEYCHRON_K10_MAX_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_011_patch_entries), - keychron_group_011_patch_entries + KEYCHRON_Q5_ISO_0153_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q5_iso_0153_entries), + q5_iso_0153_entries }; -static const keychron_patch keychron_k10_ultra_8k_patch = -{ - KEYCHRON_K10_ULTRA_8K_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_011_patch_entries), - keychron_group_011_patch_entries -}; - - /*---------------------------------------------------------*\ | Geometry Group 12: | -| 0x16A3 K10 Ultra 8K ISO | +| 0x0160 Keychron Q6 ANSI | +| 0x0162 Keychron Q6 ISO | +| 0x0360 Keychron V6 ANSI | +| 0x0362 Keychron V6 ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_012_patch_entries[] = +static const keychron_patch_entry q6_ansi_0160_entries[] = { - { 36, 1, 20 }, - { 57, 2, 20 }, - { 86, 4, 12 }, - { 91, 4, 20 }, - { 103, 5, 17 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 17, 1, 19 }, + { 0, 18, 1, 20 }, + { 0, 19, 0, 17 }, + { 1, 19, 0, 18 }, + { 2, 19, 0, 19 }, + { 3, 13, 3, 12 }, + { 3, 14, 2, 19 }, + { 3, 15, 2, 20 }, + { 3, 16, 3, 19 }, + { 3, 19, 0, 20 }, + { 4, 13, 4, 12 }, + { 4, 14, 4, 19 }, + { 4, 16, 4, 20 }, + { 5, 18, 5, 19 }, }; -static const keychron_patch keychron_k10_ultra_8k_iso_16a3_patch = +static const keychron_patch q6_ansi_0160_patch = { - KEYCHRON_K10_ULTRA_8K_ISO_16A3_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_012_patch_entries), - keychron_group_012_patch_entries + KEYCHRON_Q6_ANSI_0160_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_ansi_0160_entries), + q6_ansi_0160_entries }; +static const keychron_patch q6_iso_patch = +{ + KEYCHRON_Q6_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_ansi_0160_entries), + q6_ansi_0160_entries +}; + +static const keychron_patch v6_ansi_0360_patch = +{ + KEYCHRON_V6_ANSI_0360_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_ansi_0160_entries), + q6_ansi_0160_entries +}; + +static const keychron_patch v6_iso_0362_patch = +{ + KEYCHRON_V6_ISO_0362_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_ansi_0160_entries), + q6_ansi_0160_entries +}; /*---------------------------------------------------------*\ | Geometry Group 13: | -| 0x0DA1 K10 Version 2 ISO | +| 0x0161 Keychron Q6 ANSI | +| 0x0163 Keychron Q6 ANSI | +| 0x0361 Keychron V6 ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_013_patch_entries[] = +static const keychron_patch_entry q6_ansi_0161_entries[] = { - { 70, 3, 12 }, - { 86, 4, 12 }, - { 104, 5, 19 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 17, 1, 19 }, + { 0, 18, 1, 20 }, + { 0, 19, 0, 17 }, + { 1, 19, 0, 18 }, + { 2, 19, 0, 19 }, + { 3, 13, 3, 12 }, + { 3, 14, 2, 19 }, + { 3, 15, 2, 20 }, + { 3, 16, 3, 19 }, + { 3, 19, 0, 20 }, + { 4, 13, 4, 12 }, + { 4, 14, 4, 19 }, + { 4, 16, 4, 20 }, + { 5, 18, 5, 19 }, }; -static const keychron_patch keychron_k10_v2_iso_patch = +static const keychron_patch q6_ansi_0161_patch = { - KEYCHRON_K10_V2_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_013_patch_entries), - keychron_group_013_patch_entries + KEYCHRON_Q6_ANSI_0161_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_ansi_0161_entries), + q6_ansi_0161_entries }; +static const keychron_patch q6_ansi_0163_patch = +{ + KEYCHRON_Q6_ANSI_0163_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_ansi_0161_entries), + q6_ansi_0161_entries +}; + +static const keychron_patch v6_ansi_0361_patch = +{ + KEYCHRON_V6_ANSI_0361_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_ansi_0161_entries), + q6_ansi_0161_entries +}; /*---------------------------------------------------------*\ | Geometry Group 14: | -| 0x0DA2 K10 Version 2 JIS | +| 0x0180 Keychron Q8 ANSI | +| 0x0182 Keychron Q8 ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_014_patch_entries[] = +static const keychron_patch_entry q8_ansi_0180_entries[] = { - { 13, 0, 15 }, - { 14, 0, 16 }, - { 15, 0, 17 }, - { 30, 1, 14 }, - { 31, 1, 15 }, - { 32, 1, 16 }, - { 33, 1, 17 }, - { 34, 1, 18 }, - { 35, 1, 19 }, - { 36, 1, 20 }, - { 37, 1, 21 }, - { 52, 2, 15 }, - { 53, 2, 16 }, - { 54, 2, 17 }, - { 55, 2, 18 }, - { 56, 2, 19 }, - { 57, 2, 20 }, - { 58, 2, 21 }, - { 71, 3, 12 }, - { 72, 3, 18 }, - { 73, 3, 19 }, - { 74, 3, 20 }, - { 88, 4, 16 }, - { 89, 4, 18 }, - { 90, 4, 19 }, - { 91, 4, 20 }, - { 92, 4, 21 }, - { 103, 5, 15 }, - { 104, 5, 16 }, - { 105, 5, 17 }, - { 106, 5, 18 }, - { 107, 5, 20 }, + { 0, 14, 0, 15 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 4, 2, 4, 3 }, + { 4, 3, 4, 4 }, + { 4, 9, 4, 11 }, + { 4, 12, 4, 13 }, + { 4, 13, 4, 14 }, + { 4, 14, 4, 15 }, }; -static const keychron_patch keychron_k10_v2_jis_patch = +static const keychron_patch q8_ansi_0180_patch = { - KEYCHRON_K10_V2_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_014_patch_entries), - keychron_group_014_patch_entries + KEYCHRON_Q8_ANSI_0180_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q8_ansi_0180_entries), + q8_ansi_0180_entries }; +static const keychron_patch q8_iso_0182_patch = +{ + KEYCHRON_Q8_ISO_0182_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q8_ansi_0180_entries), + q8_ansi_0180_entries +}; /*---------------------------------------------------------*\ | Geometry Group 15: | -| 0x0DA0 K10X | +| 0x0181 Keychron Q8 ANSI | +| 0x0183 Keychron Q8 ISO | +| 0x0381 Keychron V8 ANSI | +| 0x0680 Keychron Q8 Pro ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_015_patch_entries[] = +static const keychron_patch_entry q8_ansi_0181_entries[] = { - { 70, 3, 12 }, - { 85, 4, 12 }, - { 103, 5, 19 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 4, 2, 4, 3 }, + { 4, 3, 4, 4 }, + { 4, 9, 4, 11 }, + { 4, 12, 4, 13 }, + { 4, 13, 4, 14 }, + { 4, 14, 4, 15 }, }; -static const keychron_patch keychron_k10x_patch = +static const keychron_patch q8_ansi_0181_patch = { - KEYCHRON_K10X_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_015_patch_entries), - keychron_group_015_patch_entries + KEYCHRON_Q8_ANSI_0181_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q8_ansi_0181_entries), + q8_ansi_0181_entries }; +static const keychron_patch q8_iso_0183_patch = +{ + KEYCHRON_Q8_ISO_0183_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q8_ansi_0181_entries), + q8_ansi_0181_entries +}; + +static const keychron_patch v8_ansi_patch = +{ + KEYCHRON_V8_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q8_ansi_0181_entries), + q8_ansi_0181_entries +}; + +static const keychron_patch q8_pro_ansi_patch = +{ + KEYCHRON_Q8_PRO_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q8_ansi_0181_entries), + q8_ansi_0181_entries +}; /*---------------------------------------------------------*\ | Geometry Group 16: | -| 0x0AB4 K11 Max ISO Knob | +| 0x01A1 Keychron Q10 ANSI | +| 0x03A1 Keychron V10 ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_016_patch_entries[] = +static const keychron_patch_entry q10_ansi_entries[] = { - { 17, 2, 12 }, - { 22, 3, 12 }, - { 23, 3, 13 }, - { 24, 3, 14 }, - { 46, 4, 4 }, - { 67, 4, 8 }, - { 69, 4, 10 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 1, 15, 1, 16 }, + { 2, 15, 2, 16 }, + { 3, 15, 3, 16 }, + { 5, 3, 5, 4 }, + { 5, 4, 5, 5 }, + { 5, 9, 5, 10 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, }; -static const keychron_patch keychron_k11_max_iso_knob_patch = +static const keychron_patch q10_ansi_patch = { - KEYCHRON_K11_MAX_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_016_patch_entries), - keychron_group_016_patch_entries + KEYCHRON_Q10_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q10_ansi_entries), + q10_ansi_entries }; +static const keychron_patch v10_ansi_patch = +{ + KEYCHRON_V10_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q10_ansi_entries), + q10_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 17: | -| 0x0AB5 K11 Max JIS Knob | +| 0x01A3 Keychron Q10 ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_017_patch_entries[] = +static const keychron_patch_entry q10_iso_entries[] = { - { 7, 0, 16 }, - { 13, 1, 16 }, - { 16, 2, 11 }, - { 17, 2, 12 }, - { 19, 2, 16 }, - { 22, 3, 13 }, - { 23, 3, 14 }, - { 24, 3, 15 }, - { 25, 3, 16 }, - { 30, 4, 15 }, - { 31, 4, 16 }, - { 32, 4, 17 }, - { 35, 1, 5 }, - { 36, 1, 6 }, - { 40, 2, 5 }, - { 44, 3, 6 }, - { 48, 3, 7 }, - { 51, 4, 5 }, - { 52, 1, 7 }, - { 56, 2, 6 }, - { 57, 2, 7 }, - { 61, 3, 8 }, - { 62, 2, 8 }, - { 63, 2, 9 }, - { 64, 2, 10 }, - { 65, 4, 7 }, - { 66, 3, 9 }, - { 67, 3, 10 }, - { 68, 3, 11 }, - { 69, 3, 12 }, - { 70, 4, 8 }, - { 72, 4, 10 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 1, 15, 1, 16 }, + { 2, 15, 2, 16 }, + { 3, 15, 3, 16 }, + { 5, 7, 5, 5 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, }; -static const keychron_patch keychron_k11_max_jis_knob_patch = +static const keychron_patch q10_iso_patch = { - KEYCHRON_K11_MAX_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_017_patch_entries), - keychron_group_017_patch_entries + KEYCHRON_Q10_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q10_iso_entries), + q10_iso_entries }; - /*---------------------------------------------------------*\ | Geometry Group 18: | -| 0x0AB3 K11 Max Knob | +| 0x01B1 Keychron Q65 ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_018_patch_entries[] = +static const keychron_patch_entry q65_ansi_entries[] = { - { 42, 2, 12 }, - { 55, 3, 12 }, - { 56, 3, 13 }, - { 60, 4, 4 }, - { 63, 4, 8 }, - { 65, 4, 10 }, - { 66, 4, 14 }, - { 67, 4, 15 }, - { 68, 4, 16 }, + { 2, 14, 2, 13 }, + { 3, 1, 3, 2 }, }; -static const keychron_patch keychron_k11_max_knob_patch = +static const keychron_patch q65_ansi_patch = { - KEYCHRON_K11_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_018_patch_entries), - keychron_group_018_patch_entries + KEYCHRON_Q65_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q65_ansi_entries), + q65_ansi_entries }; - /*---------------------------------------------------------*\ | Geometry Group 19: | -| 0x0AD1 K13 Max ISO | +| 0x01C0 Keychron Q60 ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_019_patch_entries[] = +static const keychron_patch_entry q60_ansi_entries[] = { - { 62, 3, 12 }, - { 78, 4, 12 }, + { 2, 13, 2, 12 }, + { 4, 0, 4, 1 }, + { 4, 1, 4, 2 }, + { 4, 10, 4, 11 }, + { 4, 11, 4, 12 }, + { 4, 12, 0, 14 }, }; -static const keychron_patch keychron_k13_max_iso_patch = +static const keychron_patch q60_ansi_patch = { - KEYCHRON_K13_MAX_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_019_patch_entries), - keychron_group_019_patch_entries + KEYCHRON_Q60_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q60_ansi_entries), + q60_ansi_entries }; - /*---------------------------------------------------------*\ | Geometry Group 20: | -| 0x0AD2 K13 Max JIS | +| 0x01D1 Keychron Q12 ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_020_patch_entries[] = +static const keychron_patch_entry q12_ansi_entries[] = { - { 13, 0, 15 }, - { 14, 0, 16 }, - { 15, 0, 17 }, - { 33, 1, 17 }, - { 48, 2, 15 }, - { 49, 2, 16 }, - { 50, 2, 17 }, - { 63, 3, 12 }, - { 64, 3, 15 }, - { 65, 3, 16 }, - { 66, 3, 17 }, - { 80, 4, 16 }, - { 91, 5, 15 }, - { 92, 5, 16 }, - { 93, 5, 17 }, + { 0, 0, 0, 4 }, + { 0, 1, 0, 5 }, + { 0, 2, 0, 6 }, + { 0, 3, 0, 7 }, + { 0, 4, 0, 8 }, + { 0, 5, 0, 10 }, + { 0, 6, 0, 11 }, + { 0, 7, 0, 12 }, + { 0, 8, 0, 13 }, + { 0, 9, 0, 14 }, + { 0, 10, 0, 15 }, + { 0, 11, 0, 16 }, + { 0, 12, 0, 17 }, + { 0, 13, 0, 18 }, + { 0, 14, 0, 19 }, + { 0, 16, 0, 1 }, + { 0, 17, 0, 2 }, + { 1, 0, 1, 4 }, + { 1, 1, 1, 5 }, + { 1, 2, 1, 6 }, + { 1, 3, 1, 7 }, + { 1, 4, 1, 8 }, + { 1, 5, 1, 9 }, + { 1, 6, 1, 10 }, + { 1, 7, 1, 11 }, + { 1, 8, 1, 12 }, + { 1, 9, 1, 13 }, + { 1, 10, 1, 14 }, + { 1, 11, 1, 15 }, + { 1, 12, 1, 16 }, + { 1, 13, 1, 17 }, + { 1, 14, 1, 19 }, + { 1, 15, 1, 0 }, + { 1, 16, 1, 1 }, + { 1, 17, 1, 2 }, + { 2, 0, 2, 4 }, + { 2, 1, 2, 5 }, + { 2, 2, 2, 6 }, + { 2, 3, 2, 7 }, + { 2, 4, 2, 8 }, + { 2, 5, 2, 9 }, + { 2, 6, 2, 10 }, + { 2, 7, 2, 11 }, + { 2, 8, 2, 12 }, + { 2, 9, 2, 13 }, + { 2, 10, 2, 14 }, + { 2, 11, 2, 15 }, + { 2, 12, 2, 16 }, + { 2, 13, 2, 17 }, + { 2, 14, 2, 19 }, + { 2, 15, 2, 0 }, + { 2, 16, 2, 1 }, + { 2, 17, 2, 2 }, + { 3, 0, 3, 4 }, + { 3, 1, 3, 6 }, + { 3, 2, 3, 7 }, + { 3, 3, 3, 8 }, + { 3, 4, 3, 9 }, + { 3, 5, 3, 10 }, + { 3, 6, 3, 11 }, + { 3, 7, 3, 12 }, + { 3, 8, 3, 13 }, + { 3, 9, 3, 14 }, + { 3, 10, 3, 15 }, + { 3, 11, 3, 16 }, + { 3, 12, 4, 3 }, + { 3, 13, 3, 17 }, + { 3, 14, 3, 19 }, + { 3, 15, 3, 0 }, + { 3, 16, 3, 1 }, + { 3, 17, 3, 2 }, + { 4, 0, 4, 4 }, + { 4, 2, 4, 6 }, + { 4, 3, 4, 7 }, + { 4, 4, 4, 8 }, + { 4, 5, 4, 9 }, + { 4, 6, 4, 10 }, + { 4, 7, 4, 11 }, + { 4, 8, 4, 12 }, + { 4, 9, 4, 13 }, + { 4, 10, 4, 14 }, + { 4, 11, 4, 15 }, + { 4, 13, 4, 16 }, + { 4, 14, 4, 18 }, + { 4, 15, 4, 0 }, + { 4, 16, 4, 1 }, + { 4, 17, 4, 2 }, + { 5, 0, 5, 4 }, + { 5, 1, 5, 5 }, + { 5, 2, 5, 6 }, + { 5, 5, 1, 3 }, + { 5, 6, 5, 9 }, + { 5, 7, 2, 3 }, + { 5, 9, 5, 13 }, + { 5, 10, 5, 14 }, + { 5, 11, 5, 15 }, + { 5, 12, 5, 17 }, + { 5, 13, 5, 18 }, + { 5, 14, 5, 19 }, + { 5, 15, 5, 0 }, + { 5, 16, 0, 3 }, + { 5, 17, 5, 2 }, }; -static const keychron_patch keychron_k13_max_jis_patch = +static const keychron_patch q12_ansi_patch = { - KEYCHRON_K13_MAX_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_020_patch_entries), - keychron_group_020_patch_entries + KEYCHRON_Q12_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q12_ansi_entries), + q12_ansi_entries }; - /*---------------------------------------------------------*\ | Geometry Group 21: | -| 0x0AD0 K13 Max | +| 0x01D3 Keychron Q12 ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_021_patch_entries[] = +static const keychron_patch_entry q12_iso_entries[] = { - { 62, 3, 12 }, - { 77, 4, 12 }, + { 0, 0, 0, 4 }, + { 0, 1, 0, 5 }, + { 0, 2, 0, 6 }, + { 0, 3, 0, 7 }, + { 0, 4, 0, 8 }, + { 0, 5, 0, 9 }, + { 0, 6, 0, 10 }, + { 0, 7, 0, 11 }, + { 0, 8, 0, 12 }, + { 0, 9, 0, 14 }, + { 0, 10, 0, 15 }, + { 0, 11, 0, 16 }, + { 0, 12, 0, 17 }, + { 0, 13, 0, 18 }, + { 0, 14, 0, 19 }, + { 0, 16, 0, 1 }, + { 0, 17, 0, 2 }, + { 1, 0, 1, 4 }, + { 1, 1, 1, 5 }, + { 1, 2, 1, 6 }, + { 1, 3, 1, 7 }, + { 1, 4, 1, 8 }, + { 1, 5, 1, 9 }, + { 1, 6, 1, 10 }, + { 1, 7, 1, 11 }, + { 1, 8, 1, 12 }, + { 1, 9, 1, 13 }, + { 1, 10, 1, 14 }, + { 1, 11, 1, 15 }, + { 1, 12, 1, 16 }, + { 1, 13, 1, 17 }, + { 1, 14, 1, 19 }, + { 1, 15, 1, 0 }, + { 1, 16, 1, 1 }, + { 1, 17, 1, 2 }, + { 2, 0, 2, 4 }, + { 2, 1, 2, 5 }, + { 2, 2, 2, 6 }, + { 2, 3, 2, 7 }, + { 2, 4, 2, 8 }, + { 2, 5, 2, 9 }, + { 2, 6, 2, 10 }, + { 2, 7, 2, 11 }, + { 2, 8, 2, 12 }, + { 2, 9, 2, 13 }, + { 2, 10, 2, 14 }, + { 2, 11, 2, 15 }, + { 2, 12, 2, 16 }, + { 2, 13, 2, 17 }, + { 2, 14, 2, 19 }, + { 2, 15, 2, 0 }, + { 2, 16, 2, 1 }, + { 2, 17, 2, 2 }, + { 3, 0, 3, 4 }, + { 3, 1, 3, 6 }, + { 3, 2, 3, 7 }, + { 3, 3, 3, 8 }, + { 3, 4, 3, 9 }, + { 3, 5, 3, 10 }, + { 3, 6, 3, 11 }, + { 3, 7, 3, 12 }, + { 3, 8, 3, 13 }, + { 3, 9, 3, 14 }, + { 3, 10, 3, 15 }, + { 3, 11, 3, 16 }, + { 3, 12, 4, 3 }, + { 3, 13, 3, 17 }, + { 3, 14, 3, 19 }, + { 3, 15, 3, 0 }, + { 3, 16, 3, 1 }, + { 3, 17, 3, 2 }, + { 4, 0, 4, 4 }, + { 4, 1, 4, 5 }, + { 4, 2, 4, 6 }, + { 4, 3, 4, 7 }, + { 4, 4, 4, 8 }, + { 4, 5, 4, 9 }, + { 4, 6, 4, 10 }, + { 4, 7, 4, 11 }, + { 4, 8, 4, 12 }, + { 4, 9, 4, 13 }, + { 4, 10, 4, 14 }, + { 4, 11, 4, 15 }, + { 4, 13, 4, 16 }, + { 4, 14, 4, 18 }, + { 4, 15, 4, 0 }, + { 4, 16, 4, 1 }, + { 4, 17, 4, 2 }, + { 5, 0, 5, 3 }, + { 5, 1, 5, 4 }, + { 5, 2, 5, 5 }, + { 5, 5, 1, 3 }, + { 5, 6, 5, 9 }, + { 5, 7, 2, 3 }, + { 5, 9, 5, 13 }, + { 5, 10, 5, 14 }, + { 5, 11, 5, 15 }, + { 5, 12, 5, 17 }, + { 5, 13, 5, 18 }, + { 5, 14, 5, 19 }, + { 5, 15, 5, 0 }, + { 5, 16, 0, 3 }, + { 5, 17, 5, 1 }, }; -static const keychron_patch keychron_k13_max_patch = +static const keychron_patch q12_iso_patch = { - KEYCHRON_K13_MAX_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_021_patch_entries), - keychron_group_021_patch_entries + KEYCHRON_Q12_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q12_iso_entries), + q12_iso_entries }; - /*---------------------------------------------------------*\ | Geometry Group 22: | -| 0x0AF1 K15 Max ISO Knob | +| 0x0211 Keychron K1 Pro ISO RGB | +| 0x0250 Keychron K5 Pro ANSI RGB | +| 0x0251 Keychron K5 Pro ISO RGB | +| 0x0280 Keychron K8 Pro RGB | +| 0x02A0 Keychron K10 Pro ANSI RGB | +| 0x02A1 Keychron K10 Pro ISO RGB | +| 0x0A50 Keychron K5 Max ANSI RGB | +| 0x0A51 Keychron K5 Max ISO RGB | +| 0x1680 Keychron K8 Ultra 8K ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_022_patch_entries[] = +static const keychron_patch_entry k1_pro_iso_rgb_entries[] = { - { 15, 1, 16 }, - { 22, 2, 16 }, - { 29, 3, 16 }, - { 40, 5, 14 }, - { 41, 5, 15 }, - { 42, 5, 16 }, - { 63, 5, 4 }, - { 89, 5, 11 }, - { 90, 5, 12 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 3, 13, 3, 12 }, + { 4, 13, 4, 12 }, }; -static const keychron_patch keychron_k15_max_iso_knob_patch = +static const keychron_patch k1_pro_iso_rgb_patch = { - KEYCHRON_K15_MAX_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_022_patch_entries), - keychron_group_022_patch_entries + KEYCHRON_K1_PRO_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k1_pro_iso_rgb_entries), + k1_pro_iso_rgb_entries }; +static const keychron_patch k5_pro_ansi_rgb_patch = +{ + KEYCHRON_K5_PRO_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k1_pro_iso_rgb_entries), + k1_pro_iso_rgb_entries +}; + +static const keychron_patch k5_pro_iso_rgb_patch = +{ + KEYCHRON_K5_PRO_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k1_pro_iso_rgb_entries), + k1_pro_iso_rgb_entries +}; + +static const keychron_patch k8_pro_rgb_patch = +{ + KEYCHRON_K8_PRO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k1_pro_iso_rgb_entries), + k1_pro_iso_rgb_entries +}; + +static const keychron_patch k10_pro_ansi_rgb_patch = +{ + KEYCHRON_K10_PRO_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k1_pro_iso_rgb_entries), + k1_pro_iso_rgb_entries +}; + +static const keychron_patch k10_pro_iso_rgb_patch = +{ + KEYCHRON_K10_PRO_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k1_pro_iso_rgb_entries), + k1_pro_iso_rgb_entries +}; + +static const keychron_patch k5_max_ansi_rgb_patch = +{ + KEYCHRON_K5_MAX_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k1_pro_iso_rgb_entries), + k1_pro_iso_rgb_entries +}; + +static const keychron_patch k5_max_iso_rgb_patch = +{ + KEYCHRON_K5_MAX_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k1_pro_iso_rgb_entries), + k1_pro_iso_rgb_entries +}; + +static const keychron_patch k8_ultra_8k_ansi_patch = +{ + KEYCHRON_K8_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k1_pro_iso_rgb_entries), + k1_pro_iso_rgb_entries +}; /*---------------------------------------------------------*\ | Geometry Group 23: | -| 0x0AF2 K15 Max JIS Knob | +| 0x0220 Keychron K2 Pro RGB | +| 0x0A20 Keychron K2 Max ANSI RGB | +| 0x0A21 Keychron K2 Max ISO RGB | +| 0x0D40 Keychron K4 V3 ANSI RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_023_patch_entries[] = +static const keychron_patch_entry k2_pro_rgb_entries[] = { - { 7, 0, 16 }, - { 16, 1, 17 }, - { 23, 2, 17 }, - { 30, 3, 17 }, - { 33, 4, 2 }, - { 37, 4, 16 }, - { 42, 5, 15 }, - { 43, 5, 16 }, - { 44, 5, 17 }, - { 61, 4, 3 }, - { 62, 4, 4 }, - { 63, 4, 5 }, - { 91, 5, 11 }, - { 92, 5, 12 }, + { 3, 13, 3, 12 }, + { 4, 13, 4, 14 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, }; -static const keychron_patch keychron_k15_max_jis_knob_patch = +static const keychron_patch k2_pro_rgb_patch = { - KEYCHRON_K15_MAX_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_023_patch_entries), - keychron_group_023_patch_entries + KEYCHRON_K2_PRO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k2_pro_rgb_entries), + k2_pro_rgb_entries }; +static const keychron_patch k2_max_ansi_rgb_patch = +{ + KEYCHRON_K2_MAX_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k2_pro_rgb_entries), + k2_pro_rgb_entries +}; + +static const keychron_patch k2_max_iso_rgb_patch = +{ + KEYCHRON_K2_MAX_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k2_pro_rgb_entries), + k2_pro_rgb_entries +}; + +static const keychron_patch k4_v3_ansi_rgb_patch = +{ + KEYCHRON_K4_V3_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k2_pro_rgb_entries), + k2_pro_rgb_entries +}; /*---------------------------------------------------------*\ | Geometry Group 24: | -| 0x0AF0 K15 Max Knob | +| 0x0230 Keychron K3 Pro | +| 0x0231 Keychron K3 Pro | +| 0x0408 Keychron J4 | +| 0x0412 Keychron J9 | +| 0x0413 Keychron J9 ISO | +| 0x041A Keychron Keycheron J7 | +| 0x042B Keychron J9 Ultra 8K ANSI | +| 0x0437 Keychron C3 Pro 8K ANSI | +| 0x043A Keychron C3 Max ANSI | +| 0x0453 Keychron J5 ANSI | +| 0x0457 Keychron J4 ANSI RGB | +| 0x0479 Keychron Z7 MAX ANSI RGB | +| 0x051D Keychron C1 Pro 8K ISO RGB | +| 0x0521 Keychron C1 Pro 8K ANSI RGB | +| 0x0530 Keychron C3 Pro 8K ANSI | +| 0x0531 Keychron C3 Pro 8K ISO RGB | +| 0x0830 Keychron Q3 Max ANSI | +| 0x0A10 Keychron K1 Max ANSI RGB | +| 0x0A11 Keychron K1 Max ISO RGB | +| 0x0A30 Keychron K3 Max ANSI RGB | +| 0x0A31 Keychron K3 Max ISO RGB | +| 0x0A3F Keychron K3 Max ANSI RGB | +| 0x0A80 Keychron K8 Max ANSI RGB | +| 0x0A81 Keychron K8 Max ISO RGB | +| 0x0AD0 Keychron K13 Max ANSI RGB | +| 0x0AD1 Keychron K13 Max ISO RGB | +| 0x0D10 Keychron K1 V6 ANSI RGB | +| 0x0D11 Keychron K1 V6 ISO RGB | +| 0x0D20 Keychron K2 V3 ANSI RGB | +| 0x0D21 Keychron K2 V3 ISO RGB | +| 0x0D30 Keychron K3 V3 ANSI RGB | +| 0x0D31 Keychron K3 V3 ISO RGB | +| 0x0D3B Keychron K3 Max SE RGB | +| 0x0D80 Keychron K8 V2 ANSI RGB | +| 0x0F30 Keychron V3 8K ANSI | +| 0x0F31 Keychron V3 8K ISO | +| 0x1230 Keychron Q3 Ultra 8K ANSI | +| 0x1231 Keychron Q3 Ultra 8K ISO RGB | +| 0x1610 Keychron K1 Ultra 8K | +| 0x1611 Keychron K1 Ultra 8K ISO RGB | +| 0x1630 Keychron K3 Ultra 8K ANSI | +| 0x1631 Keychron K3 Ultra 8K ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_024_patch_entries[] = +static const keychron_patch_entry k3_pro_0230_entries[] = { - { 15, 1, 16 }, - { 22, 2, 16 }, - { 29, 3, 16 }, - { 32, 4, 2 }, - { 39, 5, 14 }, - { 40, 5, 15 }, - { 41, 5, 16 }, - { 57, 3, 6 }, - { 58, 4, 3 }, - { 59, 4, 4 }, - { 60, 4, 5 }, - { 61, 4, 6 }, - { 63, 5, 4 }, - { 64, 5, 6 }, - { 87, 5, 8 }, - { 89, 5, 7 }, + { 3, 13, 3, 12 }, + { 4, 13, 4, 12 }, }; -static const keychron_patch keychron_k15_max_knob_patch = +static const keychron_patch k3_pro_0230_patch = { - KEYCHRON_K15_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_024_patch_entries), - keychron_group_024_patch_entries + KEYCHRON_K3_PRO_0230_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries }; +static const keychron_patch k3_pro_0231_patch = +{ + KEYCHRON_K3_PRO_0231_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch j4_patch = +{ + KEYCHRON_J4_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch j9_patch = +{ + KEYCHRON_J9_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch j9_iso_patch = +{ + KEYCHRON_J9_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch keycheron_j7_patch = +{ + KEYCHRON_KEYCHERON_J7_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch j9_ultra_8k_ansi_patch = +{ + KEYCHRON_J9_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch c3_pro_8k_ansi_0437_patch = +{ + KEYCHRON_C3_PRO_8K_ANSI_0437_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch c3_max_ansi_patch = +{ + KEYCHRON_C3_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch j5_ansi_patch = +{ + KEYCHRON_J5_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch j4_ansi_rgb_patch = +{ + KEYCHRON_J4_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch z7_max_ansi_rgb_patch = +{ + KEYCHRON_Z7_MAX_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch c1_pro_8k_iso_rgb_patch = +{ + KEYCHRON_C1_PRO_8K_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch c1_pro_8k_ansi_rgb_patch = +{ + KEYCHRON_C1_PRO_8K_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch c3_pro_8k_ansi_0530_patch = +{ + KEYCHRON_C3_PRO_8K_ANSI_0530_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch c3_pro_8k_iso_rgb_patch = +{ + KEYCHRON_C3_PRO_8K_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch q3_max_ansi_patch = +{ + KEYCHRON_Q3_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k1_max_ansi_rgb_patch = +{ + KEYCHRON_K1_MAX_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k1_max_iso_rgb_patch = +{ + KEYCHRON_K1_MAX_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k3_max_ansi_rgb_0a30_patch = +{ + KEYCHRON_K3_MAX_ANSI_RGB_0A30_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k3_max_iso_rgb_patch = +{ + KEYCHRON_K3_MAX_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k3_max_ansi_rgb_0a3f_patch = +{ + KEYCHRON_K3_MAX_ANSI_RGB_0A3F_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k8_max_ansi_rgb_patch = +{ + KEYCHRON_K8_MAX_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k8_max_iso_rgb_patch = +{ + KEYCHRON_K8_MAX_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k13_max_ansi_rgb_patch = +{ + KEYCHRON_K13_MAX_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k13_max_iso_rgb_patch = +{ + KEYCHRON_K13_MAX_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k1_v6_ansi_rgb_patch = +{ + KEYCHRON_K1_V6_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k1_v6_iso_rgb_patch = +{ + KEYCHRON_K1_V6_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k2_v3_ansi_rgb_patch = +{ + KEYCHRON_K2_V3_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k2_v3_iso_rgb_patch = +{ + KEYCHRON_K2_V3_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k3_v3_ansi_rgb_patch = +{ + KEYCHRON_K3_V3_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k3_v3_iso_rgb_patch = +{ + KEYCHRON_K3_V3_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k3_max_se_rgb_patch = +{ + KEYCHRON_K3_MAX_SE_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k8_v2_ansi_rgb_patch = +{ + KEYCHRON_K8_V2_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch v3_8k_ansi_patch = +{ + KEYCHRON_V3_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch v3_8k_iso_patch = +{ + KEYCHRON_V3_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch q3_ultra_8k_ansi_patch = +{ + KEYCHRON_Q3_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch q3_ultra_8k_iso_rgb_patch = +{ + KEYCHRON_Q3_ULTRA_8K_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k1_ultra_8k_patch = +{ + KEYCHRON_K1_ULTRA_8K_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k1_ultra_8k_iso_rgb_patch = +{ + KEYCHRON_K1_ULTRA_8K_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k3_ultra_8k_ansi_patch = +{ + KEYCHRON_K3_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; + +static const keychron_patch k3_ultra_8k_iso_patch = +{ + KEYCHRON_K3_ULTRA_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_pro_0230_entries), + k3_pro_0230_entries +}; /*---------------------------------------------------------*\ | Geometry Group 25: | -| 0x0A01 K17 Max ISO Knob | +| 0x0240 Keychron K4 Pro ANSI RGB | +| 0x0A40 Keychron K4 MAX ANSI RGB | +| 0x0A41 Keychron K4 MAX ISO RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_025_patch_entries[] = +static const keychron_patch_entry k4_pro_ansi_rgb_entries[] = { - { 33, 1, 13 }, - { 52, 2, 13 }, - { 70, 3, 12 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 3, 13, 3, 12 }, + { 3, 14, 3, 15 }, + { 3, 15, 3, 16 }, + { 3, 16, 3, 17 }, + { 3, 17, 0, 18 }, + { 4, 13, 4, 14 }, + { 4, 14, 4, 15 }, + { 4, 15, 4, 16 }, + { 4, 16, 4, 17 }, + { 4, 17, 4, 18 }, }; -static const keychron_patch keychron_k17_max_iso_knob_patch = +static const keychron_patch k4_pro_ansi_rgb_patch = { - KEYCHRON_K17_MAX_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_025_patch_entries), - keychron_group_025_patch_entries + KEYCHRON_K4_PRO_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k4_pro_ansi_rgb_entries), + k4_pro_ansi_rgb_entries }; +static const keychron_patch k4_max_ansi_rgb_patch = +{ + KEYCHRON_K4_MAX_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k4_pro_ansi_rgb_entries), + k4_pro_ansi_rgb_entries +}; + +static const keychron_patch k4_max_iso_rgb_patch = +{ + KEYCHRON_K4_MAX_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k4_pro_ansi_rgb_entries), + k4_pro_ansi_rgb_entries +}; /*---------------------------------------------------------*\ | Geometry Group 26: | -| 0x0A02 K17 Max JIS Knob | +| 0x0260 Keychron K6 Pro RGB | +| 0x0261 Keychron K6 Pro ISO RGB | +| 0x0A76 Keychron K7 Max V2 JIS RGB | +| 0x0B20 Keychron Q2 HE ANSI | +| 0x0E60 Keychron K6 HE ANSI | +| 0x0E61 Keychron K6 HE ISO RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_026_patch_entries[] = +static const keychron_patch_entry k6_pro_rgb_entries[] = { - { 53, 2, 13 }, - { 71, 3, 12 }, - { 88, 4, 13 }, - { 103, 5, 14 }, - { 104, 5, 15 }, - { 105, 5, 16 }, - { 106, 5, 17 }, + { 2, 13, 2, 12 }, }; -static const keychron_patch keychron_k17_max_jis_knob_patch = +static const keychron_patch k6_pro_rgb_patch = { - KEYCHRON_K17_MAX_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_026_patch_entries), - keychron_group_026_patch_entries + KEYCHRON_K6_PRO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k6_pro_rgb_entries), + k6_pro_rgb_entries }; +static const keychron_patch k6_pro_iso_rgb_patch = +{ + KEYCHRON_K6_PRO_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k6_pro_rgb_entries), + k6_pro_rgb_entries +}; + +static const keychron_patch k7_max_v2_jis_rgb_patch = +{ + KEYCHRON_K7_MAX_V2_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k6_pro_rgb_entries), + k6_pro_rgb_entries +}; + +static const keychron_patch q2_he_ansi_patch = +{ + KEYCHRON_Q2_HE_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k6_pro_rgb_entries), + k6_pro_rgb_entries +}; + +static const keychron_patch k6_he_ansi_patch = +{ + KEYCHRON_K6_HE_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k6_pro_rgb_entries), + k6_pro_rgb_entries +}; + +static const keychron_patch k6_he_iso_rgb_patch = +{ + KEYCHRON_K6_HE_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k6_pro_rgb_entries), + k6_pro_rgb_entries +}; /*---------------------------------------------------------*\ | Geometry Group 27: | -| 0x0A00 K17 Max Knob | +| 0x0282 Keychron K8 Pro JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_027_patch_entries[] = +static const keychron_patch_entry k8_pro_jis_rgb_entries[] = { - { 33, 1, 13 }, - { 52, 2, 13 }, - { 70, 3, 12 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 11 }, + { 0, 10, 0, 12 }, + { 0, 11, 0, 13 }, + { 0, 12, 0, 14 }, + { 0, 13, 1, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 3, 13, 3, 12 }, + { 4, 15, 4, 16 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, }; -static const keychron_patch keychron_k17_max_knob_patch = +static const keychron_patch k8_pro_jis_rgb_patch = { - KEYCHRON_K17_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_027_patch_entries), - keychron_group_027_patch_entries + KEYCHRON_K8_PRO_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k8_pro_jis_rgb_entries), + k8_pro_jis_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 28: | -| 0x0E20 K2 HE ANSI | -| 0x0E30 K3 HE | +| 0x02A2 Keychron K10 Pro JIS RGB | +| 0x0A52 Keychron K5 Max JIS RGB | +| 0x0A58 Keychron K5 Max JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_028_patch_entries[] = +static const keychron_patch_entry k10_pro_jis_rgb_entries[] = { - { 30, 1, 15 }, - { 45, 2, 15 }, - { 59, 3, 15 }, - { 72, 4, 14 }, - { 73, 4, 15 }, - { 81, 5, 13 }, - { 82, 5, 14 }, - { 83, 5, 15 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 11 }, + { 0, 10, 0, 12 }, + { 0, 11, 0, 13 }, + { 0, 12, 0, 14 }, + { 0, 13, 1, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 0, 17, 0, 18 }, + { 0, 18, 0, 19 }, + { 0, 19, 0, 20 }, + { 0, 20, 0, 21 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 1, 18, 1, 19 }, + { 1, 19, 1, 20 }, + { 1, 20, 1, 21 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 2, 18, 2, 19 }, + { 2, 19, 2, 20 }, + { 2, 20, 2, 21 }, + { 3, 13, 3, 12 }, + { 3, 17, 3, 18 }, + { 3, 18, 3, 19 }, + { 3, 19, 3, 20 }, + { 4, 15, 4, 16 }, + { 4, 17, 4, 18 }, + { 4, 18, 4, 19 }, + { 4, 19, 4, 20 }, + { 4, 20, 4, 21 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, + { 5, 17, 5, 18 }, + { 5, 19, 5, 20 }, }; -static const keychron_patch keychron_k2_he_ansi_patch = +static const keychron_patch k10_pro_jis_rgb_patch = { - KEYCHRON_K2_HE_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_028_patch_entries), - keychron_group_028_patch_entries + KEYCHRON_K10_PRO_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k10_pro_jis_rgb_entries), + k10_pro_jis_rgb_entries }; -static const keychron_patch keychron_k3_he_patch = +static const keychron_patch k5_max_jis_rgb_0a52_patch = { - KEYCHRON_K3_HE_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_028_patch_entries), - keychron_group_028_patch_entries + KEYCHRON_K5_MAX_JIS_RGB_0A52_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k10_pro_jis_rgb_entries), + k10_pro_jis_rgb_entries }; +static const keychron_patch k5_max_jis_rgb_0a58_patch = +{ + KEYCHRON_K5_MAX_JIS_RGB_0A58_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k10_pro_jis_rgb_entries), + k10_pro_jis_rgb_entries +}; /*---------------------------------------------------------*\ | Geometry Group 29: | -| 0x0E21 K2 HE ISO | -| 0x0E31 K3 HE ISO | +| 0x0317 Keychron V1 BR | +| 0x041D Keychron Z6-75 Ultra 8K RGB | +| 0x044D Keychron Z5-75 Ultra 8K ANSI | +| 0x0451 Keychron J10 Ultra 8K ANSI | +| 0x0452 Keychron J10 Ultra 8K ANSI | +| 0x0536 Keychron C3 Pro 8K ABTN2 | +| 0x0A22 Keychron K2 Max JIS RGB | +| 0x1620 Keychron K2 Ultra 8K ANSI | +| 0x1621 Keychron K2 Ultra 8K ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_029_patch_entries[] = +static const keychron_patch_entry v1_br_entries[] = { - { 30, 1, 15 }, - { 45, 2, 15 }, - { 59, 3, 15 }, - { 73, 4, 14 }, - { 74, 4, 15 }, - { 79, 5, 10 }, - { 80, 5, 11 }, - { 81, 5, 12 }, - { 82, 5, 13 }, - { 83, 5, 14 }, - { 84, 5, 15 }, + { 3, 13, 3, 12 }, }; -static const keychron_patch keychron_k2_he_iso_patch = +static const keychron_patch v1_br_patch = { - KEYCHRON_K2_HE_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_029_patch_entries), - keychron_group_029_patch_entries + KEYCHRON_V1_BR_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v1_br_entries), + v1_br_entries }; -static const keychron_patch keychron_k3_he_iso_patch = +static const keychron_patch z6_75_ultra_8k_rgb_patch = { - KEYCHRON_K3_HE_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_029_patch_entries), - keychron_group_029_patch_entries + KEYCHRON_Z6_75_ULTRA_8K_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v1_br_entries), + v1_br_entries }; +static const keychron_patch z5_75_ultra_8k_ansi_patch = +{ + KEYCHRON_Z5_75_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v1_br_entries), + v1_br_entries +}; + +static const keychron_patch j10_ultra_8k_ansi_0451_patch = +{ + KEYCHRON_J10_ULTRA_8K_ANSI_0451_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v1_br_entries), + v1_br_entries +}; + +static const keychron_patch j10_ultra_8k_ansi_0452_patch = +{ + KEYCHRON_J10_ULTRA_8K_ANSI_0452_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v1_br_entries), + v1_br_entries +}; + +static const keychron_patch c3_pro_8k_abtn2_patch = +{ + KEYCHRON_C3_PRO_8K_ABTN2_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v1_br_entries), + v1_br_entries +}; + +static const keychron_patch k2_max_jis_rgb_patch = +{ + KEYCHRON_K2_MAX_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v1_br_entries), + v1_br_entries +}; + +static const keychron_patch k2_ultra_8k_ansi_patch = +{ + KEYCHRON_K2_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v1_br_entries), + v1_br_entries +}; + +static const keychron_patch k2_ultra_8k_iso_patch = +{ + KEYCHRON_K2_ULTRA_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v1_br_entries), + v1_br_entries +}; /*---------------------------------------------------------*\ | Geometry Group 30: | -| 0x0E22 K2 HE JIS | +| 0x0327 Keychron V2 BR | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_030_patch_entries[] = +static const keychron_patch_entry v2_br_entries[] = { - { 46, 2, 15 }, - { 60, 3, 15 }, - { 74, 4, 15 }, - { 80, 5, 9 }, - { 81, 5, 10 }, - { 82, 5, 11 }, - { 83, 5, 12 }, - { 84, 5, 13 }, - { 85, 5, 14 }, - { 86, 5, 15 }, + { 1, 14, 1, 15 }, + { 2, 12, 4, 14 }, + { 2, 13, 2, 12 }, + { 2, 14, 2, 15 }, + { 4, 14, 4, 15 }, }; -static const keychron_patch keychron_k2_he_jis_patch = +static const keychron_patch v2_br_patch = { - KEYCHRON_K2_HE_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_030_patch_entries), - keychron_group_030_patch_entries + KEYCHRON_V2_BR_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v2_br_entries), + v2_br_entries }; - /*---------------------------------------------------------*\ | Geometry Group 31: | -| 0x0A21 K2 Max ISO | +| 0x0337 Keychron V3 BR | +| 0x1032 Keychron Q3 HE 8K JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_031_patch_entries[] = +static const keychron_patch_entry v3_br_entries[] = { - { 58, 3, 12 }, - { 73, 4, 14 }, - { 79, 5, 10 }, - { 80, 5, 11 }, - { 81, 5, 12 }, - { 82, 5, 13 }, - { 83, 5, 14 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, }; -static const keychron_patch keychron_k2_max_iso_patch = +static const keychron_patch v3_br_patch = { - KEYCHRON_K2_MAX_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_031_patch_entries), - keychron_group_031_patch_entries + KEYCHRON_V3_BR_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v3_br_entries), + v3_br_entries }; +static const keychron_patch q3_he_8k_jis_patch = +{ + KEYCHRON_Q3_HE_8K_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v3_br_entries), + v3_br_entries +}; /*---------------------------------------------------------*\ | Geometry Group 32: | -| 0x0A22 K2 Max JIS | +| 0x0350 Keychron V5 ANSI | +| 0x0352 Keychron V5 ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_032_patch_entries[] = +static const keychron_patch_entry v5_ansi_0350_entries[] = { - { 59, 3, 12 }, + { 2, 14, 2, 18 }, + { 3, 12, 0, 18 }, + { 3, 13, 3, 12 }, + { 3, 14, 1, 18 }, + { 4, 13, 4, 12 }, + { 5, 5, 4, 18 }, }; -static const keychron_patch keychron_k2_max_jis_patch = +static const keychron_patch v5_ansi_0350_patch = { - KEYCHRON_K2_MAX_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_032_patch_entries), - keychron_group_032_patch_entries + KEYCHRON_V5_ANSI_0350_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v5_ansi_0350_entries), + v5_ansi_0350_entries }; +static const keychron_patch v5_iso_0352_patch = +{ + KEYCHRON_V5_ISO_0352_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v5_ansi_0350_entries), + v5_ansi_0350_entries +}; /*---------------------------------------------------------*\ | Geometry Group 33: | -| 0x0A20 K2 Max | +| 0x0351 Keychron V5 ANSI | +| 0x0353 Keychron V5 ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_033_patch_entries[] = +static const keychron_patch_entry v5_ansi_0351_entries[] = { - { 58, 3, 12 }, - { 72, 4, 14 }, - { 78, 5, 10 }, - { 79, 5, 11 }, - { 80, 5, 12 }, - { 81, 5, 13 }, - { 82, 5, 14 }, + { 2, 14, 2, 18 }, + { 3, 13, 3, 12 }, + { 3, 14, 1, 18 }, + { 4, 13, 4, 12 }, + { 5, 5, 4, 18 }, }; -static const keychron_patch keychron_k2_max_patch = +static const keychron_patch v5_ansi_0351_patch = { - KEYCHRON_K2_MAX_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_033_patch_entries), - keychron_group_033_patch_entries + KEYCHRON_V5_ANSI_0351_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v5_ansi_0351_entries), + v5_ansi_0351_entries }; +static const keychron_patch v5_iso_0353_patch = +{ + KEYCHRON_V5_ISO_0353_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v5_ansi_0351_entries), + v5_ansi_0351_entries +}; /*---------------------------------------------------------*\ | Geometry Group 34: | -| 0x0A31 K3 Max ISO | -| 0x0D21 K2 Version 3 ISO | -| 0x0D31 K3 Version 3 ISO | -| 0x1631 K3 Ultra 8K ISO | +| 0x0363 Keychron V6 ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_034_patch_entries[] = +static const keychron_patch_entry v6_iso_0363_entries[] = { - { 58, 3, 12 }, - { 72, 4, 12 }, + { 0, 17, 1, 19 }, + { 0, 18, 1, 20 }, + { 0, 19, 0, 17 }, + { 1, 19, 0, 18 }, + { 2, 19, 0, 19 }, + { 3, 13, 3, 12 }, + { 3, 14, 2, 19 }, + { 3, 15, 2, 20 }, + { 3, 16, 3, 19 }, + { 3, 19, 0, 20 }, + { 4, 13, 4, 12 }, + { 4, 14, 4, 19 }, + { 4, 16, 4, 20 }, + { 4, 19, 0, 13 }, + { 5, 18, 5, 19 }, }; -static const keychron_patch keychron_k3_max_iso_patch = +static const keychron_patch v6_iso_0363_patch = { - KEYCHRON_K3_MAX_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_034_patch_entries), - keychron_group_034_patch_entries + KEYCHRON_V6_ISO_0363_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v6_iso_0363_entries), + v6_iso_0363_entries }; -static const keychron_patch keychron_k2_v3_iso_patch = -{ - KEYCHRON_K2_V3_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_034_patch_entries), - keychron_group_034_patch_entries -}; - -static const keychron_patch keychron_k3_v3_iso_patch = -{ - KEYCHRON_K3_V3_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_034_patch_entries), - keychron_group_034_patch_entries -}; - -static const keychron_patch keychron_k3_ultra_8k_iso_patch = -{ - KEYCHRON_K3_ULTRA_8K_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_034_patch_entries), - keychron_group_034_patch_entries -}; - - /*---------------------------------------------------------*\ | Geometry Group 35: | -| 0x0A32 K3 Max JIS | +| 0x0367 Keychron V6 BR | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_035_patch_entries[] = +static const keychron_patch_entry v6_br_entries[] = { - { 59, 3, 12 }, - { 72, 4, 12 }, - { 73, 4, 13 }, + { 3, 13, 0, 20 }, + { 3, 14, 1, 20 }, + { 3, 15, 2, 20 }, + { 3, 16, 4, 20 }, + { 5, 18, 5, 17 }, }; -static const keychron_patch keychron_k3_max_jis_patch = +static const keychron_patch v6_br_patch = { - KEYCHRON_K3_MAX_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_035_patch_entries), - keychron_group_035_patch_entries + KEYCHRON_V6_BR_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v6_br_entries), + v6_br_entries }; - /*---------------------------------------------------------*\ | Geometry Group 36: | -| 0x0A30 K3 Max | -| 0x0D20 K2X | -| 0x0D30 K3X | -| 0x0D3B K3 Max SE | -| 0x1630 K3 Ultra 8K ANSI | +| 0x03A3 Keychron V10 ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_036_patch_entries[] = +static const keychron_patch_entry v10_iso_entries[] = { - { 58, 3, 12 }, - { 71, 4, 12 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 1, 15, 1, 16 }, + { 2, 15, 2, 16 }, + { 3, 15, 3, 16 }, + { 5, 3, 5, 4 }, + { 5, 4, 5, 5 }, + { 5, 9, 5, 11 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, }; -static const keychron_patch keychron_k3_max_patch = +static const keychron_patch v10_iso_patch = { - KEYCHRON_K3_MAX_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_036_patch_entries), - keychron_group_036_patch_entries + KEYCHRON_V10_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v10_iso_entries), + v10_iso_entries }; -static const keychron_patch keychron_k2x_patch = -{ - KEYCHRON_K2X_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_036_patch_entries), - keychron_group_036_patch_entries -}; - -static const keychron_patch keychron_k3x_patch = -{ - KEYCHRON_K3X_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_036_patch_entries), - keychron_group_036_patch_entries -}; - -static const keychron_patch keychron_k3_max_se_patch = -{ - KEYCHRON_K3_MAX_SE_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_036_patch_entries), - keychron_group_036_patch_entries -}; - -static const keychron_patch keychron_k3_ultra_8k_ansi_patch = -{ - KEYCHRON_K3_ULTRA_8K_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_036_patch_entries), - keychron_group_036_patch_entries -}; - - /*---------------------------------------------------------*\ | Geometry Group 37: | -| 0x0E40 K4 HE | +| 0x0402 Keychron P1 HE DAYZ | +| 0x0403 Keychron P1 HE DayZ ISO | +| 0x0B10 Keychron Q1 HE ANSI | +| 0x0B11 Keychron Q1 HE ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_037_patch_entries[] = +static const keychron_patch_entry p1_he_dayz_entries[] = { - { 32, 1, 13 }, - { 67, 3, 12 }, - { 82, 4, 12 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 3, 13, 3, 15 }, + { 4, 12, 4, 11 }, + { 4, 13, 4, 12 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, }; -static const keychron_patch keychron_k4_he_patch = +static const keychron_patch p1_he_dayz_patch = { - KEYCHRON_K4_HE_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_037_patch_entries), - keychron_group_037_patch_entries + KEYCHRON_P1_HE_DAYZ_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(p1_he_dayz_entries), + p1_he_dayz_entries }; +static const keychron_patch p1_he_dayz_iso_patch = +{ + KEYCHRON_P1_HE_DAYZ_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(p1_he_dayz_entries), + p1_he_dayz_entries +}; + +static const keychron_patch q1_he_ansi_patch = +{ + KEYCHRON_Q1_HE_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(p1_he_dayz_entries), + p1_he_dayz_entries +}; + +static const keychron_patch q1_he_iso_patch = +{ + KEYCHRON_Q1_HE_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(p1_he_dayz_entries), + p1_he_dayz_entries +}; /*---------------------------------------------------------*\ | Geometry Group 38: | -| 0x0E41 K4 HE ISO | +| 0x0405 Keychron J1 | +| 0x0406 Keychron J2 | +| 0x0456 Keychron J2 ANSI | +| 0x0463 Keychron CM2-H1 ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_038_patch_entries[] = +static const keychron_patch_entry j1_entries[] = { - { 32, 1, 13 }, - { 67, 3, 12 }, - { 83, 4, 12 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 1, 14, 1, 13 }, + { 2, 14, 2, 13 }, + { 5, 10, 5, 9 }, + { 5, 11, 5, 10 }, + { 5, 12, 5, 11 }, }; -static const keychron_patch keychron_k4_he_iso_patch = +static const keychron_patch j1_patch = { - KEYCHRON_K4_HE_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_038_patch_entries), - keychron_group_038_patch_entries + KEYCHRON_J1_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j1_entries), + j1_entries }; +static const keychron_patch j2_patch = +{ + KEYCHRON_J2_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j1_entries), + j1_entries +}; + +static const keychron_patch j2_ansi_patch = +{ + KEYCHRON_J2_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j1_entries), + j1_entries +}; + +static const keychron_patch cm2_h1_ansi_patch = +{ + KEYCHRON_CM2_H1_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j1_entries), + j1_entries +}; /*---------------------------------------------------------*\ | Geometry Group 39: | -| 0x0E42 K4 HE JIS | +| 0x0409 Keychron J5 | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_039_patch_entries[] = +static const keychron_patch_entry j5_entries[] = { - { 68, 3, 12 }, - { 83, 4, 12 }, - { 84, 4, 13 }, + { 0, 18, 0, 19 }, + { 1, 18, 1, 19 }, + { 2, 18, 2, 19 }, + { 3, 13, 3, 18 }, + { 3, 14, 2, 18 }, + { 3, 15, 1, 18 }, + { 3, 16, 0, 18 }, + { 3, 18, 3, 19 }, + { 4, 13, 4, 18 }, + { 4, 14, 1, 20 }, + { 4, 16, 0, 20 }, + { 4, 18, 4, 19 }, + { 5, 8, 5, 20 }, + { 5, 9, 2, 20 }, + { 5, 18, 5, 19 }, }; -static const keychron_patch keychron_k4_he_jis_patch = +static const keychron_patch j5_patch = { - KEYCHRON_K4_HE_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_039_patch_entries), - keychron_group_039_patch_entries + KEYCHRON_J5_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j5_entries), + j5_entries }; - /*---------------------------------------------------------*\ | Geometry Group 40: | -| 0x0A40 K4 Max Ansi | +| 0x040A Keychron Z6 Ultra | +| 0x040D Keychron P6 Ultra 8K | +| 0x0420 Keychron P6 Ultra 8K ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_040_patch_entries[] = +static const keychron_patch_entry z6_ultra_entries[] = { - { 18, 0, 18 }, - { 33, 1, 15 }, - { 34, 1, 16 }, - { 35, 1, 17 }, - { 36, 1, 18 }, - { 51, 2, 15 }, - { 52, 2, 16 }, - { 53, 2, 17 }, - { 54, 2, 18 }, - { 67, 3, 12 }, - { 68, 3, 15 }, - { 69, 3, 16 }, - { 70, 3, 17 }, - { 83, 4, 14 }, - { 84, 4, 15 }, - { 85, 4, 16 }, - { 86, 4, 17 }, - { 87, 4, 18 }, + { 5, 20, 4, 20 }, }; -static const keychron_patch keychron_k4_max_ansi_patch = +static const keychron_patch z6_ultra_patch = { - KEYCHRON_K4_MAX_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_040_patch_entries), - keychron_group_040_patch_entries + KEYCHRON_Z6_ULTRA_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(z6_ultra_entries), + z6_ultra_entries }; +static const keychron_patch p6_ultra_8k_patch = +{ + KEYCHRON_P6_ULTRA_8K_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(z6_ultra_entries), + z6_ultra_entries +}; + +static const keychron_patch p6_ultra_8k_iso_patch = +{ + KEYCHRON_P6_ULTRA_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(z6_ultra_entries), + z6_ultra_entries +}; /*---------------------------------------------------------*\ | Geometry Group 41: | -| 0x0D42 K4X JIS | +| 0x040C Keychron J3 HE ANSI | +| 0x045E Keychron Keychroon J3 TMR | +| 0x045F Keychron Keychroon J3 TMR 静音轴 | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_041_patch_entries[] = +static const keychron_patch_entry j3_he_ansi_entries[] = { - { 68, 3, 12 }, - { 94, 5, 9 }, - { 95, 5, 10 }, - { 96, 5, 11 }, - { 97, 5, 12 }, - { 98, 5, 13 }, - { 99, 5, 14 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 3, 13, 3, 12 }, + { 4, 13, 4, 12 }, + { 5, 16, 5, 15 }, }; -static const keychron_patch keychron_k4x_jis_patch = +static const keychron_patch j3_he_ansi_patch = { - KEYCHRON_K4X_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_041_patch_entries), - keychron_group_041_patch_entries + KEYCHRON_J3_HE_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j3_he_ansi_entries), + j3_he_ansi_entries }; +static const keychron_patch keychroon_j3_tmr_045e_patch = +{ + KEYCHRON_KEYCHROON_J3_TMR_045E_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j3_he_ansi_entries), + j3_he_ansi_entries +}; + +static const keychron_patch keychroon_j3_tmr_045f_patch = +{ + KEYCHRON_KEYCHROON_J3_TMR_045F_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j3_he_ansi_entries), + j3_he_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 42: | -| 0x0A51 K5 Max ISO | +| 0x0414 Keychron J9 JIS | +| 0x1632 Keychron K3 Ultra 8K JIS | +| 0x1634 Keychron K3 Ultra 8K JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_042_patch_entries[] = +static const keychron_patch_entry j9_jis_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 74, 3, 12 }, - { 90, 4, 12 }, + { 3, 13, 3, 12 }, + { 4, 13, 4, 12 }, + { 4, 14, 4, 13 }, + { 4, 15, 4, 14 }, }; -static const keychron_patch keychron_k5_max_iso_patch = +static const keychron_patch j9_jis_patch = { - KEYCHRON_K5_MAX_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_042_patch_entries), - keychron_group_042_patch_entries + KEYCHRON_J9_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j9_jis_entries), + j9_jis_entries }; +static const keychron_patch k3_ultra_8k_jis_1632_patch = +{ + KEYCHRON_K3_ULTRA_8K_JIS_1632_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j9_jis_entries), + j9_jis_entries +}; + +static const keychron_patch k3_ultra_8k_jis_1634_patch = +{ + KEYCHRON_K3_ULTRA_8K_JIS_1634_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j9_jis_entries), + j9_jis_entries +}; /*---------------------------------------------------------*\ | Geometry Group 43: | -| 0x0A52 K5 Max JIS | +| 0x0416 Keychron J2 HE 8K ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_043_patch_entries[] = +static const keychron_patch_entry j2_he_8k_ansi_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 7 }, - { 6, 0, 8 }, - { 7, 0, 9 }, - { 8, 0, 10 }, - { 9, 0, 11 }, - { 10, 0, 12 }, - { 11, 0, 13 }, - { 12, 0, 14 }, - { 13, 0, 15 }, - { 14, 0, 16 }, - { 15, 0, 17 }, - { 16, 0, 18 }, - { 17, 0, 19 }, - { 18, 0, 20 }, - { 19, 0, 21 }, - { 34, 1, 14 }, - { 35, 1, 15 }, - { 36, 1, 16 }, - { 37, 1, 17 }, - { 38, 1, 18 }, - { 39, 1, 19 }, - { 40, 1, 20 }, - { 41, 1, 21 }, - { 56, 2, 15 }, - { 57, 2, 16 }, - { 58, 2, 17 }, - { 59, 2, 18 }, - { 60, 2, 19 }, - { 61, 2, 20 }, - { 62, 2, 21 }, - { 75, 3, 12 }, - { 76, 3, 18 }, - { 77, 3, 19 }, - { 78, 3, 20 }, - { 92, 4, 16 }, - { 93, 4, 18 }, - { 94, 4, 19 }, - { 95, 4, 20 }, - { 96, 4, 21 }, - { 102, 5, 10 }, - { 103, 5, 11 }, - { 104, 5, 12 }, - { 105, 5, 13 }, - { 106, 5, 14 }, - { 107, 5, 15 }, - { 108, 5, 16 }, - { 109, 5, 17 }, - { 110, 5, 18 }, - { 111, 5, 20 }, + { 0, 8, 0, 7 }, + { 0, 9, 0, 8 }, + { 1, 8, 1, 7 }, + { 1, 9, 1, 8 }, + { 1, 10, 1, 9 }, + { 1, 11, 1, 10 }, + { 1, 12, 1, 11 }, + { 1, 13, 1, 12 }, + { 1, 14, 1, 13 }, + { 2, 8, 2, 7 }, + { 2, 9, 2, 8 }, + { 2, 10, 2, 9 }, + { 2, 11, 2, 10 }, + { 2, 12, 2, 11 }, + { 2, 13, 2, 12 }, + { 2, 14, 2, 13 }, + { 3, 8, 3, 7 }, + { 3, 9, 3, 8 }, + { 3, 10, 3, 9 }, + { 3, 11, 3, 10 }, + { 3, 12, 3, 11 }, + { 3, 13, 3, 12 }, + { 4, 8, 4, 7 }, + { 4, 9, 4, 8 }, + { 4, 10, 4, 9 }, + { 4, 11, 4, 10 }, + { 4, 12, 4, 11 }, + { 4, 13, 4, 12 }, }; -static const keychron_patch keychron_k5_max_jis_0a52_patch = +static const keychron_patch j2_he_8k_ansi_patch = { - KEYCHRON_K5_MAX_JIS_0A52_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_043_patch_entries), - keychron_group_043_patch_entries + KEYCHRON_J2_HE_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j2_he_8k_ansi_entries), + j2_he_8k_ansi_entries }; - /*---------------------------------------------------------*\ | Geometry Group 44: | -| 0x0A50 K5 Max | +| 0x0417 Keychron J8 HE 8K ANSI | +| 0x045A Keychron eX75 HE 8K ANSI | +| 0x1010 Keychron Q1 HE 8K ANSI | +| 0x1016 Keychron Q1 HE 8K ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_044_patch_entries[] = +static const keychron_patch_entry j8_he_8k_ansi_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 74, 3, 12 }, - { 89, 4, 12 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 3, 14, 3, 15 }, + { 4, 13, 4, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, }; -static const keychron_patch keychron_k5_max_patch = +static const keychron_patch j8_he_8k_ansi_patch = { - KEYCHRON_K5_MAX_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_044_patch_entries), - keychron_group_044_patch_entries + KEYCHRON_J8_HE_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j8_he_8k_ansi_entries), + j8_he_8k_ansi_entries }; +static const keychron_patch ex75_he_8k_ansi_patch = +{ + KEYCHRON_EX75_HE_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j8_he_8k_ansi_entries), + j8_he_8k_ansi_entries +}; + +static const keychron_patch q1_he_8k_ansi_1010_patch = +{ + KEYCHRON_Q1_HE_8K_ANSI_1010_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j8_he_8k_ansi_entries), + j8_he_8k_ansi_entries +}; + +static const keychron_patch q1_he_8k_ansi_1016_patch = +{ + KEYCHRON_Q1_HE_8K_ANSI_1016_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j8_he_8k_ansi_entries), + j8_he_8k_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 45: | -| 0x0D51 K5X ISO | +| 0x0418 Keychron J8 HE 8K ISO | +| 0x0B14 Keychron Q1 HE | +| 0x0B15 Keychron Q1 HE V2 SILENT ANSI | +| 0x1011 Keychron Q1 HE 8K ISO RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_045_patch_entries[] = +static const keychron_patch_entry j8_he_8k_iso_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 18, 0, 19 }, - { 19, 0, 20 }, - { 39, 1, 19 }, - { 40, 1, 20 }, - { 60, 2, 19 }, - { 61, 2, 20 }, - { 74, 3, 12 }, - { 77, 3, 19 }, - { 90, 4, 12 }, - { 94, 4, 19 }, - { 95, 4, 20 }, - { 108, 5, 19 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 3, 14, 3, 15 }, + { 4, 13, 4, 12 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, }; -static const keychron_patch keychron_k5x_iso_patch = +static const keychron_patch j8_he_8k_iso_patch = { - KEYCHRON_K5X_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_045_patch_entries), - keychron_group_045_patch_entries + KEYCHRON_J8_HE_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j8_he_8k_iso_entries), + j8_he_8k_iso_entries }; +static const keychron_patch q1_he_patch = +{ + KEYCHRON_Q1_HE_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j8_he_8k_iso_entries), + j8_he_8k_iso_entries +}; + +static const keychron_patch q1_he_v2_silent_ansi_patch = +{ + KEYCHRON_Q1_HE_V2_SILENT_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j8_he_8k_iso_entries), + j8_he_8k_iso_entries +}; + +static const keychron_patch q1_he_8k_iso_rgb_patch = +{ + KEYCHRON_Q1_HE_8K_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j8_he_8k_iso_entries), + j8_he_8k_iso_entries +}; /*---------------------------------------------------------*\ | Geometry Group 46: | -| 0x0E60 K6 HE | +| 0x0419 Keychron J8 HE 8K JIS | +| 0x0460 Keychron C75 TMR 8K JIS | +| 0x1012 Keychron Q1 HE 8K JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_046_patch_entries[] = +static const keychron_patch_entry j8_he_8k_jis_entries[] = { - { 42, 2, 12 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 2, 14, 2, 15 }, + { 3, 14, 3, 15 }, + { 5, 8, 5, 9 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, }; -static const keychron_patch keychron_k6_he_patch = +static const keychron_patch j8_he_8k_jis_patch = { - KEYCHRON_K6_HE_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_046_patch_entries), - keychron_group_046_patch_entries + KEYCHRON_J8_HE_8K_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j8_he_8k_jis_entries), + j8_he_8k_jis_entries }; +static const keychron_patch c75_tmr_8k_jis_patch = +{ + KEYCHRON_C75_TMR_8K_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j8_he_8k_jis_entries), + j8_he_8k_jis_entries +}; + +static const keychron_patch q1_he_8k_jis_patch = +{ + KEYCHRON_Q1_HE_8K_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j8_he_8k_jis_entries), + j8_he_8k_jis_entries +}; /*---------------------------------------------------------*\ | Geometry Group 47: | -| 0x0A71 K7 Max ISO | +| 0x041B Keychron J14 HE | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_047_patch_entries[] = +static const keychron_patch_entry j14_he_entries[] = { - { 42, 2, 12 }, - { 56, 3, 12 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 3, 15, 3, 14 }, + { 3, 16, 3, 15 }, + { 3, 17, 3, 16 }, }; -static const keychron_patch keychron_k7_max_iso_patch = +static const keychron_patch j14_he_patch = { - KEYCHRON_K7_MAX_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_047_patch_entries), - keychron_group_047_patch_entries + KEYCHRON_J14_HE_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j14_he_entries), + j14_he_entries }; - /*---------------------------------------------------------*\ | Geometry Group 48: | -| 0x0A72 K7 Max JIS | +| 0x041C Keychron J12 HE | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_048_patch_entries[] = +static const keychron_patch_entry j12_he_entries[] = { - { 43, 2, 12 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 3, 13, 3, 15 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, }; -static const keychron_patch keychron_k7_max_jis_patch = +static const keychron_patch j12_he_patch = { - KEYCHRON_K7_MAX_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_048_patch_entries), - keychron_group_048_patch_entries + KEYCHRON_J12_HE_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j12_he_entries), + j12_he_entries }; - /*---------------------------------------------------------*\ | Geometry Group 49: | -| 0x0A76 K7 Max JIS V2 | +| 0x041F Keychron J4 HE ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_049_patch_entries[] = +static const keychron_patch_entry j4_he_ansi_entries[] = { - { 43, 2, 12 }, + { 3, 13, 0, 16 }, + { 3, 14, 1, 16 }, + { 3, 15, 2, 16 }, + { 4, 12, 4, 11 }, + { 4, 13, 4, 12 }, + { 5, 9, 5, 16 }, }; -static const keychron_patch keychron_k7_max_jis_v2_patch = +static const keychron_patch j4_he_ansi_patch = { - KEYCHRON_K7_MAX_JIS_V2_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_049_patch_entries), - keychron_group_049_patch_entries + KEYCHRON_J4_HE_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j4_he_ansi_entries), + j4_he_ansi_entries }; - /*---------------------------------------------------------*\ | Geometry Group 50: | -| 0x0A70 K7 Max | +| 0x0429 Keychron J15 HE RGB | +| 0x1060 Keychron Q6 HE 8K | +| 0x1061 Keychron Q6 HE 8K ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_050_patch_entries[] = +static const keychron_patch_entry j15_he_rgb_entries[] = { - { 42, 2, 12 }, - { 55, 3, 12 }, + { 4, 13, 4, 12 }, + { 5, 18, 5, 19 }, }; -static const keychron_patch keychron_k7_max_patch = +static const keychron_patch j15_he_rgb_patch = { - KEYCHRON_K7_MAX_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_050_patch_entries), - keychron_group_050_patch_entries + KEYCHRON_J15_HE_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j15_he_rgb_entries), + j15_he_rgb_entries }; +static const keychron_patch q6_he_8k_patch = +{ + KEYCHRON_Q6_HE_8K_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j15_he_rgb_entries), + j15_he_rgb_entries +}; + +static const keychron_patch q6_he_8k_iso_patch = +{ + KEYCHRON_Q6_HE_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j15_he_rgb_entries), + j15_he_rgb_entries +}; /*---------------------------------------------------------*\ | Geometry Group 51: | -| 0x0E80 K8 HE | +| 0x042A Keychron X3 ANSI RGB | +| 0x0AAC Keychron K10 Max US V2 RGB | +| 0x0DA0 Keychron K10 V2 ANSI RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_051_patch_entries[] = +static const keychron_patch_entry x3_ansi_rgb_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 15, 0, 16 }, - { 32, 1, 16 }, - { 49, 2, 16 }, - { 62, 3, 12 }, - { 74, 4, 12 }, - { 80, 5, 10 }, - { 81, 5, 11 }, - { 82, 5, 12 }, - { 83, 5, 13 }, - { 84, 5, 14 }, - { 85, 5, 15 }, - { 86, 5, 16 }, + { 3, 13, 3, 12 }, + { 4, 13, 4, 12 }, + { 5, 18, 5, 19 }, }; -static const keychron_patch keychron_k8_he_patch = +static const keychron_patch x3_ansi_rgb_patch = { - KEYCHRON_K8_HE_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_051_patch_entries), - keychron_group_051_patch_entries + KEYCHRON_X3_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(x3_ansi_rgb_entries), + x3_ansi_rgb_entries }; +static const keychron_patch k10_max_us_v2_rgb_patch = +{ + KEYCHRON_K10_MAX_US_V2_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(x3_ansi_rgb_entries), + x3_ansi_rgb_entries +}; + +static const keychron_patch k10_v2_ansi_rgb_patch = +{ + KEYCHRON_K10_V2_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(x3_ansi_rgb_entries), + x3_ansi_rgb_entries +}; /*---------------------------------------------------------*\ | Geometry Group 52: | -| 0x0E81 K8 HE ISO | +| 0x042D Keychron J3 SE | +| 0x044E Keychron J3 Ultra 8K ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_052_patch_entries[] = +static const keychron_patch_entry j3_se_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 15, 0, 16 }, - { 32, 1, 16 }, - { 49, 2, 16 }, - { 62, 3, 12 }, - { 75, 4, 12 }, - { 81, 5, 10 }, - { 82, 5, 11 }, - { 83, 5, 12 }, - { 84, 5, 13 }, - { 85, 5, 14 }, - { 86, 5, 15 }, - { 87, 5, 16 }, + { 3, 13, 3, 12 }, + { 3, 14, 2, 18 }, + { 4, 14, 4, 18 }, + { 5, 16, 5, 17 }, + { 5, 17, 1, 18 }, }; -static const keychron_patch keychron_k8_he_iso_patch = +static const keychron_patch j3_se_patch = { - KEYCHRON_K8_HE_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_052_patch_entries), - keychron_group_052_patch_entries + KEYCHRON_J3_SE_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j3_se_entries), + j3_se_entries }; +static const keychron_patch j3_ultra_8k_ansi_patch = +{ + KEYCHRON_J3_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j3_se_entries), + j3_se_entries +}; /*---------------------------------------------------------*\ | Geometry Group 53: | -| 0x0E82 K8 HE JIS RBG | +| 0x042E Keychron Z5-98 Ultra 8K ANSI | +| 0x044C Keychron J11 Ultra 8K | +| 0x044F Keychron J11 Ultra 8K | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_053_patch_entries[] = +static const keychron_patch_entry z5_98_ultra_8k_ansi_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 7 }, - { 6, 0, 8 }, - { 7, 0, 9 }, - { 8, 0, 10 }, - { 9, 0, 11 }, - { 10, 0, 12 }, - { 11, 0, 13 }, - { 12, 0, 14 }, - { 13, 0, 15 }, - { 14, 0, 16 }, - { 15, 0, 17 }, - { 29, 1, 13 }, - { 30, 1, 14 }, - { 31, 1, 15 }, - { 32, 1, 16 }, - { 33, 1, 17 }, - { 48, 2, 15 }, - { 49, 2, 16 }, - { 50, 2, 17 }, - { 63, 3, 12 }, - { 77, 4, 16 }, - { 83, 5, 9 }, - { 84, 5, 10 }, - { 85, 5, 11 }, - { 86, 5, 12 }, - { 87, 5, 13 }, - { 88, 5, 15 }, - { 89, 5, 16 }, - { 90, 5, 17 }, + { 3, 13, 3, 12 }, + { 3, 18, 2, 18 }, + { 5, 18, 4, 18 }, }; -static const keychron_patch keychron_k8_he_jis_rbg_patch = +static const keychron_patch z5_98_ultra_8k_ansi_patch = { - KEYCHRON_K8_HE_JIS_RBG_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_053_patch_entries), - keychron_group_053_patch_entries + KEYCHRON_Z5_98_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(z5_98_ultra_8k_ansi_entries), + z5_98_ultra_8k_ansi_entries }; +static const keychron_patch j11_ultra_8k_044c_patch = +{ + KEYCHRON_J11_ULTRA_8K_044C_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(z5_98_ultra_8k_ansi_entries), + z5_98_ultra_8k_ansi_entries +}; + +static const keychron_patch j11_ultra_8k_044f_patch = +{ + KEYCHRON_J11_ULTRA_8K_044F_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(z5_98_ultra_8k_ansi_entries), + z5_98_ultra_8k_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 54: | -| 0x0A82 K8 Max JIS | +| 0x042F Keychron V1 HE ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_054_patch_entries[] = +static const keychron_patch_entry v1_he_ansi_entries[] = { - { 9, 0, 11 }, - { 10, 0, 12 }, - { 11, 0, 13 }, - { 12, 0, 14 }, - { 13, 0, 15 }, - { 14, 0, 16 }, - { 15, 0, 17 }, - { 29, 1, 13 }, - { 30, 1, 14 }, - { 31, 1, 15 }, - { 32, 1, 16 }, - { 33, 1, 17 }, - { 48, 2, 15 }, - { 49, 2, 16 }, - { 50, 2, 17 }, - { 63, 3, 12 }, - { 77, 4, 16 }, - { 83, 5, 10 }, - { 84, 5, 11 }, - { 85, 5, 12 }, - { 86, 5, 13 }, - { 87, 5, 14 }, - { 88, 5, 15 }, - { 89, 5, 16 }, - { 90, 5, 17 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 3, 13, 3, 15 }, + { 4, 12, 4, 11 }, + { 4, 13, 4, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, }; -static const keychron_patch keychron_k8_max_jis_patch = +static const keychron_patch v1_he_ansi_patch = { - KEYCHRON_K8_MAX_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_054_patch_entries), - keychron_group_054_patch_entries + KEYCHRON_V1_HE_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v1_he_ansi_entries), + v1_he_ansi_entries }; - /*---------------------------------------------------------*\ | Geometry Group 55: | -| 0x0A90 K9 Max | +| 0x0442 Keychron Z11 Ultra L | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_055_patch_entries[] = +static const keychron_patch_entry z11_ultra_l_entries[] = { - { 40, 2, 12 }, - { 52, 3, 12 }, + { 0, 15, 0, 14 }, + { 1, 2, 1, 1 }, + { 2, 15, 2, 14 }, + { 3, 2, 3, 1 }, + { 4, 6, 4, 5 }, + { 4, 9, 4, 8 }, }; -static const keychron_patch keychron_k9_max_patch = +static const keychron_patch z11_ultra_l_patch = { - KEYCHRON_K9_MAX_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_055_patch_entries), - keychron_group_055_patch_entries + KEYCHRON_Z11_ULTRA_L_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(z11_ultra_l_entries), + z11_ultra_l_entries }; - /*---------------------------------------------------------*\ | Geometry Group 56: | -| 0x1500 Keychron C0 HE 8K | +| 0x0443 Keychron Z11 Ultra R | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_056_patch_entries[] = +static const keychron_patch_entry z11_ultra_r_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 6 }, - { 34, 6, 5 }, + { 0, 8, 0, 0 }, + { 0, 9, 0, 1 }, + { 0, 10, 0, 2 }, + { 0, 11, 0, 3 }, + { 0, 12, 0, 4 }, + { 0, 13, 0, 5 }, + { 0, 15, 0, 6 }, + { 1, 8, 1, 0 }, + { 1, 9, 1, 1 }, + { 1, 10, 1, 2 }, + { 1, 11, 1, 3 }, + { 1, 12, 1, 4 }, + { 1, 13, 1, 5 }, + { 1, 14, 1, 6 }, + { 1, 15, 1, 7 }, + { 2, 8, 2, 0 }, + { 2, 9, 2, 1 }, + { 2, 10, 2, 2 }, + { 2, 11, 2, 3 }, + { 2, 12, 2, 4 }, + { 2, 13, 2, 5 }, + { 2, 15, 2, 6 }, + { 3, 8, 3, 0 }, + { 3, 9, 3, 1 }, + { 3, 10, 3, 2 }, + { 3, 11, 3, 3 }, + { 3, 12, 3, 4 }, + { 3, 13, 3, 5 }, + { 3, 14, 3, 6 }, + { 3, 15, 3, 7 }, + { 4, 9, 4, 0 }, + { 4, 11, 4, 3 }, + { 4, 13, 4, 5 }, + { 4, 14, 4, 6 }, + { 4, 15, 4, 7 }, }; -static const keychron_patch keychron_c0_he_8k_patch = +static const keychron_patch z11_ultra_r_patch = { - KEYCHRON_C0_HE_8K_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_056_patch_entries), - keychron_group_056_patch_entries + KEYCHRON_Z11_ULTRA_R_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(z11_ultra_r_entries), + z11_ultra_r_entries }; - /*---------------------------------------------------------*\ | Geometry Group 57: | -| 0x051D C1 Pro 8K ISO | -| 0x0531 C3 Pro Iso 8K | -| 0x0A81 K8 Max ISO | -| 0x0D11 K1X ISO | -| 0x0D81 K8 Version 2 ISO | +| 0x0446 Keychron J5 HE 8K ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_057_patch_entries[] = +static const keychron_patch_entry j5_he_8k_iso_entries[] = { - { 62, 3, 12 }, - { 75, 4, 12 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 0, 17, 0, 18 }, + { 0, 18, 0, 19 }, + { 4, 13, 4, 12 }, + { 5, 18, 5, 19 }, }; -static const keychron_patch keychron_c1_pro_8k_iso_patch = +static const keychron_patch j5_he_8k_iso_patch = { - KEYCHRON_C1_PRO_8K_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_057_patch_entries), - keychron_group_057_patch_entries + KEYCHRON_J5_HE_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j5_he_8k_iso_entries), + j5_he_8k_iso_entries }; -static const keychron_patch keychron_c3_pro_iso_8k_patch = -{ - KEYCHRON_C3_PRO_ISO_8K_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_057_patch_entries), - keychron_group_057_patch_entries -}; - -static const keychron_patch keychron_k8_max_iso_patch = -{ - KEYCHRON_K8_MAX_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_057_patch_entries), - keychron_group_057_patch_entries -}; - -static const keychron_patch keychron_k1x_iso_patch = -{ - KEYCHRON_K1X_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_057_patch_entries), - keychron_group_057_patch_entries -}; - -static const keychron_patch keychron_k8_v2_iso_patch = -{ - KEYCHRON_K8_V2_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_057_patch_entries), - keychron_group_057_patch_entries -}; - - /*---------------------------------------------------------*\ | Geometry Group 58: | -| 0x051E C1 Pro 8K JIS | -| 0x0D82 K8 Version 2 JIS | +| 0x0447 Keychron J2 Ultra 8K ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_058_patch_entries[] = +static const keychron_patch_entry j2_ultra_8k_ansi_entries[] = { - { 5, 0, 7 }, - { 6, 0, 8 }, - { 7, 0, 9 }, - { 8, 0, 10 }, - { 9, 0, 11 }, - { 10, 0, 12 }, - { 11, 0, 13 }, - { 12, 0, 14 }, - { 13, 0, 15 }, - { 14, 0, 16 }, - { 15, 0, 17 }, - { 30, 1, 14 }, - { 31, 1, 15 }, - { 32, 1, 16 }, - { 33, 1, 17 }, - { 48, 2, 15 }, - { 49, 2, 16 }, - { 50, 2, 17 }, - { 63, 3, 12 }, - { 77, 4, 16 }, - { 88, 5, 15 }, - { 89, 5, 16 }, - { 90, 5, 17 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 1, 14, 1, 13 }, + { 2, 14, 2, 13 }, }; -static const keychron_patch keychron_c1_pro_8k_jis_patch = +static const keychron_patch j2_ultra_8k_ansi_patch = { - KEYCHRON_C1_PRO_8K_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_058_patch_entries), - keychron_group_058_patch_entries + KEYCHRON_J2_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j2_ultra_8k_ansi_entries), + j2_ultra_8k_ansi_entries }; -static const keychron_patch keychron_k8_v2_jis_patch = -{ - KEYCHRON_K8_V2_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_058_patch_entries), - keychron_group_058_patch_entries -}; - - /*---------------------------------------------------------*\ | Geometry Group 59: | -| 0x052D C2 Pro ISO 8K | +| 0x0448 Keychron J5 Ultra 8K | +| 0x0469 Keychron J5 Ultra 8K ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_059_patch_entries[] = +static const keychron_patch_entry j5_ultra_8k_entries[] = { - { 35, 1, 19 }, - { 36, 1, 20 }, - { 56, 2, 19 }, - { 57, 2, 20 }, - { 70, 3, 12 }, - { 73, 3, 19 }, - { 86, 4, 12 }, - { 90, 4, 19 }, - { 91, 4, 20 }, - { 104, 5, 19 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 0, 17, 0, 18 }, + { 0, 18, 0, 19 }, + { 3, 13, 3, 12 }, + { 3, 15, 1, 20 }, + { 3, 16, 2, 20 }, + { 4, 13, 4, 12 }, + { 5, 18, 4, 20 }, }; -static const keychron_patch keychron_c2_pro_iso_8k_patch = +static const keychron_patch j5_ultra_8k_patch = { - KEYCHRON_C2_PRO_ISO_8K_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_059_patch_entries), - keychron_group_059_patch_entries + KEYCHRON_J5_ULTRA_8K_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j5_ultra_8k_entries), + j5_ultra_8k_entries }; +static const keychron_patch j5_ultra_8k_iso_patch = +{ + KEYCHRON_J5_ULTRA_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j5_ultra_8k_entries), + j5_ultra_8k_entries +}; /*---------------------------------------------------------*\ | Geometry Group 60: | -| 0x0405 Keychron J1 | +| 0x0458 Keychron J6 ANSI | +| 0x0461 Keychron J6 Ultra 8K ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_060_patch_entries[] = +static const keychron_patch_entry j6_ansi_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 28, 1, 13 }, - { 43, 2, 13 }, - { 76, 5, 9 }, - { 77, 5, 10 }, - { 78, 5, 11 }, + { 3, 12, 0, 19 }, + { 3, 13, 3, 12 }, + { 3, 14, 1, 19 }, + { 3, 15, 2, 19 }, + { 3, 16, 3, 19 }, + { 4, 13, 4, 12 }, + { 4, 14, 4, 19 }, + { 4, 16, 4, 20 }, + { 5, 7, 0, 20 }, + { 5, 8, 1, 20 }, + { 5, 9, 2, 20 }, + { 5, 18, 5, 19 }, }; -static const keychron_patch keychron_j1_patch = +static const keychron_patch j6_ansi_patch = { - KEYCHRON_J1_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_060_patch_entries), - keychron_group_060_patch_entries + KEYCHRON_J6_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j6_ansi_entries), + j6_ansi_entries }; +static const keychron_patch j6_ultra_8k_ansi_patch = +{ + KEYCHRON_J6_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j6_ansi_entries), + j6_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 61: | -| 0x0406 J2 | -| 0x0456 J2 ANSI Knob | +| 0x045C Keychron eX99 HE 8K ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_061_patch_entries[] = +static const keychron_patch_entry ex99_he_8k_ansi_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 28, 1, 13 }, - { 43, 2, 13 }, - { 77, 5, 9 }, - { 78, 5, 10 }, - { 79, 5, 11 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 11 }, + { 0, 10, 0, 12 }, + { 0, 11, 0, 13 }, + { 0, 12, 0, 14 }, + { 0, 13, 0, 15 }, + { 0, 14, 0, 16 }, + { 0, 15, 0, 17 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 3, 13, 3, 15 }, + { 3, 14, 3, 16 }, + { 3, 15, 3, 17 }, + { 4, 13, 4, 14 }, + { 4, 14, 4, 15 }, + { 4, 15, 4, 16 }, + { 4, 16, 4, 17 }, + { 4, 17, 4, 18 }, }; -static const keychron_patch keychron_j2_patch = +static const keychron_patch ex99_he_8k_ansi_patch = { - KEYCHRON_J2_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_061_patch_entries), - keychron_group_061_patch_entries + KEYCHRON_EX99_HE_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(ex99_he_8k_ansi_entries), + ex99_he_8k_ansi_entries }; -static const keychron_patch keychron_j2_ansi_knob_patch = -{ - KEYCHRON_J2_ANSI_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_061_patch_entries), - keychron_group_061_patch_entries -}; - - /*---------------------------------------------------------*\ | Geometry Group 62: | -| 0x0416 J2 HE 8K ANSI | +| 0x0467 Keychron J6 Full Size 8K | +| 0x0478 Keychron J6 Full Size 8K ISO | +| 0x0960 Keychron V6 Max ANSI | +| 0x0961 Keychron V6 Max ISO | +| 0x0F61 Keychron V6 8K ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_062_patch_entries[] = +static const keychron_patch_entry j6_full_size_8k_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 6 }, - { 6, 0, 7 }, - { 22, 1, 7 }, - { 23, 1, 8 }, - { 24, 1, 9 }, - { 25, 1, 10 }, - { 26, 1, 11 }, - { 27, 1, 12 }, - { 28, 1, 13 }, - { 37, 2, 7 }, - { 38, 2, 8 }, - { 39, 2, 9 }, - { 40, 2, 10 }, - { 41, 2, 11 }, - { 42, 2, 12 }, - { 43, 2, 13 }, - { 52, 3, 7 }, - { 53, 3, 8 }, - { 54, 3, 9 }, - { 55, 3, 10 }, - { 56, 3, 11 }, - { 57, 3, 12 }, - { 65, 4, 7 }, - { 66, 4, 8 }, - { 67, 4, 9 }, - { 68, 4, 10 }, - { 69, 4, 11 }, - { 70, 4, 12 }, + { 3, 20, 2, 20 }, + { 5, 20, 4, 20 }, }; -static const keychron_patch keychron_j2_he_8k_ansi_patch = +static const keychron_patch j6_full_size_8k_patch = { - KEYCHRON_J2_HE_8K_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_062_patch_entries), - keychron_group_062_patch_entries + KEYCHRON_J6_FULL_SIZE_8K_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j6_full_size_8k_entries), + j6_full_size_8k_entries }; +static const keychron_patch j6_full_size_8k_iso_patch = +{ + KEYCHRON_J6_FULL_SIZE_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j6_full_size_8k_entries), + j6_full_size_8k_entries +}; + +static const keychron_patch v6_max_ansi_patch = +{ + KEYCHRON_V6_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j6_full_size_8k_entries), + j6_full_size_8k_entries +}; + +static const keychron_patch v6_max_iso_patch = +{ + KEYCHRON_V6_MAX_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j6_full_size_8k_entries), + j6_full_size_8k_entries +}; + +static const keychron_patch v6_8k_iso_patch = +{ + KEYCHRON_V6_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j6_full_size_8k_entries), + j6_full_size_8k_entries +}; /*---------------------------------------------------------*\ | Geometry Group 63: | -| 0x042D J3 SE Knob | +| 0x0468 Keychron J2 TKL 8K | +| 0x0F10 Keychron V1 8K ANSI | +| 0x0F11 Keychron V1 8K ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_063_patch_entries[] = +static const keychron_patch_entry j2_tkl_8k_entries[] = { - { 16, 0, 18 }, - { 35, 1, 18 }, - { 54, 2, 18 }, - { 67, 3, 12 }, - { 87, 4, 18 }, - { 99, 5, 17 }, + { 2, 14, 2, 13 }, + { 3, 13, 3, 12 }, + { 4, 13, 4, 12 }, }; -static const keychron_patch keychron_j3_se_knob_patch = +static const keychron_patch j2_tkl_8k_patch = { - KEYCHRON_J3_SE_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_063_patch_entries), - keychron_group_063_patch_entries + KEYCHRON_J2_TKL_8K_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j2_tkl_8k_entries), + j2_tkl_8k_entries }; +static const keychron_patch v1_8k_ansi_patch = +{ + KEYCHRON_V1_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j2_tkl_8k_entries), + j2_tkl_8k_entries +}; + +static const keychron_patch v1_8k_iso_patch = +{ + KEYCHRON_V1_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j2_tkl_8k_entries), + j2_tkl_8k_entries +}; /*---------------------------------------------------------*\ | Geometry Group 64: | -| 0x0408 J4 | -| 0x0457 J4 ANSI | -| 0x0521 C1 Pro 8K | -| 0x0530 C3 Pro 8K | -| 0x0A80 K8 Max | -| 0x0D10 K1X US | -| 0x0D80 K8 Version 2 | +| 0x046B Keychron J8 | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_064_patch_entries[] = +static const keychron_patch_entry j8_entries[] = { - { 62, 3, 12 }, - { 74, 4, 12 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 3, 13, 3, 12 }, + { 3, 14, 3, 15 }, + { 4, 13, 5, 15 }, }; -static const keychron_patch keychron_j4_patch = +static const keychron_patch j8_patch = { - KEYCHRON_J4_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_064_patch_entries), - keychron_group_064_patch_entries + KEYCHRON_J8_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(j8_entries), + j8_entries }; -static const keychron_patch keychron_j4_ansi_patch = -{ - KEYCHRON_J4_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_064_patch_entries), - keychron_group_064_patch_entries -}; - -static const keychron_patch keychron_c1_pro_8k_patch = -{ - KEYCHRON_C1_PRO_8K_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_064_patch_entries), - keychron_group_064_patch_entries -}; - -static const keychron_patch keychron_c3_pro_8k_patch = -{ - KEYCHRON_C3_PRO_8K_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_064_patch_entries), - keychron_group_064_patch_entries -}; - -static const keychron_patch keychron_k8_max_patch = -{ - KEYCHRON_K8_MAX_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_064_patch_entries), - keychron_group_064_patch_entries -}; - -static const keychron_patch keychron_k1x_us_patch = -{ - KEYCHRON_K1X_US_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_064_patch_entries), - keychron_group_064_patch_entries -}; - -static const keychron_patch keychron_k8_v2_patch = -{ - KEYCHRON_K8_V2_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_064_patch_entries), - keychron_group_064_patch_entries -}; - - /*---------------------------------------------------------*\ | Geometry Group 65: | -| 0x0409 J5 | +| 0x051E Keychron C1 Pro 8K JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_065_patch_entries[] = +static const keychron_patch_entry c1_pro_8k_jis_rgb_entries[] = { - { 17, 0, 18 }, - { 18, 0, 19 }, - { 19, 0, 20 }, - { 38, 1, 18 }, - { 39, 1, 19 }, - { 40, 1, 20 }, - { 59, 2, 18 }, - { 60, 2, 19 }, - { 61, 2, 20 }, - { 76, 3, 18 }, - { 77, 3, 19 }, - { 92, 4, 18 }, - { 93, 4, 19 }, - { 94, 4, 20 }, - { 107, 5, 19 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 3, 12, 1, 14 }, + { 3, 13, 3, 12 }, + { 4, 15, 4, 16 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, }; -static const keychron_patch keychron_j5_patch = +static const keychron_patch c1_pro_8k_jis_rgb_patch = { - KEYCHRON_J5_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_065_patch_entries), - keychron_group_065_patch_entries + KEYCHRON_C1_PRO_8K_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(c1_pro_8k_jis_rgb_entries), + c1_pro_8k_jis_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 66: | -| 0x0453 J5 ANSI Knob | +| 0x0522 Keychron C2 Pro 8K ANSI RGB | +| 0x052D Keychron C2 Pro 8K ISO RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_066_patch_entries[] = +static const keychron_patch_entry c2_pro_8k_ansi_rgb_entries[] = { - { 74, 3, 12 }, - { 89, 4, 12 }, + { 3, 13, 3, 12 }, + { 3, 14, 1, 19 }, + { 3, 15, 2, 19 }, + { 3, 16, 3, 19 }, + { 4, 12, 4, 19 }, + { 4, 13, 4, 12 }, + { 4, 14, 4, 20 }, + { 5, 7, 1, 20 }, + { 5, 8, 2, 20 }, + { 5, 18, 5, 19 }, }; -static const keychron_patch keychron_j5_ansi_knob_patch = +static const keychron_patch c2_pro_8k_ansi_rgb_patch = { - KEYCHRON_J5_ANSI_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_066_patch_entries), - keychron_group_066_patch_entries + KEYCHRON_C2_PRO_8K_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(c2_pro_8k_ansi_rgb_entries), + c2_pro_8k_ansi_rgb_entries }; +static const keychron_patch c2_pro_8k_iso_rgb_patch = +{ + KEYCHRON_C2_PRO_8K_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(c2_pro_8k_ansi_rgb_entries), + c2_pro_8k_ansi_rgb_entries +}; /*---------------------------------------------------------*\ | Geometry Group 67: | -| 0x0A06 K0 Max | +| 0x0532 Keychron C3 Pro 8K JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_067_patch_entries[] = +static const keychron_patch_entry c3_pro_8k_jis_entries[] = { - { 23, 4, 4 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 1, 13, 1, 14 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 3, 13, 3, 12 }, + { 3, 14, 1, 13 }, + { 4, 15, 4, 16 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, }; -static const keychron_patch keychron_k0_max_patch = +static const keychron_patch c3_pro_8k_jis_patch = { - KEYCHRON_K0_MAX_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_067_patch_entries), - keychron_group_067_patch_entries + KEYCHRON_C3_PRO_8K_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(c3_pro_8k_jis_entries), + c3_pro_8k_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 68: | -| 0x1620 K2 Ultra 8K ANSI | +| 0x0542 Keychron C4 Pro JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_068_patch_entries[] = +static const keychron_patch_entry c4_pro_jis_rgb_entries[] = { - { 58, 3, 12 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 1, 18, 1, 19 }, + { 1, 19, 1, 20 }, + { 1, 20, 1, 21 }, + { 2, 13, 1, 14 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 2, 18, 2, 19 }, + { 2, 19, 2, 20 }, + { 2, 20, 2, 21 }, + { 3, 13, 2, 13 }, + { 3, 17, 3, 18 }, + { 3, 18, 3, 19 }, + { 3, 19, 3, 20 }, + { 4, 15, 4, 16 }, + { 4, 17, 4, 18 }, + { 4, 18, 4, 19 }, + { 4, 19, 4, 20 }, + { 4, 20, 4, 21 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, + { 5, 17, 5, 18 }, + { 5, 18, 5, 20 }, }; -static const keychron_patch keychron_k2_ultra_8k_ansi_patch = +static const keychron_patch c4_pro_jis_rgb_patch = { - KEYCHRON_K2_ULTRA_8K_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_068_patch_entries), - keychron_group_068_patch_entries + KEYCHRON_C4_PRO_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(c4_pro_jis_rgb_entries), + c4_pro_jis_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 69: | -| 0x1621 K2 Ultra 8K ISO | +| 0x0630 Keychron Q3 Pro | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_069_patch_entries[] = +static const keychron_patch_entry q3_pro_entries[] = { - { 58, 3, 12 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 1, 0, 1, 1 }, + { 1, 1, 1, 2 }, + { 1, 2, 1, 3 }, + { 1, 3, 1, 4 }, + { 1, 4, 1, 5 }, + { 1, 5, 1, 6 }, + { 1, 6, 1, 7 }, + { 1, 7, 1, 8 }, + { 1, 8, 1, 9 }, + { 1, 9, 1, 10 }, + { 1, 10, 1, 11 }, + { 1, 11, 1, 12 }, + { 1, 12, 1, 13 }, + { 1, 13, 1, 14 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 0 }, + { 2, 0, 2, 1 }, + { 2, 1, 2, 2 }, + { 2, 2, 2, 3 }, + { 2, 3, 2, 4 }, + { 2, 4, 2, 5 }, + { 2, 5, 2, 6 }, + { 2, 6, 2, 7 }, + { 2, 7, 2, 8 }, + { 2, 8, 2, 9 }, + { 2, 9, 2, 10 }, + { 2, 10, 2, 11 }, + { 2, 11, 2, 12 }, + { 2, 12, 2, 13 }, + { 2, 13, 2, 14 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 3, 1, 3, 2 }, + { 3, 2, 3, 3 }, + { 3, 3, 3, 4 }, + { 3, 4, 3, 5 }, + { 3, 5, 3, 6 }, + { 3, 6, 3, 7 }, + { 3, 7, 3, 8 }, + { 3, 8, 3, 9 }, + { 3, 9, 3, 10 }, + { 3, 10, 3, 11 }, + { 3, 11, 3, 12 }, + { 3, 17, 2, 0 }, + { 4, 0, 4, 1 }, + { 4, 2, 4, 3 }, + { 4, 3, 4, 4 }, + { 4, 4, 4, 5 }, + { 4, 5, 4, 6 }, + { 4, 6, 4, 7 }, + { 4, 7, 4, 8 }, + { 4, 8, 4, 9 }, + { 4, 9, 4, 10 }, + { 4, 10, 4, 11 }, + { 4, 11, 4, 12 }, + { 4, 15, 4, 16 }, + { 4, 17, 4, 0 }, + { 5, 0, 5, 1 }, + { 5, 1, 5, 2 }, + { 5, 2, 5, 3 }, + { 5, 6, 5, 7 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, + { 5, 17, 5, 0 }, }; -static const keychron_patch keychron_k2_ultra_8k_iso_patch = +static const keychron_patch q3_pro_patch = { - KEYCHRON_K2_ULTRA_8K_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_069_patch_entries), - keychron_group_069_patch_entries + KEYCHRON_Q3_PRO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_pro_entries), + q3_pro_entries }; - /*---------------------------------------------------------*\ | Geometry Group 70: | -| 0x0D22 K2 Version 3 JIS | -| 0x0D32 K3 Version 3 JIS | +| 0x0633 Keychron Q3 Pro ANSI | +| 0x0634 Keychron Q3 Pro ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_070_patch_entries[] = +static const keychron_patch_entry q3_pro_ansi_entries[] = { - { 59, 3, 12 }, - { 72, 4, 12 }, - { 73, 4, 13 }, + { 3, 12, 0, 16 }, + { 3, 13, 3, 12 }, + { 3, 14, 1, 16 }, + { 3, 15, 2, 16 }, + { 4, 13, 4, 12 }, + { 4, 14, 5, 16 }, }; -static const keychron_patch keychron_k2_v3_jis_patch = +static const keychron_patch q3_pro_ansi_patch = { - KEYCHRON_K2_V3_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_070_patch_entries), - keychron_group_070_patch_entries + KEYCHRON_Q3_PRO_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_pro_ansi_entries), + q3_pro_ansi_entries }; -static const keychron_patch keychron_k3_v3_jis_patch = +static const keychron_patch q3_pro_iso_patch = { - KEYCHRON_K3_V3_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_070_patch_entries), - keychron_group_070_patch_entries + KEYCHRON_Q3_PRO_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_pro_ansi_entries), + q3_pro_ansi_entries }; - /*---------------------------------------------------------*\ | Geometry Group 71: | -| 0x0A41 K4 Max ISO | +| 0x0650 Keychron Q5 Pro ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_071_patch_entries[] = +static const keychron_patch_entry q5_pro_ansi_entries[] = { - { 18, 0, 18 }, - { 33, 1, 15 }, - { 34, 1, 16 }, - { 35, 1, 17 }, - { 36, 1, 18 }, - { 51, 2, 15 }, - { 52, 2, 16 }, - { 53, 2, 17 }, - { 54, 2, 18 }, - { 67, 3, 12 }, - { 68, 3, 15 }, - { 69, 3, 16 }, - { 70, 3, 17 }, - { 84, 4, 14 }, - { 85, 4, 15 }, - { 86, 4, 16 }, - { 87, 4, 17 }, - { 88, 4, 18 }, + { 3, 13, 3, 12 }, + { 4, 13, 4, 12 }, + { 5, 17, 5, 16 }, }; -static const keychron_patch keychron_k4_max_iso_patch = +static const keychron_patch q5_pro_ansi_patch = { - KEYCHRON_K4_MAX_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_071_patch_entries), - keychron_group_071_patch_entries + KEYCHRON_Q5_PRO_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q5_pro_ansi_entries), + q5_pro_ansi_entries }; - /*---------------------------------------------------------*\ | Geometry Group 72: | -| 0x0A42 K4 Max JIS | +| 0x0651 Keychron Q5 Pro ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_072_patch_entries[] = +static const keychron_patch_entry q5_pro_iso_entries[] = { - { 18, 0, 18 }, - { 32, 1, 13 }, - { 33, 1, 14 }, - { 34, 1, 15 }, - { 35, 1, 16 }, - { 36, 1, 17 }, - { 37, 1, 18 }, - { 52, 2, 15 }, - { 53, 2, 16 }, - { 54, 2, 17 }, - { 55, 2, 18 }, - { 68, 3, 12 }, - { 69, 3, 15 }, - { 70, 3, 16 }, - { 71, 3, 17 }, - { 84, 4, 13 }, - { 85, 4, 14 }, - { 86, 4, 15 }, - { 87, 4, 16 }, - { 88, 4, 17 }, - { 89, 4, 18 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 3, 13, 3, 12 }, + { 4, 13, 4, 12 }, + { 5, 17, 5, 16 }, }; -static const keychron_patch keychron_k4_max_jis_patch = +static const keychron_patch q5_pro_iso_patch = { - KEYCHRON_K4_MAX_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_072_patch_entries), - keychron_group_072_patch_entries + KEYCHRON_Q5_PRO_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q5_pro_iso_entries), + q5_pro_iso_entries }; - /*---------------------------------------------------------*\ | Geometry Group 73: | -| 0x1640 K4 Ultra 8K | +| 0x0660 Keychron Q6 Pro ANSI | +| 0x0661 Keychron Q6 Pro ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_073_patch_entries[] = +static const keychron_patch_entry q6_pro_ansi_entries[] = { - { 32, 1, 13 }, - { 54, 2, 18 }, - { 87, 4, 18 }, - { 92, 5, 10 }, - { 93, 5, 11 }, - { 94, 5, 12 }, - { 95, 5, 13 }, - { 96, 5, 14 }, - { 97, 5, 15 }, + { 3, 13, 3, 12 }, + { 4, 13, 4, 12 }, + { 5, 18, 5, 17 }, }; -static const keychron_patch keychron_k4_ultra_8k_patch = +static const keychron_patch q6_pro_ansi_patch = { - KEYCHRON_K4_ULTRA_8K_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_073_patch_entries), - keychron_group_073_patch_entries + KEYCHRON_Q6_PRO_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_pro_ansi_entries), + q6_pro_ansi_entries }; +static const keychron_patch q6_pro_iso_patch = +{ + KEYCHRON_Q6_PRO_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_pro_ansi_entries), + q6_pro_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 74: | -| 0x0D41 K4 Version 3 ISO | +| 0x06A0 Keychron Q10 Pro ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_074_patch_entries[] = +static const keychron_patch_entry q10_pro_ansi_entries[] = { - { 67, 3, 12 }, - { 72, 4, 2 }, - { 73, 4, 3 }, - { 74, 4, 4 }, - { 75, 4, 5 }, - { 76, 4, 6 }, - { 77, 4, 7 }, - { 78, 4, 8 }, - { 79, 4, 9 }, - { 80, 4, 10 }, - { 81, 4, 11 }, - { 82, 4, 12 }, - { 83, 4, 13 }, - { 84, 4, 15 }, - { 85, 4, 16 }, - { 86, 4, 17 }, - { 87, 4, 18 }, - { 88, 4, 19 }, - { 93, 5, 10 }, - { 94, 5, 11 }, - { 95, 5, 12 }, - { 96, 5, 13 }, - { 97, 5, 14 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 1, 15, 1, 16 }, + { 2, 15, 2, 16 }, + { 3, 15, 3, 16 }, + { 4, 1, 4, 2 }, + { 5, 3, 5, 4 }, + { 5, 4, 5, 5 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 12 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, }; -static const keychron_patch keychron_k4_v3_iso_patch = +static const keychron_patch q10_pro_ansi_patch = { - KEYCHRON_K4_V3_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_074_patch_entries), - keychron_group_074_patch_entries + KEYCHRON_Q10_PRO_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q10_pro_ansi_entries), + q10_pro_ansi_entries }; - /*---------------------------------------------------------*\ | Geometry Group 75: | -| 0x0D40 K4 Version 3 | +| 0x0810 Keychron Q1 Max ANSI | +| 0x0811 Keychron Q1 Max ISO | +| 0x1210 Keychron Q1 Ultra 8K ANSI | +| 0x1211 Keychron Q1 Ultra 8K ISO | +| 0x1213 Keychron Q1 Ultra 8K ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_075_patch_entries[] = +static const keychron_patch_entry q1_max_ansi_entries[] = { - { 67, 3, 12 }, - { 83, 4, 14 }, - { 92, 5, 10 }, - { 93, 5, 11 }, - { 94, 5, 12 }, - { 95, 5, 13 }, - { 96, 5, 14 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 3, 13, 3, 15 }, + { 4, 13, 4, 12 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, }; -static const keychron_patch keychron_k4_v3_patch = +static const keychron_patch q1_max_ansi_patch = { - KEYCHRON_K4_V3_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_075_patch_entries), - keychron_group_075_patch_entries + KEYCHRON_Q1_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1_max_ansi_entries), + q1_max_ansi_entries }; +static const keychron_patch q1_max_iso_patch = +{ + KEYCHRON_Q1_MAX_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1_max_ansi_entries), + q1_max_ansi_entries +}; + +static const keychron_patch q1_ultra_8k_ansi_1210_patch = +{ + KEYCHRON_Q1_ULTRA_8K_ANSI_1210_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1_max_ansi_entries), + q1_max_ansi_entries +}; + +static const keychron_patch q1_ultra_8k_iso_patch = +{ + KEYCHRON_Q1_ULTRA_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1_max_ansi_entries), + q1_max_ansi_entries +}; + +static const keychron_patch q1_ultra_8k_ansi_1213_patch = +{ + KEYCHRON_Q1_ULTRA_8K_ANSI_1213_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1_max_ansi_entries), + q1_max_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 76: | -| 0x0A58 K5 Max JIS | +| 0x0812 Keychron Q1 Max JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_076_patch_entries[] = +static const keychron_patch_entry q1_max_jis_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 7 }, - { 6, 0, 8 }, - { 7, 0, 9 }, - { 8, 0, 10 }, - { 9, 0, 11 }, - { 10, 0, 12 }, - { 11, 0, 13 }, - { 12, 0, 14 }, - { 13, 0, 15 }, - { 14, 0, 16 }, - { 15, 0, 17 }, - { 16, 0, 18 }, - { 17, 0, 19 }, - { 18, 0, 20 }, - { 19, 0, 21 }, - { 34, 1, 14 }, - { 35, 1, 15 }, - { 36, 1, 16 }, - { 37, 1, 17 }, - { 38, 1, 18 }, - { 39, 1, 19 }, - { 40, 1, 20 }, - { 41, 1, 21 }, - { 56, 2, 15 }, - { 57, 2, 16 }, - { 58, 2, 17 }, - { 59, 2, 18 }, - { 60, 2, 19 }, - { 61, 2, 20 }, - { 62, 2, 21 }, - { 75, 3, 12 }, - { 76, 3, 18 }, - { 77, 3, 19 }, - { 78, 3, 20 }, - { 92, 4, 16 }, - { 93, 4, 18 }, - { 94, 4, 19 }, - { 95, 4, 20 }, - { 96, 4, 21 }, - { 102, 5, 10 }, - { 103, 5, 11 }, - { 104, 5, 12 }, - { 105, 5, 13 }, - { 106, 5, 14 }, - { 107, 5, 15 }, - { 108, 5, 16 }, - { 109, 5, 17 }, - { 110, 5, 18 }, - { 111, 5, 20 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 2, 14, 2, 15 }, + { 3, 13, 3, 15 }, + { 3, 14, 1, 15 }, + { 5, 8, 5, 9 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, }; -static const keychron_patch keychron_k5_max_jis_0a58_patch = +static const keychron_patch q1_max_jis_patch = { - KEYCHRON_K5_MAX_JIS_0A58_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_076_patch_entries), - keychron_group_076_patch_entries + KEYCHRON_Q1_MAX_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1_max_jis_entries), + q1_max_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 77: | -| 0x1650 K5 Ultra 8K Knob ANSI | +| 0x0820 Keychron Q2 Max ANSI | +| 0x0821 Keychron Q2 Max ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_077_patch_entries[] = +static const keychron_patch_entry q2_max_ansi_entries[] = { - { 20, 0, 20 }, - { 41, 1, 20 }, - { 62, 2, 20 }, - { 75, 3, 12 }, - { 90, 4, 12 }, - { 95, 4, 20 }, + { 1, 14, 1, 15 }, + { 2, 13, 2, 15 }, + { 3, 13, 3, 12 }, + { 4, 9, 4, 10 }, + { 4, 10, 4, 11 }, + { 4, 11, 4, 12 }, + { 4, 12, 4, 13 }, + { 4, 13, 4, 14 }, + { 4, 14, 4, 15 }, }; -static const keychron_patch keychron_k5_ultra_8k_knob_ansi_patch = +static const keychron_patch q2_max_ansi_patch = { - KEYCHRON_K5_ULTRA_8K_KNOB_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_077_patch_entries), - keychron_group_077_patch_entries + KEYCHRON_Q2_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q2_max_ansi_entries), + q2_max_ansi_entries }; +static const keychron_patch q2_max_iso_patch = +{ + KEYCHRON_Q2_MAX_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q2_max_ansi_entries), + q2_max_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 78: | -| 0x1651 K5 Ultra 8K Knob ISO | +| 0x0831 Keychron Q3 Max ISO | +| 0x1030 Keychron Q3 HE 8K | +| 0x1031 Keychron Q3 HE 8K ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_078_patch_entries[] = +static const keychron_patch_entry q3_max_iso_entries[] = { - { 20, 0, 20 }, - { 41, 1, 20 }, - { 62, 2, 20 }, - { 75, 3, 12 }, - { 91, 4, 12 }, - { 96, 4, 20 }, + { 4, 13, 4, 12 }, }; -static const keychron_patch keychron_k5_ultra_8k_knob_iso_patch = +static const keychron_patch q3_max_iso_patch = { - KEYCHRON_K5_ULTRA_8K_KNOB_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_078_patch_entries), - keychron_group_078_patch_entries + KEYCHRON_Q3_MAX_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_max_iso_entries), + q3_max_iso_entries }; +static const keychron_patch q3_he_8k_patch = +{ + KEYCHRON_Q3_HE_8K_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_max_iso_entries), + q3_max_iso_entries +}; + +static const keychron_patch q3_he_8k_iso_patch = +{ + KEYCHRON_Q3_HE_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_max_iso_entries), + q3_max_iso_entries +}; /*---------------------------------------------------------*\ | Geometry Group 79: | -| 0x0D50 K5 Version 2 | +| 0x0850 Keychron Q5 Max ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_079_patch_entries[] = +static const keychron_patch_entry q5_max_ansi_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 18, 0, 19 }, - { 19, 0, 20 }, - { 39, 1, 19 }, - { 40, 1, 20 }, - { 60, 2, 19 }, - { 61, 2, 20 }, - { 74, 3, 12 }, - { 77, 3, 19 }, - { 89, 4, 12 }, - { 93, 4, 19 }, - { 94, 4, 20 }, - { 107, 5, 19 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 4, 13, 4, 14 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, }; -static const keychron_patch keychron_k5_v2_patch = +static const keychron_patch q5_max_ansi_patch = { - KEYCHRON_K5_V2_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_079_patch_entries), - keychron_group_079_patch_entries + KEYCHRON_Q5_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q5_max_ansi_entries), + q5_max_ansi_entries }; - /*---------------------------------------------------------*\ | Geometry Group 80: | -| 0x0D52 K5 Version 2 JIS | +| 0x0851 Keychron Q5 Max ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_080_patch_entries[] = +static const keychron_patch_entry q5_max_iso_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 7 }, - { 6, 0, 8 }, - { 7, 0, 9 }, - { 8, 0, 10 }, - { 9, 0, 11 }, - { 10, 0, 12 }, - { 11, 0, 13 }, - { 12, 0, 14 }, - { 13, 0, 15 }, - { 14, 0, 16 }, - { 15, 0, 17 }, - { 16, 0, 18 }, - { 17, 0, 19 }, - { 18, 0, 20 }, - { 19, 0, 21 }, - { 34, 1, 14 }, - { 35, 1, 15 }, - { 36, 1, 16 }, - { 37, 1, 17 }, - { 38, 1, 18 }, - { 39, 1, 19 }, - { 40, 1, 20 }, - { 41, 1, 21 }, - { 56, 2, 15 }, - { 57, 2, 16 }, - { 58, 2, 17 }, - { 59, 2, 18 }, - { 60, 2, 19 }, - { 61, 2, 20 }, - { 62, 2, 21 }, - { 75, 3, 12 }, - { 76, 3, 18 }, - { 77, 3, 19 }, - { 78, 3, 20 }, - { 92, 4, 16 }, - { 93, 4, 18 }, - { 94, 4, 19 }, - { 95, 4, 20 }, - { 96, 4, 21 }, - { 102, 5, 10 }, - { 103, 5, 11 }, - { 104, 5, 12 }, - { 105, 5, 13 }, - { 106, 5, 14 }, - { 107, 5, 15 }, - { 108, 5, 16 }, - { 109, 5, 17 }, - { 110, 5, 18 }, - { 111, 5, 20 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 3, 13, 3, 14 }, + { 5, 16, 5, 15 }, }; -static const keychron_patch keychron_k5_v2_jis_patch = +static const keychron_patch q5_max_iso_patch = { - KEYCHRON_K5_V2_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_080_patch_entries), - keychron_group_080_patch_entries + KEYCHRON_Q5_MAX_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q5_max_iso_entries), + q5_max_iso_entries }; - /*---------------------------------------------------------*\ | Geometry Group 81: | -| 0x0E61 K6 HE ISO | +| 0x0852 Keychron Q5 Max JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_081_patch_entries[] = +static const keychron_patch_entry q5_max_jis_entries[] = { - { 14, 0, 15 }, - { 29, 1, 15 }, - { 42, 2, 12 }, - { 43, 2, 15 }, - { 57, 3, 14 }, - { 58, 3, 15 }, - { 63, 4, 10 }, - { 64, 4, 11 }, - { 65, 4, 12 }, - { 66, 4, 13 }, - { 67, 4, 14 }, - { 68, 4, 15 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 11 }, + { 0, 10, 0, 12 }, + { 0, 11, 0, 13 }, + { 0, 12, 0, 14 }, + { 0, 13, 0, 15 }, + { 0, 14, 1, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 0, 17, 0, 18 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 1, 18, 1, 19 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 2, 18, 2, 19 }, + { 3, 13, 3, 15 }, + { 3, 15, 3, 16 }, + { 3, 16, 3, 17 }, + { 3, 17, 3, 18 }, + { 4, 14, 4, 15 }, + { 4, 15, 4, 16 }, + { 4, 16, 4, 17 }, + { 4, 17, 4, 18 }, + { 4, 18, 4, 19 }, + { 5, 8, 5, 9 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 14 }, + { 5, 13, 5, 15 }, + { 5, 14, 5, 16 }, + { 5, 16, 5, 17 }, + { 5, 17, 5, 18 }, }; -static const keychron_patch keychron_k6_he_iso_patch = +static const keychron_patch q5_max_jis_patch = { - KEYCHRON_K6_HE_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_081_patch_entries), - keychron_group_081_patch_entries + KEYCHRON_Q5_MAX_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q5_max_jis_entries), + q5_max_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 82: | -| 0x1680 K8 Ultra 8K ANSI | +| 0x0860 Keychron Q6 Max ANSI | +| 0x0861 Keychron Q6 Max ISO | +| 0x0AA0 Keychron K10 Max ANSI RGB | +| 0x0AA1 Keychron K10 Max ISO RGB | +| 0x13A9 Keychron K10 Pro SS ZMK RGB | +| 0x13AA Keychron K10 Ultra SE ANSI | +| 0x16A0 Keychron K10 Ultra 8K RGB | +| 0x16A1 Keychron K10 Ultra 8K ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_082_patch_entries[] = +static const keychron_patch_entry q6_max_ansi_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 62, 3, 12 }, - { 74, 4, 12 }, + { 3, 13, 0, 20 }, + { 3, 14, 1, 20 }, + { 3, 15, 2, 20 }, + { 3, 16, 4, 20 }, + { 4, 13, 4, 12 }, + { 5, 18, 5, 17 }, }; -static const keychron_patch keychron_k8_ultra_8k_ansi_patch = +static const keychron_patch q6_max_ansi_patch = { - KEYCHRON_K8_ULTRA_8K_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_082_patch_entries), - keychron_group_082_patch_entries + KEYCHRON_Q6_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_max_ansi_entries), + q6_max_ansi_entries }; +static const keychron_patch q6_max_iso_patch = +{ + KEYCHRON_Q6_MAX_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_max_ansi_entries), + q6_max_ansi_entries +}; + +static const keychron_patch k10_max_ansi_rgb_patch = +{ + KEYCHRON_K10_MAX_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_max_ansi_entries), + q6_max_ansi_entries +}; + +static const keychron_patch k10_max_iso_rgb_patch = +{ + KEYCHRON_K10_MAX_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_max_ansi_entries), + q6_max_ansi_entries +}; + +static const keychron_patch k10_pro_ss_zmk_rgb_patch = +{ + KEYCHRON_K10_PRO_SS_ZMK_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_max_ansi_entries), + q6_max_ansi_entries +}; + +static const keychron_patch k10_ultra_se_ansi_patch = +{ + KEYCHRON_K10_ULTRA_SE_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_max_ansi_entries), + q6_max_ansi_entries +}; + +static const keychron_patch k10_ultra_8k_rgb_patch = +{ + KEYCHRON_K10_ULTRA_8K_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_max_ansi_entries), + q6_max_ansi_entries +}; + +static const keychron_patch k10_ultra_8k_iso_patch = +{ + KEYCHRON_K10_ULTRA_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_max_ansi_entries), + q6_max_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 83: | -| 0x1681 K8 Ultra 8K ISO | +| 0x0880 Keychron Q8 Max ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_083_patch_entries[] = +static const keychron_patch_entry q8_max_ansi_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 75, 4, 12 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 1, 6, 1, 7 }, + { 1, 7, 1, 8 }, + { 1, 8, 1, 9 }, + { 1, 9, 1, 10 }, + { 1, 10, 1, 11 }, + { 1, 11, 1, 12 }, + { 1, 12, 1, 13 }, + { 1, 13, 1, 14 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 3, 2, 3, 1 }, + { 3, 3, 3, 2 }, + { 3, 4, 3, 3 }, + { 3, 5, 3, 4 }, + { 3, 6, 3, 5 }, + { 3, 7, 3, 6 }, + { 3, 8, 3, 7 }, + { 3, 9, 3, 8 }, + { 3, 10, 3, 9 }, + { 3, 11, 3, 10 }, + { 3, 12, 3, 11 }, + { 3, 13, 3, 12 }, + { 4, 6, 4, 5 }, + { 4, 9, 4, 11 }, + { 4, 12, 4, 13 }, + { 4, 13, 4, 14 }, + { 4, 14, 4, 15 }, }; -static const keychron_patch keychron_k8_ultra_8k_iso_patch = +static const keychron_patch q8_max_ansi_patch = { - KEYCHRON_K8_ULTRA_8K_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_083_patch_entries), - keychron_group_083_patch_entries + KEYCHRON_Q8_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q8_max_ansi_entries), + q8_max_ansi_entries }; - /*---------------------------------------------------------*\ | Geometry Group 84: | -| 0x0B14 Q1 HE | -| 0x0B15 Q1 HE ANSI V2 SILENT | +| 0x08A0 Keychron Q10 Max ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_084_patch_entries[] = +static const keychron_patch_entry q10_max_ansi_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 29, 1, 15 }, - { 44, 2, 15 }, - { 58, 3, 15 }, - { 70, 4, 12 }, - { 76, 5, 10 }, - { 77, 5, 11 }, - { 78, 5, 12 }, - { 79, 5, 13 }, - { 80, 5, 14 }, - { 81, 5, 15 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 1, 15, 1, 16 }, + { 2, 15, 2, 16 }, + { 3, 15, 3, 16 }, + { 4, 7, 5, 7 }, + { 5, 3, 5, 4 }, + { 5, 4, 5, 5 }, + { 5, 7, 4, 7 }, + { 5, 9, 5, 11 }, + { 5, 10, 5, 12 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, }; -static const keychron_patch keychron_q1_he_patch = +static const keychron_patch q10_max_ansi_patch = { - KEYCHRON_Q1_HE_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_084_patch_entries), - keychron_group_084_patch_entries + KEYCHRON_Q10_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q10_max_ansi_entries), + q10_max_ansi_entries }; -static const keychron_patch keychron_q1_he_ansi_v2_silent_patch = -{ - KEYCHRON_Q1_HE_ANSI_V2_SILENT_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_084_patch_entries), - keychron_group_084_patch_entries -}; - - /*---------------------------------------------------------*\ | Geometry Group 85: | -| 0x1010 Q1 HE 8K ANSI | +| 0x08A1 Keychron Q10 Max ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_085_patch_entries[] = +static const keychron_patch_entry q10_max_iso_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 29, 1, 15 }, - { 31, 2, 2 }, - { 32, 2, 3 }, - { 33, 2, 4 }, - { 34, 2, 5 }, - { 35, 2, 6 }, - { 36, 2, 7 }, - { 37, 2, 8 }, - { 38, 2, 9 }, - { 39, 2, 10 }, - { 40, 2, 11 }, - { 41, 2, 12 }, - { 42, 2, 13 }, - { 43, 2, 14 }, - { 44, 2, 15 }, - { 46, 3, 2 }, - { 47, 3, 3 }, - { 48, 3, 4 }, - { 49, 3, 5 }, - { 50, 3, 6 }, - { 51, 3, 7 }, - { 52, 3, 8 }, - { 53, 3, 9 }, - { 54, 3, 10 }, - { 55, 3, 11 }, - { 56, 3, 12 }, - { 57, 3, 13 }, - { 58, 3, 15 }, - { 70, 4, 12 }, - { 76, 5, 10 }, - { 77, 5, 11 }, - { 78, 5, 12 }, - { 79, 5, 13 }, - { 80, 5, 14 }, - { 81, 5, 15 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 1, 15, 1, 16 }, + { 2, 15, 2, 16 }, + { 3, 15, 3, 16 }, + { 5, 9, 5, 11 }, + { 5, 10, 5, 12 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, }; -static const keychron_patch keychron_q1_he_8k_ansi_patch = +static const keychron_patch q10_max_iso_patch = { - KEYCHRON_Q1_HE_8K_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_085_patch_entries), - keychron_group_085_patch_entries + KEYCHRON_Q10_MAX_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q10_max_iso_entries), + q10_max_iso_entries }; - /*---------------------------------------------------------*\ | Geometry Group 86: | -| 0x1011 Q1 HE 8K ISO Knob | +| 0x08B0 Keychron Q65 Max ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_086_patch_entries[] = +static const keychron_patch_entry q65_max_ansi_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 29, 1, 15 }, - { 44, 2, 15 }, - { 58, 3, 15 }, - { 71, 4, 12 }, - { 77, 5, 10 }, - { 78, 5, 11 }, - { 79, 5, 12 }, - { 80, 5, 13 }, - { 81, 5, 14 }, - { 82, 5, 15 }, + { 0, 15, 0, 16 }, + { 1, 15, 1, 16 }, + { 2, 14, 2, 16 }, + { 4, 10, 4, 11 }, + { 4, 11, 4, 12 }, + { 4, 12, 4, 13 }, + { 4, 13, 4, 14 }, + { 4, 14, 4, 15 }, + { 4, 15, 4, 16 }, }; -static const keychron_patch keychron_q1_he_8k_iso_knob_patch = +static const keychron_patch q65_max_ansi_patch = { - KEYCHRON_Q1_HE_8K_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_086_patch_entries), - keychron_group_086_patch_entries + KEYCHRON_Q65_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q65_max_ansi_entries), + q65_max_ansi_entries }; - /*---------------------------------------------------------*\ | Geometry Group 87: | -| 0x12B0 Q11 Ultra 8K Knob | +| 0x08BA Keychron Q11 Ultra 8K R | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_087_patch_entries[] = +static const keychron_patch_entry q11_ultra_8k_r_entries[] = { - { 40, 2, 7 }, - { 41, 2, 8 }, - { 42, 2, 9 }, - { 43, 2, 10 }, - { 44, 2, 11 }, - { 45, 2, 12 }, - { 46, 2, 13 }, - { 47, 2, 14 }, - { 51, 3, 3 }, - { 52, 3, 4 }, - { 53, 3, 5 }, - { 54, 3, 6 }, - { 55, 3, 7 }, + { 0, 8, 0, 0 }, + { 0, 9, 0, 1 }, + { 0, 10, 0, 2 }, + { 0, 11, 0, 3 }, + { 0, 12, 0, 4 }, + { 0, 13, 0, 5 }, + { 0, 14, 0, 6 }, + { 0, 15, 0, 7 }, + { 1, 8, 1, 0 }, + { 1, 9, 1, 1 }, + { 1, 10, 1, 2 }, + { 1, 11, 1, 3 }, + { 1, 12, 1, 4 }, + { 1, 13, 1, 5 }, + { 1, 14, 1, 6 }, + { 1, 16, 1, 9 }, + { 2, 8, 2, 0 }, + { 2, 9, 2, 1 }, + { 2, 10, 2, 2 }, + { 2, 11, 2, 3 }, + { 2, 12, 2, 4 }, + { 2, 13, 2, 5 }, + { 2, 14, 2, 6 }, + { 2, 15, 2, 7 }, + { 2, 16, 2, 9 }, + { 3, 8, 3, 0 }, + { 3, 9, 3, 1 }, + { 3, 10, 3, 2 }, + { 3, 11, 3, 3 }, + { 3, 12, 3, 4 }, + { 3, 13, 3, 5 }, + { 3, 14, 3, 6 }, + { 3, 16, 3, 9 }, + { 4, 8, 4, 1 }, + { 4, 9, 4, 2 }, + { 4, 10, 4, 3 }, + { 4, 11, 4, 4 }, + { 4, 12, 4, 5 }, + { 4, 13, 4, 6 }, + { 4, 15, 4, 8 }, + { 5, 8, 5, 1 }, + { 5, 11, 5, 4 }, + { 5, 12, 5, 5 }, + { 5, 13, 5, 6 }, + { 5, 14, 5, 7 }, + { 5, 15, 5, 8 }, + { 5, 16, 5, 9 }, }; -static const keychron_patch keychron_q11_ultra_8k_knob_patch = +static const keychron_patch q11_ultra_8k_r_patch = { - KEYCHRON_Q11_ULTRA_8K_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_087_patch_entries), - keychron_group_087_patch_entries + KEYCHRON_Q11_ULTRA_8K_R_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q11_ultra_8k_r_entries), + q11_ultra_8k_r_entries }; - /*---------------------------------------------------------*\ | Geometry Group 88: | -| 0x12B2 Q11 Ultra 8K Knob ISO | +| 0x08C0 Keychron Q60 Max | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_088_patch_entries[] = +static const keychron_patch_entry q60_max_entries[] = { - { 40, 2, 7 }, - { 41, 2, 8 }, - { 42, 2, 9 }, - { 43, 2, 10 }, - { 44, 2, 11 }, - { 45, 2, 12 }, - { 46, 2, 13 }, - { 47, 2, 14 }, - { 51, 3, 3 }, - { 52, 3, 4 }, - { 53, 3, 5 }, - { 54, 3, 6 }, - { 55, 3, 7 }, - { 83, 5, 4 }, + { 3, 13, 3, 14 }, }; -static const keychron_patch keychron_q11_ultra_8k_knob_iso_patch = +static const keychron_patch q60_max_patch = { - KEYCHRON_Q11_ULTRA_8K_KNOB_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_088_patch_entries), - keychron_group_088_patch_entries + KEYCHRON_Q60_MAX_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q60_max_entries), + q60_max_entries }; - /*---------------------------------------------------------*\ | Geometry Group 89: | -| 0x0BC1 Q12 HE ISO Knob | +| 0x08C3 Keychron Q12 MAX ANSI | +| 0x08C4 Keychron Q12 Max ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_089_patch_entries[] = +static const keychron_patch_entry q12_max_ansi_entries[] = { - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 15, 0, 16 }, - { 16, 0, 17 }, - { 17, 0, 18 }, - { 18, 0, 19 }, - { 37, 1, 19 }, - { 56, 2, 19 }, - { 73, 3, 19 }, - { 89, 4, 15 }, - { 90, 4, 16 }, - { 92, 5, 0 }, - { 97, 5, 9 }, - { 98, 5, 14 }, - { 99, 5, 15 }, - { 100, 5, 16 }, - { 101, 5, 17 }, - { 102, 5, 18 }, - { 103, 5, 19 }, + { 3, 17, 3, 18 }, + { 5, 1, 5, 0 }, }; -static const keychron_patch keychron_q12_he_iso_knob_patch = +static const keychron_patch q12_max_ansi_patch = { - KEYCHRON_Q12_HE_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_089_patch_entries), - keychron_group_089_patch_entries + KEYCHRON_Q12_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q12_max_ansi_entries), + q12_max_ansi_entries }; +static const keychron_patch q12_max_iso_patch = +{ + KEYCHRON_Q12_MAX_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q12_max_ansi_entries), + q12_max_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 90: | -| 0x0BC0 Q12 HE Knob | +| 0x08D0 Keychron Q13 Max ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_090_patch_entries[] = +static const keychron_patch_entry q13_max_ansi_entries[] = { - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 15, 0, 16 }, - { 16, 0, 17 }, - { 17, 0, 18 }, - { 18, 0, 19 }, - { 37, 1, 19 }, - { 56, 2, 19 }, - { 61, 3, 6 }, - { 62, 3, 7 }, - { 63, 3, 8 }, - { 64, 3, 9 }, - { 65, 3, 10 }, - { 66, 3, 11 }, - { 67, 3, 12 }, - { 68, 3, 13 }, - { 69, 3, 14 }, - { 70, 3, 15 }, - { 71, 3, 16 }, - { 72, 3, 17 }, - { 73, 3, 19 }, - { 88, 4, 15 }, - { 89, 4, 16 }, - { 91, 5, 0 }, - { 97, 5, 14 }, - { 98, 5, 15 }, - { 99, 5, 16 }, - { 100, 5, 17 }, - { 101, 5, 18 }, - { 102, 5, 19 }, + { 4, 3, 4, 2 }, + { 4, 4, 4, 3 }, + { 4, 5, 4, 4 }, + { 4, 6, 4, 5 }, + { 4, 7, 4, 6 }, + { 5, 4, 5, 3 }, + { 5, 6, 5, 4 }, + { 5, 7, 5, 6 }, + { 5, 9, 5, 8 }, }; -static const keychron_patch keychron_q12_he_knob_patch = +static const keychron_patch q13_max_ansi_patch = { - KEYCHRON_Q12_HE_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_090_patch_entries), - keychron_group_090_patch_entries + KEYCHRON_Q13_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q13_max_ansi_entries), + q13_max_ansi_entries }; - /*---------------------------------------------------------*\ | Geometry Group 91: | -| 0x08D2 Q13 Max JIS Knob | +| 0x08D2 Keychron Q13 Max JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_091_patch_entries[] = +static const keychron_patch_entry q13_max_jis_entries[] = { - { 43, 4, 2 }, - { 82, 5, 5 }, - { 107, 5, 8 }, - { 108, 5, 10 }, + { 5, 6, 5, 5 }, + { 5, 9, 5, 8 }, }; -static const keychron_patch keychron_q13_max_jis_knob_patch = +static const keychron_patch q13_max_jis_patch = { - KEYCHRON_Q13_MAX_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_091_patch_entries), - keychron_group_091_patch_entries + KEYCHRON_Q13_MAX_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q13_max_jis_entries), + q13_max_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 92: | -| 0x12D0 Q13 Ultra 8K Knob | +| 0x08E0 Keychron Q14 Max ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_092_patch_entries[] = +static const keychron_patch_entry q14_max_ansi_entries[] = { - { 4, 0, 13 }, - { 5, 0, 14 }, - { 43, 4, 2 }, - { 75, 4, 3 }, - { 76, 4, 4 }, - { 77, 4, 5 }, - { 78, 4, 6 }, - { 79, 5, 3 }, - { 80, 5, 4 }, - { 81, 5, 6 }, - { 82, 0, 9 }, - { 83, 0, 10 }, - { 84, 0, 11 }, - { 85, 0, 12 }, - { 104, 5, 8 }, + { 5, 9, 5, 8 }, + { 5, 12, 5, 11 }, }; -static const keychron_patch keychron_q13_ultra_8k_knob_patch = +static const keychron_patch q14_max_ansi_patch = { - KEYCHRON_Q13_ULTRA_8K_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_092_patch_entries), - keychron_group_092_patch_entries + KEYCHRON_Q14_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q14_max_ansi_entries), + q14_max_ansi_entries }; +/*---------------------------------------------------------*\ +| Geometry Group 93: | +| 0x08F0 Keychron Q15 Max ANSI | +\*---------------------------------------------------------*/ +static const keychron_patch_entry q15_max_ansi_entries[] = +{ + { 4, 7, 4, 6 }, +}; + +static const keychron_patch q15_max_ansi_patch = +{ + KEYCHRON_Q15_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q15_max_ansi_entries), + q15_max_ansi_entries +}; + +/*---------------------------------------------------------*\ +| Geometry Group 94: | +| 0x0914 Keychron V2 Ultra ISO | +| 0x0915 Keychron V1 Max JIS | +\*---------------------------------------------------------*/ +static const keychron_patch_entry v2_ultra_iso_entries[] = +{ + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 3, 13, 2, 13 }, +}; + +static const keychron_patch v2_ultra_iso_patch = +{ + KEYCHRON_V2_ULTRA_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v2_ultra_iso_entries), + v2_ultra_iso_entries +}; + +static const keychron_patch v1_max_jis_patch = +{ + KEYCHRON_V1_MAX_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v2_ultra_iso_entries), + v2_ultra_iso_entries +}; /*---------------------------------------------------------*\ | Geometry Group 95: | -| 0x1020 Q2 HE 8K | +| 0x0935 Keychron V3 Max JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_095_patch_entries[] = +static const keychron_patch_entry v3_max_jis_entries[] = { - { 55, 3, 12 }, - { 56, 3, 13 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 14 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 4, 15, 4, 16 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, }; -static const keychron_patch keychron_q2_he_8k_patch = +static const keychron_patch v3_max_jis_patch = { - KEYCHRON_Q2_HE_8K_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_095_patch_entries), - keychron_group_095_patch_entries + KEYCHRON_V3_MAX_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v3_max_jis_entries), + v3_max_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 96: | -| 0x1030 Q3 HE 8K | -| 0x1033 Q3 HE 8K ANSI | +| 0x0950 Keychron V5 Max ANSI | +| 0x0951 Keychron V5 Max ISO | +| 0x0952 Keychron V5 Max JIS | +| 0x0C50 Keychron V5 Ultra 8K ANSI | +| 0x0C51 Keychron V5 Ultra ISO | +| 0x0C52 Keychron V5 Ultra JIS | +| 0x1250 Keychron Q5 Ultra 8K | +| 0x1251 Keychron Q5 Ultra 8K ISO | +| 0x1253 Keychron Q5 Ultra 8K ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_096_patch_entries[] = +static const keychron_patch_entry v5_max_ansi_entries[] = { - { 75, 4, 12 }, + { 3, 18, 2, 18 }, }; -static const keychron_patch keychron_q3_he_8k_patch = +static const keychron_patch v5_max_ansi_patch = { - KEYCHRON_Q3_HE_8K_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_096_patch_entries), - keychron_group_096_patch_entries + KEYCHRON_V5_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v5_max_ansi_entries), + v5_max_ansi_entries }; -static const keychron_patch keychron_q3_he_8k_ansi_patch = +static const keychron_patch v5_max_iso_patch = { - KEYCHRON_Q3_HE_8K_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_096_patch_entries), - keychron_group_096_patch_entries + KEYCHRON_V5_MAX_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v5_max_ansi_entries), + v5_max_ansi_entries }; +static const keychron_patch v5_max_jis_patch = +{ + KEYCHRON_V5_MAX_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v5_max_ansi_entries), + v5_max_ansi_entries +}; + +static const keychron_patch v5_ultra_8k_ansi_patch = +{ + KEYCHRON_V5_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v5_max_ansi_entries), + v5_max_ansi_entries +}; + +static const keychron_patch v5_ultra_iso_patch = +{ + KEYCHRON_V5_ULTRA_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v5_max_ansi_entries), + v5_max_ansi_entries +}; + +static const keychron_patch v5_ultra_jis_patch = +{ + KEYCHRON_V5_ULTRA_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v5_max_ansi_entries), + v5_max_ansi_entries +}; + +static const keychron_patch q5_ultra_8k_patch = +{ + KEYCHRON_Q5_ULTRA_8K_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v5_max_ansi_entries), + v5_max_ansi_entries +}; + +static const keychron_patch q5_ultra_8k_iso_patch = +{ + KEYCHRON_Q5_ULTRA_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v5_max_ansi_entries), + v5_max_ansi_entries +}; + +static const keychron_patch q5_ultra_8k_ansi_patch = +{ + KEYCHRON_Q5_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v5_max_ansi_entries), + v5_max_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 97: | -| 0x1032 Q3 HE 8K JIS | +| 0x0962 Keychron V6 Max JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_097_patch_entries[] = +static const keychron_patch_entry v6_max_jis_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 0, 17, 0, 18 }, + { 0, 18, 0, 19 }, + { 0, 19, 0, 20 }, + { 0, 20, 0, 21 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 1, 18, 1, 19 }, + { 1, 19, 1, 20 }, + { 1, 20, 1, 21 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 2, 18, 2, 19 }, + { 2, 19, 2, 20 }, + { 3, 13, 1, 14 }, + { 3, 17, 3, 18 }, + { 3, 18, 3, 19 }, + { 3, 19, 3, 20 }, + { 3, 20, 2, 21 }, + { 4, 15, 4, 16 }, + { 4, 17, 4, 18 }, + { 4, 18, 4, 19 }, + { 4, 19, 4, 20 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, + { 5, 17, 5, 18 }, + { 5, 19, 5, 20 }, + { 5, 20, 4, 21 }, }; -static const keychron_patch keychron_q3_he_8k_jis_patch = +static const keychron_patch v6_max_jis_patch = { - KEYCHRON_Q3_HE_8K_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_097_patch_entries), - keychron_group_097_patch_entries + KEYCHRON_V6_MAX_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v6_max_jis_entries), + v6_max_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 98: | -| 0x0B32 Q3 HE JIS Knob | +| 0x0980 Keychron V8 Max ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_098_patch_entries[] = +static const keychron_patch_entry v8_max_ansi_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 15, 0, 16 }, - { 16, 0, 17 }, - { 31, 1, 14 }, - { 32, 1, 15 }, - { 33, 1, 16 }, - { 34, 1, 17 }, - { 49, 2, 15 }, - { 50, 2, 16 }, - { 51, 2, 17 }, - { 64, 3, 12 }, - { 78, 4, 16 }, - { 84, 5, 9 }, - { 85, 5, 10 }, - { 86, 5, 11 }, - { 87, 5, 12 }, - { 88, 5, 13 }, - { 89, 5, 15 }, - { 90, 5, 16 }, - { 91, 5, 17 }, + { 0, 14, 0, 13 }, + { 2, 14, 2, 13 }, + { 4, 5, 4, 4 }, + { 4, 9, 4, 8 }, }; -static const keychron_patch keychron_q3_he_jis_knob_patch = +static const keychron_patch v8_max_ansi_patch = { - KEYCHRON_Q3_HE_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_098_patch_entries), - keychron_group_098_patch_entries + KEYCHRON_V8_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v8_max_ansi_entries), + v8_max_ansi_entries }; - /*---------------------------------------------------------*\ | Geometry Group 99: | -| 0x1231 Q3 Ultra 8K Knob ISO | +| 0x09A0 Keychron V10 Max ANSI | +| 0x09A1 Keychron V10 Max ISO | +| 0x0CA0 Keychron V10 Ultra 8K ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_099_patch_entries[] = +static const keychron_patch_entry v10_max_ansi_entries[] = { - { 63, 3, 12 }, - { 76, 4, 12 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 5, 6, 5, 5 }, + { 5, 9, 5, 8 }, }; -static const keychron_patch keychron_q3_ultra_8k_knob_iso_patch = +static const keychron_patch v10_max_ansi_patch = { - KEYCHRON_Q3_ULTRA_8K_KNOB_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_099_patch_entries), - keychron_group_099_patch_entries + KEYCHRON_V10_MAX_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v10_max_ansi_entries), + v10_max_ansi_entries }; +static const keychron_patch v10_max_iso_patch = +{ + KEYCHRON_V10_MAX_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v10_max_ansi_entries), + v10_max_ansi_entries +}; + +static const keychron_patch v10_ultra_8k_ansi_patch = +{ + KEYCHRON_V10_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v10_max_ansi_entries), + v10_max_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 100: | -| 0x1050 Q5 HE 8K | -| 0x1053 Q5 HE 8K | +| 0x0A00 Keychron K17 Max ANSI RGB | +| 0x0A01 Keychron K17 Max ISO RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_100_patch_entries[] = +static const keychron_patch_entry k17_max_ansi_rgb_entries[] = { - { 84, 4, 12 }, - { 85, 4, 13 }, - { 100, 5, 15 }, + { 1, 14, 1, 13 }, + { 2, 14, 2, 13 }, + { 3, 13, 3, 12 }, }; -static const keychron_patch keychron_q5_he_8k_1050_patch = +static const keychron_patch k17_max_ansi_rgb_patch = { - KEYCHRON_Q5_HE_8K_1050_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_100_patch_entries), - keychron_group_100_patch_entries + KEYCHRON_K17_MAX_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k17_max_ansi_rgb_entries), + k17_max_ansi_rgb_entries }; -static const keychron_patch keychron_q5_he_8k_1053_patch = +static const keychron_patch k17_max_iso_rgb_patch = { - KEYCHRON_Q5_HE_8K_1053_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_100_patch_entries), - keychron_group_100_patch_entries + KEYCHRON_K17_MAX_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k17_max_ansi_rgb_entries), + k17_max_ansi_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 101: | -| 0x1250 Q5 Ultra 8K Knob | -| 0x1253 Q5 Ultra 8K Knob ANSI | +| 0x0A06 Keychron K0 Max RGB | +| 0x0A09 Keychron K0 Max | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_101_patch_entries[] = +static const keychron_patch_entry k0_max_rgb_entries[] = { - { 55, 2, 18 }, + { 5, 4, 4, 4 }, }; -static const keychron_patch keychron_q5_ultra_8k_knob_patch = +static const keychron_patch k0_max_rgb_patch = { - KEYCHRON_Q5_ULTRA_8K_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_101_patch_entries), - keychron_group_101_patch_entries + KEYCHRON_K0_MAX_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k0_max_rgb_entries), + k0_max_rgb_entries }; -static const keychron_patch keychron_q5_ultra_8k_knob_ansi_patch = +static const keychron_patch k0_max_patch = { - KEYCHRON_Q5_ULTRA_8K_KNOB_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_101_patch_entries), - keychron_group_101_patch_entries + KEYCHRON_K0_MAX_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k0_max_rgb_entries), + k0_max_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 102: | -| 0x1060 Q6 HE 8K | -| 0x1063 Q6 HE 8K | +| 0x0A07 Keychron K17 Max JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_102_patch_entries[] = +static const keychron_patch_entry k17_max_jis_rgb_entries[] = { - { 90, 4, 12 }, - { 108, 5, 19 }, + { 2, 14, 2, 13 }, + { 3, 13, 3, 12 }, + { 4, 14, 4, 13 }, + { 5, 8, 5, 9 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, }; -static const keychron_patch keychron_q6_he_8k_1060_patch = +static const keychron_patch k17_max_jis_rgb_patch = { - KEYCHRON_Q6_HE_8K_1060_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_102_patch_entries), - keychron_group_102_patch_entries + KEYCHRON_K17_MAX_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k17_max_jis_rgb_entries), + k17_max_jis_rgb_entries }; -static const keychron_patch keychron_q6_he_8k_1063_patch = -{ - KEYCHRON_Q6_HE_8K_1063_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_102_patch_entries), - keychron_group_102_patch_entries -}; - - /*---------------------------------------------------------*\ | Geometry Group 103: | -| 0x1061 Q6 HE 8K ISO | +| 0x0A12 Keychron K1 Max JIS RGB | +| 0x0A16 Keychron K1 Max JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_103_patch_entries[] = +static const keychron_patch_entry k1_max_jis_rgb_0a12_entries[] = { - { 91, 4, 12 }, - { 109, 5, 19 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 3, 12, 1, 17 }, + { 3, 13, 3, 12 }, + { 4, 15, 4, 16 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, }; -static const keychron_patch keychron_q6_he_8k_iso_patch = +static const keychron_patch k1_max_jis_rgb_0a12_patch = { - KEYCHRON_Q6_HE_8K_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_103_patch_entries), - keychron_group_103_patch_entries + KEYCHRON_K1_MAX_JIS_RGB_0A12_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k1_max_jis_rgb_0a12_entries), + k1_max_jis_rgb_0a12_entries }; +static const keychron_patch k1_max_jis_rgb_0a16_patch = +{ + KEYCHRON_K1_MAX_JIS_RGB_0A16_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k1_max_jis_rgb_0a12_entries), + k1_max_jis_rgb_0a12_entries +}; /*---------------------------------------------------------*\ | Geometry Group 104: | -| 0x1062 Q6 HE 8K JIS | +| 0x0A32 Keychron K3 Max JIS RGB | +| 0x0A39 Keychron K3 Max JIS RGB | +| 0x0A3B Keychron K3 Max JIS RGB | +| 0x0D22 Keychron K2 V3 JIS RGB | +| 0x0D32 Keychron K3 V3 JIS RGB | +| 0x0E42 Keychron K4 HE JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_104_patch_entries[] = +static const keychron_patch_entry k3_max_jis_rgb_0a32_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 15, 0, 16 }, - { 16, 0, 17 }, - { 17, 0, 18 }, - { 18, 0, 19 }, - { 19, 0, 20 }, - { 20, 0, 21 }, - { 112, 5, 20 }, + { 3, 13, 3, 12 }, + { 4, 13, 4, 12 }, + { 4, 14, 4, 13 }, }; -static const keychron_patch keychron_q6_he_8k_jis_patch = +static const keychron_patch k3_max_jis_rgb_0a32_patch = { - KEYCHRON_Q6_HE_8K_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_104_patch_entries), - keychron_group_104_patch_entries + KEYCHRON_K3_MAX_JIS_RGB_0A32_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_max_jis_rgb_0a32_entries), + k3_max_jis_rgb_0a32_entries }; +static const keychron_patch k3_max_jis_rgb_0a39_patch = +{ + KEYCHRON_K3_MAX_JIS_RGB_0A39_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_max_jis_rgb_0a32_entries), + k3_max_jis_rgb_0a32_entries +}; + +static const keychron_patch k3_max_jis_rgb_0a3b_patch = +{ + KEYCHRON_K3_MAX_JIS_RGB_0A3B_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_max_jis_rgb_0a32_entries), + k3_max_jis_rgb_0a32_entries +}; + +static const keychron_patch k2_v3_jis_rgb_patch = +{ + KEYCHRON_K2_V3_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_max_jis_rgb_0a32_entries), + k3_max_jis_rgb_0a32_entries +}; + +static const keychron_patch k3_v3_jis_rgb_patch = +{ + KEYCHRON_K3_V3_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_max_jis_rgb_0a32_entries), + k3_max_jis_rgb_0a32_entries +}; + +static const keychron_patch k4_he_jis_patch = +{ + KEYCHRON_K4_HE_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_max_jis_rgb_0a32_entries), + k3_max_jis_rgb_0a32_entries +}; /*---------------------------------------------------------*\ | Geometry Group 105: | -| 0x0B60 Q6 HE ANSI Knob | -| 0x0B63 Q6 HE ANSI Knob | -| 0x0B64 Keychron Q6 HE Version 2 ANSI Knob Silent | +| 0x0A42 Keychron K4 MAX JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_105_patch_entries[] = +static const keychron_patch_entry k4_max_jis_rgb_entries[] = { - { 90, 4, 12 }, - { 100, 5, 10 }, - { 101, 5, 11 }, - { 102, 5, 12 }, - { 103, 5, 13 }, - { 108, 5, 19 }, + { 1, 13, 1, 14 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 3, 12, 4, 13 }, + { 3, 13, 3, 12 }, + { 3, 14, 3, 15 }, + { 3, 15, 3, 16 }, + { 3, 16, 3, 17 }, + { 3, 17, 0, 18 }, + { 4, 13, 4, 14 }, + { 4, 14, 4, 15 }, + { 4, 15, 4, 16 }, + { 4, 16, 4, 17 }, + { 4, 17, 4, 18 }, + { 5, 8, 1, 13 }, }; -static const keychron_patch keychron_q6_he_ansi_knob_0b60_patch = +static const keychron_patch k4_max_jis_rgb_patch = { - KEYCHRON_Q6_HE_ANSI_KNOB_0B60_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_105_patch_entries), - keychron_group_105_patch_entries + KEYCHRON_K4_MAX_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k4_max_jis_rgb_entries), + k4_max_jis_rgb_entries }; -static const keychron_patch keychron_q6_he_ansi_knob_0b63_patch = -{ - KEYCHRON_Q6_HE_ANSI_KNOB_0B63_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_105_patch_entries), - keychron_group_105_patch_entries -}; - -static const keychron_patch keychron_q6_he_v2_ansi_knob_silent_patch = -{ - KEYCHRON_Q6_HE_V2_ANSI_KNOB_SILENT_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_105_patch_entries), - keychron_group_105_patch_entries -}; - - /*---------------------------------------------------------*\ | Geometry Group 106: | -| 0x0B61 Q6 HE ISO Knob | -| 0x0B65 Q6 HE Version 2 ISO | +| 0x0AA2 Keychron K10 Max JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_106_patch_entries[] = +static const keychron_patch_entry k10_max_jis_rgb_entries[] = { - { 91, 4, 12 }, - { 101, 5, 10 }, - { 102, 5, 11 }, - { 103, 5, 12 }, - { 104, 5, 13 }, - { 109, 5, 19 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 0, 17, 0, 18 }, + { 0, 18, 0, 19 }, + { 0, 19, 0, 21 }, + { 1, 13, 1, 14 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 1, 18, 1, 19 }, + { 1, 19, 1, 20 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 2, 18, 2, 19 }, + { 2, 19, 2, 20 }, + { 3, 13, 0, 20 }, + { 3, 14, 1, 21 }, + { 3, 15, 2, 21 }, + { 3, 16, 4, 21 }, + { 3, 17, 3, 18 }, + { 3, 18, 3, 19 }, + { 3, 19, 3, 20 }, + { 4, 15, 4, 16 }, + { 4, 16, 1, 13 }, + { 4, 17, 4, 18 }, + { 4, 18, 4, 19 }, + { 4, 19, 4, 20 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, + { 5, 19, 5, 20 }, }; -static const keychron_patch keychron_q6_he_iso_knob_patch = +static const keychron_patch k10_max_jis_rgb_patch = { - KEYCHRON_Q6_HE_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_106_patch_entries), - keychron_group_106_patch_entries + KEYCHRON_K10_MAX_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k10_max_jis_rgb_entries), + k10_max_jis_rgb_entries }; -static const keychron_patch keychron_q6_he_version2_iso_patch = -{ - KEYCHRON_Q6_HE_VERSION2_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_106_patch_entries), - keychron_group_106_patch_entries -}; - - /*---------------------------------------------------------*\ | Geometry Group 107: | -| 0x0B62 Q6 HE JIS Knob | +| 0x0AB3 Keychron K11 Max ANSI RGB | +| 0x0AB4 Keychron K11 Max ISO RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_107_patch_entries[] = +static const keychron_patch_entry k11_max_ansi_rgb_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 15, 0, 16 }, - { 16, 0, 17 }, - { 17, 0, 18 }, - { 18, 0, 19 }, - { 19, 0, 20 }, - { 20, 0, 21 }, - { 35, 1, 14 }, - { 36, 1, 15 }, - { 37, 1, 16 }, - { 38, 1, 17 }, - { 39, 1, 18 }, - { 40, 1, 19 }, - { 41, 1, 20 }, - { 42, 1, 21 }, - { 57, 2, 15 }, - { 58, 2, 16 }, - { 59, 2, 17 }, - { 60, 2, 18 }, - { 61, 2, 19 }, - { 62, 2, 20 }, - { 63, 2, 21 }, - { 77, 3, 18 }, - { 78, 3, 19 }, - { 79, 3, 20 }, - { 93, 4, 16 }, - { 94, 4, 18 }, - { 95, 4, 19 }, - { 96, 4, 20 }, - { 97, 4, 21 }, - { 103, 5, 9 }, - { 104, 5, 10 }, - { 105, 5, 11 }, - { 106, 5, 12 }, - { 107, 5, 13 }, - { 108, 5, 15 }, - { 109, 5, 16 }, - { 110, 5, 17 }, - { 111, 5, 18 }, - { 112, 5, 20 }, + { 2, 13, 2, 12 }, + { 3, 13, 3, 12 }, + { 3, 14, 3, 13 }, + { 3, 15, 3, 14 }, + { 4, 2, 4, 3 }, + { 4, 5, 4, 4 }, + { 4, 9, 4, 8 }, + { 4, 12, 4, 11 }, }; -static const keychron_patch keychron_q6_he_jis_knob_patch = +static const keychron_patch k11_max_ansi_rgb_patch = { - KEYCHRON_Q6_HE_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_107_patch_entries), - keychron_group_107_patch_entries + KEYCHRON_K11_MAX_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k11_max_ansi_rgb_entries), + k11_max_ansi_rgb_entries }; +static const keychron_patch k11_max_iso_rgb_patch = +{ + KEYCHRON_K11_MAX_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k11_max_ansi_rgb_entries), + k11_max_ansi_rgb_entries +}; /*---------------------------------------------------------*\ | Geometry Group 108: | -| 0x1260 Q6 Ultra 8K ANSI | +| 0x0AB5 Keychron K11 Max JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_108_patch_entries[] = +static const keychron_patch_entry k11_max_jis_rgb_entries[] = { - { 19, 0, 20 }, - { 40, 1, 20 }, - { 77, 3, 20 }, - { 107, 5, 20 }, + { 2, 6, 2, 7 }, + { 2, 7, 2, 8 }, + { 2, 8, 2, 9 }, + { 2, 9, 2, 10 }, + { 2, 10, 2, 11 }, + { 2, 11, 2, 12 }, + { 3, 2, 3, 1 }, + { 3, 3, 3, 2 }, + { 3, 4, 3, 3 }, + { 3, 5, 3, 4 }, + { 3, 6, 3, 5 }, + { 3, 7, 3, 6 }, + { 3, 8, 3, 7 }, + { 3, 9, 3, 8 }, + { 3, 10, 3, 9 }, + { 3, 11, 3, 10 }, + { 3, 12, 3, 11 }, + { 3, 13, 3, 12 }, + { 3, 14, 3, 13 }, + { 3, 15, 3, 14 }, + { 4, 6, 4, 5 }, + { 4, 7, 4, 6 }, + { 4, 9, 4, 7 }, + { 4, 11, 4, 10 }, }; -static const keychron_patch keychron_q6_ultra_8k_ansi_patch = +static const keychron_patch k11_max_jis_rgb_patch = { - KEYCHRON_Q6_ULTRA_8K_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_108_patch_entries), - keychron_group_108_patch_entries + KEYCHRON_K11_MAX_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k11_max_jis_rgb_entries), + k11_max_jis_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 109: | -| 0x1261 Q6 Ultra 8K Knob ISO | +| 0x0AD2 Keychron K13 Max JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_109_patch_entries[] = +static const keychron_patch_entry k13_max_jis_rgb_entries[] = { - { 20, 0, 20 }, - { 41, 1, 20 }, - { 62, 2, 20 }, - { 96, 4, 20 }, - { 109, 5, 19 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 3, 12, 1, 17 }, + { 3, 13, 3, 12 }, + { 3, 14, 3, 15 }, + { 3, 15, 3, 16 }, + { 3, 16, 3, 17 }, + { 4, 15, 4, 16 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, }; -static const keychron_patch keychron_q6_ultra_8k_knob_iso_patch = +static const keychron_patch k13_max_jis_rgb_patch = { - KEYCHRON_Q6_ULTRA_8K_KNOB_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_109_patch_entries), - keychron_group_109_patch_entries + KEYCHRON_K13_MAX_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k13_max_jis_rgb_entries), + k13_max_jis_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 110: | -| 0x0F10 V1 8K ANSI Knob | +| 0x0AF0 Keychron K15 Max ANSI RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_110_patch_entries[] = +static const keychron_patch_entry k15_max_ansi_rgb_entries[] = { - { 43, 2, 13 }, - { 57, 3, 12 }, - { 70, 4, 12 }, + { 0, 15, 0, 16 }, + { 1, 15, 1, 16 }, + { 2, 15, 2, 16 }, + { 3, 7, 3, 6 }, + { 3, 15, 3, 16 }, + { 5, 3, 5, 4 }, + { 5, 9, 5, 8 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, }; -static const keychron_patch keychron_v1_8k_ansi_knob_patch = +static const keychron_patch k15_max_ansi_rgb_patch = { - KEYCHRON_V1_8K_ANSI_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_110_patch_entries), - keychron_group_110_patch_entries + KEYCHRON_K15_MAX_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k15_max_ansi_rgb_entries), + k15_max_ansi_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 111: | -| 0x0C11 V1 Ultra 8K ISO | +| 0x0AF1 Keychron K15 Max ISO RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_111_patch_entries[] = +static const keychron_patch_entry k15_max_iso_rgb_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 57, 3, 12 }, + { 1, 15, 1, 16 }, + { 2, 15, 2, 16 }, + { 3, 7, 3, 6 }, + { 3, 15, 3, 16 }, + { 5, 3, 5, 4 }, + { 5, 9, 5, 8 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, }; -static const keychron_patch keychron_v1_ultra_8k_iso_patch = +static const keychron_patch k15_max_iso_rgb_patch = { - KEYCHRON_V1_ULTRA_8K_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_111_patch_entries), - keychron_group_111_patch_entries + KEYCHRON_K15_MAX_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k15_max_iso_rgb_entries), + k15_max_iso_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 112: | -| 0x0C12 V1 Ultra 8K JIS | +| 0x0AF2 Keychron K15 Max JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_112_patch_entries[] = +static const keychron_patch_entry k15_max_jis_rgb_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 2, 15, 2, 17 }, + { 3, 7, 3, 6 }, + { 3, 15, 3, 17 }, + { 5, 8, 1, 17 }, + { 5, 9, 5, 8 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 4, 16 }, + { 5, 13, 5, 15 }, + { 5, 14, 5, 16 }, + { 5, 15, 5, 17 }, }; -static const keychron_patch keychron_v1_ultra_8k_jis_patch = +static const keychron_patch k15_max_jis_rgb_patch = { - KEYCHRON_V1_ULTRA_8K_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_112_patch_entries), - keychron_group_112_patch_entries + KEYCHRON_K15_MAX_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k15_max_jis_rgb_entries), + k15_max_jis_rgb_entries }; +/*---------------------------------------------------------*\ +| Geometry Group 113: | +| 0x0B12 Keychron Q1 HE JIS | +\*---------------------------------------------------------*/ +static const keychron_patch_entry q1_he_jis_entries[] = +{ + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 3, 13, 3, 15 }, + { 3, 14, 1, 14 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, +}; + +static const keychron_patch q1_he_jis_patch = +{ + KEYCHRON_Q1_HE_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1_he_jis_entries), + q1_he_jis_entries +}; + +/*---------------------------------------------------------*\ +| Geometry Group 114: | +| 0x0B30 Keychron Q3 HE ANSI | +| 0x0B31 Keychron Q3 HE ISO | +\*---------------------------------------------------------*/ +static const keychron_patch_entry q3_he_ansi_entries[] = +{ + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 3, 13, 3, 12 }, + { 3, 14, 1, 16 }, + { 3, 15, 2, 16 }, + { 4, 13, 4, 12 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, +}; + +static const keychron_patch q3_he_ansi_patch = +{ + KEYCHRON_Q3_HE_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_he_ansi_entries), + q3_he_ansi_entries +}; + +static const keychron_patch q3_he_iso_patch = +{ + KEYCHRON_Q3_HE_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_he_ansi_entries), + q3_he_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 115: | -| 0x0C32 V3 Ultra 8K Knob JIS | +| 0x0B32 Keychron Q3 HE JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_115_patch_entries[] = +static const keychron_patch_entry q3_he_jis_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 15, 0, 16 }, - { 16, 0, 17 }, - { 31, 1, 14 }, - { 32, 1, 15 }, - { 33, 1, 16 }, - { 34, 1, 17 }, - { 49, 2, 15 }, - { 50, 2, 16 }, - { 51, 2, 17 }, - { 78, 4, 16 }, - { 89, 5, 15 }, - { 90, 5, 16 }, - { 91, 5, 17 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 15 }, + { 0, 14, 0, 16 }, + { 0, 15, 0, 17 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 3, 12, 1, 14 }, + { 3, 13, 3, 12 }, + { 3, 14, 1, 17 }, + { 3, 15, 2, 17 }, + { 4, 15, 4, 16 }, + { 5, 8, 5, 9 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 15 }, + { 5, 14, 5, 16 }, + { 5, 15, 5, 17 }, }; -static const keychron_patch keychron_v3_ultra_8k_knob_jis_patch = +static const keychron_patch q3_he_jis_patch = { - KEYCHRON_V3_ULTRA_8K_KNOB_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_115_patch_entries), - keychron_group_115_patch_entries + KEYCHRON_Q3_HE_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_he_jis_entries), + q3_he_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 116: | -| 0x0F50 V5 8K ANSI Knob | -| 0x0F53 V5 8K ANSI Knob | +| 0x0B40 Keychron Q4 HE ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_116_patch_entries[] = +static const keychron_patch_entry q4_he_ansi_entries[] = { - { 5, 0, 7 }, - { 6, 0, 8 }, - { 7, 0, 9 }, - { 8, 0, 10 }, - { 9, 0, 11 }, - { 10, 0, 12 }, - { 11, 0, 13 }, - { 12, 0, 14 }, + { 2, 13, 2, 12 }, + { 4, 9, 4, 10 }, + { 4, 10, 4, 11 }, + { 4, 11, 4, 12 }, }; -static const keychron_patch keychron_v5_8k_ansi_knob_0f50_patch = +static const keychron_patch q4_he_ansi_patch = { - KEYCHRON_V5_8K_ANSI_KNOB_0F50_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_116_patch_entries), - keychron_group_116_patch_entries + KEYCHRON_Q4_HE_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q4_he_ansi_entries), + q4_he_ansi_entries }; -static const keychron_patch keychron_v5_8k_ansi_knob_0f53_patch = -{ - KEYCHRON_V5_8K_ANSI_KNOB_0F53_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_116_patch_entries), - keychron_group_116_patch_entries -}; - - /*---------------------------------------------------------*\ | Geometry Group 117: | -| 0x0F60 V6 8K ANSI Knob | +| 0x0B50 Keychron Q5 HE ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_117_patch_entries[] = +static const keychron_patch_entry q5_he_ansi_entries[] = { - { 78, 2, 20 }, - { 107, 5, 18 }, - { 108, 4, 20 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 0, 17, 0, 18 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 1, 18, 1, 19 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 2, 18, 2, 19 }, + { 3, 15, 3, 16 }, + { 3, 16, 3, 17 }, + { 3, 17, 3, 18 }, + { 4, 12, 4, 11 }, + { 4, 13, 4, 12 }, + { 4, 15, 4, 16 }, + { 4, 16, 4, 17 }, + { 4, 17, 4, 18 }, + { 4, 18, 4, 19 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 17, 5, 18 }, }; -static const keychron_patch keychron_v6_8k_ansi_knob_patch = +static const keychron_patch q5_he_ansi_patch = { - KEYCHRON_V6_8K_ANSI_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_117_patch_entries), - keychron_group_117_patch_entries + KEYCHRON_Q5_HE_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q5_he_ansi_entries), + q5_he_ansi_entries }; - /*---------------------------------------------------------*\ | Geometry Group 118: | -| 0x0C60 V6 Ultra ANSI | +| 0x0B51 Keychron Q5 HE ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_118_patch_entries[] = +static const keychron_patch_entry q5_he_iso_entries[] = { - { 20, 0, 20 }, - { 41, 1, 20 }, - { 62, 2, 20 }, - { 95, 4, 20 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 0, 17, 0, 18 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 1, 18, 1, 19 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 2, 18, 2, 19 }, + { 3, 13, 3, 15 }, + { 3, 15, 3, 16 }, + { 3, 16, 3, 17 }, + { 3, 17, 3, 18 }, + { 4, 12, 4, 11 }, + { 4, 13, 4, 12 }, + { 4, 15, 4, 16 }, + { 4, 16, 4, 17 }, + { 4, 17, 4, 18 }, + { 4, 18, 4, 19 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 17, 5, 18 }, }; -static const keychron_patch keychron_v6_ultra_ansi_patch = +static const keychron_patch q5_he_iso_patch = { - KEYCHRON_V6_ULTRA_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_118_patch_entries), - keychron_group_118_patch_entries + KEYCHRON_Q5_HE_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q5_he_iso_entries), + q5_he_iso_entries }; +/*---------------------------------------------------------*\ +| Geometry Group 119: | +| 0x0B52 Keychron Q5 HE JIS | +\*---------------------------------------------------------*/ +static const keychron_patch_entry q5_he_jis_entries[] = +{ + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 0, 17, 0, 18 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 1, 18, 1, 19 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 2, 18, 2, 19 }, + { 3, 13, 3, 15 }, + { 3, 14, 1, 14 }, + { 3, 15, 3, 16 }, + { 3, 16, 3, 17 }, + { 3, 17, 3, 18 }, + { 4, 14, 4, 15 }, + { 4, 15, 4, 16 }, + { 4, 16, 4, 17 }, + { 4, 17, 4, 18 }, + { 4, 18, 4, 19 }, + { 5, 8, 5, 9 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 13 }, + { 5, 12, 5, 14 }, + { 5, 13, 5, 15 }, + { 5, 14, 5, 16 }, + { 5, 16, 5, 17 }, + { 5, 17, 5, 18 }, +}; + +static const keychron_patch q5_he_jis_patch = +{ + KEYCHRON_Q5_HE_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q5_he_jis_entries), + q5_he_jis_entries +}; /*---------------------------------------------------------*\ | Geometry Group 120: | -| 0x1012 Q1 HE 8K JIS | +| 0x0B60 Keychron Q6 HE ANSI | +| 0x0B61 Keychron Q6 HE ISO | +| 0x0B63 Keychron Q6 HE ANSI | +| 0x0B64 Keychron Q6 HE V2 Silent ANSI | +| 0x0EA4 Keychron K10 HE ISO | +| 0x0EA7 Keychron K10 HE V3 ANSI RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_120_patch_entries[] = +static const keychron_patch_entry q6_he_ansi_0b60_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 45, 2, 15 }, - { 59, 3, 15 }, - { 79, 5, 9 }, - { 80, 5, 10 }, - { 81, 5, 11 }, - { 82, 5, 12 }, - { 83, 5, 13 }, - { 84, 5, 14 }, - { 85, 5, 15 }, + { 4, 13, 4, 12 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 18, 5, 19 }, }; -static const keychron_patch keychron_q1_he_8k_jis_patch = +static const keychron_patch q6_he_ansi_0b60_patch = { - KEYCHRON_Q1_HE_8K_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_120_patch_entries), - keychron_group_120_patch_entries + KEYCHRON_Q6_HE_ANSI_0B60_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_he_ansi_0b60_entries), + q6_he_ansi_0b60_entries }; +static const keychron_patch q6_he_iso_patch = +{ + KEYCHRON_Q6_HE_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_he_ansi_0b60_entries), + q6_he_ansi_0b60_entries +}; + +static const keychron_patch q6_he_ansi_0b63_patch = +{ + KEYCHRON_Q6_HE_ANSI_0B63_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_he_ansi_0b60_entries), + q6_he_ansi_0b60_entries +}; + +static const keychron_patch q6_he_v2_silent_ansi_patch = +{ + KEYCHRON_Q6_HE_V2_SILENT_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_he_ansi_0b60_entries), + q6_he_ansi_0b60_entries +}; + +static const keychron_patch k10_he_iso_0ea4_patch = +{ + KEYCHRON_K10_HE_ISO_0EA4_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_he_ansi_0b60_entries), + q6_he_ansi_0b60_entries +}; + +static const keychron_patch k10_he_v3_ansi_rgb_patch = +{ + KEYCHRON_K10_HE_V3_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_he_ansi_0b60_entries), + q6_he_ansi_0b60_entries +}; /*---------------------------------------------------------*\ | Geometry Group 121: | -| 0x0B11 Q1 HE ISO | +| 0x0B62 Keychron Q6 HE JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_121_patch_entries[] = +static const keychron_patch_entry q6_he_jis_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 29, 1, 15 }, - { 44, 2, 15 }, - { 58, 3, 15 }, - { 70, 4, 11 }, - { 71, 4, 12 }, - { 77, 5, 10 }, - { 78, 5, 11 }, - { 79, 5, 12 }, - { 80, 5, 13 }, - { 81, 5, 14 }, - { 82, 5, 15 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 1, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 0, 17, 0, 18 }, + { 0, 18, 0, 19 }, + { 0, 19, 0, 20 }, + { 0, 20, 0, 21 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 1, 18, 1, 19 }, + { 1, 19, 1, 20 }, + { 1, 20, 1, 21 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 2, 18, 2, 19 }, + { 2, 19, 2, 20 }, + { 2, 20, 2, 21 }, + { 3, 17, 3, 18 }, + { 3, 18, 3, 19 }, + { 3, 19, 3, 20 }, + { 4, 15, 4, 16 }, + { 4, 17, 4, 18 }, + { 4, 18, 4, 19 }, + { 4, 19, 4, 20 }, + { 4, 20, 4, 21 }, + { 5, 8, 5, 9 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, + { 5, 17, 5, 18 }, + { 5, 18, 5, 20 }, }; -static const keychron_patch keychron_q1_he_iso_patch = +static const keychron_patch q6_he_jis_patch = { - KEYCHRON_Q1_HE_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_121_patch_entries), - keychron_group_121_patch_entries + KEYCHRON_Q6_HE_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_he_jis_entries), + q6_he_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 122: | -| 0x0B12 Q1 HE JIS | +| 0x0BC0 Keychron Q12 HE ANSI | +| 0x0BC1 Keychron Q12 HE ISO | +| 0xD014 Keychron Q12 HE | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_122_patch_entries[] = +static const keychron_patch_entry q12_he_ansi_entries[] = { - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 29, 1, 14 }, - { 30, 1, 15 }, - { 45, 2, 15 }, - { 59, 3, 15 }, - { 79, 5, 9 }, - { 80, 5, 10 }, - { 81, 5, 11 }, - { 82, 5, 12 }, - { 83, 5, 13 }, - { 84, 5, 14 }, - { 85, 5, 15 }, + { 3, 17, 3, 18 }, + { 4, 16, 4, 15 }, + { 4, 17, 4, 16 }, + { 4, 18, 4, 17 }, + { 5, 1, 5, 0 }, }; -static const keychron_patch keychron_q1_he_jis_patch = +static const keychron_patch q12_he_ansi_patch = { - KEYCHRON_Q1_HE_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_122_patch_entries), - keychron_group_122_patch_entries + KEYCHRON_Q12_HE_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q12_he_ansi_entries), + q12_he_ansi_entries }; +static const keychron_patch q12_he_iso_patch = +{ + KEYCHRON_Q12_HE_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q12_he_ansi_entries), + q12_he_ansi_entries +}; + +static const keychron_patch q12_he_patch = +{ + KEYCHRON_Q12_HE_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q12_he_ansi_entries), + q12_he_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 123: | -| 0x0B10 Q1 HE Knob | -| 0x0B13 Keychron Q1 HE DAYZ | +| 0x0C00 Keychron V0 Ultra 8K ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_123_patch_entries[] = +static const keychron_patch_entry v0_ultra_8k_ansi_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 29, 1, 15 }, - { 44, 2, 15 }, - { 58, 3, 15 }, - { 69, 4, 11 }, - { 70, 4, 12 }, - { 79, 5, 13 }, - { 80, 5, 14 }, - { 81, 5, 15 }, + { 5, 2, 5, 1 }, }; -static const keychron_patch keychron_q1_he_knob_patch = +static const keychron_patch v0_ultra_8k_ansi_patch = { - KEYCHRON_Q1_HE_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_123_patch_entries), - keychron_group_123_patch_entries + KEYCHRON_V0_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v0_ultra_8k_ansi_entries), + v0_ultra_8k_ansi_entries }; -static const keychron_patch keychron_q1_he_dayz_patch = -{ - KEYCHRON_Q1_HE_DAYZ_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_123_patch_entries), - keychron_group_123_patch_entries -}; - - /*---------------------------------------------------------*\ | Geometry Group 124: | -| 0x0811 Q1 Max ISO Knob | +| 0x0C12 Keychron V1 Ultra 8K JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_124_patch_entries[] = +static const keychron_patch_entry v1_ultra_8k_jis_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 29, 1, 15 }, - { 44, 2, 15 }, - { 58, 3, 15 }, - { 71, 4, 12 }, - { 77, 5, 10 }, - { 78, 5, 11 }, - { 79, 5, 12 }, - { 80, 5, 13 }, - { 81, 5, 14 }, - { 82, 5, 15 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, }; -static const keychron_patch keychron_q1_max_iso_knob_patch = +static const keychron_patch v1_ultra_8k_jis_patch = { - KEYCHRON_Q1_MAX_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_124_patch_entries), - keychron_group_124_patch_entries + KEYCHRON_V1_ULTRA_8K_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v1_ultra_8k_jis_entries), + v1_ultra_8k_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 125: | -| 0x0812 Q1 Max JIS Knob | +| 0x0C32 Keychron V3 Ultra 8K JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_125_patch_entries[] = +static const keychron_patch_entry v3_ultra_8k_jis_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 30, 1, 15 }, - { 45, 2, 15 }, - { 59, 3, 15 }, - { 79, 5, 9 }, - { 80, 5, 10 }, - { 81, 5, 11 }, - { 82, 5, 12 }, - { 83, 5, 13 }, - { 84, 5, 14 }, - { 85, 5, 15 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 3, 13, 1, 14 }, + { 4, 15, 4, 16 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, }; -static const keychron_patch keychron_q1_max_jis_knob_patch = +static const keychron_patch v3_ultra_8k_jis_patch = { - KEYCHRON_Q1_MAX_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_125_patch_entries), - keychron_group_125_patch_entries + KEYCHRON_V3_ULTRA_8K_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v3_ultra_8k_jis_entries), + v3_ultra_8k_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 126: | -| 0x0810 Q1 Max Knob | -| 0x1210 Q1 Ultra 8K ANSI | +| 0x0C60 Keychron V6 Ultra 8K ANSI | +| 0x0C61 Keychron V6 Ultra ISO | +| 0x0C63 Keychron V6 Ultra SE ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_126_patch_entries[] = +static const keychron_patch_entry v6_ultra_8k_ansi_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 29, 1, 15 }, - { 44, 2, 15 }, - { 58, 3, 15 }, - { 70, 4, 12 }, - { 76, 5, 10 }, - { 77, 5, 11 }, - { 78, 5, 12 }, - { 79, 5, 13 }, - { 80, 5, 14 }, - { 81, 5, 15 }, + { 3, 14, 2, 20 }, + { 3, 15, 1, 20 }, + { 3, 16, 0, 20 }, + { 5, 18, 4, 20 }, }; -static const keychron_patch keychron_q1_max_knob_patch = +static const keychron_patch v6_ultra_8k_ansi_patch = { - KEYCHRON_Q1_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_126_patch_entries), - keychron_group_126_patch_entries + KEYCHRON_V6_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v6_ultra_8k_ansi_entries), + v6_ultra_8k_ansi_entries }; -static const keychron_patch keychron_q1_ultra_8k_ansi_patch = +static const keychron_patch v6_ultra_iso_patch = { - KEYCHRON_Q1_ULTRA_8K_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_126_patch_entries), - keychron_group_126_patch_entries + KEYCHRON_V6_ULTRA_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v6_ultra_8k_ansi_entries), + v6_ultra_8k_ansi_entries }; +static const keychron_patch v6_ultra_se_ansi_patch = +{ + KEYCHRON_V6_ULTRA_SE_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v6_ultra_8k_ansi_entries), + v6_ultra_8k_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 127: | -| 0x08A1 Q10 Max ISO knob | +| 0x0C62 Keychron V6 Ultra 8K JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_127_patch_entries[] = +static const keychron_patch_entry v6_ultra_8k_jis_entries[] = { - { 4, 0, 13 }, - { 5, 0, 14 }, - { 6, 0, 15 }, - { 7, 0, 16 }, - { 15, 1, 16 }, - { 22, 2, 16 }, - { 26, 3, 11 }, - { 27, 3, 12 }, - { 28, 3, 13 }, - { 29, 3, 16 }, - { 40, 5, 14 }, - { 41, 5, 15 }, - { 42, 5, 16 }, - { 63, 5, 4 }, - { 64, 5, 5 }, - { 66, 0, 9 }, - { 67, 0, 10 }, - { 68, 0, 11 }, - { 69, 0, 12 }, - { 79, 3, 7 }, - { 80, 3, 8 }, - { 81, 3, 9 }, - { 82, 3, 10 }, - { 89, 5, 10 }, - { 90, 5, 11 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 1, 18, 1, 19 }, + { 1, 19, 1, 20 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 2, 18, 2, 19 }, + { 2, 19, 2, 20 }, + { 3, 13, 1, 14 }, + { 3, 14, 2, 21 }, + { 3, 15, 1, 21 }, + { 3, 16, 0, 20 }, + { 3, 17, 3, 18 }, + { 3, 18, 3, 19 }, + { 3, 19, 3, 20 }, + { 4, 15, 4, 16 }, + { 4, 17, 4, 18 }, + { 4, 18, 4, 19 }, + { 4, 19, 4, 20 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, + { 5, 17, 5, 18 }, + { 5, 18, 4, 21 }, + { 5, 19, 5, 20 }, }; -static const keychron_patch keychron_q10_max_iso_knob_patch = +static const keychron_patch v6_ultra_8k_jis_patch = { - KEYCHRON_Q10_MAX_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_127_patch_entries), - keychron_group_127_patch_entries + KEYCHRON_V6_ULTRA_8K_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v6_ultra_8k_jis_entries), + v6_ultra_8k_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 128: | -| 0x08A2 Q10 MAX JIS | +| 0x0D12 Keychron K1 V6 JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_128_patch_entries[] = +static const keychron_patch_entry k1_v6_jis_rgb_entries[] = { - { 4, 0, 13 }, - { 5, 0, 14 }, - { 6, 0, 15 }, - { 7, 0, 17 }, - { 16, 1, 17 }, - { 20, 2, 13 }, - { 21, 2, 14 }, - { 22, 2, 15 }, - { 23, 2, 17 }, - { 30, 3, 17 }, - { 33, 4, 2 }, - { 37, 4, 16 }, - { 42, 5, 15 }, - { 43, 5, 16 }, - { 44, 5, 17 }, - { 61, 4, 3 }, - { 62, 4, 4 }, - { 63, 4, 5 }, - { 64, 4, 6 }, - { 67, 5, 6 }, - { 68, 0, 9 }, - { 69, 0, 10 }, - { 70, 0, 11 }, - { 71, 0, 12 }, - { 76, 2, 8 }, - { 77, 2, 9 }, - { 78, 2, 10 }, - { 79, 2, 11 }, - { 80, 2, 12 }, + { 0, 1, 1, 14 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 3, 13, 3, 12 }, + { 4, 15, 4, 16 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, }; -static const keychron_patch keychron_q10_max_jis_patch = +static const keychron_patch k1_v6_jis_rgb_patch = { - KEYCHRON_Q10_MAX_JIS_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_128_patch_entries), - keychron_group_128_patch_entries + KEYCHRON_K1_V6_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k1_v6_jis_rgb_entries), + k1_v6_jis_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 129: | -| 0x08A0 Q10 Max Knob | +| 0x0D41 Keychron K4 V3 ISO RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_129_patch_entries[] = +static const keychron_patch_entry k4_v3_iso_rgb_entries[] = { - { 4, 0, 13 }, - { 5, 0, 14 }, - { 6, 0, 15 }, - { 7, 0, 16 }, - { 15, 1, 16 }, - { 19, 2, 13 }, - { 20, 2, 14 }, - { 21, 2, 15 }, - { 22, 2, 16 }, - { 29, 3, 16 }, - { 39, 5, 14 }, - { 40, 5, 15 }, - { 41, 5, 16 }, - { 62, 5, 4 }, - { 63, 5, 5 }, - { 65, 0, 9 }, - { 66, 0, 10 }, - { 67, 0, 11 }, - { 68, 0, 12 }, - { 73, 2, 8 }, - { 74, 2, 9 }, - { 75, 2, 10 }, - { 76, 2, 11 }, - { 77, 2, 12 }, - { 87, 5, 9 }, - { 88, 5, 11 }, - { 89, 5, 12 }, + { 3, 13, 3, 12 }, + { 4, 1, 4, 2 }, + { 4, 2, 4, 3 }, + { 4, 3, 4, 4 }, + { 4, 4, 4, 5 }, + { 4, 5, 4, 6 }, + { 4, 6, 4, 7 }, + { 4, 7, 4, 8 }, + { 4, 8, 4, 9 }, + { 4, 9, 4, 10 }, + { 4, 10, 4, 11 }, + { 4, 11, 4, 12 }, + { 4, 12, 4, 13 }, + { 4, 13, 4, 14 }, + { 5, 15, 5, 14 }, + { 5, 16, 5, 15 }, + { 5, 17, 5, 16 }, }; -static const keychron_patch keychron_q10_max_knob_patch = +static const keychron_patch k4_v3_iso_rgb_patch = { - KEYCHRON_Q10_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_129_patch_entries), - keychron_group_129_patch_entries + KEYCHRON_K4_V3_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k4_v3_iso_rgb_entries), + k4_v3_iso_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 130: | -| 0x08C4 Q12 MAX ISO Knob | +| 0x0D50 Keychron K5 V2 ANSI RGB | +| 0x0D51 Keychron K5 V2 ISO RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_130_patch_entries[] = +static const keychron_patch_entry k5_v2_ansi_rgb_entries[] = { - { 73, 3, 18 }, - { 92, 5, 0 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 3, 12, 0, 19 }, + { 3, 13, 3, 12 }, + { 3, 14, 1, 19 }, + { 3, 15, 2, 19 }, + { 3, 16, 3, 19 }, + { 4, 13, 4, 12 }, + { 4, 14, 4, 19 }, + { 4, 16, 4, 20 }, + { 5, 7, 0, 20 }, + { 5, 8, 1, 20 }, + { 5, 9, 2, 20 }, + { 5, 18, 5, 19 }, }; -static const keychron_patch keychron_q12_max_iso_knob_patch = +static const keychron_patch k5_v2_ansi_rgb_patch = { - KEYCHRON_Q12_MAX_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_130_patch_entries), - keychron_group_130_patch_entries + KEYCHRON_K5_V2_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k5_v2_ansi_rgb_entries), + k5_v2_ansi_rgb_entries }; +static const keychron_patch k5_v2_iso_rgb_patch = +{ + KEYCHRON_K5_V2_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k5_v2_ansi_rgb_entries), + k5_v2_ansi_rgb_entries +}; /*---------------------------------------------------------*\ | Geometry Group 131: | -| 0x08C5 Q12 MAX JIS Knob | +| 0x0D52 Keychron K5 V2 JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_131_patch_entries[] = +static const keychron_patch_entry k5_v2_jis_rgb_entries[] = { - { 13, 0, 14 }, - { 14, 0, 15 }, - { 15, 0, 16 }, - { 16, 0, 17 }, - { 17, 0, 18 }, - { 18, 0, 19 }, - { 38, 1, 19 }, - { 57, 2, 19 }, - { 74, 3, 19 }, - { 79, 4, 5 }, - { 93, 5, 0 }, - { 100, 5, 13 }, - { 101, 5, 14 }, - { 102, 5, 15 }, - { 103, 5, 16 }, - { 104, 5, 17 }, - { 105, 5, 18 }, - { 106, 5, 19 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 11 }, + { 0, 10, 0, 12 }, + { 0, 11, 0, 13 }, + { 0, 12, 0, 14 }, + { 0, 13, 1, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 0, 17, 0, 18 }, + { 0, 18, 0, 19 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 1, 18, 1, 19 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 2, 18, 2, 19 }, + { 3, 12, 0, 20 }, + { 3, 13, 3, 12 }, + { 3, 14, 1, 20 }, + { 3, 15, 2, 20 }, + { 3, 16, 3, 20 }, + { 3, 17, 3, 18 }, + { 3, 18, 3, 19 }, + { 4, 14, 4, 20 }, + { 4, 15, 4, 16 }, + { 4, 16, 4, 21 }, + { 4, 17, 4, 18 }, + { 4, 18, 4, 19 }, + { 5, 5, 2, 21 }, + { 5, 7, 0, 21 }, + { 5, 8, 1, 21 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, + { 5, 17, 5, 18 }, + { 5, 18, 5, 20 }, }; -static const keychron_patch keychron_q12_max_jis_knob_patch = +static const keychron_patch k5_v2_jis_rgb_patch = { - KEYCHRON_Q12_MAX_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_131_patch_entries), - keychron_group_131_patch_entries + KEYCHRON_K5_V2_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k5_v2_jis_rgb_entries), + k5_v2_jis_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 132: | -| 0x08C3 Q12 MAX Knob | +| 0x0D60 Keychron K6X US RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_132_patch_entries[] = +static const keychron_patch_entry k6x_us_rgb_entries[] = { - { 73, 3, 18 }, - { 91, 5, 0 }, + { 0, 14, 0, 13 }, + { 1, 14, 1, 13 }, + { 2, 13, 2, 12 }, }; -static const keychron_patch keychron_q12_max_knob_patch = +static const keychron_patch k6x_us_rgb_patch = { - KEYCHRON_Q12_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_132_patch_entries), - keychron_group_132_patch_entries + KEYCHRON_K6X_US_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k6x_us_rgb_entries), + k6x_us_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 133: | -| 0x08D0 Q13 Max Knob | +| 0x0E20 Keychron K2 HE ANSI RGB | +| 0x0E21 Keychron K2 HE ISO RGB | +| 0x0E30 Keychron K3 HE | +| 0x0E31 Keychron K3 HE ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_133_patch_entries[] = +static const keychron_patch_entry k2_he_ansi_rgb_entries[] = { - { 4, 0, 13 }, - { 5, 0, 14 }, - { 43, 4, 2 }, - { 75, 4, 3 }, - { 76, 4, 4 }, - { 77, 4, 5 }, - { 78, 4, 6 }, - { 79, 5, 3 }, - { 80, 5, 4 }, - { 81, 5, 6 }, - { 82, 0, 9 }, - { 83, 0, 10 }, - { 84, 0, 11 }, - { 85, 0, 12 }, - { 104, 5, 8 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 3, 13, 3, 15 }, + { 4, 13, 4, 14 }, + { 4, 14, 4, 15 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, }; -static const keychron_patch keychron_q13_max_knob_patch = +static const keychron_patch k2_he_ansi_rgb_patch = { - KEYCHRON_Q13_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_133_patch_entries), - keychron_group_133_patch_entries + KEYCHRON_K2_HE_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k2_he_ansi_rgb_entries), + k2_he_ansi_rgb_entries }; +static const keychron_patch k2_he_iso_rgb_patch = +{ + KEYCHRON_K2_HE_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k2_he_ansi_rgb_entries), + k2_he_ansi_rgb_entries +}; + +static const keychron_patch k3_he_patch = +{ + KEYCHRON_K3_HE_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k2_he_ansi_rgb_entries), + k2_he_ansi_rgb_entries +}; + +static const keychron_patch k3_he_iso_patch = +{ + KEYCHRON_K3_HE_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k2_he_ansi_rgb_entries), + k2_he_ansi_rgb_entries +}; /*---------------------------------------------------------*\ | Geometry Group 134: | -| 0x08E0 Q14 Max Knob | +| 0x0E22 Keychron K2 HE JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_134_patch_entries[] = +static const keychron_patch_entry k2_he_jis_rgb_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 18 }, - { 8, 0, 19 }, - { 9, 0, 20 }, - { 10, 0, 21 }, - { 15, 1, 5 }, - { 16, 1, 6 }, - { 17, 1, 7 }, - { 18, 1, 17 }, - { 19, 1, 18 }, - { 20, 1, 19 }, - { 21, 1, 21 }, - { 26, 2, 5 }, - { 27, 2, 6 }, - { 28, 2, 18 }, - { 29, 2, 19 }, - { 30, 2, 20 }, - { 31, 2, 21 }, - { 36, 3, 6 }, - { 37, 3, 17 }, - { 38, 3, 18 }, - { 39, 3, 19 }, - { 40, 3, 21 }, - { 47, 4, 17 }, - { 48, 4, 18 }, - { 49, 4, 20 }, - { 54, 5, 19 }, - { 55, 5, 20 }, - { 56, 5, 21 }, - { 57, 0, 8 }, - { 58, 0, 9 }, - { 59, 0, 10 }, - { 60, 0, 11 }, - { 61, 1, 8 }, - { 62, 1, 9 }, - { 63, 1, 10 }, - { 64, 1, 11 }, - { 65, 2, 9 }, - { 66, 2, 8 }, - { 67, 2, 10 }, - { 68, 2, 11 }, - { 69, 3, 8 }, - { 70, 3, 9 }, - { 71, 3, 10 }, - { 72, 3, 11 }, - { 73, 4, 8 }, - { 74, 4, 9 }, - { 75, 4, 10 }, - { 76, 4, 11 }, - { 77, 5, 8 }, - { 79, 5, 11 }, - { 80, 0, 14 }, - { 81, 0, 15 }, - { 82, 0, 16 }, - { 83, 0, 17 }, - { 84, 1, 13 }, - { 85, 1, 14 }, - { 86, 1, 15 }, - { 87, 1, 16 }, - { 88, 2, 13 }, - { 89, 2, 14 }, - { 90, 2, 15 }, - { 91, 2, 16 }, - { 92, 2, 17 }, - { 93, 3, 13 }, - { 94, 3, 14 }, - { 95, 3, 15 }, - { 96, 3, 16 }, - { 97, 4, 12 }, - { 98, 4, 13 }, - { 99, 4, 14 }, - { 100, 4, 15 }, - { 101, 4, 16 }, - { 103, 5, 15 }, - { 104, 5, 16 }, + { 2, 14, 2, 15 }, + { 3, 13, 3, 15 }, + { 4, 14, 4, 15 }, + { 5, 8, 5, 9 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, }; -static const keychron_patch keychron_q14_max_knob_patch = +static const keychron_patch k2_he_jis_rgb_patch = { - KEYCHRON_Q14_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_134_patch_entries), - keychron_group_134_patch_entries + KEYCHRON_K2_HE_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k2_he_jis_rgb_entries), + k2_he_jis_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 135: | -| 0x08F0 Q15 Max Knob | +| 0x0E23 Keychron K2 HE BR RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_135_patch_entries[] = +static const keychron_patch_entry k2_he_br_rgb_entries[] = { - { 60, 4, 6 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 4, 14, 4, 15 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, }; -static const keychron_patch keychron_q15_max_knob_patch = +static const keychron_patch k2_he_br_rgb_patch = { - KEYCHRON_Q15_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_135_patch_entries), - keychron_group_135_patch_entries + KEYCHRON_K2_HE_BR_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k2_he_br_rgb_entries), + k2_he_br_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 136: | -| 0x0B20 Q2 HE Knob | +| 0x0E25 Keychron K2 HE V2 SILENT ANSI | +| 0x0E26 Keychron K2 HE V2 ISO | +| 0x1014 Keychron Q1 HE Marble 8K ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_136_patch_entries[] = +static const keychron_patch_entry k2_he_v2_silent_ansi_entries[] = { - { 42, 2, 12 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 3, 14, 3, 15 }, + { 4, 13, 4, 14 }, + { 4, 14, 4, 15 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, }; -static const keychron_patch keychron_q2_he_knob_patch = +static const keychron_patch k2_he_v2_silent_ansi_patch = { - KEYCHRON_Q2_HE_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_136_patch_entries), - keychron_group_136_patch_entries + KEYCHRON_K2_HE_V2_SILENT_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k2_he_v2_silent_ansi_entries), + k2_he_v2_silent_ansi_entries }; +static const keychron_patch k2_he_v2_iso_patch = +{ + KEYCHRON_K2_HE_V2_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k2_he_v2_silent_ansi_entries), + k2_he_v2_silent_ansi_entries +}; + +static const keychron_patch q1_he_marble_8k_ansi_patch = +{ + KEYCHRON_Q1_HE_MARBLE_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k2_he_v2_silent_ansi_entries), + k2_he_v2_silent_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 137: | -| 0x0821 Q2 Max ISO Knob | +| 0x0E32 Keychron K3 HE JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_137_patch_entries[] = +static const keychron_patch_entry k3_he_jis_entries[] = { - { 43, 2, 14 }, - { 56, 3, 12 }, - { 57, 3, 13 }, + { 2, 14, 2, 15 }, + { 3, 13, 3, 15 }, + { 5, 8, 5, 9 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, }; -static const keychron_patch keychron_q2_max_iso_knob_patch = +static const keychron_patch k3_he_jis_patch = { - KEYCHRON_Q2_MAX_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_137_patch_entries), - keychron_group_137_patch_entries + KEYCHRON_K3_HE_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k3_he_jis_entries), + k3_he_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 138: | -| 0x0822 Q2 Max JIS Knob | +| 0x0E40 Keychron K4 HE ANSI | +| 0x0E41 Keychron K4 HE ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_138_patch_entries[] = +static const keychron_patch_entry k4_he_ansi_entries[] = { - { 0, 0, 15 }, - { 30, 1, 15 }, - { 44, 2, 15 }, - { 64, 4, 9 }, - { 65, 4, 10 }, - { 66, 4, 11 }, - { 67, 4, 12 }, - { 68, 4, 13 }, - { 69, 4, 14 }, - { 70, 4, 15 }, + { 1, 14, 1, 13 }, + { 3, 13, 3, 12 }, + { 4, 13, 4, 12 }, }; -static const keychron_patch keychron_q2_max_jis_knob_patch = +static const keychron_patch k4_he_ansi_patch = { - KEYCHRON_Q2_MAX_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_138_patch_entries), - keychron_group_138_patch_entries + KEYCHRON_K4_HE_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k4_he_ansi_entries), + k4_he_ansi_entries }; +static const keychron_patch k4_he_iso_patch = +{ + KEYCHRON_K4_HE_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k4_he_ansi_entries), + k4_he_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 139: | -| 0x0820 Q2 Max Knob | +| 0x0E80 Keychron K8 HE ANSI | +| 0x0E81 Keychron K8 HE ISO RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_139_patch_entries[] = +static const keychron_patch_entry k8_he_ansi_entries[] = { - { 14, 0, 15 }, - { 29, 1, 15 }, - { 43, 2, 15 }, - { 55, 3, 12 }, - { 61, 4, 10 }, - { 62, 4, 11 }, - { 63, 4, 12 }, - { 64, 4, 13 }, - { 65, 4, 14 }, - { 66, 4, 15 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 3, 13, 3, 12 }, + { 3, 14, 1, 16 }, + { 3, 15, 2, 16 }, + { 4, 13, 4, 12 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, }; -static const keychron_patch keychron_q2_max_knob_patch = +static const keychron_patch k8_he_ansi_patch = { - KEYCHRON_Q2_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_139_patch_entries), - keychron_group_139_patch_entries + KEYCHRON_K8_HE_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k8_he_ansi_entries), + k8_he_ansi_entries }; +static const keychron_patch k8_he_iso_rgb_patch = +{ + KEYCHRON_K8_HE_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k8_he_ansi_entries), + k8_he_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 140: | -| 0x0B30 Q3 HE | +| 0x0E82 Keychron K8 HE JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_140_patch_entries[] = +static const keychron_patch_entry k8_he_jis_entries[] = { - { 13, 0, 13 }, - { 14, 0, 14 }, - { 15, 0, 15 }, - { 16, 0, 16 }, - { 33, 1, 16 }, - { 50, 2, 16 }, - { 63, 3, 12 }, - { 75, 4, 12 }, - { 85, 5, 14 }, - { 86, 5, 15 }, - { 87, 5, 16 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 11 }, + { 0, 10, 0, 12 }, + { 0, 11, 0, 13 }, + { 0, 12, 0, 14 }, + { 0, 13, 0, 15 }, + { 0, 14, 0, 16 }, + { 0, 15, 0, 17 }, + { 1, 13, 1, 14 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 3, 12, 1, 13 }, + { 3, 13, 3, 12 }, + { 3, 14, 1, 17 }, + { 3, 15, 2, 17 }, + { 4, 15, 4, 16 }, + { 5, 8, 5, 9 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 15 }, + { 5, 14, 5, 16 }, + { 5, 15, 5, 17 }, }; -static const keychron_patch keychron_q3_he_patch = +static const keychron_patch k8_he_jis_patch = { - KEYCHRON_Q3_HE_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_140_patch_entries), - keychron_group_140_patch_entries + KEYCHRON_K8_HE_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k8_he_jis_entries), + k8_he_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 141: | -| 0x0B31 Q3 HE ISO Knob | +| 0x0EA2 Keychron K10 HE JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_141_patch_entries[] = +static const keychron_patch_entry k10_he_jis_entries[] = { - { 13, 0, 13 }, - { 14, 0, 14 }, - { 15, 0, 15 }, - { 16, 0, 16 }, - { 33, 1, 16 }, - { 50, 2, 16 }, - { 63, 3, 12 }, - { 76, 4, 12 }, - { 86, 5, 14 }, - { 87, 5, 15 }, - { 88, 5, 16 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 1, 18, 1, 19 }, + { 1, 19, 1, 20 }, + { 1, 20, 1, 21 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 2, 18, 2, 19 }, + { 2, 19, 2, 20 }, + { 2, 20, 2, 21 }, + { 3, 13, 1, 14 }, + { 3, 17, 3, 18 }, + { 3, 18, 3, 19 }, + { 3, 19, 3, 20 }, + { 4, 15, 4, 16 }, + { 4, 17, 4, 18 }, + { 4, 18, 4, 19 }, + { 4, 19, 4, 20 }, + { 4, 20, 4, 21 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, + { 5, 17, 5, 18 }, + { 5, 19, 5, 20 }, }; -static const keychron_patch keychron_q3_he_iso_knob_patch = +static const keychron_patch k10_he_jis_patch = { - KEYCHRON_Q3_HE_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_141_patch_entries), - keychron_group_141_patch_entries + KEYCHRON_K10_HE_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k10_he_jis_entries), + k10_he_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 142: | -| 0x0831 Q3 Max ISO Knob | -| 0x1031 Q3 HE 8K ISO | +| 0x0EA5 Keychron K10 HE ABNT2 | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_142_patch_entries[] = +static const keychron_patch_entry k10_he_abnt2_entries[] = { - { 76, 4, 12 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 18, 5, 19 }, }; -static const keychron_patch keychron_q3_max_iso_knob_patch = +static const keychron_patch k10_he_abnt2_patch = { - KEYCHRON_Q3_MAX_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_142_patch_entries), - keychron_group_142_patch_entries + KEYCHRON_K10_HE_ABNT2_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k10_he_abnt2_entries), + k10_he_abnt2_entries }; -static const keychron_patch keychron_q3_he_8k_iso_patch = -{ - KEYCHRON_Q3_HE_8K_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_142_patch_entries), - keychron_group_142_patch_entries -}; - - /*---------------------------------------------------------*\ | Geometry Group 143: | -| 0x0832 Q3 Max JIS Knob | +| 0x0F50 Keychron V5 8K ANSI | +| 0x0F51 Keychron V5 8K ISO | +| 0x0F53 Keychron V5 8K ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_143_patch_entries[] = +static const keychron_patch_entry v5_8k_ansi_0f50_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 15, 0, 16 }, - { 16, 0, 17 }, - { 31, 1, 14 }, - { 32, 1, 15 }, - { 33, 1, 16 }, - { 34, 1, 17 }, - { 49, 2, 15 }, - { 50, 2, 16 }, - { 51, 2, 17 }, - { 64, 3, 12 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, }; -static const keychron_patch keychron_q3_max_jis_knob_patch = +static const keychron_patch v5_8k_ansi_0f50_patch = { - KEYCHRON_Q3_MAX_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_143_patch_entries), - keychron_group_143_patch_entries + KEYCHRON_V5_8K_ANSI_0F50_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v5_8k_ansi_0f50_entries), + v5_8k_ansi_0f50_entries }; +static const keychron_patch v5_8k_iso_patch = +{ + KEYCHRON_V5_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v5_8k_ansi_0f50_entries), + v5_8k_ansi_0f50_entries +}; + +static const keychron_patch v5_8k_ansi_0f53_patch = +{ + KEYCHRON_V5_8K_ANSI_0F53_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v5_8k_ansi_0f50_entries), + v5_8k_ansi_0f50_entries +}; /*---------------------------------------------------------*\ | Geometry Group 144: | -| 0x0830 Q3 Max Knob | -| 0x1230 Q3 Ultra | -| 0x1610 K1 Ultra 8K Knob | +| 0x0F60 Keychron V6 8K ANSI | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_144_patch_entries[] = +static const keychron_patch_entry v6_8k_ansi_entries[] = { - { 63, 3, 12 }, - { 75, 4, 12 }, + { 3, 20, 2, 20 }, + { 5, 19, 5, 18 }, + { 5, 20, 4, 20 }, }; -static const keychron_patch keychron_q3_max_knob_patch = +static const keychron_patch v6_8k_ansi_patch = { - KEYCHRON_Q3_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_144_patch_entries), - keychron_group_144_patch_entries + KEYCHRON_V6_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(v6_8k_ansi_entries), + v6_8k_ansi_entries }; -static const keychron_patch keychron_q3_ultra_patch = -{ - KEYCHRON_Q3_ULTRA_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_144_patch_entries), - keychron_group_144_patch_entries -}; - -static const keychron_patch keychron_k1_ultra_8k_knob_patch = -{ - KEYCHRON_K1_ULTRA_8K_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_144_patch_entries), - keychron_group_144_patch_entries -}; - - /*---------------------------------------------------------*\ | Geometry Group 145: | -| 0x0B40 Q4 HE | +| 0x1005 Keychron Q19 HE 8K | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_145_patch_entries[] = +static const keychron_patch_entry q19_he_8k_entries[] = { - { 40, 2, 12 }, - { 57, 4, 10 }, - { 58, 4, 11 }, - { 59, 4, 12 }, + { 3, 12, 3, 11 }, + { 3, 13, 3, 12 }, }; -static const keychron_patch keychron_q4_he_patch = +static const keychron_patch q19_he_8k_patch = { - KEYCHRON_Q4_HE_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_145_patch_entries), - keychron_group_145_patch_entries + KEYCHRON_Q19_HE_8K_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q19_he_8k_entries), + q19_he_8k_entries }; - /*---------------------------------------------------------*\ | Geometry Group 146: | -| 0x0B51 Q5 HE ISO Knob | +| 0x1013 Keychron Q1 HE 8K ABNT2 | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_146_patch_entries[] = +static const keychron_patch_entry q1_he_8k_abnt2_entries[] = { - { 5, 0, 7 }, - { 6, 0, 8 }, - { 7, 0, 9 }, - { 8, 0, 10 }, - { 9, 0, 11 }, - { 10, 0, 12 }, - { 11, 0, 13 }, - { 12, 0, 14 }, - { 13, 0, 15 }, - { 14, 0, 16 }, - { 15, 0, 17 }, - { 16, 0, 18 }, - { 17, 0, 19 }, - { 32, 1, 15 }, - { 33, 1, 16 }, - { 34, 1, 17 }, - { 35, 1, 18 }, - { 36, 1, 19 }, - { 51, 2, 15 }, - { 52, 2, 16 }, - { 53, 2, 17 }, - { 54, 2, 18 }, - { 55, 2, 19 }, - { 69, 3, 15 }, - { 70, 3, 16 }, - { 71, 3, 17 }, - { 72, 3, 18 }, - { 84, 4, 11 }, - { 85, 4, 12 }, - { 87, 4, 16 }, - { 88, 4, 17 }, - { 89, 4, 18 }, - { 90, 4, 19 }, - { 95, 5, 10 }, - { 96, 5, 11 }, - { 97, 5, 12 }, - { 98, 5, 13 }, - { 99, 5, 14 }, - { 100, 5, 15 }, - { 102, 5, 18 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 3, 14, 3, 15 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, }; -static const keychron_patch keychron_q5_he_iso_knob_patch = +static const keychron_patch q1_he_8k_abnt2_patch = { - KEYCHRON_Q5_HE_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_146_patch_entries), - keychron_group_146_patch_entries + KEYCHRON_Q1_HE_8K_ABNT2_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1_he_8k_abnt2_entries), + q1_he_8k_abnt2_entries }; - /*---------------------------------------------------------*\ | Geometry Group 147: | -| 0x0B52 Q5 HE JIS Knob | +| 0x1020 Keychron Q2 HE 8K | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_147_patch_entries[] = +static const keychron_patch_entry q2_he_8k_entries[] = { - { 5, 0, 7 }, - { 6, 0, 8 }, - { 7, 0, 9 }, - { 8, 0, 10 }, - { 9, 0, 11 }, - { 10, 0, 12 }, - { 11, 0, 13 }, - { 12, 0, 14 }, - { 13, 0, 15 }, - { 14, 0, 16 }, - { 15, 0, 17 }, - { 16, 0, 18 }, - { 17, 0, 19 }, - { 32, 1, 14 }, - { 33, 1, 15 }, - { 34, 1, 16 }, - { 35, 1, 17 }, - { 36, 1, 18 }, - { 37, 1, 19 }, - { 52, 2, 15 }, - { 53, 2, 16 }, - { 54, 2, 17 }, - { 55, 2, 18 }, - { 56, 2, 19 }, - { 70, 3, 15 }, - { 71, 3, 16 }, - { 72, 3, 17 }, - { 73, 3, 18 }, - { 87, 4, 15 }, - { 88, 4, 16 }, - { 89, 4, 17 }, - { 90, 4, 18 }, - { 91, 4, 19 }, - { 97, 5, 9 }, - { 98, 5, 10 }, - { 99, 5, 11 }, - { 100, 5, 12 }, - { 101, 5, 14 }, - { 102, 5, 15 }, - { 103, 5, 16 }, - { 104, 5, 17 }, - { 105, 5, 18 }, + { 3, 13, 3, 12 }, + { 3, 14, 3, 13 }, }; -static const keychron_patch keychron_q5_he_jis_knob_patch = +static const keychron_patch q2_he_8k_patch = { - KEYCHRON_Q5_HE_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_147_patch_entries), - keychron_group_147_patch_entries + KEYCHRON_Q2_HE_8K_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q2_he_8k_entries), + q2_he_8k_entries }; - /*---------------------------------------------------------*\ | Geometry Group 148: | -| 0x0B50 Q5 HE Knob | +| 0x1050 Keychron Q5 HE 8K | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_148_patch_entries[] = +static const keychron_patch_entry q5_he_8k_entries[] = { - { 69, 3, 14 }, - { 83, 4, 11 }, - { 84, 4, 12 }, - { 85, 4, 13 }, - { 100, 5, 15 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 0, 17, 0, 18 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 1, 18, 1, 19 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 2, 18, 2, 19 }, + { 3, 14, 3, 15 }, + { 3, 15, 3, 16 }, + { 3, 16, 3, 17 }, + { 3, 17, 3, 18 }, + { 4, 13, 4, 12 }, + { 4, 15, 4, 16 }, + { 4, 16, 4, 17 }, + { 4, 17, 4, 18 }, + { 4, 18, 4, 19 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 17, 5, 18 }, }; -static const keychron_patch keychron_q5_he_knob_patch = +static const keychron_patch q5_he_8k_patch = { - KEYCHRON_Q5_HE_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_148_patch_entries), - keychron_group_148_patch_entries + KEYCHRON_Q5_HE_8K_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q5_he_8k_entries), + q5_he_8k_entries }; - /*---------------------------------------------------------*\ | Geometry Group 149: | -| 0x0851 Q5 Max ISO Knob | +| 0x1062 Keychron Q6 HE 8K JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_149_patch_entries[] = +static const keychron_patch_entry q6_he_8k_jis_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 7 }, - { 6, 0, 8 }, - { 7, 0, 9 }, - { 8, 0, 10 }, - { 9, 0, 11 }, - { 10, 0, 12 }, - { 11, 0, 13 }, - { 12, 0, 14 }, - { 13, 0, 15 }, - { 14, 0, 16 }, - { 15, 0, 17 }, - { 16, 0, 18 }, - { 17, 0, 19 }, - { 32, 1, 15 }, - { 33, 1, 16 }, - { 34, 1, 17 }, - { 35, 1, 18 }, - { 36, 1, 19 }, - { 51, 2, 15 }, - { 52, 2, 16 }, - { 53, 2, 17 }, - { 54, 2, 18 }, - { 55, 2, 19 }, - { 69, 3, 15 }, - { 70, 3, 16 }, - { 71, 3, 17 }, - { 72, 3, 18 }, - { 86, 4, 16 }, - { 87, 4, 17 }, - { 88, 4, 18 }, - { 89, 4, 19 }, - { 90, 4, 14 }, - { 95, 5, 10 }, - { 96, 5, 11 }, - { 97, 5, 12 }, - { 99, 5, 18 }, - { 100, 5, 13 }, - { 101, 5, 14 }, - { 102, 5, 15 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 0, 17, 0, 18 }, + { 0, 18, 0, 19 }, + { 0, 19, 0, 20 }, + { 0, 20, 0, 21 }, + { 5, 19, 5, 20 }, }; -static const keychron_patch keychron_q5_max_iso_knob_patch = +static const keychron_patch q6_he_8k_jis_patch = { - KEYCHRON_Q5_MAX_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_149_patch_entries), - keychron_group_149_patch_entries + KEYCHRON_Q6_HE_8K_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_he_8k_jis_entries), + q6_he_8k_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 150: | -| 0x0852 Q5 Max JIS Knob | +| 0x10F4 Keychron Q16 HE 8K ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_150_patch_entries[] = +static const keychron_patch_entry q16_he_8k_iso_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 7 }, - { 6, 0, 8 }, - { 7, 0, 9 }, - { 8, 0, 10 }, - { 9, 0, 11 }, - { 10, 0, 12 }, - { 11, 0, 13 }, - { 12, 0, 14 }, - { 13, 0, 15 }, - { 14, 0, 16 }, - { 15, 0, 17 }, - { 16, 0, 18 }, - { 17, 0, 19 }, - { 33, 1, 15 }, - { 34, 1, 16 }, - { 35, 1, 17 }, - { 36, 1, 18 }, - { 37, 1, 19 }, - { 52, 2, 15 }, - { 53, 2, 16 }, - { 54, 2, 17 }, - { 55, 2, 18 }, - { 56, 2, 19 }, - { 70, 3, 15 }, - { 71, 3, 16 }, - { 72, 3, 17 }, - { 73, 3, 18 }, - { 87, 4, 16 }, - { 88, 4, 17 }, - { 89, 4, 18 }, - { 90, 4, 19 }, - { 91, 4, 15 }, - { 97, 5, 9 }, - { 98, 5, 10 }, - { 99, 5, 11 }, - { 100, 5, 12 }, - { 101, 5, 17 }, - { 102, 5, 18 }, - { 103, 5, 14 }, - { 104, 5, 15 }, - { 105, 5, 16 }, + { 0, 14, 0, 15 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 3, 13, 3, 14 }, + { 3, 14, 3, 15 }, + { 4, 9, 4, 10 }, + { 4, 10, 4, 11 }, + { 4, 11, 4, 12 }, + { 4, 12, 4, 13 }, + { 4, 13, 4, 14 }, + { 4, 14, 4, 15 }, }; -static const keychron_patch keychron_q5_max_jis_knob_patch = +static const keychron_patch q16_he_8k_iso_patch = { - KEYCHRON_Q5_MAX_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_150_patch_entries), - keychron_group_150_patch_entries + KEYCHRON_Q16_HE_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q16_he_8k_iso_entries), + q16_he_8k_iso_entries }; - /*---------------------------------------------------------*\ | Geometry Group 151: | -| 0x0850 Q5 Max Knob | +| 0x1212 Keychron Q1 Ultra 8K JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_151_patch_entries[] = +static const keychron_patch_entry q1_ultra_8k_jis_entries[] = { - { 1, 0, 2 }, - { 2, 0, 3 }, - { 3, 0, 4 }, - { 4, 0, 5 }, - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 69, 3, 14 }, - { 100, 5, 15 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 1, 14, 1, 15 }, + { 2, 14, 2, 15 }, + { 3, 13, 3, 15 }, + { 3, 14, 1, 14 }, + { 5, 8, 5, 9 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, }; -static const keychron_patch keychron_q5_max_knob_patch = +static const keychron_patch q1_ultra_8k_jis_patch = { - KEYCHRON_Q5_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_151_patch_entries), - keychron_group_151_patch_entries + KEYCHRON_Q1_ULTRA_8K_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q1_ultra_8k_jis_entries), + q1_ultra_8k_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 152: | -| 0x0861 Q6 Max ISO Knob | +| 0x1232 Keychron Q3 Ultra 8K JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_152_patch_entries[] = +static const keychron_patch_entry q3_ultra_8k_jis_rgb_entries[] = { - { 20, 0, 20 }, - { 41, 1, 20 }, - { 62, 2, 20 }, - { 91, 4, 12 }, - { 96, 4, 20 }, - { 108, 5, 17 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 3, 12, 1, 14 }, + { 3, 13, 3, 12 }, + { 4, 15, 4, 16 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, }; -static const keychron_patch keychron_q6_max_iso_knob_patch = +static const keychron_patch q3_ultra_8k_jis_rgb_patch = { - KEYCHRON_Q6_MAX_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_152_patch_entries), - keychron_group_152_patch_entries + KEYCHRON_Q3_ULTRA_8K_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q3_ultra_8k_jis_rgb_entries), + q3_ultra_8k_jis_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 153: | -| 0x0862 Q6 Max JIS Knob | +| 0x1252 Keychron Q5 Ultra 8K JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_153_patch_entries[] = +static const keychron_patch_entry q5_ultra_8k_jis_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 15, 0, 16 }, - { 16, 0, 17 }, - { 17, 0, 18 }, - { 18, 0, 19 }, - { 19, 0, 20 }, - { 20, 0, 21 }, - { 35, 1, 14 }, - { 36, 1, 15 }, - { 37, 1, 16 }, - { 38, 1, 17 }, - { 39, 1, 18 }, - { 40, 1, 19 }, - { 41, 1, 20 }, - { 42, 1, 21 }, - { 57, 2, 15 }, - { 58, 2, 16 }, - { 59, 2, 17 }, - { 60, 2, 18 }, - { 61, 2, 19 }, - { 62, 2, 20 }, - { 63, 2, 21 }, - { 77, 3, 18 }, - { 78, 3, 19 }, - { 79, 3, 20 }, - { 91, 4, 12 }, - { 92, 4, 13 }, - { 93, 4, 16 }, - { 94, 4, 18 }, - { 95, 4, 19 }, - { 96, 4, 20 }, - { 97, 4, 21 }, - { 107, 5, 14 }, - { 108, 5, 15 }, - { 109, 5, 16 }, - { 110, 5, 17 }, - { 112, 5, 20 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 0, 17, 0, 18 }, + { 0, 19, 0, 14 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 1, 18, 1, 19 }, + { 1, 19, 1, 14 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 2, 19, 2, 13 }, + { 3, 14, 3, 15 }, + { 3, 15, 3, 16 }, + { 3, 16, 3, 17 }, + { 3, 17, 3, 18 }, + { 3, 18, 2, 19 }, + { 4, 14, 4, 15 }, + { 4, 15, 4, 16 }, + { 4, 16, 4, 17 }, + { 4, 17, 4, 18 }, + { 4, 18, 4, 19 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, + { 5, 17, 5, 18 }, + { 5, 19, 5, 14 }, }; -static const keychron_patch keychron_q6_max_jis_knob_patch = +static const keychron_patch q5_ultra_8k_jis_patch = { - KEYCHRON_Q6_MAX_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_153_patch_entries), - keychron_group_153_patch_entries + KEYCHRON_Q5_ULTRA_8K_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q5_ultra_8k_jis_entries), + q5_ultra_8k_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 154: | -| 0x0860 Q6 Max Knob | +| 0x1260 Keychron Q6 Ultra 8K ANSI | +| 0x1261 Keychron Q6 Ultra 8K ISO RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_154_patch_entries[] = +static const keychron_patch_entry q6_ultra_8k_ansi_entries[] = { - { 20, 0, 20 }, - { 41, 1, 20 }, - { 62, 2, 20 }, - { 90, 4, 12 }, - { 95, 4, 20 }, - { 107, 5, 17 }, + { 3, 14, 2, 20 }, + { 3, 15, 1, 20 }, + { 3, 16, 0, 20 }, + { 5, 18, 5, 19 }, + { 5, 19, 4, 20 }, }; -static const keychron_patch keychron_q6_max_knob_patch = +static const keychron_patch q6_ultra_8k_ansi_patch = { - KEYCHRON_Q6_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_154_patch_entries), - keychron_group_154_patch_entries + KEYCHRON_Q6_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_ultra_8k_ansi_entries), + q6_ultra_8k_ansi_entries }; +static const keychron_patch q6_ultra_8k_iso_rgb_patch = +{ + KEYCHRON_Q6_ULTRA_8K_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_ultra_8k_ansi_entries), + q6_ultra_8k_ansi_entries +}; /*---------------------------------------------------------*\ | Geometry Group 155: | -| 0x08C0 Q60 Max | +| 0x1262 Keychron Q6 Ultra 8K JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_155_patch_entries[] = +static const keychron_patch_entry q6_ultra_8k_jis_rgb_entries[] = { - { 54, 3, 14 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 0, 17, 0, 18 }, + { 0, 18, 0, 19 }, + { 0, 19, 0, 20 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 1, 18, 1, 19 }, + { 1, 19, 1, 20 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 2, 18, 2, 19 }, + { 2, 19, 2, 20 }, + { 3, 13, 1, 14 }, + { 3, 14, 2, 21 }, + { 3, 15, 1, 21 }, + { 3, 16, 0, 21 }, + { 3, 17, 3, 18 }, + { 3, 18, 3, 19 }, + { 3, 19, 3, 20 }, + { 4, 15, 4, 16 }, + { 4, 17, 4, 18 }, + { 4, 18, 4, 19 }, + { 4, 19, 4, 20 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, + { 5, 17, 5, 18 }, + { 5, 18, 5, 20 }, + { 5, 19, 4, 21 }, }; -static const keychron_patch keychron_q60_max_patch = +static const keychron_patch q6_ultra_8k_jis_rgb_patch = { - KEYCHRON_Q60_MAX_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_155_patch_entries), - keychron_group_155_patch_entries + KEYCHRON_Q6_ULTRA_8K_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q6_ultra_8k_jis_rgb_entries), + q6_ultra_8k_jis_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 156: | -| 0x08B0 Q65 Max Knob | +| 0x12D0 Keychron Q13 Ultra 8K RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_156_patch_entries[] = +static const keychron_patch_entry q13_ultra_8k_rgb_entries[] = { - { 46, 2, 15 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 4, 3, 4, 2 }, + { 4, 4, 4, 3 }, + { 4, 5, 4, 4 }, + { 4, 6, 4, 5 }, + { 4, 7, 4, 6 }, + { 5, 4, 5, 3 }, + { 5, 6, 5, 4 }, + { 5, 7, 5, 6 }, + { 5, 9, 5, 8 }, }; -static const keychron_patch keychron_q65_max_knob_patch = +static const keychron_patch q13_ultra_8k_rgb_patch = { - KEYCHRON_Q65_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_156_patch_entries), - keychron_group_156_patch_entries + KEYCHRON_Q13_ULTRA_8K_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(q13_ultra_8k_rgb_entries), + q13_ultra_8k_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 157: | -| 0x0880 Q8 Max Knob | +| 0x1362 Keychron K6 Ultra ZMK JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_157_patch_entries[] = +static const keychron_patch_entry k6_ultra_zmk_jis_entries[] = { - { 0, 0, 3 }, - { 1, 0, 12 }, - { 2, 0, 16 }, - { 3, 0, 1 }, - { 4, 0, 2 }, - { 5, 0, 13 }, - { 6, 0, 14 }, - { 8, 1, 2 }, - { 9, 1, 13 }, - { 10, 1, 14 }, - { 11, 1, 15 }, - { 12, 1, 16 }, - { 14, 2, 2 }, - { 15, 2, 12 }, - { 16, 2, 13 }, - { 17, 2, 14 }, - { 18, 2, 16 }, - { 21, 3, 13 }, - { 22, 3, 14 }, - { 23, 3, 15 }, - { 26, 4, 14 }, - { 27, 4, 15 }, - { 28, 4, 16 }, - { 29, 0, 4 }, - { 30, 0, 5 }, - { 31, 0, 6 }, - { 32, 0, 7 }, - { 33, 1, 3 }, - { 34, 1, 4 }, - { 35, 1, 5 }, - { 36, 1, 6 }, - { 37, 2, 3 }, - { 38, 2, 4 }, - { 39, 2, 5 }, - { 40, 2, 6 }, - { 45, 4, 3 }, - { 46, 4, 4 }, - { 47, 4, 7 }, - { 48, 0, 8 }, - { 49, 0, 9 }, - { 50, 0, 10 }, - { 51, 0, 11 }, - { 52, 1, 8 }, - { 53, 1, 9 }, - { 54, 1, 10 }, - { 55, 1, 11 }, - { 56, 1, 12 }, - { 57, 2, 8 }, - { 58, 2, 9 }, - { 59, 2, 10 }, - { 60, 2, 11 }, - { 61, 3, 8 }, - { 62, 3, 9 }, - { 63, 3, 10 }, - { 64, 3, 11 }, - { 65, 3, 12 }, - { 66, 4, 8 }, - { 67, 4, 9 }, - { 68, 4, 12 }, + { 1, 14, 1, 15 }, + { 2, 13, 0, 15 }, + { 2, 14, 2, 15 }, + { 3, 14, 3, 15 }, + { 4, 8, 4, 9 }, + { 4, 9, 4, 10 }, + { 4, 10, 4, 11 }, + { 4, 11, 4, 12 }, + { 4, 12, 4, 13 }, + { 4, 13, 4, 14 }, + { 4, 14, 4, 15 }, }; -static const keychron_patch keychron_q8_max_knob_patch = +static const keychron_patch k6_ultra_zmk_jis_patch = { - KEYCHRON_Q8_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_157_patch_entries), - keychron_group_157_patch_entries + KEYCHRON_K6_ULTRA_ZMK_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k6_ultra_zmk_jis_entries), + k6_ultra_zmk_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 158: | -| 0x0C00 V0 Ultra ANSI | +| 0x1432 Keychron R3 JIS RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_158_patch_entries[] = +static const keychron_patch_entry r3_jis_rgb_entries[] = { - { 25, 5, 1 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 3, 13, 1, 14 }, + { 4, 15, 4, 16 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, }; -static const keychron_patch keychron_v0_ultra_ansi_patch = +static const keychron_patch r3_jis_rgb_patch = { - KEYCHRON_V0_ULTRA_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_158_patch_entries), - keychron_group_158_patch_entries + KEYCHRON_R3_JIS_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(r3_jis_rgb_entries), + r3_jis_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 159: | -| 0x0914 V1 Max ISO Knob | +| 0x1450 Keychron R5 ANSI RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_159_patch_entries[] = +static const keychron_patch_entry r5_ansi_rgb_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 43, 2, 13 }, + { 3, 17, 2, 17 }, + { 5, 17, 4, 17 }, }; -static const keychron_patch keychron_v1_max_iso_knob_patch = +static const keychron_patch r5_ansi_rgb_patch = { - KEYCHRON_V1_MAX_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_159_patch_entries), - keychron_group_159_patch_entries + KEYCHRON_R5_ANSI_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(r5_ansi_rgb_entries), + r5_ansi_rgb_entries }; - /*---------------------------------------------------------*\ | Geometry Group 160: | -| 0x0915 V1 Max JIS Knob | +| 0x1460 Keychron R6 ANSI RGB | +| 0x1463 Keychron R6 ANSI RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_160_patch_entries[] = +static const keychron_patch_entry r6_ansi_rgb_1460_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 44, 2, 13 }, + { 3, 13, 3, 12 }, + { 4, 13, 4, 12 }, + { 5, 20, 4, 20 }, }; -static const keychron_patch keychron_v1_max_jis_knob_patch = +static const keychron_patch r6_ansi_rgb_1460_patch = { - KEYCHRON_V1_MAX_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_160_patch_entries), - keychron_group_160_patch_entries + KEYCHRON_R6_ANSI_RGB_1460_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(r6_ansi_rgb_1460_entries), + r6_ansi_rgb_1460_entries }; +static const keychron_patch r6_ansi_rgb_1463_patch = +{ + KEYCHRON_R6_ANSI_RGB_1463_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(r6_ansi_rgb_1460_entries), + r6_ansi_rgb_1460_entries +}; /*---------------------------------------------------------*\ | Geometry Group 161: | -| 0x0913 V1 Max Knob | -| 0x0C10 V1 Ultra 8K | -| 0x0C13 V1 Ultra SE Knob ANSI | -| 0x0C14 V1 Ultra 8K | +| 0x1532 Keychron C3 HE 8K JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_161_patch_entries[] = +static const keychron_patch_entry c3_he_8k_jis_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 57, 3, 12 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 11 }, + { 0, 10, 0, 12 }, + { 0, 11, 0, 13 }, + { 0, 12, 0, 14 }, }; -static const keychron_patch keychron_v1_max_knob_patch = +static const keychron_patch c3_he_8k_jis_patch = { - KEYCHRON_V1_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_161_patch_entries), - keychron_group_161_patch_entries + KEYCHRON_C3_HE_8K_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(c3_he_8k_jis_entries), + c3_he_8k_jis_entries }; -static const keychron_patch keychron_v1_ultra_8k_0c10_patch = +/*---------------------------------------------------------*\ +| Geometry Group 162: | +| 0x1540 Keychron C4 HE 8K ANSI | +| 0x1541 Keychron C4 HE 8K ANSI | +\*---------------------------------------------------------*/ +static const keychron_patch_entry c4_he_8k_ansi_1540_entries[] = { - KEYCHRON_V1_ULTRA_8K_0C10_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_161_patch_entries), - keychron_group_161_patch_entries + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 4, 13, 4, 12 }, + { 5, 18, 5, 19 }, }; -static const keychron_patch keychron_v1_ultra_se_knob_ansi_patch = +static const keychron_patch c4_he_8k_ansi_1540_patch = { - KEYCHRON_V1_ULTRA_SE_KNOB_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_161_patch_entries), - keychron_group_161_patch_entries + KEYCHRON_C4_HE_8K_ANSI_1540_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(c4_he_8k_ansi_1540_entries), + c4_he_8k_ansi_1540_entries }; -static const keychron_patch keychron_v1_ultra_8k_0c14_patch = +static const keychron_patch c4_he_8k_ansi_1541_patch = { - KEYCHRON_V1_ULTRA_8K_0C14_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_161_patch_entries), - keychron_group_161_patch_entries + KEYCHRON_C4_HE_8K_ANSI_1541_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(c4_he_8k_ansi_1540_entries), + c4_he_8k_ansi_1540_entries }; - /*---------------------------------------------------------*\ | Geometry Group 163: | -| 0x09A0 V10 Max US Knob | -| 0x0CA0 V10 Ultra 8K Knob | +| 0x1622 Keychron K2 Ultra 8K JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_163_patch_entries[] = +static const keychron_patch_entry k2_ultra_8k_jis_entries[] = { - { 63, 5, 5 }, + { 3, 13, 3, 12 }, + { 4, 14, 4, 13 }, + { 4, 15, 4, 14 }, }; -static const keychron_patch keychron_v10_max_us_knob_patch = +static const keychron_patch k2_ultra_8k_jis_patch = { - KEYCHRON_V10_MAX_US_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_163_patch_entries), - keychron_group_163_patch_entries + KEYCHRON_K2_ULTRA_8K_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k2_ultra_8k_jis_entries), + k2_ultra_8k_jis_entries }; -static const keychron_patch keychron_v10_ultra_8k_knob_patch = +/*---------------------------------------------------------*\ +| Geometry Group 164: | +| 0x1640 Keychron K4 Ultra 8K RGB | +| 0x1641 Keychron K4 Ultra 8K ISO | +| 0x1643 Keychron K4 Ultra 8K ISO | +\*---------------------------------------------------------*/ +static const keychron_patch_entry k4_ultra_8k_rgb_entries[] = { - KEYCHRON_V10_ULTRA_8K_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_163_patch_entries), - keychron_group_163_patch_entries + { 1, 14, 1, 13 }, + { 3, 18, 2, 18 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 18, 4, 18 }, }; +static const keychron_patch k4_ultra_8k_rgb_patch = +{ + KEYCHRON_K4_ULTRA_8K_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k4_ultra_8k_rgb_entries), + k4_ultra_8k_rgb_entries +}; + +static const keychron_patch k4_ultra_8k_iso_1641_patch = +{ + KEYCHRON_K4_ULTRA_8K_ISO_1641_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k4_ultra_8k_rgb_entries), + k4_ultra_8k_rgb_entries +}; + +static const keychron_patch k4_ultra_8k_iso_1643_patch = +{ + KEYCHRON_K4_ULTRA_8K_ISO_1643_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k4_ultra_8k_rgb_entries), + k4_ultra_8k_rgb_entries +}; + +/*---------------------------------------------------------*\ +| Geometry Group 165: | +| 0x1642 Keychron K4 Ultra 8K JIS | +\*---------------------------------------------------------*/ +static const keychron_patch_entry k4_ultra_8k_jis_entries[] = +{ + { 3, 18, 2, 18 }, + { 5, 8, 5, 9 }, + { 5, 9, 5, 10 }, + { 5, 10, 5, 11 }, + { 5, 11, 5, 12 }, + { 5, 12, 5, 13 }, + { 5, 13, 5, 14 }, + { 5, 14, 5, 15 }, + { 5, 18, 4, 18 }, +}; + +static const keychron_patch k4_ultra_8k_jis_patch = +{ + KEYCHRON_K4_ULTRA_8K_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k4_ultra_8k_jis_entries), + k4_ultra_8k_jis_entries +}; /*---------------------------------------------------------*\ | Geometry Group 166: | -| 0x0F30 V3 8K Knob | +| 0x1650 Keychron K5 Ultra 8K ANSI | +| 0x1651 Keychron K5 Ultra 8K ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_166_patch_entries[] = +static const keychron_patch_entry k5_ultra_8k_ansi_entries[] = { - { 63, 3, 12 }, - { 75, 4, 12 }, + { 3, 13, 3, 12 }, + { 3, 14, 0, 20 }, + { 3, 15, 1, 20 }, + { 3, 16, 2, 20 }, + { 4, 13, 4, 12 }, + { 5, 18, 4, 20 }, }; -static const keychron_patch keychron_v3_8k_knob_patch = +static const keychron_patch k5_ultra_8k_ansi_patch = { - KEYCHRON_V3_8K_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_166_patch_entries), - keychron_group_166_patch_entries + KEYCHRON_K5_ULTRA_8K_ANSI_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k5_ultra_8k_ansi_entries), + k5_ultra_8k_ansi_entries }; +static const keychron_patch k5_ultra_8k_iso_patch = +{ + KEYCHRON_K5_ULTRA_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k5_ultra_8k_ansi_entries), + k5_ultra_8k_ansi_entries +}; + +/*---------------------------------------------------------*\ +| Geometry Group 167: | +| 0x1653 Keychron K5 Ultra 8K ABNT2 | +\*---------------------------------------------------------*/ +static const keychron_patch_entry k5_ultra_8k_abnt2_entries[] = +{ + { 3, 13, 3, 12 }, + { 3, 14, 0, 20 }, + { 3, 15, 1, 20 }, + { 3, 16, 2, 20 }, + { 5, 18, 4, 20 }, +}; + +static const keychron_patch k5_ultra_8k_abnt2_patch = +{ + KEYCHRON_K5_ULTRA_8K_ABNT2_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k5_ultra_8k_abnt2_entries), + k5_ultra_8k_abnt2_entries +}; /*---------------------------------------------------------*\ | Geometry Group 168: | -| 0x0935 V3 Max JIS Knob | +| 0x1681 Keychron K8 Ultra 8K ISO | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_168_patch_entries[] = +static const keychron_patch_entry k8_ultra_8k_iso_entries[] = { - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 15, 0, 16 }, - { 16, 0, 17 }, - { 31, 1, 14 }, - { 32, 1, 15 }, - { 33, 1, 16 }, - { 34, 1, 17 }, - { 49, 2, 15 }, - { 50, 2, 16 }, - { 51, 2, 17 }, - { 78, 4, 16 }, - { 89, 5, 15 }, - { 90, 5, 16 }, - { 91, 5, 17 }, + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 10 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 4, 13, 4, 12 }, }; -static const keychron_patch keychron_v3_max_jis_knob_patch = +static const keychron_patch k8_ultra_8k_iso_patch = { - KEYCHRON_V3_MAX_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_168_patch_entries), - keychron_group_168_patch_entries + KEYCHRON_K8_ULTRA_8K_ISO_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k8_ultra_8k_iso_entries), + k8_ultra_8k_iso_entries }; +/*---------------------------------------------------------*\ +| Geometry Group 169: | +| 0x1682 Keychron K8 Ultra 8K JIS | +\*---------------------------------------------------------*/ +static const keychron_patch_entry k8_ultra_8k_jis_entries[] = +{ + { 0, 1, 0, 2 }, + { 0, 2, 0, 3 }, + { 0, 3, 0, 4 }, + { 0, 4, 0, 5 }, + { 0, 5, 0, 6 }, + { 0, 6, 0, 7 }, + { 0, 7, 0, 8 }, + { 0, 8, 0, 9 }, + { 0, 9, 0, 11 }, + { 0, 10, 0, 12 }, + { 0, 11, 0, 13 }, + { 0, 12, 0, 14 }, + { 0, 13, 0, 15 }, + { 0, 14, 0, 16 }, + { 0, 15, 0, 17 }, + { 0, 16, 1, 17 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 3, 13, 3, 12 }, + { 4, 15, 4, 16 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, +}; + +static const keychron_patch k8_ultra_8k_jis_patch = +{ + KEYCHRON_K8_ULTRA_8K_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k8_ultra_8k_jis_entries), + k8_ultra_8k_jis_entries +}; /*---------------------------------------------------------*\ | Geometry Group 170: | -| 0x0940 V4 Max | +| 0x16A2 Keychron K10 Ultra 8K JIS | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_170_patch_entries[] = +static const keychron_patch_entry k10_ultra_8k_jis_entries[] = { - { 40, 2, 12 }, - { 52, 3, 12 }, + { 0, 10, 0, 11 }, + { 0, 11, 0, 12 }, + { 0, 12, 0, 13 }, + { 0, 13, 0, 14 }, + { 0, 14, 0, 15 }, + { 0, 15, 0, 16 }, + { 0, 16, 0, 17 }, + { 0, 17, 0, 18 }, + { 0, 18, 0, 19 }, + { 0, 19, 0, 20 }, + { 1, 14, 1, 15 }, + { 1, 15, 1, 16 }, + { 1, 16, 1, 17 }, + { 1, 17, 1, 18 }, + { 1, 18, 1, 19 }, + { 1, 19, 1, 20 }, + { 2, 14, 2, 15 }, + { 2, 15, 2, 16 }, + { 2, 16, 2, 17 }, + { 2, 17, 2, 18 }, + { 2, 18, 2, 19 }, + { 2, 19, 2, 20 }, + { 3, 13, 0, 21 }, + { 3, 14, 1, 21 }, + { 3, 15, 2, 21 }, + { 3, 16, 4, 21 }, + { 3, 17, 3, 18 }, + { 3, 18, 3, 19 }, + { 3, 19, 3, 20 }, + { 4, 14, 1, 14 }, + { 4, 15, 4, 16 }, + { 4, 17, 4, 18 }, + { 4, 18, 4, 19 }, + { 4, 19, 4, 20 }, + { 5, 3, 5, 4 }, + { 5, 6, 5, 5 }, + { 5, 14, 5, 15 }, + { 5, 15, 5, 16 }, + { 5, 16, 5, 17 }, + { 5, 19, 5, 20 }, }; -static const keychron_patch keychron_v4_max_patch = +static const keychron_patch k10_ultra_8k_jis_patch = { - KEYCHRON_V4_MAX_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_170_patch_entries), - keychron_group_170_patch_entries + KEYCHRON_K10_ULTRA_8K_JIS_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k10_ultra_8k_jis_entries), + k10_ultra_8k_jis_entries }; - /*---------------------------------------------------------*\ | Geometry Group 171: | -| 0x0941 V4 MAX ISO | +| 0x16A3 Keychron K10 Ultra 8K ISO RGB | \*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_171_patch_entries[] = +static const keychron_patch_entry k10_ultra_8k_iso_rgb_entries[] = { - { 40, 2, 12 }, - { 53, 3, 12 }, + { 3, 14, 1, 20 }, + { 3, 15, 2, 20 }, + { 3, 16, 4, 20 }, + { 4, 13, 4, 12 }, + { 5, 18, 5, 17 }, }; -static const keychron_patch keychron_v4_max_iso_patch = +static const keychron_patch k10_ultra_8k_iso_rgb_patch = { - KEYCHRON_V4_MAX_ISO_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_171_patch_entries), - keychron_group_171_patch_entries -}; - - -/*---------------------------------------------------------*\ -| Geometry Group 172: | -| 0x0951 V5 Max ISO Knob | -\*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_172_patch_entries[] = -{ - { 52, 2, 18 }, -}; - -static const keychron_patch keychron_v5_max_iso_knob_patch = -{ - KEYCHRON_V5_MAX_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_172_patch_entries), - keychron_group_172_patch_entries -}; - - -/*---------------------------------------------------------*\ -| Geometry Group 173: | -| 0x0952 V5 Max JIS Knob | -\*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_173_patch_entries[] = -{ - { 53, 2, 18 }, -}; - -static const keychron_patch keychron_v5_max_jis_knob_patch = -{ - KEYCHRON_V5_MAX_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_173_patch_entries), - keychron_group_173_patch_entries -}; - - -/*---------------------------------------------------------*\ -| Geometry Group 174: | -| 0x0950 V5 Max Knob | -| 0x0C50 V5 Ultra ANSI | -\*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_174_patch_entries[] = -{ - { 52, 2, 18 }, -}; - -static const keychron_patch keychron_v5_max_knob_patch = -{ - KEYCHRON_V5_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_174_patch_entries), - keychron_group_174_patch_entries -}; - -static const keychron_patch keychron_v5_ultra_ansi_patch = -{ - KEYCHRON_V5_ULTRA_ANSI_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_174_patch_entries), - keychron_group_174_patch_entries -}; - - -/*---------------------------------------------------------*\ -| Geometry Group 175: | -| 0x0961 V6 Max ISO Knob | -| 0x0F61 V6 8K ISO Knob | -\*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_175_patch_entries[] = -{ - { 62, 2, 20 }, - { 96, 4, 20 }, -}; - -static const keychron_patch keychron_v6_max_iso_knob_patch = -{ - KEYCHRON_V6_MAX_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_175_patch_entries), - keychron_group_175_patch_entries -}; - -static const keychron_patch keychron_v6_8k_iso_knob_patch = -{ - KEYCHRON_V6_8K_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_175_patch_entries), - keychron_group_175_patch_entries -}; - - -/*---------------------------------------------------------*\ -| Geometry Group 176: | - 0x0962 V6 Max JIS Knob | -\*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_176_patch_entries[] = -{ - { 5, 0, 6 }, - { 6, 0, 7 }, - { 7, 0, 8 }, - { 8, 0, 9 }, - { 9, 0, 10 }, - { 10, 0, 11 }, - { 11, 0, 12 }, - { 12, 0, 13 }, - { 13, 0, 14 }, - { 14, 0, 15 }, - { 15, 0, 16 }, - { 16, 0, 17 }, - { 17, 0, 18 }, - { 18, 0, 19 }, - { 19, 0, 20 }, - { 20, 0, 21 }, - { 35, 1, 14 }, - { 36, 1, 15 }, - { 37, 1, 16 }, - { 38, 1, 17 }, - { 39, 1, 18 }, - { 40, 1, 19 }, - { 41, 1, 20 }, - { 42, 1, 21 }, - { 57, 2, 15 }, - { 58, 2, 16 }, - { 59, 2, 17 }, - { 60, 2, 18 }, - { 61, 2, 19 }, - { 62, 2, 20 }, - { 76, 3, 18 }, - { 77, 3, 19 }, - { 78, 3, 20 }, - { 79, 2, 21 }, - { 93, 4, 16 }, - { 94, 4, 18 }, - { 95, 4, 19 }, - { 96, 4, 20 }, - { 107, 5, 15 }, - { 108, 5, 16 }, - { 109, 5, 17 }, - { 110, 5, 18 }, - { 111, 5, 20 }, - { 112, 4, 21 }, -}; - -static const keychron_patch keychron_v6_max_jis_knob_patch = -{ - KEYCHRON_V6_MAX_JIS_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_176_patch_entries), - keychron_group_176_patch_entries -}; - - -/*---------------------------------------------------------*\ -| Geometry Group 177: | -| 0x0960 V6 Max Knob | -\*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_177_patch_entries[] = -{ - { 62, 2, 20 }, - { 95, 4, 20 }, -}; - -static const keychron_patch keychron_v6_max_knob_patch = -{ - KEYCHRON_V6_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_177_patch_entries), - keychron_group_177_patch_entries -}; - - -/*---------------------------------------------------------*\ -| Geometry Group 178: | -| 0x0981 V8 Max ISO Knob | -\*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_178_patch_entries[] = -{ - { 6, 0, 13 }, - { 17, 2, 13 }, - { 68, 4, 8 }, - { 69, 4, 10 }, -}; - -static const keychron_patch keychron_v8_max_iso_knob_patch = -{ - KEYCHRON_V8_MAX_ISO_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_178_patch_entries), - keychron_group_178_patch_entries -}; - - -/*---------------------------------------------------------*\ -| Geometry Group 179: | -| 0x0980 V8 Max Knob | -\*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_179_patch_entries[] = -{ - { 6, 0, 13 }, - { 17, 2, 13 }, - { 46, 4, 4 }, -}; - -static const keychron_patch keychron_v8_max_knob_patch = -{ - KEYCHRON_V8_MAX_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_179_patch_entries), - keychron_group_179_patch_entries -}; - - -/*---------------------------------------------------------*\ -| Geometry Group 180: | -| 0x0111 Q2 Knob | -\*---------------------------------------------------------*/ -static const keychron_patch_entry keychron_group_180_patch_entries[] = -{ - { 60, 4, 9 }, - { 61, 4, 10 }, - { 62, 4, 11 }, - { 63, 4, 12 }, - { 54, 3, 12 }, - { 55, 3, 13 }, - { 64, 4, 13 }, -}; - -static const keychron_patch keychron_q2_knob_patch = -{ - KEYCHRON_Q2_KNOB_PID, - KEYCHRON_PATCH_ENTRIES_COUNT(keychron_group_180_patch_entries), - keychron_group_180_patch_entries + KEYCHRON_K10_ULTRA_8K_ISO_RGB_PID, + KEYCHRON_PATCH_ENTRIES_COUNT(k10_ultra_8k_iso_rgb_entries), + k10_ultra_8k_iso_rgb_entries }; /*---------------------------------------------------------*\ @@ -5268,218 +6997,400 @@ static const keychron_patch keychron_q2_knob_patch = \*---------------------------------------------------------*/ const keychron_patch* const keychron_patches[] = { - &keychron_c2_pro_8k_patch, - &keychron_c3_pro_8k_jis_patch, - &keychron_k1_max_iso_patch, - &keychron_k1_max_jis_patch, - &keychron_k1_max_patch, - &keychron_k1_v6_jis_patch, - &keychron_k10_max_iso_patch, - &keychron_k10_ultra_8k_iso_16a1_patch, - &keychron_k10_max_jis_patch, - &keychron_k10_max_patch, - &keychron_k10_ultra_8k_patch, - &keychron_k10_ultra_8k_iso_16a3_patch, - &keychron_k10_v2_iso_patch, - &keychron_k10_v2_jis_patch, - &keychron_k10x_patch, - &keychron_k11_max_iso_knob_patch, - &keychron_k11_max_jis_knob_patch, - &keychron_k11_max_knob_patch, - &keychron_k13_max_iso_patch, - &keychron_k13_max_jis_patch, - &keychron_k13_max_patch, - &keychron_k15_max_iso_knob_patch, - &keychron_k15_max_jis_knob_patch, - &keychron_k15_max_knob_patch, - &keychron_k17_max_iso_knob_patch, - &keychron_k17_max_jis_knob_patch, - &keychron_k17_max_knob_patch, - &keychron_k2_he_ansi_patch, - &keychron_k3_he_patch, - &keychron_k2_he_iso_patch, - &keychron_k3_he_iso_patch, - &keychron_k2_he_jis_patch, - &keychron_k2_max_iso_patch, - &keychron_k2_max_jis_patch, - &keychron_k2_max_patch, - &keychron_k3_max_iso_patch, - &keychron_k2_v3_iso_patch, - &keychron_k3_v3_iso_patch, - &keychron_k3_ultra_8k_iso_patch, - &keychron_k3_max_jis_patch, - &keychron_k3_max_patch, - &keychron_k2x_patch, - &keychron_k3x_patch, - &keychron_k3_max_se_patch, - &keychron_k3_ultra_8k_ansi_patch, - &keychron_k4_he_patch, - &keychron_k4_he_iso_patch, - &keychron_k4_he_jis_patch, - &keychron_k4_max_ansi_patch, - &keychron_k4x_jis_patch, - &keychron_k5_max_iso_patch, - &keychron_k5_max_jis_0a52_patch, - &keychron_k5_max_patch, - &keychron_k5x_iso_patch, - &keychron_k6_he_patch, - &keychron_k7_max_iso_patch, - &keychron_k7_max_jis_patch, - &keychron_k7_max_jis_v2_patch, - &keychron_k7_max_patch, - &keychron_k8_he_patch, - &keychron_k8_he_iso_patch, - &keychron_k8_he_jis_rbg_patch, - &keychron_k8_max_jis_patch, - &keychron_k9_max_patch, - &keychron_c0_he_8k_patch, - &keychron_c1_pro_8k_iso_patch, - &keychron_c3_pro_iso_8k_patch, - &keychron_k8_max_iso_patch, - &keychron_k1x_iso_patch, - &keychron_k8_v2_iso_patch, - &keychron_c1_pro_8k_jis_patch, - &keychron_k8_v2_jis_patch, - &keychron_c2_pro_iso_8k_patch, - &keychron_j1_patch, - &keychron_j2_patch, - &keychron_j2_ansi_knob_patch, - &keychron_j2_he_8k_ansi_patch, - &keychron_j3_se_knob_patch, - &keychron_j4_patch, - &keychron_j4_ansi_patch, - &keychron_c1_pro_8k_patch, - &keychron_c3_pro_8k_patch, - &keychron_k8_max_patch, - &keychron_k1x_us_patch, - &keychron_k8_v2_patch, - &keychron_j5_patch, - &keychron_j5_ansi_knob_patch, - &keychron_k0_max_patch, - &keychron_k2_ultra_8k_ansi_patch, - &keychron_k2_ultra_8k_iso_patch, - &keychron_k2_v3_jis_patch, - &keychron_k3_v3_jis_patch, - &keychron_k4_max_iso_patch, - &keychron_k4_max_jis_patch, - &keychron_k4_ultra_8k_patch, - &keychron_k4_v3_iso_patch, - &keychron_k4_v3_patch, - &keychron_k5_max_jis_0a58_patch, - &keychron_k5_ultra_8k_knob_ansi_patch, - &keychron_k5_ultra_8k_knob_iso_patch, - &keychron_k5_v2_patch, - &keychron_k5_v2_jis_patch, - &keychron_k6_he_iso_patch, - &keychron_k8_ultra_8k_ansi_patch, - &keychron_k8_ultra_8k_iso_patch, - &keychron_q1_he_patch, - &keychron_q1_he_ansi_v2_silent_patch, - &keychron_q1_he_8k_ansi_patch, - &keychron_q1_he_8k_iso_knob_patch, - &keychron_q11_ultra_8k_knob_patch, - &keychron_q11_ultra_8k_knob_iso_patch, - &keychron_q12_he_iso_knob_patch, - &keychron_q12_he_knob_patch, - &keychron_q13_max_jis_knob_patch, - &keychron_q13_ultra_8k_knob_patch, - &keychron_q2_he_8k_patch, - &keychron_q3_he_8k_patch, - &keychron_q3_he_8k_ansi_patch, - &keychron_q3_he_8k_jis_patch, - &keychron_q3_he_jis_knob_patch, - &keychron_q3_ultra_8k_knob_iso_patch, - &keychron_q5_he_8k_1050_patch, - &keychron_q5_he_8k_1053_patch, - &keychron_q5_ultra_8k_knob_patch, - &keychron_q5_ultra_8k_knob_ansi_patch, - &keychron_q6_he_8k_1060_patch, - &keychron_q6_he_8k_1063_patch, - &keychron_q6_he_8k_iso_patch, - &keychron_q6_he_8k_jis_patch, - &keychron_q6_he_ansi_knob_0b60_patch, - &keychron_q6_he_ansi_knob_0b63_patch, - &keychron_q6_he_v2_ansi_knob_silent_patch, - &keychron_q6_he_iso_knob_patch, - &keychron_q6_he_version2_iso_patch, - &keychron_q6_he_jis_knob_patch, - &keychron_q6_ultra_8k_ansi_patch, - &keychron_q6_ultra_8k_knob_iso_patch, - &keychron_v1_8k_ansi_knob_patch, - &keychron_v1_ultra_8k_iso_patch, - &keychron_v1_ultra_8k_jis_patch, - &keychron_v3_ultra_8k_knob_jis_patch, - &keychron_v5_8k_ansi_knob_0f50_patch, - &keychron_v5_8k_ansi_knob_0f53_patch, - &keychron_v6_8k_ansi_knob_patch, - &keychron_v6_ultra_ansi_patch, - &keychron_q1_he_8k_jis_patch, - &keychron_q1_he_iso_patch, - &keychron_q1_he_jis_patch, - &keychron_q1_he_knob_patch, - &keychron_q1_he_dayz_patch, - &keychron_q1_max_iso_knob_patch, - &keychron_q1_max_jis_knob_patch, - &keychron_q1_max_knob_patch, - &keychron_q1_ultra_8k_ansi_patch, - &keychron_q10_max_iso_knob_patch, - &keychron_q10_max_jis_patch, - &keychron_q10_max_knob_patch, - &keychron_q12_max_iso_knob_patch, - &keychron_q12_max_jis_knob_patch, - &keychron_q12_max_knob_patch, - &keychron_q13_max_knob_patch, - &keychron_q14_max_knob_patch, - &keychron_q15_max_knob_patch, - &keychron_q2_knob_patch, - &keychron_q2_he_knob_patch, - &keychron_q2_max_iso_knob_patch, - &keychron_q2_max_jis_knob_patch, - &keychron_q2_max_knob_patch, - &keychron_q3_he_patch, - &keychron_q3_he_iso_knob_patch, - &keychron_q3_max_iso_knob_patch, - &keychron_q3_he_8k_iso_patch, - &keychron_q3_max_jis_knob_patch, - &keychron_q3_max_knob_patch, - &keychron_q3_ultra_patch, - &keychron_k1_ultra_8k_knob_patch, - &keychron_q4_he_patch, - &keychron_q5_he_iso_knob_patch, - &keychron_q5_he_jis_knob_patch, - &keychron_q5_he_knob_patch, - &keychron_q5_max_iso_knob_patch, - &keychron_q5_max_jis_knob_patch, - &keychron_q5_max_knob_patch, - &keychron_q6_max_iso_knob_patch, - &keychron_q6_max_jis_knob_patch, - &keychron_q6_max_knob_patch, - &keychron_q60_max_patch, - &keychron_q65_max_knob_patch, - &keychron_q8_max_knob_patch, - &keychron_v0_ultra_ansi_patch, - &keychron_v1_max_iso_knob_patch, - &keychron_v1_max_jis_knob_patch, - &keychron_v1_max_knob_patch, - &keychron_v1_ultra_8k_0c10_patch, - &keychron_v1_ultra_se_knob_ansi_patch, - &keychron_v1_ultra_8k_0c14_patch, - &keychron_v10_max_us_knob_patch, - &keychron_v10_ultra_8k_knob_patch, - &keychron_v3_8k_knob_patch, - &keychron_v3_max_jis_knob_patch, - &keychron_v4_max_patch, - &keychron_v4_max_iso_patch, - &keychron_v5_max_iso_knob_patch, - &keychron_v5_max_jis_knob_patch, - &keychron_v5_max_knob_patch, - &keychron_v5_ultra_ansi_patch, - &keychron_v6_max_iso_knob_patch, - &keychron_v6_8k_iso_knob_patch, - &keychron_v6_max_jis_knob_patch, - &keychron_v6_max_knob_patch, - &keychron_v8_max_iso_knob_patch, - &keychron_v8_max_knob_patch, + &q1v2_ansi_0106_patch, + &q1v2_ansi_0107_patch, + &q1v2_iso_0108_patch, + &q1v2_iso_0109_patch, + &q1v2_jis_010a_patch, + &q1v2_jis_010b_patch, + &q2_ansi_0110_patch, + &q2_ansi_0111_patch, + &q2_iso_0112_patch, + &q2_iso_0113_patch, + &q3_ansi_0120_patch, + &q3_ansi_0121_patch, + &q3_iso_0122_patch, + &q3_iso_0123_patch, + &q4_ansi_patch, + &q4_iso_patch, + &q5_ansi_0150_patch, + &q5_ansi_0151_patch, + &q5_iso_0152_patch, + &q5_iso_0153_patch, + &q6_ansi_0160_patch, + &q6_ansi_0161_patch, + &q6_iso_patch, + &q6_ansi_0163_patch, + &q7_ansi_patch, + &q7_iso_patch, + &q8_ansi_0180_patch, + &q8_ansi_0181_patch, + &q8_iso_0182_patch, + &q8_iso_0183_patch, + &q10_ansi_patch, + &q10_iso_patch, + &q65_ansi_patch, + &q60_ansi_patch, + &q12_ansi_patch, + &q12_iso_patch, + &k1_pro_iso_rgb_patch, + &k2_pro_rgb_patch, + &k3_pro_0230_patch, + &k3_pro_0231_patch, + &k4_pro_ansi_rgb_patch, + &k5_pro_ansi_rgb_patch, + &k5_pro_iso_rgb_patch, + &k6_pro_rgb_patch, + &k6_pro_iso_rgb_patch, + &k7_pro_rgb_patch, + &k7_pro_iso_rgb_patch, + &k8_pro_rgb_patch, + &k8_pro_jis_rgb_patch, + &k10_pro_ansi_rgb_patch, + &k10_pro_iso_rgb_patch, + &k10_pro_jis_rgb_patch, + &v1_ansi_0310_patch, + &v1_ansi_0311_patch, + &v1_iso_0312_patch, + &v1_iso_0313_patch, + &v1_br_patch, + &v2_ansi_0320_patch, + &v2_ansi_0321_patch, + &v2_iso_patch, + &v2_br_patch, + &v3_ansi_0330_patch, + &v3_ansi_0331_patch, + &v3_iso_0332_patch, + &v3_iso_0333_patch, + &v3_br_patch, + &v4_ansi_patch, + &v4_iso_patch, + &v5_ansi_0350_patch, + &v5_ansi_0351_patch, + &v5_iso_0352_patch, + &v5_iso_0353_patch, + &v6_ansi_0360_patch, + &v6_ansi_0361_patch, + &v6_iso_0362_patch, + &v6_iso_0363_patch, + &v6_br_patch, + &v7_ansi_patch, + &v7_iso_patch, + &v8_ansi_patch, + &v10_ansi_patch, + &v10_iso_patch, + &p1_he_dayz_patch, + &p1_he_dayz_iso_patch, + &j1_patch, + &j2_patch, + &j4_patch, + &j5_patch, + &z6_ultra_patch, + &j3_he_ansi_patch, + &p6_ultra_8k_patch, + &j9_patch, + &j9_iso_patch, + &j9_jis_patch, + &j2_he_8k_ansi_patch, + &j8_he_8k_ansi_patch, + &j8_he_8k_iso_patch, + &j8_he_8k_jis_patch, + &keycheron_j7_patch, + &j14_he_patch, + &j12_he_patch, + &z6_75_ultra_8k_rgb_patch, + &j4_he_ansi_patch, + &p6_ultra_8k_iso_patch, + &j15_he_rgb_patch, + &x3_ansi_rgb_patch, + &j9_ultra_8k_ansi_patch, + &j3_se_patch, + &z5_98_ultra_8k_ansi_patch, + &v1_he_ansi_patch, + &c3_pro_8k_ansi_0437_patch, + &c3_max_ansi_patch, + &z11_ultra_l_patch, + &z11_ultra_r_patch, + &j5_he_8k_iso_patch, + &j2_ultra_8k_ansi_patch, + &j5_ultra_8k_patch, + &j11_ultra_8k_044c_patch, + &z5_75_ultra_8k_ansi_patch, + &j3_ultra_8k_ansi_patch, + &j11_ultra_8k_044f_patch, + &j10_ultra_8k_ansi_0451_patch, + &j10_ultra_8k_ansi_0452_patch, + &j5_ansi_patch, + &j2_ansi_patch, + &j4_ansi_rgb_patch, + &j6_ansi_patch, + &ex75_he_8k_ansi_patch, + &ex99_he_8k_ansi_patch, + &keychroon_j3_tmr_045e_patch, + &keychroon_j3_tmr_045f_patch, + &c75_tmr_8k_jis_patch, + &j6_ultra_8k_ansi_patch, + &cm2_h1_ansi_patch, + &j6_full_size_8k_patch, + &j2_tkl_8k_patch, + &j5_ultra_8k_iso_patch, + &j8_patch, + &j6_full_size_8k_iso_patch, + &z7_max_ansi_rgb_patch, + &c1_pro_8k_iso_rgb_patch, + &c1_pro_8k_jis_rgb_patch, + &c1_pro_8k_ansi_rgb_patch, + &c2_pro_8k_ansi_rgb_patch, + &c2_pro_8k_iso_rgb_patch, + &c3_pro_8k_ansi_0530_patch, + &c3_pro_8k_iso_rgb_patch, + &c3_pro_8k_jis_patch, + &c3_pro_8k_abtn2_patch, + &c4_pro_jis_rgb_patch, + &q1_pro_ansi_patch, + &q1_pro_iso_patch, + &q2_pro_ansi_patch, + &q2_pro_iso_patch, + &q3_pro_patch, + &q3_pro_ansi_patch, + &q3_pro_iso_patch, + &q4_pro_ansi_rgb_patch, + &q5_pro_ansi_patch, + &q5_pro_iso_patch, + &q6_pro_ansi_patch, + &q6_pro_iso_patch, + &q8_pro_ansi_patch, + &q10_pro_ansi_patch, + &q1_max_ansi_patch, + &q1_max_iso_patch, + &q1_max_jis_patch, + &q2_max_ansi_patch, + &q2_max_iso_patch, + &q3_max_ansi_patch, + &q3_max_iso_patch, + &q5_max_ansi_patch, + &q5_max_iso_patch, + &q5_max_jis_patch, + &q6_max_ansi_patch, + &q6_max_iso_patch, + &q8_max_ansi_patch, + &q10_max_ansi_patch, + &q10_max_iso_patch, + &q65_max_ansi_patch, + &q11_ultra_8k_r_patch, + &q60_max_patch, + &q12_max_ansi_patch, + &q12_max_iso_patch, + &q13_max_ansi_patch, + &q13_max_jis_patch, + &q14_max_ansi_patch, + &q15_max_ansi_patch, + &v1_max_ansi_patch, + &v2_ultra_iso_patch, + &v1_max_jis_patch, + &v3_max_jis_patch, + &v4_max_ansi_patch, + &v5_max_ansi_patch, + &v5_max_iso_patch, + &v5_max_jis_patch, + &v6_max_ansi_patch, + &v6_max_iso_patch, + &v6_max_jis_patch, + &v8_max_ansi_patch, + &v10_max_ansi_patch, + &v10_max_iso_patch, + &k17_max_ansi_rgb_patch, + &k17_max_iso_rgb_patch, + &k0_max_rgb_patch, + &k17_max_jis_rgb_patch, + &k0_max_patch, + &k1_max_ansi_rgb_patch, + &k1_max_iso_rgb_patch, + &k1_max_jis_rgb_0a12_patch, + &k1_max_jis_rgb_0a16_patch, + &k2_max_ansi_rgb_patch, + &k2_max_iso_rgb_patch, + &k2_max_jis_rgb_patch, + &k3_max_ansi_rgb_0a30_patch, + &k3_max_iso_rgb_patch, + &k3_max_jis_rgb_0a32_patch, + &k3_max_jis_rgb_0a39_patch, + &k3_max_jis_rgb_0a3b_patch, + &k3_max_ansi_rgb_0a3f_patch, + &k4_max_ansi_rgb_patch, + &k4_max_iso_rgb_patch, + &k4_max_jis_rgb_patch, + &k5_max_ansi_rgb_patch, + &k5_max_iso_rgb_patch, + &k5_max_jis_rgb_0a52_patch, + &k5_max_jis_rgb_0a58_patch, + &k7_max_ansi_rgb_patch, + &k7_max_iso_rgb_patch, + &k7_max_v2_jis_rgb_patch, + &k8_max_ansi_rgb_patch, + &k8_max_iso_rgb_patch, + &k9_max_ansi_rgb_patch, + &k10_max_ansi_rgb_patch, + &k10_max_iso_rgb_patch, + &k10_max_jis_rgb_patch, + &k10_max_us_v2_rgb_patch, + &k11_max_ansi_rgb_patch, + &k11_max_iso_rgb_patch, + &k11_max_jis_rgb_patch, + &k13_max_ansi_rgb_patch, + &k13_max_iso_rgb_patch, + &k13_max_jis_rgb_patch, + &k15_max_ansi_rgb_patch, + &k15_max_iso_rgb_patch, + &k15_max_jis_rgb_patch, + &q1_he_ansi_patch, + &q1_he_iso_patch, + &q1_he_jis_patch, + &q1_he_patch, + &q1_he_v2_silent_ansi_patch, + &q2_he_ansi_patch, + &q3_he_ansi_patch, + &q3_he_iso_patch, + &q3_he_jis_patch, + &q4_he_ansi_patch, + &q5_he_ansi_patch, + &q5_he_iso_patch, + &q5_he_jis_patch, + &q6_he_ansi_0b60_patch, + &q6_he_iso_patch, + &q6_he_jis_patch, + &q6_he_ansi_0b63_patch, + &q6_he_v2_silent_ansi_patch, + &q12_he_ansi_patch, + &q12_he_iso_patch, + &v0_ultra_8k_ansi_patch, + &v1_ultra_8k_ansi_patch, + &v1_ultra_8k_iso_patch, + &v1_ultra_8k_jis_patch, + &v1_ultra_se_ansi_patch, + &v1_ultra_8k_patch, + &v3_ultra_8k_jis_patch, + &v5_ultra_8k_ansi_patch, + &v5_ultra_iso_patch, + &v5_ultra_jis_patch, + &v6_ultra_8k_ansi_patch, + &v6_ultra_iso_patch, + &v6_ultra_8k_jis_patch, + &v6_ultra_se_ansi_patch, + &v10_ultra_8k_ansi_patch, + &k1_v6_ansi_rgb_patch, + &k1_v6_iso_rgb_patch, + &k1_v6_jis_rgb_patch, + &k2_v3_ansi_rgb_patch, + &k2_v3_iso_rgb_patch, + &k2_v3_jis_rgb_patch, + &k3_v3_ansi_rgb_patch, + &k3_v3_iso_rgb_patch, + &k3_v3_jis_rgb_patch, + &k3_max_se_rgb_patch, + &k4_v3_ansi_rgb_patch, + &k4_v3_iso_rgb_patch, + &k5_v2_ansi_rgb_patch, + &k5_v2_iso_rgb_patch, + &k5_v2_jis_rgb_patch, + &k6x_us_rgb_patch, + &k8_v2_ansi_rgb_patch, + &k10_v2_ansi_rgb_patch, + &k2_he_ansi_rgb_patch, + &k2_he_iso_rgb_patch, + &k2_he_jis_rgb_patch, + &k2_he_br_rgb_patch, + &k2_he_v2_silent_ansi_patch, + &k2_he_v2_iso_patch, + &k3_he_patch, + &k3_he_iso_patch, + &k3_he_jis_patch, + &k4_he_ansi_patch, + &k4_he_iso_patch, + &k4_he_jis_patch, + &k6_he_ansi_patch, + &k6_he_iso_rgb_patch, + &k8_he_ansi_patch, + &k8_he_iso_rgb_patch, + &k8_he_jis_patch, + &k10_he_jis_patch, + &k10_he_iso_0ea4_patch, + &k10_he_abnt2_patch, + &k10_he_v3_ansi_rgb_patch, + &v1_8k_ansi_patch, + &v1_8k_iso_patch, + &v3_8k_ansi_patch, + &v3_8k_iso_patch, + &v5_8k_ansi_0f50_patch, + &v5_8k_iso_patch, + &v5_8k_ansi_0f53_patch, + &v6_8k_ansi_patch, + &v6_8k_iso_patch, + &q19_he_8k_patch, + &q1_he_8k_ansi_1010_patch, + &q1_he_8k_iso_rgb_patch, + &q1_he_8k_jis_patch, + &q1_he_8k_abnt2_patch, + &q1_he_marble_8k_ansi_patch, + &q1_he_8k_ansi_1016_patch, + &q2_he_8k_patch, + &q3_he_8k_patch, + &q3_he_8k_iso_patch, + &q3_he_8k_jis_patch, + &q5_he_8k_patch, + &q6_he_8k_patch, + &q6_he_8k_iso_patch, + &q6_he_8k_jis_patch, + &q16_he_8k_iso_patch, + &q1_ultra_8k_ansi_1210_patch, + &q1_ultra_8k_iso_patch, + &q1_ultra_8k_jis_patch, + &q1_ultra_8k_ansi_1213_patch, + &q3_ultra_8k_ansi_patch, + &q3_ultra_8k_iso_rgb_patch, + &q3_ultra_8k_jis_rgb_patch, + &q5_ultra_8k_patch, + &q5_ultra_8k_iso_patch, + &q5_ultra_8k_jis_patch, + &q5_ultra_8k_ansi_patch, + &q6_ultra_8k_ansi_patch, + &q6_ultra_8k_iso_rgb_patch, + &q6_ultra_8k_jis_rgb_patch, + &q13_ultra_8k_rgb_patch, + &k6_ultra_zmk_jis_patch, + &k10_pro_ss_zmk_rgb_patch, + &k10_ultra_se_ansi_patch, + &r3_jis_rgb_patch, + &r5_ansi_rgb_patch, + &r6_ansi_rgb_1460_patch, + &r6_ansi_rgb_1463_patch, + &c3_he_8k_jis_patch, + &c4_he_8k_ansi_1540_patch, + &c4_he_8k_ansi_1541_patch, + &k1_ultra_8k_patch, + &k1_ultra_8k_iso_rgb_patch, + &k2_ultra_8k_ansi_patch, + &k2_ultra_8k_iso_patch, + &k2_ultra_8k_jis_patch, + &k3_ultra_8k_ansi_patch, + &k3_ultra_8k_iso_patch, + &k3_ultra_8k_jis_1632_patch, + &k3_ultra_8k_jis_1634_patch, + &k4_ultra_8k_rgb_patch, + &k4_ultra_8k_iso_1641_patch, + &k4_ultra_8k_jis_patch, + &k4_ultra_8k_iso_1643_patch, + &k5_ultra_8k_ansi_patch, + &k5_ultra_8k_iso_patch, + &k5_ultra_8k_abnt2_patch, + &k8_ultra_8k_ansi_patch, + &k8_ultra_8k_iso_patch, + &k8_ultra_8k_jis_patch, + &k10_ultra_8k_rgb_patch, + &k10_ultra_8k_iso_patch, + &k10_ultra_8k_jis_patch, + &k10_ultra_8k_iso_rgb_patch, + &q12_he_patch, }; -const unsigned int KEYCHRON_PATCH_COUNT = sizeof(keychron_patches) / sizeof(keychron_patch*); +const unsigned int KEYCHRON_PATCH_COUNT = sizeof(keychron_patches) / sizeof(keychron_patches[0]); diff --git a/Controllers/QMKController/QMKKeychronController/QMKKeychronController_Devices.h b/Controllers/QMKController/QMKKeychronController/QMKKeychronController_Devices.h index 99bfee4ff..eb96072b3 100644 --- a/Controllers/QMKController/QMKKeychronController/QMKKeychronController_Devices.h +++ b/Controllers/QMKController/QMKKeychronController/QMKKeychronController_Devices.h @@ -1,10 +1,13 @@ /*---------------------------------------------------------*\ -| QMKKechronController_Devices.h | +| QMKKeychronController_Devices.h | | | -| Keychron device IDs and matrix correction data | +| Keychron device IDs and matrix correction data | | | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | +| Generated from canonical PID/name inventory and | +| hand-corrected raw-to-display matrix layout data. | +| | +| This file is part of the OpenRGB project | +| SPDX-License-Identifier: GPL-2.0-or-later | \*---------------------------------------------------------*/ #pragma once @@ -12,245 +15,444 @@ /*---------------------------------------------------------*\ | Keychron product IDs | \*---------------------------------------------------------*/ -#define KEYCHRON_C1_PRO_8K_PID 0x0521 -#define KEYCHRON_C2_PRO_8K_PID 0x0522 -#define KEYCHRON_C3_PRO_8K_JIS_PID 0x0532 -#define KEYCHRON_K1_MAX_PID 0x0A10 -#define KEYCHRON_K1_MAX_ISO_PID 0x0A11 -#define KEYCHRON_K1_MAX_JIS_PID 0x0A12 -#define KEYCHRON_K1_V6_JIS_PID 0x0D12 -#define KEYCHRON_K10_HE_PID 0x0EA0 -#define KEYCHRON_K10_HE_ISO_PID 0x0EA1 -#define KEYCHRON_K10_MAX_PID 0x0AA0 -#define KEYCHRON_K10_MAX_ISO_PID 0x0AA1 -#define KEYCHRON_K10_MAX_JIS_PID 0x0AA2 -#define KEYCHRON_K10_ULTRA_8K_ISO_16A3_PID 0x16A3 -#define KEYCHRON_K10_V2_ISO_PID 0x0DA1 -#define KEYCHRON_K10_V2_JIS_PID 0x0DA2 -#define KEYCHRON_K10X_PID 0x0DA0 -#define KEYCHRON_K11_MAX_ISO_KNOB_PID 0x0AB4 -#define KEYCHRON_K11_MAX_JIS_KNOB_PID 0x0AB5 -#define KEYCHRON_K11_MAX_KNOB_PID 0x0AB3 -#define KEYCHRON_K13_MAX_PID 0x0AD0 -#define KEYCHRON_K13_MAX_ISO_PID 0x0AD1 -#define KEYCHRON_K13_MAX_JIS_PID 0x0AD2 -#define KEYCHRON_K15_MAX_ISO_KNOB_PID 0x0AF1 -#define KEYCHRON_K15_MAX_JIS_KNOB_PID 0x0AF2 -#define KEYCHRON_K15_MAX_KNOB_PID 0x0AF0 -#define KEYCHRON_K17_MAX_ISO_KNOB_PID 0x0A01 -#define KEYCHRON_K17_MAX_JIS_KNOB_PID 0x0A02 -#define KEYCHRON_K17_MAX_KNOB_PID 0x0A00 -#define KEYCHRON_K1X_ISO_PID 0x0D11 -#define KEYCHRON_K1X_US_PID 0x0D10 -#define KEYCHRON_K2_HE_ANSI_PID 0x0E20 -#define KEYCHRON_K2_HE_ISO_PID 0x0E21 -#define KEYCHRON_K2_HE_JIS_PID 0x0E22 -#define KEYCHRON_K2_MAX_PID 0x0A20 -#define KEYCHRON_K2_MAX_ISO_PID 0x0A21 -#define KEYCHRON_K2_MAX_JIS_PID 0x0A22 -#define KEYCHRON_K2_V3_ISO_PID 0x0D21 -#define KEYCHRON_K2X_PID 0x0D20 -#define KEYCHRON_K3_MAX_PID 0x0A30 -#define KEYCHRON_K3_MAX_ISO_PID 0x0A31 -#define KEYCHRON_K3_MAX_JIS_PID 0x0A32 -#define KEYCHRON_K3_V3_ISO_PID 0x0D31 -#define KEYCHRON_K3_V3_JIS_PID 0x0D32 -#define KEYCHRON_K3X_PID 0x0D30 -#define KEYCHRON_K4_HE_PID 0x0E40 -#define KEYCHRON_K4_HE_ISO_PID 0x0E41 -#define KEYCHRON_K4_HE_JIS_PID 0x0E42 -#define KEYCHRON_K4_MAX_ANSI_PID 0x0A40 -#define KEYCHRON_K4X_JIS_PID 0x0D42 -#define KEYCHRON_K5_MAX_PID 0x0A50 -#define KEYCHRON_K5_MAX_ISO_PID 0x0A51 -#define KEYCHRON_K5_MAX_JIS_0A52_PID 0x0A52 -#define KEYCHRON_K5X_ISO_PID 0x0D51 -#define KEYCHRON_K6_HE_PID 0x0E60 -#define KEYCHRON_K7_MAX_PID 0x0A70 -#define KEYCHRON_K7_MAX_ISO_PID 0x0A71 -#define KEYCHRON_K7_MAX_JIS_PID 0x0A72 -#define KEYCHRON_K7_MAX_JIS_V2_PID 0x0A76 -#define KEYCHRON_K8_HE_PID 0x0E80 -#define KEYCHRON_K8_HE_ISO_PID 0x0E81 -#define KEYCHRON_K8_HE_JIS_RBG_PID 0x0E82 -#define KEYCHRON_K8_MAX_PID 0x0A80 -#define KEYCHRON_K8_MAX_ISO_PID 0x0A81 -#define KEYCHRON_K8_MAX_JIS_PID 0x0A82 -#define KEYCHRON_K8_V2_PID 0x0D80 -#define KEYCHRON_K8_V2_JIS_PID 0x0D82 -#define KEYCHRON_K9_MAX_PID 0x0A90 -#define KEYCHRON_C0_HE_8K_PID 0x1500 -#define KEYCHRON_C1_PRO_8K_ISO_PID 0x051D -#define KEYCHRON_C1_PRO_8K_JIS_PID 0x051E -#define KEYCHRON_C2_PRO_ISO_8K_PID 0x052D -#define KEYCHRON_C3_PRO_8K_PID 0x0530 -#define KEYCHRON_C3_PRO_ISO_8K_PID 0x0531 -#define KEYCHRON_J1_PID 0x0405 -#define KEYCHRON_J2_PID 0x0406 -#define KEYCHRON_J2_ANSI_KNOB_PID 0x0456 -#define KEYCHRON_J2_HE_8K_ANSI_PID 0x0416 -#define KEYCHRON_J3_SE_KNOB_PID 0x042D -#define KEYCHRON_J4_PID 0x0408 -#define KEYCHRON_J4_ANSI_PID 0x0457 -#define KEYCHRON_J5_PID 0x0409 -#define KEYCHRON_J5_ANSI_KNOB_PID 0x0453 -#define KEYCHRON_K0_MAX_PID 0x0A06 -#define KEYCHRON_K1_ULTRA_8K_KNOB_PID 0x1610 -#define KEYCHRON_K10_ULTRA_8K_PID 0x16A0 -#define KEYCHRON_K10_ULTRA_8K_ISO_16A1_PID 0x16A1 -#define KEYCHRON_K2_ULTRA_8K_ANSI_PID 0x1620 -#define KEYCHRON_K2_ULTRA_8K_ISO_PID 0x1621 -#define KEYCHRON_K2_V3_JIS_PID 0x0D22 -#define KEYCHRON_K3_HE_PID 0x0E30 -#define KEYCHRON_K3_HE_ISO_PID 0x0E31 -#define KEYCHRON_K3_MAX_SE_PID 0x0D3B -#define KEYCHRON_K3_ULTRA_8K_ANSI_PID 0x1630 -#define KEYCHRON_K3_ULTRA_8K_ISO_PID 0x1631 -#define KEYCHRON_K4_MAX_ISO_PID 0x0A41 -#define KEYCHRON_K4_MAX_JIS_PID 0x0A42 -#define KEYCHRON_K4_ULTRA_8K_PID 0x1640 -#define KEYCHRON_K4_V3_PID 0x0D40 -#define KEYCHRON_K4_V3_ISO_PID 0x0D41 -#define KEYCHRON_K5_MAX_JIS_0A58_PID 0x0A58 -#define KEYCHRON_K5_ULTRA_8K_KNOB_ANSI_PID 0x1650 -#define KEYCHRON_K5_ULTRA_8K_KNOB_ISO_PID 0x1651 -#define KEYCHRON_K5_V2_PID 0x0D50 -#define KEYCHRON_K5_V2_JIS_PID 0x0D52 -#define KEYCHRON_K6_HE_ISO_PID 0x0E61 -#define KEYCHRON_K8_ULTRA_8K_ANSI_PID 0x1680 -#define KEYCHRON_K8_ULTRA_8K_ISO_PID 0x1681 -#define KEYCHRON_K8_V2_ISO_PID 0x0D81 -#define KEYCHRON_Q0_HE_V2_KNOB_PID 0x0B01 -#define KEYCHRON_Q1_HE_PID 0x0B14 -#define KEYCHRON_Q1_HE_8K_ANSI_PID 0x1010 -#define KEYCHRON_Q1_HE_8K_ISO_KNOB_PID 0x1011 -#define KEYCHRON_Q1_HE_ANSI_V2_SILENT_PID 0x0B15 -#define KEYCHRON_Q1_HE_DAYZ_PID 0x0B13 -#define KEYCHRON_Q1_ULTRA_8K_ANSI_PID 0x1210 -#define KEYCHRON_Q11_ULTRA_8K_KNOB_PID 0x12B0 -#define KEYCHRON_Q11_ULTRA_8K_KNOB_ISO_PID 0x12B2 -#define KEYCHRON_Q12_HE_ISO_KNOB_PID 0x0BC1 -#define KEYCHRON_Q12_HE_KNOB_PID 0x0BC0 -#define KEYCHRON_Q13_MAX_JIS_KNOB_PID 0x08D2 -#define KEYCHRON_Q13_ULTRA_8K_KNOB_PID 0x12D0 -#define KEYCHRON_Q16_HE_8K_10F3_PID 0x10F3 -#define KEYCHRON_Q16_HE_8K_10F6_PID 0x10F6 -#define KEYCHRON_Q16_HE_8K_ISO_PID 0x10F4 -#define KEYCHRON_Q2_KNOB_PID 0x0111 -#define KEYCHRON_Q2_HE_8K_PID 0x1020 -#define KEYCHRON_Q3_HE_8K_PID 0x1030 -#define KEYCHRON_Q3_HE_8K_ANSI_PID 0x1033 -#define KEYCHRON_Q3_HE_8K_ISO_PID 0x1031 -#define KEYCHRON_Q3_HE_8K_JIS_PID 0x1032 -#define KEYCHRON_Q3_HE_JIS_KNOB_PID 0x0B32 -#define KEYCHRON_Q3_ULTRA_8K_KNOB_ISO_PID 0x1231 -#define KEYCHRON_Q5_HE_8K_1050_PID 0x1050 -#define KEYCHRON_Q5_HE_8K_1053_PID 0x1053 -#define KEYCHRON_Q5_ULTRA_8K_KNOB_PID 0x1250 -#define KEYCHRON_Q5_ULTRA_8K_KNOB_ANSI_PID 0x1253 -#define KEYCHRON_Q6_HE_8K_1060_PID 0x1060 -#define KEYCHRON_Q6_HE_8K_1063_PID 0x1063 -#define KEYCHRON_Q6_HE_8K_ISO_PID 0x1061 -#define KEYCHRON_Q6_HE_8K_JIS_PID 0x1062 -#define KEYCHRON_Q6_HE_ANSI_KNOB_0B60_PID 0x0B60 -#define KEYCHRON_Q6_HE_ANSI_KNOB_0B63_PID 0x0B63 -#define KEYCHRON_Q6_HE_ISO_KNOB_PID 0x0B61 -#define KEYCHRON_Q6_HE_JIS_KNOB_PID 0x0B62 -#define KEYCHRON_Q6_HE_V2_ANSI_KNOB_SILENT_PID 0x0B64 -#define KEYCHRON_Q6_ULTRA_8K_ANSI_PID 0x1260 -#define KEYCHRON_Q6_ULTRA_8K_KNOB_ISO_PID 0x1261 -#define KEYCHRON_V1_8K_ANSI_KNOB_PID 0x0F10 -#define KEYCHRON_V1_ULTRA_8K_0C10_PID 0x0C10 -#define KEYCHRON_V1_ULTRA_8K_0C14_PID 0x0C14 -#define KEYCHRON_V1_ULTRA_8K_ISO_PID 0x0C11 -#define KEYCHRON_V1_ULTRA_8K_JIS_PID 0x0C12 -#define KEYCHRON_V1_ULTRA_SE_KNOB_ANSI_PID 0x0C13 -#define KEYCHRON_V10_ULTRA_8K_KNOB_PID 0x0CA0 -#define KEYCHRON_V2_MAX_JIS_KNOB_PID 0x0922 -#define KEYCHRON_V2_ULTRA_8K_PID 0x0C20 -#define KEYCHRON_V3_ULTRA_8K_PID 0x0C30 -#define KEYCHRON_V3_ULTRA_8K_KNOB_ISO_PID 0x0C31 -#define KEYCHRON_V3_ULTRA_8K_KNOB_JIS_PID 0x0C32 -#define KEYCHRON_V5_8K_ANSI_KNOB_0F50_PID 0x0F50 -#define KEYCHRON_V5_8K_ANSI_KNOB_0F53_PID 0x0F53 -#define KEYCHRON_V5_ULTRA_ANSI_PID 0x0C50 -#define KEYCHRON_V6_8K_ANSI_KNOB_PID 0x0F60 -#define KEYCHRON_V6_8K_ISO_KNOB_PID 0x0F61 -#define KEYCHRON_V6_ULTRA_ANSI_PID 0x0C60 -#define KEYCHRON_Q0_HE_KNOB_PID 0x0B00 -#define KEYCHRON_Q0_MAX_KNOB_PID 0x0800 -#define KEYCHRON_Q1_HE_8K_JIS_PID 0x1012 -#define KEYCHRON_Q1_HE_ISO_PID 0x0B11 -#define KEYCHRON_Q1_HE_JIS_PID 0x0B12 -#define KEYCHRON_Q1_HE_KNOB_PID 0x0B10 -#define KEYCHRON_Q1_MAX_ISO_KNOB_PID 0x0811 -#define KEYCHRON_Q1_MAX_JIS_KNOB_PID 0x0812 -#define KEYCHRON_Q1_MAX_KNOB_PID 0x0810 -#define KEYCHRON_Q10_MAX_ISO_KNOB_PID 0x08A1 -#define KEYCHRON_Q10_MAX_JIS_PID 0x08A2 -#define KEYCHRON_Q10_MAX_KNOB_PID 0x08A0 -#define KEYCHRON_Q12_MAX_ISO_KNOB_PID 0x08C4 -#define KEYCHRON_Q12_MAX_JIS_KNOB_PID 0x08C5 -#define KEYCHRON_Q12_MAX_KNOB_PID 0x08C3 -#define KEYCHRON_Q13_MAX_KNOB_PID 0x08D0 -#define KEYCHRON_Q14_MAX_KNOB_PID 0x08E0 -#define KEYCHRON_Q15_MAX_KNOB_PID 0x08F0 -#define KEYCHRON_Q2_HE_KNOB_PID 0x0B20 -#define KEYCHRON_Q2_MAX_ISO_KNOB_PID 0x0821 -#define KEYCHRON_Q2_MAX_JIS_KNOB_PID 0x0822 -#define KEYCHRON_Q2_MAX_KNOB_PID 0x0820 -#define KEYCHRON_Q3_HE_PID 0x0B30 -#define KEYCHRON_Q3_HE_ISO_KNOB_PID 0x0B31 -#define KEYCHRON_Q3_MAX_ISO_KNOB_PID 0x0831 -#define KEYCHRON_Q3_MAX_JIS_KNOB_PID 0x0832 -#define KEYCHRON_Q3_MAX_KNOB_PID 0x0830 -#define KEYCHRON_Q3_ULTRA_PID 0x1230 -#define KEYCHRON_Q4_HE_PID 0x0B40 -#define KEYCHRON_Q5_HE_ISO_KNOB_PID 0x0B51 -#define KEYCHRON_Q5_HE_JIS_KNOB_PID 0x0B52 -#define KEYCHRON_Q5_HE_KNOB_PID 0x0B50 -#define KEYCHRON_Q5_MAX_ISO_KNOB_PID 0x0851 -#define KEYCHRON_Q5_MAX_JIS_KNOB_PID 0x0852 -#define KEYCHRON_Q5_MAX_KNOB_PID 0x0850 -#define KEYCHRON_Q6_HE_VERSION2_ISO_PID 0x0B65 -#define KEYCHRON_Q6_MAX_ISO_KNOB_PID 0x0861 -#define KEYCHRON_Q6_MAX_JIS_KNOB_PID 0x0862 -#define KEYCHRON_Q6_MAX_KNOB_PID 0x0860 -#define KEYCHRON_Q60_MAX_PID 0x08C0 -#define KEYCHRON_Q65_MAX_KNOB_PID 0x08B0 -#define KEYCHRON_Q8_MAX_KNOB_PID 0x0880 -#define KEYCHRON_V0_ULTRA_ANSI_PID 0x0C00 -#define KEYCHRON_V1_MAX_ISO_KNOB_PID 0x0914 -#define KEYCHRON_V1_MAX_JIS_KNOB_PID 0x0915 -#define KEYCHRON_V1_MAX_KNOB_PID 0x0913 -#define KEYCHRON_V10_MAX_ISO_KNOB_PID 0x09A1 -#define KEYCHRON_V10_MAX_US_KNOB_PID 0x09A0 -#define KEYCHRON_V2_MAX_ISO_KNOB_PID 0x0921 -#define KEYCHRON_V2_MAX_KNOB_PID 0x0920 -#define KEYCHRON_V3_8K_KNOB_PID 0x0F30 -#define KEYCHRON_V3_MAX_ISO_KNOB_PID 0x0934 -#define KEYCHRON_V3_MAX_JIS_KNOB_PID 0x0935 -#define KEYCHRON_V3_MAX_KNOB_PID 0x0933 -#define KEYCHRON_V4_MAX_PID 0x0940 -#define KEYCHRON_V4_MAX_ISO_PID 0x0941 -#define KEYCHRON_V5_MAX_ISO_KNOB_PID 0x0951 -#define KEYCHRON_V5_MAX_JIS_KNOB_PID 0x0952 -#define KEYCHRON_V5_MAX_KNOB_PID 0x0950 -#define KEYCHRON_V6_MAX_ISO_KNOB_PID 0x0961 -#define KEYCHRON_V6_MAX_JIS_KNOB_PID 0x0962 -#define KEYCHRON_V6_MAX_KNOB_PID 0x0960 -#define KEYCHRON_V8_MAX_ISO_KNOB_PID 0x0981 -#define KEYCHRON_V8_MAX_KNOB_PID 0x0980 +#define KEYCHRON_Q1V2_ANSI_0106_PID 0x0106 +#define KEYCHRON_Q1V2_ANSI_0107_PID 0x0107 +#define KEYCHRON_Q1V2_ISO_0108_PID 0x0108 +#define KEYCHRON_Q1V2_ISO_0109_PID 0x0109 +#define KEYCHRON_Q1V2_JIS_010A_PID 0x010A +#define KEYCHRON_Q1V2_JIS_010B_PID 0x010B +#define KEYCHRON_Q2_ANSI_0110_PID 0x0110 +#define KEYCHRON_Q2_ANSI_0111_PID 0x0111 +#define KEYCHRON_Q2_ISO_0112_PID 0x0112 +#define KEYCHRON_Q2_ISO_0113_PID 0x0113 +#define KEYCHRON_Q3_ANSI_0120_PID 0x0120 +#define KEYCHRON_Q3_ANSI_0121_PID 0x0121 +#define KEYCHRON_Q3_ISO_0122_PID 0x0122 +#define KEYCHRON_Q3_ISO_0123_PID 0x0123 +#define KEYCHRON_Q0_PID 0x0130 +#define KEYCHRON_Q0_PLUS_PID 0x0131 +#define KEYCHRON_Q4_ANSI_PID 0x0140 +#define KEYCHRON_Q4_ISO_PID 0x0142 +#define KEYCHRON_Q5_ANSI_0150_PID 0x0150 +#define KEYCHRON_Q5_ANSI_0151_PID 0x0151 +#define KEYCHRON_Q5_ISO_0152_PID 0x0152 +#define KEYCHRON_Q5_ISO_0153_PID 0x0153 +#define KEYCHRON_Q6_ANSI_0160_PID 0x0160 +#define KEYCHRON_Q6_ANSI_0161_PID 0x0161 +#define KEYCHRON_Q6_ISO_PID 0x0162 +#define KEYCHRON_Q6_ANSI_0163_PID 0x0163 +#define KEYCHRON_Q7_ANSI_PID 0x0170 +#define KEYCHRON_Q7_ISO_PID 0x0172 +#define KEYCHRON_Q8_ANSI_0180_PID 0x0180 +#define KEYCHRON_Q8_ANSI_0181_PID 0x0181 +#define KEYCHRON_Q8_ISO_0182_PID 0x0182 +#define KEYCHRON_Q8_ISO_0183_PID 0x0183 +#define KEYCHRON_Q10_ANSI_PID 0x01A1 +#define KEYCHRON_Q10_ISO_PID 0x01A3 +#define KEYCHRON_Q65_ANSI_PID 0x01B1 +#define KEYCHRON_Q60_ANSI_PID 0x01C0 +#define KEYCHRON_Q12_ANSI_PID 0x01D1 +#define KEYCHRON_Q12_ISO_PID 0x01D3 +#define KEYCHRON_K1_PRO_ISO_RGB_PID 0x0211 +#define KEYCHRON_K2_PRO_RGB_PID 0x0220 +#define KEYCHRON_K3_PRO_0230_PID 0x0230 +#define KEYCHRON_K3_PRO_0231_PID 0x0231 +#define KEYCHRON_K4_PRO_ANSI_RGB_PID 0x0240 +#define KEYCHRON_K5_PRO_ANSI_RGB_PID 0x0250 +#define KEYCHRON_K5_PRO_ISO_RGB_PID 0x0251 +#define KEYCHRON_K6_PRO_RGB_PID 0x0260 +#define KEYCHRON_K6_PRO_ISO_RGB_PID 0x0261 +#define KEYCHRON_K7_PRO_RGB_PID 0x0270 +#define KEYCHRON_K7_PRO_ISO_RGB_PID 0x0271 +#define KEYCHRON_K8_PRO_RGB_PID 0x0280 +#define KEYCHRON_K8_PRO_JIS_RGB_PID 0x0282 +#define KEYCHRON_K10_PRO_ANSI_RGB_PID 0x02A0 +#define KEYCHRON_K10_PRO_ISO_RGB_PID 0x02A1 +#define KEYCHRON_K10_PRO_JIS_RGB_PID 0x02A2 +#define KEYCHRON_V1_ANSI_0310_PID 0x0310 +#define KEYCHRON_V1_ANSI_0311_PID 0x0311 +#define KEYCHRON_V1_ISO_0312_PID 0x0312 +#define KEYCHRON_V1_ISO_0313_PID 0x0313 +#define KEYCHRON_V1_BR_PID 0x0317 +#define KEYCHRON_V2_ANSI_0320_PID 0x0320 +#define KEYCHRON_V2_ANSI_0321_PID 0x0321 +#define KEYCHRON_V2_ISO_PID 0x0323 +#define KEYCHRON_V2_BR_PID 0x0327 +#define KEYCHRON_V3_ANSI_0330_PID 0x0330 +#define KEYCHRON_V3_ANSI_0331_PID 0x0331 +#define KEYCHRON_V3_ISO_0332_PID 0x0332 +#define KEYCHRON_V3_ISO_0333_PID 0x0333 +#define KEYCHRON_V3_BR_PID 0x0337 +#define KEYCHRON_V4_ANSI_PID 0x0340 +#define KEYCHRON_V4_ISO_PID 0x0342 +#define KEYCHRON_V5_ANSI_0350_PID 0x0350 +#define KEYCHRON_V5_ANSI_0351_PID 0x0351 +#define KEYCHRON_V5_ISO_0352_PID 0x0352 +#define KEYCHRON_V5_ISO_0353_PID 0x0353 +#define KEYCHRON_V6_ANSI_0360_PID 0x0360 +#define KEYCHRON_V6_ANSI_0361_PID 0x0361 +#define KEYCHRON_V6_ISO_0362_PID 0x0362 +#define KEYCHRON_V6_ISO_0363_PID 0x0363 +#define KEYCHRON_V6_BR_PID 0x0367 +#define KEYCHRON_V7_ANSI_PID 0x0370 +#define KEYCHRON_V7_ISO_PID 0x0372 +#define KEYCHRON_V8_ANSI_PID 0x0381 +#define KEYCHRON_V10_ANSI_PID 0x03A1 +#define KEYCHRON_V10_ISO_PID 0x03A3 +#define KEYCHRON_P1_HE_DAYZ_PID 0x0402 +#define KEYCHRON_P1_HE_DAYZ_ISO_PID 0x0403 +#define KEYCHRON_J1_PID 0x0405 +#define KEYCHRON_J2_PID 0x0406 +#define KEYCHRON_J4_PID 0x0408 +#define KEYCHRON_J5_PID 0x0409 +#define KEYCHRON_Z6_ULTRA_PID 0x040A +#define KEYCHRON_J3_HE_ANSI_PID 0x040C +#define KEYCHRON_P6_ULTRA_8K_PID 0x040D +#define KEYCHRON_J9_PID 0x0412 +#define KEYCHRON_J9_ISO_PID 0x0413 +#define KEYCHRON_J9_JIS_PID 0x0414 +#define KEYCHRON_J2_HE_8K_ANSI_PID 0x0416 +#define KEYCHRON_J8_HE_8K_ANSI_PID 0x0417 +#define KEYCHRON_J8_HE_8K_ISO_PID 0x0418 +#define KEYCHRON_J8_HE_8K_JIS_PID 0x0419 +#define KEYCHRON_KEYCHERON_J7_PID 0x041A +#define KEYCHRON_J14_HE_PID 0x041B +#define KEYCHRON_J12_HE_PID 0x041C +#define KEYCHRON_Z6_75_ULTRA_8K_RGB_PID 0x041D +#define KEYCHRON_J5_HE_ANSI_PID 0x041E +#define KEYCHRON_J4_HE_ANSI_PID 0x041F +#define KEYCHRON_P6_ULTRA_8K_ISO_PID 0x0420 +#define KEYCHRON_J15_HE_RGB_PID 0x0429 +#define KEYCHRON_X3_ANSI_RGB_PID 0x042A +#define KEYCHRON_J9_ULTRA_8K_ANSI_PID 0x042B +#define KEYCHRON_J3_SE_PID 0x042D +#define KEYCHRON_Z5_98_ULTRA_8K_ANSI_PID 0x042E +#define KEYCHRON_V1_HE_ANSI_PID 0x042F +#define KEYCHRON_C3_PRO_8K_ANSI_0437_PID 0x0437 +#define KEYCHRON_C3_MAX_ANSI_PID 0x043A +#define KEYCHRON_V6_HE_ANSI_PID 0x0441 +#define KEYCHRON_Z11_ULTRA_L_PID 0x0442 +#define KEYCHRON_Z11_ULTRA_R_PID 0x0443 +#define KEYCHRON_J5_TMR_ANSI_0445_PID 0x0445 +#define KEYCHRON_J5_HE_8K_ISO_PID 0x0446 +#define KEYCHRON_J2_ULTRA_8K_ANSI_PID 0x0447 +#define KEYCHRON_J5_ULTRA_8K_PID 0x0448 +#define KEYCHRON_J2_TMR_PID 0x0449 +#define KEYCHRON_J5_TMR_ANSI_044B_PID 0x044B +#define KEYCHRON_J11_ULTRA_8K_044C_PID 0x044C +#define KEYCHRON_Z5_75_ULTRA_8K_ANSI_PID 0x044D +#define KEYCHRON_J3_ULTRA_8K_ANSI_PID 0x044E +#define KEYCHRON_J11_ULTRA_8K_044F_PID 0x044F +#define KEYCHRON_J10_ULTRA_8K_ANSI_0451_PID 0x0451 +#define KEYCHRON_J10_ULTRA_8K_ANSI_0452_PID 0x0452 +#define KEYCHRON_J5_ANSI_PID 0x0453 +#define KEYCHRON_J2_ANSI_PID 0x0456 +#define KEYCHRON_J4_ANSI_RGB_PID 0x0457 +#define KEYCHRON_J6_ANSI_PID 0x0458 +#define KEYCHRON_EX75_HE_8K_ANSI_PID 0x045A +#define KEYCHRON_EX67_HE_8K_ANSI_PID 0x045B +#define KEYCHRON_EX99_HE_8K_ANSI_PID 0x045C +#define KEYCHRON_KEYCHROON_J3_TMR_045E_PID 0x045E +#define KEYCHRON_KEYCHROON_J3_TMR_045F_PID 0x045F +#define KEYCHRON_C75_TMR_8K_JIS_PID 0x0460 +#define KEYCHRON_J6_ULTRA_8K_ANSI_PID 0x0461 +#define KEYCHRON_Z6_87_ULTRA_8K_PID 0x0462 +#define KEYCHRON_CM2_H1_ANSI_PID 0x0463 +#define KEYCHRON_F4_HE_8K_PID 0x0464 +#define KEYCHRON_J6_FULL_SIZE_8K_PID 0x0467 +#define KEYCHRON_J2_TKL_8K_PID 0x0468 +#define KEYCHRON_J5_ULTRA_8K_ISO_PID 0x0469 +#define KEYCHRON_J8_PID 0x046B +#define KEYCHRON_F4_PRO_8K_PID 0x046C +#define KEYCHRON_CARBON_68_HE_8K_PID 0x0472 +#define KEYCHRON_F6_HE_8K_PID 0x0476 +#define KEYCHRON_J6_FULL_SIZE_8K_ISO_PID 0x0478 +#define KEYCHRON_Z7_MAX_ANSI_RGB_PID 0x0479 +#define KEYCHRON_C1_PRO_8K_ISO_RGB_PID 0x051D +#define KEYCHRON_C1_PRO_8K_JIS_RGB_PID 0x051E +#define KEYCHRON_C1_PRO_8K_ANSI_RGB_PID 0x0521 +#define KEYCHRON_C2_PRO_8K_ANSI_RGB_PID 0x0522 +#define KEYCHRON_C2_PRO_8K_ISO_RGB_PID 0x052D +#define KEYCHRON_C3_PRO_8K_ANSI_0530_PID 0x0530 +#define KEYCHRON_C3_PRO_8K_ISO_RGB_PID 0x0531 +#define KEYCHRON_C3_PRO_8K_JIS_PID 0x0532 +#define KEYCHRON_C3_PRO_8K_ABTN2_PID 0x0536 +#define KEYCHRON_C4_PRO_JIS_RGB_PID 0x0542 +#define KEYCHRON_Q1_PRO_ANSI_PID 0x0610 +#define KEYCHRON_Q1_PRO_ISO_PID 0x0611 +#define KEYCHRON_Q2_PRO_ANSI_PID 0x0620 +#define KEYCHRON_Q2_PRO_ISO_PID 0x0621 +#define KEYCHRON_Q3_PRO_PID 0x0630 +#define KEYCHRON_Q3_PRO_ANSI_PID 0x0633 +#define KEYCHRON_Q3_PRO_ISO_PID 0x0634 +#define KEYCHRON_Q4_PRO_ANSI_RGB_PID 0x0640 +#define KEYCHRON_Q5_PRO_ANSI_PID 0x0650 +#define KEYCHRON_Q5_PRO_ISO_PID 0x0651 +#define KEYCHRON_Q6_PRO_ANSI_PID 0x0660 +#define KEYCHRON_Q6_PRO_ISO_PID 0x0661 +#define KEYCHRON_Q8_PRO_ANSI_PID 0x0680 +#define KEYCHRON_Q10_PRO_ANSI_PID 0x06A0 +#define KEYCHRON_Q0_MAX_PID 0x0800 +#define KEYCHRON_Q1_MAX_ANSI_PID 0x0810 +#define KEYCHRON_Q1_MAX_ISO_PID 0x0811 +#define KEYCHRON_Q1_MAX_JIS_PID 0x0812 +#define KEYCHRON_Q2_MAX_ANSI_PID 0x0820 +#define KEYCHRON_Q2_MAX_ISO_PID 0x0821 +#define KEYCHRON_Q3_MAX_ANSI_PID 0x0830 +#define KEYCHRON_Q3_MAX_ISO_PID 0x0831 +#define KEYCHRON_Q5_MAX_ANSI_PID 0x0850 +#define KEYCHRON_Q5_MAX_ISO_PID 0x0851 +#define KEYCHRON_Q5_MAX_JIS_PID 0x0852 +#define KEYCHRON_Q6_MAX_ANSI_PID 0x0860 +#define KEYCHRON_Q6_MAX_ISO_PID 0x0861 +#define KEYCHRON_Q8_MAX_ANSI_PID 0x0880 +#define KEYCHRON_Q10_MAX_ANSI_PID 0x08A0 +#define KEYCHRON_Q10_MAX_ISO_PID 0x08A1 +#define KEYCHRON_Q65_MAX_ANSI_PID 0x08B0 +#define KEYCHRON_Q11_ULTRA_8K_R_PID 0x08BA +#define KEYCHRON_Q60_MAX_PID 0x08C0 +#define KEYCHRON_Q12_MAX_ANSI_PID 0x08C3 +#define KEYCHRON_Q12_MAX_ISO_PID 0x08C4 +#define KEYCHRON_Q13_MAX_ANSI_PID 0x08D0 +#define KEYCHRON_Q13_MAX_JIS_PID 0x08D2 +#define KEYCHRON_Q14_MAX_ANSI_PID 0x08E0 +#define KEYCHRON_Q15_MAX_ANSI_PID 0x08F0 +#define KEYCHRON_V1_MAX_ANSI_PID 0x0913 +#define KEYCHRON_V2_ULTRA_ISO_PID 0x0914 +#define KEYCHRON_V1_MAX_JIS_PID 0x0915 +#define KEYCHRON_V2_MAX_ANSI_PID 0x0920 +#define KEYCHRON_V2_MAX_ISO_PID 0x0921 +#define KEYCHRON_V2_MAX_JIS_PID 0x0922 +#define KEYCHRON_V3_MAX_ANSI_PID 0x0933 +#define KEYCHRON_V3_MAX_ISO_PID 0x0934 +#define KEYCHRON_V3_MAX_JIS_PID 0x0935 +#define KEYCHRON_V4_MAX_ANSI_PID 0x0940 +#define KEYCHRON_V5_MAX_ANSI_PID 0x0950 +#define KEYCHRON_V5_MAX_ISO_PID 0x0951 +#define KEYCHRON_V5_MAX_JIS_PID 0x0952 +#define KEYCHRON_V6_MAX_ANSI_PID 0x0960 +#define KEYCHRON_V6_MAX_ISO_PID 0x0961 +#define KEYCHRON_V6_MAX_JIS_PID 0x0962 +#define KEYCHRON_V8_MAX_ANSI_PID 0x0980 +#define KEYCHRON_V10_MAX_ANSI_PID 0x09A0 +#define KEYCHRON_V10_MAX_ISO_PID 0x09A1 +#define KEYCHRON_K17_MAX_ANSI_RGB_PID 0x0A00 +#define KEYCHRON_K17_MAX_ISO_RGB_PID 0x0A01 +#define KEYCHRON_K0_MAX_RGB_PID 0x0A06 +#define KEYCHRON_K17_MAX_JIS_RGB_PID 0x0A07 +#define KEYCHRON_K0_MAX_PID 0x0A09 +#define KEYCHRON_K1_MAX_ANSI_RGB_PID 0x0A10 +#define KEYCHRON_K1_MAX_ISO_RGB_PID 0x0A11 +#define KEYCHRON_K1_MAX_JIS_RGB_0A12_PID 0x0A12 +#define KEYCHRON_K1_MAX_JIS_RGB_0A16_PID 0x0A16 +#define KEYCHRON_K2_MAX_ANSI_RGB_PID 0x0A20 +#define KEYCHRON_K2_MAX_ISO_RGB_PID 0x0A21 +#define KEYCHRON_K2_MAX_JIS_RGB_PID 0x0A22 +#define KEYCHRON_K3_MAX_ANSI_RGB_0A30_PID 0x0A30 +#define KEYCHRON_K3_MAX_ISO_RGB_PID 0x0A31 +#define KEYCHRON_K3_MAX_JIS_RGB_0A32_PID 0x0A32 +#define KEYCHRON_K3_MAX_JIS_RGB_0A39_PID 0x0A39 +#define KEYCHRON_K3_MAX_JIS_RGB_0A3B_PID 0x0A3B +#define KEYCHRON_K3_MAX_ANSI_RGB_0A3F_PID 0x0A3F +#define KEYCHRON_K4_MAX_ANSI_RGB_PID 0x0A40 +#define KEYCHRON_K4_MAX_ISO_RGB_PID 0x0A41 +#define KEYCHRON_K4_MAX_JIS_RGB_PID 0x0A42 +#define KEYCHRON_K5_MAX_ANSI_RGB_PID 0x0A50 +#define KEYCHRON_K5_MAX_ISO_RGB_PID 0x0A51 +#define KEYCHRON_K5_MAX_JIS_RGB_0A52_PID 0x0A52 +#define KEYCHRON_K5_MAX_JIS_RGB_0A58_PID 0x0A58 +#define KEYCHRON_K7_MAX_ANSI_RGB_PID 0x0A70 +#define KEYCHRON_K7_MAX_ISO_RGB_PID 0x0A71 +#define KEYCHRON_K7_MAX_V2_JIS_RGB_PID 0x0A76 +#define KEYCHRON_K8_MAX_ANSI_RGB_PID 0x0A80 +#define KEYCHRON_K8_MAX_ISO_RGB_PID 0x0A81 +#define KEYCHRON_K9_MAX_ANSI_RGB_PID 0x0A90 +#define KEYCHRON_K10_MAX_ANSI_RGB_PID 0x0AA0 +#define KEYCHRON_K10_MAX_ISO_RGB_PID 0x0AA1 +#define KEYCHRON_K10_MAX_JIS_RGB_PID 0x0AA2 +#define KEYCHRON_K10_MAX_US_V2_RGB_PID 0x0AAC +#define KEYCHRON_K11_MAX_ANSI_RGB_PID 0x0AB3 +#define KEYCHRON_K11_MAX_ISO_RGB_PID 0x0AB4 +#define KEYCHRON_K11_MAX_JIS_RGB_PID 0x0AB5 +#define KEYCHRON_K13_MAX_ANSI_RGB_PID 0x0AD0 +#define KEYCHRON_K13_MAX_ISO_RGB_PID 0x0AD1 +#define KEYCHRON_K13_MAX_JIS_RGB_PID 0x0AD2 +#define KEYCHRON_K15_MAX_ANSI_RGB_PID 0x0AF0 +#define KEYCHRON_K15_MAX_ISO_RGB_PID 0x0AF1 +#define KEYCHRON_K15_MAX_JIS_RGB_PID 0x0AF2 +#define KEYCHRON_Q0_HE_PID 0x0B00 +#define KEYCHRON_Q1_HE_ANSI_PID 0x0B10 +#define KEYCHRON_Q1_HE_ISO_PID 0x0B11 +#define KEYCHRON_Q1_HE_JIS_PID 0x0B12 +#define KEYCHRON_Q1_HE_PID 0x0B14 +#define KEYCHRON_Q1_HE_V2_SILENT_ANSI_PID 0x0B15 +#define KEYCHRON_Q2_HE_ANSI_PID 0x0B20 +#define KEYCHRON_Q3_HE_ANSI_PID 0x0B30 +#define KEYCHRON_Q3_HE_ISO_PID 0x0B31 +#define KEYCHRON_Q3_HE_JIS_PID 0x0B32 +#define KEYCHRON_Q4_HE_ANSI_PID 0x0B40 +#define KEYCHRON_Q5_HE_ANSI_PID 0x0B50 +#define KEYCHRON_Q5_HE_ISO_PID 0x0B51 +#define KEYCHRON_Q5_HE_JIS_PID 0x0B52 +#define KEYCHRON_Q6_HE_ANSI_0B60_PID 0x0B60 +#define KEYCHRON_Q6_HE_ISO_PID 0x0B61 +#define KEYCHRON_Q6_HE_JIS_PID 0x0B62 +#define KEYCHRON_Q6_HE_ANSI_0B63_PID 0x0B63 +#define KEYCHRON_Q6_HE_V2_SILENT_ANSI_PID 0x0B64 +#define KEYCHRON_Q12_HE_ANSI_PID 0x0BC0 +#define KEYCHRON_Q12_HE_ISO_PID 0x0BC1 +#define KEYCHRON_V0_ULTRA_8K_ANSI_PID 0x0C00 +#define KEYCHRON_V1_ULTRA_8K_ANSI_PID 0x0C10 +#define KEYCHRON_V1_ULTRA_8K_ISO_PID 0x0C11 +#define KEYCHRON_V1_ULTRA_8K_JIS_PID 0x0C12 +#define KEYCHRON_V1_ULTRA_SE_ANSI_PID 0x0C13 +#define KEYCHRON_V1_ULTRA_8K_PID 0x0C14 +#define KEYCHRON_V2_ULTRA_8K_PID 0x0C20 +#define KEYCHRON_V3_ULTRA_8K_ANSI_PID 0x0C30 +#define KEYCHRON_V3_ULTRA_8K_ISO_RGB_PID 0x0C31 +#define KEYCHRON_V3_ULTRA_8K_JIS_PID 0x0C32 +#define KEYCHRON_V5_ULTRA_8K_ANSI_PID 0x0C50 +#define KEYCHRON_V5_ULTRA_ISO_PID 0x0C51 +#define KEYCHRON_V5_ULTRA_JIS_PID 0x0C52 +#define KEYCHRON_V6_ULTRA_8K_ANSI_PID 0x0C60 +#define KEYCHRON_V6_ULTRA_ISO_PID 0x0C61 +#define KEYCHRON_V6_ULTRA_8K_JIS_PID 0x0C62 +#define KEYCHRON_V6_ULTRA_SE_ANSI_PID 0x0C63 +#define KEYCHRON_V10_ULTRA_8K_ANSI_PID 0x0CA0 +#define KEYCHRON_K1_V6_ANSI_RGB_PID 0x0D10 +#define KEYCHRON_K1_V6_ISO_RGB_PID 0x0D11 +#define KEYCHRON_K1_V6_JIS_RGB_PID 0x0D12 +#define KEYCHRON_K2_V3_ANSI_RGB_PID 0x0D20 +#define KEYCHRON_K2_V3_ISO_RGB_PID 0x0D21 +#define KEYCHRON_K2_V3_JIS_RGB_PID 0x0D22 +#define KEYCHRON_K3_V3_ANSI_RGB_PID 0x0D30 +#define KEYCHRON_K3_V3_ISO_RGB_PID 0x0D31 +#define KEYCHRON_K3_V3_JIS_RGB_PID 0x0D32 +#define KEYCHRON_K3_MAX_SE_RGB_PID 0x0D3B +#define KEYCHRON_K4_V3_ANSI_RGB_PID 0x0D40 +#define KEYCHRON_K4_V3_ISO_RGB_PID 0x0D41 +#define KEYCHRON_K5_V2_ANSI_RGB_PID 0x0D50 +#define KEYCHRON_K5_V2_ISO_RGB_PID 0x0D51 +#define KEYCHRON_K5_V2_JIS_RGB_PID 0x0D52 +#define KEYCHRON_K6X_US_RGB_PID 0x0D60 +#define KEYCHRON_K8_V2_ANSI_RGB_PID 0x0D80 +#define KEYCHRON_K10_V2_ANSI_RGB_PID 0x0DA0 +#define KEYCHRON_K2_HE_ANSI_RGB_PID 0x0E20 +#define KEYCHRON_K2_HE_ISO_RGB_PID 0x0E21 +#define KEYCHRON_K2_HE_JIS_RGB_PID 0x0E22 +#define KEYCHRON_K2_HE_BR_RGB_PID 0x0E23 +#define KEYCHRON_K2_HE_V2_SILENT_ANSI_PID 0x0E25 +#define KEYCHRON_K2_HE_V2_ISO_PID 0x0E26 +#define KEYCHRON_K3_HE_PID 0x0E30 +#define KEYCHRON_K3_HE_ISO_PID 0x0E31 +#define KEYCHRON_K3_HE_JIS_PID 0x0E32 +#define KEYCHRON_K4_HE_ANSI_PID 0x0E40 +#define KEYCHRON_K4_HE_ISO_PID 0x0E41 +#define KEYCHRON_K4_HE_JIS_PID 0x0E42 +#define KEYCHRON_K6_HE_ANSI_PID 0x0E60 +#define KEYCHRON_K6_HE_ISO_RGB_PID 0x0E61 +#define KEYCHRON_K8_HE_ANSI_PID 0x0E80 +#define KEYCHRON_K8_HE_ISO_RGB_PID 0x0E81 +#define KEYCHRON_K8_HE_JIS_PID 0x0E82 +#define KEYCHRON_K10_HE_ANSI_PID 0x0EA0 +#define KEYCHRON_K10_HE_ISO_0EA1_PID 0x0EA1 +#define KEYCHRON_K10_HE_JIS_PID 0x0EA2 +#define KEYCHRON_K10_HE_PID 0x0EA3 +#define KEYCHRON_K10_HE_ISO_0EA4_PID 0x0EA4 +#define KEYCHRON_K10_HE_ABNT2_PID 0x0EA5 +#define KEYCHRON_K10_HE_V2_ANSI_RGB_PID 0x0EA6 +#define KEYCHRON_K10_HE_V3_ANSI_RGB_PID 0x0EA7 +#define KEYCHRON_V1_8K_ANSI_PID 0x0F10 +#define KEYCHRON_V1_8K_ISO_PID 0x0F11 +#define KEYCHRON_V3_8K_ANSI_PID 0x0F30 +#define KEYCHRON_V3_8K_ISO_PID 0x0F31 +#define KEYCHRON_V5_8K_ANSI_0F50_PID 0x0F50 +#define KEYCHRON_V5_8K_ISO_PID 0x0F51 +#define KEYCHRON_V5_8K_ANSI_0F53_PID 0x0F53 +#define KEYCHRON_V6_8K_ANSI_PID 0x0F60 +#define KEYCHRON_V6_8K_ISO_PID 0x0F61 +#define KEYCHRON_Q19_HE_8K_PID 0x1005 +#define KEYCHRON_Q1_HE_8K_ANSI_1010_PID 0x1010 +#define KEYCHRON_Q1_HE_8K_ISO_RGB_PID 0x1011 +#define KEYCHRON_Q1_HE_8K_JIS_PID 0x1012 +#define KEYCHRON_Q1_HE_8K_ABNT2_PID 0x1013 +#define KEYCHRON_Q1_HE_MARBLE_8K_ANSI_PID 0x1014 +#define KEYCHRON_Q1_SE_8K_ANSI_PID 0x1015 +#define KEYCHRON_Q1_HE_8K_ANSI_1016_PID 0x1016 +#define KEYCHRON_Q2_HE_8K_PID 0x1020 +#define KEYCHRON_Q3_HE_8K_PID 0x1030 +#define KEYCHRON_Q3_HE_8K_ISO_PID 0x1031 +#define KEYCHRON_Q3_HE_8K_JIS_PID 0x1032 +#define KEYCHRON_Q5_HE_8K_PID 0x1050 +#define KEYCHRON_Q6_HE_8K_PID 0x1060 +#define KEYCHRON_Q6_HE_8K_ISO_PID 0x1061 +#define KEYCHRON_Q6_HE_8K_JIS_PID 0x1062 +#define KEYCHRON_Q16_HE_8K_PID 0x10F3 +#define KEYCHRON_Q16_HE_8K_ISO_PID 0x10F4 +#define KEYCHRON_Q1_ULTRA_8K_ANSI_1210_PID 0x1210 +#define KEYCHRON_Q1_ULTRA_8K_ISO_PID 0x1211 +#define KEYCHRON_Q1_ULTRA_8K_JIS_PID 0x1212 +#define KEYCHRON_Q1_ULTRA_8K_ANSI_1213_PID 0x1213 +#define KEYCHRON_Q3_ULTRA_8K_ANSI_PID 0x1230 +#define KEYCHRON_Q3_ULTRA_8K_ISO_RGB_PID 0x1231 +#define KEYCHRON_Q3_ULTRA_8K_JIS_RGB_PID 0x1232 +#define KEYCHRON_Q5_ULTRA_8K_PID 0x1250 +#define KEYCHRON_Q5_ULTRA_8K_ISO_PID 0x1251 +#define KEYCHRON_Q5_ULTRA_8K_JIS_PID 0x1252 +#define KEYCHRON_Q5_ULTRA_8K_ANSI_PID 0x1253 +#define KEYCHRON_Q6_ULTRA_8K_ANSI_PID 0x1260 +#define KEYCHRON_Q6_ULTRA_8K_ISO_RGB_PID 0x1261 +#define KEYCHRON_Q6_ULTRA_8K_JIS_RGB_PID 0x1262 +#define KEYCHRON_Q13_ULTRA_8K_RGB_PID 0x12D0 +#define KEYCHRON_K6_ULTRA_ZMK_ANSI_PID 0x1360 +#define KEYCHRON_K6_ULTRA_ZMK_JIS_PID 0x1362 +#define KEYCHRON_K10_PRO_SS_ZMK_RGB_PID 0x13A9 +#define KEYCHRON_K10_ULTRA_SE_ANSI_PID 0x13AA +#define KEYCHRON_R3_ANSI_RGB_1430_PID 0x1430 +#define KEYCHRON_R3_JIS_RGB_PID 0x1432 +#define KEYCHRON_R3_ANSI_RGB_1433_PID 0x1433 +#define KEYCHRON_R5_ANSI_RGB_PID 0x1450 +#define KEYCHRON_R6_ANSI_RGB_1460_PID 0x1460 +#define KEYCHRON_R6_ANSI_RGB_1463_PID 0x1463 +#define KEYCHRON_C3_HE_8K_JIS_PID 0x1532 +#define KEYCHRON_C4_HE_8K_ANSI_1540_PID 0x1540 +#define KEYCHRON_C4_HE_8K_ANSI_1541_PID 0x1541 +#define KEYCHRON_K1_ULTRA_8K_PID 0x1610 +#define KEYCHRON_K1_ULTRA_8K_ISO_RGB_PID 0x1611 +#define KEYCHRON_K2_ULTRA_8K_ANSI_PID 0x1620 +#define KEYCHRON_K2_ULTRA_8K_ISO_PID 0x1621 +#define KEYCHRON_K2_ULTRA_8K_JIS_PID 0x1622 +#define KEYCHRON_K3_ULTRA_8K_ANSI_PID 0x1630 +#define KEYCHRON_K3_ULTRA_8K_ISO_PID 0x1631 +#define KEYCHRON_K3_ULTRA_8K_JIS_1632_PID 0x1632 +#define KEYCHRON_K3_ULTRA_8K_JIS_1634_PID 0x1634 +#define KEYCHRON_K4_ULTRA_8K_RGB_PID 0x1640 +#define KEYCHRON_K4_ULTRA_8K_ISO_1641_PID 0x1641 +#define KEYCHRON_K4_ULTRA_8K_JIS_PID 0x1642 +#define KEYCHRON_K4_ULTRA_8K_ISO_1643_PID 0x1643 +#define KEYCHRON_K5_ULTRA_8K_ANSI_PID 0x1650 +#define KEYCHRON_K5_ULTRA_8K_ISO_PID 0x1651 +#define KEYCHRON_K5_ULTRA_8K_ABNT2_PID 0x1653 +#define KEYCHRON_K8_ULTRA_8K_ANSI_PID 0x1680 +#define KEYCHRON_K8_ULTRA_8K_ISO_PID 0x1681 +#define KEYCHRON_K8_ULTRA_8K_JIS_PID 0x1682 +#define KEYCHRON_K10_ULTRA_8K_RGB_PID 0x16A0 +#define KEYCHRON_K10_ULTRA_8K_ISO_PID 0x16A1 +#define KEYCHRON_K10_ULTRA_8K_JIS_PID 0x16A2 +#define KEYCHRON_K10_ULTRA_8K_ISO_RGB_PID 0x16A3 +#define KEYCHRON_Q12_HE_PID 0xD014 /*---------------------------------------------------------*\ | Keychron Patch Types | | | -| LED index is assumed to match Launcher layout_index. | -| row/col are the corrected visual matrix position. | +| source_row/source_col identify a key by the raw matrix | +| position reported by the firmware. row/col specify the | +| corrected visual matrix position used by OpenRGB. | \*---------------------------------------------------------*/ typedef struct { - unsigned int led_idx; + unsigned int source_row; + unsigned int source_col; unsigned int row; unsigned int col; } keychron_patch_entry; @@ -263,7 +465,7 @@ typedef struct } keychron_patch; /*---------------------------------------------------------*\ -| List of all Keychron matrix patches | +| List of Keychron matrix patches requiring correction | \*---------------------------------------------------------*/ extern const keychron_patch* const keychron_patches[]; extern const unsigned int KEYCHRON_PATCH_COUNT;