From 4ae1d186dc649ab70a90a199ddf238a4ecdeaf4a Mon Sep 17 00:00:00 2001 From: Nuclear Squid Date: Wed, 12 Mar 2025 15:50:44 +0100 Subject: [PATCH 1/2] feat(qmk): Add support for the keychron Q10. Fixes #68 --- qmk/arsenik.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ qmk/rules.mk | 1 + 2 files changed, 49 insertions(+) diff --git a/qmk/arsenik.h b/qmk/arsenik.h index 9804b62..d9d9777 100644 --- a/qmk/arsenik.h +++ b/qmk/arsenik.h @@ -307,6 +307,54 @@ k51, k52, k53, k54, k55, k56\ ) +#elif defined ARSENIK_LAYOUT_ansi_89 +#define ARSENIK_LAYOUT(\ + k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\ + k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\ + k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\ + k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c,\ + k51, k52, k53, k54, k55, k56\ + ) LAYOUT_ansi_90(\ + 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,\ + __, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, KC_EQL, KC_BSPC, KC_PGUP,\ + __, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, KC_RBRC, KC_BSLS, KC_PGDN,\ + __, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, KC_ENT, KC_HOME,\ + __, k41, k42, k43, k44, k45, k46, k46, k47, k48, k49, k4a, k4b, k4c, KC_UP,\ + __, KC_LCTL, _GUI, k51, k52, k53, k55, k56, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT\ + ) + +#elif defined ARSENIK_LAYOUT_iso_90 +#define ARSENIK_LAYOUT(\ + k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\ + k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\ + k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\ + k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c,\ + k51, k52, k53, k54, k55, k56\ + ) LAYOUT_iso_91(\ + 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,\ + __, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, KC_EQL, KC_BSPC, KC_PGUP,\ + __, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, KC_RBRC, KC_PGDN,\ + __, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, KC_NUHS, KC_ENT, KC_HOME,\ + __, KC_NUBS, k41, k42, k43, k44, k45, k46, k46, k47, k48, k49, k4a, k4b, k4c, KC_UP,\ + __, KC_LCTL, _GUI, k51, k52, k53, k55, k56, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT\ + ) + +#elif defined ARSENIK_LAYOUT_iso_90_angle_mod +#define ARSENIK_LAYOUT(\ + k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\ + k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\ + k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\ + k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c,\ + k51, k52, k53, k54, k55, k56\ + ) LAYOUT_iso_91(\ + 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,\ + __, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, KC_EQL, KC_BSPC, KC_PGUP,\ + __, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, KC_RBRC, KC_PGDN,\ + __, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, KC_NUHS, KC_ENT, KC_HOME,\ + __, k41, k42, k43, k44, k45, k46, KC_NUBS, k46, k47, k48, k49, k4a, k4b, k4c, KC_UP,\ + __, KC_LCTL, _GUI, k51, k52, k53, k55, k56, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT\ + ) + #else # error "Arsenik: Unknown layout" #endif diff --git a/qmk/rules.mk b/qmk/rules.mk index 6c605da..65236e2 100644 --- a/qmk/rules.mk +++ b/qmk/rules.mk @@ -1 +1,2 @@ +ENCODER_MAP_ENABLE = no # As-QMK can’t use rotary encoders yet MOUSEKEY_ENABLE = yes From 0407eb197ed0af6a7b102d9e4f7b75066c98712d Mon Sep 17 00:00:00 2001 From: Nuclear Squid Date: Fri, 14 Mar 2025 12:08:11 +0100 Subject: [PATCH 2/2] Enable rotary encoder support. --- qmk/arsenik.h | 24 ++++++++++++++++++++++++ qmk/keymap.c | 10 ++++++++++ qmk/rules.mk | 1 - 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/qmk/arsenik.h b/qmk/arsenik.h index d9d9777..64595fb 100644 --- a/qmk/arsenik.h +++ b/qmk/arsenik.h @@ -323,6 +323,14 @@ __, KC_LCTL, _GUI, k51, k52, k53, k55, k56, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT\ ) +# define AS_ROTARY_ENCODER_LIST_BASE { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, +# define AS_ROTARY_ENCODER_LIST_LAFAYETTE { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, +# define AS_ROTARY_ENCODER_LIST_NUM_ROW { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, +# define AS_ROTARY_ENCODER_LIST_VIM_NAV { ENCODER_CCW_CW(KC_BRIGHTNESS_UP, KC_BRIGHTNESS_DOWN) }, +# define AS_ROTARY_ENCODER_LIST_NUM_NAV { ENCODER_CCW_CW(KC_BRIGHTNESS_UP, KC_BRIGHTNESS_DOWN) }, +# define AS_ROTARY_ENCODER_LIST_NUM_PAD { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, +# define AS_ROTARY_ENCODER_LIST_FUN_PAD { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + #elif defined ARSENIK_LAYOUT_iso_90 #define ARSENIK_LAYOUT(\ k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\ @@ -339,6 +347,14 @@ __, KC_LCTL, _GUI, k51, k52, k53, k55, k56, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT\ ) +# define AS_ROTARY_ENCODER_LIST_BASE { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, +# define AS_ROTARY_ENCODER_LIST_LAFAYETTE { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, +# define AS_ROTARY_ENCODER_LIST_NUM_ROW { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, +# define AS_ROTARY_ENCODER_LIST_VIM_NAV { ENCODER_CCW_CW(KC_BRIGHTNESS_UP, KC_BRIGHTNESS_DOWN) }, +# define AS_ROTARY_ENCODER_LIST_NUM_NAV { ENCODER_CCW_CW(KC_BRIGHTNESS_UP, KC_BRIGHTNESS_DOWN) }, +# define AS_ROTARY_ENCODER_LIST_NUM_PAD { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, +# define AS_ROTARY_ENCODER_LIST_FUN_PAD { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + #elif defined ARSENIK_LAYOUT_iso_90_angle_mod #define ARSENIK_LAYOUT(\ k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\ @@ -355,6 +371,14 @@ __, KC_LCTL, _GUI, k51, k52, k53, k55, k56, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT\ ) +# define AS_ROTARY_ENCODER_LIST_BASE { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, +# define AS_ROTARY_ENCODER_LIST_LAFAYETTE { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, +# define AS_ROTARY_ENCODER_LIST_NUM_ROW { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, +# define AS_ROTARY_ENCODER_LIST_VIM_NAV { ENCODER_CCW_CW(KC_BRIGHTNESS_UP, KC_BRIGHTNESS_DOWN) }, +# define AS_ROTARY_ENCODER_LIST_NUM_NAV { ENCODER_CCW_CW(KC_BRIGHTNESS_UP, KC_BRIGHTNESS_DOWN) }, +# define AS_ROTARY_ENCODER_LIST_NUM_PAD { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, +# define AS_ROTARY_ENCODER_LIST_FUN_PAD { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + #else # error "Arsenik: Unknown layout" #endif diff --git a/qmk/keymap.c b/qmk/keymap.c index 288b3d6..9b2a551 100644 --- a/qmk/keymap.c +++ b/qmk/keymap.c @@ -83,6 +83,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; +#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [MAC_FN] = { ENCODER_CCW_CW(RM_VALD, RM_VALU) }, + [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [WIN_FN] = { ENCODER_CCW_CW(RM_VALD, RM_VALU) } +}; +#endif + + // This is where you’ll write most of your custom code for your keyborad. // This callback is called right before the keycode is sent to the OS. // diff --git a/qmk/rules.mk b/qmk/rules.mk index 65236e2..6c605da 100644 --- a/qmk/rules.mk +++ b/qmk/rules.mk @@ -1,2 +1 @@ -ENCODER_MAP_ENABLE = no # As-QMK can’t use rotary encoders yet MOUSEKEY_ENABLE = yes