Compare commits

...

12 Commits

Author SHA1 Message Date
Colin Kinloch
462ab3c4d2
[Keyboard] Add CXT Studio (#19531)
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Colin Kinloch <colin.kinloch@collabora.com>
2023-02-09 13:29:23 -08:00
djok0127
1b3b1427d2
[Keyboard] Add Igloo (#19678)
Co-authored-by: jack <0x6a73@protonmail.com>
2023-02-09 14:10:25 -07:00
Vertex-kb
bc78474906
[Keyboard] add arc60h (#18798)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2023-02-09 13:07:44 -08:00
Juno Nguyen
cdaac25861
[Keymap] junonum: community keymap improvement (#19727)
Co-authored-by: Minh-tri Nguyen <mtngx@PigeonMac.local>
Co-authored-by: Joel Challis <git@zvecr.com>
2023-02-09 13:07:00 -08:00
QMK Bot
40f0325af8
[CI] Format code according to conventions (#19794) 2023-02-09 14:04:20 -07:00
Vino Rodrigues
989f2476b6
[Keyboard] Add Binepad BNR1 v2 rotary encoder (#19770) 2023-02-09 13:01:21 -08:00
eason
9c6b8fae40
[Keyboard] Add greatsword80 (#19746)
Co-authored-by: jack <0x6a73@protonmail.com>
2023-02-09 13:57:31 -07:00
Alabahuy
4eb5c6803f
Fix Matrix for kamigakushi (#19775) 2023-02-09 13:56:17 -07:00
Andrew Kannan
758766820d
Add Type-B firmware to QMK (#19764)
Co-authored-by: jack <0x6a73@protonmail.com>
2023-02-09 13:55:26 -07:00
Katrina
e19cbe25f3
[Keyboard] Doio kb38 (#19650) 2023-02-09 12:43:22 -08:00
lalalademaxiya1
f07841cce3
[Keyboard] Added JIS version for Keychron Q2 (#19491)
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2023-02-09 12:40:17 -08:00
asdfire1
41a5046e89
[Keymap] Add colemak_luna keymap for crkbd (#19708)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2023-02-09 11:36:06 -08:00
90 changed files with 3518 additions and 177 deletions

View File

@ -14,9 +14,7 @@
}, },
"url": "http://binepad.com", "url": "http://binepad.com",
"usb": { "usb": {
"vid": "0x4249", "vid": "0x4249"
"pid": "0x4231",
"device_version": "1.0.0"
}, },
"community_layouts": ["ortho_1x1"], "community_layouts": ["ortho_1x1"],
"layouts": { "layouts": {

View File

@ -1,6 +1,4 @@
# Copyright 2022 Binepad (@binpad) # Copyright 2022 Binepad (@binpad)
# SPDX-License-Identifier: GPL-2.0-or-later # SPDX-License-Identifier: GPL-2.0-or-later
LTO_ENABLE = yes
ENCODER_MAP_ENABLE = yes ENCODER_MAP_ENABLE = yes

View File

@ -1,7 +1,6 @@
# Copyright 2022 Binepad (@binpad) # Copyright 2022 Binepad (@binpad)
# SPDX-License-Identifier: GPL-2.0-or-later # SPDX-License-Identifier: GPL-2.0-or-later
LTO_ENABLE = yes
VIA_ENABLE = yes VIA_ENABLE = yes
ENCODER_MAP_ENABLE = yes ENCODER_MAP_ENABLE = yes

View File

@ -3,13 +3,19 @@
The BNR1 is a multifunction knob, which can be rotated, pressed, and rotated while pressed. The BNR1 is a multifunction knob, which can be rotated, pressed, and rotated while pressed.
* Keyboard Maintainer: [Binpad](https://github.com/binepad) * Keyboard Maintainer: [Binpad](https://github.com/binepad)
* Hardware Supported: **BNR1** & **BNR1 R2** *("V1" ft. ATMega32u4 MCU)* * Hardware Supported:
* **BNR1** & **BNR1 R2** *("V1" ft. ATMega32u4 MCU)*
* **BNR1 V2** *("V2" ft. STM32F103 MCU)*
* Hardware Availability: [Binepad.com](https://www.binepad.com/bnr1) * Hardware Availability: [Binepad.com](https://www.binepad.com/bnr1)
Make example for this keyboard (after setting up your build environment): Make example for this keyboard (after setting up your build environment):
make binepad/bnr1/v1:default make binepad/bnr1/v1:default
..or..
make binepad/bnr1/v2:default
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. 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). Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

View File

@ -1,3 +1,3 @@
# This file intentionally left blank # This file is mostly left blank
DEFAULT_FOLDER = binepad/bnr1/v1 DEFAULT_FOLDER = binepad/bnr1/v2

View File

@ -2,13 +2,21 @@
"bootloader": "atmel-dfu", "bootloader": "atmel-dfu",
"processor": "atmega32u4", "processor": "atmega32u4",
"diode_direction": "COL2ROW", "diode_direction": "COL2ROW",
"usb": {
"pid": "0x4231",
"device_version": "1.0.0"
},
"matrix_pins": { "matrix_pins": {
"cols": ["B0"], "cols": ["B0"],
"rows": ["E6"] "rows": ["E6"]
}, },
"encoder": { "encoder": {
"enabled": true,
"rotary": [ "rotary": [
{ "pin_a": "D6", "pin_b": "D7" } {
"pin_a": "D6",
"pin_b": "D7"
}
] ]
} }
} }

View File

@ -1 +1,3 @@
# This file intentionally left blank # This file is mostly left blank
LTO_ENABLE = yes

View File

@ -0,0 +1,9 @@
// Copyright 2022 BINEPAD (@binepad)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "config_common.h"
#define WEAR_LEVELING_LOGICAL_SIZE 1024
#define WEAR_LEVELING_BACKING_SIZE (WEAR_LEVELING_LOGICAL_SIZE * 2)

View File

@ -0,0 +1,22 @@
{
"bootloader": "stm32duino",
"processor": "STM32F103",
"diode_direction": "COL2ROW",
"usb": {
"pid": "0x4241",
"device_version": "2.0.0"
},
"matrix_pins": {
"cols": ["A15"],
"rows": ["A8"]
},
"encoder": {
"enabled": true,
"rotary": [
{
"pin_a": "B3",
"pin_b": "B4"
}
]
}
}

View File

@ -0,0 +1,7 @@
# This file only contains EFL/WL settings and enables F103 low-power mode
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

View File

@ -0,0 +1,24 @@
/*
Copyright 2015 Jun Wako <wakojun@gmail.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
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64

View File

@ -0,0 +1,97 @@
{
"keyboard_name": "Type-B",
"maintainer": "awkannan",
"manufacturer": "CannonKeys",
"processor": "RP2040",
"bootloader": "rp2040",
"usb": {
"vid": "0xCA04",
"pid": "0x001B",
"device_version": "0.0.1"
},
"url": "https://cannonkeys.com",
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["GP3", "GP2", "GP29", "GP28", "GP27", "GP26", "GP25", "GP24", "GP23", "GP22", "GP21", "GP20", "GP19", "GP18"],
"rows": ["GP4", "GP5", "GP13", "GP14", "GP10"]
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"indicators": {
"caps_lock": "GP12",
"on_state": 0
},
"layouts": {
"LAYOUT": {
"layout": [
{ "matrix": [0, 0], "x": 0.0, "y": 0.0 },
{ "matrix": [0, 1], "x": 1.0, "y": 0.0 },
{ "matrix": [0, 2], "x": 2.0, "y": 0.0 },
{ "matrix": [0, 3], "x": 3.0, "y": 0.0 },
{ "matrix": [0, 4], "x": 4.0, "y": 0.0 },
{ "matrix": [0, 5], "x": 5.0, "y": 0.0 },
{ "matrix": [0, 6], "x": 6.0, "y": 0.0 },
{ "matrix": [0, 7], "x": 7.0, "y": 0.0 },
{ "matrix": [0, 8], "x": 8.0, "y": 0.0 },
{ "matrix": [0, 9], "x": 9.0, "y": 0.0 },
{ "matrix": [0, 10], "x": 10.0, "y": 0.0 },
{ "matrix": [0, 11], "x": 11.0, "y": 0.0 },
{ "matrix": [0, 12], "x": 12.0, "y": 0.0 },
{ "matrix": [0, 13], "x": 13.0, "y": 0.0 },
{ "matrix": [2, 12], "x": 14.0, "y": 0.0 },
{ "matrix": [1, 0], "w": 1.5, "x": 0.0, "y": 1.0 },
{ "matrix": [1, 1], "x": 1.5, "y": 1.0 },
{ "matrix": [1, 2], "x": 2.5, "y": 1.0 },
{ "matrix": [1, 3], "x": 3.5, "y": 1.0 },
{ "matrix": [1, 4], "x": 4.5, "y": 1.0 },
{ "matrix": [1, 5], "x": 5.5, "y": 1.0 },
{ "matrix": [1, 6], "x": 6.5, "y": 1.0 },
{ "matrix": [1, 7], "x": 7.5, "y": 1.0 },
{ "matrix": [1, 8], "x": 8.5, "y": 1.0 },
{ "matrix": [1, 9], "x": 9.5, "y": 1.0 },
{ "matrix": [1, 10], "x": 10.5, "y": 1.0 },
{ "matrix": [1, 11], "x": 11.5, "y": 1.0 },
{ "matrix": [1, 12], "x": 12.5, "y": 1.0 },
{ "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1.0 },
{ "matrix": [2, 0], "w": 1.75, "x": 0.0, "y": 2.0 },
{ "matrix": [2, 1], "x": 1.75, "y": 2.0 },
{ "matrix": [2, 2], "x": 2.75, "y": 2.0 },
{ "matrix": [2, 3], "x": 3.75, "y": 2.0 },
{ "matrix": [2, 4], "x": 4.75, "y": 2.0 },
{ "matrix": [2, 5], "x": 5.75, "y": 2.0 },
{ "matrix": [2, 6], "x": 6.75, "y": 2.0 },
{ "matrix": [2, 7], "x": 7.75, "y": 2.0 },
{ "matrix": [2, 8], "x": 8.75, "y": 2.0 },
{ "matrix": [2, 9], "x": 9.75, "y": 2.0 },
{ "matrix": [2, 10], "x": 10.75, "y": 2.0 },
{ "matrix": [2, 11], "x": 11.75, "y": 2.0 },
{ "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2.0 },
{ "matrix": [3, 0], "w": 1.25, "x": 0.0, "y": 3.0 },
{ "matrix": [3, 1], "x": 1.25, "y": 3.0 },
{ "matrix": [3, 2], "x": 2.25, "y": 3.0 },
{ "matrix": [3, 3], "x": 3.25, "y": 3.0 },
{ "matrix": [3, 4], "x": 4.25, "y": 3.0 },
{ "matrix": [3, 5], "x": 5.25, "y": 3.0 },
{ "matrix": [3, 6], "x": 6.25, "y": 3.0 },
{ "matrix": [3, 7], "x": 7.25, "y": 3.0 },
{ "matrix": [3, 8], "x": 8.25, "y": 3.0 },
{ "matrix": [3, 9], "x": 9.25, "y": 3.0 },
{ "matrix": [3, 10], "x": 10.25, "y": 3.0 },
{ "matrix": [3, 11], "x": 11.25, "y": 3.0 },
{ "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3.0 },
{ "matrix": [3, 13], "x": 14.0, "y": 3.0 },
{ "matrix": [4, 1], "x": 1.5, "y": 4.0 },
{ "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4.0 },
{ "matrix": [4, 6], "w": 6, "x": 4.0, "y": 4.0 },
{ "matrix": [4, 10], "w": 1.5, "x": 10.0, "y": 4.0 },
{ "matrix": [4, 11], "x": 11.5, "y": 4.0 }
]
}
}
}

View File

@ -0,0 +1,45 @@
/*
Copyright 2012,2013 Jun Wako <wakojun@gmail.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
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum {
_BASE = 0,
_FN1
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
QK_GESC, 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_BSLS, KC_GRV,
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_BSPC,
KC_LCTL, 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_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN1),
KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
),
[_FN1] = LAYOUT(
QK_GESC, 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_DEL, _______,
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, QK_BOOT
)
};

View File

@ -0,0 +1,61 @@
/*
Copyright 2012,2013 Jun Wako <wakojun@gmail.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
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum {
_BASE = 0,
_FN1,
_FN2,
_FN3
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
QK_GESC, 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_BSLS, KC_GRV,
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_BSPC,
KC_LCTL, 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_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN1),
KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
),
[_FN1] = LAYOUT(
QK_GESC, 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_DEL, _______,
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, QK_BOOT
),
[_FN2] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______
),
[_FN3] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______
)
};

View File

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

View File

@ -0,0 +1,26 @@
# Type-B
Type-B Keyboard by bababaul
* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
* Hardware Supported: RP2040
* Hardware Availability: [CannonKeys](https://cannonkeys.com)
Make example for this keyboard (after setting up your build environment):
make cannonkeys/typeb:default
Flashing example for this keyboard:
make cannonkeys/typeb: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**: Toggle the switch on the back of the PCB to "Recovery" and briefly press the button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1,2 @@
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = rp2040_flash

View File

@ -0,0 +1,115 @@
/*
Copyright 2019 @foostan
Copyright 2023 @asdfire1
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
/* Select hand configuration */
#define MASTER_LEFT
// #define MASTER_RIGHT
// #define EE_HANDS
#ifdef RGBLIGHT_ENABLE
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_KNIGHT
#define RGBLIGHT_EFFECT_CHRISTMAS
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
// #define RGBLIGHT_EFFECT_RGB_TEST
// #define RGBLIGHT_EFFECT_ALTERNATING
// #define RGBLIGHT_EFFECT_TWINKLE
#define RGBLIGHT_LIMIT_VAL 120
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
#endif
#ifdef RGB_MATRIX_ENABLE
//# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
// # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
//# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
// # define RGB_MATRIX_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
// # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash.
# define RGB_MATRIX_HUE_STEP 8
# define RGB_MATRIX_SAT_STEP 8
# define RGB_MATRIX_VAL_STEP 8
# define RGB_MATRIX_SPD_STEP 10
/* Enable the animations you want/need. You may need to enable only a small number of these because *
* they take up a lot of space. Enable and confirm that you can still successfully compile your firmware. */
// 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
#endif
#define OLED_FONT_H "keyboards/crkbd/lib/glcdfont.c"
#define SPLIT_LAYER_STATE_ENABLE
#define SPLIT_WPM_ENABLE //Enable WPM across split keyboards (+268).
#define NO_ACTION_ONESHOT
//#define SPLIT_OLED_ENABLE
#define DYNAMIC_KEYMAP_LAYER_COUNT 6

View File

@ -0,0 +1,385 @@
/*
Copyright 2019 @foostan
Copyright 2021 @HellSingCoder
Copyright 2023 @asdfire1
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 <stdio.h>
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//COLEMAK
[0] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LSFT, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ESC,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
KC_LGUI, MO(3), KC_SPC, KC_ENT, MO(4), KC_RALT
//`--------------------------' `--------------------------'
),
//GAME1
[1] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ESC,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
KC_LALT, MO(2), KC_SPC, KC_ENT, MO(4), KC_RALT
//`--------------------------' `--------------------------'
),
//GAME2
[2] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LSFT, KC_F1, KC_F2, XXXXXXX, XXXXXXX, KC_6, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F13, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F13,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
KC_LGUI, _______, KC_SPC, KC_ENT, MO(5), KC_RALT
//`--------------------------' `--------------------------'
),
//LOWER
[3] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
KC_TAB, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, KC_MPRV, XXXXXXX, KC_MINS, KC_P7, KC_P8, KC_P9, KC_DEL,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LSFT, KC_LEFT, KC_DOWN,KC_RIGHT, XXXXXXX, KC_MPLY, XXXXXXX, KC_PLUS, KC_P4, KC_P5, KC_P6, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MNXT, XXXXXXX, KC_EQL, KC_P1, KC_P2, KC_P3, KC_F13,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
KC_LGUI, _______, KC_SPC, KC_SPC, MO(5), KC_P0
//`--------------------------' `--------------------------'
),
//RAISE
[4] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGUP,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_CAPS, KC_CIRC, KC_AMPR, KC_LCBR, KC_LBRC, KC_LPRN, KC_RPRN, KC_RBRC, KC_RCBR, XXXXXXX, KC_END, KC_PGDN,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LCTL, KC_ASTR, KC_UNDS, KC_BSLS, KC_PIPE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
KC_LGUI, MO(5), KC_BSPC, _______, _______, KC_LALT
//`--------------------------' `--------------------------'
),
//ADJUST
[5] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
QK_BOOT, TG(1), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
KC_LGUI, _______, _______, _______, _______, KC_LALT
//`--------------------------' `--------------------------'
)
};
// clang-format on
#ifdef OLED_ENABLE
/* 32 * 32 logo */
static void render_logo(void) {
static const char PROGMEM hexagram_logo[] = {
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x70, 0x18, 0x06,
0x06, 0x18, 0x70, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
0x00, 0x00, 0x01, 0x07, 0x1f, 0x32, 0x66, 0xc4, 0x6c, 0x38, 0x1e, 0x37, 0x61, 0xc0, 0x80, 0x80,
0x80, 0x80, 0xc0, 0x61, 0x37, 0x1e, 0x38, 0x6c, 0xc4, 0x66, 0x32, 0x1f, 0x07, 0x01, 0x00, 0x00,
0x00, 0x00, 0x80, 0xe0, 0xf8, 0x4c, 0x66, 0x23, 0x36, 0x1c, 0x78, 0xec, 0x86, 0x03, 0x01, 0x01,
0x01, 0x01, 0x03, 0x86, 0xec, 0x78, 0x1c, 0x36, 0x23, 0x66, 0x4c, 0xf8, 0xe0, 0x80, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x0e, 0x18, 0x60,
0x60, 0x18, 0x0e, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00
};
oled_write_raw_P(hexagram_logo, sizeof(hexagram_logo));
}
/* KEYBOARD PET START */
/* settings */
# define MIN_WALK_SPEED 10
# define MIN_RUN_SPEED 40
/* advanced settings */
# define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms
# define ANIM_SIZE 96 // number of bytes in array. If you change sprites, minimize for adequate firmware size. max is 1024
/* timers */
uint32_t anim_timer = 0;
uint32_t anim_sleep = 0;
/* current frame */
uint8_t current_frame = 0;
/* status variables */
int current_wpm = 0;
led_t led_usb_state;
bool isSneaking = false;
bool isJumping = false;
bool showedJump = true;
bool isBarking = false;
/* logic */
static void render_luna(int LUNA_X, int LUNA_Y) {
/* Sit */
static const char PROGMEM sit[2][ANIM_SIZE] = {/* 'sit1', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x02, 0x05, 0x02, 0x24, 0x04, 0x04, 0x02, 0xa9, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x68, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x82, 0x7c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x0c, 0x10, 0x10, 0x20, 0x20, 0x20, 0x28, 0x3e, 0x1c, 0x20, 0x20, 0x3e, 0x0f, 0x11, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
},
/* 'sit2', 32x22px */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x02, 0x05, 0x02, 0x24, 0x04, 0x04, 0x02, 0xa9, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x90, 0x08, 0x18, 0x60, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0e, 0x82, 0x7c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x0c, 0x10, 0x10, 0x20, 0x20, 0x20, 0x28, 0x3e, 0x1c, 0x20, 0x20, 0x3e, 0x0f, 0x11, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
/* Walk */
static const char PROGMEM walk[2][ANIM_SIZE] = {/* 'walk1', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x90, 0x90, 0x90, 0xa0, 0xc0, 0x80, 0x80, 0x80, 0x70, 0x08, 0x14, 0x08, 0x90, 0x10, 0x10, 0x08, 0xa4, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, 0xea, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x20, 0x20, 0x3c, 0x0f, 0x11, 0x1f, 0x03, 0x06, 0x18, 0x20, 0x20, 0x3c, 0x0c, 0x12, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
},
/* 'walk2', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x28, 0x10, 0x20, 0x20, 0x20, 0x10, 0x48, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x20, 0xf8, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x30, 0xd5, 0x20, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x30, 0x0c, 0x02, 0x05, 0x09, 0x12, 0x1e, 0x02, 0x1c, 0x14, 0x08, 0x10, 0x20, 0x2c, 0x32, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
}};
/* Run */
static const char PROGMEM run[2][ANIM_SIZE] = {/* 'run1', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x08, 0xc8, 0xb0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x3c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0xc4, 0xa4, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc8, 0x58, 0x28, 0x2a, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x09, 0x04, 0x04, 0x04, 0x04, 0x02, 0x03, 0x02, 0x01, 0x01, 0x02, 0x02, 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
},
/* 'run2', 32x22px */
{
0x00, 0x00, 0x00, 0xe0, 0x10, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x78, 0x28, 0x08, 0x10, 0x20, 0x30, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0xb0, 0x50, 0x55, 0x20, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, 0x02, 0x1e, 0x20, 0x20, 0x18, 0x0c, 0x14, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
}};
/* Bark */
static const char PROGMEM bark[2][ANIM_SIZE] = {/* 'bark1', 32x22px */
{
0x00, 0xc0, 0x20, 0x10, 0xd0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x3c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc8, 0x48, 0x28, 0x2a, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, 0x02, 0x02, 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
},
/* 'bark2', 32x22px */
{
0x00, 0xe0, 0x10, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x2c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x48, 0x28, 0x2a, 0x10, 0x0f, 0x20, 0x4a, 0x09, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, 0x02, 0x02, 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
}};
/* Sneak */
static const char PROGMEM sneak[2][ANIM_SIZE] = {/* 'sneak1', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x40, 0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x21, 0xf0, 0x04, 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x04, 0x04, 0x04, 0x03, 0x01, 0x00, 0x00, 0x09, 0x01, 0x80, 0x80, 0xab, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x20, 0x20, 0x3c, 0x0f, 0x11, 0x1f, 0x02, 0x06, 0x18, 0x20, 0x20, 0x38, 0x08, 0x10, 0x18, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
},
/* 'sneak2', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xa0, 0x20, 0x40, 0x80, 0xc0, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x41, 0xf0, 0x04, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x02, 0x04, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x40, 0x40, 0x55, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x30, 0x0c, 0x02, 0x05, 0x09, 0x12, 0x1e, 0x04, 0x18, 0x10, 0x08, 0x10, 0x20, 0x28, 0x34, 0x06, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
}};
/* animation */
void animate_luna(void) {
/* jump */
if (isJumping || !showedJump) {
/* clear */
oled_set_cursor(LUNA_X, LUNA_Y + 2);
oled_write(" ", false);
oled_set_cursor(LUNA_X, LUNA_Y - 1);
showedJump = true;
} else {
/* clear */
oled_set_cursor(LUNA_X, LUNA_Y - 1);
oled_write(" ", false);
oled_set_cursor(LUNA_X, LUNA_Y);
}
/* switch frame */
current_frame = (current_frame + 1) % 2;
/* current status */
if (led_usb_state.caps_lock) {
oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE);
} else if (isSneaking) {
oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE);
} else if (current_wpm <= MIN_WALK_SPEED) {
oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE);
} else if (current_wpm <= MIN_RUN_SPEED) {
oled_write_raw_P(walk[abs(1 - current_frame)], ANIM_SIZE);
} else {
oled_write_raw_P(run[abs(1 - current_frame)], ANIM_SIZE);
}
}
/* animation timer */
if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
anim_timer = timer_read32();
animate_luna();
}
/* this fixes the screen on and off bug */
if (current_wpm > 0) {
oled_on();
anim_sleep = timer_read32();
} else if(timer_elapsed32(anim_sleep) > OLED_TIMEOUT) {
/* clear */
oled_set_cursor(0,0);
oled_write(" ", false);
oled_off();
oled_set_cursor(LUNA_X,LUNA_Y);
}
}
/* KEYBOARD PET END */
static void print_logo_narrow(void) {
render_logo();
if (current_wpm > 0) {
anim_sleep = timer_read32();
/* wpm counter */
oled_set_cursor(0, 14);
oled_write(get_u8_str(get_current_wpm(), '0'), false);
oled_set_cursor(0, 15);
oled_write(" wpm", false);
/* this fixes the screen on and off bug */
} else if(timer_elapsed32(anim_sleep) > OLED_TIMEOUT) {
/* clear */
oled_set_cursor(0,0);
oled_write(" ", false);
oled_off();
}
}
layer_state_t layer_state_set_user(layer_state_t state) {
switch (get_highest_layer(state)) {
case 0:
rgb_matrix_reload_from_eeprom();
break;
case 1:
rgb_matrix_mode_noeeprom(RGB_MATRIX_ALPHAS_MODS);
rgb_matrix_sethsv_noeeprom(HSV_TEAL);
break;
case 2:
rgb_matrix_mode_noeeprom(RGB_MATRIX_ALPHAS_MODS);
rgb_matrix_sethsv_noeeprom(HSV_PURPLE);
break;
case 5:
rgb_matrix_mode_noeeprom(RGB_MATRIX_ALPHAS_MODS);
rgb_matrix_sethsv_noeeprom(HSV_YELLOW);
break;
}
return state;
}
static void print_status_narrow(void) {
/* Print current layer */
oled_write("LAYER", false);
oled_set_cursor(0, 6);
switch (get_highest_layer(layer_state)) {
case 0:
oled_write("Base ", false);
break;
case 1:
oled_write("Game ", false);
break;
case 2:
oled_write("Game2", false);
break;
case 3:
oled_write("Lower", false);
break;
case 4:
oled_write("Raise", false);
break;
case 5:
oled_write("Adj ", false);
break;
default:
oled_write("Undef", false);
}
/* KEYBOARD PET RENDER START */
render_luna(0, 13);
/* KEYBOARD PET RENDER END */
}
oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_270; }
bool oled_task_user(void) {
/* KEYBOARD PET VARIABLES START */
current_wpm = get_current_wpm();
led_usb_state = host_keyboard_led_state();
/* KEYBOARD PET VARIABLES END */
if (is_keyboard_master()) {
print_status_narrow();
} else {
print_logo_narrow();
}
return false;
}
#endif
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
/* KEYBOARD PET STATUS START */
case KC_LCTL:
isSneaking = record->event.pressed;
break;
case KC_SPC:
isJumping = record->event.pressed;
if (isJumping) {
showedJump = false;
}
break;
case KC_CAPS:
isBarking = record->event.pressed;
break;
/* KEYBOARD PET STATUS END */
}
return true;
}

View File

@ -0,0 +1,17 @@
# Personal keymap for the CRKBD
My own keymap with some custom OLED features, Colemak base layer and gaming layers. The F13 key on multiple layers can be bound to something, I use it as toggle mute microphone on Discord.
## Layers
- Colemak - Default layer
- Lower - Has numbers and arrows
- Raise - Has symbols
- Game1 - A QWERTY Gaming layer
- Game2 - An alternate lower layer when Game1 is active, has numbers and other keys that may be needed
- Adjust - Has F-keys and settings, allows to set the Game1 as base layer.
## Custom OLED
- Left side:
- Layer indicator
- Keyboard pet Luna from @HellSingCoder <https://github.com/HellSingCoder/qmk_firmware/tree/master/keyboards/sofle/keymaps/helltm>
- Right side
- Unicursal hexagram pixel art logo
- WPM counter

View File

@ -0,0 +1,8 @@
MOUSEKEY_ENABLE = no # Mouse keys
RGBLIGHT_ENABLE = no
RGB_MATRIX_ENABLE = yes # Enable WS2812 RGB underlight.
VIA_ENABLE = yes # Enable VIA
OLED_ENABLE = yes
OLED_DRIVER = SSD1306
LTO_ENABLE = yes
WPM_ENABLE = yes

View File

@ -0,0 +1,48 @@
// Copyright 2023 Colin Kinloch (@ColinKinloch)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define RGB_MATRIX_LED_COUNT 12
#define RGB_DI_PIN F7
#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_TYPING_HEATMAP
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
#define ENABLE_RGB_MATRIX_MULTISPLASH
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
#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_TYPING_HEATMAP_SPREAD 9
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT

View File

@ -0,0 +1,55 @@
// Copyright 2023 Colin Kinloch (@ColinKinloch)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
static uint8_t anim = 0;
#ifdef ENCODER_ENABLE
bool encoder_update_kb(uint8_t index, bool clockwise) {
if (!encoder_update_user(index, clockwise)) {
return false;
}
switch (index) {
case 0: {
if (clockwise) {
tap_code_delay(KC_VOLU, 10);
} else {
tap_code_delay(KC_VOLD, 10);
}
}
break;
case 1: {
if (clockwise) {
rgblight_increase_hue();
} else {
rgblight_decrease_hue();
}
}
break;
case 2: {
if (clockwise) {
rgblight_increase_val();
} else {
rgblight_decrease_val();
}
}
break;
case 3: {
if (clockwise) {
anim++;
} else {
anim--;
}
if (anim >= RGB_MATRIX_EFFECT_MAX) {
anim = 0;
} else if (anim < 0) {
anim = RGB_MATRIX_EFFECT_MAX - 1;
}
rgblight_mode(anim);
}
break;
}
return true;
}
#endif

View File

@ -0,0 +1,76 @@
{
"manufacturer": "CXT",
"keyboard_name": "cxt_studio",
"maintainer": "ColinKinloch",
"bootloader": "atmel-dfu",
"diode_direction": "ROW2COL",
"features": {
"bootmagic": true,
"command": false,
"console": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"encoder": true,
"rgb_matrix": true
},
"matrix_pins": {
"cols": ["D4", "D7", "B4", "B5"],
"rows": ["C7", "C6", "D6", "F4"]
},
"encoder": {
"rotary": [
{ "pin_a": "D5", "pin_b": "D3" },
{ "pin_a": "B2", "pin_b": "B3" },
{ "pin_a": "F5", "pin_b": "F6" },
{ "pin_a": "E6", "pin_b": "F0" }
]
},
"processor": "atmega32u4",
"rgb_matrix": {
"driver": "WS2812",
"layout": [
{ "flags": 4, "matrix": [0, 3], "x": 3, "y": 0 },
{ "flags": 4, "matrix": [0, 2], "x": 2, "y": 0 },
{ "flags": 4, "matrix": [0, 1], "x": 1, "y": 0 },
{ "flags": 4, "matrix": [0, 0], "x": 0, "y": 0 },
{ "flags": 4, "matrix": [1, 0], "x": 0, "y": 1 },
{ "flags": 4, "matrix": [1, 1], "x": 1, "y": 1 },
{ "flags": 4, "matrix": [1, 2], "x": 2, "y": 1 },
{ "flags": 4, "matrix": [1, 3], "x": 3, "y": 1 },
{ "flags": 4, "matrix": [2, 3], "x": 3, "y": 2 },
{ "flags": 4, "matrix": [2, 2], "x": 2, "y": 2 },
{ "flags": 4, "matrix": [2, 1], "x": 1, "y": 2 },
{ "flags": 4, "matrix": [2, 0], "x": 0, "y": 2 }
]
},
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"layouts": {
"LAYOUT": {
"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": [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 },
{ "matrix": [2, 0], "x": 0, "y": 2 },
{ "matrix": [2, 1], "x": 1, "y": 2 },
{ "matrix": [2, 2], "x": 2, "y": 2 },
{ "matrix": [2, 3], "x": 3, "y": 2 },
{ "matrix": [3, 0], "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 1, "y": 3 },
{ "matrix": [3, 2], "x": 2, "y": 3 },
{ "matrix": [3, 3], "x": 3, "y": 3 }
]
}
}
}

View File

@ -0,0 +1,13 @@
{
"keyboard": "cxt_studio",
"keymap": "default",
"layout": "LAYOUT",
"layers": [
[
"KC_ESC", "KC_F11", "KC_NO", "KC_MSTP",
"KC_NO", "KC_NO", "KC_MRWD", "KC_MFFD",
"KC_NO", "KC_MPLY", "KC_MPLY", "KC_MNXT",
"KC_MUTE", "KC_NO", "KC_NO", "RGB_TOG"
]
]
}

View File

@ -0,0 +1,27 @@
# cxt_studio
![cxt_studio](https://i.imgur.com/AMCTioSh.jpeg)
3x4 ortho rgb lighting 4 knobs.
* Keyboard Maintainer: [Colin Kinloch](https://github.com/ColinKinloch)
* Hardware Supported: CXT-Studio
* Hardware Availability: AliExpress. I think the manufacturer is on Taobao.
Make example for this keyboard (after setting up your build environment):
make cxt_studio:default
Flashing example for this keyboard:
make cxt_studio: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 @@
# This file intentionally left blank

View File

@ -0,0 +1,39 @@
// Copyright 2022 Katrina (@Daggette10)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "config_common.h"
#define RGB_DI_PIN F6
#define RGB_MATRIX_LED_COUNT 44
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_SOLID_COLOR
#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_CYCLE_ALL
#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
#define ENCODERS_PAD_A { C7, F7, D6 }
#define ENCODERS_PAD_B { C6, E6, D7 }
#define ENCODER_RESOLUTIONS { 4, 4, 2 }
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT

View File

@ -0,0 +1,135 @@
{
"manufacturer": "Doio",
"keyboard_name": "doio/kb38",
"maintainer": "PepperKats",
"url": "https://www.keebmonkey.com/products/megalodon-doio-triple-knob-38-keyboard-with-oled-screen",
"bootloader": "atmel-dfu",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true,
"rgblight": false
},
"matrix_pins": {
"cols": ["F5", "F4", "F1", "F0", "B7", "B6", "B5", "B4"],
"rows": ["D5", "D4", "D3", "D2", "B3", "B2"]
},
"processor": "atmega32u4",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"rgb_matrix": {
"driver": "WS2812",
"layout": [
{"flags": 4, "matrix": [0, 0], "x":0, "y":0},
{"flags": 4, "matrix": [0, 1], "x":62.2, "y":0},
{"flags": 4, "matrix": [0, 2], "x":99.6, "y":0},
{"flags": 4, "matrix": [0, 3], "x":124.4, "y":0},
{"flags": 4, "matrix": [0, 4], "x":149.3, "y":0},
{"flags": 4, "matrix": [0, 5], "x":174.2, "y":0},
{"flags": 4, "matrix": [0, 6], "x":199.1, "y":0},
{"flags": 4, "matrix": [0, 7], "x":224, "y":0},
{"flags": 4, "matrix": [1, 0], "x":0, "y":12.8},
{"flags": 4, "matrix": [1, 1], "x":24.9, "y":12.8},
{"flags": 4, "matrix": [1, 2], "x":49.8, "y":12.8},
{"flags": 4, "matrix": [1, 3], "x":74.6, "y":12.8},
{"flags": 4, "matrix": [1, 4], "x":99.6, "y":12.8},
{"flags": 4, "matrix": [1, 5], "x":124.4, "y":12.8},
{"flags": 4, "matrix": [1, 6], "x":149.3, "y":12.8},
{"flags": 4, "matrix": [2, 0], "x":0, "y":25.6},
{"flags": 4, "matrix": [2, 1], "x":24.9, "y":25.6},
{"flags": 4, "matrix": [2, 2], "x":49.8, "y":25.6},
{"flags": 4, "matrix": [2, 3], "x":74.6, "y":32},
{"flags": 4, "matrix": [2, 4], "x":90, "y":25.6},
{"flags": 4, "matrix": [2, 5], "x":124.4, "y":25.6},
{"flags": 4, "matrix": [2, 6], "x":149.3, "y":25.6},
{"flags": 4, "matrix": [3, 0], "x":0, "y":38.4},
{"flags": 4, "matrix": [3, 1], "x":24.9, "y":38.4},
{"flags": 4, "matrix": [3, 2], "x":49.8, "y":38.4},
{"flags": 4, "matrix": [3, 3], "x":99.6, "y":38.4},
{"flags": 4, "matrix": [3, 4], "x":124.4, "y":38.4},
{"flags": 4, "matrix": [3, 5], "x":149.3, "y":38.4},
{"flags": 4, "matrix": [4, 0], "x":0, "y":51.2},
{"flags": 4, "matrix": [4, 1], "x":24.9, "y":51.2},
{"flags": 4, "matrix": [4, 2], "x":49.8, "y":51.2},
{"flags": 4, "matrix": [4, 3], "x":74.6, "y":57.6},
{"flags": 4, "matrix": [4, 5], "x":124.4, "y":51.2},
{"flags": 4, "matrix": [5, 0], "x":12.5, "y":64},
{"flags": 4, "matrix": [5, 1], "x":49.8, "y":64},
{"flags": 4, "matrix": [5, 2], "x":99.6, "y":64},
{"flags": 4, "matrix": [5, 3], "x":124.4, "y":64},
{"flags": 4, "matrix": [5, 4], "x":149.3, "y":64},
{"flags": 2, "x":224, "y":64},
{"flags": 2, "x":74.6, "y":64},
{"flags": 2, "x":0, "y":64},
{"flags": 2, "x":0, "y":0},
{"flags": 2, "x":74.6, "y":0},
{"flags": 2, "x":224, "y":0}
]
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "label":"ESC", "x":0, "y":0},
{"matrix": [0, 1], "label":"BSPC", "x":1, "y":0},
{"matrix": [0, 2], "label":"RGB BACK", "x":2, "y":0},
{"matrix": [0, 3], "label":"RGB OFF", "x":3, "y":0},
{"matrix": [0, 4], "label":"RGB FORW", "x":4, "y":0},
{"matrix": [0, 5], "label":"MAKE", "x":5, "y":0},
{"matrix": [0, 6], "label":"REBOOT", "x":6, "y":0},
{"matrix": [0, 7], "label":"BOOTLOAD", "x":7, "y":0},
{"matrix": [1, 0], "label":"NUMLOCK", "x":0, "y":1},
{"matrix": [1, 1], "label":"PSLS", "x":1, "y":1},
{"matrix": [1, 2], "label":"PAST", "x":2, "y":1},
{"matrix": [1, 3], "label":"PMNS", "x":3, "y":1},
{"matrix": [1, 4], "label":"PAUS", "x":3, "y":1},
{"matrix": [1, 5], "label":"SCRL", "x":3, "y":1},
{"matrix": [1, 6], "label":"PSCR", "x":3, "y":1},
{"matrix": [2, 0], "label":"7", "x":0, "y":2},
{"matrix": [2, 1], "label":"8", "x":1, "y":2},
{"matrix": [2, 2], "label":"9", "x":2, "y":2},
{"matrix": [2, 3], "label":"PPLS", "x":3, "y":2},
{"matrix": [2, 4], "label":"INS", "x":3, "y":2},
{"matrix": [2, 5], "label":"HOME", "x":3, "y":2},
{"matrix": [2, 6], "label":"PGUP", "x":3, "y":2},
{"matrix": [3, 0], "label":"4", "x":0, "y":3},
{"matrix": [3, 1], "label":"5", "x":1, "y":3},
{"matrix": [3, 2], "label":"6", "x":2, "y":3},
{"matrix": [3, 3], "label":"END", "x":3, "y":3},
{"matrix": [3, 4], "label":"DEL", "x":3, "y":3},
{"matrix": [3, 5], "label":"PGDN", "x":3, "y":3},
{"matrix": [4, 0], "label":"1", "x":0, "y":4},
{"matrix": [4, 1], "label":"2", "x":1, "y":4},
{"matrix": [4, 2], "label":"3", "x":2, "y":4},
{"matrix": [4, 3], "label":"PENT", "x":3, "y":4},
{"matrix": [4, 5], "label":"UP", "x":3, "y":4},
{"matrix": [5, 0], "label":"0", "x":0, "y":5},
{"matrix": [5, 1], "label":"PDOT", "x":1, "y":5},
{"matrix": [5, 2], "label":"LEFT", "x":2, "y":5},
{"matrix": [5, 3], "label":"DOWN", "x":3, "y":5},
{"matrix": [5, 4], "label":"RIGHT", "x":4, "y":5},
{"matrix": [5, 5], "label":"KNOB_L", "x":3, "y":5},
{"matrix": [5, 6], "label":"KNOB_R", "x":3, "y":5},
{"matrix": [5, 7], "label":"KNOB_D", "x":3, "y":5}
]
}
}
}

View File

@ -0,0 +1,69 @@
/* Copyright 2021 Katrina (@PepperKats)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
//Display
#ifdef OLED_ENABLE
static void render_logo(void) {
static const char PROGMEM qmk_logo[] = {
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
};
oled_write_P(qmk_logo, false);
}
bool oled_task_kb(void) {
if (!oled_task_user()) { return false; }
render_logo();
return true;
}
#endif
//Knobs
#ifdef ENCODER_ENABLE
bool encoder_update_kb(uint8_t index, bool clockwise) {
if (!encoder_update_user(index, clockwise)) {
return false;
}
if (index == 0) {
// Page Up/Down
if (clockwise) {
tap_code(KC_PGDN);
} else {
tap_code(KC_PGUP);
}
} else if (index == 1) {
// Mouse Wheel Up/Down
if (clockwise) {
tap_code(KC_MS_WH_DOWN);
} else {
tap_code(KC_MS_WH_UP);
}
} else if (index == 2) {
// Volume Up/Down
if (clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
}
return true;
}
#endif

View File

@ -0,0 +1,61 @@
/* Copyright 2021 Katrina (@PepperKats)
*
* 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
enum layers {
_QWERTY,
_LAYERTWO
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* ┌───┐ ┌───────┐┌───┬───┬───┐┌───┬───┬───┐
* ESC KC_BSPCF1 F2 F3 F4 F5 F6
*
*
* NUM / * - PASSCRPSC
*
* 7 8 9 INSHOMPGU
* +
* 4 5 6 ENDDELPGD
*
* 1 2 3 E UP
* N
* 0 DEL T LFTDWNRHT O O O
*
*/
[_QWERTY] = LAYOUT(
MO(1), KC_BSPC, RGB_RMOD, RGB_TOG, RGB_MOD, KC_F1, KC_F2, KC_F3,
KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_PAUS, KC_SCRL, KC_PSCR,
KC_P7, KC_P8, KC_P9, KC_PPLS, KC_INS, KC_HOME, KC_PGUP,
KC_P4, KC_P5, KC_P6, KC_END, KC_DEL, KC_PGDN,
KC_P1, KC_P2, KC_P3, KC_PENT, KC_UP,
KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_END, KC_B
),
[_LAYERTWO] = LAYOUT(
_______, KC_BSPC, RGB_RMOD, RGB_TOG, RGB_MOD, KC_A, QK_REBOOT, QK_BOOTLOADER,
KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_PAUS, KC_SCRL, KC_PSCR,
KC_P7, KC_P8, KC_P9, KC_PPLS, KC_INS, KC_HOME, KC_PGUP,
KC_P4, KC_P5, KC_P6, KC_END, KC_DEL, KC_PGDN,
KC_P1, KC_P2, KC_P3, KC_PENT, KC_UP,
KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_END, KC_B
)
};
/*NOTE FOR PERSON MODIFYING KEYMAP
The large knob press is mapped as KC_B, despite it not having one.
I'm not quite sure why, but the only reason it can't be clicked is because the potentiometer is different.
If you were to replace it with one that can be clicked, it would work. I shorted it and it does work.*/

View File

@ -0,0 +1,24 @@
# doio/kb38
QMK for Megalodon DOIO Triple Knob 38% with OLED Screen.
* Keyboard Maintainer: [Katrina](https://github.com/PepperKats)
* Hardware Supported: Megalodon DOIO Triple Knob 38%
* Hardware Availability: https://www.keebmonkey.com/products/megalodon-doio-triple-knob-38-keyboard-with-oled-screen
Make example for this keyboard (after setting up your build environment):
make doio/kb38:default
Flashing example for this keyboard:
make doio/kb38: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:
* **Physical reset button**: Briefly press the button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@ -0,0 +1,27 @@
RGB_MATRIX_EFFECT(trans)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
static bool trans(effect_params_t* params) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
for (int i = 0; i < 8; i++) {
rgb_matrix_set_color(i, 0x00, 0x00, 0xFF);
}
for (int i = 8; i < 15; i++) {
rgb_matrix_set_color(i, 0xFF, 0x00, 0x92);
}
for (int i = 15; i < 28; i++) {
rgb_matrix_set_color(i, 0xFF, 0xFF, 0xFF);
}
for (int i = 28; i < 33; i++) {
rgb_matrix_set_color(i, 0xFF, 0x00, 0x92);
}
for (int i = 33; i < 38; i++) {
rgb_matrix_set_color(i, 0x00, 0x00, 0xFF);
}
for (int i = 38; i < 44; i++) {
rgb_matrix_set_color(i, 0x00, 0x00, 0xFF);
}
return rgb_matrix_check_finished_leds(led_max);
}
#endif

View File

@ -0,0 +1,3 @@
OLED_ENABLE = yes
ENCODER_ENABLE = yes
RGB_MATRIX_CUSTOM_KB = yes

View File

@ -0,0 +1,26 @@
/* Copyright 2023 Eason <xiaoxuxk@yeah.net>
*
* 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
#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5, D4 }
#define MATRIX_COL_PINS { D6, D7, B4, B5, B6, C6, C7, E2, F7, F6, F5, F4, B0, B1, B2, B3 }
#define DIODE_DIRECTION COL2ROW
#define LED_CAPS_LOCK_PIN F0
#define LED_PIN_ON_STATE 0

View File

@ -0,0 +1,112 @@
{
"keyboard_name": "GREATSWORD80",
"manufacturer": "Eason",
"url": "https://github.com/EasonQian1",
"maintainer": "Eason",
"usb": {
"vid": "0x980E",
"pid": "0x998F",
"device_version": "0.0.1"
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"layouts": {
"LAYOUT": {
"layout": [
{"label": "K00 (D0,D6)", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "K01 (D0,D7)", "matrix": [0, 1], "x": 1.25, "y": 0},
{"label": "K02 (D0,B4)", "matrix": [0, 2], "x": 2.25, "y": 0},
{"label": "K03 (D0,B5)", "matrix": [0, 3], "x": 3.25, "y": 0},
{"label": "K04 (D0,B6)", "matrix": [0, 4], "x": 4.25, "y": 0},
{"label": "K05 (D0,C6)", "matrix": [0, 5], "x": 5.5, "y": 0},
{"label": "K06 (D0,C7)", "matrix": [0, 6], "x": 6.5, "y": 0},
{"label": "K07 (D0,E2)", "matrix": [0, 7], "x": 7.5, "y": 0},
{"label": "K08 (D0,F7)", "matrix": [0, 8], "x": 8.5, "y": 0},
{"label": "K09 (D0,F6)", "matrix": [0, 9], "x": 9.75, "y": 0},
{"label": "K0A (D0,F5)", "matrix": [0, 10], "x": 10.75, "y": 0},
{"label": "K0B (D0,F4)", "matrix": [0, 11], "x": 11.75, "y": 0},
{"label": "K0C (D0,B0)", "matrix": [0, 12], "x": 12.75, "y": 0},
{"label": "K0D (D0,B1)", "matrix": [0, 13], "x": 14, "y": 0},
{"label": "K0E (D0,B2)", "matrix": [0, 14], "x": 15.5, "y": 0},
{"label": "K0F (D0,B3)", "matrix": [0, 15], "x": 16.5, "y": 0},
{"label": "K5A (D4,F5)", "matrix": [5, 10], "x": 17.5, "y": 0},
{"label": "K10 (D1,D6)", "matrix": [1, 0], "x": 0, "y": 1.25},
{"label": "K11 (D1,D7)", "matrix": [1, 1], "x": 1, "y": 1.25},
{"label": "K12 (D1,B4)", "matrix": [1, 2], "x": 2, "y": 1.25},
{"label": "K13 (D1,B5)", "matrix": [1, 3], "x": 3, "y": 1.25},
{"label": "K14 (D1,B6)", "matrix": [1, 4], "x": 4, "y": 1.25},
{"label": "K15 (D1,C6)", "matrix": [1, 5], "x": 5, "y": 1.25},
{"label": "K16 (D1,C7)", "matrix": [1, 6], "x": 6, "y": 1.25},
{"label": "K17 (D1,E2)", "matrix": [1, 7], "x": 7, "y": 1.25},
{"label": "K18 (D1,F7)", "matrix": [1, 8], "x": 8, "y": 1.25},
{"label": "K19 (D1,F6)", "matrix": [1, 9], "x": 9, "y": 1.25},
{"label": "K1A (D1,F5)", "matrix": [1, 10], "x": 10, "y": 1.25},
{"label": "K1B (D1,F4)", "matrix": [1, 11], "x": 11, "y": 1.25},
{"label": "K1C (D1,B0)", "matrix": [1, 12], "x": 12, "y": 1.25},
{"label": "K1D (D1,B1)", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
{"label": "K1E (D1,B2)", "matrix": [1, 14], "x": 15.5, "y": 1.25},
{"label": "K1F (D1,B3)", "matrix": [1, 15], "x": 16.5, "y": 1.25},
{"label": "K5B (D4,F4)", "matrix": [5, 11], "x": 17.5, "y": 1.25},
{"label": "K20 (D2,D6)", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"label": "K21 (D2,D7)", "matrix": [2, 1], "x": 1.5, "y": 2.25},
{"label": "K22 (D2,B4)", "matrix": [2, 2], "x": 2.5, "y": 2.25},
{"label": "K23 (D2,B5)", "matrix": [2, 3], "x": 3.5, "y": 2.25},
{"label": "K24 (D2,B6)", "matrix": [2, 4], "x": 4.5, "y": 2.25},
{"label": "K25 (D2,C6)", "matrix": [2, 5], "x": 5.5, "y": 2.25},
{"label": "K26 (D2,C7)", "matrix": [2, 6], "x": 6.5, "y": 2.25},
{"label": "K27 (D2,E2)", "matrix": [2, 7], "x": 7.5, "y": 2.25},
{"label": "K28 (D2,F7)", "matrix": [2, 8], "x": 8.5, "y": 2.25},
{"label": "K29 (D2,F6)", "matrix": [2, 9], "x": 9.5, "y": 2.25},
{"label": "K2A (D2,F5)", "matrix": [2, 10], "x": 10.5, "y": 2.25},
{"label": "K2B (D2,F4)", "matrix": [2, 11], "x": 11.5, "y": 2.25},
{"label": "K2C (D2,B0)", "matrix": [2, 12], "x": 12.5, "y": 2.25},
{"label": "K2D (D2,B1)", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
{"label": "K2E (D2,B2)", "matrix": [2, 14], "x": 15.5, "y": 2.25},
{"label": "K2F (D2,B3)", "matrix": [2, 15], "x": 16.5, "y": 2.25},
{"label": "K5C (D4,B0)", "matrix": [5, 12], "x": 17.5, "y": 2.25},
{"label": "K30 (D3,D6)", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"label": "K31 (D3,D7)", "matrix": [3, 1], "x": 1.75, "y": 3.25},
{"label": "K32 (D3,B4)", "matrix": [3, 2], "x": 2.75, "y": 3.25},
{"label": "K33 (D3,B5)", "matrix": [3, 3], "x": 3.75, "y": 3.25},
{"label": "K34 (D3,B6)", "matrix": [3, 4], "x": 4.75, "y": 3.25},
{"label": "K35 (D3,C6)", "matrix": [3, 5], "x": 5.75, "y": 3.25},
{"label": "K36 (D3,C7)", "matrix": [3, 6], "x": 6.75, "y": 3.25},
{"label": "K37 (D3,E2)", "matrix": [3, 7], "x": 7.75, "y": 3.25},
{"label": "K38 (D3,F7)", "matrix": [3, 8], "x": 8.75, "y": 3.25},
{"label": "K39 (D3,F6)", "matrix": [3, 9], "x": 9.75, "y": 3.25},
{"label": "K3A (D3,F5)", "matrix": [3, 10], "x": 10.75, "y": 3.25},
{"label": "K3B (D3,F4)", "matrix": [3, 11], "x": 11.75, "y": 3.25},
{"label": "K3C (D3,B0)", "matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
{"label": "K40 (D5,D6)", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
{"label": "K41 (D5,D7)", "matrix": [4, 1], "x": 1.25, "y": 4.25},
{"label": "K42 (D5,B4)", "matrix": [4, 2], "x": 2.25, "y": 4.25},
{"label": "K43 (D5,B5)", "matrix": [4, 3], "x": 3.25, "y": 4.25},
{"label": "K44 (D5,B6)", "matrix": [4, 4], "x": 4.25, "y": 4.25},
{"label": "K45 (D5,C6)", "matrix": [4, 5], "x": 5.25, "y": 4.25},
{"label": "K46 (D5,C7)", "matrix": [4, 6], "x": 6.25, "y": 4.25},
{"label": "K47 (D5,E2)", "matrix": [4, 7], "x": 7.25, "y": 4.25},
{"label": "K48 (D5,F7)", "matrix": [4, 8], "x": 8.25, "y": 4.25},
{"label": "K49 (D5,F6)", "matrix": [4, 9], "x": 9.25, "y": 4.25},
{"label": "K4A (D5,F5)", "matrix": [4, 10], "x": 10.25, "y": 4.25},
{"label": "K4B (D5,F4)", "matrix": [4, 11], "x": 11.25, "y": 4.25},
{"label": "K4C (D5,B0)", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
{"label": "K4E (D5,B2)", "matrix": [4, 14], "x": 16.5, "y": 4.25},
{"label": "K50 (D4,D6)", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
{"label": "K51 (D4,D7)", "matrix": [5, 1], "x": 1.5, "y": 5.25},
{"label": "K52 (D4,B4)", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
{"label": "K56 (D4,C7)", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
{"label": "K57 (D4,E2)", "matrix": [5, 7], "x": 11, "y": 5.25, "w": 1.5},
{"label": "K58 (D4,F7)", "matrix": [5, 8], "x": 12.5, "y": 5.25},
{"label": "K59 (D4,F6)", "matrix": [5, 9], "x": 13.5, "y": 5.25, "w": 1.5},
{"label": "K5D (D4,B1)", "matrix": [5, 13], "x": 15.5, "y": 5.25},
{"label": "K5E (D4,B2)", "matrix": [5, 14], "x": 16.5, "y": 5.25},
{"label": "K5F (D4,B3)", "matrix": [5, 15], "x": 17.5, "y": 5.25}
]
}
}
}

View File

@ -0,0 +1,38 @@
/* Copyright 2023 Eason <xiaoxuxk@yeah.net>
*
* 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
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
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, MO(1), 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_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
};

View File

@ -0,0 +1,56 @@
/* Copyright 2023 Eason <xiaoxuxk@yeah.net>
*
* 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
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
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, MO(1), 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_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[2] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[3] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
};

View File

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

View File

@ -0,0 +1,22 @@
# GREATSWORD80
A customizable soldering 80% keyboard.
* Keyboard Maintainer: [eason](https://github.com/EasonQian1)
* Hardware Supported: greatsword80
* Hardware Availability: [eason](https://github.com/EasonQian1)
Make example for this keyboard (after setting up your build environment):
make eason/greatsword80:default
Flashing example for this keyboard:
make eason/greatsword80: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 esc in the keyboard then replug
* **Physical reset button**: Briefly press the button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT`

View File

@ -0,0 +1,12 @@
# 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 N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output

119
keyboards/igloo/info.json Normal file
View File

@ -0,0 +1,119 @@
{
"manufacturer": "Dong Jae Shin",
"keyboard_name": "Igloo",
"maintainer": "Dong Jae Shin",
"bootloader": "atmel-dfu",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["F7", "F6", "F5", "F4", "F1", "F0",
"B0", "B1", "B2", "B4", "B5", "B6",
"C6", "C7", "D5", "D6", "D4"],
"rows": ["B7", "D0", "D1", "D2", "D3"]
},
"processor": "atmega32u4",
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
"vid": "0xBEAD"
},
"layouts": {
"LAYOUT_tkl_nofrow_ansi": {
"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], "w": 2, "x": 13, "y": 0 },
{ "matrix": [0, 14], "x": 15.25, "y": 0 },
{ "matrix": [0, 15], "x": 16.25, "y": 0 },
{ "matrix": [0, 16], "x": 17.25, "y": 0 },
{ "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "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], "w": 1.5, "x": 13.5, "y": 1 },
{ "matrix": [1, 14], "x": 15.25, "y": 1 },
{ "matrix": [1, 15], "x": 16.25, "y": 1 },
{ "matrix": [1, 16], "x": 17.25, "y": 1 },
{ "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "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, 12], "w": 2.25, "x": 12.75, "y": 2 },
{ "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
{ "matrix": [2, 14], "x": 12.75, "y": 2 },
{ "matrix": [2, 15], "x": 13, "y": 0 },
{ "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 1.25, "y": 3 },
{ "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, 12], "x": 12.25, "y": 3 },
{ "matrix": [3, 14], "x": 13.25, "y": 3 },
{ "matrix": [3, 15], "x": 16.25, "y": 3 },
{ "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "matrix": [4, 3], "x": 6.25, "y": 4 },
{ "matrix": [4, 4], "w": 2.25, "x": 4, "y": 4 },
{ "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 },
{ "matrix": [4, 6], "w": 2.25, "x": 7.25, "y": 4 },
{ "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4 },
{ "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4 },
{ "matrix": [4, 11], "w": 1.25, "x": 12.5, "y": 4 },
{ "matrix": [4, 12], "w": 1.25, "x": 13.75, "y": 4 },
{ "matrix": [4, 13], "w": 1.25, "x": 15, "y": 4 },
{ "matrix": [4, 14], "x": 15.25, "y": 4 },
{ "matrix": [4, 15], "x": 16.25, "y": 4 },
{ "matrix": [4, 16], "x": 17.25, "y": 4 }
]
}
}
}

View File

@ -0,0 +1,42 @@
/*
Copyright 2023 Dong Jae Shin <djok0127@gmail.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
enum layers {
_LAYER0,
_LAYER1,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LAYER0] = LAYOUT_tkl_nofrow_ansi(
// 0, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
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_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_ENT, KC_NONUS_HASH, KC_BSPC,
KC_LSFT, KC_BSLS, 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, MO(1), KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_LAYER1] = LAYOUT_tkl_nofrow_ansi(
// 0, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
KC_GRV, 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_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,42 @@
/*
Copyright 2023 Dong Jae Shin <djok0127@gmail.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
enum layers {
_LAYER0,
_LAYER1,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LAYER0] = LAYOUT_tkl_nofrow_ansi(
// 0, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
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_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_ENT, KC_NONUS_HASH, KC_BSPC,
KC_LSFT, KC_BSLS, 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, MO(1), KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_LAYER1] = LAYOUT_tkl_nofrow_ansi(
// 0, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
KC_GRV, 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_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

18
keyboards/igloo/readme.md Normal file
View File

@ -0,0 +1,18 @@
# Igloo
* Keyboard Maintainer: [Chris Shin](https://github.com/djok0127)
* Hardware Supported: Igloo PCB
Make example for this keyboard (after setting up your build environment):
make igloo:default
Flashing example for this keyboard:
make igloo: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
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead

1
keyboards/igloo/rules.mk Normal file
View File

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

View File

@ -112,8 +112,8 @@
{ "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 }, { "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
{ "matrix": [4, 1], "x": 1.5, "y": 4 }, { "matrix": [4, 1], "x": 1.5, "y": 4 },
{ "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 }, { "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
{ "matrix": [4, 3], "w": 7, "x": 4, "y": 4 }, { "matrix": [4, 7], "w": 7, "x": 4, "y": 4 },
{ "matrix": [4, 10], "w": 1.5, "x": 11, "y": 4 }, { "matrix": [4, 11], "w": 1.5, "x": 11, "y": 4 },
{ "matrix": [4, 12], "x": 13, "y": 4 }, { "matrix": [4, 12], "x": 13, "y": 4 },
{ "matrix": [4, 13], "x": 14, "y": 4 }, { "matrix": [4, 13], "x": 14, "y": 4 },
{ "matrix": [4, 14], "x": 15, "y": 4 } { "matrix": [4, 14], "x": 15, "y": 4 }

View File

@ -8,6 +8,8 @@
"pid": "0x0110", "pid": "0x0110",
"device_version": "1.0.0" "device_version": "1.0.0"
}, },
"processor": "STM32L432",
"bootloader": "stm32-dfu",
"layouts": { "layouts": {
"LAYOUT_ansi_67": { "LAYOUT_ansi_67": {
"layout": [ "layout": [

View File

@ -1,9 +1,3 @@
# MCU name
MCU = STM32L433
# Bootloader selection
BOOTLOADER = stm32-dfu
# Build Options # Build Options
# change yes to no to disable # change yes to no to disable
# #

View File

@ -8,6 +8,8 @@
"pid": "0x0111", "pid": "0x0111",
"device_version": "1.0.0" "device_version": "1.0.0"
}, },
"processor": "STM32L432",
"bootloader": "stm32-dfu",
"layouts": { "layouts": {
"LAYOUT_ansi_67": { "LAYOUT_ansi_67": {
"layout": [ "layout": [

View File

@ -1,9 +1,3 @@
# MCU name
MCU = STM32L433
# Bootloader selection
BOOTLOADER = stm32-dfu
# Build Options # Build Options
# change yes to no to disable # change yes to no to disable
# #

View File

@ -8,6 +8,8 @@
"pid": "0x0112", "pid": "0x0112",
"device_version": "1.0.0" "device_version": "1.0.0"
}, },
"processor": "STM32L432",
"bootloader": "stm32-dfu",
"layouts": { "layouts": {
"LAYOUT_iso_68": { "LAYOUT_iso_68": {
"layout": [ "layout": [

View File

@ -1,9 +1,3 @@
# MCU name
MCU = STM32L433
# Bootloader selection
BOOTLOADER = stm32-dfu
# Build Options # Build Options
# change yes to no to disable # change yes to no to disable
# #

View File

@ -8,6 +8,8 @@
"pid": "0x0113", "pid": "0x0113",
"device_version": "1.0.0" "device_version": "1.0.0"
}, },
"processor": "STM32L432",
"bootloader": "stm32-dfu",
"layouts": { "layouts": {
"LAYOUT_iso_68": { "LAYOUT_iso_68": {
"layout": [ "layout": [

View File

@ -1,9 +1,3 @@
# MCU name
MCU = STM32L433
# Bootloader selection
BOOTLOADER = stm32-dfu
# Build Options # Build Options
# change yes to no to disable # change yes to no to disable
# #

View File

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

View File

@ -0,0 +1,94 @@
{
"keyboard_name": "Keychron Q2",
"manufacturer": "Keychron",
"url": "https://github.com/Keychron",
"maintainer": "lalalademaxiya1",
"usb": {
"vid": "0x3434",
"pid": "0x0114",
"device_version": "1.0.0"
},
"processor": "STM32L432",
"bootloader": "stm32-dfu",
"layouts": {
"LAYOUT_jis_71": {
"layout": [
{"matrix":[0, 0], "x":0, "y":0.25},
{"matrix":[0, 1], "x":1, "y":0.25},
{"matrix":[0, 2], "x":2, "y":0.25},
{"matrix":[0, 3], "x":3, "y":0.25},
{"matrix":[0, 4], "x":4, "y":0.25},
{"matrix":[0, 5], "x":5, "y":0.25},
{"matrix":[0, 6], "x":6, "y":0.25},
{"matrix":[0, 7], "x":7, "y":0.25},
{"matrix":[0, 8], "x":8, "y":0.25},
{"matrix":[0, 9], "x":9, "y":0.25},
{"matrix":[0,10], "x":10, "y":0.25},
{"matrix":[0,11], "x":11, "y":0.25},
{"matrix":[0,12], "x":12, "y":0.25},
{"matrix":[0,13], "x":13, "y":0.25},
{"matrix":[3, 1], "x":14, "y":0.25},
{"matrix":[0,14], "x":15.25, "y":0},
{"matrix":[1, 0], "x":0, "y":1.25, "w":1.5},
{"matrix":[1, 1], "x":1.5, "y":1.25},
{"matrix":[1, 2], "x":2.5, "y":1.25},
{"matrix":[1, 3], "x":3.5, "y":1.25},
{"matrix":[1, 4], "x":4.5, "y":1.25},
{"matrix":[1, 5], "x":5.5, "y":1.25},
{"matrix":[1, 6], "x":6.5, "y":1.25},
{"matrix":[1, 7], "x":7.5, "y":1.25},
{"matrix":[1, 8], "x":8.5, "y":1.25},
{"matrix":[1, 9], "x":9.5, "y":1.25},
{"matrix":[1,10], "x":10.5, "y":1.25},
{"matrix":[1,11], "x":11.5, "y":1.25},
{"matrix":[1,12], "x":12.5, "y":1.25},
{"matrix":[1,14], "x":15.25, "y":1.25},
{"matrix":[2, 0], "x":0, "y":2.25, "w":1.75},
{"matrix":[2, 1], "x":1.75, "y":2.25},
{"matrix":[2, 2], "x":2.75, "y":2.25},
{"matrix":[2, 3], "x":3.75, "y":2.25},
{"matrix":[2, 4], "x":4.75, "y":2.25},
{"matrix":[2, 5], "x":5.75, "y":2.25},
{"matrix":[2, 6], "x":6.75, "y":2.25},
{"matrix":[2, 7], "x":7.75, "y":2.25},
{"matrix":[2, 8], "x":8.75, "y":2.25},
{"matrix":[2, 9], "x":9.75, "y":2.25},
{"matrix":[2,10], "x":10.75, "y":2.25},
{"matrix":[2,11], "x":11.75, "y":2.25},
{"matrix":[2,13], "x":12.75, "y":2.25},
{"matrix":[1,13], "x":13.75, "y":1.25, "w":1.25, "h":2},
{"matrix":[2,14], "x":15.25, "y":2.25},
{"matrix":[3, 0], "x":0, "y":3.25, "w":2.25},
{"matrix":[3, 2], "x":2.25, "y":3.25},
{"matrix":[3, 3], "x":3.25, "y":3.25},
{"matrix":[3, 4], "x":4.25, "y":3.25},
{"matrix":[3, 5], "x":5.25, "y":3.25},
{"matrix":[3, 6], "x":6.25, "y":3.25},
{"matrix":[3, 7], "x":7.25, "y":3.25},
{"matrix":[3, 8], "x":8.25, "y":3.25},
{"matrix":[3, 9], "x":9.25, "y":3.25},
{"matrix":[3,10], "x":10.25, "y":3.25},
{"matrix":[3,11], "x":11.25, "y":3.25},
{"matrix":[3,12], "x":12.25, "y":3.25},
{"matrix":[3,13], "x":13.25, "y":3.25},
{"matrix":[3,14], "x":14.25, "y":3.25},
{"matrix":[4, 0], "x":0, "y":4.25, "w":1.25},
{"matrix":[4, 1], "x":1.25, "y":4.25},
{"matrix":[4, 2], "x":2.25, "y":4.25, "w":1.25},
{"matrix":[4, 3], "x":3.5, "y":4.25},
{"matrix":[4, 6], "x":4.5, "y":4.25, "w":4.5},
{"matrix":[4, 9], "x":9, "y":4.25, "w":1.25},
{"matrix":[4,10], "x":10.25, "y":4.25},
{"matrix":[4,11], "x":11.25, "y":4.25},
{"matrix":[4,12], "x":12.25, "y":4.25},
{"matrix":[4,13], "x":13.25, "y":4.25},
{"matrix":[2,12], "x":14.25, "y":4.25},
{"matrix":[4,14], "x":15.25, "y":4.25}
]
}
}
}

View File

@ -0,0 +1,134 @@
/* Copyright 2023 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
#ifdef RGB_MATRIX_ENABLE
const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
{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, 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, C_11, A_11, B_11},
{0, C_12, A_12, B_12},
{0, C_13, A_13, B_13},
{0, C_14, A_14, B_14},
{0, C_15, A_15, B_15},
{0, C_16, A_16, B_16},
{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, F_6, D_6, E_6},
{0, F_7, D_7, E_7},
{0, F_8, D_8, E_8},
{0, F_9, D_9, E_9},
{0, F_10, D_10, E_10},
{0, F_11, D_11, E_11},
{0, F_12, D_12, E_12},
{0, F_13, D_13, E_13},
{0, F_16, D_16, E_16},
{0, I_1, G_1, H_1},
{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},
{1, I_6, G_6, H_6},
{1, I_7, G_7, H_7},
{1, I_8, G_8, H_8},
{1, I_9, G_9, H_9},
{1, I_10, G_10, H_10},
{1, I_11, G_11, H_11},
{1, I_12, G_12, H_12},
{1, I_14, G_14, H_14},
{0, F_14, D_14, E_14},
{1, I_16, G_16, H_16},
{1, C_1, A_1, B_1},
{1, C_3, A_3, B_3},
{1, C_4, A_4, B_4},
{1, C_5, A_5, B_5},
{1, C_6, A_6, B_6},
{1, C_7, A_7, B_7},
{1, C_8, A_8, B_8},
{1, C_9, A_9, B_9},
{1, C_10, A_10, B_10},
{1, C_11, A_11, B_11},
{1, C_12, A_12, B_12},
{1, C_13, A_13, B_13},
{1, C_14, A_14, B_14},
{1, C_15, A_15, B_15},
{1, F_1, D_1, E_1},
{1, F_2, D_2, E_2},
{1, F_3, D_3, E_3},
{1, F_4, D_4, E_4},
{1, F_7, D_7, E_7},
{1, F_10, D_10, E_10},
{1, F_11, D_11, E_11},
{1, F_12, D_12, E_12},
{1, F_13, D_13, E_13},
{1, F_14, D_14, E_14},
{1, F_15, D_15, E_15},
{1, 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, 15 },
{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 43, 29 },
{ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 69, 42, 44 },
{ 45, 14, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58 },
{ 59, 60, 61, 62, __, __, 63, __, __, 64, 65, 66, 67, 68, 70 }
},
{
// LED Index to Physical Position
{0,4}, {15,4}, {29,4}, {44,4}, {59,4}, {73,4}, {88,4}, {103,4}, {117,4}, {132,4}, {146,4}, {161,4}, {176,4}, {190,4}, {205,4}, {224,0},
{4,19}, {22,19}, {37,19}, {51,19}, {66,19}, {81,19}, {95,19}, {110,19}, {125,19}, {139,19}, {154,19}, {168,19}, {183,19}, {224,19},
{6,34}, {26,34}, {40,34}, {55,34}, {70,34}, {84,34}, {99,34}, {114,34}, {128,34}, {143,34}, {158,34}, {172,34}, {187,34}, {207,29}, {224,34},
{9,49}, {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {150,49}, {165,49}, {179,49}, {194,49}, {209,49},
{2,64}, {18,64}, {35,64}, {51,64}, {92,64}, {134,64}, {150,64}, {165,64}, {179,64}, {194,64}, {209,64}, {223,64},
},
{
// RGB LED Index to Flag
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1
}
};
#endif // RGB_MATRIX_ENABLE

View File

@ -0,0 +1,67 @@
/* Copyright 2023 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// clang-format off
enum layers{
MAC_BASE,
WIN_BASE,
_FN1,
_FN2,
_FN3
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_jis_71(
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_INT3, KC_BSPC, KC_INS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP,
KC_LCTL, KC_LOPT, KC_LCMD, KC_LNG2, KC_SPC, KC_LNG1, KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
[WIN_BASE] = LAYOUT_jis_71(
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_INT3, KC_BSPC, KC_INS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP,
KC_LCTL, KC_LWIN, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
[_FN1] = LAYOUT_jis_71(
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_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[_FN2] = LAYOUT_jis_71(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[_FN3] = LAYOUT_jis_71(
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, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
};

View File

@ -0,0 +1,74 @@
/* Copyright 2023 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#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_jis_71(
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_INT3, KC_BSPC, KC_INS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP,
KC_LCTL, KC_LOPTN, KC_LCMMD, KC_LNG2, KC_SPC, KC_LNG1, KC_RCMMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
[WIN_BASE] = LAYOUT_jis_71(
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_INT3, KC_BSPC, KC_INS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP,
KC_LCTL, KC_LWIN, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
[_FN1] = LAYOUT_jis_71(
KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[_FN2] = LAYOUT_jis_71(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[_FN3] = LAYOUT_jis_71(
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

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

View File

@ -0,0 +1,67 @@
/* Copyright 2023 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// clang-format off
enum layers{
MAC_BASE,
WIN_BASE,
_FN1,
_FN2,
_FN3
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_jis_71(
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_INT3, KC_BSPC, KC_INS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP,
KC_LCTL, KC_LOPT, KC_LCMD, KC_LNG2, KC_SPC, KC_LNG1, KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
[WIN_BASE] = LAYOUT_jis_71(
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_INT3, KC_BSPC, KC_INS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP,
KC_LCTL, KC_LWIN, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
[_FN1] = LAYOUT_jis_71(
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_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[_FN2] = LAYOUT_jis_71(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[_FN3] = LAYOUT_jis_71(
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, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
};

View File

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

View File

@ -0,0 +1,21 @@
# 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
RGB_MATRIX_DRIVER = CKLED2001
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

View File

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

View File

@ -0,0 +1,94 @@
{
"keyboard_name": "Keychron Q2",
"manufacturer": "Keychron",
"url": "https://github.com/Keychron",
"maintainer": "lalalademaxiya1",
"usb": {
"vid": "0x3434",
"pid": "0x0115",
"device_version": "1.0.0"
},
"processor": "STM32L432",
"bootloader": "stm32-dfu",
"layouts": {
"LAYOUT_jis_71": {
"layout": [
{"matrix":[0, 0], "x":0, "y":0.25},
{"matrix":[0, 1], "x":1, "y":0.25},
{"matrix":[0, 2], "x":2, "y":0.25},
{"matrix":[0, 3], "x":3, "y":0.25},
{"matrix":[0, 4], "x":4, "y":0.25},
{"matrix":[0, 5], "x":5, "y":0.25},
{"matrix":[0, 6], "x":6, "y":0.25},
{"matrix":[0, 7], "x":7, "y":0.25},
{"matrix":[0, 8], "x":8, "y":0.25},
{"matrix":[0, 9], "x":9, "y":0.25},
{"matrix":[0,10], "x":10, "y":0.25},
{"matrix":[0,11], "x":11, "y":0.25},
{"matrix":[0,12], "x":12, "y":0.25},
{"matrix":[0,13], "x":13, "y":0.25},
{"matrix":[3, 1], "x":14, "y":0.25},
{"matrix":[0,14], "x":15.25, "y":0},
{"matrix":[1, 0], "x":0, "y":1.25, "w":1.5},
{"matrix":[1, 1], "x":1.5, "y":1.25},
{"matrix":[1, 2], "x":2.5, "y":1.25},
{"matrix":[1, 3], "x":3.5, "y":1.25},
{"matrix":[1, 4], "x":4.5, "y":1.25},
{"matrix":[1, 5], "x":5.5, "y":1.25},
{"matrix":[1, 6], "x":6.5, "y":1.25},
{"matrix":[1, 7], "x":7.5, "y":1.25},
{"matrix":[1, 8], "x":8.5, "y":1.25},
{"matrix":[1, 9], "x":9.5, "y":1.25},
{"matrix":[1,10], "x":10.5, "y":1.25},
{"matrix":[1,11], "x":11.5, "y":1.25},
{"matrix":[1,12], "x":12.5, "y":1.25},
{"matrix":[1,14], "x":15.25, "y":1.25},
{"matrix":[2, 0], "x":0, "y":2.25, "w":1.75},
{"matrix":[2, 1], "x":1.75, "y":2.25},
{"matrix":[2, 2], "x":2.75, "y":2.25},
{"matrix":[2, 3], "x":3.75, "y":2.25},
{"matrix":[2, 4], "x":4.75, "y":2.25},
{"matrix":[2, 5], "x":5.75, "y":2.25},
{"matrix":[2, 6], "x":6.75, "y":2.25},
{"matrix":[2, 7], "x":7.75, "y":2.25},
{"matrix":[2, 8], "x":8.75, "y":2.25},
{"matrix":[2, 9], "x":9.75, "y":2.25},
{"matrix":[2,10], "x":10.75, "y":2.25},
{"matrix":[2,11], "x":11.75, "y":2.25},
{"matrix":[2,13], "x":12.75, "y":2.25},
{"matrix":[1,13], "x":13.75, "y":1.25, "w":1.25, "h":2},
{"matrix":[2,14], "x":15.25, "y":2.25},
{"matrix":[3, 0], "x":0, "y":3.25, "w":2.25},
{"matrix":[3, 2], "x":2.25, "y":3.25},
{"matrix":[3, 3], "x":3.25, "y":3.25},
{"matrix":[3, 4], "x":4.25, "y":3.25},
{"matrix":[3, 5], "x":5.25, "y":3.25},
{"matrix":[3, 6], "x":6.25, "y":3.25},
{"matrix":[3, 7], "x":7.25, "y":3.25},
{"matrix":[3, 8], "x":8.25, "y":3.25},
{"matrix":[3, 9], "x":9.25, "y":3.25},
{"matrix":[3,10], "x":10.25, "y":3.25},
{"matrix":[3,11], "x":11.25, "y":3.25},
{"matrix":[3,12], "x":12.25, "y":3.25},
{"matrix":[3,13], "x":13.25, "y":3.25},
{"matrix":[3,14], "x":14.25, "y":3.25},
{"matrix":[4, 0], "x":0, "y":4.25, "w":1.25},
{"matrix":[4, 1], "x":1.25, "y":4.25},
{"matrix":[4, 2], "x":2.25, "y":4.25, "w":1.25},
{"matrix":[4, 3], "x":3.5, "y":4.25},
{"matrix":[4, 6], "x":4.5, "y":4.25, "w":4.5},
{"matrix":[4, 9], "x":9, "y":4.25, "w":1.25},
{"matrix":[4,10], "x":10.25, "y":4.25},
{"matrix":[4,11], "x":11.25, "y":4.25},
{"matrix":[4,12], "x":12.25, "y":4.25},
{"matrix":[4,13], "x":13.25, "y":4.25},
{"matrix":[2,12], "x":14.25, "y":4.25},
{"matrix":[4,14], "x":15.25, "y":4.25}
]
}
}
}

View File

@ -0,0 +1,134 @@
/* Copyright 2023 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
#ifdef RGB_MATRIX_ENABLE
const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
{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, 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, C_11, A_11, B_11},
{0, C_12, A_12, B_12},
{0, C_13, A_13, B_13},
{0, C_14, A_14, B_14},
{0, C_15, A_15, B_15},
{0, C_16, A_16, B_16},
{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, F_6, D_6, E_6},
{0, F_7, D_7, E_7},
{0, F_8, D_8, E_8},
{0, F_9, D_9, E_9},
{0, F_10, D_10, E_10},
{0, F_11, D_11, E_11},
{0, F_12, D_12, E_12},
{0, F_13, D_13, E_13},
{0, F_16, D_16, E_16},
{0, I_1, G_1, H_1},
{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},
{1, I_6, G_6, H_6},
{1, I_7, G_7, H_7},
{1, I_8, G_8, H_8},
{1, I_9, G_9, H_9},
{1, I_10, G_10, H_10},
{1, I_11, G_11, H_11},
{1, I_12, G_12, H_12},
{1, I_14, G_14, H_14},
{0, F_14, D_14, E_14},
{1, I_16, G_16, H_16},
{1, C_1, A_1, B_1},
{1, C_3, A_3, B_3},
{1, C_4, A_4, B_4},
{1, C_5, A_5, B_5},
{1, C_6, A_6, B_6},
{1, C_7, A_7, B_7},
{1, C_8, A_8, B_8},
{1, C_9, A_9, B_9},
{1, C_10, A_10, B_10},
{1, C_11, A_11, B_11},
{1, C_12, A_12, B_12},
{1, C_13, A_13, B_13},
{1, C_14, A_14, B_14},
{1, C_15, A_15, B_15},
{1, F_1, D_1, E_1},
{1, F_2, D_2, E_2},
{1, F_3, D_3, E_3},
{1, F_4, D_4, E_4},
{1, F_7, D_7, E_7},
{1, F_10, D_10, E_10},
{1, F_11, D_11, E_11},
{1, F_12, D_12, E_12},
{1, F_13, D_13, E_13},
{1, F_14, D_14, E_14},
{1, F_15, D_15, E_15},
{1, 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, 15 },
{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 43, 29 },
{ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 69, 42, 44 },
{ 45, 14, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58 },
{ 59, 60, 61, 62, __, __, 63, __, __, 64, 65, 66, 67, 68, 70 },
},
{
// LED Index to Physical Position
{0,4}, {15,4}, {29,4}, {44,4}, {59,4}, {73,4}, {88,4}, {103,4}, {117,4}, {132,4}, {146,4}, {161,4}, {176,4}, {190,4}, {205,4}, {224,0},
{4,19}, {22,19}, {37,19}, {51,19}, {66,19}, {81,19}, {95,19}, {110,19}, {125,19}, {139,19}, {154,19}, {168,19}, {183,19}, {224,19},
{6,34}, {26,34}, {40,34}, {55,34}, {70,34}, {84,34}, {99,34}, {114,34}, {128,34}, {143,34}, {158,34}, {172,34}, {187,34}, {207,29}, {224,34},
{9,49}, {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {150,49}, {165,49}, {179,49}, {194,49}, {209,49},
{2,64}, {18,64}, {35,64}, {51,64}, {92,64}, {134,64}, {150,64}, {165,64}, {179,64}, {194,64}, {209,64}, {223,64},
},
{
// RGB LED Index to Flag
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
}
};
#endif // RGB_MATRIX_ENABLE

View File

@ -0,0 +1,77 @@
/* Copyright 2023 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// clang-format off
enum layers{
MAC_BASE,
WIN_BASE,
_FN1,
_FN2,
_FN3
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_jis_71(
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_INT3, KC_BSPC, KC_MUTE,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP,
KC_LCTL, KC_LOPT, KC_LCMD, KC_LNG2, KC_SPC, KC_LNG1, KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
[WIN_BASE] = LAYOUT_jis_71(
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_INT3, KC_BSPC, KC_MUTE,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP,
KC_LCTL, KC_LWIN, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
[_FN1] = LAYOUT_jis_71(
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_TOG,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[_FN2] = LAYOUT_jis_71(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[_FN3] = LAYOUT_jis_71(
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, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
[WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
[_FN1] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
[_FN2] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
[_FN3] = { ENCODER_CCW_CW(_______, _______)}
};
#endif // ENCODER_MAP_ENABLE

View File

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

View File

@ -0,0 +1,84 @@
/* Copyright 2023 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#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_jis_71(
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_INT3, KC_BSPC, KC_MUTE,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP,
KC_LCTL, KC_LOPTN, KC_LCMMD, KC_LNG2, KC_SPC, KC_LNG1, KC_RCMMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
[WIN_BASE] = LAYOUT_jis_71(
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_INT3, KC_BSPC, KC_MUTE,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP,
KC_LCTL, KC_LWIN, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
[_FN1] = LAYOUT_jis_71(
KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[_FN2] = LAYOUT_jis_71(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[_FN3] = LAYOUT_jis_71(
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
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
[WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
[_FN1] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
[_FN2] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
[_FN3] = { ENCODER_CCW_CW(_______, _______)}
};
#endif // ENCODER_MAP_ENABLE
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!process_record_keychron(keycode, record)) {
return false;
}
return true;
}

View File

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

View File

@ -0,0 +1,77 @@
/* Copyright 2023 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// clang-format off
enum layers{
MAC_BASE,
WIN_BASE,
_FN1,
_FN2,
_FN3
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_jis_71(
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_INT3, KC_BSPC, KC_MUTE,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP,
KC_LCTL, KC_LOPT, KC_LCMD, KC_LNG2, KC_SPC, KC_LNG1, KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
[WIN_BASE] = LAYOUT_jis_71(
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_INT3, KC_BSPC, KC_MUTE,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP,
KC_LCTL, KC_LWIN, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
[_FN1] = LAYOUT_jis_71(
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_TOG,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[_FN2] = LAYOUT_jis_71(
KC_GRV, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[_FN3] = LAYOUT_jis_71(
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, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
[WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
[_FN1] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
[_FN2] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
[_FN3] = { ENCODER_CCW_CW(_______, _______)}
};
#endif // ENCODER_MAP_ENABLE

View File

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

View File

@ -0,0 +1,22 @@
# 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
ENCODER_ENABLE = yes # Enable Encoder
DIP_SWITCH_ENABLE = yes
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = CKLED2001
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

View File

@ -1,4 +1,4 @@
/* Copyright 2021 @ Keychron (https://www.keychron.com) /* Copyright 2023 @ Keychron (https://www.keychron.com)
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -35,3 +35,45 @@ bool dip_switch_update_kb(uint8_t index, bool active) {
} }
#endif // DIP_SWITCH_ENABLE #endif // DIP_SWITCH_ENABLE
#if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX)
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
if (!process_record_user(keycode, record)) { return false; }
switch (keycode) {
case RGB_TOG:
if (record->event.pressed) {
switch (rgb_matrix_get_flags()) {
case LED_FLAG_ALL: {
rgb_matrix_set_flags(LED_FLAG_NONE);
rgb_matrix_set_color_all(0, 0, 0);
} break;
default: {
rgb_matrix_set_flags(LED_FLAG_ALL);
} break;
}
}
if (!rgb_matrix_is_enabled()) {
rgb_matrix_set_flags(LED_FLAG_ALL);
rgb_matrix_enable();
}
return false;
}
return true;
}
bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; }
// RGB_MATRIX_INDICATOR_SET_COLOR(index, red, green, blue);
if (host_keyboard_led_state().caps_lock) {
RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 255, 255, 255);
} else {
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0);
}
}
return true;
}
#endif // CAPS_LOCK_LED_INDEX

View File

@ -8,11 +8,11 @@ A customizable 65% keyboard.
Make example for this keyboard (after setting up your build environment): Make example for this keyboard (after setting up your build environment):
make keychron/q2/ansi:default make keychron/q2/ansi:default
Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid)) Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
make keychron/q2/ansi:default:flash make keychron/q2/ansi:default:flash
**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard. **Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard.

View File

@ -0,0 +1,18 @@
/* Copyright 2022 vertex
*
* 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 "arc60h.h"

View File

@ -0,0 +1,36 @@
/* Copyright 2022 vertex
*
* 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
#include "quantum.h"
#define ___ KC_NO
#define LAYOUT_all( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \
K40, K41, K43, K46, K4B, K4C, K4E \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, ___, K1E }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, ___, K2D, ___ }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, ___, K3D, K3E }, \
{ K40, K41, ___, K43, ___, ___, K46, ___, ___, ___, ___, K4B, K4C, ___, K4E } \
}

View File

@ -0,0 +1,59 @@
/* Copyright 2022 vertex
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
#define MATRIX_COL_PINS { B9, B8, B7, B6, B5, B4, B3, B11, A15, A10, A9, B14, B13, B12, A5 }
#define MATRIX_ROW_PINS { B10, B1, B0, A7, A6 }
#define DIODE_DIRECTION COL2ROW
#define LED_CAPS_LOCK_PIN C13
#define LED_PIN_ON_STATE 0
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_KNIGHT
#define RGBLIGHT_EFFECT_CHRISTMAS
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
#define RGB_DI_PIN B15
#define RGBLED_NUM 9
#define WS2812_SPI SPID2
#define WS2812_SPI_MOSI_PAL_MODE 5
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
#define FORCE_NKRO
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT

View File

@ -0,0 +1,25 @@
/* Copyright 2022 vertex
*
* 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/>.
*/
/*
* This file was auto-generated by:
* `qmk chibios-confmigrate -i keyboards/bt66tech/bt66tech60/halconf.h -r platforms/chibios/common/configs/halconf.h`
*/
#pragma once
#define HAL_USE_SPI TRUE
#include_next <halconf.h>

View File

@ -0,0 +1,82 @@
{
"keyboard_name": "ARC60H",
"manufacturer": "vertex",
"url": "",
"maintainer": "EasonQian1, Vertex-kb",
"usb": {
"vid": "0x7374",
"pid": "0x9770",
"device_version": "0.0.1"
},
"processor": "STM32F103",
"bootloader": "stm32duino",
"layouts": {
"LAYOUT_all": {
"layout": [
{"x": 0, "y": 0 },
{"x": 1, "y": 0 },
{"x": 2, "y": 0 },
{"x": 3, "y": 0 },
{"x": 4, "y": 0 },
{"x": 5, "y": 0 },
{"x": 6, "y": 0 },
{"x": 7, "y": 0 },
{"x": 8, "y": 0 },
{"x": 9, "y": 0 },
{"x": 10, "y": 0 },
{"x": 11, "y": 0 },
{"x": 12, "y": 0 },
{"x": 13, "y": 0 },
{"x": 14, "y": 0 },
{"x": 0, "y": 1, "w": 1.5 },
{"x": 1.5, "y": 1 },
{"x": 2.5, "y": 1 },
{"x": 3.5, "y": 1 },
{"x": 4.5, "y": 1 },
{"x": 5.5, "y": 1 },
{"x": 6.5, "y": 1 },
{"x": 7.5, "y": 1 },
{"x": 8.5, "y": 1 },
{"x": 9.5, "y": 1 },
{"x": 10.5, "y": 1 },
{"x": 11.5, "y": 1 },
{"x": 12.5, "y": 1 },
{"x": 13.5, "y": 1, "w": 1.5 },
{"x": 0, "y": 2, "w": 1.75 },
{"x": 1.75, "y": 2 },
{"x": 2.75, "y": 2 },
{"x": 3.75, "y": 2 },
{"x": 4.75, "y": 2 },
{"x": 5.75, "y": 2 },
{"x": 6.75, "y": 2 },
{"x": 7.75, "y": 2 },
{"x": 8.75, "y": 2 },
{"x": 9.75, "y": 2 },
{"x": 10.75, "y": 2 },
{"x": 11.75, "y": 2 },
{"x": 12.75, "y": 2, "w": 2.25 },
{"x": 0, "y": 3, "w": 1.25 },
{"x": 1.25, "y": 3 },
{"x": 2.25, "y": 3 },
{"x": 3.25, "y": 3 },
{"x": 4.25, "y": 3 },
{"x": 5.25, "y": 3 },
{"x": 6.25, "y": 3 },
{"x": 7.25, "y": 3 },
{"x": 8.25, "y": 3 },
{"x": 9.25, "y": 3 },
{"x": 10.25, "y": 3 },
{"x": 11.25, "y": 3 },
{"x": 12.25, "y": 3, "w": 1.75 },
{"x": 14, "y": 3 },
{"x": 0, "y": 4, "w": 1.5 },
{"x": 1.5, "y": 4, "w": 1 },
{"x": 2.5, "y": 4, "w": 1.5 },
{"x": 4, "y": 4, "w": 7 },
{"x": 11, "y": 4, "w": 1.5 },
{"x": 12.5, "y": 4, "w": 1 },
{"x": 13.5, "y": 4, "w": 1.5 }
]
}
}
}

View File

@ -0,0 +1,36 @@
/* Copyright 2022 vertex
*
* 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
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
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_1, 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_NUBS, 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL
),
[1] = LAYOUT_all(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
};

View File

@ -0,0 +1,51 @@
/* Copyright 2022 vertex
*
* 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
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
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_1, 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_NUBS, 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_RCTL
),
[1] = LAYOUT_all(
KC_GRV, 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_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_MOD, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,
_______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
[2] = LAYOUT_all(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
[3] = LAYOUT_all(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
};

View File

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

View File

@ -0,0 +1,27 @@
/* Copyright 2022 vertex
*
* 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/>.
*/
/*
* This file was auto-generated by:
* `qmk chibios-confmigrate -i keyboards/bt66tech/bt66tech60/mcuconf.h -r platforms/chibios/STM32_F103_STM32DUINO/configs/mcuconf.h`
*/
#pragma once
#include_next <mcuconf.h>
#undef STM32_SPI_USE_SPI2
#define STM32_SPI_USE_SPI2 TRUE

View File

@ -0,0 +1,22 @@
# arc60h
* A customizable hotswap 60% keyboard.
* Keyboard Maintainer: [EASON](https://github.com/EasonQian1)
* Hardware Supported: arc60h
* Hardware Availability: [vertex-kb](https://github.com/Vertex-kb)
Make example for this keyboard (after setting up your build environment):
make vertex/arc60h:default
Flashing example for this keyboard:
make vertex/arc60h: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 Enter in the keyboard then replug
* **Physical reset button**: Briefly press the button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT`

View File

@ -0,0 +1,17 @@
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
SLEEP_LED_ENABLE = yes
WS2812_DRIVER = spi
# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE

View File

@ -1,5 +1,24 @@
/* Copyright 2023 Juno Nguyen <juno.ngx@gmail.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 QMK_KEYBOARD_H
#include "muse.h"
#ifdef AUDIO_ENABLE
# include "muse.h"
#endif
enum planck_layers { enum planck_layers {
_QWERTY, _QWERTY,
@ -120,39 +139,33 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}; };
#ifdef AUDIO_ENABLE #ifdef AUDIO_ENABLE
float plover_song[][2] = SONG(PLOVER_SOUND); float plover_song[][2] = SONG(PLOVER_SOUND);
float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND); float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
float caps_song_on[][2] = SONG(NUM_LOCK_ON_SOUND); float caps_song_on[][2] = SONG(NUM_LOCK_ON_SOUND);
float caps_song_off[][2] = SONG(SCROLL_LOCK_ON_SOUND); float caps_song_off[][2] = SONG(SCROLL_LOCK_ON_SOUND);
// Custom songs for DPAD layer status // Custom songs for DPAD layer status
float dpad_song_on[][2] = { float dpad_song_on[][2] = {
HD_NOTE(_A4), HD_NOTE(_A4), HD_NOTE(_A4), HD_NOTE(_A4), HD_NOTE(_A4), HD_NOTE(_A4),
QD_NOTE(_F4), QD_NOTE(_C5), HD_NOTE(_A4), QD_NOTE(_F4), QD_NOTE(_C5), HD_NOTE(_A4),
QD_NOTE(_F4), QD_NOTE(_C5), WD_NOTE(_A4) QD_NOTE(_F4), QD_NOTE(_C5), WD_NOTE(_A4)
}; };
float dpad_song_off[][2] = { float dpad_song_off[][2] = {
ED_NOTE(_C6), ED_NOTE(_C6), ED_NOTE(_C6), ED_NOTE(_C6),
ED_NOTE(_C6), ED_NOTE(_C6), ED_NOTE(_C6), ED_NOTE(_C6),
W__NOTE(_REST), QD_NOTE(_GS5), W__NOTE(_REST), QD_NOTE(_GS5),
QD_NOTE(_AS5), Q__NOTE(_C6), QD_NOTE(_AS5), Q__NOTE(_C6),
Q__NOTE(_AS5), Q__NOTE(_C6) Q__NOTE(_AS5), Q__NOTE(_C6)
}; };
#endif #endif
#ifndef BACKLIGHT_ENABLE
layer_state_t layer_state_set_user(layer_state_t state) { layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
#else
layer_state_t layer_state_set_user(layer_state_t state) {
// LED control, lighting up when Fn layer is activated
state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
switch (get_highest_layer(state)) { # ifdef BACKLIGHT_ENABLE
// LED control, lighting up when Fn layer is activated
switch (get_highest_layer(state)) {
case _QWERTY: case _QWERTY:
backlight_set(0); backlight_set(0);
break; break;
@ -162,112 +175,111 @@ layer_state_t layer_state_set_user(layer_state_t state) {
case _DPAD: case _DPAD:
backlight_set(3); backlight_set(3);
break; break;
} }
# endif
return state; return state;
} }
#endif
bool process_record_user(uint16_t keycode, keyrecord_t *record) { bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) { switch (keycode) {
case QWERTY: case QWERTY:
if (record->event.pressed) { if (record->event.pressed) {
print("mode just switched to qwerty and this is a huge string\n"); print("mode just switched to qwerty and this is a huge string\n");
set_single_persistent_default_layer(_QWERTY); set_single_persistent_default_layer(_QWERTY);
} }
return false; return false;
break; break;
case COLEMAK: case COLEMAK:
if (record->event.pressed) { if (record->event.pressed) {
set_single_persistent_default_layer(_COLEMAK); set_single_persistent_default_layer(_COLEMAK);
} }
return false; return false;
break; break;
case DVORAK: case DVORAK:
if (record->event.pressed) { if (record->event.pressed) {
set_single_persistent_default_layer(_DVORAK); set_single_persistent_default_layer(_DVORAK);
} }
return false; return false;
break; break;
case BACKLIT: case BACKLIT:
if (record->event.pressed) { if (record->event.pressed) {
register_code(KC_RSFT); register_code(KC_RSFT);
#ifdef BACKLIGHT_ENABLE # ifdef BACKLIGHT_ENABLE
backlight_step(); backlight_step();
#endif # endif
#ifdef KEYBOARD_planck_rev5 # ifdef KEYBOARD_planck_rev5
writePinLow(E6); writePinLow(E6);
#endif # endif
} else { } else {
unregister_code(KC_RSFT); unregister_code(KC_RSFT);
#ifdef KEYBOARD_planck_rev5 # ifdef KEYBOARD_planck_rev5
writePinHigh(E6); writePinHigh(E6);
#endif # endif
} }
return false; return false;
break; break;
case PLOVER: case PLOVER:
if (record->event.pressed) { if (record->event.pressed) {
#ifdef AUDIO_ENABLE # ifdef AUDIO_ENABLE
stop_all_notes(); stop_all_notes();
PLAY_SONG(plover_song); PLAY_SONG(plover_song);
#endif # endif
layer_off(_RAISE); layer_off(_RAISE);
layer_off(_LOWER); layer_off(_LOWER);
layer_off(_ADJUST); layer_off(_ADJUST);
layer_on(_PLOVER); layer_on(_PLOVER);
if (!eeconfig_is_enabled()) { if (!eeconfig_is_enabled()) {
eeconfig_init(); eeconfig_init();
}
keymap_config.raw = eeconfig_read_keymap();
keymap_config.nkro = 1;
eeconfig_update_keymap(keymap_config.raw);
} }
return false; keymap_config.raw = eeconfig_read_keymap();
break; keymap_config.nkro = 1;
case EXT_PLV: eeconfig_update_keymap(keymap_config.raw);
if (record->event.pressed) { }
#ifdef AUDIO_ENABLE return false;
break;
case EXT_PLV:
if (record->event.pressed) {
# ifdef AUDIO_ENABLE
PLAY_SONG(plover_gb_song); PLAY_SONG(plover_gb_song);
#endif # endif
layer_off(_PLOVER); layer_off(_PLOVER);
} }
return false; return false;
break; break;
// Play audio upon switching Caps Lock and custom layers // Play audio upon switching Caps Lock and custom layers
case KC_CAPS:
case KC_CAPS: if (record->event.pressed) {
if (record->event.pressed) { # ifdef AUDIO_ENABLE
#ifdef AUDIO_ENABLE
if (host_keyboard_led_state().caps_lock) { if (host_keyboard_led_state().caps_lock) {
PLAY_SONG(caps_song_off); PLAY_SONG(caps_song_off);
} else { } else {
PLAY_SONG(caps_song_on); PLAY_SONG(caps_song_on);
} }
#endif # endif
} }
return true; return true;
case DP_ON: case DP_ON:
if (record->event.pressed) { if (record->event.pressed) {
} else { // only actived upon key release } else { // only actived upon key release
#ifdef AUDIO_ENABLE # ifdef AUDIO_ENABLE
PLAY_SONG(dpad_song_on); PLAY_SONG(dpad_song_on);
#endif # endif
layer_off(_FN1); layer_off(_FN1);
layer_on(_DPAD); layer_on(_DPAD);
} }
case DP_OFF: case DP_OFF:
if (record->event.pressed) { if (record->event.pressed) {
#ifdef AUDIO_ENABLE # ifdef AUDIO_ENABLE
PLAY_SONG(dpad_song_off); PLAY_SONG(dpad_song_off);
#endif # endif
layer_off(_DPAD); layer_off(_DPAD);
} }
} }
return true; return true;
} }
@ -305,28 +317,28 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
bool dip_switch_update_user(uint8_t index, bool active) { bool dip_switch_update_user(uint8_t index, bool active) {
switch (index) { switch (index) {
case 0: case 0:
if (active) { if (active) {
#ifdef AUDIO_ENABLE # ifdef AUDIO_ENABLE
PLAY_SONG(plover_song); PLAY_SONG(plover_song);
#endif # endif
layer_on(_ADJUST); layer_on(_ADJUST);
} else { } else {
#ifdef AUDIO_ENABLE # ifdef AUDIO_ENABLE
PLAY_SONG(plover_gb_song); PLAY_SONG(plover_gb_song);
#endif # endif
layer_off(_ADJUST); layer_off(_ADJUST);
} }
break; break;
case 1: case 1:
if (active) { if (active) {
muse_mode = true; muse_mode = true;
} else { } else {
muse_mode = false; muse_mode = false;
#ifdef AUDIO_ENABLE # ifdef AUDIO_ENABLE
stop_all_notes(); stop_all_notes();
#endif # endif
} }
} }
return true; return true;
} }
@ -349,10 +361,19 @@ void matrix_scan_user(void) {
bool music_mask_user(uint16_t keycode) { bool music_mask_user(uint16_t keycode) {
switch (keycode) { switch (keycode) {
case RAISE: case RAISE:
case LOWER: case LOWER:
return false; return false;
default: default:
return true; return true;
} }
} }
#ifdef RGBLIGHT_ENABLE
void keyboard_post_init_user(void) {
rgblight_enable_noeeprom(); // Enables RGB, without saving settings
// Vibrant cyan
rgblight_sethsv_noeeprom(HSV_SPRINGGREEN);
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
}
#endif

View File

@ -1,13 +1,15 @@
SRC += muse.c ifeq ($(strip $(AUDIO_ENABLE)), yes)
SRC += muse.c
endif
ifeq ($(strip $(KEYBOARD)),$(filter $(strip $(KEYBOARD)), planck/rev2 planck/rev3 planck/rev4 planck/rev5)) ifeq ($(strip $(KEYBOARD)),$(filter $(strip $(KEYBOARD)), planck/rev2 planck/rev3 planck/rev4 planck/rev5))
BACKLIGHT_ENABLE = yes BACKLIGHT_ENABLE = yes
else else
BACKLIGHT_ENABLE = no BACKLIGHT_ENABLE = no
endif endif
ifeq ($(strip $(KEYBOARD)), vitamins_included/rev1) ifeq ($(strip $(KEYBOARD)), vitamins_included/rev1)
NKRO_ENABLE = no NKRO_ENABLE = no
endif endif
MIDI_ENABLE=no MIDI_ENABLE=no