Merge pull request #122 from lalalademaxiya1/playground

Playground
This commit is contained in:
lalalademaxiya1 2023-04-22 17:11:46 +08:00 committed by GitHub
commit f9a4104574
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
198 changed files with 1617 additions and 427 deletions

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -16,14 +16,8 @@
#pragma once
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 5, 4 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 5, 4 } }
#define SCAN_COUNT_MAX 100
/* Disable DIP switch in matrix data */

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -16,14 +16,8 @@
#pragma once
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 5, 4 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 5, 4 } }
#define SCAN_COUNT_MAX 100
/* Disable DIP switch in matrix data */

View File

@ -189,34 +189,12 @@ bool led_update_kb(led_t led_state) {
#endif
#ifdef ENCODER_ENABLE
bool encoder_update_kb(uint8_t index, bool clockwise) {
if (!encoder_update_user(index, clockwise)) {
return false; /* Don't process further events if user function exists and returns false */
}
if (index == 0) { /* First encoder */
if (clockwise) {
tap_code_delay(KC_VOLU, 10);
} else {
tap_code_delay(KC_VOLD, 10);
}
} else if (index == 1) { /* Second encoder */
if (clockwise) {
tap_code_delay(KC_VOLU, 10);
} else {
tap_code_delay(KC_VOLD, 10);
}
}
return true;
}
#endif
#if defined(ENCODER_ENABLE) && defined(PAL_USE_CALLBACKS)
static void encoder_pad_cb(void *param) {
encoder_inerrupt_read((uint32_t)param & 0XFF);
}
void keyboard_post_init_keychron(void) {
__attribute__((weak)) void keyboard_post_init_kb(void) {
pin_t encoders_pad_a[NUM_ENCODERS] = ENCODERS_PAD_A;
pin_t encoders_pad_b[NUM_ENCODERS] = ENCODERS_PAD_B;
for (uint32_t i = 0; i < NUM_ENCODERS; i++) {

View File

@ -17,6 +17,11 @@
#include "keychron_ft_common.h"
#include "raw_hid.h"
#ifndef NKRO
# include <string.h>
# define RAW_EPSIZE 32
#endif
#ifndef BL_TEST_KEY1
# define BL_TEST_KEY1 KC_RIGHT
#endif

View File

@ -18,9 +18,9 @@
#ifndef SHIFT_COL_START
# define SHIFT_COL_START 8
# ifndef SHIFT_COL_END
#endif
#ifndef SHIFT_COL_END
# define SHIFT_COL_END 15
# endif
#endif
#if defined(SHIFT_COL_START) && defined(SHIFT_COL_END)

View File

@ -16,9 +16,6 @@
#pragma once
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Set LED driver current */
#define CKLED2001_CURRENT_TUNE \
{ 0xFF, 0xFF, 0x70, 0xFF, 0xFF, 0x70, 0xFF, 0xFF, 0x70, 0xFF, 0xFF, 0x70 }

View File

@ -15,15 +15,3 @@
*/
#include "quantum.h"
#include "keychron_common.h"
#if defined(ENCODER_ENABLE) && defined(PAL_USE_CALLBACKS)
void keyboard_post_init_kb(void) {
keyboard_post_init_keychron();
// allow user keymaps to do custom post_init
keyboard_post_init_user();
}
#endif

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -29,7 +29,7 @@
"diode_direction": "ROW2COL",
"encoder": {
"rotary": [
{"pin_a": "A3", "pin_b": "A8"}
{"pin_a": "A3", "pin_b": "A4"}
]
},
"bootmagic": {

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -17,10 +17,7 @@
#pragma once
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 0, 1 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 0, 1 } }
#define SCAN_COUNT_MAX 100
/* RGB Matrix Driver Configuration */

View File

@ -17,10 +17,7 @@
#pragma once
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 0, 1 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 0, 1 } }
#define SCAN_COUNT_MAX 100
/* RGB Matrix Driver Configuration */

View File

@ -17,10 +17,7 @@
#pragma once
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 5, 4 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 5, 4 } }
#define SCAN_COUNT_MAX 100
/* RGB Matrix Driver Configuration */

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -17,10 +17,7 @@
#pragma once
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 5, 4 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 5, 4 } }
#define SCAN_COUNT_MAX 100
/* RGB Matrix Driver Configuration */

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -16,9 +16,6 @@
#pragma once
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Disable DIP switch in matrix data */
#define MATRIX_MASKED

View File

@ -17,10 +17,7 @@
#pragma once
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 0, 1 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 0, 1 } }
#define SCAN_COUNT_MAX 100
/* RGB Matrix Driver Configuration */

View File

@ -17,10 +17,7 @@
#pragma once
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 0, 1 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 0, 1 } }
#define SCAN_COUNT_MAX 100
/* RGB Matrix Driver Configuration */

View File

@ -17,10 +17,7 @@
#pragma once
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 5, 4 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 5, 4 } }
#define SCAN_COUNT_MAX 100
/* RGB Matrix Driver Configuration */

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -17,10 +17,7 @@
#pragma once
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 5, 4 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 5, 4 } }
#define SCAN_COUNT_MAX 100
/* RGB Matrix Driver Configuration */

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -17,10 +17,7 @@
#pragma once
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 5, 4 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 5, 4 } }
#define SCAN_COUNT_MAX 100
/* RGB Matrix Driver Configuration */

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -17,10 +17,7 @@
#pragma once
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 5, 4 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 5, 4 } }
#define SCAN_COUNT_MAX 100
/* RGB Matrix Driver Configuration */

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -15,7 +15,6 @@
*/
#include "quantum.h"
#include "keychron_common.h"
#ifdef DIP_SWITCH_ENABLE
bool dip_switch_update_kb(uint8_t index, bool active) {
@ -28,14 +27,3 @@ bool dip_switch_update_kb(uint8_t index, bool active) {
return true;
}
#endif
#if defined(ENCODER_ENABLE) && defined(PAL_USE_CALLBACKS)
void keyboard_post_init_kb(void) {
keyboard_post_init_keychron();
// allow user keymaps to do custom post_init
keyboard_post_init_user();
}
#endif

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -35,10 +35,7 @@
{ 0x98, 0x98, 0x4A, 0x98, 0x98, 0x4A, 0x98, 0x98, 0x4A, 0x98, 0x98, 0x4A }
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 5, 5 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 5, 5 } }
#define SCAN_COUNT_MAX 100
/* Disable DIP switch in matrix data */

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -15,7 +15,6 @@
*/
#include "quantum.h"
#include "keychron_common.h"
const matrix_row_t matrix_mask[] = {
0b1111111111111111,
@ -37,14 +36,3 @@ bool dip_switch_update_kb(uint8_t index, bool active) {
return true;
}
#endif
#if defined(ENCODER_ENABLE) && defined(PAL_USE_CALLBACKS)
void keyboard_post_init_kb(void) {
keyboard_post_init_keychron();
// allow user keymaps to do custom post_init
keyboard_post_init_user();
}
#endif

View File

@ -16,12 +16,8 @@
#pragma once
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
// Connects each switch in the dip switch to the GPIO pin of the MCU
#define DIP_SWITCH_PINS \
{ A8 }
#define DIP_SWITCH_PINS { A8 }
/* handedness */
#define SPLIT_HAND_MATRIX_GRID A2, A15
@ -36,7 +32,7 @@
/* RGB Matrix Configuration */
#define DRIVER_COUNT 1
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_1_LED_TOTAL 89
#define DRIVER_1_LED_TOTAL 90
#define RGB_MATRIX_LED_COUNT DRIVER_1_LED_TOTAL
#define SPLIT_TRANSPORT_MIRROR

View File

@ -0,0 +1,20 @@
/* Copyright 2023 @ Keychron(https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
/* Enable caps-lock LED */
#define CAPS_LOCK_LED_INDEX 23

View File

@ -0,0 +1,167 @@
{
"keyboard_name": "Keychron Q11",
"manufacturer": "Keychron",
"url": "https://github.com/Keychron",
"maintainer": "lalalademaxiya1",
"bootloader": "stm32-dfu",
"bootmagic": {
"matrix": [0, 1]
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,
"dip_switch": true,
"encoder": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true,
"rgblight": false
},
"diode_direction": "ROW2COL",
"encoder": {
"rotary": [
{"pin_a": "B0", "pin_b": "B1"}
]
},
"matrix_pins": {
"cols": ["A7", "A6", "A5", "A4", "A3", "A2", "A1", "C15", null],
"rows": ["A13", "A14", "A15", "B3", "B4", "B5"]
},
"processor": "STM32L432",
"rgb_matrix": {
"driver": "CKLED2001",
"split_count": [43, 47]
},
"split": {
"enabled": true,
"encoder": {
"right": {
"rotary": [
{"pin_a": "C14", "pin_b": "C15"}
]
}
},
"matrix_pins": {
"right": {
"cols": ["A8", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0"],
"rows": ["B5", "B4", "B3", "A15", "A14", "A13"]
}
},
"transport": {
"protocol": "serial_usart",
"sync_matrix_state": false
}
},
"usb": {
"vid": "0x3434",
"pid": "0x01E1",
"device_version": "1.0.0"
},
"layouts": {
"LAYOUT_iso_92": {
"layout": [
{"matrix":[0,0], "x":0, "y":0 },
{"matrix":[0,1], "x":1.25, "y":0 },
{"matrix":[0,2], "x":2.25, "y":0 },
{"matrix":[0,3], "x":3.25, "y":0 },
{"matrix":[0,4], "x":4.25, "y":0 },
{"matrix":[0,5], "x":5.25, "y":0 },
{"matrix":[0,6], "x":6.25, "y":0 },
{"matrix":[0,7], "x":7.25, "y":0 },
{"matrix":[6,0], "x":9, "y":0 },
{"matrix":[6,1], "x":10, "y":0 },
{"matrix":[6,2], "x":11, "y":0 },
{"matrix":[6,3], "x":12, "y":0 },
{"matrix":[6,4], "x":13, "y":0 },
{"matrix":[6,5], "x":14, "y":0 },
{"matrix":[6,6], "x":15, "y":0 },
{"matrix":[6,7], "x":16, "y":0 },
{"matrix":[6,8], "x":17.25, "y":0 },
{"matrix":[1,0], "x":0, "y":1.25 },
{"matrix":[1,1], "x":1.25, "y":1.25 },
{"matrix":[1,2], "x":2.25, "y":1.25 },
{"matrix":[1,3], "x":3.25, "y":1.25 },
{"matrix":[1,4], "x":4.25, "y":1.25 },
{"matrix":[1,5], "x":5.25, "y":1.25 },
{"matrix":[1,6], "x":6.25, "y":1.25 },
{"matrix":[1,7], "x":7.25, "y":1.25 },
{"matrix":[7,0], "x":9, "y":1.25 },
{"matrix":[7,1], "x":10, "y":1.25 },
{"matrix":[7,2], "x":11, "y":1.25 },
{"matrix":[7,3], "x":12, "y":1.25 },
{"matrix":[7,4], "x":13, "y":1.25 },
{"matrix":[7,5], "x":14, "y":1.25 },
{"matrix":[7,6], "x":15, "y":1.25, "w":2 },
{"matrix":[7,8], "x":17.25, "y":1.25 },
{"matrix":[2,0], "x":0, "y":2.25 },
{"matrix":[2,1], "x":1.25, "y":2.25, "w":1.5 },
{"matrix":[2,2], "x":2.75, "y":2.25 },
{"matrix":[2,3], "x":3.75, "y":2.25 },
{"matrix":[2,4], "x":4.75, "y":2.25 },
{"matrix":[2,6], "x":5.75, "y":2.25 },
{"matrix":[2,7], "x":6.75, "y":2.25 },
{"matrix":[8,0], "x":8.5, "y":2.25 },
{"matrix":[8,1], "x":9.5, "y":2.25 },
{"matrix":[8,2], "x":10.5, "y":2.25 },
{"matrix":[8,3], "x":11.5, "y":2.25 },
{"matrix":[8,4], "x":12.5, "y":2.25 },
{"matrix":[8,5], "x":13.5, "y":2.25 },
{"matrix":[8,6], "x":14.5, "y":2.25 },
{"matrix":[8,8], "x":17.25, "y":2.25 },
{"matrix":[3,0], "x":0, "y":3.25 },
{"matrix":[3,1], "x":1.25, "y":3.25, "w":1.75 },
{"matrix":[3,2], "x":3, "y":3.25 },
{"matrix":[3,3], "x":4, "y":3.25 },
{"matrix":[3,4], "x":5, "y":3.25 },
{"matrix":[3,5], "x":6, "y":3.25 },
{"matrix":[3,6], "x":7, "y":3.25 },
{"matrix":[9,0], "x":8.75, "y":3.25 },
{"matrix":[9,1], "x":9.75, "y":3.25 },
{"matrix":[9,2], "x":10.75, "y":3.25 },
{"matrix":[9,3], "x":11.75, "y":3.25 },
{"matrix":[9,4], "x":12.75, "y":3.25 },
{"matrix":[9,5], "x":13.75, "y":3.25 },
{"matrix":[9,7], "x":14.75, "y":3.25 },
{"matrix":[8,7], "x":15.75, "y":2.25, "w":1.25, "h":2 },
{"matrix":[9,8], "x":17.25, "y":3.25 },
{"matrix":[4,0], "x":0, "y":4.25 },
{"matrix":[4,1], "x":1.25, "y":4.25, "w":1.25 },
{"matrix":[4,2], "x":2.5, "y":4.25 },
{"matrix":[4,3], "x":3.5, "y":4.25 },
{"matrix":[4,4], "x":4.5, "y":4.25 },
{"matrix":[4,5], "x":5.5, "y":4.25 },
{"matrix":[4,6], "x":6.5, "y":4.25 },
{"matrix":[4,7], "x":7.5, "y":4.25 },
{"matrix":[10,0], "x":9.25, "y":4.25 },
{"matrix":[10,1], "x":10.25, "y":4.25 },
{"matrix":[10,2], "x":11.25, "y":4.25 },
{"matrix":[10,3], "x":12.25, "y":4.25 },
{"matrix":[10,4], "x":13.25, "y":4.25 },
{"matrix":[10,5], "x":14.25, "y":4.25, "w":1.75 },
{"matrix":[10,7], "x":16.25, "y":4.25 },
{"matrix":[5,0], "x":0, "y":5.25 },
{"matrix":[5,1], "x":1.25, "y":5.25, "w":1.25 },
{"matrix":[5,2], "x":2.5, "y":5.25, "w":1.25 },
{"matrix":[5,3], "x":3.75, "y":5.25, "w":1.25 },
{"matrix":[5,4], "x":5, "y":5.25, "w":1.25 },
{"matrix":[5,6], "x":6.25, "y":5.25, "w":2.25 },
{"matrix":[11,1], "x":9.25, "y":5.25, "w":2.75 },
{"matrix":[11,2], "x":12, "y":5.25 },
{"matrix":[11,3], "x":13, "y":5.25 },
{"matrix":[11,4], "x":14, "y":5.25 },
{"matrix":[11,6], "x":15.25, "y":5.25 },
{"matrix":[11,7], "x":16.25, "y":5.25 },
{"matrix":[11,8], "x":17.25, "y":5.25}
]
}
}
}

View File

@ -0,0 +1,183 @@
/* Copyright 2023 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
// clang-format off
#ifdef RGB_MATRIX_ENABLE
const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to CKLED2001 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
{0, A_2, C_2, B_2}, // ESC
{0, A_3, C_3, B_3}, // F1
{0, A_4, C_4, B_4}, // F2
{0, A_5, C_5, B_5}, // F3
{0, A_6, C_6, B_6}, // F4
{0, A_7, C_7, B_7}, // F5
{0, A_8, C_8, B_8}, // F6
{0, D_1, F_1, E_1}, // M1
{0, D_2, F_2, E_2}, // `~
{0, D_3, F_3, E_3}, // 1!
{0, D_4, F_4, E_4}, // 2@
{0, D_5, F_5, E_5}, // 3#
{0, D_6, F_6, E_6}, // 4$
{0, D_7, F_7, E_7}, // 5%
{0, D_8, F_8, E_8}, // 6^
{0, G_1, I_1, H_1}, // M2
{0, G_2, I_2, H_2}, // TAB
{0, G_3, I_3, H_3}, // Q
{0, G_4, I_4, H_4}, // W
{0, G_5, I_5, H_5}, // E
{0, G_6, I_6, H_6}, // R
{0, G_7, I_7, H_7}, // T
{0, J_1, L_1, K_1}, // M3
{0, J_2, L_2, K_2}, // CapsJock
{0, J_3, L_3, K_3}, // A
{0, J_4, L_4, K_4}, // S
{0, J_5, L_5, K_5}, // D
{0, J_6, L_6, K_6}, // F
{0, J_7, L_7, K_7}, // G
{0, J_9, L_9, K_9}, // M4
{0, J_10, L_10, K_10}, // Shift_L
{0, J_11, L_11, K_11}, // NUBS
{0, J_12, L_12, K_12}, // Z
{0, J_13, L_13, K_13}, // X
{0, J_14, L_14, K_14}, // C
{0, J_15, L_15, K_15}, // V
{0, J_16, L_16, K_16}, // B
{0, G_9, I_9, H_9}, // M5
{0, G_10, I_10, H_10}, // Ctrl_L
{0, G_11, I_11, H_11}, // WGn_L
{0, G_12, I_12, H_12}, // Alt_L
{0, G_13, I_13, H_13}, // Fn
{0, G_15, I_15, H_15}, // Space
{0, A_16, C_16, B_16}, // F7
{0, A_15, C_15, B_15}, // F8
{0, A_14, C_14, B_14}, // F9
{0, A_13, C_13, B_13}, // F11
{0, A_12, C_12, B_12}, // F11
{0, A_11, C_11, B_11}, // F12
{0, A_10, C_10, B_10}, // INS
{0, A_9, C_9, B_9}, // DEL
{0, D_16, F_16, E_16}, // 7&
{0, D_15, F_15, E_15}, // 8*
{0, D_14, F_14, E_14}, // 9(
{0, D_13, F_13, E_13}, // 1)
{0, D_12, F_12, E_12}, // -_
{0, D_11, F_11, E_11}, // =+
{0, D_10, F_10, E_10}, // BackSpace
{0, D_8, F_8, E_8}, // PgUp
{0, G_16, I_16, H_16}, // Y
{0, G_15, I_15, H_15}, // U
{0, G_14, I_14, H_14}, // G
{0, G_13, I_13, H_13}, // O
{0, G_12, I_12, H_12}, // P
{0, G_11, I_11, H_11}, // [
{0, G_10, I_10, H_10}, // ]
{0, G_8, I_8, H_8}, // PgDn
{0, J_16, L_16, K_16}, // H
{0, J_15, L_15, K_15}, // J
{0, J_14, L_14, K_14}, // KKEY_PRESS_HOME
{0, J_13, L_13, K_13}, // J
{0, J_12, L_12, K_12}, // ;:
{0, J_11, L_11, K_11}, // '"
{0, J_9, L_9, K_9}, // NUHS
{0, G_9, I_9, H_9}, // Enter
{0, J_8, L_8, K_8}, // Home
{0, J_7, L_7, K_7}, // N
{0, J_6, L_6, K_6}, // M
{0, J_5, L_5, K_5}, // ,<
{0, J_4, L_4, K_4}, // .>
{0, J_3, L_3, K_3}, // ?/
{0, J_2, L_2, K_2}, // Shift_R
{0, J_1, L_1, K_1}, // Up
{0, G_6, I_6, H_6}, // Space
{0, G_5, I_5, H_5}, // Win_R
{0, G_4, I_4, H_4}, // Fn
{0, G_3, I_3, H_3}, // Ctrl_R
{0, G_2, I_2, H_2}, // Left
{0, G_1, I_1, H_1}, // Down
{0, G_7, I_7, H_7}, // Right
};
#define __ NO_LED
led_config_t g_led_config = {
{
// Key Matrix to LED Index
{ __, 0, 1, 2, 3, 4, 5, 6, __ },
{ 7, 8, 9, 10, 11, 12, 13, 14, __ },
{ 15, 16, 17, 18, 19, __, 20, 21, __ },
{ 22, 23, 24, 25, 26, 27, 28, __, __ },
{ 29, 30, 31, 32, 33, 34, 35, 36, __ },
{ 37, 38, 39, 40, 41, __, 42, __, __ },
{ 43, 44, 45, 46, 47, 48, 49, 50, __ },
{ 51, 52, 53, 54, 55, 56, 57, __, 58 },
{ 59, 60, 61, 62, 63, 64, 65, 74, 66 },
{ 67, 68, 69, 70, 71, 72, __, 73, 75 },
{ 76, 77, 78, 79, 80, 81, __, 82, __ },
{ __, 83, 84, 85, 86, __, 87, 88, 89 },
},
{
// LED Index to Physical Position
{17,0}, {31,0}, {45,0}, {59,0}, {72,0}, {86,0}, {100,0},
{0,15}, {17,15}, {31,15}, {45,15}, {59,15}, {72,15}, {86,15}, {100,15},
{0,27}, {21,27}, {38,27}, {52,27}, {66,27}, {79,27}, {93,27},
{0,40}, {22,40}, {41,40}, {55,40}, {69,40}, {83,40}, {97,40},
{0,52}, {19,52}, {34,52}, {48,52}, {62,52}, {76,52}, {90,52}, {103,52},
{0,64}, {19,64}, {36,64}, {53,64}, {71,64}, {95,64},
{110,0}, {124,0}, {138,0}, {152,0}, {165,0}, {179,0}, {193,0}, {207,0},
{110,15}, {124,15}, {138,15}, {152,15}, {165,15}, {179,15}, {200,15}, {224,15},
{103,27}, {117,27}, {131,27}, {145,27}, {158,27}, {172,27}, {186,27}, {224,27},
{107,40}, {121,40}, {134,40}, {148,40}, {162,40}, {176,40}, {190,40}, {208,36}, {224,40},
{114,52}, {127,52}, {141,52}, {155,52}, {169,52}, {188,52}, {210,52},
{126,64}, {152,64}, {166,64}, {180,64}, {196,64}, {210,64}, {224,64},
},
{
// RGB LED Index to Flag
1, 1, 1, 1, 1, 1, 1,
4, 1, 4, 4, 4, 4, 4, 4,
4, 1, 4, 4, 4, 4, 4,
4, 8, 4, 4, 4, 4, 4,
4, 1, 4, 4, 4, 4, 4, 4,
4, 1, 1, 1, 4, 4,
1, 1, 1, 1, 1, 1, 1, 1,
4, 4, 4, 4, 4, 4, 1, 1,
4, 4, 4, 4, 4, 4, 4, 1,
4, 4, 4, 4, 4, 4, 4, 1, 1,
4, 4, 4, 4, 4, 1, 1,
4, 1, 4, 1, 1, 1, 1,
}
};
#endif

View File

@ -0,0 +1,71 @@
/* Copyright 2023 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// clang-format off
enum layers{
MAC_BASE,
MAC_FN,
WIN_BASE,
WIN_FN
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_iso_92(
KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE,
_______, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
_______, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
_______, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
_______, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
_______, KC_LCTL, KC_LOPT, KC_LCMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[MAC_FN] = LAYOUT_iso_92(
RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[WIN_BASE] = LAYOUT_iso_92(
KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, KC_MUTE,
_______, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
_______, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
_______, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
_______, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
_______, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[WIN_FN] = LAYOUT_iso_92(
RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[MAC_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
[WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[WIN_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }
};
#endif // ENCODER_MAP_ENABLE

View File

@ -0,0 +1,90 @@
/* Copyright 2022 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#include "keychron_common.h"
#include "keychron_ft_common.h"
// clang-format off
enum layers{
MAC_BASE,
MAC_FN,
WIN_BASE,
WIN_FN
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_iso_92(
KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE,
MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
MC_2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
MC_3, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
MC_4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
MC_5, KC_LCTL, KC_LOPT, KC_LCMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[MAC_FN] = LAYOUT_iso_92(
RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[WIN_BASE] = LAYOUT_iso_92(
KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, KC_MUTE,
MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
MC_2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
MC_3, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
MC_4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
MC_5, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[WIN_FN] = LAYOUT_iso_92(
RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
};
#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[MAC_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
[WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
[WIN_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}
};
#endif // ENCODER_MAP_ENABLE
// clang-format on
void housekeeping_task_user(void) {
housekeeping_task_keychron();
housekeeping_task_keychron_ft();
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!process_record_keychron(keycode, record)) {
return false;
}
if (!process_record_keychron_ft(keycode, record)) {
return false;
}
return true;
}

View File

@ -0,0 +1,5 @@
VIA_ENABLE = yes
ENCODER_MAP_ENABLE = yes
VPATH += keyboards/keychron/common
SRC += keychron_common.c keychron_ft_common.c factory.c

View File

@ -0,0 +1,72 @@
/* Copyright 2022 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// clang-format off
enum layers{
MAC_BASE,
MAC_FN,
WIN_BASE,
WIN_FN
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_iso_92(
KC_MUTE, KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_INS, KC_DEL, KC_MUTE,
MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
MC_2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
MC_3, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
MC_4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
MC_5, KC_LCTL, KC_LOPT, KC_LCMD, MO(MAC_FN), KC_SPC, KC_SPC, KC_RCMD, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[MAC_FN] = LAYOUT_iso_92(
RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[WIN_BASE] = LAYOUT_iso_92(
KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, KC_MUTE,
MC_1, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
MC_2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
MC_3, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
MC_4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
MC_5, KC_LCTL, KC_LWIN, KC_LALT, MO(WIN_FN), KC_SPC, KC_SPC, KC_RALT, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[WIN_FN] = LAYOUT_iso_92(
RGB_TOG, _______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
};
#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[MAC_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
[WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[WIN_FN] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }
};
#endif // ENCODER_MAP_ENABLE

View File

@ -0,0 +1,2 @@
VIA_ENABLE = yes
ENCODER_MAP_ENABLE = yes

View File

@ -0,0 +1,7 @@
# Build Options
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash
SERIAL_DRIVER = usart
# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE

View File

@ -15,7 +15,6 @@
*/
#include "quantum.h"
#include "keychron_common.h"
// Mask out handedness diode to prevent it
// from keeping the keyboard awake
@ -25,9 +24,9 @@
const matrix_row_t matrix_mask[] = {
0b011111111,
0b011111111,
0b011111111,
0b011011111,
0b001111111,
0b011111101,
0b011111111,
0b001011111,
0b111111111,
0b101111111,
@ -87,11 +86,24 @@ static int16_t analogReadPin_my(pin_t pin) {
return *sampleBuffer;
}
void keyboard_post_init_kb(void) {
#if defined(ENCODER_ENABLE) && defined(PAL_USE_CALLBACKS)
keyboard_post_init_keychron();
static void encoder_pad_cb(void *param) {
encoder_inerrupt_read((uint32_t)param & 0XFF);
}
#endif
void keyboard_post_init_kb(void) {
#if defined(ENCODER_ENABLE) && defined(PAL_USE_CALLBACKS)
pin_t encoders_pad_a[NUM_ENCODERS] = ENCODERS_PAD_A;
pin_t encoders_pad_b[NUM_ENCODERS] = ENCODERS_PAD_B;
for (uint32_t i = 0; i < NUM_ENCODERS; i++) {
palEnableLineEvent(encoders_pad_a[i], PAL_EVENT_MODE_BOTH_EDGES);
palEnableLineEvent(encoders_pad_b[i], PAL_EVENT_MODE_BOTH_EDGES);
palSetLineCallback(encoders_pad_a[i], encoder_pad_cb, (void *)i);
palSetLineCallback(encoders_pad_b[i], encoder_pad_cb, (void *)i);
}
#endif
if (is_keyboard_left()) {
setPinOutput(A0);
writePinHigh(A0);

View File

@ -11,10 +11,12 @@ A customizable 75% split keyboard.
Make example for this keyboard (after setting up your build environment):
make keychron/q11/ansi_encoder:default
make keychron/q11/iso_encoder:default
Flashing example for this keyboard:
make keychron/q11/ansi_encoder:default:flash
make keychron/q11/iso_encoder:default:flash
**Reset Key**: Hold down the key located at *K01*, which programmed as *Esc* while plugging in the keyboard.

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -33,10 +33,7 @@
{ 0xAD, 0xAD, 0x55, 0xAD, 0xAD, 0x55, 0xAD, 0xAD, 0x55, 0xAD, 0xAD, 0x55 }
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 5, 4 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 5, 4 } }
#define SCAN_COUNT_MAX 100
/* Disable DIP switch in matrix data */

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -15,7 +15,6 @@
*/
#include "quantum.h"
#include "keychron_common.h"
// clang-format off
const matrix_row_t matrix_mask[] = {
@ -38,14 +37,3 @@ bool dip_switch_update_kb(uint8_t index, bool active) {
return true;
}
#endif
#if defined(ENCODER_ENABLE) && defined(PAL_USE_CALLBACKS)
void keyboard_post_init_kb(void) {
keyboard_post_init_keychron();
// allow user keymaps to do custom post_init
keyboard_post_init_user();
}
#endif

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -29,7 +29,7 @@
"diode_direction": "ROW2COL",
"encoder": {
"rotary": [
{"pin_a": "A10", "pin_b": "B8"}
{"pin_a": "A10", "pin_b": "B5"}
]
},
"processor": "STM32L432",

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -41,10 +41,7 @@
#define MATRIX_MASKED
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 4, 4 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 4, 4 } }
#define SCAN_COUNT_MAX 100
/* Turn off effects when suspended */

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -29,7 +29,7 @@
"diode_direction": "ROW2COL",
"encoder": {
"rotary": [
{"pin_a": "A10", "pin_b": "B8"}
{"pin_a": "A10", "pin_b": "B5"}
]
},
"processor": "STM32L432",

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -14,6 +14,7 @@
"console": false,
"dip_switch": true,
"encoder": true,
"encoder_map": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
@ -29,7 +30,7 @@
"diode_direction": "ROW2COL",
"encoder": {
"rotary": [
{"pin_a": "A10", "pin_b": "B8"}
{"pin_a": "A10", "pin_b": "B5"}
]
},
"processor": "STM32L432",

View File

@ -65,12 +65,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
};
// clang-format on
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {[MAC_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, [WIN_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, [MAC_FN1] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}, [WIN_FN1] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI)}, [_FN2] = {ENCODER_CCW_CW(_______, _______)}};
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[MAC_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
[WIN_BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
[MAC_FN1] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
[WIN_FN1] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
[_FN2] = {ENCODER_CCW_CW(_______, _______)}
};
#endif // ENCODER_MAP_ENABLE
// clang-format on
void housekeeping_task_user(void) {
housekeeping_task_keychron();
housekeeping_task_keychron_ft();

View File

@ -1,5 +1,4 @@
VIA_ENABLE = yes
ENCODER_MAP_ENABLE = yes
VPATH += keyboards/keychron/common
SRC += keychron_common.c keychron_ft_common.c

View File

@ -1,2 +1 @@
VIA_ENABLE = yes
ENCODER_MAP_ENABLE = yes

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -15,7 +15,6 @@
*/
#include "quantum.h"
#include "keychron_common.h"
const matrix_row_t matrix_mask[] = {
0b111111111111111,
@ -34,14 +33,3 @@ bool dip_switch_update_kb(uint8_t index, bool active) {
return true;
}
#endif
#if defined(ENCODER_ENABLE) && defined(PAL_USE_CALLBACKS)
void keyboard_post_init_kb(void) {
keyboard_post_init_keychron();
// allow user keymaps to do custom post_init
keyboard_post_init_user();
}
#endif

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -38,10 +38,7 @@
{ 0x98, 0x98, 0x44, 0x98, 0x98, 0x44, 0x98, 0x98, 0x44, 0x98, 0x98, 0x44 }
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 5, 4 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 5, 4 } }
#define SCAN_COUNT_MAX 100
/* Disable DIP switch in matrix data */

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -15,7 +15,6 @@
*/
#include "quantum.h"
#include "keychron_common.h"
// clang-format off
@ -41,14 +40,3 @@ bool dip_switch_update_kb(uint8_t index, bool active) {
return true;
}
#endif // DIP_SWITCH_ENABLE
#if defined(ENCODER_ENABLE) && defined(PAL_USE_CALLBACKS)
void keyboard_post_init_kb(void) {
keyboard_post_init_keychron();
// allow user keymaps to do custom post_init
keyboard_post_init_user();
}
#endif

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -17,10 +17,7 @@
#pragma once
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 4, 4 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 4, 4 } }
#define SCAN_COUNT_MAX 100
/* Disable DIP switch in matrix data */

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -33,10 +33,7 @@
{ 0xB6, 0xB6, 0x56, 0xB6, 0xB6, 0x56, 0xB6, 0xB6, 0x56, 0xB6, 0xB6, 0x56 }
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 5, 4 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 5, 4 } }
#define SCAN_COUNT_MAX 100
/* Disable DIP switch in matrix data */

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -15,7 +15,6 @@
*/
#include "quantum.h"
#include "keychron_common.h"
const matrix_row_t matrix_mask[] = {
0b111111111111111111,
@ -37,14 +36,3 @@ bool dip_switch_update_kb(uint8_t index, bool active) {
return true;
}
#endif
#if defined(ENCODER_ENABLE) && defined(PAL_USE_CALLBACKS)
void keyboard_post_init_kb(void) {
keyboard_post_init_keychron();
// allow user keymaps to do custom post_init
keyboard_post_init_user();
}
#endif

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -33,10 +33,7 @@
{ 0xA4, 0xA4, 0x52, 0xA4, 0xA4, 0x52, 0xA4, 0xA4, 0x52, 0xA4, 0xA4, 0x52 }
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 5, 4 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 5, 4 } }
#define SCAN_COUNT_MAX 100
/* Disable DIP switch in matrix data */

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -30,7 +30,7 @@ enum layers{
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_iso_110(
KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LAPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_NO, KC_NO, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16,
KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_NO, KC_NO, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,

View File

@ -30,7 +30,7 @@ enum layers{
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_iso_110(
KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LAPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_NO, KC_NO, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16,
KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_NO, KC_NO, RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -15,7 +15,6 @@
*/
#include "quantum.h"
#include "keychron_common.h"
const matrix_row_t matrix_mask[] = {
0b11111111111111111111,
@ -37,14 +36,3 @@ bool dip_switch_update_kb(uint8_t index, bool active) {
return true;
}
#endif
#if defined(ENCODER_ENABLE) && defined(PAL_USE_CALLBACKS)
void keyboard_post_init_kb(void) {
keyboard_post_init_keychron();
// allow user keymaps to do custom post_init
keyboard_post_init_user();
}
#endif

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -32,10 +32,7 @@
{ 0xD8, 0xD8, 0x60, 0xD8, 0xD8, 0x60, 0xD8, 0xD8, 0x60, 0xD8, 0xD8, 0x60 }
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 4, 4 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 4, 4 } }
#define SCAN_COUNT_MAX 100
/* Disable DIP switch in matrix data */

View File

@ -45,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN1), MO(_FN2), KC_LEFT, KC_DOWN, KC_RGHT),
[MAC_FN1] = LAYOUT_ansi_73(
RGB_TOG, KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LAPD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
RGB_TOG, KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

View File

@ -37,10 +37,7 @@
#define MATRIX_MASKED
/* DIP switch */
#define DIP_SWITCH_MATRIX_GRID \
{ \
{ 4, 4 } \
}
#define DIP_SWITCH_MATRIX_GRID { { 4, 4 } }
#define SCAN_COUNT_MAX 100
/* Turn off effects when suspended */

View File

@ -15,7 +15,6 @@
*/
#include "quantum.h"
#include "keychron_common.h"
const matrix_row_t matrix_mask[] = {
0b1111111111111111,
@ -34,14 +33,3 @@ bool dip_switch_update_kb(uint8_t index, bool active) {
return true;
}
#endif
#if defined(ENCODER_ENABLE) && defined(PAL_USE_CALLBACKS)
void keyboard_post_init_kb(void) {
keyboard_post_init_keychron();
// allow user keymaps to do custom post_init
keyboard_post_init_user();
}
#endif

View File

@ -1,4 +1,6 @@
# Build Options
# change yes to no to disable.
#
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = embedded_flash

Some files were not shown because too many files have changed in this diff Show More