From 4b9687098d1795bd3299e6dca2dcc07114f7a997 Mon Sep 17 00:00:00 2001 From: adophoxia <100170946+adophoxia@users.noreply.github.com> Date: Sun, 9 Apr 2023 18:02:39 -0700 Subject: [PATCH] Update Q0; Port Keychron Q0 Plus to VIAL (#416) * Update Q0; Port Keychron Q0 Plus to VIAL * Update VIAL UIDs for Q0 and Q0 Plus * Remove `via` keymaps and mentions of `VIA_ENABLE = yes` for `keychron` keymaps for Q0 and Q0 Plus * Update readme.md * Add VIAL-specific flags for `vial` keymap --- keyboards/keychron/q0/config.h | 79 +-------- keyboards/keychron/q0/q0.c | 6 +- keyboards/keychron/q0/q0.h | 23 --- keyboards/keychron/q0/readme.md | 8 +- keyboards/keychron/q0/rev_0130/config.h | 4 + keyboards/keychron/q0/rev_0130/info.json | 125 +++++++++++--- .../q0/rev_0130/keymaps/default/keymap.c | 12 +- .../q0/rev_0130/keymaps/keychron/keymap.c | 65 ++++++++ .../q0/rev_0130/keymaps/keychron/rules.mk | 4 + .../q0/rev_0130/keymaps/vial/config.h | 2 +- .../q0/rev_0130/keymaps/vial/keymap.c | 26 ++- .../q0/rev_0130/keymaps/vial/rules.mk | 5 +- .../q0/rev_0130/keymaps/vial/vial.json | 20 +-- keyboards/keychron/q0/rev_0130/rev_0130.c | 33 ---- keyboards/keychron/q0/rev_0130/rules.mk | 22 --- .../rev_0130.h => rev_0131/config.h} | 34 ++-- keyboards/keychron/q0/rev_0131/info.json | 138 +++++++++++++++ .../q0/rev_0131/keymaps/default/keymap.c | 49 ++++++ .../q0/rev_0131/keymaps/default/rules.mk | 1 + .../q0/rev_0131/keymaps/keychron/keymap.c | 83 +++++++++ .../q0/rev_0131/keymaps/keychron/rules.mk | 2 + .../q0/rev_0131/keymaps/vial/config.h | 8 + .../q0/rev_0131/keymaps/vial/keymap.c | 83 +++++++++ .../q0/rev_0131/keymaps/vial/rules.mk | 7 + .../q0/rev_0131/keymaps/vial/vial.json | 157 ++++++++++++++++++ keyboards/keychron/q0/rev_0131/readme.md | 6 + keyboards/keychron/q0/rev_0131/rev_0131.c | 62 +++++++ keyboards/keychron/q0/rev_0131/rules.mk | 5 + 28 files changed, 839 insertions(+), 230 deletions(-) delete mode 100644 keyboards/keychron/q0/q0.h create mode 100644 keyboards/keychron/q0/rev_0130/keymaps/keychron/keymap.c create mode 100644 keyboards/keychron/q0/rev_0130/keymaps/keychron/rules.mk rename keyboards/keychron/q0/{rev_0130/rev_0130.h => rev_0131/config.h} (57%) create mode 100644 keyboards/keychron/q0/rev_0131/info.json create mode 100644 keyboards/keychron/q0/rev_0131/keymaps/default/keymap.c create mode 100644 keyboards/keychron/q0/rev_0131/keymaps/default/rules.mk create mode 100644 keyboards/keychron/q0/rev_0131/keymaps/keychron/keymap.c create mode 100644 keyboards/keychron/q0/rev_0131/keymaps/keychron/rules.mk create mode 100644 keyboards/keychron/q0/rev_0131/keymaps/vial/config.h create mode 100644 keyboards/keychron/q0/rev_0131/keymaps/vial/keymap.c create mode 100644 keyboards/keychron/q0/rev_0131/keymaps/vial/rules.mk create mode 100644 keyboards/keychron/q0/rev_0131/keymaps/vial/vial.json create mode 100644 keyboards/keychron/q0/rev_0131/readme.md create mode 100644 keyboards/keychron/q0/rev_0131/rev_0131.c create mode 100644 keyboards/keychron/q0/rev_0131/rules.mk diff --git a/keyboards/keychron/q0/config.h b/keyboards/keychron/q0/config.h index 9422fadb42..454d8a2cc6 100644 --- a/keyboards/keychron/q0/config.h +++ b/keyboards/keychron/q0/config.h @@ -16,86 +16,11 @@ #pragma once -/* key matrix size */ -#define MATRIX_ROWS 6 -#define MATRIX_COLS 4 - -/* key matrix pins */ -#define MATRIX_ROW_PINS { B5, B4, B3, A15, A14, A13 } -#define MATRIX_COL_PINS { A5, A6, A7, B0 } - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION ROW2COL - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 - -/* RGB Matrix Driver Configuration */ -#define DRIVER_COUNT 1 -#define DRIVER_ADDR_1 0b1110100 - -#define CKLED2001_CURRENT_TUNE \ - { 0xFF, 0xFF, 0x70, 0xFF, 0xFF, 0x70, 0xFF, 0xFF, 0x70, 0xFF, 0xFF, 0x70 } - -#define RGB_MATRIX_CENTER \ - { 56, 16 } - -/* NKRO */ -#define FORCE_NKRO +#define CKLED2001_CURRENT_TUNE { 0xFF, 0xFF, 0x70, 0xFF, 0xFF, 0x70, 0xFF, 0xFF, 0x70, 0xFF, 0xFF, 0x70 } /* turn off effects when suspended */ #define RGB_DISABLE_WHEN_USB_SUSPENDED /* EEPROM Driver Configuration */ #define WEAR_LEVELING_LOGICAL_SIZE 2048 -#define WEAR_LEVELING_BACKING_SIZE (WEAR_LEVELING_LOGICAL_SIZE * 2) - -// RGB Matrix Animation modes. Explicitly enabled -// For full list of effects, see: -// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects -// #define ENABLE_RGB_MATRIX_ALPHAS_MODS -// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN -// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT -#define ENABLE_RGB_MATRIX_BREATHING -// #define ENABLE_RGB_MATRIX_BAND_SAT -// #define ENABLE_RGB_MATRIX_BAND_VAL -// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT -// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL -// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT -// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL -#define ENABLE_RGB_MATRIX_CYCLE_ALL -#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT -#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN -#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON -#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN -#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL -#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL -#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL -#define ENABLE_RGB_MATRIX_DUAL_BEACON -#define ENABLE_RGB_MATRIX_RAINBOW_BEACON -// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS -#define ENABLE_RGB_MATRIX_RAINDROPS -// #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS -// #define ENABLE_RGB_MATRIX_HUE_BREATHING -// #define ENABLE_RGB_MATRIX_HUE_PENDULUM -// #define ENABLE_RGB_MATRIX_HUE_WAVE -// #define ENABLE_RGB_MATRIX_PIXEL_RAIN -// #define ENABLE_RGB_MATRIX_PIXEL_FLOW -// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL -// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined -#define ENABLE_RGB_MATRIX_TYPING_HEATMAP -#define ENABLE_RGB_MATRIX_DIGITAL_RAIN -// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined -#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE -#define ENABLE_RGB_MATRIX_SOLID_REACTIVE -#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE -#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE -#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS -#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS -#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS -#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS -#define ENABLE_RGB_MATRIX_SPLASH -#define ENABLE_RGB_MATRIX_MULTISPLASH -#define ENABLE_RGB_MATRIX_SOLID_SPLASH -#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH -// #define RGB_MATRIX_KEYPRESSES \ No newline at end of file +#define WEAR_LEVELING_BACKING_SIZE (WEAR_LEVELING_LOGICAL_SIZE * 2) \ No newline at end of file diff --git a/keyboards/keychron/q0/q0.c b/keyboards/keychron/q0/q0.c index d17ab77f47..672c8111d3 100644 --- a/keyboards/keychron/q0/q0.c +++ b/keyboards/keychron/q0/q0.c @@ -14,7 +14,7 @@ * along with this program. If not, see . */ -#include "q0.h" +#include "quantum.h" #if defined(RGB_MATRIX_ENABLE) && defined(NUM_LOCK_LED_INDEX) @@ -42,9 +42,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) { return true; } -__attribute__((weak)) void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { - // RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue); - +void rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (host_keyboard_led_state().num_lock) { RGB_MATRIX_INDICATOR_SET_COLOR(NUM_LOCK_LED_INDEX, 255, 255, 255); } else { diff --git a/keyboards/keychron/q0/q0.h b/keyboards/keychron/q0/q0.h deleted file mode 100644 index 6eaa41e87c..0000000000 --- a/keyboards/keychron/q0/q0.h +++ /dev/null @@ -1,23 +0,0 @@ -/* 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 . - */ - -#pragma once - -#include "quantum.h" - -#if defined(KEYBOARD_keychron_q0_rev_0130) -# include "rev_0130.h" -#endif diff --git a/keyboards/keychron/q0/readme.md b/keyboards/keychron/q0/readme.md index d0180d386e..cab643be3b 100644 --- a/keyboards/keychron/q0/readme.md +++ b/keyboards/keychron/q0/readme.md @@ -7,12 +7,12 @@ A customizable number keypad. * Hardware Availability: [Keychron](https://www.keychron.com) Make example for this keyboard (after setting up your build environment): - - make keychron/q0/rev_0130:default + + make keychron/q0/rev_0131:vial (Keychron Q0 Plus) Flashing example for this keyboard: - - make keychron/q0/rev_0130:default:flash + + make keychron/q0/rev_0131:vial:flash (Keychron Q0 Plus) **Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard. diff --git a/keyboards/keychron/q0/rev_0130/config.h b/keyboards/keychron/q0/rev_0130/config.h index e7fabed664..6b5bf30fda 100644 --- a/keyboards/keychron/q0/rev_0130/config.h +++ b/keyboards/keychron/q0/rev_0130/config.h @@ -16,6 +16,10 @@ #pragma once +/* RGB Matrix Driver Configuration */ +#define DRIVER_COUNT 1 +#define DRIVER_ADDR_1 0b1110100 + /* RGB Matrix Configuration */ #define DRIVER_1_LED_TOTAL 21 #define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL diff --git a/keyboards/keychron/q0/rev_0130/info.json b/keyboards/keychron/q0/rev_0130/info.json index d42a43ef66..cf1503db23 100644 --- a/keyboards/keychron/q0/rev_0130/info.json +++ b/keyboards/keychron/q0/rev_0130/info.json @@ -6,38 +6,117 @@ "usb": { "vid": "0x3434", "pid": "0x0130", - "device_version": "1.0.2" + "device_version": "1.0.2", + "force_nkro": true + }, + "matrix_pins": { + "cols": ["A5", "A6", "A7", "B0"], + "rows": ["B5", "B4", "B3", "A15", "A14", "A13"] + }, + "features": { + "audio": false, + "backlight": false, + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgb_matrix": true, + "rgblight": false + }, + "diode_direction": "ROW2COL", + "bootmagic": { + "matrix": [0, 1] + }, + "processor": "STM32L432", + "bootloader": "stm32-dfu", + "rgb_matrix": { + "driver": "CKLED2001", + "animations": { + "band_spiral_val": true, + "cycle_all": true, + "cycle_left_right": true, + "cycle_up_down": true, + "rainbow_moving_chevron": true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "dual_beacon": true, + "rainbow_beacon": true, + "jellybean_raindrops": true, + "pixel_rain": true, + "typing_heatmap": true, + "digital_rain": true, + "solid_reactive_simple": true, + "solid_reactive_multiwide": true, + "solid_reactive_multinexus": true, + "splash": true, + "solid_splash": true, + "keypresses": true, + "framebuffer_effects": true + }, + "center_point": [56, 16], + "layout": [ + {"flags": 1,"matrix":[0,0], "x":0, "y":0}, + {"flags": 1,"matrix":[0,1], "x":1, "y":0}, + {"flags": 1,"matrix":[0,2], "x":2, "y":0}, + {"flags": 1,"matrix":[0,3], "x":3, "y":0}, + + {"flags": 9,"matrix":[1,0], "x":0, "y":6}, + {"flags": 4,"matrix":[1,1], "x":1, "y":6}, + {"flags": 4,"matrix":[1,2], "x":2, "y":6}, + {"flags": 4,"matrix":[1,3], "x":3, "y":6}, + + {"flags": 4,"matrix":[2,0], "x":0, "y":13}, + {"flags": 4,"matrix":[2,1], "x":1, "y":13}, + {"flags": 4,"matrix":[2,2], "x":2, "y":13}, + + {"flags": 4,"matrix":[3,0], "x":0, "y":19}, + {"flags": 4,"matrix":[3,1], "x":1, "y":19}, + {"flags": 4,"matrix":[3,2], "x":2, "y":19}, + {"flags": 4,"matrix":[2,3], "x":3, "y":16}, + + {"flags": 4,"matrix":[4,0], "x":0, "y":25}, + {"flags": 4,"matrix":[4,1], "x":1, "y":25}, + {"flags": 4,"matrix":[4,2], "x":2, "y":25}, + + {"flags": 4,"matrix":[5,0], "x":0, "y":32}, + {"flags": 4,"matrix":[5,2], "x":2, "y":32}, + {"flags": 1,"matrix":[4,3], "x":3, "y":29} + ] }, "layouts": { "LAYOUT_numpad_6x4": { "layout": [ - {"label":"Fn", "x":0, "y":0}, - {"label":"Esc", "x":1, "y":0}, - {"label":"Backspace", "x":2, "y":0}, - {"label":"Tab", "x":3, "y":0}, + {"matrix":[0,0], "x":0, "y":0}, + {"matrix":[0,1], "x":1, "y":0}, + {"matrix":[0,2], "x":2, "y":0}, + {"matrix":[0,3], "x":3, "y":0}, - {"label":"Num Lock", "x":0, "y":1}, - {"label":"/", "x":1, "y":1}, - {"label":"*", "x":2, "y":1}, - {"label":"-", "x":3, "y":1}, + {"matrix":[1,0], "x":0, "y":1}, + {"matrix":[1,1], "x":1, "y":1}, + {"matrix":[1,2], "x":2, "y":1}, + {"matrix":[1,3], "x":3, "y":1}, - {"label":"7", "x":0, "y":2}, - {"label":"8", "x":1, "y":2}, - {"label":"9", "x":2, "y":2}, + {"matrix":[2,0], "x":0, "y":2}, + {"matrix":[2,1], "x":1, "y":2}, + {"matrix":[2,2], "x":2, "y":2}, - {"label":"4", "x":0, "y":3}, - {"label":"5", "x":1, "y":3}, - {"label":"6", "x":2, "y":3}, - {"label":"+", "x":3, "y":2, "h":2}, + {"matrix":[3,0], "x":0, "y":3}, + {"matrix":[3,1], "x":1, "y":3}, + {"matrix":[3,2], "x":2, "y":3}, + {"matrix":[2,3], "x":3, "y":2, "h":2}, - {"label":"1", "x":0, "y":4}, - {"label":"2", "x":1, "y":4}, - {"label":"3", "x":2, "y":4}, + {"matrix":[4,0], "x":0, "y":4}, + {"matrix":[4,1], "x":1, "y":4}, + {"matrix":[4,2], "x":2, "y":4}, - {"label":"0", "x":0, "y":5, "w":2}, - {"label":".", "x":2, "y":5}, - {"label":"Enter", "x":3, "y":4, "h":2} + {"matrix":[5,0], "x":0, "y":5, "w":2}, + {"matrix":[5,2], "x":2, "y":5}, + {"matrix":[4,3], "x":3, "y":4, "h":2} ] } } -} \ No newline at end of file +} diff --git a/keyboards/keychron/q0/rev_0130/keymaps/default/keymap.c b/keyboards/keychron/q0/rev_0130/keymaps/default/keymap.c index 6a05648074..387ff2d686 100644 --- a/keyboards/keychron/q0/rev_0130/keymaps/default/keymap.c +++ b/keyboards/keychron/q0/rev_0130/keymaps/default/keymap.c @@ -20,12 +20,12 @@ enum layers { _BASE, _FN1}; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = LAYOUT_numpad_6x4( - MO(_FN1), KC_ESC, KC_BSPACE, KC_TAB, - KC_NUMLOCK, KC_PSLS, KC_PAST, KC_PMNS, - KC_P7, KC_P8, KC_P9, - KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_P1, KC_P2, KC_P3, - KC_P0, KC_PDOT, KC_PENT), + MO(_FN1), KC_ESC, KC_BSPC, KC_TAB, + KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + KC_P7, KC_P8, KC_P9, + KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_P1, KC_P2, KC_P3, + KC_P0, KC_PDOT, KC_PENT), [_FN1] = LAYOUT_numpad_6x4( _______, KC_MUTE, KC_VOLD, KC_VOLU, diff --git a/keyboards/keychron/q0/rev_0130/keymaps/keychron/keymap.c b/keyboards/keychron/q0/rev_0130/keymaps/keychron/keymap.c new file mode 100644 index 0000000000..73826716fc --- /dev/null +++ b/keyboards/keychron/q0/rev_0130/keymaps/keychron/keymap.c @@ -0,0 +1,65 @@ +/* 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 . + */ + +#include QMK_KEYBOARD_H +#include "keychron_common.h" + +enum layers { _BASE, _FN1, _RESERVED1, _RESERVED2 }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_numpad_6x4( + MO(_FN1), KC_ESC, KC_BSPC, KC_TAB, + KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + KC_P7, KC_P8, KC_P9, + KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_P1, KC_P2, KC_P3, + KC_P0, KC_PDOT, KC_PENT), + + [_FN1] = LAYOUT_numpad_6x4( + _______, KC_MUTE, KC_VOLD, KC_VOLU, + RGB_MOD, RGB_VAI, RGB_HUI, KC_DEL, + RGB_RMOD, RGB_VAD, RGB_HUD, + RGB_SAI, RGB_SPI, KC_MPRV, _______, + RGB_SAD, RGB_SPD, KC_MPLY, + RGB_TOG, KC_MNXT, _______), + + [_RESERVED1] = LAYOUT_numpad_6x4( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, + _______, _______, _______), + + [_RESERVED2] = LAYOUT_numpad_6x4( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, + _______, _______, _______) +}; + +void housekeeping_task_user(void) { + housekeeping_task_keychron(); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (!process_record_keychron(keycode, record)) { + return false; + } + return true; +} diff --git a/keyboards/keychron/q0/rev_0130/keymaps/keychron/rules.mk b/keyboards/keychron/q0/rev_0130/keymaps/keychron/rules.mk new file mode 100644 index 0000000000..e5ae43813e --- /dev/null +++ b/keyboards/keychron/q0/rev_0130/keymaps/keychron/rules.mk @@ -0,0 +1,4 @@ +ENCODER_MAP_ENABLE = yes + +VPATH += keyboards/keychron/common +SRC += keychron_common.c diff --git a/keyboards/keychron/q0/rev_0130/keymaps/vial/config.h b/keyboards/keychron/q0/rev_0130/keymaps/vial/config.h index 5065e78b68..7dab45c639 100644 --- a/keyboards/keychron/q0/rev_0130/keymaps/vial/config.h +++ b/keyboards/keychron/q0/rev_0130/keymaps/vial/config.h @@ -2,7 +2,7 @@ #pragma once -#define VIAL_KEYBOARD_UID {0xCD, 0xB9, 0xD4, 0xC9, 0x53, 0x9A, 0x68, 0xC3} +#define VIAL_KEYBOARD_UID {0xCB, 0x44, 0x98, 0x8F, 0x71, 0xAE, 0x25, 0x99} #define VIAL_UNLOCK_COMBO_ROWS { 0, 4 } #define VIAL_UNLOCK_COMBO_COLS { 0, 3 } diff --git a/keyboards/keychron/q0/rev_0130/keymaps/vial/keymap.c b/keyboards/keychron/q0/rev_0130/keymaps/vial/keymap.c index 078ede4041..73826716fc 100644 --- a/keyboards/keychron/q0/rev_0130/keymaps/vial/keymap.c +++ b/keyboards/keychron/q0/rev_0130/keymaps/vial/keymap.c @@ -1,4 +1,4 @@ -/* Copyright 2022 @ Keychron (https://www.keychron.com) +/* 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 @@ -15,17 +15,18 @@ */ #include QMK_KEYBOARD_H +#include "keychron_common.h" enum layers { _BASE, _FN1, _RESERVED1, _RESERVED2 }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = LAYOUT_numpad_6x4( - MO(_FN1), KC_ESC, KC_BSPACE, KC_TAB, - KC_NUMLOCK, KC_PSLS, KC_PAST, KC_PMNS, - KC_P7, KC_P8, KC_P9, - KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_P1, KC_P2, KC_P3, - KC_P0, KC_PDOT, KC_PENT), + MO(_FN1), KC_ESC, KC_BSPC, KC_TAB, + KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + KC_P7, KC_P8, KC_P9, + KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_P1, KC_P2, KC_P3, + KC_P0, KC_PDOT, KC_PENT), [_FN1] = LAYOUT_numpad_6x4( _______, KC_MUTE, KC_VOLD, KC_VOLU, @@ -51,3 +52,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______) }; + +void housekeeping_task_user(void) { + housekeeping_task_keychron(); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (!process_record_keychron(keycode, record)) { + return false; + } + return true; +} diff --git a/keyboards/keychron/q0/rev_0130/keymaps/vial/rules.mk b/keyboards/keychron/q0/rev_0130/keymaps/vial/rules.mk index 31bb6d699f..c4077f69ff 100644 --- a/keyboards/keychron/q0/rev_0130/keymaps/vial/rules.mk +++ b/keyboards/keychron/q0/rev_0130/keymaps/vial/rules.mk @@ -1,3 +1,6 @@ VIA_ENABLE = yes VIAL_ENABLE = yes -VIALRGB_ENABLE = yes \ No newline at end of file +VIALRGB_ENABLE = yes + +VPATH += keyboards/keychron/common +SRC += keychron_common.c diff --git a/keyboards/keychron/q0/rev_0130/keymaps/vial/vial.json b/keyboards/keychron/q0/rev_0130/keymaps/vial/vial.json index 4e75265ffa..65216a9750 100644 --- a/keyboards/keychron/q0/rev_0130/keymaps/vial/vial.json +++ b/keyboards/keychron/q0/rev_0130/keymaps/vial/vial.json @@ -1,14 +1,14 @@ { - "name": "Keychron Q0", - "vendorId": "0x3434", - "productId": "0x0130", - "lighting": "vialrgb", - "matrix": { - "rows": 6, - "cols": 4 - }, - "layouts": { - "keymap":[ + "name": "Keychron Q0", + "vendorId": "0x3434", + "productId": "0x0130", + "lighting": "vialrgb", + "matrix": { + "rows": 6, + "cols": 4 + }, + "layouts": { + "keymap":[ [ "0,0", "0,1", diff --git a/keyboards/keychron/q0/rev_0130/rev_0130.c b/keyboards/keychron/q0/rev_0130/rev_0130.c index 64c4842086..5d03282dd4 100644 --- a/keyboards/keychron/q0/rev_0130/rev_0130.c +++ b/keyboards/keychron/q0/rev_0130/rev_0130.c @@ -54,37 +54,4 @@ const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { {0, L_1, J_1, K_1}, // 19 {0, C_2, A_2, B_2}, // 20 }; - -#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, 14 }, - { 11, 12, 13, __ }, - { 15, 16, 17, 20 }, - { 18, __, 19, __ } - }, - { - // LED Index to Physical Position - {0,0}, {37,0}, {75,0}, {112,0}, - {0,6}, {37,6}, {75,6}, {112,6}, - {0,13}, {37,13}, {75,13}, - {0,19}, {37,19}, {75,19}, {112,16}, - {0,25}, {37,25}, {75,25}, - {18,32}, {75,32}, {112,29}, - }, - { - // LED Index to Flag - 1, 1, 1, 1, - 9, 4, 4, 4, - 4, 4, 4, - 4, 4, 4, 4, - 4, 4, 4, - 4, 4, 1 - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/q0/rev_0130/rules.mk b/keyboards/keychron/q0/rev_0130/rules.mk index 5a04c755cd..4eebc33437 100644 --- a/keyboards/keychron/q0/rev_0130/rules.mk +++ b/keyboards/keychron/q0/rev_0130/rules.mk @@ -1,25 +1,3 @@ -# MCU name -MCU = STM32L432 - -# Bootloader selection -BOOTLOADER = stm32-dfu - -# Build Options -# change yes to no to disable. -# -BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -MOUSEKEY_ENABLE = yes # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control -CONSOLE_ENABLE = no # Console for debug -COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = yes # Enable USB N-key Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output -DIP_SWITCH_ENABLE = no -RGB_MATRIX_ENABLE = yes -RGB_MATRIX_DRIVER = CKLED2001 -LTO_ENABLE = yes EEPROM_DRIVER = wear_leveling WEAR_LEVELING_DRIVER = embedded_flash diff --git a/keyboards/keychron/q0/rev_0130/rev_0130.h b/keyboards/keychron/q0/rev_0131/config.h similarity index 57% rename from keyboards/keychron/q0/rev_0130/rev_0130.h rename to keyboards/keychron/q0/rev_0131/config.h index d66c880aa9..be99f3d3bc 100644 --- a/keyboards/keychron/q0/rev_0130/rev_0130.h +++ b/keyboards/keychron/q0/rev_0131/config.h @@ -1,4 +1,4 @@ -/* Copyright 2022 @ Keychron (https://www.keychron.com) +/* 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 @@ -16,23 +16,19 @@ #pragma once -#include "quantum.h" +/* RGB Matrix Driver Configuration */ +#define DRIVER_COUNT 1 +#define DRIVER_ADDR_1 0b1110111 -#define XXX KC_NO +/* RGB Matrix Configuration */ +#define DRIVER_1_LED_TOTAL 26 +#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL -#define LAYOUT_numpad_6x4( \ - K00, K01, K02, K03, \ - K10, K11, K12, K13, \ - K20, K21, K22, \ - K30, K31, K32, K23, \ - K40, K41, K42, \ - K50, K52, K43 \ -) \ -{ \ - { K00, K01, K02, K03 }, \ - { K10, K11, K12, K13 }, \ - { K20, K21, K22, K23 }, \ - { K30, K31, K32, XXX }, \ - { K40, K41, K42, K43 }, \ - { K50, XXX, K52, XXX }, \ -} +/* Scan phase of led driver set as MSKPHASE_9CHANNEL(defined as 0x03 in CKLED2001.h) */ +#define PHASE_CHANNEL MSKPHASE_9CHANNEL + +/* Enable num-lock LED */ +#define NUM_LOCK_LED_INDEX 5 + +/* Encoder Configuration */ +#define ENCODER_DEFAULT_POS 0x3 diff --git a/keyboards/keychron/q0/rev_0131/info.json b/keyboards/keychron/q0/rev_0131/info.json new file mode 100644 index 0000000000..2f057ea985 --- /dev/null +++ b/keyboards/keychron/q0/rev_0131/info.json @@ -0,0 +1,138 @@ +{ + "keyboard_name": "Keychron Q0 Plus", + "manufacturer": "Keychron", + "url": "https://github.com/Keychron", + "maintainer": "lalalademaxiya1", + "usb": { + "vid": "0x3434", + "pid": "0x0131", + "device_version": "1.0.0", + "force_nkro": true + }, + "matrix_pins": { + "cols": ["C14", "C15", "A0", "A1", "A2"], + "rows": ["B5", "B4", "B3", "A15", "A14", "A13"] + }, + "features": { + "audio": false, + "backlight": false, + "bootmagic": true, + "command": false, + "console": false, + "encoder": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgb_matrix": true, + "rgblight": false + }, + "diode_direction": "ROW2COL", + "encoder": { + "rotary": [ + {"pin_a": "A3", "pin_b": "A4"} + ] + }, + "bootmagic": { + "matrix": [0, 1] + }, + "processor": "STM32L432", + "bootloader": "stm32-dfu", + "rgb_matrix": { + "driver": "CKLED2001", + "animations": { + "band_spiral_val": true, + "cycle_all": true, + "cycle_left_right": true, + "cycle_up_down": true, + "rainbow_moving_chevron": true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "dual_beacon": true, + "rainbow_beacon": true, + "jellybean_raindrops": true, + "pixel_rain": true, + "typing_heatmap": true, + "digital_rain": true, + "solid_reactive_simple": true, + "solid_reactive_multiwide": true, + "solid_reactive_multinexus": true, + "splash": true, + "solid_splash": true, + "keypresses": true, + "framebuffer_effects": true + }, + "layout": [ + {"flags": 1, "matrix":[0,1], "x":1.25, "y":0}, + {"flags": 1, "matrix":[0,2], "x":2.25, "y":0}, + {"flags": 1, "matrix":[0,3], "x":3.25, "y":0}, + {"flags": 1, "matrix":[0,4], "x":4.25, "y":0}, + + {"flags": 4, "matrix":[1,0], "x":0, "y":1.25}, + {"flags": 8, "matrix":[1,1], "x":1.25, "y":1.25}, + {"flags": 4, "matrix":[1,2], "x":2.25, "y":1.25}, + {"flags": 4, "matrix":[1,3], "x":3.25, "y":1.25}, + {"flags": 4, "matrix":[1,4], "x":4.25, "y":1.25}, + + {"flags": 4, "matrix":[2,0], "x":0, "y":2.25}, + {"flags": 4, "matrix":[2,1], "x":1.25, "y":2.25}, + {"flags": 4, "matrix":[2,2], "x":2.25, "y":2.25}, + {"flags": 4, "matrix":[2,3], "x":3.25, "y":2.25}, + {"flags": 4, "matrix":[2,4], "x":4.25, "y":2.25}, + + {"flags": 4, "matrix":[3,0], "x":0, "y":3.25}, + {"flags": 4, "matrix":[3,1], "x":1.25, "y":3.25}, + {"flags": 4, "matrix":[3,2], "x":2.25, "y":3.25}, + {"flags": 4, "matrix":[3,3], "x":3.25, "y":3.25}, + + {"flags": 4, "matrix":[4,0], "x":0, "y":4.25}, + {"flags": 4, "matrix":[4,1], "x":1.25, "y":4.25}, + {"flags": 4, "matrix":[4,2], "x":2.25, "y":4.25}, + {"flags": 4, "matrix":[4,3], "x":3.25, "y":4.25}, + {"flags": 4, "matrix":[4,4], "x":4.25, "y":4.25}, + + {"flags": 4, "matrix":[5,0], "x":0, "y":5.25}, + {"flags": 4, "matrix":[5,1], "x":1.25, "y":5.25}, + {"flags": 1, "matrix":[5,3], "x":3.25, "y":5.25} + ] + }, + "layouts": { + "LAYOUT_numpad_6x5": { + "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":[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":[2,0], "x":0, "y":2.25}, + {"matrix":[2,1], "x":1.25, "y":2.25}, + {"matrix":[2,2], "x":2.25, "y":2.25}, + {"matrix":[2,3], "x":3.25, "y":2.25}, + {"matrix":[2,4], "x":4.25, "y":2.25, "h":2}, + + {"matrix":[3,0], "x":0, "y":3.25}, + {"matrix":[3,1], "x":1.25, "y":3.25}, + {"matrix":[3,2], "x":2.25, "y":3.25}, + {"matrix":[3,3], "x":3.25, "y":3.25}, + + {"matrix":[4,0], "x":0, "y":4.25}, + {"matrix":[4,1], "x":1.25, "y":4.25}, + {"matrix":[4,2], "x":2.25, "y":4.25}, + {"matrix":[4,3], "x":3.25, "y":4.25}, + {"matrix":[4,4], "x":4.25, "y":4.25, "h":2}, + + {"matrix":[5,0], "x":0, "y":5.25}, + {"matrix":[5,1], "x":1.25, "y":5.25, "w":2}, + {"matrix":[5,3], "x":3.25, "y":5.25} + ] + } + } +} diff --git a/keyboards/keychron/q0/rev_0131/keymaps/default/keymap.c b/keyboards/keychron/q0/rev_0131/keymaps/default/keymap.c new file mode 100644 index 0000000000..f92d6b8362 --- /dev/null +++ b/keyboards/keychron/q0/rev_0131/keymaps/default/keymap.c @@ -0,0 +1,49 @@ +/* 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 . + */ + +#include QMK_KEYBOARD_H + +// clang-format off + +enum layers { + BASE, + FUNC +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = LAYOUT_numpad_6x5( + KC_MUTE, MO(FUNC), KC_ESC, KC_BSPC, KC_TAB, + _______, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + _______, KC_P7, KC_P8, KC_P9, KC_PPLS, + _______, KC_P4, KC_P5, KC_P6, + _______, KC_P1, KC_P2, KC_P3, KC_PENT, + _______, KC_P0, KC_PDOT), + + [FUNC] = LAYOUT_numpad_6x5( + RGB_TOG, _______, KC_MUTE, KC_VOLD, KC_VOLU, + _______, RGB_MOD, RGB_VAI, RGB_HUI, KC_DEL, + _______, RGB_RMOD, RGB_VAD, RGB_HUD, _______, + _______, RGB_SAI, RGB_SPI, KC_MPRV, + _______, RGB_SAD, RGB_SPD, KC_MPLY, _______, + _______, RGB_TOG, KC_MNXT), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [FUNC] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }, +}; +#endif // ENCODER_MAP_ENABLE diff --git a/keyboards/keychron/q0/rev_0131/keymaps/default/rules.mk b/keyboards/keychron/q0/rev_0131/keymaps/default/rules.mk new file mode 100644 index 0000000000..ee32568148 --- /dev/null +++ b/keyboards/keychron/q0/rev_0131/keymaps/default/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/keychron/q0/rev_0131/keymaps/keychron/keymap.c b/keyboards/keychron/q0/rev_0131/keymaps/keychron/keymap.c new file mode 100644 index 0000000000..5d73b5733f --- /dev/null +++ b/keyboards/keychron/q0/rev_0131/keymaps/keychron/keymap.c @@ -0,0 +1,83 @@ +/* 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 . + */ + +#include QMK_KEYBOARD_H +#include "keychron_common.h" + +// clang-format off + +enum layers { + BASE, + FUNC, + L2, + L3 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = LAYOUT_numpad_6x5( + KC_MUTE, MO(FUNC), KC_ESC, KC_BSPC, KC_TAB, + MACRO01, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + MACRO02, KC_P7, KC_P8, KC_P9, KC_PPLS, + MACRO03, KC_P4, KC_P5, KC_P6, + MACRO04, KC_P1, KC_P2, KC_P3, KC_PENT, + MACRO05, KC_P0, KC_PDOT), + + [FUNC] = LAYOUT_numpad_6x5( + RGB_TOG, _______, KC_MUTE, KC_VOLD, KC_VOLU, + MACRO01, RGB_MOD, RGB_VAI, RGB_HUI, KC_DEL, + MACRO02, RGB_RMOD, RGB_VAD, RGB_HUD, _______, + MACRO03, RGB_SAI, RGB_SPI, KC_MPRV, + MACRO04, RGB_SAD, RGB_SPD, KC_MPLY, _______, + MACRO05, RGB_TOG, KC_MNXT), + + [L2] = LAYOUT_numpad_6x5( + _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, _______), + + [L3] = LAYOUT_numpad_6x5( + _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, _______) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [FUNC] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }, + [L2] = { ENCODER_CCW_CW(_______, _______) }, + [L3] = { ENCODER_CCW_CW(_______, _______) } +}; +#endif // ENCODER_MAP_ENABLE + +// clang-format on + +void housekeeping_task_user(void) { + housekeeping_task_keychron(); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (!process_record_keychron(keycode, record)) { + return false; + } + return true; +} diff --git a/keyboards/keychron/q0/rev_0131/keymaps/keychron/rules.mk b/keyboards/keychron/q0/rev_0131/keymaps/keychron/rules.mk new file mode 100644 index 0000000000..4b0e1da76e --- /dev/null +++ b/keyboards/keychron/q0/rev_0131/keymaps/keychron/rules.mk @@ -0,0 +1,2 @@ +VPATH += keyboards/keychron/common +SRC += keychron_common.c diff --git a/keyboards/keychron/q0/rev_0131/keymaps/vial/config.h b/keyboards/keychron/q0/rev_0131/keymaps/vial/config.h new file mode 100644 index 0000000000..15f11cf4df --- /dev/null +++ b/keyboards/keychron/q0/rev_0131/keymaps/vial/config.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#define VIAL_KEYBOARD_UID {0xD2, 0xD3, 0x91, 0xAE, 0xA4, 0x06, 0x6C, 0x30} + +#define VIAL_UNLOCK_COMBO_ROWS { 0, 4 } +#define VIAL_UNLOCK_COMBO_COLS { 1, 4 } diff --git a/keyboards/keychron/q0/rev_0131/keymaps/vial/keymap.c b/keyboards/keychron/q0/rev_0131/keymaps/vial/keymap.c new file mode 100644 index 0000000000..52e1ee2eb2 --- /dev/null +++ b/keyboards/keychron/q0/rev_0131/keymaps/vial/keymap.c @@ -0,0 +1,83 @@ +/* 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 . + */ + +#include QMK_KEYBOARD_H +#include "keychron_common.h" + +// clang-format off + +enum layers { + BASE, + FUNC, + L2, + L3 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = LAYOUT_numpad_6x5( + KC_MUTE, MO(FUNC), KC_ESC, KC_BSPC, KC_TAB, + MACRO01, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + MACRO02, KC_P7, KC_P8, KC_P9, KC_PPLS, + MACRO03, KC_P4, KC_P5, KC_P6, + MACRO04, KC_P1, KC_P2, KC_P3, KC_PENT, + MACRO05, KC_P0, KC_PDOT), + + [FUNC] = LAYOUT_numpad_6x5( + RGB_TOG, _______, KC_MUTE, KC_VOLD, KC_VOLU, + MACRO01, RGB_MOD, RGB_VAI, RGB_HUI, KC_DEL, + MACRO02, RGB_RMOD, RGB_VAD, RGB_HUD, _______, + MACRO03, RGB_SAI, RGB_SPI, KC_MPRV, + MACRO04, RGB_SAD, RGB_SPD, KC_MPLY, _______, + MACRO05, RGB_TOG, KC_MNXT), + + [L2] = LAYOUT_numpad_6x5( + _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, _______), + + [L3] = LAYOUT_numpad_6x5( + _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, _______, + _______, _______, _______) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [FUNC] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }, + [L2] = { ENCODER_CCW_CW(_______, _______) }, + [L3] = { ENCODER_CCW_CW(_______, _______) } +}; +#endif // ENCODER_MAP_ENABLE + +// clang-format on + +void housekeeping_task_user(void) { + housekeeping_task_keychron(); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (!process_record_keychron(keycode, record)) { + return false; + } + return true; +} diff --git a/keyboards/keychron/q0/rev_0131/keymaps/vial/rules.mk b/keyboards/keychron/q0/rev_0131/keymaps/vial/rules.mk new file mode 100644 index 0000000000..c4ca639d6c --- /dev/null +++ b/keyboards/keychron/q0/rev_0131/keymaps/vial/rules.mk @@ -0,0 +1,7 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes +VIALRGB_ENABLE = yes +ENCODER_MAP_ENABLE = yes + +VPATH += keyboards/keychron/common +SRC += keychron_common.c diff --git a/keyboards/keychron/q0/rev_0131/keymaps/vial/vial.json b/keyboards/keychron/q0/rev_0131/keymaps/vial/vial.json new file mode 100644 index 0000000000..06922df10d --- /dev/null +++ b/keyboards/keychron/q0/rev_0131/keymaps/vial/vial.json @@ -0,0 +1,157 @@ +{ + "name": "Keychron Q0 Plus", + "vendorId": "0x3434", + "productId": "0x0131", + "lighting": "vialrgb", + "customKeycodes": [ + { + "name": "Mission Control", + "title": "Mission Control in macOS", + "shortName": "MCtrl" + }, + { + "name": "Launch Pad", + "title": "Launch Pad in macOS", + "shortName": "LPad" + }, + { + "name": "Left Option", + "title": "Left Option in macOS", + "shortName": "LOpt" + }, + { + "name": "Right Option", + "title": "Right Option in macOS", + "shortName": "ROpt" + }, + { + "name": "Left Cmd", + "title": "Left Command in macOS", + "shortName": "LCmd" + }, + { + "name": "Right Cmd", + "title": "Right Command in macOS", + "shortName": "RCmd" + }, + { + "name": "Siri", + "title": "Siri in macOS", + "shortName": "Siri" + }, + { + "name": "Task View", + "title": "Task View in windows", + "shortName": "Task" + }, + { + "name": "File Explorer", + "title": "File Explorer in windows", + "shortName": "File" + }, + { + "name": "Screen Shot", + "title": "Screenshot in macOS", + "shortName": "SShot" + }, + { + "name": "Cortana", + "title": "Cortana in windows", + "shortName": "Cortana" + } + ], + "matrix": {"rows": 6, "cols": 5}, + "layouts": { + "keymap": [ + [ + "0,0\n\n\n\n\n\n\n\n\ne", + "0,1\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "x": 0.5 + }, + "0,0", + { + "x": 0.25, + "c": "#aaaaaa" + }, + "0,1", + "0,2", + "0,3", + "0,4" + ], + [ + { + "y": 0.25, + "x": 0.5, + "c": "#cccccc" + }, + "1,0", + { + "x": 0.25 + }, + "1,1", + "1,2", + "1,3", + "1,4" + ], + [ + { + "x": 0.5 + }, + "2,0", + { + "x": 0.25 + }, + "2,1", + "2,2", + "2,3", + { + "h": 2 + }, + "2,4" + ], + [ + { + "x": 0.5 + }, + "3,0", + { + "x": 0.25 + }, + "3,1", + "3,2", + "3,3" + ], + [ + { + "x": 0.5 + }, + "4,0", + { + "x": 0.25 + }, + "4,1", + "4,2", + "4,3", + { + "h": 2 + }, + "4,4" + ], + [ + { + "x": 0.5 + }, + "5,0", + { + "x": 0.25, + "w": 2 + }, + "5,1", + "5,3" + ] + ] + } +} diff --git a/keyboards/keychron/q0/rev_0131/readme.md b/keyboards/keychron/q0/rev_0131/readme.md new file mode 100644 index 0000000000..df07c40e49 --- /dev/null +++ b/keyboards/keychron/q0/rev_0131/readme.md @@ -0,0 +1,6 @@ +# The enhanced version with encoder of the Keychron Q0 + +- The name of this keyboard is "Q0 Plus" +- Enable EC11 rotary encoder +- Turn clockwise to increase volume and turn anti-clockwise to decrease volume +- Press the knob button to mute diff --git a/keyboards/keychron/q0/rev_0131/rev_0131.c b/keyboards/keychron/q0/rev_0131/rev_0131.c new file mode 100644 index 0000000000..89f812e681 --- /dev/null +++ b/keyboards/keychron/q0/rev_0131/rev_0131.c @@ -0,0 +1,62 @@ +/* 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 . + */ + +#include "quantum.h" + +#ifdef RGB_MATRIX_ENABLE + +// clang-format off + +const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL] = { +/* Refer to CKLED manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, I_2, G_2, H_2}, + {0, I_3, G_3, H_3}, + {0, I_4, G_4, H_4}, + {0, I_5, G_5, H_5}, + + {0, C_1, A_1, B_1}, + {0, C_2, A_2, B_2}, + {0, C_3, A_3, B_3}, + {0, C_4, A_4, B_4}, + {0, C_5, A_5, B_5}, + + {0, F_1, D_1, E_1}, + {0, F_2, D_2, E_2}, + {0, F_3, D_3, E_3}, + {0, F_4, D_4, E_4}, + {0, F_5, D_5, E_5}, + + {0, I_6, G_6, H_6}, + {0, I_7, G_7, H_7}, + {0, I_8, G_8, H_8}, + {0, I_9, G_9, H_9}, + + {0, C_6, A_6, B_6}, + {0, C_7, A_7, B_7}, + {0, C_8, A_8, B_8}, + {0, C_9, A_9, B_9}, + {0, C_10, A_10, B_10}, + + {0, F_6, D_6, E_6}, + {0, F_7, D_7, E_7}, + {0, F_9, D_9, E_9}, +}; +#endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/q0/rev_0131/rules.mk b/keyboards/keychron/q0/rev_0131/rules.mk new file mode 100644 index 0000000000..4eebc33437 --- /dev/null +++ b/keyboards/keychron/q0/rev_0131/rules.mk @@ -0,0 +1,5 @@ +EEPROM_DRIVER = wear_leveling +WEAR_LEVELING_DRIVER = embedded_flash + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE