Merge remote-tracking branch 'origin/develop' into xap

This commit is contained in:
QMK Bot 2023-10-05 05:01:17 +00:00
commit 621dd83530
77 changed files with 2466 additions and 731 deletions

View File

@ -890,9 +890,15 @@
"kelowna/rgb64": {
"target": "weirdo/kelowna/rgb64"
},
"keychron/q0": {
"target": "keychron/q0/base"
},
"keychron/q1": {
"target": "keychron/q1v1"
}
"keychron/q4": {
"target": "keychron/q4/ansi"
}
"kprepublic/bm40hsrgb": {
"target": "kprepublic/bm40hsrgb/rev1"
},

View File

@ -21,8 +21,7 @@
#define DRIVER_ADDR_1 SNLED27351_I2C_ADDRESS_GND
/* RGB Matrix Configuration */
#define DRIVER_1_LED_TOTAL 21
#define RGB_MATRIX_LED_COUNT DRIVER_1_LED_TOTAL
#define RGB_MATRIX_LED_COUNT 21
/* Enable num-lock LED */
#define NUM_LOCK_LED_INDEX 4

View File

@ -1,58 +1,14 @@
{
"keyboard_name": "Q0",
"manufacturer": "Keychron",
"url": "https://github.com/Keychron",
"maintainer": "lalalademaxiya1",
"usb": {
"vid": "0x3434",
"pid": "0x0130",
"device_version": "1.0.2",
"force_nkro": true
"device_version": "1.0.2"
},
"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",
"processor": "STM32L432",
"bootloader": "stm32-dfu",
"rgb_matrix": {
"driver": "snled27351",
"animations": {
"band_spiral_val": true,
"breathing": 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
},
"center_point": [56, 16],
"layout": [
{"flags": 1, "matrix": [0, 0], "x": 0, "y": 0},
@ -83,6 +39,7 @@
{"flags": 1, "matrix": [4, 3], "x": 112, "y": 29}
]
},
"community_layouts": ["numpad_6x4"],
"layouts": {
"LAYOUT_numpad_6x4": {
"layout": [

View File

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -21,9 +21,5 @@
/* 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)
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS

View File

@ -0,0 +1,52 @@
{
"manufacturer": "Keychron",
"maintainer": "lalalademaxiya1",
"bootloader": "stm32-dfu",
"diode_direction": "ROW2COL",
"eeprom": {
"wear_leveling": {
"backing_size": 4096
}
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true
},
"processor": "STM32L432",
"rgb_matrix": {
"animations": {
"band_spiral_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"digital_rain": true,
"dual_beacon": true,
"jellybean_raindrops": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_simple": true,
"solid_splash": true,
"splash": true,
"typing_heatmap": true
},
"driver": "snled27351"
},
"url": "https://github.com/Keychron",
"usb": {
"force_nkro": true,
"vid": "0x3434"
}
}

View File

@ -21,13 +21,12 @@
#define DRIVER_ADDR_1 SNLED27351_I2C_ADDRESS_VDDIO
/* RGB Matrix Configuration */
#define DRIVER_1_LED_TOTAL 26
#define RGB_MATRIX_LED_COUNT DRIVER_1_LED_TOTAL
#define RGB_MATRIX_LED_COUNT 26
#define SNLED27351_PHASE_CHANNEL SNLED27351_MSKPHASE_9CHANNEL
/* Encoder Configuration*/
#define ENCODER_DEFAULT_POS 0x3
/* Enable num-lock LED */
#define NUM_LOCK_LED_INDEX 5
/* Encoder Configuration */
#define ENCODER_DEFAULT_POS 0x3

View File

@ -1,33 +1,15 @@
{
"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
"device_version": "1.0.0"
},
"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": {
"enabled": true,
"rotary": [
{"pin_a": "A3", "pin_b": "A4"}
]
@ -35,33 +17,7 @@
"bootmagic": {
"matrix": [0, 1]
},
"processor": "STM32L432",
"bootloader": "stm32-dfu",
"rgb_matrix": {
"driver": "snled27351",
"animations": {
"band_spiral_val": true,
"breathing": 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
},
"layout": [
{"flags": 1, "matrix": [0, 1], "x": 56, "y": 0},
{"flags": 1, "matrix": [0, 2], "x": 112, "y": 0},
@ -96,6 +52,7 @@
{"flags": 1, "matrix": [5, 3], "x": 168, "y": 64}
]
},
"community_layouts": ["numpad_6x5"],
"layouts": {
"LAYOUT_numpad_6x5": {
"layout": [

View File

@ -0,0 +1,12 @@
# Keychron Q0 Plus
![Keychron Q0 Plus](https://i.imgur.com/EDbfVVOh.jpg)
* Keyboard Maintainer: [Keychron](https://github.com/keychron)
* Hardware Supported: Keychron Q0 Plus
* Hardware Availability: [Keychron Q0 Plus QMK Custom Number Pad](https://www.keychron.com/products/keychron-q0-plus-qmk-custom-number-pad)
1. The name of this keyboard is "Keychron Q0 Plus"
2. Enables EC11 rotary encoder
- Turn clockwise to increase volume and turn anti-clockwise to decrease volume
- Press the knob button to mute

View File

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -1,18 +1,22 @@
# Keychron Q0
![Keychron Q0](https://i.imgur.com/cLbEiZ0h.jpg)
A customizable number keypad.
* Keyboard Maintainer: [Keychron](https://github.com/keychron)
* Hardware Supported: Keychron Q0
* Hardware Availability: [Keychron](https://www.keychron.com)
* Hardware Availability: [Keychron Q0 QMK Custom Number Pad](https://www.keychron.com/products/keychron-q0-qmk-custom-number-pad)
Make example for this keyboard (after setting up your build environment):
make keychron/q0/rev_0130:default
make keychron/q0/base:default
make keychron/q0/plus:default
Flashing example for this keyboard:
make keychron/q0/rev_0130:default:flash
make keychron/q0/base:default:flash
make keychron/q0/plus:default:flash
**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard.

View File

@ -1,6 +0,0 @@
# 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

View File

@ -1 +0,0 @@
# This file intentionally left blank

View File

@ -0,0 +1,20 @@
/* 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/>.
*/
#pragma once
/* Enable CapsLcok LED*/
#define CAPS_LOCK_LED_INDEX 28

View File

@ -0,0 +1,147 @@
{
"usb": {
"pid": "0x0140",
"device_version": "1.0.6"
},
"rgb_matrix": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 1},
{"matrix": [0, 1], "x": 16, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 32, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 48, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 64, "y": 0, "flags": 4},
{"matrix": [0, 5], "x": 81, "y": 0, "flags": 4},
{"matrix": [0, 6], "x": 97, "y": 0, "flags": 4},
{"matrix": [0, 7], "x": 113, "y": 0, "flags": 4},
{"matrix": [0, 8], "x": 129, "y": 0, "flags": 4},
{"matrix": [0, 9], "x": 145, "y": 0, "flags": 4},
{"matrix": [0, 10], "x": 161, "y": 0, "flags": 4},
{"matrix": [0, 11], "x": 177, "y": 0, "flags": 4},
{"matrix": [0, 12], "x": 193, "y": 0, "flags": 4},
{"matrix": [0, 13], "x": 218, "y": 0, "flags": 1},
{"matrix": [1, 0], "x": 4,"y": 16, "flags": 1},
{"matrix": [1, 1], "x": 24,"y": 16, "flags": 4},
{"matrix": [1, 2], "x": 40,"y": 16, "flags": 4},
{"matrix": [1, 3], "x": 56,"y": 16, "flags": 4},
{"matrix": [1, 4], "x": 73,"y": 16, "flags": 4},
{"matrix": [1, 5], "x": 89,"y": 16, "flags": 4},
{"matrix": [1, 6], "x": 105,"y": 16, "flags": 4},
{"matrix": [1, 7], "x": 121,"y": 16, "flags": 4},
{"matrix": [1, 8], "x": 137,"y": 16, "flags": 4},
{"matrix": [1, 9], "x": 153,"y": 16, "flags": 4},
{"matrix": [1, 10], "x": 169,"y": 16, "flags": 4},
{"matrix": [1, 11], "x": 185,"y": 16, "flags": 4},
{"matrix": [1, 12], "x": 202,"y": 16, "flags": 4},
{"matrix": [1, 13], "x": 222,"y": 16, "flags": 4},
{"matrix": [2, 0], "x": 6, "y": 32, "flags": 8},
{"matrix": [2, 1], "x": 28, "y": 32, "flags": 4},
{"matrix": [2, 2], "x": 44, "y": 32, "flags": 4},
{"matrix": [2, 3], "x": 60, "y": 32, "flags": 4},
{"matrix": [2, 4], "x": 77, "y": 32, "flags": 4},
{"matrix": [2, 5], "x": 93, "y": 32, "flags": 4},
{"matrix": [2, 6], "x": 109, "y": 32, "flags": 4},
{"matrix": [2, 7], "x": 125, "y": 32, "flags": 4},
{"matrix": [2, 8], "x": 141, "y": 32, "flags": 4},
{"matrix": [2, 9], "x": 157, "y": 32, "flags": 4},
{"matrix": [2, 10], "x": 173, "y": 32, "flags": 4},
{"matrix": [2, 11], "x": 189, "y": 32, "flags": 4},
{"matrix": [2, 13], "x": 216, "y": 32, "flags": 1},
{"matrix": [3, 0], "x": 10, "y": 48, "flags": 1},
{"matrix": [3, 2], "x": 36, "y": 48, "flags": 4},
{"matrix": [3, 3], "x": 52, "y": 48, "flags": 4},
{"matrix": [3, 4], "x": 69, "y": 48, "flags": 4},
{"matrix": [3, 5], "x": 85, "y": 48, "flags": 4},
{"matrix": [3, 6], "x": 101, "y": 48, "flags": 4},
{"matrix": [3, 7], "x": 117, "y": 48, "flags": 4},
{"matrix": [3, 8], "x": 133, "y": 48, "flags": 4},
{"matrix": [3, 9], "x": 149, "y": 48, "flags": 4},
{"matrix": [3, 10], "x": 165, "y": 48, "flags": 4},
{"matrix": [3, 11], "x": 181, "y": 48, "flags": 4},
{"matrix": [3, 13], "x": 212, "y": 48, "flags": 1},
{"matrix": [4, 0], "x": 2, "y": 64, "flags": 1},
{"matrix": [4, 1], "x": 22, "y": 64, "flags": 1},
{"matrix": [4, 2], "x": 42, "y": 64, "flags": 1},
{"matrix": [4, 6], "x": 103, "y": 64, "flags": 4},
{"matrix": [4, 10], "x": 164, "y": 64, "flags": 1},
{"matrix": [4, 11], "x": 184, "y": 64, "flags": 1},
{"matrix": [4, 12], "x": 204, "y": 64, "flags": 1},
{"matrix": [4, 13], "x": 224, "y": 64, "flags": 1}
]
},
"layouts": {
"LAYOUT_ansi_61": {
"layout": [
{"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},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 13], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
}
}
}

View File

@ -22,13 +22,7 @@
#define DRIVER_ADDR_2 SNLED27351_I2C_ADDRESS_GND
/* RGB Matrix Configuration */
#define DRIVER_1_LED_TOTAL 31
#define DRIVER_2_LED_TOTAL 30
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
#define RGB_MATRIX_LED_COUNT 61
/* Scan phase of led driver set as SNLED27351_MSKPHASE_9CHANNEL(defined as 0x03 in SNLED27351.h) */
#define SNLED27351_PHASE_CHANNEL SNLED27351_MSKPHASE_9CHANNEL
#define SNLED27351_CURRENT_TUNE \
{ 0xCA, 0xCA, 0x60, 0xCA, 0xCA, 0x60, 0xCA, 0xCA, 0x60, 0xCA, 0xCA, 0x60 }
/* Enable CapsLcok LED*/
#define CAPS_LOCK_LED_INDEX 28

View File

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -92,33 +92,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = {
{1, F_14, D_14, E_14},
};
#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 },
},
{
// LED Index to Physical Position
{0,0}, {16,0}, {32,0}, {48,0}, {64,0}, {81,0}, {97,0}, {113,0}, {129,0}, {145,0}, {161,0}, {177,0}, {193,0}, {218,0},
{4,16}, {24,16}, {40,16}, {56,16}, {73,16}, {89,16}, {105,16}, {121,16}, {137,16}, {153,16}, {169,16}, {185,16}, {202,16}, {222,16},
{6,32}, {28,32}, {44,32}, {60,32}, {77,32}, {93,32}, {109,32}, {125,32}, {141,32}, {157,32}, {173,32}, {189,32}, {216,32},
{10,48}, {36,48}, {52,48}, {69,48}, {85,48}, {101,48}, {117,48}, {133,48}, {149,48}, {165,48}, {181,48}, {212,48},
{2,64}, {22,64}, {42,64}, {103,64}, {164,64}, {184,64}, {204,64}, {224,64},
},
{
// RGB LED Index to Flag
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
1, 1, 1, 4, 1, 1, 1, 1,
}
};
#endif

View File

@ -21,11 +21,4 @@
#define DRIVER_ADDR_1 SNLED27351_I2C_ADDRESS_GND
/* RGB Matrix Configuration */
#define DRIVER_1_LED_TOTAL 61
#define RGB_MATRIX_LED_COUNT DRIVER_1_LED_TOTAL
#define SNLED27351_CURRENT_TUNE \
{ 0xCA, 0xCA, 0x60, 0xCA, 0xCA, 0x60, 0xCA, 0xCA, 0x60, 0xCA, 0xCA, 0x60 }
/* Enable CapsLcok LED*/
#define CAPS_LOCK_LED_INDEX 28
#define RGB_MATRIX_LED_COUNT 61

View File

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -92,33 +92,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = {
{0, F_16, D_16, E_16},
};
#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 },
},
{
// LED Index to Physical Position
{0,0}, {16,0}, {32,0}, {48,0}, {64,0}, {81,0}, {97,0}, {113,0}, {129,0}, {145,0}, {161,0}, {177,0}, {193,0}, {218,0},
{4,16}, {24,16}, {40,16}, {56,16}, {73,16}, {89,16}, {105,16}, {121,16}, {137,16}, {153,16}, {169,16}, {185,16}, {202,16}, {222,16},
{6,32}, {28,32}, {44,32}, {60,32}, {77,32}, {93,32}, {109,32}, {125,32}, {141,32}, {157,32}, {173,32}, {189,32}, {216,32},
{10,48}, {36,48}, {52,48}, {69,48}, {85,48}, {101,48}, {117,48}, {133,48}, {149,48}, {165,48}, {181,48}, {212,48},
{2,64}, {22,64}, {42,64}, {103,64}, {164,64}, {184,64}, {204,64}, {224,64},
},
{
// RGB LED Index to Flag
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
1, 1, 1, 4, 1, 1, 1, 1,
}
};
#endif

View File

@ -1,92 +0,0 @@
{
"keyboard_name": "Keychron Q4",
"manufacturer": "Keychron",
"url": "https://github.com/Keychron",
"maintainer": "lalalademaxiya1",
"usb": {
"vid": "0x3434",
"pid": "0x0140",
"device_version": "1.0.0"
},
"rgb_matrix": {
"driver": "snled27351"
},
"matrix_pins": {
"cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9"],
"rows": ["B4", "B3", "A15", "A14", "A13"]
},
"diode_direction": "ROW2COL",
"processor": "STM32L432",
"bootloader": "stm32-dfu",
"layouts": {
"LAYOUT_ansi_61": {
"layout": [
{"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},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 13], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
}
}
}

View File

@ -1,15 +0,0 @@
# 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 = yes
RGB_MATRIX_ENABLE = yes
LTO_ENABLE = no

View File

@ -1,92 +0,0 @@
{
"keyboard_name": "Keychron Q4",
"manufacturer": "Keychron",
"url": "https://github.com/Keychron",
"maintainer": "lalalademaxiya1",
"usb": {
"vid": "0x3434",
"pid": "0x0140",
"device_version": "1.0.0"
},
"rgb_matrix": {
"driver": "snled27351"
},
"matrix_pins": {
"cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9"],
"rows": ["B4", "B3", "A15", "A14", "A13"]
},
"diode_direction": "ROW2COL",
"processor": "STM32L432",
"bootloader": "stm32-dfu",
"layouts": {
"LAYOUT_ansi_61": {
"layout": [
{"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},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 13], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
}
}
}

View File

@ -1,66 +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 <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// clang-format off
enum layers {
MAC_BASE,
WIN_BASE,
_FN1,
_FN2,
_FN3
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_ansi_61(
KC_ESC, 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_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_BSLS,
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_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_RCTL),
[WIN_BASE] = LAYOUT_ansi_61(
KC_ESC, 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_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_BSLS,
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_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_RCTL),
[_FN1] = LAYOUT_ansi_61(
KC_GRV, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_NO, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
[_FN2] = LAYOUT_ansi_61(
KC_GRV, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, KC_APP, KC_SCRL, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_PSCR, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
[_FN3] = LAYOUT_ansi_61(
KC_TILD, 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_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______)
};
// clang-format on

View File

@ -1,75 +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 <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#include "keychron_common.h"
// clang-format off
enum layers {
MAC_BASE,
WIN_BASE,
_FN1,
_FN2,
_FN3
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_ansi_61(
KC_ESC, 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_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_BSLS,
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_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_RCTL),
[WIN_BASE] = LAYOUT_ansi_61(
KC_ESC, 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_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_BSLS,
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_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_RCTL),
[_FN1] = LAYOUT_ansi_61(
KC_GRV, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_NO, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
[_FN2] = LAYOUT_ansi_61(
KC_GRV, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, KC_APP, KC_SCRL, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_PSCR, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
[_FN3] = LAYOUT_ansi_61(
KC_TILD, 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_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______)
};
// clang-format on
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!process_record_keychron(keycode, record)) {
return false;
}
return true;
}

View File

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

View File

@ -1,66 +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 <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// clang-format off
enum layers {
MAC_BASE,
WIN_BASE,
_FN1,
_FN2,
_FN3
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_ansi_61(
KC_ESC, 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_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_BSLS,
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_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, MO(_FN1), MO(_FN3), KC_RCTL),
[WIN_BASE] = LAYOUT_ansi_61(
KC_ESC, 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_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_BSLS,
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_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN2), MO(_FN3), KC_RCTL),
[_FN1] = LAYOUT_ansi_61(
KC_GRV, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_NO, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
[_FN2] = LAYOUT_ansi_61(
KC_GRV, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, RGB_MOD,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, KC_APP, KC_SCRL, KC_INS, KC_PGUP, KC_HOME, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, KC_UP, KC_PSCR, KC_PGDN, KC_END, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
[_FN3] = LAYOUT_ansi_61(
KC_TILD, 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_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______)
};
// clang-format on

View File

@ -1 +0,0 @@
# The ANSI variant of the Keychron Q4

View File

@ -1,15 +0,0 @@
# 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 = yes
RGB_MATRIX_ENABLE = yes
LTO_ENABLE = no

View File

@ -25,60 +25,8 @@
/* turn off effects when suspended */
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define DYNAMIC_KEYMAP_LAYER_COUNT 5
/* 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 SNLED27351_CURRENT_TUNE \
{ 0xCA, 0xCA, 0x60, 0xCA, 0xCA, 0x60, 0xCA, 0xCA, 0x60, 0xCA, 0xCA, 0x60 }
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS

View File

@ -0,0 +1,62 @@
{
"manufacturer": "Keychron",
"keyboard_name": "Keychron Q4",
"maintainer": "lalalademaxiya1",
"bootloader": "stm32-dfu",
"diode_direction": "ROW2COL",
"dynamic_keymap": {
"layer_count": 5
},
"eeprom": {
"wear_leveling": {
"backing_size": 4096
}
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true,
"rgblight": false
},
"matrix_pins": {
"cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9"],
"rows": ["B4", "B3", "A15", "A14", "A13"]
},
"processor": "STM32L432",
"rgb_matrix": {
"animations": {
"band_spiral_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"digital_rain": true,
"dual_beacon": true,
"jellybean_raindrops": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_simple": true,
"solid_splash": true,
"splash": true,
"typing_heatmap": true
},
"driver": "snled27351"
},
"url": "https://github.com/Keychron",
"usb": {
"vid": "0x3434"
}
}

View File

@ -21,11 +21,7 @@
#define DRIVER_ADDR_1 SNLED27351_I2C_ADDRESS_GND
/* RGB Matrix Configuration */
#define DRIVER_1_LED_TOTAL 62
#define RGB_MATRIX_LED_COUNT DRIVER_1_LED_TOTAL
#define SNLED27351_CURRENT_TUNE \
{ 0xCA, 0xCA, 0x60, 0xCA, 0xCA, 0x60, 0xCA, 0xCA, 0x60, 0xCA, 0xCA, 0x60 }
#define RGB_MATRIX_LED_COUNT 62
/* Enable CapsLcok LED*/
#define CAPS_LOCK_LED_INDEX 27

View File

@ -1,23 +1,78 @@
{
"keyboard_name": "Keychron Q4",
"manufacturer": "Keychron",
"url": "https://github.com/Keychron",
"maintainer": "lalalademaxiya1",
"usb": {
"vid": "0x3434",
"pid": "0x0142",
"device_version": "1.0.0"
},
"rgb_matrix": {
"driver": "snled27351"
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 1},
{"matrix": [0, 1], "x": 16, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 32, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 48, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 64, "y": 0, "flags": 4},
{"matrix": [0, 5], "x": 81, "y": 0, "flags": 4},
{"matrix": [0, 6], "x": 97, "y": 0, "flags": 4},
{"matrix": [0, 7], "x": 113, "y": 0, "flags": 4},
{"matrix": [0, 8], "x": 129, "y": 0, "flags": 4},
{"matrix": [0, 9], "x": 145, "y": 0, "flags": 4},
{"matrix": [0, 10], "x": 161, "y": 0, "flags": 4},
{"matrix": [0, 11], "x": 177, "y": 0, "flags": 4},
{"matrix": [0, 12], "x": 193, "y": 0, "flags": 4},
{"matrix": [0, 13], "x": 218, "y": 0, "flags": 1},
{"matrix": [1, 0], "x": 4, "y": 16, "flags": 1},
{"matrix": [1, 1], "x": 24, "y": 16, "flags": 4},
{"matrix": [1, 2], "x": 40, "y": 16, "flags": 4},
{"matrix": [1, 3], "x": 56, "y": 16, "flags": 4},
{"matrix": [1, 4], "x": 73, "y": 16, "flags": 4},
{"matrix": [1, 5], "x": 89, "y": 16, "flags": 4},
{"matrix": [1, 6], "x": 105, "y": 16, "flags": 4},
{"matrix": [1, 7], "x": 121, "y": 16, "flags": 4},
{"matrix": [1, 8], "x": 137, "y": 16, "flags": 4},
{"matrix": [1, 9], "x": 153, "y": 16, "flags": 4},
{"matrix": [1, 10], "x": 169, "y": 16, "flags": 4},
{"matrix": [1, 11], "x": 185, "y": 16, "flags": 4},
{"matrix": [1, 12], "x": 202, "y": 16, "flags": 4},
{"matrix": [2, 0], "x": 6, "y": 32, "flags": 8},
{"matrix": [2, 1], "x": 28, "y": 32, "flags": 4},
{"matrix": [2, 2], "x": 44, "y": 32, "flags": 4},
{"matrix": [2, 3], "x": 60, "y": 32, "flags": 4},
{"matrix": [2, 4], "x": 77, "y": 32, "flags": 4},
{"matrix": [2, 5], "x": 93, "y": 32, "flags": 4},
{"matrix": [2, 6], "x": 109, "y": 32, "flags": 4},
{"matrix": [2, 7], "x": 125, "y": 32, "flags": 4},
{"matrix": [2, 8], "x": 141, "y": 32, "flags": 4},
{"matrix": [2, 9], "x": 157, "y": 32, "flags": 4},
{"matrix": [2, 10], "x": 173, "y": 32, "flags": 4},
{"matrix": [2, 11], "x": 189, "y": 32, "flags": 4},
{"matrix": [2, 13], "x": 206, "y": 32, "flags": 4},
{"matrix": [1, 13], "x": 224, "y": 24, "flags": 1},
{"matrix": [3, 0], "x": 2, "y": 48, "flags": 1},
{"matrix": [3, 1], "x": 20, "y": 48, "flags": 4},
{"matrix": [3, 2], "x": 36, "y": 48, "flags": 4},
{"matrix": [3, 3], "x": 52, "y": 48, "flags": 4},
{"matrix": [3, 4], "x": 69, "y": 48, "flags": 4},
{"matrix": [3, 5], "x": 85, "y": 48, "flags": 4},
{"matrix": [3, 6], "x": 101, "y": 48, "flags": 4},
{"matrix": [3, 7], "x": 117, "y": 48, "flags": 4},
{"matrix": [3, 8], "x": 133, "y": 48, "flags": 4},
{"matrix": [3, 9], "x": 149, "y": 48, "flags": 4},
{"matrix": [3, 10], "x": 165, "y": 48, "flags": 4},
{"matrix": [3, 11], "x": 181, "y": 48, "flags": 4},
{"matrix": [3, 13], "x": 212, "y": 48, "flags": 1},
{"matrix": [4, 0], "x": 2, "y": 64, "flags": 1},
{"matrix": [4, 1], "x": 22, "y": 64, "flags": 1},
{"matrix": [4, 2], "x": 42, "y": 64, "flags": 1},
{"matrix": [4, 6], "x": 103, "y": 64, "flags": 4},
{"matrix": [4, 10], "x": 164, "y": 64, "flags": 1},
{"matrix": [4, 11], "x": 184, "y": 64, "flags": 1},
{"matrix": [4, 12], "x": 204, "y": 64, "flags": 1},
{"matrix": [4, 13], "x": 224, "y": 64, "flags": 1}
]
},
"matrix_pins": {
"cols": ["C14", "C15", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "A8", "A9"],
"rows": ["B4", "B3", "A15", "A14", "A13"]
},
"diode_direction": "ROW2COL",
"processor": "STM32L432",
"bootloader": "stm32-dfu",
"layouts": {
"LAYOUT_iso_62": {
"layout": [

View File

@ -93,33 +93,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = {
{0, F_16, D_16, E_16},
};
#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, 40 },
{ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, __, 39 },
{ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, __, 53 },
{ 54, 55, 56, __, __, __, 57, __, __, __, 58, 59, 60, 61 },
},
{
// LED Index to Physical Position
{0, 0}, {16, 0}, {32, 0}, {48, 0}, {64, 0}, {81, 0}, { 97, 0}, {113, 0}, {129, 0}, {145, 0}, {161, 0}, {177, 0}, {193, 0}, {218, 0},
{4,16}, {24,16}, {40,16}, {56,16}, {73,16}, {89,16}, {105,16}, {121,16}, {137,16}, {153,16}, {169,16}, {185,16}, {202,16},
{6,32}, {28,32}, {44,32}, {60,32}, {77,32}, {93,32}, {109,32}, {125,32}, {141,32}, {157,32}, {173,32}, {189,32}, {206,32}, {224,24},
{2,48}, {20,48}, {36,48}, {52,48}, {69,48}, {85,48}, {101,48}, {117,48}, {133,48}, {149,48}, {165,48}, {181,48}, {212,48},
{2,64}, {22,64}, {42,64}, {103,64}, {164,64}, {184,64}, {204,64}, {224,64},
},
{
// RGB LED Index to Flag
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
1, 1, 1, 4, 1, 1, 1, 1,
}
};
#endif

View File

@ -1,15 +1 @@
# 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 = yes
RGB_MATRIX_ENABLE = yes
LTO_ENABLE = no
# This file intentionally left blank

View File

@ -1,18 +1,26 @@
# Keychron Q4
![Keychron Q4](https://i.imgur.com/daIVjVGh.jpg)
A customizable 60% keyboard.
Q4 Version 1 uses only 2 ICs for CKLED2001 and Q4 Version 2 uses only one IC.
* Keyboard Maintainer: [Keychron](https://github.com/keychron)
* Hardware Supported: Keychron Q4
* Hardware Availability: [Keychron](https://www.keychron.com)
* Hardware Availability: [Keychron Q4 QMK Custom Mechanical Keyboard](https://www.keychron.com/products/keychron-q4-qmk-via-custom-mechanical-keyboard)
Make example for this keyboard (after setting up your build environment):
make keychron/q4/ansi_v2:default
make keychron/q4/ansi/v1:default
make keychron/q4/ansi/v2:default
make keychron/q4/iso:default
Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
make keychron/q4/ansi_v2:default:flash
make keychron/q4/ansi/v1:default:flash
make keychron/q4/ansi/v2:default:flash
make keychron/q4/iso:default:flash
**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard.

View File

@ -0,0 +1,15 @@
// Copyright 2023 Noah Beidelman (@noahbei)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define I2C_DRIVER I2CD1
#define I2C1_SCL_PAL_MODE 1
#define I2C1_SDA_PAL_MODE 1
#define I2C1_TIMINGR_PRESC 0x00U
#define I2C1_TIMINGR_SCLDEL 0x03U
#define I2C1_TIMINGR_SDADEL 0x01U
#define I2C1_TIMINGR_SCLH 0x03U
#define I2C1_TIMINGR_SCLL 0x09U
#define OLED_TIMEOUT 300000

View File

@ -0,0 +1,8 @@
// Copyright 2023 Noah Beidelman (@noahbei)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define HAL_USE_I2C TRUE
#include_next <halconf.h>

View File

@ -0,0 +1,46 @@
{
"manufacturer": "Prota Designs",
"keyboard_name": "Printed Pad",
"maintainer": "noahbei",
"bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"oled": true
},
"matrix_pins": {
"cols": ["B2", "B1", "B0"],
"rows": ["A10", "C9", "A8", "A9"]
},
"processor": "STM32F072",
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
"vid": "0x5044"
},
"layouts": {
"LAYOUT": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [1, 0], "x": 0, "y": 1 },
{ "matrix": [1, 1], "x": 1, "y": 1 },
{ "matrix": [1, 2], "x": 2, "y": 1 },
{ "matrix": [2, 0], "x": 0, "y": 2 },
{ "matrix": [2, 1], "x": 1, "y": 2 },
{ "matrix": [2, 2], "x": 2, "y": 2 },
{ "matrix": [3, 0], "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 1, "y": 3 },
{ "matrix": [3, 2], "x": 2, "y": 3 }
]
}
}
}

View File

@ -0,0 +1,45 @@
// Copyright 2023 Noah Beidelman (@noahbei)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* Tog
*
* 7 8 9
*
* 4 5 6
*
* 1 2 3
*
*/
[0] = LAYOUT(
LT(0, KC_NO),
KC_7, KC_8, KC_9,
KC_4, KC_5, KC_6,
KC_1, KC_2, KC_3
),
[1] = LAYOUT(
LT(0, KC_NO),
KC_A, KC_B, KC_C,
KC_D, KC_E, KC_F,
KC_G, KC_H, KC_I
),
[2] = LAYOUT(
LT(0, KC_NO),
KC_J, KC_K, KC_L,
KC_M, KC_N, KC_O,
KC_P, KC_Q, KC_R
),
[3] = LAYOUT(
LT(0, KC_NO),
KC_S, KC_T, KC_U,
KC_V, KC_W, KC_X,
KC_Y, KC_Z, KC_ENT
)
};

View File

@ -0,0 +1,45 @@
// Copyright 2023 Noah Beidelman (@noahbei)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* Tog
*
* 7 8 9
*
* 4 5 6
*
* 1 2 3
*
*/
[0] = LAYOUT(
LT(0, KC_NO),
KC_7, KC_8, KC_9,
KC_4, KC_5, KC_6,
KC_1, KC_2, KC_3
),
[1] = LAYOUT(
LT(0, KC_NO),
KC_A, KC_B, KC_C,
KC_D, KC_E, KC_F,
KC_G, KC_H, KC_I
),
[2] = LAYOUT(
LT(0, KC_NO),
KC_J, KC_K, KC_L,
KC_M, KC_N, KC_O,
KC_P, KC_Q, KC_R
),
[3] = LAYOUT(
LT(0, KC_NO),
KC_S, KC_T, KC_U,
KC_V, KC_W, KC_X,
KC_Y, KC_Z, KC_ENT
)
};

View File

@ -0,0 +1,9 @@
// Copyright 2023 Noah Beidelman (@noahbei)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <mcuconf.h>
#undef STM32_I2C_USE_I2C1
#define STM32_I2C_USE_I2C1 TRUE

1420
keyboards/printedpad/oled.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,57 @@
// Copyright 2023 Noah Beidelman (@noahbei)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#include "printedpad.h"
void board_init(void) {
SYSCFG->CFGR1 |= SYSCFG_CFGR1_I2C1_DMA_RMP;
}
const uint8_t max_layer = 3;
uint8_t current_display_mode = 0;
bool key_pressed = false;
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
if (!process_record_user(keycode, record)) {
return false;
}
#ifdef OLED_ENABLE
key_pressed = record->event.pressed;
#endif
switch(keycode) {
case LT(0, KC_NO):
if (record->event.pressed) {
// on tap
if (record->tap.count) {
if (get_highest_layer(layer_state) >= max_layer) {
layer_clear();
} else {
layer_move(get_highest_layer(layer_state) + 1);
}
}
#ifdef OLED_ENABLE
// on hold
else {
current_display_mode = (current_display_mode + 1) % 3;
}
#endif
}
return false;
}
return true;
}
#ifdef OLED_ENABLE
uint32_t flash_timer = 0;
bool layer_changed = false;
// when the layer is changed, flash the layer number on the screen
layer_state_t layer_state_set_kb(layer_state_t state) {
flash_timer = timer_read();
layer_changed = true;
return layer_state_set_user(state);
}
#endif

View File

@ -0,0 +1,16 @@
// Copyright 2023 Noah Beidelman (@noahbei)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "quantum.h"
//for oled key press
extern bool key_pressed;
// for changing oled display mode
extern uint8_t current_display_mode;
//for determining when the layer is changed and having a timer for how long we flash the layer
extern uint32_t flash_timer;
extern bool layer_changed;

View File

@ -0,0 +1,25 @@
# Printed Pad
![magtray4x3](https://i.imgur.com/TBpZzIoh.jpeg)
* Keyboard Maintainer: [noahbei](https://github.com/noahbei)
* Hardware Supported: STM32F072RBT6
* Hardware Availability: https://protadesigns.com/products/printed-pad
Make example for this keyboard (after setting up your build environment):
make printedpad:default
Flashing example for this keyboard:
make printedpad:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1 @@
SRC += oled.c

View File

@ -0,0 +1,9 @@
// Copyright 2023 studiokestra (@studiokestra)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE

View File

@ -0,0 +1,219 @@
{
"manufacturer": "Studio Kestra",
"keyboard_name": "Line TKL",
"maintainer": "studiokestra",
"bootloader": "atmel-dfu",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["F0", "F1", "F4", "F5", "F6", "F7", "B5", "D5", "D3"],
"rows": ["D0", "D1", "B0", "B7", "B3", "E6", "C7", "C6", "B4", "D7", "D6", "D4"]
},
"processor": "atmega32u4",
"url": "https://minokeys.com/collections/line-friends",
"usb": {
"device_version": "1.0.0",
"pid": "0x8704",
"vid": "0x7C10"
},
"indicators": {
"caps_lock": "B6",
"scroll_lock": "D2",
"on_state": 1
},
"community_layouts": [
"tkl_ansi_tsangan",
"tkl_ansi_tsangan_split_bs_rshift"
],
"layouts": {
"LAYOUT_tkl_ansi_tsangan": {
"layout": [
{ "matrix": [0,0], "x":0, "y":0},
{ "matrix": [0,1], "x":2.25, "y":0},
{ "matrix": [0,2], "x":3.25, "y":0},
{ "matrix": [1,2], "x":4.25, "y":0},
{ "matrix": [0,3], "x":5.5, "y":0},
{ "matrix": [1,3], "x":6.5, "y":0},
{ "matrix": [0,4], "x":7.5, "y":0},
{ "matrix": [1,4], "x":8.5, "y":0},
{ "matrix": [0,5], "x":9.75, "y":0},
{ "matrix": [1,5], "x":10.75, "y":0},
{ "matrix": [0,6], "x":11.75, "y":0},
{ "matrix": [1,6], "x":12.75, "y":0},
{ "matrix": [0,7], "x":14, "y":0},
{ "matrix": [1,7], "x":15.25, "y":0},
{ "matrix": [0,8], "x":16.25, "y":0},
{ "matrix": [1,8], "x":17.25, "y":0},
{ "matrix": [2,0], "x":0, "y":1.25},
{ "matrix": [3,0], "x":1, "y":1.25},
{ "matrix": [2,1], "x":2, "y":1.25},
{ "matrix": [3,1], "x":3, "y":1.25},
{ "matrix": [2,2], "x":4, "y":1.25},
{ "matrix": [3,2], "x":5, "y":1.25},
{ "matrix": [2,3], "x":6, "y":1.25},
{ "matrix": [3,3], "x":7, "y":1.25},
{ "matrix": [2,4], "x":8, "y":1.25},
{ "matrix": [3,4], "x":9, "y":1.25},
{ "matrix": [2,5], "x":10, "y":1.25},
{ "matrix": [3,5], "x":11, "y":1.25},
{ "matrix": [2,6], "x":12, "y":1.25},
{ "matrix": [3,6], "x":13, "y":1.25},
{ "matrix": [3,7], "x":15.25, "y":1.25},
{ "matrix": [2,8], "x":16.25, "y":1.25},
{ "matrix": [3,8], "x":17.25, "y":1.25},
{ "matrix": [4,0], "x":0, "y":2.25, "w":1.5},
{ "matrix": [5,0], "x":1.5, "y":2.25},
{ "matrix": [4,1], "x":2.5, "y":2.25},
{ "matrix": [5,1], "x":3.5, "y":2.25},
{ "matrix": [4,2], "x":4.5, "y":2.25},
{ "matrix": [5,2], "x":5.5, "y":2.25},
{ "matrix": [4,3], "x":6.5, "y":2.25},
{ "matrix": [5,3], "x":7.5, "y":2.25},
{ "matrix": [4,4], "x":8.5, "y":2.25},
{ "matrix": [5,4], "x":9.5, "y":2.25},
{ "matrix": [4,5], "x":10.5, "y":2.25},
{ "matrix": [5,5], "x":11.5, "y":2.25},
{ "matrix": [4,6], "x":12.5, "y":2.25},
{ "matrix": [4,7], "x":13.5, "y":2.25, "w":1.5},
{ "matrix": [5,7], "x":15.25, "y":2.25},
{ "matrix": [4,8], "x":16.25, "y":2.25},
{ "matrix": [5,8], "x":17.25, "y":2.25},
{ "matrix": [6,0], "x":0, "y":3.25, "w":1.75},
{ "matrix": [7,0], "x":1.75, "y":3.25},
{ "matrix": [6,1], "x":2.75, "y":3.25},
{ "matrix": [7,1], "x":3.75, "y":3.25},
{ "matrix": [6,2], "x":4.75, "y":3.25},
{ "matrix": [7,2], "x":5.75, "y":3.25},
{ "matrix": [6,3], "x":6.75, "y":3.25},
{ "matrix": [7,3], "x":7.75, "y":3.25},
{ "matrix": [6,4], "x":8.75, "y":3.25},
{ "matrix": [7,4], "x":9.75, "y":3.25},
{ "matrix": [6,5], "x":10.75, "y":3.25},
{ "matrix": [7,5], "x":11.75, "y":3.25},
{ "matrix": [6,6], "x":12.75, "y":3.25, "w":2.25},
{ "matrix": [8,0], "x":0, "y":4.25, "w":1.25},
{ "matrix": [8,1], "x":2.25, "y":4.25},
{ "matrix": [9,1], "x":3.25, "y":4.25},
{ "matrix": [8,2], "x":4.25, "y":4.25},
{ "matrix": [9,2], "x":5.25, "y":4.25},
{ "matrix": [8,3], "x":6.25, "y":4.25},
{ "matrix": [9,3], "x":7.25, "y":4.25},
{ "matrix": [8,4], "x":8.25, "y":4.25},
{ "matrix": [9,4], "x":9.25, "y":4.25},
{ "matrix": [8,5], "x":10.25, "y":4.25},
{ "matrix": [9,5], "x":11.25, "y":4.25},
{ "matrix": [8,6], "x":12.25, "y":4.25, "w":1.75},
{ "matrix": [9,8], "x":16.25, "y":4.25},
{ "matrix": [10,0], "x":0, "y":5.25, "w":1.5},
{ "matrix": [11,0], "x":1.5,"y":5.25},
{ "matrix": [10,1], "x":2.5,"y":5.25,"w":1.5},
{ "matrix": [10,3], "x":4,"y":5.25,"w":7},
{ "matrix": [11,5], "x":11,"y":5.25,"w":1.5},
{ "matrix": [10,6], "x":12.5,"y":5.25},
{ "matrix": [10,7], "x":13.5,"y":5.25,"w":1.5},
{ "matrix": [11,7], "x":15.25, "y":5.25},
{ "matrix": [10,8], "x":16.25, "y":5.25},
{ "matrix": [11,8], "x":17.25, "y":5.25}
]
},
"LAYOUT_tkl_ansi_tsangan_split_bs_rshift": {
"layout": [
{ "matrix": [0,0], "x":0, "y":0},
{ "matrix": [0,1], "x":2.25, "y":0},
{ "matrix": [0,2], "x":3.25, "y":0},
{ "matrix": [1,2], "x":4.25, "y":0},
{ "matrix": [0,3], "x":5.5, "y":0},
{ "matrix": [1,3], "x":6.5, "y":0},
{ "matrix": [0,4], "x":7.5, "y":0},
{ "matrix": [1,4], "x":8.5, "y":0},
{ "matrix": [0,5], "x":9.75, "y":0},
{ "matrix": [1,5], "x":10.75, "y":0},
{ "matrix": [0,6], "x":11.75, "y":0},
{ "matrix": [1,6], "x":12.75, "y":0},
{ "matrix": [0,7], "x":14, "y":0},
{ "matrix": [1,7], "x":15.25, "y":0},
{ "matrix": [0,8], "x":16.25, "y":0},
{ "matrix": [1,8], "x":17.25, "y":0},
{ "matrix": [2,0], "x":0, "y":1.25},
{ "matrix": [3,0], "x":1, "y":1.25},
{ "matrix": [2,1], "x":2, "y":1.25},
{ "matrix": [3,1], "x":3, "y":1.25},
{ "matrix": [2,2], "x":4, "y":1.25},
{ "matrix": [3,2], "x":5, "y":1.25},
{ "matrix": [2,3], "x":6, "y":1.25},
{ "matrix": [3,3], "x":7, "y":1.25},
{ "matrix": [2,4], "x":8, "y":1.25},
{ "matrix": [3,4], "x":9, "y":1.25},
{ "matrix": [2,5], "x":10, "y":1.25},
{ "matrix": [3,5], "x":11, "y":1.25},
{ "matrix": [2,6], "x":12, "y":1.25},
{ "matrix": [3,6], "x":13, "y":1.25},
{ "matrix": [2,7], "x":14, "y":1.25},
{ "matrix": [3,7], "x":15.25, "y":1.25},
{ "matrix": [2,8], "x":16.25, "y":1.25},
{ "matrix": [3,8], "x":17.25, "y":1.25},
{ "matrix": [4,0], "x":0, "y":2.25, "w":1.5},
{ "matrix": [5,0], "x":1.5, "y":2.25},
{ "matrix": [4,1], "x":2.5, "y":2.25},
{ "matrix": [5,1], "x":3.5, "y":2.25},
{ "matrix": [4,2], "x":4.5, "y":2.25},
{ "matrix": [5,2], "x":5.5, "y":2.25},
{ "matrix": [4,3], "x":6.5, "y":2.25},
{ "matrix": [5,3], "x":7.5, "y":2.25},
{ "matrix": [4,4], "x":8.5, "y":2.25},
{ "matrix": [5,4], "x":9.5, "y":2.25},
{ "matrix": [4,5], "x":10.5, "y":2.25},
{ "matrix": [5,5], "x":11.5, "y":2.25},
{ "matrix": [4,6], "x":12.5, "y":2.25},
{ "matrix": [4,7], "x":13.5, "y":2.25, "w":1.5},
{ "matrix": [5,7], "x":15.25, "y":2.25},
{ "matrix": [4,8], "x":16.25, "y":2.25},
{ "matrix": [5,8], "x":17.25, "y":2.25},
{ "matrix": [6,0], "x":0, "y":3.25, "w":1.75},
{ "matrix": [7,0], "x":1.75, "y":3.25},
{ "matrix": [6,1], "x":2.75, "y":3.25},
{ "matrix": [7,1], "x":3.75, "y":3.25},
{ "matrix": [6,2], "x":4.75, "y":3.25},
{ "matrix": [7,2], "x":5.75, "y":3.25},
{ "matrix": [6,3], "x":6.75, "y":3.25},
{ "matrix": [7,3], "x":7.75, "y":3.25},
{ "matrix": [6,4], "x":8.75, "y":3.25},
{ "matrix": [7,4], "x":9.75, "y":3.25},
{ "matrix": [6,5], "x":10.75, "y":3.25},
{ "matrix": [7,5], "x":11.75, "y":3.25},
{ "matrix": [6,6], "x":12.75, "y":3.25, "w":2.25},
{ "matrix": [8,0], "x":0, "y":4.25, "w":1.25},
{ "matrix": [8,1], "x":2.25, "y":4.25},
{ "matrix": [9,1], "x":3.25, "y":4.25},
{ "matrix": [8,2], "x":4.25, "y":4.25},
{ "matrix": [9,2], "x":5.25, "y":4.25},
{ "matrix": [8,3], "x":6.25, "y":4.25},
{ "matrix": [9,3], "x":7.25, "y":4.25},
{ "matrix": [8,4], "x":8.25, "y":4.25},
{ "matrix": [9,4], "x":9.25, "y":4.25},
{ "matrix": [8,5], "x":10.25, "y":4.25},
{ "matrix": [9,5], "x":11.25, "y":4.25},
{ "matrix": [8,6], "x":12.25, "y":4.25, "w":1.75},
{ "matrix": [9,6], "x":14, "y":4.25},
{ "matrix": [9,8], "x":16.25, "y":4.25},
{ "matrix": [10,0], "x":0, "y":5.25, "w":1.5},
{ "matrix": [11,0], "x":1.5,"y":5.25},
{ "matrix": [10,1], "x":2.5,"y":5.25,"w":1.5},
{ "matrix": [10,3], "x":4,"y":5.25,"w":7},
{ "matrix": [11,5], "x":11,"y":5.25,"w":1.5},
{ "matrix": [10,6], "x":12.5,"y":5.25},
{ "matrix": [10,7], "x":13.5,"y":5.25,"w":1.5},
{ "matrix": [11,7], "x":15.25, "y":5.25},
{ "matrix": [10,8], "x":16.25, "y":5.25},
{ "matrix": [11,8], "x":17.25, "y":5.25}
]
}
}
}

View File

@ -0,0 +1,39 @@
// Copyright 2023 studiokestra (@studiokestra)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* Esc F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12 PScScrPse
*
*
* ` 1 2 3 4 5 6 7 8 9 0 - = Bcksp InsHomPgU
*
* Tab Q W E R T Y U I O P [ ] \ DelEndPgD
*
* Caps A S D F G H J K L ; ' Enter
*
* Shift Z X C V B N M , . / Shift
*
* Ctrl GUIAlt AltGUI Ctrl
*
*/
[0] = LAYOUT_tkl_ansi_tsangan(
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_PSCR, KC_SCRL, KC_PAUS,
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_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_BSLS, KC_DEL, KC_END, 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_ENT,
KC_LSFT, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ),
[1] = LAYOUT_tkl_ansi_tsangan(
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ),
};

View File

@ -0,0 +1,39 @@
// Copyright 2023 studiokestra (@studiokestra)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* Esc F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12 PScScrPse
*
*
* ` 1 2 3 4 5 6 7 8 9 0 - = LBkRBk InsHomPgU
*
* Tab Q W E R T Y U I O P [ ] \ DelEndPgD
*
* Caps A S D F G H J K L ; ' Enter
*
* Shift Z X C V B N M , . / Shift Mo1
*
* Ctrl GUIAlt AltGUI Ctrl
*
*/
[0] = LAYOUT_tkl_ansi_tsangan_split_bs_rshift(
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_PSCR, KC_SCRL, KC_PAUS,
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_BSPC, KC_INS, KC_HOME, 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_BSLS, KC_DEL, KC_END, 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_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ),
[1] = LAYOUT_tkl_ansi_tsangan_split_bs_rshift(
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ),
};

View File

@ -0,0 +1,39 @@
// Copyright 2023 studiokestra (@studiokestra)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* Esc F1 F2 F3 F4 F5 F6 F7 F8 F9 F10F11F12 PScScrPse
*
*
* ` 1 2 3 4 5 6 7 8 9 0 - = LBkRBk InsHomPgU
*
* Tab Q W E R T Y U I O P [ ] \ DelEndPgD
*
* Caps A S D F G H J K L ; ' Enter
*
* Shift Z X C V B N M , . / Shift Mo1
*
* Ctrl GUIAlt AltGUI Ctrl
*
*/
[0] = LAYOUT_tkl_ansi_tsangan_split_bs_rshift(
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_PSCR, KC_SCRL, KC_PAUS,
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_BSPC, KC_INS, KC_HOME, 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_BSLS, KC_DEL, KC_END, 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_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ),
[1] = LAYOUT_tkl_ansi_tsangan_split_bs_rshift(
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ),
};

View File

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

View File

@ -0,0 +1,27 @@
# studiokestra/line_tkl
![studiokestra/line_tkl](https://i.imgur.com/3MmRQkh.png)
PCB developed for Mino Keys in collaboration with Line Friends (C).
* Keyboard Maintainer: [Studio Kestra](https://github.com/studiokestra/)
* Hardware Supported: Line TKL
* Hardware Availability: https://minokeys.com/collections/line-friends
Make example for this keyboard (after setting up your build environment):
make studiokestra/line_tkl:default
Flashing example for this keyboard:
make studiokestra/line_tkl:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available