1
0

Compare commits

...

49 Commits

Author SHA1 Message Date
lsh4711
5a6595357d Fix path typo related RP2040 (#25069)
Fix path typo
2025-03-28 21:03:59 +11:00
Geoffrey Frogeye
25fb4a498a Allow AnnePro2 to reboot (#24886)
Without this, the QK_REBOOT key did nothing.
2025-03-28 20:19:07 +11:00
dependabot[bot]
6f3b494a4d Bump vite from 5.4.12 to 5.4.15 in /builddefs/docsgen (#25065)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.12 to 5.4.15.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.15/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.15/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-28 08:56:08 +00:00
Hyphen-ated
d4120b1def Add "Large Lad" keyboard (#24727)
Co-authored-by: jack <jack@pngu.org>
2025-03-28 01:27:54 -07:00
Sắn
ce9713c47d Add support for Starry FRL (#24626)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2025-03-28 01:27:36 -07:00
Erik Peyronson
64fe4aff31 Add handwired/erikpeyronson/erkbd (#25030)
Co-authored-by: Erik Peyronson <erik.peyronson@gmail.com>
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-03-27 23:25:39 -07:00
Joel Challis
a3c39bde0e Create tags when lib/python changes (#25064)
Create tags when lib/python changes
2025-03-27 06:23:28 +11:00
Grigory Avdyushin
ce2f7d86be Franky36 handwired keyboard (#25029) 2025-03-22 22:17:05 -07:00
Dasky
6a947fa534 Add Mechboards Crkbd (#24993) 2025-03-21 18:00:28 +00:00
plodah
f4dfa218ff fix swapped encoder pins on ploopy thumb rev1_001 (#25044)
fix swapped pins on ploopy thumb rev1_001 encoder
2025-03-20 15:34:14 -07:00
uv777bk
f6dbb56a10 Update Lighting Mode Animations on Monsgeek M5 (#24981)
Update keyboard.json
2025-03-21 09:22:43 +11:00
Max Rumpf
894b9c458d Enable mouse key feature and disable leader key on Maxr1998/Phoebe (#24982)
* Enable mousekey support on Maxr1998/Phoebe

* Add GPLv2 license header
2025-03-21 09:22:02 +11:00
Icy Avocado
9f44488bb1 Add directpins 21 keys pico (#24919)
* Add directpins 21 keys pico
- https://learn.adafruit.com/diy-pico-mechanical-keyboard-with-fritzing-circuitpython/21-key-pico-keyboard

* Rename from 21keys to pico_pad

* Add pico_pad readme

* Update bootloader instruction

---------

Co-authored-by: Dai <dai@ovacoda.com>
2025-03-21 09:21:18 +11:00
Drashna Jaelre
a958276a76 Add Super Alt-Tab macro example as module (#24970)
* Add Super Alt-Tab macro example as module

* Make module more configurable

* remove unneeded comments

Co-authored-by: jack <jack@pngu.org>

* Update modules/qmk/super_alt_tab/super_alt_tab.c

Co-authored-by: Nick Brassel <nick@tzarc.org>

---------

Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Nick Brassel <nick@tzarc.org>
2025-03-21 09:12:46 +11:00
Akshay Atam
7fd12c2b98 Ducky one2mini ansi tsangan layout (#24909)
* Added ANSI Tsangan keymap for Ducky One2 Mini

* Updated keyboard.json to support ANSI Tsangan layout for Ducky One2 Mini
2025-03-21 09:00:01 +11:00
mikiya418
3a8c76fae5 Develop 5keys (#24555)
* [Keyboard]Add 5keys

* Add files via upload

* Delete 5keys.json

* Add files via upload

* Delete 5keys_default.hex

* Add keyboard 5keys

* Add Copylight

* Update keyboards/5keys/keyboard.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/5keys/keyboard.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update readme.md

---------

Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-03-21 08:54:54 +11:00
Duncan Sutherland
96882c6a67 Correct json for Fullsize JIS Community Layouts (#23660)
initial commit
2025-03-21 08:44:19 +11:00
Anthony Abruzzini
c5232ba699 Fix typo in docs: split_keyboard.md SPLIT_USB_DETECT ("theres's -> "there's") (#24984)
* Fix typo "theres's"

* Update docs/features/split_keyboard.md

Co-authored-by: jack <jack@pngu.org>

---------

Co-authored-by: jack <jack@pngu.org>
2025-03-21 08:35:58 +11:00
Andrew Kannan
e7c5695a0c Minor keymap fix on Cerberus HS (#25043) 2025-03-20 05:06:54 +00:00
Wilson Pika Choo
46829663aa [Keyboard] Change uzu42 usb.vid (#25014)
change generic vendor code
2025-03-19 10:33:53 -06:00
Nick Brassel
386a5019a8 Fixup MSYS + unix-style paths in Community Modules. (#25012)
Fixup MSYS + unix-style paths.
2025-03-19 12:45:28 +11:00
Nick Brassel
271efeb8bc Latest batch of license violations. (#25031) 2025-03-18 15:48:27 +00:00
Nick Brassel
95223aa872 Latest batch of license violations as per #24085. (#25023)
* Latest batch of license violations as per #24085.

* No links.
2025-03-18 06:07:24 +11:00
Joel Challis
c6446aeaf9 Bump tj-actions/changed-files from 45 to 46 (#25020) 2025-03-16 08:44:31 +00:00
André Cruz
65aef7be95 [Keyboard] Add Sofle Choc Prog from keebart (#24974) 2025-03-13 14:04:32 -07:00
Joel Challis
8ae5d34c0d keyten/kt60_mu - Add missing header guard (#25011) 2025-03-14 08:00:58 +11:00
Ivan Gromov
25af20bef4 [Keyboard] Add kt60-MU PCB (#24797)
* Add kt60-MU

* Adding some license headers

* Update keyboards/keyten/kt60_mu/keyboard.json

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>

* Update keyboards/keyten/kt60_mu/keyboard.json

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>

* Update keyboard.json

* Update keyboard.json

* Update keyboards/keyten/kt60_mu/keyboard.json

Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>

* Update keyboards/keyten/kt60_mu/keyboard.json

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>

---------

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2025-03-13 13:20:56 -06:00
Dasky
84f9b6dd3e Add Mechboards Sofle (#25004)
* add sofle

* fix readme
2025-03-11 02:42:33 -07:00
Christian C. Berclaz
a70288bc4a New standard layout for Mechlovin' Zed60 (60_tsangan_hhkb) (#24801)
* Added a default firmware and layout for the WindStudio Wind X R1
keyboard.

* Wind X R1: cleaned-up the folders to make clear that this firmware is
for the release 1 of this keyboard.

* Delete keyboards/windstudio/wind_x/R1 directory

Removing the uppercase R1 folder

* feat(mechlovin/zed60): Added the missing standard 60_tsangan_hhkb

* style(mechlovin/zed60): Ran qmk format-json -i on keyboard.json
2025-03-08 23:59:02 -08:00
Joel Challis
3c6a691126 keychron/c*_pro_v2: Migrate DIP_SWITCH_PINS (#24978) 2025-03-06 23:17:21 +00:00
Joel Challis
0302171fac Remove invalid RGB Matrix effects (#24977) 2025-03-04 23:40:28 +00:00
Joel Challis
fcfe0e8a95 Fix xelus/valor/rev3 compilation (#24976) 2025-03-04 23:40:08 +00:00
dnlnm
f0a5db96c8 Add keyboard Cloak (#24858)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-03-03 11:22:37 -08:00
takashicompany
c2979e309f Add new keyboard "Palmslave" (#24814)
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-03-03 11:21:47 -08:00
Armand du Parc Locmaria
b2ee1612fa Fix Lily58 Lite Rev3 reversed columns (#24968) 2025-03-03 11:18:33 -08:00
floookay
cc09f17111 add keyboard: zwerg (#24918)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Joel Challis <git@zvecr.com>
2025-03-02 21:34:16 -08:00
yiancar
a585bd08a3 Keycult Zero (#24927)
* Initial Commit for Keycult Zero

* Update keyboards/keycult/keycult_zero/keycult_zero.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/keycult/keycult_zero/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

---------

Co-authored-by: yiancar <yiancar@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-03-02 19:32:25 -08:00
leah-splitkb
cb6e1c1af5 Add splitkb.com's Elora (#22557)
* Add splitkb's Elora

* WIP

* Make requested changes

* fix missing call to keyboard init user for elora

* sync vial_qmk with qmk

* Add fixes

* Add encoder quadrature and update files

* Update Readme

* Implement changes

* Remove encoder driver from keyboard.json

* make requested changed

* Implement changes and remove myriad_task as it wasn't actually doing anything.

* Remove myriad.h from matrix.c

* Simplify OLED code debug

* Update RGB keycodes (qmk#24484)

* remove rules.mk (qmk#23281)

* Add matrix state sync

---------

Co-authored-by: NapOli1084 <10320176+NapOli1084@users.noreply.github.com>
Co-authored-by: harveysch <126267034+harvey-splitkb@users.noreply.github.com>
Co-authored-by: harvey <harvey@splitkb.com>
Co-authored-by: VeyPatch <126267034+VeyPatch@users.noreply.github.com>
2025-03-02 14:33:03 -07:00
Xelus22
563eb6fdc9 [Keyboard] Valor Rev3 (#22581)
* initial valor

* update

* fixup and move to info.json

* clean up keymap

* code review from lesshonor

* Update keyboards/xelus/valor/rev3/readme.md

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>

* Update readme.md

* Update keyboards/xelus/valor/rev3/rev3.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update rev3.c

* Remove custom rev3.c

* remove via keymap

* remove empty rules.mk

* Update keyboards/xelus/valor/rev3/keymaps/default/keymap.c

Co-authored-by: jack <jack@pngu.org>

---------

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Xelus22 <>
Co-authored-by: jack <jack@pngu.org>
2025-03-02 14:04:33 -07:00
adophoxia
6c10839e33 Add Keychron C2 Pro V2 (#24900)
Same changes as for C1 Pro V2
2025-03-01 17:57:15 -07:00
adophoxia
abea50c26e Add Keychron C1 Pro V2 (#24899)
* Add C1 Pro V2

* Remove default values for f401xC generic board definition

* Update clang and copyright years

* Add version description
2025-03-01 17:48:59 -07:00
blindassassin111
acec6904d8 Adding support for the VKR 94 (#24883)
* Adding support for the VKR 94

* Update keyboards/viktus/vkr94/keyboard.json

Co-authored-by: Joel Challis <git@zvecr.com>

* Delete keyboards/viktus/vkr94/config.h

* Delete keyboards/viktus/vkr94/rules.mk

* Update readme.md

---------

Co-authored-by: Joel Challis <git@zvecr.com>
2025-03-01 15:24:15 -07:00
suikagiken
655bf4008a Add keyboard suika15tone (#24947)
* Add keyboard suika15tone

* Update keyboards/suikagiken/suika15tone/keyboard.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

---------

Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-03-01 14:50:10 -07:00
era
516fa90f99 Add Chickpad (#24895)
* Add ChickPad

Add ChickPad

* Add Chickpad

Add Chickpad

* Add PCB image

Add PCB image

* Update keyboards/era/sirind/chickpad/keyboard.json

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/era/sirind/chickpad/config.h

Co-authored-by: jack <0x6a73@protonmail.com>

* Update keyboards/era/sirind/chickpad/keymaps/default/keymap.c

Co-authored-by: jack <0x6a73@protonmail.com>

* Update keyboards/era/sirind/chickpad/readme.md

Co-authored-by: jack <0x6a73@protonmail.com>

---------

Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: jack <jack@pngu.org>
2025-03-01 14:25:26 -07:00
Eric Banker
0419cd2eed [Docs] Fix example code in quantum_painter.md (#24897)
https://github.com/qmk/qmk_firmware/issues/24896
2025-03-01 14:01:30 -07:00
telybelly
a3a3af1184 Add Janky No.9 (#24910)
* Add Janky No.9

Add Janky No.9

* Update readme.md

* Update keyboard.json

updated as per waffle87 suggestions, and run qmk format-json

* Apply suggestions from code review

updated as per suggestions from zvecr

Co-authored-by: Joel Challis <git@zvecr.com>

---------

Co-authored-by: Joel Challis <git@zvecr.com>
2025-03-01 13:59:52 -07:00
arcmags
88d1f61f10 Add tkl_f13_ansi_tsangan community layout to novelkeys/nk87* (#24730)
* missing LAYOUTS added to novelkeys/nk87*/rules.mk

* Revert "missing LAYOUTS added to novelkeys/nk87*/rules.mk"

This reverts commit 43917bfc36.

* missing community layouts added to novelkeys/nk87*/keyboard.json
2025-03-01 13:48:11 -07:00
Danny
e0e96c2a75 Add Handwired Cherry Protype (#24806)
* Add handwired Cherry Protype

* Fix instructions

* Replace tabs with spaces

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/handwired/protype/keyboard.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

---------

Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-03-01 13:47:16 -07:00
Dasky
a4d86a63f2 Add Mechboards Lily58 variant and common code. (#24937)
* Add lily58 and common code

* Apply suggestions from code review

Co-authored-by: jack <jack@pngu.org>

* Apply suggestions from code review

Co-authored-by: jack <jack@pngu.org>

---------

Co-authored-by: jack <jack@pngu.org>
2025-02-28 11:07:51 -08:00
186 changed files with 10586 additions and 151 deletions

View File

@@ -15,6 +15,7 @@ on:
- quantum/**/*
- tests/**/*
- tmk_core/**/*
- lib/python/**/*
- util/**/*
- Makefile
- '*.mk'

View File

@@ -36,7 +36,7 @@ jobs:
- name: Get changed files
id: file_changes
uses: tj-actions/changed-files@v45
uses: tj-actions/changed-files@v46
with:
use_rest_api: true

View File

@@ -27,7 +27,7 @@ jobs:
- name: Get changed files
id: file_changes
uses: tj-actions/changed-files@v45
uses: tj-actions/changed-files@v46
with:
use_rest_api: true

View File

@@ -1,7 +1,7 @@
{
"license": "GPL-2.0-or-later",
"devDependencies": {
"vite": "^5.4.12",
"vite": "^5.4.15",
"vitepress": "^1.1.0",
"vitepress-plugin-tabs": "^0.5.0",
"vue": "^3.4.24"

View File

@@ -766,10 +766,10 @@ tabbable@^6.2.0:
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
vite@^5.2.9, vite@^5.4.12:
version "5.4.12"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.12.tgz#627d12ff06de3942557dfe8632fd712a12a072c7"
integrity sha512-KwUaKB27TvWwDJr1GjjWthLMATbGEbeWYZIbGZ5qFIsgPP3vWzLu4cVooqhm5/Z2SPDUMjyPVjTztm5tYKwQxA==
vite@^5.2.9, vite@^5.4.15:
version "5.4.15"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.15.tgz#2941547f10ebb4bf9b0fa0da863c06711eb7e5e5"
integrity sha512-6ANcZRivqL/4WtwPGTKNaosuNJr5tWiftOC7liM7G9+rMb8+oeJeyzymDu4rTN93seySBmbjSfsS3Vzr19KNtA==
dependencies:
esbuild "^0.21.3"
postcss "^8.4.43"

View File

@@ -444,7 +444,7 @@ This setting implies that `RGBLIGHT_SPLIT` is enabled, and will forcibly enable
#define SPLIT_USB_DETECT
```
Enabling this option changes the startup behavior to listen for an active USB communication to delegate which part is master and which is slave. With this option enabled and theres's USB communication, then that half assumes it is the master, otherwise it assumes it is the slave.
Enabling this option changes the startup behavior to listen for an active USB communication to delegate which part is master and which is slave. With this option enabled and active USB communication, then that half assumes it is the master, otherwise it assumes it is the slave.
Without this option, the master is the half that can detect voltage on the physical USB connection (VBUS detection).

View File

@@ -19,9 +19,13 @@ If you own a board from one of the following vendors already, consider asking th
| Vendor | Reason |
|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Ajazz | Selling tri-mode boards based on QMK without sources. |
| Alpaca / Apos | Selling wireless boards with "open" source code, but linking against closed-source wireless libraries. Crippled source code already unknowingly merged to QMK. |
| Attack Shark | Selling tri-mode boards based on QMK without sources. (Clones of Ajazz?) |
| BBB Keyboard | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. |
| Chosfox | Selling L75 wired/wireless boards based on QMK without sources, just `via.json` provided. Raised on discord over multiple weeks without response. |
| CIDOO | Selling wired boards based on QMK without sources, just `via.json` provided. |
| ColorReco | Selling tri-mode boards based on QMK without sources. |
| Darmoshark | Selling wired boards based on QMK without sources, just `via.json` provided. |
| Epomaker | Lots of historical keyboards with `via.json` but no corresponding sources. Wireless code for a small handful provided, pending core cleanup for QMK upstreaming. Most other boards have source nowhere to be seen. |
| Ergokbd (IFKB) | At least their crkbd clone ships with QMK+Vial, seemingly refuses to disclose sources despite multiple customers requesting them. |
@@ -36,6 +40,7 @@ If you own a board from one of the following vendors already, consider asking th
| pressplayid | Selling wired and tri-mode boards based on QMK without sources, just `via.json` provided |
| qwertykeys | Selling wired and tri-mode boards based on QMK without sources, just `via.json` provided. |
| Redragon | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. |
| Riccks | Selling tri-mode boards based on QMK without sources. |
| Royal Kludge | PRs for fake boards in order to attain VIA compatibility identified. Lots of other keyboards with `via.json` but no corresponding sources, attempted upstreaming crippled firmware without wireless. Wireless code for some provided, pending core cleanup for QMK upstreaming. PRs including different manufacturer names as well. |
| Shenzhen Hangsheng | PR submissions with crippled firmware, debating with maintainers about wireless despite marketing material clearly stating tri-mode. |
| Tacworks | Selling tri-mode boards based on QMK, crippled firmware already merged into QMK without wireless without QMK team realising. |
@@ -45,6 +50,7 @@ If you own a board from one of the following vendors already, consider asking th
| Womier | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. |
| Wuque Studio | Selling wired and tri-mode boards based on QMK without sources, just `via.json` provided. |
| XVX | Ambiguity on PRs -- marketing says wireless, PR author said wired-only. Seemingly intentionally deceptive. |
| Yunzii | Selling tri-mode boards based on QMK without sources, just `via.json` provided. |
| Zuoya | Selling tri-mode boards based on QMK without sources, just `via.json` provided. |
::: danger Violations

View File

@@ -884,7 +884,7 @@ static painter_image_handle_t my_image;
void keyboard_post_init_kb(void) {
my_image = qp_load_image_mem(gfx_my_image);
if (my_image != NULL) {
qp_drawimage(display, (239 - my_image->width), (319 - my_image->height), my_image);
qp_drawimage(display, (240 - my_image->width), (320 - my_image->height), my_image);
}
}
```
@@ -909,7 +909,7 @@ static deferred_token my_anim;
void keyboard_post_init_kb(void) {
my_image = qp_load_image_mem(gfx_my_image);
if (my_image != NULL) {
my_anim = qp_animate(display, (239 - my_image->width), (319 - my_image->height), my_image);
my_anim = qp_animate(display, (240 - my_image->width), (320 - my_image->height), my_image);
}
}
```
@@ -1001,7 +1001,7 @@ void keyboard_post_init_kb(void) {
if (my_font != NULL) {
static const char *text = "Hello from QMK!";
int16_t width = qp_textwidth(my_font, text);
qp_drawtext(display, (239 - width), (319 - my_font->line_height), my_font, text);
qp_drawtext(display, (240 - width), (320 - my_font->line_height), my_font, text);
}
}
```

View File

@@ -0,0 +1,34 @@
{
"manufacturer": "mikiya418",
"keyboard_name": "5keys",
"maintainer": "mikiya418",
"development_board": "promicro",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": false
},
"matrix_pins": {
"direct": [
["F4","F5","F6","F7","B1"]
]
},
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
"vid": "0x4D4B"
},
"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":[0,4], "x":4, "y":0}
]
}
}
}

View File

@@ -0,0 +1,21 @@
/* Copylight 2024 mikiya418.
*
* 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 3 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 <https://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_WBAK, KC_WFWD, LSG_T(KC_S), G(KC_L), MO(1)
)
};

27
keyboards/5keys/readme.md Normal file
View File

@@ -0,0 +1,27 @@
# 5keys
![5keys](https://imgur.com/yOkI4HT)
This keyboard is a macro keyboard with five keys.
* Keyboard Maintainer: [mikiya418](https://github.com/mikiya418)
* Hardware Supported: 5keys PCBs, Pro Micro
* Hardware Availability: [Thingiverse](https://www.thingiverse.com/thing:6834908)
Make example for this keyboard (after setting up your build environment):
make 5keys:default
Flashing example for this keyboard:
make 5keys: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,53 @@
{
"manufacturer": "Raspberry Pi",
"keyboard_name": "DirectPins Pico Pad 21 keys RP2040",
"maintainer": "icyavocado",
"bootloader": "rp2040",
"usb": {
"vid": "0x2326",
"pid": "0xFEED",
"device_version": "0.0.1"
},
"features": {
"bootmagic": true,
"mousekey": true,
"extrakey": true
},
"processor": "RP2040",
"matrix_pins": {
"direct": [
[ "GP0", "GP1", "GP2", "GP3", "GP4", "GP5", "GP6" ],
[ "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP13"],
[ "GP14", "GP16", "GP17", "GP18", "GP19", "GP20", "GP21"]
]
},
"layouts": {
"LAYOUT": {
"layout": [
{"label": "GP0", "x": 0, "y": 0, "matrix": [0, 0]},
{"label": "GP1", "x": 0, "y": 1, "matrix": [0, 1]},
{"label": "GP2", "x": 0, "y": 2, "matrix": [0, 2]},
{"label": "GP3", "x": 0, "y": 3, "matrix": [0, 3]},
{"label": "GP4", "x": 0, "y": 4, "matrix": [0, 4]},
{"label": "GP5", "x": 0, "y": 5, "matrix": [0, 5]},
{"label": "GP6", "x": 0, "y": 6, "matrix": [0, 6]},
{"label": "GP7", "x": 1, "y": 0, "matrix": [1, 0]},
{"label": "GP8", "x": 1, "y": 1, "matrix": [1, 1]},
{"label": "GP9", "x": 1, "y": 2, "matrix": [1, 2]},
{"label": "GP10", "x": 1, "y": 3, "matrix": [1, 3]},
{"label": "GP11", "x": 1, "y": 4, "matrix": [1, 4]},
{"label": "GP12", "x": 1, "y": 5, "matrix": [1, 5]},
{"label": "GP13", "x": 1, "y": 6, "matrix": [1, 6]},
{"label": "GP14", "x": 2, "y": 0, "matrix": [2, 0]},
{"label": "GP16", "x": 2, "y": 1, "matrix": [2, 1]},
{"label": "GP17", "x": 2, "y": 2, "matrix": [2, 2]},
{"label": "GP18", "x": 2, "y": 3, "matrix": [2, 3]},
{"label": "GP19", "x": 2, "y": 4, "matrix": [2, 4]},
{"label": "GP20", "x": 2, "y": 5, "matrix": [2, 5]},
{"label": "GP21", "x": 2, "y": 6, "matrix": [2, 6]}
]
}
}
}

View File

@@ -0,0 +1,12 @@
{
"keyboard": "adafruit/pico_pad",
"keymap": "default",
"layout": "LAYOUT",
"layers": [
[
"KC_A", "KC_B", "KC_C", "KC_D", "KC_E", "KC_F", "KC_G",
"KC_H", "KC_I", "KC_J", "KC_K", "KC_L", "KC_M", "KC_N",
"KC_O", "KC_P", "KC_Q", "KC_R", "KC_S", "KC_T", "KC_U"
]
]
}

View File

@@ -0,0 +1,25 @@
# PICO PAD
![PICO PAD](https://imgur.com/Nl4tZPl.jpg)
A RP2040 powered direct pins QMK keyboard in 3x7 layout.
A guide can be found here: [Pico Mechanical Keyboard](https://learn.adafruit.com/diy-pico-mechanical-keyboard-with-fritzing-circuitpython/overview)
* Keyboard Maintainer: [IcyAvocado](https://github.com/icyavocado)
* Hardware Supported: [Pico 1 Microcontrollers - RP2040](https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html#pico-1-family)
* Hardware Availability: [The PiHut](https://thepihut.com/products/raspberry-pi-pico) | [Adafruit Parts](https://learn.adafruit.com/diy-pico-mechanical-keyboard-with-fritzing-circuitpython/overview)
Make example for this board (after setting up your build environment):
```sh
qmk compile -kb adafruit/pico_pad -km 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. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader:
* **Physical reset button**: Briefly press the reset button on the left of the PCB - some may have pads you must short instead
* **Boot button**: Press and hold the BOOTSEL button on the pico when powered on

View File

@@ -48,6 +48,11 @@ ble_capslock_t ble_capslock = {._dummy = {0}, .caps_lock = false};
static uint8_t led_enabled = 1;
#endif
void mcu_reset(void) {
__disable_irq();
NVIC_SystemReset();
}
void bootloader_jump(void) {
// Send msg to shine to boot into IAP
ap2_set_IAP();

View File

@@ -12,8 +12,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_GRV, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, MO(1), KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, MO(1), KC_LGUI, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_FN1] = LAYOUT_all(

View File

@@ -11,8 +11,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_GRV, 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_NUHS, 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_LSFT, MO(1), KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, MO(1), KC_LGUI, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
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_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_FN1] = LAYOUT_all(

View File

@@ -30,8 +30,7 @@
"rgb_matrix": {
"animations": {
"breathing": true,
"cycle_left_right": true,
"solid_color": true
"cycle_left_right": true
},
"driver": "ws2812",
"layout": [

View File

@@ -0,0 +1,115 @@
{
"manufacturer": "dnlnm",
"keyboard_name": "Cloak",
"maintainer": "dnlnm",
"bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"encoder": {
"rotary": [
{"pin_a": "A9", "pin_b": "A10", "resolution": 2},
{"pin_a": "B4", "pin_b": "B6", "resolution": 2}
]
},
"features": {
"bootmagic": true,
"encoder": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgblight": true
},
"matrix_pins": {
"cols": ["A8", "B15", "B14", "B13", "B11", "B10", "B2", "B1", "B0", "A7", "A6", "A5", "A4", "B8"],
"rows": ["B3", "B12", "A15", "B7", "B9"]
},
"processor": "STM32F072",
"rgblight": {
"default": {
"on": false
},
"driver": "ws2812",
"layers": {
"blink": true,
"enabled": true,
"override_rgb": true
},
"led_count": 12
},
"url": "https://github.com/dnlnm/cloak-xt-stm32",
"usb": {
"device_version": "1.0.0",
"pid": "0xFCD4",
"vid": "0x7E7E"
},
"ws2812": {
"pin": "B5"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1.25, "y": 0},
{"matrix": [0, 2], "x": 2.25, "y": 0},
{"matrix": [0, 3], "x": 3.25, "y": 0},
{"matrix": [0, 4], "x": 4.25, "y": 0},
{"matrix": [0, 5], "x": 5.63, "y": 0},
{"matrix": [0, 6], "x": 6.63, "y": 0},
{"matrix": [0, 7], "x": 7.63, "y": 0},
{"matrix": [0, 8], "x": 8.63, "y": 0},
{"matrix": [0, 9], "x": 10, "y": 0},
{"matrix": [0, 10], "x": 11, "y": 0},
{"matrix": [0, 11], "x": 12, "y": 0},
{"matrix": [0, 12], "x": 13, "y": 0},
{"matrix": [0, 13], "x": 14.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, "w": 1.5},
{"matrix": [1, 13], "x": 14.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, "w": 2.25},
{"matrix": [2, 12], "x": 14.25, "y": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3.25, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3.25},
{"matrix": [3, 2], "x": 3.25, "y": 3.25},
{"matrix": [3, 3], "x": 4.25, "y": 3.25},
{"matrix": [3, 4], "x": 5.25, "y": 3.25},
{"matrix": [3, 5], "x": 6.25, "y": 3.25},
{"matrix": [3, 6], "x": 7.25, "y": 3.25},
{"matrix": [3, 7], "x": 8.25, "y": 3.25},
{"matrix": [3, 8], "x": 9.25, "y": 3.25},
{"matrix": [3, 9], "x": 10.25, "y": 3.25},
{"matrix": [3, 10], "x": 11.25, "y": 3.25},
{"matrix": [3, 11], "x": 12.25, "y": 3.25, "w": 1.75},
{"matrix": [3, 12], "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, 6], "x": 3.5, "y": 4.25, "w": 7},
{"matrix": [4, 10], "x": 10.5, "y": 4.25, "w": 1.25},
{"matrix": [4, 11], "x": 11.75, "y": 4.25},
{"matrix": [4, 12], "x": 12.75, "y": 4.25, "w": 1.25},
{"matrix": [4, 13], "x": 14.25, "y": 4.25}
]
}
}
}

View File

@@ -0,0 +1,68 @@
// Copyright (C) 2025 dnlnm
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
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_MPLY,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, KC_VOLU,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, KC_VOLD,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_MUTE,
KC_LCTL, KC_LGUI, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_PSCR),
[1] = LAYOUT(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______),
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = {ENCODER_CCW_CW(MS_WHLU, MS_WHLD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
[1] = {ENCODER_CCW_CW(UG_HUED, UG_HUEU), ENCODER_CCW_CW(UG_SATD, UG_SATU)},
};
#endif
#ifdef RGBLIGHT_ENABLE
// Light LEDs 10 & 11 in blue when caps lock is active.
const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
{10, 2, HSV_BLUE} // Light 4 LEDs, starting with LED 6
);
// Light LEDs 0 & 1 in blue when keyboard layer 1 is active
const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(
{0, 2, HSV_BLUE}
);
// Light LEDs 4 & 5 in blue when keyboard layer 2 is active
const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(
{4, 2, HSV_BLUE}
);
// Now define the array of layers. Later layers take precedence
const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
my_capslock_layer,
my_layer1_layer, // Overrides caps lock layer
my_layer2_layer // Overrides other layers
);
void keyboard_post_init_user(void) {
// Enable the LED layers
rgblight_layers = my_rgb_layers;
}
bool led_update_user(led_t led_state) {
rgblight_set_layer_state(0, led_state.caps_lock);
return true;
}
layer_state_t layer_state_set_user(layer_state_t state) {
rgblight_set_layer_state(1, layer_state_cmp(state, 1));
rgblight_set_layer_state(2, layer_state_cmp(state, 2));
return state;
}
#endif

View File

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

View File

@@ -0,0 +1,25 @@
# dnlnm/cloak
![dnlnm/cloak](https://i.imgur.com/eZCUPvK.jpeg)
* Keyboard Maintainer: [Daniel Naim](https://github.com/dnlnm)
* Hardware Supported: Cloak-XT
* Hardware Availability: https://github.com/dnlnm/cloak-xt-stm32
Make example for this keyboard (after setting up your build environment):
make dnlnm/cloak:default
Flashing example for this keyboard:
make dnlnm/cloak: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**: Hold the boot button and tap the reset button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -235,6 +235,75 @@
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_ansi_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 12], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 5], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
}
}
}

View File

@@ -0,0 +1,70 @@
/* Copyright 2019 /u/KeepItUnder
*
* 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
// LAYERS
enum Layer {
_QWERTY = 0, // Standard QWERTY layer
_FUNCTION, // Function key layer
_COLOUR // RGB key layer
};
#define _QW _QWERTY
#define _FN _FUNCTION
#define _CLR _COLOUR
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬────────┐
* │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬──────┤
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴──────┤
* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬────┤
* │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ Fn │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴───┴───┼───┴┬────┬┴────┤
* │Ctrl│GUI │Alt │ │Alt │GUI │Ctrl │
* └────┴────┴────┴─────────────────────────────┴────┴────┴─────┘
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_60_ansi_tsangan(
// 2 3 4 5 6 7 8 9 10 11 12 13 14
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_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
[_FUNCTION] = LAYOUT_60_ansi_tsangan(
// 2 3 4 5 6 7 8 9 10 11 12 13 14
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_DEL,
_______, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, _______, KC_INS, _______, KC_UP, KC_PAUS, KC_PGUP, KC_HOME, KC_PSCR, _______,
_______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, _______, KC_SCRL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_END, KC_ENT,
_______, _______, KC_APP, _______, _______, _______, KC_CALC, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
_______, KC_APP, MO(_CLR), _______, KC_APP, _______, _______
),
[_COLOUR] = LAYOUT_60_ansi_tsangan(
// 2 3 4 5 6 7 8 9 10 11 12 13 14
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, RM_NEXT, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RM_HUEU, RM_SATU, RM_VALU, RM_SPDU, _______, _______, _______, _______, _______, _______, _______,
_______, RM_HUED, RM_SATD, RM_VALD, RM_SPDD, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, RM_TOGG, _______, _______, _______
),
};

View File

@@ -0,0 +1,8 @@
// Copyright 2024 Hyojin Bak (@eerraa)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
/* Reset */
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U

View File

@@ -0,0 +1,120 @@
{
"manufacturer": "SIRIND",
"keyboard_name": "ChickPad",
"maintainer": "eerraa",
"bootloader": "rp2040",
"build": {
"debounce_type": "sym_defer_pk"
},
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true
},
"matrix_pins": {
"cols": ["GP23", "GP25", "GP3", "GP5", "GP4"],
"rows": ["GP18", "GP24", "GP22"]
},
"processor": "RP2040",
"rgb_matrix": {
"animations": {
"alphas_mods": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_sat": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"band_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"digital_rain": true,
"dual_beacon": true,
"flower_blooming": true,
"gradient_left_right": true,
"gradient_up_down": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"jellybean_raindrops": true,
"multisplash": true,
"pixel_flow": true,
"pixel_fractal": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"rainbow_pinwheels": true,
"raindrops": true,
"riverflow": true,
"solid_multisplash": true,
"solid_reactive": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_nexus": true,
"solid_reactive_simple": true,
"solid_reactive_wide": true,
"solid_splash": true,
"splash": true,
"starlight": true,
"starlight_dual_hue": true,
"starlight_dual_sat": true,
"typing_heatmap": true
},
"driver": "ws2812",
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
{"matrix": [0, 1], "x": 56, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 112, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 168, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 224, "y": 16, "flags": 1},
{"matrix": [1, 3], "x": 168, "y": 32, "flags": 4},
{"matrix": [1, 2], "x": 112, "y": 32, "flags": 4},
{"matrix": [1, 1], "x": 56, "y": 32, "flags": 4},
{"matrix": [1, 0], "x": 0, "y": 32, "flags": 4},
{"matrix": [2, 0], "x": 28, "y": 64, "flags": 1},
{"matrix": [2, 2], "x": 112, "y": 64, "flags": 4},
{"matrix": [2, 3], "x": 168, "y": 64, "flags": 4},
{"matrix": [2, 4], "x": 224, "y": 64, "flags": 4}
],
"sleep": true
},
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0015",
"vid": "0x4552"
},
"ws2812": {
"driver": "vendor",
"pin": "GP19"
},
"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": [0, 4], "x": 4.25, "y": 0, "w": 1.25, "h": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.25},
{"matrix": [1, 1], "x": 1.25, "y": 1},
{"matrix": [1, 2], "x": 2.25, "y": 1},
{"matrix": [1, 3], "x": 3.25, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 2.25},
{"matrix": [2, 2], "x": 2.25, "y": 2},
{"matrix": [2, 3], "x": 3.25, "y": 2},
{"matrix": [2, 4], "x": 4.25, "y": 2}
]
}
}
}

View File

@@ -0,0 +1,13 @@
// Copyright 2024 QMK (@qmk)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_1 , KC_2 , KC_3 , KC_4 , KC_ENT ,
KC_LSFT, KC_VOLU, KC_VOLD, KC_UP ,
KC_SPC , KC_LEFT, KC_DOWN, KC_RGHT
)
};

View File

@@ -0,0 +1,25 @@
# ChickPad Unified
![Chickpad](https://i.imgur.com/RAH7dyl.jpeg)
* Keyboard Maintainer: [ERA](https://github.com/eerraa)
* Hardware supported: Chickpad PCB w/ RP2040
* Hardware availability: [Syryan](https://srind.mysoho.com/)
Make example for this keyboard (after setting up your build environment):
make era/sirind/chickpad:default
Flashing example for this keyboard:
make era/sirind/chickpad: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 ESC(0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly short the `RESET` and `GND` pads on the SWD header twice, or short the `BOOT` header and plug in keyboard
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -62,7 +62,6 @@
"rainbow_moving_chevron": true,
"rainbow_pinwheels": true,
"raindrops": true,
"solid_color": true,
"solid_multisplash": true,
"solid_reactive": true,
"solid_reactive_cross": true,

View File

@@ -0,0 +1,13 @@
// Copyright 2025 Erik Peyronson @erikpeyronson
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
#define I2C_DRIVER I2CD1
#define OLED_IC OLED_IC_SH1106
#define OLED_COLUMN_OFFSET 2
#define OLED_DISPLAY_128X64

View File

@@ -0,0 +1,63 @@
// Copyright 2025 Erik Peyronson @erikpeyronson
// SPDX-License-Identifier: GPL-3.0-or-later
#include QMK_KEYBOARD_H
static void oled_render_logo(void) {
// clang-format off
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
};
// clang-format on
oled_write_P(qmk_logo, false);
}
static void render_layer(void) {
oled_write_P(PSTR("Layer: "), false);
oled_write_ln(get_u8_str(get_highest_layer(layer_state), ' '), false);
}
static void render_locks(void) {
led_t led_config = host_keyboard_led_state();
oled_write_P(PSTR("Caps "), led_config.caps_lock);
oled_write_P(PSTR("Scrl "), led_config.scroll_lock);
oled_write_P(PSTR("Num "), led_config.num_lock);
#ifdef CAPS_WORD_ENABLE
oled_write_P(PSTR("Word "), is_caps_word_on());
#endif
oled_advance_page(true);
}
static void render_mods(void) {
uint8_t mod_state = get_mods();
oled_write_P("Ctrl ", mod_state & MOD_MASK_CTRL);
oled_write_P("Shift ", mod_state & MOD_MASK_SHIFT);
oled_write_P("Alt ", mod_state & MOD_MASK_ALT);
oled_write_P("Gui", mod_state & MOD_MASK_GUI);
oled_advance_page(true);
}
static void render_delimeter(void) {
oled_write_ln_P(PSTR("------------------"), false);
}
bool oled_task_kb(void) {
if (!oled_task_user()) {
return false;
}
if (is_keyboard_left()) {
oled_render_logo();
} else {
render_delimeter();
render_locks();
render_delimeter();
render_mods();
render_delimeter();
render_layer();
render_delimeter();
}
return false;
}

View File

@@ -0,0 +1,107 @@
{
"manufacturer": "Erik Peyronson",
"keyboard_name": "erkbd",
"maintainer": "erikpeyronson",
"bootloader": "rp2040",
"bootloader_instructions": "Double tap the reset button on the controller board if accessable. If not hold down bootmagic key while powering on. Left side: row 0 column 0. (The tab key on regular keyboard). Right side: row 5 column 4 (the Backspace key on regular keyboard)",
"diode_direction": "COL2ROW",
"encoder": {
"rotary": [
{"pin_a": "GP7", "pin_b": "GP8"}
]
},
"features": {
"bootmagic": true,
"encoder": true,
"oled": true
},
"matrix_pins": {
"cols": ["GP8", "GP9", "GP10", "GP11", "GP12", "GP13"],
"rows": ["GP4", "GP5", "GP6", "GP7"]
},
"processor": "RP2040",
"split": {
"bootmagic": {
"matrix": [4, 5]
},
"enabled": true,
"encoder": {
"right": {
"rotary": [
{"pin_a": "GP7", "pin_b": "GP8"}
]
}
},
"handedness": {
"pin": "GP1"
},
"matrix_pins": {
"right": {
"cols": ["GP9", "GP10", "GP11", "GP12", "GP13", "GP14"],
"rows": ["GP28", "GP27", "GP26", "GP15"]
}
},
"serial": {
"driver": "vendor",
"pin": "GP0"
}
},
"url": "https://github.com/erikpeyronson/erkbd",
"usb": {
"device_version": "1.0.0",
"pid": "0x1234",
"vid": "0xFEED"
},
"layouts": {
"LAYOUT_split_3x6_5": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0.4},
{"matrix": [0, 1], "x": 1, "y": 0.3},
{"matrix": [0, 2], "x": 2, "y": 0.1},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0.1},
{"matrix": [0, 5], "x": 5, "y": 0.2},
{"matrix": [4, 0], "x": 9, "y": 0.2},
{"matrix": [4, 1], "x": 10, "y": 0.1},
{"matrix": [4, 2], "x": 11, "y": 0},
{"matrix": [4, 3], "x": 12, "y": 0.1},
{"matrix": [4, 4], "x": 13, "y": 0.3},
{"matrix": [4, 5], "x": 14, "y": 0.4},
{"matrix": [1, 0], "x": 0, "y": 1.4},
{"matrix": [1, 1], "x": 1, "y": 1.3},
{"matrix": [1, 2], "x": 2, "y": 1.1},
{"matrix": [1, 3], "x": 3, "y": 1},
{"matrix": [1, 4], "x": 4, "y": 1.1},
{"matrix": [1, 5], "x": 5, "y": 1.2},
{"matrix": [5, 0], "x": 9, "y": 1.2},
{"matrix": [5, 1], "x": 10, "y": 1.1},
{"matrix": [5, 2], "x": 11, "y": 1},
{"matrix": [5, 3], "x": 12, "y": 1.1},
{"matrix": [5, 4], "x": 13, "y": 1.3},
{"matrix": [5, 5], "x": 14, "y": 1.4},
{"matrix": [2, 0], "x": 0, "y": 2.4},
{"matrix": [2, 1], "x": 1, "y": 2.3},
{"matrix": [2, 2], "x": 2, "y": 2.1},
{"matrix": [2, 3], "x": 3, "y": 2},
{"matrix": [2, 4], "x": 4, "y": 2.1},
{"matrix": [2, 5], "x": 5, "y": 2.2},
{"matrix": [6, 0], "x": 9, "y": 2.2},
{"matrix": [6, 1], "x": 10, "y": 2.1},
{"matrix": [6, 2], "x": 11, "y": 2},
{"matrix": [6, 3], "x": 12, "y": 2.1},
{"matrix": [6, 4], "x": 13, "y": 2.3},
{"matrix": [6, 5], "x": 14, "y": 2.4},
{"matrix": [3, 1], "x": 3, "y": 3.4},
{"matrix": [3, 2], "x": 4, "y": 3.4},
{"matrix": [3, 3], "x": 5, "y": 3.5},
{"matrix": [3, 4], "x": 6, "y": 3.7},
{"matrix": [3, 5], "x": 6, "y": 2.7},
{"matrix": [7, 0], "x": 8, "y": 2.7},
{"matrix": [7, 1], "x": 8, "y": 3.7},
{"matrix": [7, 2], "x": 9, "y": 3.5},
{"matrix": [7, 3], "x": 10, "y": 3.4},
{"matrix": [7, 4], "x": 11, "y": 3.4}
]
}
}
}

View File

@@ -0,0 +1,52 @@
// Copyright 2025 Qmk, Erik Peyronson @erikpeyronson
// SPDX-License-Identifier: GPL-3.0-or-later
// NOTE: This keymap is for debugging purposes to have firmware to test the matrix when building the keyboard. If you intend to build this keyboard
// you should copy this to your fork or userspace repository and create your own.
#include QMK_KEYBOARD_H
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_split_3x6_5(
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LBRC, KC_RBRC, KC_LGUI, KC_BSPC, KC_SPC, KC_SPC, KC_ENT, KC_RALT, KC_LPRN, KC_RPRN
)
};
// clang-format on
void keyboard_post_init_user(void) {
#ifdef CONSOLE_ENABLE
debug_enable = true;
debug_matrix = true;
#endif
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// If console is enabled, it will print the matrix position and status of each key pressed
#ifdef CONSOLE_ENABLE
uprintf("KL: kc: 0x%04X, col: %2u, row: %2u, pressed: %u, time: %5u, int: %u, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count);
#endif
return true;
}
// This function prints which half the keyboard considers itself to be which is
// useful for verify if the handedness pin and display is correctly set up when building
#ifdef OLED_ENABLE
bool oled_task_user(void) {
if (is_keyboard_left()) {
oled_write_P(PSTR("left"), false);
} else {
oled_write_P(PSTR("right"), false);
}
return false;
}
#endif
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = {ENCODER_CCW_CW(KC_UP, KC_DOWN), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT)}
};
#endif

View File

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

View File

@@ -0,0 +1,24 @@
{
"keyboard": "handwired/erikpeyronson/erkbd",
"keymap": "default",
"layout": "LAYOUT_split_3x6_5",
"layers": [
[
"KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "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_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT",
"KC_LBRC", "KC_RBRC", "KC_LGUI", "KC_BSPC", "KC_SPC", "KC_SPC", "KC_ENT", "KC_RALT", "KC_LPRN", "KC_RPRN"
]
],
"config": {
"features": {
"encoder_map": true
}
},
"encoders": [
[
{ "ccw": "KC_UP", "cw": "KC_DOWN" },
{ "ccw": "KC_RIGHT", "cw": "KC_LEFT" }
]
]
}

View File

@@ -0,0 +1,28 @@
# handwired/erikpeyronson/erkbd
![Erkbd](https://i.imgur.com/VViiXIN.jpeg)
3D printed, handwired 44 key split keyboard featuring two encoders, two 1.3" 128x64 oled displays using the waveshare rp2040zero development board.
* Keyboard Maintainer: [Erik Peyronson](https://github.com/erikpeyronson)
* Hardware Supported: See keyboard repository on [github](https://github.com/erikpeyronson/erkbd)
* Hardware Availability: See keyboard repository on [github](https://github.com/erikpeyronson/erkbd)
Make example for this keyboard (after setting up your build environment):
make handwired/erikpeyronson/erkbd:default
Flashing example for this keyboard:
Enter bootloader, drag and drop .uft2 file on the removable storage
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**: For left half hold down the key at (0,0) in the matrix (correspons with the tab key) and plug in the keyboard.
For left half half the key is (4,5) (corresponds with the backspace key)
* **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
Enter the bootloader in 3 ways:

View File

@@ -0,0 +1,21 @@
/* Copyright 2024-2025 Grigory Avdyushin
*
* 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 I2C_DRIVER I2CD0
#define I2C1_SDA_PIN GP0
#define I2C1_SCL_PIN GP1

View File

@@ -0,0 +1,68 @@
/* Copyright 2024-2025 Grigory Avdyushin
*
* 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
#ifdef OLED_ENABLE
static void render_logo(void) {
static const char PROGMEM qmk_logo[] = {
0x80, 0x81, 0x82, 0x83, 0x84,
0xA0, 0xA1, 0xA2, 0xA3, 0xA4,
0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0x00, 0x0A, 0x0A
};
oled_write_P(qmk_logo, false);
}
static void render_mod_status(uint8_t modifiers) {
oled_write_P(PSTR("MODS:"), false);
oled_write_P(PSTR("S"), (modifiers & MOD_MASK_SHIFT));
oled_write_P(PSTR("C"), (modifiers & MOD_MASK_CTRL));
oled_write_P(PSTR("A"), (modifiers & MOD_MASK_ALT));
oled_write_ln_P(PSTR("G"), (modifiers & MOD_MASK_GUI));
oled_write_ln_P(PSTR(" "), false);
}
static void render_layer_state(void) {
oled_write_ln_P(PSTR(" "), false);
oled_write_P("BASE ", layer_state_is(0));
oled_write_P("LOWER", layer_state_is(1));
oled_write_P("RAISE", layer_state_is(2));
oled_write_P("NAV ", layer_state_is(3));
oled_write_ln_P(PSTR(" "), false);
}
static void render_capsword_state(bool on) {
oled_write_ln_P("CAPSW", on);
}
oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
return OLED_ROTATION_270;
}
bool oled_task_kb(void) {
if (!oled_task_user()) {
return false;
}
render_logo();
render_layer_state();
render_mod_status(get_mods() | get_oneshot_mods());
render_capsword_state(is_caps_word_on());
return false;
}
#endif

View File

@@ -0,0 +1,21 @@
/* Copyright 2024-2025 Grigory Avdyushin
*
* 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 HAL_USE_I2C TRUE
#include_next <halconf.h>

View File

@@ -0,0 +1,72 @@
{
"manufacturer": "Grigory Avdyushin",
"keyboard_name": "franky36",
"maintainer": "Grigory Avdyushin",
"bootloader": "rp2040",
"caps_word": {
"both_shifts_turns_on": true
},
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"caps_word": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"oled": true
},
"matrix_pins": {
"cols": ["GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15", "GP26", "GP27", "GP28"],
"rows": ["GP5", "GP4", "GP3", "GP2"]
},
"processor": "RP2040",
"url": "https://github.com/avdyushin/franky36",
"usb": {
"device_version": "0.2.0",
"pid": "0x0001",
"vid": "0xFEED"
},
"community_layouts": ["split_3x5_3"],
"layouts": {
"LAYOUT_split_3x5_3": {
"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": [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": [1, 4], "x": 4, "y": 1},
{"matrix": [1, 5], "x": 5, "y": 1},
{"matrix": [1, 6], "x": 6, "y": 1},
{"matrix": [1, 7], "x": 7, "y": 1},
{"matrix": [1, 8], "x": 8, "y": 1},
{"matrix": [1, 9], "x": 9, "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": [2, 4], "x": 4, "y": 2},
{"matrix": [2, 5], "x": 5, "y": 2},
{"matrix": [2, 6], "x": 6, "y": 2},
{"matrix": [2, 7], "x": 7, "y": 2},
{"matrix": [2, 8], "x": 8, "y": 2},
{"matrix": [2, 9], "x": 9, "y": 2},
{"matrix": [3, 2], "x": 2, "y": 3},
{"matrix": [3, 3], "x": 3, "y": 3},
{"matrix": [3, 4], "x": 4, "y": 3},
{"matrix": [3, 5], "x": 5, "y": 3},
{"matrix": [3, 6], "x": 6, "y": 3},
{"matrix": [3, 7], "x": 7, "y": 3}
]
}
}
}

View File

@@ -0,0 +1,123 @@
/* Copyright 2024-2025 Grigory Avdyushin
*
* 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 my_layers {
_BASE = 0,
_LOWER,
_RAISE,
_NAV,
};
#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)
#define NAV MO(_NAV)
#define OSM_LSFT OSM(MOD_LSFT) // One Shot Right Shift
#define KC_SFT_Z SFT_T(KC_Z) // Left Shift when held, Z when tapped
#define KC_SFT_SL RSFT_T(KC_SLSH) // Right Shift when held, / when tapped
#define KC_SFT_BSLS RSFT_T(KC_BSLS) // Right Shift when held, \ when tapped
#define KC_LWR_SPC LT(_LOWER, KC_SPC) // Lower layer when held, Space when tapped
#define KC_RSE_BSPC LT(_RAISE, KC_BSPC) // Raise layer when held, Backspace when tapped
#define KC_NAV_A LT(_NAV,KC_A) // Navigation layer when held, A when tapped
#define KC_CMD_TAB CMD_T(KC_TAB) // Left Command when held, Tab when tapped
#define KC_CMD_ENT RCMD_T(KC_ENT) // Right Command when held, Enter when tapped
#define KC_CTL_ESC CTL_T(KC_ESC) // Left Control when held, Escape when tapped
#define KC_OPT_OSM_SFT ROPT_T(OSM_LSFT) // Right Option when held, One Shot Shift when tapped
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
* │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ;:│
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │⇧/Z│ X │ C │ V │ B │ │ N │ M │ ,<│ .>│⇧/?│
* └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
* ┌───┬───┬───┐ ┌───┬───┬───┐
* │CTL│CMD│SPC│ │ENT│CMD│OPT│
* └───┴───┴───┘ └───┴───┴───┘
*/
[_BASE] = LAYOUT_split_3x5_3(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_NAV_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
KC_SFT_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SFT_SL,
KC_CTL_ESC, KC_CMD_TAB, KC_LWR_SPC, KC_RSE_BSPC, KC_CMD_ENT, KC_ROPT
),
/*
* ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
* │ 1!│ 2@│ 3#│ 4$│ 5%│ │ 6^│ 7&│ 8*│ 9(│ 0)│
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ `~│ │ │ │ │ │ ← │ ↓ │ ↑ │ → │ '"│
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ ⇧ │ │ │ │ │ │ -_│ =+│ [{│ ]}│ \|│
* └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
* ┌───┬───┬───┐ ┌───┬───┬───┐
* │ │ │ │ │ │ │ │
* └───┴───┴───┘ └───┴───┴───┘
*/
[_LOWER] = LAYOUT_split_3x5_3(
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
KC_GRV, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_QUOT,
KC_LSFT, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_SFT_BSLS,
_______, _______, _______, _______, _______, _______
),
/*
* ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
* │ F1│ F2│ F3│ F4│ F5│ │ F6│ F7│ F8│ F9│F10│
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ │ │ │ │ │ │ │ │ │ │ │
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ │ │ │ │ │ │ │ │ │ │ │
* └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
* ┌───┬───┬───┐ ┌───┬───┬───┐
* │ │ │ │ │ │ │ │
* └───┴───┴───┘ └───┴───┴───┘
*/
[_RAISE] = LAYOUT_split_3x5_3(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
),
/*
* ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
* │ │ │ │ │ │ │HOM│ │ │END│ │
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ │ │ │ │ │ │ ← │ ↓ │ ↑ │ → │ │
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ │ │ │ │ │ │PUP│ │ │PDN│ │
* └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
* ┌───┬───┬───┐ ┌───┬───┬───┐
* │ │ │ │ │ │ │ │
* └───┴───┴───┘ └───┴───┴───┘
*/
[_NAV] = LAYOUT_split_3x5_3(
_______, _______, _______, _______, _______, KC_HOME, _______, _______, KC_END, _______,
_______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______,
_______, _______, _______, _______, _______, KC_PGUP, _______, _______, KC_PGDN, _______,
_______, _______, _______, _______, _______, _______
)
};

View File

@@ -0,0 +1,24 @@
/* Copyright 2024-2025 Grigory Avdyushin
*
* 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_next <mcuconf.h>
#undef RP_I2C_USE_I2C0
#define RP_I2C_USE_I2C0 TRUE
#undef RP_I2C_USE_I2C1
#define RP_I2C_USE_I2C1 FALSE

View File

@@ -0,0 +1,25 @@
# franky36
Franky36 is 36 key compact handwired split keyboard that uses single RP2040-Zero controller.
* Keyboard Maintainer: [Grigory Avdyushin](https://github.com/avdyushin)
* Hardware Supported: RP2040-Zero
* Hardware Availability: Handwired [franky36](https://github.com/avdyushin/franky36)
Make example for this keyboard (after setting up your build environment):
make franky36:default
Flashing example for this keyboard:
make franky36: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**: Hold down the reset button on the controller and plug in the keyboard
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -0,0 +1,104 @@
{
"manufacturer": "Cherry",
"keyboard_name": "Protype Display Typewriter",
"maintainer": "nooges",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"rows": ["GP29", "GP28", "GP27", "GP26", "GP22", "GP20", "GP23", "GP21"],
"cols": ["GP12", "GP9", "GP10", "GP0", "GP1", "GP5", "GP6", "GP2", "GP3", "GP4"]
},
"processor": "RP2040",
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0xB7D7",
"vid": "0x046A"
},
"layouts": {
"LAYOUT": {
"layout": [
{ "label": "F1", "matrix": [0, 0], "w": 1.5, "x": 0, "y": 0 },
{ "label": "F2", "matrix": [0, 1], "w": 1.5, "x": 1.5, "y": 0 },
{ "label": "`", "matrix": [0, 2], "x": 3.5, "y": 0 },
{ "label": "1", "matrix": [0, 3], "x": 4.5, "y": 0 },
{ "label": "2", "matrix": [0, 4], "x": 5.5, "y": 0 },
{ "label": "3", "matrix": [0, 5], "x": 6.5, "y": 0 },
{ "label": "4", "matrix": [0, 6], "x": 7.5, "y": 0 },
{ "label": "5", "matrix": [0, 7], "x": 8.5, "y": 0 },
{ "label": "6", "matrix": [0, 8], "x": 9.5, "y": 0 },
{ "label": "7", "matrix": [0, 9], "x": 10.5, "y": 0 },
{ "label": "8", "matrix": [4, 8], "x": 11.5, "y": 0 },
{ "label": "9", "matrix": [4, 7], "x": 12.5, "y": 0 },
{ "label": "0", "matrix": [4, 6], "x": 13.5, "y": 0 },
{ "label": "-", "matrix": [4, 5], "x": 14.5, "y": 0 },
{ "label": "=", "matrix": [4, 4], "x": 15.5, "y": 0 },
{ "label": "Backspace", "matrix": [4, 3], "w": 2, "x": 16.5, "y": 0 },
{ "label": "Pg Up", "matrix": [4, 2], "x": 18.5, "y": 0 },
{ "label": "F8", "matrix": [4, 1], "w": 1.5, "x": 20, "y": 0 },
{ "label": "F9", "matrix": [4, 0], "w": 1.5, "x": 21.5, "y": 0 },
{ "label": "F3", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "F4", "matrix": [1, 1], "w": 1.5, "x": 1.5, "y": 1 },
{ "label": "Tab", "matrix": [1, 2], "w": 1.5, "x": 3.5, "y": 1 },
{ "label": "Q", "matrix": [1, 3], "x": 5, "y": 1 },
{ "label": "W", "matrix": [1, 4], "x": 6, "y": 1 },
{ "label": "E", "matrix": [1, 5], "x": 7, "y": 1 },
{ "label": "R", "matrix": [1, 6], "x": 8, "y": 1 },
{ "label": "T", "matrix": [1, 7], "x": 9, "y": 1 },
{ "label": "Y", "matrix": [1, 8], "x": 10, "y": 1 },
{ "label": "U", "matrix": [5, 9], "x": 11, "y": 1 },
{ "label": "I", "matrix": [5, 8], "x": 12, "y": 1 },
{ "label": "O", "matrix": [5, 7], "x": 13, "y": 1 },
{ "label": "P", "matrix": [5, 6], "x": 14, "y": 1 },
{ "label": "[", "matrix": [5, 5], "x": 15, "y": 1 },
{ "label": "]", "matrix": [5, 4], "x": 16, "y": 1 },
{ "label": "\\", "matrix": [5, 3], "w": 1.5, "x": 17, "y": 1 },
{ "label": "Pg Dn", "matrix": [5, 2], "x": 18.5, "y": 1 },
{ "label": "F10", "matrix": [5, 1], "w": 1.5, "x": 20, "y": 1 },
{ "label": "F11", "matrix": [5, 0], "w": 1.5, "x": 21.5, "y": 1 },
{ "label": "F5", "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2 },
{ "label": "F6", "matrix": [2, 1], "w": 1.5, "x": 1.5, "y": 2 },
{ "label": "Caps Lock", "matrix": [2, 2], "w": 1.75, "x": 3.5, "y": 2 },
{ "label": "A", "matrix": [2, 3], "x": 5.25, "y": 2 },
{ "label": "S", "matrix": [2, 4], "x": 6.25, "y": 2 },
{ "label": "D", "matrix": [2, 5], "x": 7.25, "y": 2 },
{ "label": "F", "matrix": [2, 6], "x": 8.25, "y": 2 },
{ "label": "G", "matrix": [2, 7], "x": 9.25, "y": 2 },
{ "label": "H", "matrix": [2, 8], "x": 10.25, "y": 2 },
{ "label": "J", "matrix": [2, 9], "x": 11.25, "y": 2 },
{ "label": "K", "matrix": [6, 8], "x": 12.25, "y": 2 },
{ "label": "L", "matrix": [6, 7], "x": 13.25, "y": 2 },
{ "label": ";", "matrix": [6, 6], "x": 14.25, "y": 2 },
{ "label": "'", "matrix": [6, 5], "x": 15.25, "y": 2 },
{ "label": "Enter", "matrix": [6, 4], "w": 2.25, "x": 16.25, "y": 2 },
{ "label": "Up", "matrix": [6, 2], "x": 18.5, "y": 2 },
{ "label": "F12", "matrix": [6, 1], "w": 1.5, "x": 20, "y": 2 },
{ "label": "F13", "matrix": [6, 0], "w": 1.5, "x": 21.5, "y": 2 },
{ "label": "F7", "matrix": [3, 0], "w": 3, "x": 0, "y": 3 },
{ "label": "Ctrl", "matrix": [3, 2], "x": 3.5, "y": 3 },
{ "label": "Shift", "matrix": [3, 3], "w": 1.25, "x": 4.5, "y": 3 },
{ "label": "Z", "matrix": [3, 4], "x": 5.75, "y": 3 },
{ "label": "X", "matrix": [3, 5], "x": 6.75, "y": 3 },
{ "label": "C", "matrix": [3, 6], "x": 7.75, "y": 3 },
{ "label": "V", "matrix": [3, 7], "x": 8.75, "y": 3 },
{ "label": "B", "matrix": [3, 8], "x": 9.75, "y": 3 },
{ "label": "N", "matrix": [7, 9], "x": 10.75, "y": 3 },
{ "label": "M", "matrix": [7, 8], "x": 11.75, "y": 3 },
{ "label": ",", "matrix": [7, 7], "x": 12.75, "y": 3 },
{ "label": ".", "matrix": [7, 6], "x": 13.75, "y": 3 },
{ "label": "/", "matrix": [7, 5], "x": 14.75, "y": 3 },
{ "label": "Shift", "matrix": [7, 4], "w": 2.75, "x": 15.75, "y": 3 },
{ "label": "Down", "matrix": [7, 2], "x": 18.5, "y": 3 },
{ "label": "F14", "matrix": [7, 1], "w": 1.5, "x": 20, "y": 3 },
{ "label": "F15", "matrix": [7, 0], "w": 1.5, "x": 21.5, "y": 3 },
{ "matrix": [3, 1], "w": 9, "x": 6.75, "y": 4 }
]
}
}
}

View File

@@ -0,0 +1,15 @@
// Copyright 2025 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_F1, KC_F2, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP, KC_F8, KC_F9,
KC_F3, KC_F4, 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_PGDN, KC_F10, KC_F11,
KC_F5, KC_F6, 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_UP, KC_F12, KC_F13,
KC_F7, KC_LCTL, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_DOWN, KC_F14, KC_F15,
KC_SPC
)
};

View File

@@ -0,0 +1,26 @@
# Cherry Protype Display Typewriter
![handwired/protype](https://i.imgur.com/hcFikid.jpeg)
Handwired RP2040 Pro Micro (Community Edition) on Cherry Protype Display Typewriter PCB.
* Keyboard Maintainer: [nooges](https://github.com/nooges)
* Hardware Supported: RP2040 Pro Micro Controller
Make example for this keyboard (after setting up your build environment):
qmk compile -kb handwired/protype -km default
Flashing example for this keyboard:
qmk flash -kb handwired/protype -km 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. 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**: Hold the Boot button on the microcontroller and then press Reset
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -0,0 +1,40 @@
{
"manufacturer": "jankycaps",
"keyboard_name": "Janky No.9",
"maintainer": "telybelly",
"development_board": "promicro",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true
},
"matrix_pins": {
"direct": [
["F4", "F5", "F6"],
["F7", "B1", "B3"],
["B2", "B6", "B5"]
]
},
"url": "https://anky.studio/",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
"vid": "0x4E4B"
},
"community_layouts": ["ortho_3x3"],
"layouts": {
"LAYOUT_ortho_3x3": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1, "y": 1},
{"matrix": [1, 2], "x": 2, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1, "y": 2},
{"matrix": [2, 2], "x": 2, "y": 2}
]
}
}
}

View File

@@ -0,0 +1,25 @@
/* Copyright 2025
*
* 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_ortho_3x3(
KC_1, KC_2, KC_3,
KC_4, KC_5, KC_6,
KC_7, KC_8, KC_9
),
};

View File

@@ -0,0 +1,27 @@
# Janky No.9
![Janky No.9](https://i.imgur.com/hkEorpO.jpeg)
*A Handmade 3x3 Macropad*
* Keyboard Maintainer: [telybelly](https://github.com/telybelly)
* Hardware Supported: Janky No.9
* Hardware Availability: <https://anky.studio/>
Make example for this keyboard (after setting up your build environment):
make jankycaps/janky9:default
Flashing example for this keyboard:
make jankycaps/janky9: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**: Quickly short the RST and GND pads on the PCB twice
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -0,0 +1,10 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define USB_VBUS_PIN GP13
/* RP2040- and hardware-specific config */
#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,235 @@
{
"manufacturer": "Keebart",
"keyboard_name": "sofle_choc_pro",
"maintainer": "Keebart",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"encoder": {
"rotary": [
{"pin_a": "GP23", "pin_b": "GP22"}
]
},
"features": {
"bootmagic": true,
"encoder": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true
},
"matrix_pins": {
"cols": ["GP27", "GP26", "GP25", "GP24", "GP19", "GP18"],
"rows": ["GP0", "GP1", "GP2", "GP3", "GP4"]
},
"processor": "RP2040",
"rgb_matrix": {
"animations": {
"alphas_mods": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_sat": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"band_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"digital_rain": true,
"dual_beacon": true,
"gradient_left_right": true,
"gradient_up_down": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"jellybean_raindrops": true,
"multisplash": true,
"pixel_flow": true,
"pixel_fractal": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"rainbow_pinwheels": true,
"raindrops": true,
"solid_multisplash": true,
"solid_reactive": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_nexus": true,
"solid_reactive_simple": true,
"solid_reactive_wide": true,
"solid_splash": true,
"splash": true,
"typing_heatmap": true
},
"driver": "ws2812",
"layout": [
{"matrix": [4, 5], "x": 99, "y": 38, "flags": 4},
{"matrix": [4, 4], "x": 91, "y": 64, "flags": 4},
{"matrix": [4, 3], "x": 77, "y": 60, "flags": 4},
{"matrix": [3, 5], "x": 82, "y": 45, "flags": 4},
{"matrix": [2, 5], "x": 82, "y": 31, "flags": 4},
{"matrix": [1, 5], "x": 82, "y": 17, "flags": 4},
{"matrix": [0, 5], "x": 82, "y": 3, "flags": 4},
{"matrix": [0, 4], "x": 66, "y": 2, "flags": 4},
{"matrix": [1, 4], "x": 66, "y": 16, "flags": 4},
{"matrix": [2, 4], "x": 66, "y": 29, "flags": 4},
{"matrix": [3, 4], "x": 66, "y": 43, "flags": 4},
{"matrix": [4, 2], "x": 58, "y": 59, "flags": 4},
{"matrix": [4, 1], "x": 41, "y": 59, "flags": 4},
{"matrix": [3, 3], "x": 49, "y": 41, "flags": 4},
{"matrix": [2, 3], "x": 49, "y": 28, "flags": 4},
{"matrix": [1, 3], "x": 49, "y": 16, "flags": 4},
{"matrix": [0, 3], "x": 49, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 33, "y": 2, "flags": 4},
{"matrix": [1, 2], "x": 33, "y": 16, "flags": 4},
{"matrix": [2, 2], "x": 33, "y": 29, "flags": 4},
{"matrix": [3, 2], "x": 33, "y": 43, "flags": 4},
{"matrix": [4, 0], "x": 25, "y": 60, "flags": 4},
{"matrix": [3, 1], "x": 16, "y": 47, "flags": 4},
{"matrix": [2, 1], "x": 16, "y": 33, "flags": 4},
{"matrix": [1, 1], "x": 16, "y": 19, "flags": 4},
{"matrix": [0, 1], "x": 16, "y": 5, "flags": 4},
{"matrix": [0, 0], "x": 0, "y": 5, "flags": 4},
{"matrix": [1, 0], "x": 0, "y": 19, "flags": 4},
{"matrix": [2, 0], "x": 0, "y": 33, "flags": 4},
{"matrix": [3, 0], "x": 0, "y": 47, "flags": 4},
{"matrix": [9, 5], "x": 125, "y": 38, "flags": 4},
{"matrix": [9, 4], "x": 134, "y": 64, "flags": 4},
{"matrix": [9, 3], "x": 147, "y": 60, "flags": 4},
{"matrix": [8, 5], "x": 142, "y": 45, "flags": 4},
{"matrix": [7, 5], "x": 142, "y": 31, "flags": 4},
{"matrix": [6, 5], "x": 142, "y": 17, "flags": 4},
{"matrix": [5, 5], "x": 142, "y": 3, "flags": 4},
{"matrix": [5, 4], "x": 158, "y": 2, "flags": 4},
{"matrix": [6, 4], "x": 158, "y": 16, "flags": 4},
{"matrix": [7, 4], "x": 158, "y": 29, "flags": 4},
{"matrix": [8, 4], "x": 158, "y": 43, "flags": 4},
{"matrix": [9, 2], "x": 166, "y": 59, "flags": 4},
{"matrix": [9, 1], "x": 183, "y": 59, "flags": 4},
{"matrix": [8, 3], "x": 175, "y": 41, "flags": 4},
{"matrix": [7, 3], "x": 175, "y": 28, "flags": 4},
{"matrix": [6, 3], "x": 175, "y": 16, "flags": 4},
{"matrix": [5, 3], "x": 175, "y": 0, "flags": 4},
{"matrix": [5, 2], "x": 191, "y": 2, "flags": 4},
{"matrix": [6, 2], "x": 191, "y": 16, "flags": 4},
{"matrix": [7, 2], "x": 191, "y": 29, "flags": 4},
{"matrix": [8, 2], "x": 191, "y": 43, "flags": 4},
{"matrix": [9, 0], "x": 199, "y": 60, "flags": 4},
{"matrix": [8, 1], "x": 208, "y": 47, "flags": 4},
{"matrix": [7, 1], "x": 208, "y": 33, "flags": 4},
{"matrix": [6, 1], "x": 208, "y": 19, "flags": 4},
{"matrix": [5, 1], "x": 208, "y": 5, "flags": 4},
{"matrix": [5, 0], "x": 224, "y": 5, "flags": 4},
{"matrix": [6, 0], "x": 224, "y": 19, "flags": 4},
{"matrix": [7, 0], "x": 224, "y": 33, "flags": 4},
{"matrix": [8, 0], "x": 224, "y": 47, "flags": 4}
],
"max_brightness": 50,
"sleep": true,
"split_count": [30, 30]
},
"split": {
"bootmagic": {
"matrix": [5, 0]
},
"enabled": true,
"handedness": {
"pin": "GP21"
},
"serial": {
"driver": "vendor",
"pin": "GP12"
},
"transport": {
"sync": {
"indicators": true,
"layer_state": true,
"matrix_state": true
}
}
},
"url": "https://keebart.com/products/sofle",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"suspend_wakeup_delay": 200,
"vid": "0xFEED"
},
"ws2812": {
"driver": "vendor",
"pin": "GP10"
},
"layouts": {
"LAYOUT_split_4x6_5": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0.375},
{"matrix": [0, 1], "x": 1, "y": 0.375},
{"matrix": [0, 2], "x": 2, "y": 0.125},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0.125},
{"matrix": [0, 5], "x": 5, "y": 0.25},
{"matrix": [5, 5], "x": 9, "y": 0.25},
{"matrix": [5, 4], "x": 10, "y": 0.125},
{"matrix": [5, 3], "x": 11, "y": 0},
{"matrix": [5, 2], "x": 12, "y": 0.125},
{"matrix": [5, 1], "x": 13, "y": 0.375},
{"matrix": [5, 0], "x": 14, "y": 0.375},
{"matrix": [1, 0], "x": 0, "y": 1.375},
{"matrix": [1, 1], "x": 1, "y": 1.375},
{"matrix": [1, 2], "x": 2, "y": 1.125},
{"matrix": [1, 3], "x": 3, "y": 1},
{"matrix": [1, 4], "x": 4, "y": 1.125},
{"matrix": [1, 5], "x": 5, "y": 1.25},
{"matrix": [6, 5], "x": 9, "y": 1.25},
{"matrix": [6, 4], "x": 10, "y": 1.125},
{"matrix": [6, 3], "x": 11, "y": 1},
{"matrix": [6, 2], "x": 12, "y": 1.125},
{"matrix": [6, 1], "x": 13, "y": 1.375},
{"matrix": [6, 0], "x": 14, "y": 1.375},
{"matrix": [2, 0], "x": 0, "y": 2.375},
{"matrix": [2, 1], "x": 1, "y": 2.375},
{"matrix": [2, 2], "x": 2, "y": 2.125},
{"matrix": [2, 3], "x": 3, "y": 2},
{"matrix": [2, 4], "x": 4, "y": 2.125},
{"matrix": [2, 5], "x": 5, "y": 2.25},
{"matrix": [7, 5], "x": 9, "y": 2.25},
{"matrix": [7, 4], "x": 10, "y": 2.125},
{"matrix": [7, 3], "x": 11, "y": 2},
{"matrix": [7, 2], "x": 12, "y": 2.125},
{"matrix": [7, 1], "x": 13, "y": 2.375},
{"matrix": [7, 0], "x": 14, "y": 2.375},
{"matrix": [3, 0], "x": 0, "y": 3.375},
{"matrix": [3, 1], "x": 1, "y": 3.375},
{"matrix": [3, 2], "x": 2, "y": 3.125},
{"matrix": [3, 3], "x": 3, "y": 3},
{"matrix": [3, 4], "x": 4, "y": 3.125},
{"matrix": [3, 5], "x": 5, "y": 3.25},
{"matrix": [4, 5], "x": 6, "y": 2.75},
{"matrix": [9, 5], "x": 8, "y": 2.75},
{"matrix": [8, 5], "x": 9, "y": 3.25},
{"matrix": [8, 4], "x": 10, "y": 3.125},
{"matrix": [8, 3], "x": 11, "y": 3},
{"matrix": [8, 2], "x": 12, "y": 3.125},
{"matrix": [8, 1], "x": 13, "y": 3.375},
{"matrix": [8, 0], "x": 14, "y": 3.375},
{"matrix": [4, 0], "x": 1.5, "y": 4.375},
{"matrix": [4, 1], "x": 2.5, "y": 4.25},
{"matrix": [4, 2], "x": 3.5, "y": 4.25},
{"matrix": [4, 3], "x": 4.5, "y": 4.375},
{"matrix": [4, 4], "x": 6, "y": 4.375, "h": 1.5},
{"matrix": [9, 4], "x": 8, "y": 4.375, "h": 1.5},
{"matrix": [9, 3], "x": 9.5, "y": 4.375},
{"matrix": [9, 2], "x": 10.5, "y": 4.25},
{"matrix": [9, 1], "x": 11.5, "y": 4.25},
{"matrix": [9, 0], "x": 12.5, "y": 4.375}
]
}
}
}

View File

@@ -0,0 +1,49 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
enum layers {
BASE, // default layer
MDIA, // media keys
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* QWERTY
* ,-----------------------------------------. ,-----------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bspc |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | CAPS | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
* |------+------+------+------+------+------| Mute | | Pause |------+------+------+------+------+------|
* |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
* `-----------------------------------------/ / \ \-----------------------------------------'
* | LCTL | LALT | LCMD | LGUI | /Enter / \Space \ | RGUI | DEL | RALT | RCTL |
* | | | | LT1 |/ / \ \ | LT1 | | | |
* `----------------------------------' '------''---------------------------'
*/
[BASE] = LAYOUT_split_4x6_5(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, 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_BSPC,
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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_MPLY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LALT, KC_LCMD, LT(MDIA,KC_LGUI), KC_ENT, KC_SPC, LT(MDIA,KC_RGUI), KC_DEL, KC_RALT, KC_RCTL
),
[MDIA] = LAYOUT_split_4x6_5(
KC_MUTE,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
RM_TOGG,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
RM_NEXT,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
RM_HUEU,_______,_______,_______,_______,_______, _______, _______, _______,_______,_______,_______,_______,_______,
_______,_______,_______,_______, _______, _______, _______,_______,_______,_______
)
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
[MDIA] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }
};
#endif

View File

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

View File

@@ -0,0 +1,28 @@
# Sofle Choc Pro
![sofle_choc_pro](https://i.imgur.com/q9A2HMe.jpeg)
A complete remake of the Sofle Choc Keyboard by Josef Adamčík. Featuring an onboard RP2040 with 128 MB flash
memory and choc-spaced keys for a more compact keyboard.
- Keyboard Maintainer: [Keebart](https://github.com/Keebart)
- Hardware Supported: RP2040
- Hardware Availability: [Keebart Shop](https://keebart.com/products/sofle)
Make example for this keyboard (after setting up your build environment):
make keebart/sofle_choc_pro:default
Flashing example for this keyboard:
make keebart/sofle_choc_pro: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 top left key of the left side of the keyboard while connecting the left side to the computer. Similarly, hold down the top right key of the right side of the keyboard while connecting the right side to the computer.
- **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,7 @@
{
"keyboards_name": "Keychron C1 Pro V2 Non-Light",
"usb": {
"pid": "0x051C",
"device_version": "1.0.0"
}
}

View File

@@ -0,0 +1,64 @@
/* Copyright 2025 @ 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
enum layers{
MAC_BASE,
MAC_FN,
WIN_BASE,
WIN_FN,
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_tkl_ansi(
KC_ESC, KC_BRID, KC_BRIU, _______, _______, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_SLEP,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[MAC_FN] = LAYOUT_tkl_ansi(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[WIN_BASE] = LAYOUT_tkl_ansi(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_NO, KC_SLEP,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[WIN_FN] = LAYOUT_tkl_ansi(
_______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
};
// clang-format on

View File

@@ -0,0 +1,24 @@
/* Copyright 2025 @ 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 Driver Configuration */
#define SNLED27351_I2C_ADDRESS_1 SNLED27351_I2C_ADDRESS_VDDIO
#define SNLED27351_I2C_ADDRESS_2 SNLED27351_I2C_ADDRESS_GND
/* Set LED driver current */
#define SNLED27351_CURRENT_TUNE { 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28 }

View File

@@ -0,0 +1,131 @@
{
"keyboard_name": "Keychron C1 Pro V2 RGB",
"features": {
"rgb_matrix": true
},
"rgb_matrix": {
"animations": {
"band_spiral_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"digital_rain": true,
"dual_beacon": true,
"jellybean_raindrops": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_simple": true,
"solid_splash": true,
"splash": true,
"typing_heatmap": true
},
"driver": "snled27351",
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 1},
{"matrix": [0, 1], "x": 26, "y": 0, "flags": 1},
{"matrix": [0, 2], "x": 39, "y": 0, "flags": 1},
{"matrix": [0, 3], "x": 52, "y": 0, "flags": 1},
{"matrix": [0, 4], "x": 65, "y": 0, "flags": 1},
{"matrix": [0, 5], "x": 85, "y": 0, "flags": 1},
{"matrix": [0, 6], "x": 98, "y": 0, "flags": 1},
{"matrix": [0, 7], "x": 111, "y": 0, "flags": 1},
{"matrix": [0, 8], "x": 124, "y": 0, "flags": 1},
{"matrix": [0, 9], "x": 143, "y": 0, "flags": 1},
{"matrix": [0, 10], "x": 156, "y": 0, "flags": 1},
{"matrix": [0, 11], "x": 169, "y": 0, "flags": 1},
{"matrix": [0, 12], "x": 182, "y": 0, "flags": 1},
{"matrix": [0, 14], "x": 198, "y": 0, "flags": 1},
{"matrix": [0, 15], "x": 211, "y": 0, "flags": 1},
{"matrix": [0, 16], "x": 224, "y": 0, "flags": 1},
{"matrix": [1, 0], "x": 0, "y": 15, "flags": 1},
{"matrix": [1, 1], "x": 15, "y": 15, "flags": 4},
{"matrix": [1, 2], "x": 26, "y": 15, "flags": 4},
{"matrix": [1, 3], "x": 39, "y": 15, "flags": 4},
{"matrix": [1, 4], "x": 52, "y": 15, "flags": 4},
{"matrix": [1, 5], "x": 65, "y": 15, "flags": 4},
{"matrix": [1, 6], "x": 78, "y": 15, "flags": 4},
{"matrix": [1, 7], "x": 91, "y": 15, "flags": 4},
{"matrix": [1, 8], "x": 104, "y": 15, "flags": 4},
{"matrix": [1, 9], "x": 117, "y": 15, "flags": 4},
{"matrix": [1, 10], "x": 130, "y": 15, "flags": 4},
{"matrix": [1, 11], "x": 143, "y": 15, "flags": 4},
{"matrix": [1, 12], "x": 156, "y": 15, "flags": 4},
{"matrix": [1, 13], "x": 176, "y": 15, "flags": 1},
{"matrix": [1, 14], "x": 198, "y": 15, "flags": 1},
{"matrix": [1, 15], "x": 211, "y": 15, "flags": 1},
{"matrix": [1, 16], "x": 224, "y": 15, "flags": 1},
{"matrix": [2, 0], "x": 3, "y": 27, "flags": 1},
{"matrix": [2, 1], "x": 20, "y": 27, "flags": 4},
{"matrix": [2, 2], "x": 33, "y": 27, "flags": 4},
{"matrix": [2, 3], "x": 46, "y": 27, "flags": 4},
{"matrix": [2, 4], "x": 59, "y": 27, "flags": 4},
{"matrix": [2, 5], "x": 72, "y": 27, "flags": 4},
{"matrix": [2, 6], "x": 85, "y": 27, "flags": 4},
{"matrix": [2, 7], "x": 98, "y": 27, "flags": 4},
{"matrix": [2, 8], "x": 111, "y": 27, "flags": 4},
{"matrix": [2, 9], "x": 124, "y": 27, "flags": 4},
{"matrix": [2, 10], "x": 137, "y": 27, "flags": 4},
{"matrix": [2, 11], "x": 150, "y": 27, "flags": 4},
{"matrix": [2, 12], "x": 163, "y": 27, "flags": 4},
{"matrix": [2, 13], "x": 179, "y": 27, "flags": 1},
{"matrix": [2, 14], "x": 198, "y": 27, "flags": 1},
{"matrix": [2, 15], "x": 211, "y": 27, "flags": 1},
{"matrix": [2, 16], "x": 224, "y": 27, "flags": 1},
{"matrix": [3, 0], "x": 5, "y": 39, "flags": 8},
{"matrix": [3, 1], "x": 23, "y": 39, "flags": 4},
{"matrix": [3, 2], "x": 36, "y": 39, "flags": 4},
{"matrix": [3, 3], "x": 49, "y": 39, "flags": 4},
{"matrix": [3, 4], "x": 62, "y": 39, "flags": 4},
{"matrix": [3, 5], "x": 75, "y": 39, "flags": 4},
{"matrix": [3, 6], "x": 88, "y": 39, "flags": 4},
{"matrix": [3, 7], "x": 101, "y": 39, "flags": 4},
{"matrix": [3, 8], "x": 114, "y": 39, "flags": 4},
{"matrix": [3, 9], "x": 127, "y": 39, "flags": 4},
{"matrix": [3, 10], "x": 140, "y": 39, "flags": 4},
{"matrix": [3, 11], "x": 153, "y": 39, "flags": 4},
{"matrix": [3, 13], "x": 174, "y": 39, "flags": 1},
{"matrix": [4, 0], "x": 8, "y": 52, "flags": 1},
{"matrix": [4, 2], "x": 29, "y": 52, "flags": 4},
{"matrix": [4, 3], "x": 42, "y": 52, "flags": 4},
{"matrix": [4, 4], "x": 55, "y": 52, "flags": 4},
{"matrix": [4, 5], "x": 68, "y": 52, "flags": 4},
{"matrix": [4, 6], "x": 82, "y": 52, "flags": 4},
{"matrix": [4, 7], "x": 95, "y": 52, "flags": 4},
{"matrix": [4, 8], "x": 108, "y": 52, "flags": 4},
{"matrix": [4, 9], "x": 121, "y": 52, "flags": 4},
{"matrix": [4, 10], "x": 134, "y": 52, "flags": 4},
{"matrix": [4, 11], "x": 147, "y": 52, "flags": 4},
{"matrix": [4, 13], "x": 171, "y": 52, "flags": 1},
{"matrix": [4, 15], "x": 211, "y": 52, "flags": 1},
{"matrix": [5, 0], "x": 2, "y": 64, "flags": 1},
{"matrix": [5, 1], "x": 18, "y": 64, "flags": 1},
{"matrix": [5, 2], "x": 34, "y": 64, "flags": 1},
{"matrix": [5, 6], "x": 83, "y": 64, "flags": 4},
{"matrix": [5, 10], "x": 132, "y": 64, "flags": 1},
{"matrix": [5, 11], "x": 148, "y": 64, "flags": 1},
{"matrix": [5, 12], "x": 165, "y": 64, "flags": 1},
{"matrix": [5, 13], "x": 181, "y": 64, "flags": 1},
{"matrix": [5, 14], "x": 198, "y": 64, "flags": 1},
{"matrix": [5, 15], "x": 211, "y": 64, "flags": 1},
{"matrix": [5, 16], "x": 224, "y": 64, "flags": 1}
],
"sleep": true
},
"usb": {
"device_version": "1.0.0",
"pid": "0x0516"
}
}

View File

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

View File

@@ -0,0 +1,124 @@
/* Copyright 2025 @ 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
// clang-format off
const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = {
/* Refer to SNLED27351 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
{0, CB9_CA1, CB7_CA1, CB8_CA1},
{0, CB9_CA2, CB7_CA2, CB8_CA2},
{0, CB9_CA3, CB7_CA3, CB8_CA3},
{0, CB9_CA4, CB7_CA4, CB8_CA4},
{0, CB9_CA5, CB7_CA5, CB8_CA5},
{0, CB9_CA6, CB7_CA6, CB8_CA6},
{0, CB9_CA7, CB7_CA7, CB8_CA7},
{0, CB9_CA8, CB7_CA8, CB8_CA8},
{0, CB9_CA9, CB7_CA9, CB8_CA9},
{0, CB9_CA10, CB7_CA10, CB8_CA10},
{0, CB9_CA11, CB7_CA11, CB8_CA11},
{0, CB9_CA12, CB7_CA12, CB8_CA12},
{0, CB9_CA13, CB7_CA13, CB8_CA13},
{0, CB9_CA15, CB7_CA15, CB8_CA15},
{0, CB9_CA16, CB7_CA16, CB8_CA16},
{0, CB12_CA5, CB10_CA5, CB11_CA5},
{0, CB3_CA1, CB1_CA1, CB2_CA1},
{0, CB3_CA2, CB1_CA2, CB2_CA2},
{0, CB3_CA3, CB1_CA3, CB2_CA3},
{0, CB3_CA4, CB1_CA4, CB2_CA4},
{0, CB3_CA5, CB1_CA5, CB2_CA5},
{0, CB3_CA6, CB1_CA6, CB2_CA6},
{0, CB3_CA7, CB1_CA7, CB2_CA7},
{0, CB3_CA8, CB1_CA8, CB2_CA8},
{0, CB3_CA9, CB1_CA9, CB2_CA9},
{0, CB3_CA10, CB1_CA10, CB2_CA10},
{0, CB3_CA11, CB1_CA11, CB2_CA11},
{0, CB3_CA12, CB1_CA12, CB2_CA12},
{0, CB3_CA13, CB1_CA13, CB2_CA13},
{0, CB3_CA14, CB1_CA14, CB2_CA14},
{0, CB3_CA15, CB1_CA15, CB2_CA15},
{0, CB3_CA16, CB1_CA16, CB2_CA16},
{0, CB12_CA9, CB10_CA9, CB11_CA9},
{0, CB6_CA1, CB4_CA1, CB5_CA1},
{0, CB6_CA2, CB4_CA2, CB5_CA2},
{0, CB6_CA3, CB4_CA3, CB5_CA3},
{0, CB6_CA4, CB4_CA4, CB5_CA4},
{0, CB6_CA5, CB4_CA5, CB5_CA5},
{0, CB6_CA6, CB4_CA6, CB5_CA6},
{0, CB6_CA7, CB4_CA7, CB5_CA7},
{0, CB6_CA8, CB4_CA8, CB5_CA8},
{0, CB6_CA9, CB4_CA9, CB5_CA9},
{0, CB6_CA10, CB4_CA10, CB5_CA10},
{0, CB6_CA11, CB4_CA11, CB5_CA11},
{0, CB6_CA12, CB4_CA12, CB5_CA12},
{0, CB6_CA13, CB4_CA13, CB5_CA13},
{0, CB6_CA14, CB4_CA14, CB5_CA14},
{0, CB6_CA15, CB4_CA15, CB5_CA15},
{0, CB6_CA16, CB4_CA16, CB5_CA16},
{0, CB12_CA14, CB10_CA14, CB11_CA14},
{1, CB3_CA16, CB1_CA16, CB2_CA16},
{1, CB3_CA15, CB1_CA15, CB2_CA15},
{1, CB3_CA14, CB1_CA14, CB2_CA14},
{1, CB3_CA13, CB1_CA13, CB2_CA13},
{1, CB3_CA12, CB1_CA12, CB2_CA12},
{1, CB3_CA11, CB1_CA11, CB2_CA11},
{1, CB3_CA10, CB1_CA10, CB2_CA10},
{1, CB3_CA9, CB1_CA9, CB2_CA9},
{1, CB3_CA8, CB1_CA8, CB2_CA8},
{1, CB3_CA7, CB1_CA7, CB2_CA7},
{1, CB3_CA6, CB1_CA6, CB2_CA6},
{1, CB3_CA5, CB1_CA5, CB2_CA5},
{1, CB3_CA3, CB1_CA3, CB2_CA3},
{1, CB9_CA16, CB7_CA16, CB8_CA16},
{1, CB9_CA14, CB7_CA14, CB8_CA14},
{1, CB9_CA13, CB7_CA13, CB8_CA13},
{1, CB9_CA12, CB7_CA12, CB8_CA12},
{1, CB9_CA11, CB7_CA11, CB8_CA11},
{1, CB9_CA10, CB7_CA10, CB8_CA10},
{1, CB9_CA9, CB7_CA9, CB8_CA9},
{1, CB9_CA8, CB7_CA8, CB8_CA8},
{1, CB9_CA7, CB7_CA7, CB8_CA7},
{1, CB9_CA6, CB7_CA6, CB8_CA6},
{1, CB9_CA5, CB7_CA5, CB8_CA5},
{1, CB9_CA3, CB7_CA3, CB8_CA3},
{1, CB9_CA1, CB7_CA1, CB8_CA1},
{1, CB6_CA16, CB4_CA16, CB5_CA16},
{1, CB6_CA15, CB4_CA15, CB5_CA15},
{1, CB6_CA14, CB4_CA14, CB5_CA14},
{1, CB6_CA10, CB4_CA10, CB5_CA10},
{1, CB6_CA6, CB4_CA6, CB5_CA6},
{1, CB6_CA5, CB4_CA5, CB5_CA5},
{1, CB6_CA4, CB4_CA4, CB5_CA4},
{1, CB6_CA3, CB4_CA3, CB5_CA3},
{1, CB6_CA2, CB4_CA2, CB5_CA2},
{1, CB6_CA1, CB4_CA1, CB5_CA1},
{1, CB12_CA10, CB10_CA10, CB11_CA10},
};
#endif // RGB_MATRIX_ENABLE
// clang-format on

View File

@@ -0,0 +1,25 @@
/* Copyright 2025 @ 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
/* LED Matrix Driver Configuration */
#define SNLED27351_I2C_ADDRESS_1 SNLED27351_I2C_ADDRESS_GND
/* Scan phase of led driver set as MSKPHASE_9CHANNEL(defined as 0x03 in CKLED2001.h) */
#define SNLED27351_PHASE_CHANNEL SNLED27351_SCAN_PHASE_9_CHANNEL
#define SNLED27351_CURRENT_TUNE { 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60 }

View File

@@ -0,0 +1,122 @@
{
"features": {
"led_matrix": true
},
"led_matrix": {
"animations": {
"band_pinwheel": true,
"band_spiral": true,
"breathing": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_up_down": true,
"dual_beacon": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_simple": true,
"solid_splash": true,
"wave_left_right": true,
"wave_up_down": true
},
"driver": "snled27351",
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 1},
{"matrix": [0, 1], "x": 26, "y": 0, "flags": 1},
{"matrix": [0, 2], "x": 39, "y": 0, "flags": 1},
{"matrix": [0, 3], "x": 52, "y": 0, "flags": 1},
{"matrix": [0, 4], "x": 65, "y": 0, "flags": 1},
{"matrix": [0, 5], "x": 85, "y": 0, "flags": 1},
{"matrix": [0, 6], "x": 98, "y": 0, "flags": 1},
{"matrix": [0, 7], "x": 111, "y": 0, "flags": 1},
{"matrix": [0, 8], "x": 124, "y": 0, "flags": 1},
{"matrix": [0, 9], "x": 143, "y": 0, "flags": 1},
{"matrix": [0, 10], "x": 156, "y": 0, "flags": 1},
{"matrix": [0, 11], "x": 169, "y": 0, "flags": 1},
{"matrix": [0, 12], "x": 182, "y": 0, "flags": 1},
{"matrix": [0, 14], "x": 198, "y": 0, "flags": 1},
{"matrix": [0, 15], "x": 211, "y": 0, "flags": 1},
{"matrix": [0, 16], "x": 224, "y": 0, "flags": 1},
{"matrix": [1, 0], "x": 0, "y": 15, "flags": 1},
{"matrix": [1, 1], "x": 15, "y": 15, "flags": 4},
{"matrix": [1, 2], "x": 26, "y": 15, "flags": 4},
{"matrix": [1, 3], "x": 39, "y": 15, "flags": 4},
{"matrix": [1, 4], "x": 52, "y": 15, "flags": 4},
{"matrix": [1, 5], "x": 65, "y": 15, "flags": 4},
{"matrix": [1, 6], "x": 78, "y": 15, "flags": 4},
{"matrix": [1, 7], "x": 91, "y": 15, "flags": 4},
{"matrix": [1, 8], "x": 104, "y": 15, "flags": 4},
{"matrix": [1, 9], "x": 117, "y": 15, "flags": 4},
{"matrix": [1, 10], "x": 130, "y": 15, "flags": 4},
{"matrix": [1, 11], "x": 143, "y": 15, "flags": 4},
{"matrix": [1, 12], "x": 156, "y": 15, "flags": 4},
{"matrix": [1, 13], "x": 176, "y": 15, "flags": 1},
{"matrix": [1, 14], "x": 198, "y": 15, "flags": 1},
{"matrix": [1, 15], "x": 211, "y": 15, "flags": 1},
{"matrix": [1, 16], "x": 224, "y": 15, "flags": 1},
{"matrix": [2, 0], "x": 3, "y": 27, "flags": 1},
{"matrix": [2, 1], "x": 20, "y": 27, "flags": 4},
{"matrix": [2, 2], "x": 33, "y": 27, "flags": 4},
{"matrix": [2, 3], "x": 46, "y": 27, "flags": 4},
{"matrix": [2, 4], "x": 59, "y": 27, "flags": 4},
{"matrix": [2, 5], "x": 72, "y": 27, "flags": 4},
{"matrix": [2, 6], "x": 85, "y": 27, "flags": 4},
{"matrix": [2, 7], "x": 98, "y": 27, "flags": 4},
{"matrix": [2, 8], "x": 111, "y": 27, "flags": 4},
{"matrix": [2, 9], "x": 124, "y": 27, "flags": 4},
{"matrix": [2, 10], "x": 137, "y": 27, "flags": 4},
{"matrix": [2, 11], "x": 150, "y": 27, "flags": 4},
{"matrix": [2, 12], "x": 163, "y": 27, "flags": 4},
{"matrix": [2, 13], "x": 179, "y": 27, "flags": 1},
{"matrix": [2, 14], "x": 198, "y": 27, "flags": 1},
{"matrix": [2, 15], "x": 211, "y": 27, "flags": 1},
{"matrix": [2, 16], "x": 224, "y": 27, "flags": 1},
{"matrix": [3, 0], "x": 5, "y": 39, "flags": 8},
{"matrix": [3, 1], "x": 23, "y": 39, "flags": 4},
{"matrix": [3, 2], "x": 36, "y": 39, "flags": 4},
{"matrix": [3, 3], "x": 49, "y": 39, "flags": 4},
{"matrix": [3, 4], "x": 62, "y": 39, "flags": 4},
{"matrix": [3, 5], "x": 75, "y": 39, "flags": 4},
{"matrix": [3, 6], "x": 88, "y": 39, "flags": 4},
{"matrix": [3, 7], "x": 101, "y": 39, "flags": 4},
{"matrix": [3, 8], "x": 114, "y": 39, "flags": 4},
{"matrix": [3, 9], "x": 127, "y": 39, "flags": 4},
{"matrix": [3, 10], "x": 140, "y": 39, "flags": 4},
{"matrix": [3, 11], "x": 153, "y": 39, "flags": 4},
{"matrix": [3, 13], "x": 174, "y": 39, "flags": 1},
{"matrix": [4, 0], "x": 8, "y": 52, "flags": 1},
{"matrix": [4, 2], "x": 29, "y": 52, "flags": 4},
{"matrix": [4, 3], "x": 42, "y": 52, "flags": 4},
{"matrix": [4, 4], "x": 55, "y": 52, "flags": 4},
{"matrix": [4, 5], "x": 68, "y": 52, "flags": 4},
{"matrix": [4, 6], "x": 82, "y": 52, "flags": 4},
{"matrix": [4, 7], "x": 95, "y": 52, "flags": 4},
{"matrix": [4, 8], "x": 108, "y": 52, "flags": 4},
{"matrix": [4, 9], "x": 121, "y": 52, "flags": 4},
{"matrix": [4, 10], "x": 134, "y": 52, "flags": 4},
{"matrix": [4, 11], "x": 147, "y": 52, "flags": 4},
{"matrix": [4, 13], "x": 171, "y": 52, "flags": 1},
{"matrix": [4, 15], "x": 211, "y": 52, "flags": 1},
{"matrix": [5, 0], "x": 2, "y": 64, "flags": 1},
{"matrix": [5, 1], "x": 18, "y": 64, "flags": 1},
{"matrix": [5, 2], "x": 34, "y": 64, "flags": 1},
{"matrix": [5, 6], "x": 83, "y": 64, "flags": 4},
{"matrix": [5, 10], "x": 132, "y": 64, "flags": 1},
{"matrix": [5, 11], "x": 148, "y": 64, "flags": 1},
{"matrix": [5, 12], "x": 165, "y": 64, "flags": 1},
{"matrix": [5, 13], "x": 181, "y": 64, "flags": 1},
{"matrix": [5, 14], "x": 198, "y": 64, "flags": 1},
{"matrix": [5, 15], "x": 211, "y": 64, "flags": 1},
{"matrix": [5, 16], "x": 224, "y": 64, "flags": 1}
],
"sleep": true
},
"usb": {
"device_version": "1.0.0",
"pid": "0x0519"
}
}

View File

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

View File

@@ -0,0 +1,121 @@
/* Copyright 2025 @ 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 LED_MATRIX_ENABLE
// clang-format off
const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = {
/* Refer to SNLED27351 manual for these locations
* driver
* | LED address
* | | */
{0, CB1_CA16},
{0, CB1_CA15},
{0, CB1_CA14},
{0, CB1_CA13},
{0, CB1_CA12},
{0, CB1_CA11},
{0, CB1_CA10},
{0, CB1_CA9 },
{0, CB1_CA8 },
{0, CB1_CA7 },
{0, CB1_CA6 },
{0, CB1_CA5 },
{0, CB1_CA4 },
{0, CB1_CA2 },
{0, CB1_CA1 },
{0, CB7_CA1 },
{0, CB2_CA16},
{0, CB2_CA15},
{0, CB2_CA14},
{0, CB2_CA13},
{0, CB2_CA12},
{0, CB2_CA11},
{0, CB2_CA10},
{0, CB2_CA9 },
{0, CB2_CA8 },
{0, CB2_CA7 },
{0, CB2_CA6 },
{0, CB2_CA5 },
{0, CB2_CA4 },
{0, CB2_CA3 },
{0, CB2_CA2 },
{0, CB2_CA1 },
{0, CB8_CA1 },
{0, CB3_CA16},
{0, CB3_CA15},
{0, CB3_CA14},
{0, CB3_CA13},
{0, CB3_CA12},
{0, CB3_CA11},
{0, CB3_CA10},
{0, CB3_CA9 },
{0, CB3_CA8 },
{0, CB3_CA7 },
{0, CB3_CA6 },
{0, CB3_CA5 },
{0, CB3_CA4 },
{0, CB3_CA3 },
{0, CB3_CA2 },
{0, CB3_CA1 },
{0, CB7_CA6 },
{0, CB4_CA16},
{0, CB4_CA15},
{0, CB4_CA14},
{0, CB4_CA13},
{0, CB4_CA12},
{0, CB4_CA11},
{0, CB4_CA10},
{0, CB4_CA9 },
{0, CB4_CA8 },
{0, CB4_CA7 },
{0, CB4_CA6 },
{0, CB4_CA5 },
{0, CB4_CA3 },
{0, CB5_CA16},
{0, CB5_CA14},
{0, CB5_CA13},
{0, CB5_CA12},
{0, CB5_CA11},
{0, CB5_CA10},
{0, CB5_CA9 },
{0, CB5_CA8 },
{0, CB5_CA7 },
{0, CB5_CA6 },
{0, CB5_CA5 },
{0, CB5_CA3 },
{0, CB5_CA1 },
{0, CB6_CA16},
{0, CB6_CA15},
{0, CB6_CA14},
{0, CB6_CA10},
{0, CB6_CA6 },
{0, CB6_CA5 },
{0, CB6_CA4 },
{0, CB6_CA3 },
{0, CB6_CA2 },
{0, CB6_CA1 },
{0, CB7_CA13},
};
#endif
// clang-fomat on

View File

@@ -0,0 +1,104 @@
/* Copyright 2025 @ 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 DIP_SWITCH_ENABLE
bool dip_switch_update_kb(uint8_t index, bool active) {
if (!dip_switch_update_user(index, active)) {
return false;
}
if (index == 0) {
default_layer_set(1UL << (active ? 0 : 2));
}
return true;
}
#endif
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
if (!process_record_user(keycode, record)) {
return false;
}
switch (keycode) {
#ifdef RGB_MATRIX_ENABLE
case QK_RGB_MATRIX_TOGGLE:
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;
#endif
#ifdef LED_MATRIX_ENABLE
case QK_LED_MATRIX_TOGGLE:
if (record->event.pressed) {
switch (led_matrix_get_flags()) {
case LED_FLAG_ALL: {
led_matrix_set_flags(LED_FLAG_NONE);
led_matrix_set_value_all(0);
} break;
default: {
led_matrix_set_flags(LED_FLAG_ALL);
} break;
}
}
if (!led_matrix_is_enabled()) {
led_matrix_set_flags(LED_FLAG_ALL);
led_matrix_enable();
}
return false;
#endif
default:
return true;
}
}
void keyboard_post_init_kb(void) {
gpio_set_pin_output_push_pull(LED_MAC_OS_PIN);
gpio_set_pin_output_push_pull(LED_WIN_OS_PIN);
gpio_write_pin(LED_MAC_OS_PIN, !LED_OS_PIN_ON_STATE);
gpio_write_pin(LED_WIN_OS_PIN, !LED_OS_PIN_ON_STATE);
keyboard_post_init_user();
}
void housekeeping_task_kb(void) {
if (default_layer_state == (1U << 0)) {
gpio_write_pin(LED_MAC_OS_PIN, LED_OS_PIN_ON_STATE);
gpio_write_pin(LED_WIN_OS_PIN, !LED_OS_PIN_ON_STATE);
}
if (default_layer_state == (1U << 2)) {
gpio_write_pin(LED_MAC_OS_PIN, !LED_OS_PIN_ON_STATE);
gpio_write_pin(LED_WIN_OS_PIN, LED_OS_PIN_ON_STATE);
}
}
void suspend_power_down_kb(void) {
gpio_write_pin(LED_WIN_OS_PIN, !LED_OS_PIN_ON_STATE);
gpio_write_pin(LED_MAC_OS_PIN, !LED_OS_PIN_ON_STATE);
suspend_power_down_user();
}

View File

@@ -0,0 +1,26 @@
/* Copyright 2025 @ 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
/* Increase I2C speed to 1000 KHz */
#define I2C1_CLOCK_SPEED 400000
#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2
/* System indication led */
#define LED_MAC_OS_PIN C10
#define LED_WIN_OS_PIN C11
#define LED_OS_PIN_ON_STATE 1

View File

@@ -0,0 +1,21 @@
/* Copyright 2025 @ 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
#define HAL_USE_I2C TRUE
#include_next <halconf.h>

View File

@@ -0,0 +1,134 @@
{
"manufacturer": "Keychron",
"maintainer": "lalalademaxiya1",
"bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"eeprom": {
"wear_leveling": {
"backing_size": 4096
}
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"dip_switch": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"indicators": {
"caps_lock": "C9"
},
"dip_switch": {
"pins": ["D2"]
},
"matrix_pins": {
"cols": ["A0", "A1", "A2", "A3", "C0", "C1", "C2", "C3", "A8", "C12", "B9", "C6", "C7", "C4", "C5", "A15", "B10"],
"rows": ["B0", "B1", "B8", "B3", "B4", "B5"]
},
"processor": "STM32F401",
"url": "https://github.com/Keychron",
"usb": {
"vid": "0x3434"
},
"community_layouts": ["tkl_ansi"],
"layouts": {
"LAYOUT_tkl_ansi": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 2, "y": 0},
{"matrix": [0, 2], "x": 3, "y": 0},
{"matrix": [0, 3], "x": 4, "y": 0},
{"matrix": [0, 4], "x": 5, "y": 0},
{"matrix": [0, 5], "x": 6.5, "y": 0},
{"matrix": [0, 6], "x": 7.5, "y": 0},
{"matrix": [0, 7], "x": 8.5, "y": 0},
{"matrix": [0, 8], "x": 9.5, "y": 0},
{"matrix": [0, 9], "x": 11, "y": 0},
{"matrix": [0, 10], "x": 12, "y": 0},
{"matrix": [0, 11], "x": 13, "y": 0},
{"matrix": [0, 12], "x": 14, "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], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.25},
{"matrix": [1, 2], "x": 2, "y": 1.25},
{"matrix": [1, 3], "x": 3, "y": 1.25},
{"matrix": [1, 4], "x": 4, "y": 1.25},
{"matrix": [1, 5], "x": 5, "y": 1.25},
{"matrix": [1, 6], "x": 6, "y": 1.25},
{"matrix": [1, 7], "x": 7, "y": 1.25},
{"matrix": [1, 8], "x": 8, "y": 1.25},
{"matrix": [1, 9], "x": 9, "y": 1.25},
{"matrix": [1, 10], "x": 10, "y": 1.25},
{"matrix": [1, 11], "x": 11, "y": 1.25},
{"matrix": [1, 12], "x": 12, "y": 1.25},
{"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
{"matrix": [1, 14], "x": 15.25, "y": 1.25},
{"matrix": [1, 15], "x": 16.25, "y": 1.25},
{"matrix": [1, 16], "x": 17.25, "y": 1.25},
{"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 2.25},
{"matrix": [2, 2], "x": 2.5, "y": 2.25},
{"matrix": [2, 3], "x": 3.5, "y": 2.25},
{"matrix": [2, 4], "x": 4.5, "y": 2.25},
{"matrix": [2, 5], "x": 5.5, "y": 2.25},
{"matrix": [2, 6], "x": 6.5, "y": 2.25},
{"matrix": [2, 7], "x": 7.5, "y": 2.25},
{"matrix": [2, 8], "x": 8.5, "y": 2.25},
{"matrix": [2, 9], "x": 9.5, "y": 2.25},
{"matrix": [2, 10], "x": 10.5, "y": 2.25},
{"matrix": [2, 11], "x": 11.5, "y": 2.25},
{"matrix": [2, 12], "x": 12.5, "y": 2.25},
{"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
{"matrix": [2, 14], "x": 15.25, "y": 2.25},
{"matrix": [2, 15], "x": 16.25, "y": 2.25},
{"matrix": [2, 16], "x": 17.25, "y": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 3.25},
{"matrix": [3, 2], "x": 2.75, "y": 3.25},
{"matrix": [3, 3], "x": 3.75, "y": 3.25},
{"matrix": [3, 4], "x": 4.75, "y": 3.25},
{"matrix": [3, 5], "x": 5.75, "y": 3.25},
{"matrix": [3, 6], "x": 6.75, "y": 3.25},
{"matrix": [3, 7], "x": 7.75, "y": 3.25},
{"matrix": [3, 8], "x": 8.75, "y": 3.25},
{"matrix": [3, 9], "x": 9.75, "y": 3.25},
{"matrix": [3, 10], "x": 10.75, "y": 3.25},
{"matrix": [3, 11], "x": 11.75, "y": 3.25},
{"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
{"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.25},
{"matrix": [4, 3], "x": 3.25, "y": 4.25},
{"matrix": [4, 4], "x": 4.25, "y": 4.25},
{"matrix": [4, 5], "x": 5.25, "y": 4.25},
{"matrix": [4, 6], "x": 6.25, "y": 4.25},
{"matrix": [4, 7], "x": 7.25, "y": 4.25},
{"matrix": [4, 8], "x": 8.25, "y": 4.25},
{"matrix": [4, 9], "x": 9.25, "y": 4.25},
{"matrix": [4, 10], "x": 10.25, "y": 4.25},
{"matrix": [4, 11], "x": 11.25, "y": 4.25},
{"matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
{"matrix": [4, 15], "x": 16.25, "y": 4.25},
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
{"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
{"matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25},
{"matrix": [5, 14], "x": 15.25, "y": 5.25},
{"matrix": [5, 15], "x": 16.25, "y": 5.25},
{"matrix": [5, 16], "x": 17.25, "y": 5.25}
]
}
}
}

View File

@@ -0,0 +1,28 @@
/* Copyright 2025 @ 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
#include_next <mcuconf.h>
#undef STM32_HSECLK
#define STM32_HSECLK 16000000U
#undef STM32_PLLM_VALUE
#define STM32_PLLM_VALUE 8
#undef STM32_I2C_USE_I2C1
#define STM32_I2C_USE_I2C1 TRUE

View File

@@ -0,0 +1,32 @@
# Keychron C1 Pro V2
![Keychron C1 Pro](https://i.imgur.com/Svdm4lph.jpg)
A customizable 80% TKL keyboard.
v1 is based on STM32L432 and v2 is based on STM32F402.
* Keyboard Maintainer: [Keychron](https://github.com/keychron)
* Hardware Supported: Keychron C1 Pro
* Hardware Availability: [Keychron](https://www.keychron.com)
Make example for this keyboard (after setting up your build environment):
make keychron/c1_pro_v2/ansi/rgb:default
make keychron/c1_pro_v2/ansi/white:default
make keychron/c1_pro_v2/ansi/non_light:default
Flashing example for this keyboard:
make keychron/c1_pro_v2/ansi/rgb:default:flash
make keychron/c1_pro_v2/ansi/white:default:flash
make keychron/c1_pro_v2/ansi/non_light:default:flash
## bootloader
Enter the bootloader in two ways:
* **Bootmagic reset**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard.
* **Physical reset button**: Briefly press the RESET button under the spacebar.
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).

View File

@@ -0,0 +1,24 @@
/* Copyright 2025 @ 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 Driver Configuration */
#define SNLED27351_I2C_ADDRESS_1 SNLED27351_I2C_ADDRESS_VDDIO
#define SNLED27351_I2C_ADDRESS_2 SNLED27351_I2C_ADDRESS_GND
/* Set LED driver current */
#define SNLED27351_CURRENT_TUNE { 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28 }

View File

@@ -0,0 +1,148 @@
{
"keyboard_name": "Keychron C2 Pro V2 RGB",
"features": {
"rgb_matrix": true
},
"rgb_matrix": {
"animations": {
"band_spiral_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"digital_rain": true,
"dual_beacon": true,
"jellybean_raindrops": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_simple": true,
"solid_splash": true,
"splash": true,
"typing_heatmap": true
},
"driver": "snled27351",
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 1},
{"matrix": [0, 1], "x": 21, "y": 0, "flags": 1},
{"matrix": [0, 2], "x": 31, "y": 0, "flags": 1},
{"matrix": [0, 3], "x": 42, "y": 0, "flags": 1},
{"matrix": [0, 4], "x": 52, "y": 0, "flags": 1},
{"matrix": [0, 5], "x": 68, "y": 0, "flags": 1},
{"matrix": [0, 6], "x": 78, "y": 0, "flags": 1},
{"matrix": [0, 7], "x": 89, "y": 0, "flags": 1},
{"matrix": [0, 8], "x": 99, "y": 0, "flags": 1},
{"matrix": [0, 9], "x": 115, "y": 0, "flags": 1},
{"matrix": [0, 10], "x": 125, "y": 0, "flags": 1},
{"matrix": [0, 11], "x": 136, "y": 0, "flags": 1},
{"matrix": [0, 12], "x": 146, "y": 0, "flags": 1},
{"matrix": [0, 14], "x": 159, "y": 0, "flags": 1},
{"matrix": [0, 15], "x": 169, "y": 0, "flags": 1},
{"matrix": [0, 16], "x": 180, "y": 0, "flags": 1},
{"matrix": [1, 0], "x": 0, "y": 15, "flags": 1},
{"matrix": [1, 1], "x": 10, "y": 15, "flags": 4},
{"matrix": [1, 2], "x": 21, "y": 15, "flags": 4},
{"matrix": [1, 3], "x": 31, "y": 15, "flags": 4},
{"matrix": [1, 4], "x": 42, "y": 15, "flags": 4},
{"matrix": [1, 5], "x": 52, "y": 15, "flags": 4},
{"matrix": [1, 6], "x": 63, "y": 15, "flags": 4},
{"matrix": [1, 7], "x": 73, "y": 15, "flags": 4},
{"matrix": [1, 8], "x": 83, "y": 15, "flags": 4},
{"matrix": [1, 9], "x": 94, "y": 15, "flags": 4},
{"matrix": [1, 10], "x": 104, "y": 15, "flags": 4},
{"matrix": [1, 11], "x": 115, "y": 15, "flags": 4},
{"matrix": [1, 12], "x": 125, "y": 15, "flags": 4},
{"matrix": [1, 13], "x": 141, "y": 15, "flags": 1},
{"matrix": [1, 14], "x": 159, "y": 15, "flags": 1},
{"matrix": [1, 15], "x": 169, "y": 15, "flags": 1},
{"matrix": [1, 16], "x": 180, "y": 15, "flags": 1},
{"matrix": [1, 17], "x": 193, "y": 15, "flags": 4},
{"matrix": [1, 18], "x": 203, "y": 15, "flags": 4},
{"matrix": [1, 19], "x": 214, "y": 15, "flags": 4},
{"matrix": [1, 20], "x": 224, "y": 15, "flags": 4},
{"matrix": [2, 0], "x": 3, "y": 27, "flags": 1},
{"matrix": [2, 1], "x": 16, "y": 27, "flags": 4},
{"matrix": [2, 2], "x": 26, "y": 27, "flags": 4},
{"matrix": [2, 3], "x": 36, "y": 27, "flags": 4},
{"matrix": [2, 4], "x": 47, "y": 27, "flags": 4},
{"matrix": [2, 5], "x": 57, "y": 27, "flags": 4},
{"matrix": [2, 6], "x": 68, "y": 27, "flags": 4},
{"matrix": [2, 7], "x": 78, "y": 27, "flags": 4},
{"matrix": [2, 8], "x": 89, "y": 27, "flags": 4},
{"matrix": [2, 9], "x": 99, "y": 27, "flags": 4},
{"matrix": [2, 10], "x": 109, "y": 27, "flags": 4},
{"matrix": [2, 11], "x": 120, "y": 27, "flags": 4},
{"matrix": [2, 12], "x": 130, "y": 27, "flags": 4},
{"matrix": [2, 13], "x": 143, "y": 27, "flags": 1},
{"matrix": [2, 14], "x": 159, "y": 27, "flags": 1},
{"matrix": [2, 15], "x": 169, "y": 27, "flags": 1},
{"matrix": [2, 16], "x": 180, "y": 27, "flags": 1},
{"matrix": [2, 17], "x": 193, "y": 27, "flags": 4},
{"matrix": [2, 18], "x": 203, "y": 27, "flags": 4},
{"matrix": [2, 19], "x": 214, "y": 27, "flags": 4},
{"matrix": [2, 20], "x": 224, "y": 34, "flags": 4},
{"matrix": [3, 0], "x": 4, "y": 40, "flags": 8},
{"matrix": [3, 1], "x": 18, "y": 40, "flags": 4},
{"matrix": [3, 2], "x": 29, "y": 40, "flags": 4},
{"matrix": [3, 3], "x": 39, "y": 40, "flags": 4},
{"matrix": [3, 4], "x": 50, "y": 40, "flags": 4},
{"matrix": [3, 5], "x": 60, "y": 40, "flags": 4},
{"matrix": [3, 6], "x": 70, "y": 40, "flags": 4},
{"matrix": [3, 7], "x": 81, "y": 40, "flags": 4},
{"matrix": [3, 8], "x": 91, "y": 40, "flags": 4},
{"matrix": [3, 9], "x": 102, "y": 40, "flags": 4},
{"matrix": [3, 10], "x": 112, "y": 40, "flags": 4},
{"matrix": [3, 11], "x": 123, "y": 40, "flags": 4},
{"matrix": [3, 13], "x": 139, "y": 40, "flags": 1},
{"matrix": [3, 17], "x": 193, "y": 40, "flags": 4},
{"matrix": [3, 18], "x": 203, "y": 40, "flags": 4},
{"matrix": [3, 19], "x": 214, "y": 40, "flags": 4},
{"matrix": [4, 0], "x": 7, "y": 52, "flags": 1},
{"matrix": [4, 2], "x": 23, "y": 52, "flags": 4},
{"matrix": [4, 3], "x": 34, "y": 52, "flags": 4},
{"matrix": [4, 4], "x": 44, "y": 52, "flags": 4},
{"matrix": [4, 5], "x": 55, "y": 52, "flags": 4},
{"matrix": [4, 6], "x": 65, "y": 52, "flags": 4},
{"matrix": [4, 7], "x": 76, "y": 52, "flags": 4},
{"matrix": [4, 8], "x": 86, "y": 52, "flags": 4},
{"matrix": [4, 9], "x": 96, "y": 52, "flags": 4},
{"matrix": [4, 10], "x": 107, "y": 52, "flags": 4},
{"matrix": [4, 11], "x": 117, "y": 52, "flags": 4},
{"matrix": [4, 13], "x": 137, "y": 52, "flags": 1},
{"matrix": [4, 15], "x": 169, "y": 52, "flags": 1},
{"matrix": [4, 17], "x": 193, "y": 52, "flags": 4},
{"matrix": [4, 18], "x": 203, "y": 52, "flags": 4},
{"matrix": [4, 19], "x": 214, "y": 52, "flags": 4},
{"matrix": [4, 20], "x": 224, "y": 58, "flags": 4},
{"matrix": [5, 0], "x": 1, "y": 64, "flags": 1},
{"matrix": [5, 1], "x": 14, "y": 64, "flags": 1},
{"matrix": [5, 2], "x": 27, "y": 64, "flags": 1},
{"matrix": [5, 6], "x": 66, "y": 64, "flags": 4},
{"matrix": [5, 10], "x": 105, "y": 64, "flags": 1},
{"matrix": [5, 11], "x": 118, "y": 64, "flags": 1},
{"matrix": [5, 12], "x": 131, "y": 64, "flags": 1},
{"matrix": [5, 13], "x": 145, "y": 64, "flags": 1},
{"matrix": [5, 14], "x": 159, "y": 64, "flags": 1},
{"matrix": [5, 15], "x": 169, "y": 64, "flags": 1},
{"matrix": [5, 16], "x": 180, "y": 64, "flags": 1},
{"matrix": [5, 17], "x": 198, "y": 64, "flags": 4},
{"matrix": [5, 18], "x": 214, "y": 64, "flags": 4}
],
"sleep": true
},
"usb": {
"device_version": "1.0.0",
"pid": "0x0526"
}
}

View File

@@ -0,0 +1,64 @@
/* Copyright 2025 @ 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
enum layers{
MAC_BASE,
MAC_FN,
WIN_BASE,
WIN_FN,
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_104_ansi(
KC_ESC, KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, RM_NEXT,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
[MAC_FN] = LAYOUT_104_ansi(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RM_NEXT,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
RM_TOGG, RM_NEXT, RM_VALU, RM_HUEU, RM_SATU, RM_SPDU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RM_PREV, RM_VALD, RM_HUED, RM_SATD, RM_SPDD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
[WIN_BASE] = LAYOUT_104_ansi(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_NO, RM_NEXT,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
[WIN_FN] = LAYOUT_104_ansi(
_______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RM_VALU, RM_VALU, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RM_TOGG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
RM_TOGG, RM_NEXT, RM_VALU, RM_HUEU, RM_SATU, RM_SPDU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RM_PREV, RM_VALD, RM_HUED, RM_SATD, RM_SPDD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
};
// clang-format on

View File

@@ -0,0 +1,139 @@
/* Copyright 2025 @ 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 snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = {
/* Refer to SNLED27351 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
{0, CB9_CA1, CB7_CA1, CB8_CA1},
{0, CB9_CA2, CB7_CA2, CB8_CA2},
{0, CB9_CA3, CB7_CA3, CB8_CA3},
{0, CB9_CA4, CB7_CA4, CB8_CA4},
{0, CB9_CA5, CB7_CA5, CB8_CA5},
{0, CB9_CA6, CB7_CA6, CB8_CA6},
{0, CB9_CA7, CB7_CA7, CB8_CA7},
{0, CB9_CA8, CB7_CA8, CB8_CA8},
{0, CB9_CA9, CB7_CA9, CB8_CA9},
{0, CB9_CA10, CB7_CA10, CB8_CA10},
{0, CB9_CA11, CB7_CA11, CB8_CA11},
{0, CB9_CA12, CB7_CA12, CB8_CA12},
{0, CB9_CA13, CB7_CA13, CB8_CA13},
{0, CB9_CA15, CB7_CA15, CB8_CA15},
{0, CB9_CA16, CB7_CA16, CB8_CA16},
{0, CB12_CA5, CB10_CA5, CB11_CA5},
{0, CB3_CA1, CB1_CA1, CB2_CA1},
{0, CB3_CA2, CB1_CA2, CB2_CA2},
{0, CB3_CA3, CB1_CA3, CB2_CA3},
{0, CB3_CA4, CB1_CA4, CB2_CA4},
{0, CB3_CA5, CB1_CA5, CB2_CA5},
{0, CB3_CA6, CB1_CA6, CB2_CA6},
{0, CB3_CA7, CB1_CA7, CB2_CA7},
{0, CB3_CA8, CB1_CA8, CB2_CA8},
{0, CB3_CA9, CB1_CA9, CB2_CA9},
{0, CB3_CA10, CB1_CA10, CB2_CA10},
{0, CB3_CA11, CB1_CA11, CB2_CA11},
{0, CB3_CA12, CB1_CA12, CB2_CA12},
{0, CB3_CA13, CB1_CA13, CB2_CA13},
{0, CB3_CA14, CB1_CA14, CB2_CA14},
{0, CB3_CA15, CB1_CA15, CB2_CA15},
{0, CB3_CA16, CB1_CA16, CB2_CA16},
{0, CB12_CA9, CB10_CA9, CB11_CA9},
{0, CB12_CA10, CB10_CA10, CB11_CA10},
{0, CB12_CA11, CB10_CA11, CB11_CA11},
{0, CB12_CA12, CB10_CA12, CB11_CA12},
{0, CB12_CA13, CB10_CA13, CB11_CA13},
{0, CB6_CA1, CB4_CA1, CB5_CA1},
{0, CB6_CA2, CB4_CA2, CB5_CA2},
{0, CB6_CA3, CB4_CA3, CB5_CA3},
{0, CB6_CA4, CB4_CA4, CB5_CA4},
{0, CB6_CA5, CB4_CA5, CB5_CA5},
{0, CB6_CA6, CB4_CA6, CB5_CA6},
{0, CB6_CA7, CB4_CA7, CB5_CA7},
{0, CB6_CA8, CB4_CA8, CB5_CA8},
{0, CB6_CA9, CB4_CA9, CB5_CA9},
{0, CB6_CA10, CB4_CA10, CB5_CA10},
{0, CB6_CA11, CB4_CA11, CB5_CA11},
{0, CB6_CA12, CB4_CA12, CB5_CA12},
{0, CB6_CA13, CB4_CA13, CB5_CA13},
{0, CB6_CA14, CB4_CA14, CB5_CA14},
{0, CB6_CA15, CB4_CA15, CB5_CA15},
{0, CB6_CA16, CB4_CA16, CB5_CA16},
{0, CB12_CA14, CB10_CA14, CB11_CA14},
{0, CB12_CA15, CB10_CA15, CB11_CA15},
{0, CB12_CA16, CB10_CA16, CB11_CA16},
{1, CB12_CA1, CB10_CA1, CB11_CA1},
{1, CB12_CA2, CB10_CA2, CB11_CA2},
{1, CB3_CA16, CB1_CA16, CB2_CA16},
{1, CB3_CA15, CB1_CA15, CB2_CA15},
{1, CB3_CA14, CB1_CA14, CB2_CA14},
{1, CB3_CA13, CB1_CA13, CB2_CA13},
{1, CB3_CA12, CB1_CA12, CB2_CA12},
{1, CB3_CA11, CB1_CA11, CB2_CA11},
{1, CB3_CA10, CB1_CA10, CB2_CA10},
{1, CB3_CA9, CB1_CA9, CB2_CA9},
{1, CB3_CA8, CB1_CA8, CB2_CA8},
{1, CB3_CA7, CB1_CA7, CB2_CA7},
{1, CB3_CA6, CB1_CA6, CB2_CA6},
{1, CB3_CA5, CB1_CA5, CB2_CA5},
{1, CB3_CA3, CB1_CA3, CB2_CA3},
{1, CB12_CA3, CB10_CA3, CB11_CA3},
{1, CB12_CA4, CB10_CA4, CB11_CA4},
{1, CB12_CA5, CB10_CA5, CB11_CA5},
{1, CB9_CA16, CB7_CA16, CB8_CA16},
{1, CB9_CA14, CB7_CA14, CB8_CA14},
{1, CB9_CA13, CB7_CA13, CB8_CA13},
{1, CB9_CA12, CB7_CA12, CB8_CA12},
{1, CB9_CA11, CB7_CA11, CB8_CA11},
{1, CB9_CA10, CB7_CA10, CB8_CA10},
{1, CB9_CA9, CB7_CA9, CB8_CA9},
{1, CB9_CA8, CB7_CA8, CB8_CA8},
{1, CB9_CA7, CB7_CA7, CB8_CA7},
{1, CB9_CA6, CB7_CA6, CB8_CA6},
{1, CB9_CA5, CB7_CA5, CB8_CA5},
{1, CB9_CA3, CB7_CA3, CB8_CA3},
{1, CB9_CA1, CB7_CA1, CB8_CA1},
{1, CB12_CA6, CB10_CA6, CB11_CA6},
{1, CB12_CA7, CB10_CA7, CB11_CA7},
{1, CB12_CA8, CB10_CA8, CB11_CA8},
{1, CB12_CA9, CB10_CA9, CB11_CA9},
{1, CB6_CA16, CB4_CA16, CB5_CA16},
{1, CB6_CA15, CB4_CA15, CB5_CA15},
{1, CB6_CA14, CB4_CA14, CB5_CA14},
{1, CB6_CA10, CB4_CA10, CB5_CA10},
{1, CB6_CA6, CB4_CA6, CB5_CA6},
{1, CB6_CA5, CB4_CA5, CB5_CA5},
{1, CB6_CA4, CB4_CA4, CB5_CA4},
{1, CB6_CA3, CB4_CA3, CB5_CA3},
{1, CB6_CA2, CB4_CA2, CB5_CA2},
{1, CB6_CA1, CB4_CA1, CB5_CA1},
{1, CB12_CA10, CB10_CA10, CB11_CA10},
{1, CB12_CA11, CB10_CA11, CB11_CA11},
{1, CB12_CA12, CB10_CA12, CB11_CA12},
};
#endif
// clang-format on

View File

@@ -0,0 +1,26 @@
/* Copyright 2025 @ 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
/* LED Matrix Driver Configuration */
#define SNLED27351_I2C_ADDRESS_1 SNLED27351_I2C_ADDRESS_GND
/* Use the first 8 channels of led driver */
#define SNLED27351_PHASE_CHANNEL SNLED27351_SCAN_PHASE_8_CHANNEL
/* Set LED driver current */
#define SNLED27351_CURRENT_TUNE { 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50 }

View File

@@ -0,0 +1,140 @@
{
"keyboard_name": "Keychron C2 Pro V2 White",
"features": {
"led_matrix": true
},
"led_matrix": {
"animations": {
"band_pinwheel": true,
"band_spiral": true,
"breathing": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_up_down": true,
"dual_beacon": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_simple": true,
"solid_splash": true,
"wave_left_right": true,
"wave_up_down": true
},
"driver": "snled27351",
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 1},
{"matrix": [0, 1], "x": 21, "y": 0, "flags": 1},
{"matrix": [0, 2], "x": 31, "y": 0, "flags": 1},
{"matrix": [0, 3], "x": 42, "y": 0, "flags": 1},
{"matrix": [0, 4], "x": 52, "y": 0, "flags": 1},
{"matrix": [0, 5], "x": 68, "y": 0, "flags": 1},
{"matrix": [0, 6], "x": 78, "y": 0, "flags": 1},
{"matrix": [0, 7], "x": 89, "y": 0, "flags": 1},
{"matrix": [0, 8], "x": 99, "y": 0, "flags": 1},
{"matrix": [0, 9], "x": 115, "y": 0, "flags": 1},
{"matrix": [0, 10], "x": 125, "y": 0, "flags": 1},
{"matrix": [0, 11], "x": 136, "y": 0, "flags": 1},
{"matrix": [0, 12], "x": 146, "y": 0, "flags": 1},
{"matrix": [0, 14], "x": 159, "y": 0, "flags": 1},
{"matrix": [0, 15], "x": 169, "y": 0, "flags": 1},
{"matrix": [0, 16], "x": 180, "y": 0, "flags": 1},
{"matrix": [1, 0], "x": 0, "y": 15, "flags": 1},
{"matrix": [1, 1], "x": 10, "y": 15, "flags": 4},
{"matrix": [1, 2], "x": 21, "y": 15, "flags": 4},
{"matrix": [1, 3], "x": 31, "y": 15, "flags": 4},
{"matrix": [1, 4], "x": 42, "y": 15, "flags": 4},
{"matrix": [1, 5], "x": 52, "y": 15, "flags": 4},
{"matrix": [1, 6], "x": 63, "y": 15, "flags": 4},
{"matrix": [1, 7], "x": 73, "y": 15, "flags": 4},
{"matrix": [1, 8], "x": 83, "y": 15, "flags": 4},
{"matrix": [1, 9], "x": 94, "y": 15, "flags": 4},
{"matrix": [1, 10], "x": 104, "y": 15, "flags": 4},
{"matrix": [1, 11], "x": 115, "y": 15, "flags": 4},
{"matrix": [1, 12], "x": 125, "y": 15, "flags": 4},
{"matrix": [1, 13], "x": 141, "y": 15, "flags": 1},
{"matrix": [1, 14], "x": 159, "y": 15, "flags": 1},
{"matrix": [1, 15], "x": 169, "y": 15, "flags": 1},
{"matrix": [1, 16], "x": 180, "y": 15, "flags": 1},
{"matrix": [1, 17], "x": 193, "y": 15, "flags": 4},
{"matrix": [1, 18], "x": 203, "y": 15, "flags": 4},
{"matrix": [1, 19], "x": 214, "y": 15, "flags": 4},
{"matrix": [1, 20], "x": 224, "y": 15, "flags": 4},
{"matrix": [2, 0], "x": 3, "y": 27, "flags": 1},
{"matrix": [2, 1], "x": 16, "y": 27, "flags": 4},
{"matrix": [2, 2], "x": 26, "y": 27, "flags": 4},
{"matrix": [2, 3], "x": 36, "y": 27, "flags": 4},
{"matrix": [2, 4], "x": 47, "y": 27, "flags": 4},
{"matrix": [2, 5], "x": 57, "y": 27, "flags": 4},
{"matrix": [2, 6], "x": 68, "y": 27, "flags": 4},
{"matrix": [2, 7], "x": 78, "y": 27, "flags": 4},
{"matrix": [2, 8], "x": 89, "y": 27, "flags": 4},
{"matrix": [2, 9], "x": 99, "y": 27, "flags": 4},
{"matrix": [2, 10], "x": 109, "y": 27, "flags": 4},
{"matrix": [2, 11], "x": 120, "y": 27, "flags": 4},
{"matrix": [2, 12], "x": 130, "y": 27, "flags": 4},
{"matrix": [2, 13], "x": 143, "y": 27, "flags": 1},
{"matrix": [2, 14], "x": 159, "y": 27, "flags": 1},
{"matrix": [2, 15], "x": 169, "y": 27, "flags": 1},
{"matrix": [2, 16], "x": 180, "y": 27, "flags": 1},
{"matrix": [2, 17], "x": 193, "y": 27, "flags": 4},
{"matrix": [2, 18], "x": 203, "y": 27, "flags": 4},
{"matrix": [2, 19], "x": 214, "y": 27, "flags": 4},
{"matrix": [2, 20], "x": 224, "y": 34, "flags": 4},
{"matrix": [3, 0], "x": 4, "y": 40, "flags": 8},
{"matrix": [3, 1], "x": 18, "y": 40, "flags": 4},
{"matrix": [3, 2], "x": 29, "y": 40, "flags": 4},
{"matrix": [3, 3], "x": 39, "y": 40, "flags": 4},
{"matrix": [3, 4], "x": 50, "y": 40, "flags": 4},
{"matrix": [3, 5], "x": 60, "y": 40, "flags": 4},
{"matrix": [3, 6], "x": 70, "y": 40, "flags": 4},
{"matrix": [3, 7], "x": 81, "y": 40, "flags": 4},
{"matrix": [3, 8], "x": 91, "y": 40, "flags": 4},
{"matrix": [3, 9], "x": 102, "y": 40, "flags": 4},
{"matrix": [3, 10], "x": 112, "y": 40, "flags": 4},
{"matrix": [3, 11], "x": 123, "y": 40, "flags": 4},
{"matrix": [3, 13], "x": 139, "y": 40, "flags": 1},
{"matrix": [3, 17], "x": 193, "y": 40, "flags": 4},
{"matrix": [3, 18], "x": 203, "y": 40, "flags": 4},
{"matrix": [3, 19], "x": 214, "y": 40, "flags": 4},
{"matrix": [4, 0], "x": 7, "y": 52, "flags": 1},
{"matrix": [4, 2], "x": 23, "y": 52, "flags": 4},
{"matrix": [4, 3], "x": 34, "y": 52, "flags": 4},
{"matrix": [4, 4], "x": 44, "y": 52, "flags": 4},
{"matrix": [4, 5], "x": 55, "y": 52, "flags": 4},
{"matrix": [4, 6], "x": 65, "y": 52, "flags": 4},
{"matrix": [4, 7], "x": 76, "y": 52, "flags": 4},
{"matrix": [4, 8], "x": 86, "y": 52, "flags": 4},
{"matrix": [4, 9], "x": 96, "y": 52, "flags": 4},
{"matrix": [4, 10], "x": 107, "y": 52, "flags": 4},
{"matrix": [4, 11], "x": 117, "y": 52, "flags": 4},
{"matrix": [4, 13], "x": 137, "y": 52, "flags": 1},
{"matrix": [4, 15], "x": 169, "y": 52, "flags": 1},
{"matrix": [4, 17], "x": 193, "y": 52, "flags": 4},
{"matrix": [4, 18], "x": 203, "y": 52, "flags": 4},
{"matrix": [4, 19], "x": 214, "y": 52, "flags": 4},
{"matrix": [4, 20], "x": 224, "y": 58, "flags": 4},
{"matrix": [5, 0], "x": 1, "y": 64, "flags": 1},
{"matrix": [5, 1], "x": 14, "y": 64, "flags": 1},
{"matrix": [5, 2], "x": 27, "y": 64, "flags": 1},
{"matrix": [5, 6], "x": 66, "y": 64, "flags": 4},
{"matrix": [5, 10], "x": 105, "y": 64, "flags": 1},
{"matrix": [5, 11], "x": 118, "y": 64, "flags": 1},
{"matrix": [5, 12], "x": 131, "y": 64, "flags": 1},
{"matrix": [5, 13], "x": 145, "y": 64, "flags": 1},
{"matrix": [5, 14], "x": 159, "y": 64, "flags": 1},
{"matrix": [5, 15], "x": 169, "y": 64, "flags": 1},
{"matrix": [5, 16], "x": 180, "y": 64, "flags": 1},
{"matrix": [5, 17], "x": 198, "y": 64, "flags": 4},
{"matrix": [5, 18], "x": 214, "y": 64, "flags": 4}
],
"sleep": true
},
"usb": {
"device_version": "1.0.0",
"pid": "0x0529"
}
}

View File

@@ -0,0 +1,65 @@
/* Copyright 2025 @ 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
enum layers{
MAC_BASE,
MAC_FN,
WIN_BASE,
WIN_FN,
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_104_ansi(
KC_ESC, KC_BRID, KC_BRIU, _______, _______, LM_BRID, LM_BRIU, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, LM_NEXT,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
[MAC_FN] = LAYOUT_104_ansi(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, BL_TOGG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
LM_TOGG, LM_NEXT, LM_BRIU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, LM_BRID, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
[WIN_BASE] = LAYOUT_104_ansi(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_NO, BL_STEP,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ),
[WIN_FN] = LAYOUT_104_ansi(
_______, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, LM_BRID, LM_BRIU, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, LM_TOGG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
LM_TOGG, LM_NEXT, LM_BRIU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, LM_BRID, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
};
// clang-format on

View File

@@ -0,0 +1,138 @@
/* Copyright 2025 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
// clang-format off
#ifdef LED_MATRIX_ENABLE
const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = {
/* Refer to SNLED27351 manual for these locations
* driver
* | LED address
* | | */
{0, CB1_CA16},
{0, CB1_CA15},
{0, CB1_CA14},
{0, CB1_CA13},
{0, CB1_CA12},
{0, CB1_CA11},
{0, CB1_CA10},
{0, CB1_CA9 },
{0, CB1_CA8 },
{0, CB1_CA7 },
{0, CB1_CA6 },
{0, CB1_CA5 },
{0, CB1_CA4 },
{0, CB1_CA2 },
{0, CB1_CA1 },
{0, CB7_CA1 },
{0, CB2_CA16},
{0, CB2_CA15},
{0, CB2_CA14},
{0, CB2_CA13},
{0, CB2_CA12},
{0, CB2_CA11},
{0, CB2_CA10},
{0, CB2_CA9 },
{0, CB2_CA8 },
{0, CB2_CA7 },
{0, CB2_CA6 },
{0, CB2_CA5 },
{0, CB2_CA4 },
{0, CB2_CA3 },
{0, CB2_CA2 },
{0, CB2_CA1 },
{0, CB8_CA1 },
{0, CB8_CA2 },
{0, CB8_CA3 },
{0, CB8_CA4 },
{0, CB8_CA5 },
{0, CB3_CA16},
{0, CB3_CA15},
{0, CB3_CA14},
{0, CB3_CA13},
{0, CB3_CA12},
{0, CB3_CA11},
{0, CB3_CA10},
{0, CB3_CA9 },
{0, CB3_CA8 },
{0, CB3_CA7 },
{0, CB3_CA6 },
{0, CB3_CA5 },
{0, CB3_CA4 },
{0, CB3_CA3 },
{0, CB3_CA2 },
{0, CB3_CA1 },
{0, CB7_CA6 },
{0, CB7_CA7 },
{0, CB7_CA8 },
{0, CB7_CA9 },
{0, CB7_CA10},
{0, CB4_CA16},
{0, CB4_CA15},
{0, CB4_CA14},
{0, CB4_CA13},
{0, CB4_CA12},
{0, CB4_CA11},
{0, CB4_CA10},
{0, CB4_CA9 },
{0, CB4_CA8 },
{0, CB4_CA7 },
{0, CB4_CA6 },
{0, CB4_CA5 },
{0, CB4_CA3 },
{0, CB8_CA7 },
{0, CB8_CA8 },
{0, CB8_CA9 },
{0, CB5_CA16},
{0, CB5_CA14},
{0, CB5_CA13},
{0, CB5_CA12},
{0, CB5_CA11},
{0, CB5_CA10},
{0, CB5_CA9 },
{0, CB5_CA8 },
{0, CB5_CA7 },
{0, CB5_CA6 },
{0, CB5_CA5 },
{0, CB5_CA3 },
{0, CB5_CA1 },
{0, CB8_CA6 },
{0, CB8_CA11},
{0, CB8_CA12},
{0, CB8_CA10},
{0, CB6_CA16},
{0, CB6_CA15},
{0, CB6_CA14},
{0, CB6_CA10},
{0, CB6_CA6 },
{0, CB6_CA5 },
{0, CB6_CA4 },
{0, CB6_CA3 },
{0, CB6_CA2 },
{0, CB6_CA1 },
{0, CB7_CA13},
{0, CB7_CA11},
{0, CB7_CA12},
};
#endif
// clang-format on

View File

@@ -0,0 +1,104 @@
/* Copyright 2025 @ 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 DIP_SWITCH_ENABLE
bool dip_switch_update_kb(uint8_t index, bool active) {
if (!dip_switch_update_user(index, active)) {
return false;
}
if (index == 0) {
default_layer_set(1UL << (active ? 0 : 2));
}
return true;
}
#endif
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
if (!process_record_user(keycode, record)) {
return false;
}
switch (keycode) {
#ifdef RGB_MATRIX_ENABLE
case QK_RGB_MATRIX_TOGGLE:
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;
#endif
#ifdef LED_MATRIX_ENABLE
case QK_LED_MATRIX_TOGGLE:
if (record->event.pressed) {
switch (led_matrix_get_flags()) {
case LED_FLAG_ALL: {
led_matrix_set_flags(LED_FLAG_NONE);
led_matrix_set_value_all(0);
} break;
default: {
led_matrix_set_flags(LED_FLAG_ALL);
} break;
}
}
if (!led_matrix_is_enabled()) {
led_matrix_set_flags(LED_FLAG_ALL);
led_matrix_enable();
}
return false;
#endif
default:
return true;
}
}
void keyboard_post_init_kb(void) {
gpio_set_pin_output_push_pull(LED_MAC_OS_PIN);
gpio_set_pin_output_push_pull(LED_WIN_OS_PIN);
gpio_write_pin(LED_MAC_OS_PIN, !LED_OS_PIN_ON_STATE);
gpio_write_pin(LED_WIN_OS_PIN, !LED_OS_PIN_ON_STATE);
keyboard_post_init_user();
}
void housekeeping_task_kb(void) {
if (default_layer_state == (1U << 0)) {
gpio_write_pin(LED_MAC_OS_PIN, LED_OS_PIN_ON_STATE);
gpio_write_pin(LED_WIN_OS_PIN, !LED_OS_PIN_ON_STATE);
}
if (default_layer_state == (1U << 2)) {
gpio_write_pin(LED_MAC_OS_PIN, !LED_OS_PIN_ON_STATE);
gpio_write_pin(LED_WIN_OS_PIN, LED_OS_PIN_ON_STATE);
}
}
void suspend_power_down_kb(void) {
gpio_write_pin(LED_WIN_OS_PIN, !LED_OS_PIN_ON_STATE);
gpio_write_pin(LED_MAC_OS_PIN, !LED_OS_PIN_ON_STATE);
suspend_power_down_user();
}

View File

@@ -0,0 +1,26 @@
/* Copyright 2025 @ 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
/* Indication led */
#define LED_MAC_OS_PIN C10
#define LED_WIN_OS_PIN C11
#define LED_OS_PIN_ON_STATE 1
/* The I2C Driver Configuration */
#define I2C1_CLOCK_SPEED 400000
#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2

View File

@@ -0,0 +1,21 @@
/* Copyright 2025 @ 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
#define HAL_USE_I2C TRUE
#include_next <halconf.h>

View File

@@ -0,0 +1,151 @@
{
"manufacturer": "Keychron",
"url": "https://github.com/Keychron",
"maintainer": "lalalademaxiya1",
"eeprom": {
"wear_leveling": {
"backing_size": 4096
}
},
"usb": {
"vid": "0x3434"
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"dip_switch": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"processor": "STM32F401",
"bootloader": "stm32-dfu",
"matrix_pins": {
"cols": ["A0", "A1", "A2", "A3", "C0", "C1", "C2", "C3", "A8", "C12", "B9", "C6", "C7", "C4", "C5","A15", "B10", "B12", "B13", "B14", "B15"],
"rows": ["B0", "B1", "B8", "B3", "B4", "B5"]
},
"diode_direction": "COL2ROW",
"indicators": {
"caps_lock": "C9",
"num_lock": "C8"
},
"dip_switch": {
"pins": ["D2"]
},
"layouts": {
"LAYOUT_104_ansi": {
"layout": [
{"matrix":[0,0], "x":0, "y":0},
{"matrix":[0,1], "x":2, "y":0},
{"matrix":[0,2], "x":3, "y":0},
{"matrix":[0,3], "x":4, "y":0},
{"matrix":[0,4], "x":5, "y":0},
{"matrix":[0,5], "x":6.5, "y":0},
{"matrix":[0,6], "x":7.5, "y":0},
{"matrix":[0,7], "x":8.5, "y":0},
{"matrix":[0,8], "x":9.5, "y":0},
{"matrix":[0,9], "x":11, "y":0},
{"matrix":[0,10], "x":12, "y":0},
{"matrix":[0,11], "x":13, "y":0},
{"matrix":[0,12], "x":14, "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], "x":0, "y":1.25},
{"matrix":[1,1], "x":1, "y":1.25},
{"matrix":[1,2], "x":2, "y":1.25},
{"matrix":[1,3], "x":3, "y":1.25},
{"matrix":[1,4], "x":4, "y":1.25},
{"matrix":[1,5], "x":5, "y":1.25},
{"matrix":[1,6], "x":6, "y":1.25},
{"matrix":[1,7], "x":7, "y":1.25},
{"matrix":[1,8], "x":8, "y":1.25},
{"matrix":[1,9], "x":9, "y":1.25},
{"matrix":[1,10], "x":10, "y":1.25},
{"matrix":[1,11], "x":11, "y":1.25},
{"matrix":[1,12], "x":12, "y":1.25},
{"matrix":[1,13], "x":13, "y":1.25, "w":2},
{"matrix":[1,14], "x":15.25, "y":1.25},
{"matrix":[1,15], "x":16.25, "y":1.25},
{"matrix":[1,16], "x":17.25, "y":1.25},
{"matrix":[1,17], "x":18.5, "y":1.25},
{"matrix":[1,18], "x":19.5, "y":1.25},
{"matrix":[1,19], "x":20.5, "y":1.25},
{"matrix":[1,20], "x":21.5, "y":1.25},
{"matrix":[2,0], "x":0, "y":2.25, "w":1.5},
{"matrix":[2,1], "x":1.5, "y":2.25},
{"matrix":[2,2], "x":2.5, "y":2.25},
{"matrix":[2,3], "x":3.5, "y":2.25},
{"matrix":[2,4], "x":4.5, "y":2.25},
{"matrix":[2,5], "x":5.5, "y":2.25},
{"matrix":[2,6], "x":6.5, "y":2.25},
{"matrix":[2,7], "x":7.5, "y":2.25},
{"matrix":[2,8], "x":8.5, "y":2.25},
{"matrix":[2,9], "x":9.5, "y":2.25},
{"matrix":[2,10], "x":10.5, "y":2.25},
{"matrix":[2,11], "x":11.5, "y":2.25},
{"matrix":[2,12], "x":12.5, "y":2.25},
{"matrix":[2,13], "x":13.5, "y":2.25, "w":1.5},
{"matrix":[2,14], "x":15.25, "y":2.25},
{"matrix":[2,15], "x":16.25, "y":2.25},
{"matrix":[2,16], "x":17.25, "y":2.25},
{"matrix":[2,17], "x":18.5, "y":2.25},
{"matrix":[2,18], "x":19.5, "y":2.25},
{"matrix":[2,19], "x":20.5, "y":2.25},
{"matrix":[2,20], "x":21.5, "y":2.25, "h":2},
{"matrix":[3,0], "x":0, "y":3.25, "w":1.75},
{"matrix":[3,1], "x":1.75, "y":3.25},
{"matrix":[3,2], "x":2.75, "y":3.25},
{"matrix":[3,3], "x":3.75, "y":3.25},
{"matrix":[3,4], "x":4.75, "y":3.25},
{"matrix":[3,5], "x":5.75, "y":3.25},
{"matrix":[3,6], "x":6.75, "y":3.25},
{"matrix":[3,7], "x":7.75, "y":3.25},
{"matrix":[3,8], "x":8.75, "y":3.25},
{"matrix":[3,9], "x":9.75, "y":3.25},
{"matrix":[3,10], "x":10.75, "y":3.25},
{"matrix":[3,11], "x":11.75, "y":3.25},
{"matrix":[3,13], "x":12.75, "y":3.25, "w":2.25},
{"matrix":[3,17], "x":18.5, "y":3.25},
{"matrix":[3,18], "x":19.5, "y":3.25},
{"matrix":[3,19], "x":20.5, "y":3.25},
{"matrix":[4,0], "x":0, "y":4.25, "w":2.25},
{"matrix":[4,2], "x":2.25, "y":4.25},
{"matrix":[4,3], "x":3.25, "y":4.25},
{"matrix":[4,4], "x":4.25, "y":4.25},
{"matrix":[4,5], "x":5.25, "y":4.25},
{"matrix":[4,6], "x":6.25, "y":4.25},
{"matrix":[4,7], "x":7.25, "y":4.25},
{"matrix":[4,8], "x":8.25, "y":4.25},
{"matrix":[4,9], "x":9.25, "y":4.25},
{"matrix":[4,10], "x":10.25, "y":4.25},
{"matrix":[4,11], "x":11.25, "y":4.25},
{"matrix":[4,13], "x":12.25, "y":4.25, "w":2.75},
{"matrix":[4,15], "x":16.25, "y":4.25},
{"matrix":[4,17], "x":18.5, "y":4.25},
{"matrix":[4,18], "x":19.5, "y":4.25},
{"matrix":[4,19], "x":20.5, "y":4.25},
{"matrix":[4,20], "x":21.5, "y":4.25, "h":2},
{"matrix":[5,0], "x":0, "y":5.25, "w":1.25},
{"matrix":[5,1], "x":1.25, "y":5.25, "w":1.25},
{"matrix":[5,2], "x":2.5, "y":5.25, "w":1.25},
{"matrix":[5,6], "x":3.75, "y":5.25, "w":6.25},
{"matrix":[5,10], "x":10, "y":5.25, "w":1.25},
{"matrix":[5,11], "x":11.25, "y":5.25, "w":1.25},
{"matrix":[5,12], "x":12.5, "y":5.25, "w":1.25},
{"matrix":[5,13], "x":13.75, "y":5.25, "w":1.25},
{"matrix":[5,14], "x":15.25, "y":5.25},
{"matrix":[5,15], "x":16.25, "y":5.25},
{"matrix":[5,16], "x":17.25, "y":5.25},
{"matrix":[5,17], "x":18.5, "y":5.25, "w":2},
{"matrix":[5,18], "x":20.5, "y":5.25}
]
}
}
}

View File

@@ -0,0 +1,28 @@
/* Copyright 2025 @ 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
#include_next <mcuconf.h>
#undef STM32_HSECLK
#define STM32_HSECLK 16000000U
#undef STM32_PLLM_VALUE
#define STM32_PLLM_VALUE 8
#undef STM32_I2C_USE_I2C1
#define STM32_I2C_USE_I2C1 TRUE

View File

@@ -0,0 +1,30 @@
# Keychron C2 Pro V2
![Keychron C2 Pro](https://i.imgur.com/BQE1tFO.jpg)
A customizable 100% keyboard.
Rev1 is based on STM32L432 and rev2 is based on STM32F402.
* Keyboard Maintainer: [Keychron](https://github.com/keychron)
* Hardware Supported: Keychron C2 Pro
* Hardware Availability: [Keychron C2 Pro QMK/VIA Wired Mechanical Keyboard](https://www.keychron.com/products/keychron-c2-pro-qmk-via-wired-mechanical-keyboard)
Make example for this keyboard (after setting up your build environment):
make keychron/c2_pro_v2/ansi/rgb:default
make keychron/c2_pro_v2/ansi/white:default
Flashing example for this keyboard:
make keychron/c2_pro_v2/ansi/rgb:default:flash
make keychron/c2_pro_v2/ansi/white:default:flash
## bootloader
Enter the bootloader in two ways:
* **Bootmagic reset**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard.
* **Physical reset button**: Briefly press the RESET button under the spacebar.
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).

View File

@@ -0,0 +1,603 @@
{
"keyboard_name": "Keycult Zero",
"manufacturer": "Yiancar-Designs",
"url": "https://yiancar-designs.com",
"maintainer": "Yiancar-Designs",
"usb": {
"vid": "0x8968",
"pid": "0x6337",
"device_version": "0.0.1"
},
"features": {
"bootmagic": true,
"mousekey": true,
"extrakey": true,
"nkro": true
},
"indicators": {
"caps_lock": "B6",
"on_state": 0
},
"matrix_pins": {
"cols": ["A1", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "B2", "B10", "B11", "B12", "B13", "B14"],
"rows": ["A2", "B9", "B8", "B5", "B4"]
},
"diode_direction": "COL2ROW",
"processor": "STM32F072",
"bootloader": "stm32-dfu",
"community_layouts": [
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
"60_ansi_tsangan_split_bs_rshift",
"60_iso",
"60_iso_split_bs_rshift",
"60_iso_tsangan"
],
"layout_aliases": {
"LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"layouts": {
"LAYOUT_all": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 12], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"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, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_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], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_ansi_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 12], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_ansi_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_iso": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [1, 13], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"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, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_iso_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 12], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [1, 13], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"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, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_iso_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [1, 13], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"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, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 12], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
}
}
}

View File

@@ -0,0 +1,21 @@
/* Copyright 2024 Yiancar-Designs
*
* 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"
void led_init_ports(void) {
// Set our LED pins as open drain outputs
gpio_set_pin_output_open_drain(LED_CAPS_LOCK_PIN);
}

View File

@@ -0,0 +1,32 @@
/* Copyright 2024 Yiancar-Designs
*
* 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( /* Base */
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_BSPC, KC_DEL,
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_APP, KC_RCTL),
[1] = LAYOUT_all( /* FN */
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_DEL, KC_TRNS,
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
};

View File

@@ -0,0 +1,32 @@
# Keycult Zero
This is a standard 60% layout PCB. It supports VIA.
* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
* Hardware Supported: A 60% keyboard with STM32F072CB
* Hardware Availability: https://novelkeys.com/
## Instructions
### Build
Make example for this keyboard (after setting up your build environment):
make keycult/keycult_zero: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. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
### Reset
- Unplug
- Hold Escape
- Plug In
- Unplug
- Release Escape
### Flash
- Unplug
- Hold Escape
- Plug In
- Flash using QMK Toolbox or CLI (`make keycult/keycult_zero:<keymap>:flash`)

View File

@@ -0,0 +1,2 @@
# Wildcard to allow APM32 MCU
DFU_SUFFIX_ARGS = -v FFFF -p FFFF

View File

@@ -0,0 +1,9 @@
// Copyright 2024 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <chconf.h>
#undef CH_CFG_ST_RESOLUTION
#define CH_CFG_ST_RESOLUTION 16

View File

@@ -0,0 +1,8 @@
// Copyright 2024 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define BACKLIGHT_PWM_DRIVER PWMD2
#define BACKLIGHT_PWM_CHANNEL 4
#define BACKLIGHT_PAL_MODE 2

View File

@@ -0,0 +1,8 @@
// Copyright 2024 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define HAL_USE_PWM TRUE
#include_next <halconf.h>

View File

@@ -0,0 +1,300 @@
{
"manufacturer": "keyten",
"keyboard_name": "kt60-MU",
"maintainer": "key10iq",
"processor": "STM32F072",
"bootloader": "stm32-dfu",
"usb": {
"vid": "0xEB69",
"pid": "0x6006",
"device_version": "0.0.1"
},
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"backlight": true
},
"diode_direction": "COL2ROW",
"matrix_pins": {
"rows": ["B2", "B1", "B7", "B6", "B5"],
"cols": ["A15", "A4", "F1", "A5", "F0", "A6", "C15", "A7", "C14", "B0", "C13", "B10", "B4", "B3"]
},
"indicators": {
"caps_lock": "A14"
},
"backlight": {
"pin": "B11",
"levels": 15
},
"community_layouts": [
"60_ansi_wkl_split_bs_rshift",
"60_hhkb",
"60_ansi_tsangan_split_bs_rshift"
],
"layout_aliases": {
"LAYOUT_all": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"layouts": {
"LAYOUT_60_ansi_wkl_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 13], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [4, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_hhkb": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 13], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [4, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 11], "x": 12.5, "y": 4}
]
},
"LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 13], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [4, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 11], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_ansi_tsangan_split_rshift": {
"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": [2, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [4, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 11], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
}
}
}

View File

@@ -0,0 +1,24 @@
// Copyright 2025 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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_GRV, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
KC_TRNS, 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
)
};

View File

@@ -0,0 +1,12 @@
// Copyright 2024 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <mcuconf.h>
#undef STM32_PWM_USE_TIM2
#define STM32_PWM_USE_TIM2 TRUE
#undef STM32_ST_USE_TIMER
#define STM32_ST_USE_TIMER 3

View File

@@ -0,0 +1,42 @@
# keyten kt60-MU
PCB supporting multiple 60% keyboards.
Outline is compatible with:
* All common O-Ring mount keyboards
* Polaris V2 (In theory. At the time of PCB design, this keyboard is in IC stage)
Supports two Type-C connector position:
* Standard left position
* Central position like Aksara 60
Supports three JST connector position like the following PCBs or keyboards:
* hiney h60
* Singa Unikorn
* Polaris V2
![kt60-MU](https://i.imgur.com/72uSWLx.jpg)
* Keyboard Maintainer: [keyten](https://github.com/key10iq)
* Hardware Supported: keyten kt60-MU
* Hardware Availability: private GB
Make example for this keyboard (after setting up your build environment):
make keyten/kt60_mu:default
Flashing example for this keyboard:
make keyten/kt60_mu: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
* Keycode in layout: Press the key mapped to `QK_BOOT` if it is available
* Physical reset button: Hold the button on the back of the PCB

View File

@@ -0,0 +1,188 @@
{
"manufacturer": "DIY (open source)",
"keyboard_name": "Large Lad",
"maintainer": "Hyphen-ated",
"bootmagic": {
"matrix": [11, 12]
},
"development_board": "blackpill_f411",
"diode_direction": "COL2ROW",
"encoder": {
"rotary": [
{"pin_a": "B7", "pin_b": "A0"}
]
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"encoder": true
},
"matrix_pins": {
"cols": ["A2", "A1", "C13", "C14", "C15", "A5", "A6", "B0", "B3", "B8", "A15", "A8", "B15"],
"rows": ["B5", "B6", "B4", "B9", "A4", "A3", "A7", "B1", "B10", "B12", "B13", "B14"]
},
"url": "https://github.com/Hyphen-ated/large-lad-keyboard",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"layouts": {
"LAYOUT": {
"layout": [
{"label": "L1", "matrix": [11, 12], "x": 0, "y": 0},
{"label": "L2", "matrix": [11, 11], "x": 1, "y": 0},
{"label": "L3", "matrix": [11, 6], "x": 2, "y": 0},
{"label": "F13", "matrix": [11, 5], "x": 5.25, "y": 0},
{"label": "F14", "matrix": [11, 4], "x": 6.25, "y": 0},
{"label": "F15", "matrix": [11, 3], "x": 7.25, "y": 0},
{"label": "F16", "matrix": [11, 2], "x": 8.25, "y": 0},
{"label": "F17", "matrix": [11, 1], "x": 9.75, "y": 0},
{"label": "F18", "matrix": [11, 0], "x": 10.75, "y": 0},
{"label": "F19", "matrix": [0, 12], "x": 11.75, "y": 0},
{"label": "F20", "matrix": [0, 11], "x": 12.75, "y": 0},
{"label": "F21", "matrix": [0, 10], "x": 14.25, "y": 0},
{"label": "F22", "matrix": [0, 9], "x": 15.25, "y": 0},
{"label": "F23", "matrix": [0, 8], "x": 16.25, "y": 0},
{"label": "F24", "matrix": [0, 7], "x": 17.25, "y": 0},
{"label": "R1", "matrix": [0, 6], "x": 18.5, "y": 0},
{"label": "R2", "matrix": [0, 5], "x": 19.5, "y": 0},
{"label": "R3", "matrix": [0, 4], "x": 20.5, "y": 0},
{"label": "R4", "matrix": [0, 3], "x": 21.75, "y": 0},
{"label": "R5", "matrix": [0, 2], "x": 22.75, "y": 0},
{"label": "R6", "matrix": [0, 1], "x": 23.75, "y": 0},
{"label": "R7", "matrix": [0, 0], "x": 24.75, "y": 0},
{"label": "L4", "matrix": [11, 7], "x": 0, "y": 1},
{"label": "L5", "matrix": [10, 12], "x": 1, "y": 1},
{"label": "L6", "matrix": [10, 11], "x": 2, "y": 1},
{"label": "Esc", "matrix": [10, 6], "x": 3.25, "y": 1},
{"label": "F1", "matrix": [10, 5], "x": 5.25, "y": 1},
{"label": "F2", "matrix": [10, 4], "x": 6.25, "y": 1},
{"label": "F3", "matrix": [10, 3], "x": 7.25, "y": 1},
{"label": "F4", "matrix": [10, 2], "x": 8.25, "y": 1},
{"label": "F5", "matrix": [10, 1], "x": 9.75, "y": 1},
{"label": "F6", "matrix": [10, 0], "x": 10.75, "y": 1},
{"label": "F7", "matrix": [1, 12], "x": 11.75, "y": 1},
{"label": "F8", "matrix": [1, 11], "x": 12.75, "y": 1},
{"label": "F9", "matrix": [1, 10], "x": 14.25, "y": 1},
{"label": "F10", "matrix": [1, 9], "x": 15.25, "y": 1},
{"label": "F11", "matrix": [1, 8], "x": 16.25, "y": 1},
{"label": "F12", "matrix": [1, 7], "x": 17.25, "y": 1},
{"label": "PrtSc", "matrix": [1, 6], "x": 18.5, "y": 1},
{"label": "Scroll Lock", "matrix": [1, 5], "x": 19.5, "y": 1},
{"label": "Pause", "matrix": [1, 4], "x": 20.5, "y": 1},
{"label": "R8", "matrix": [1, 3], "x": 21.75, "y": 1},
{"label": "R9", "matrix": [1, 2], "x": 22.75, "y": 1},
{"label": "R10", "matrix": [1, 1], "x": 23.75, "y": 1},
{"label": "R11", "matrix": [1, 0], "x": 24.75, "y": 1},
{"label": "L7", "matrix": [11, 8], "x": 0, "y": 2.25},
{"label": "L8", "matrix": [10, 7], "x": 1, "y": 2.25},
{"label": "L9", "matrix": [9, 12], "x": 2, "y": 2.25},
{"label": "~", "matrix": [9, 11], "x": 3.25, "y": 2.5},
{"label": "!", "matrix": [9, 6], "x": 4.25, "y": 2.5},
{"label": "@", "matrix": [9, 5], "x": 5.25, "y": 2.5},
{"label": "#", "matrix": [9, 4], "x": 6.25, "y": 2.5},
{"label": "$", "matrix": [9, 3], "x": 7.25, "y": 2.5},
{"label": "%", "matrix": [9, 2], "x": 8.25, "y": 2.5},
{"label": "^", "matrix": [9, 1], "x": 9.25, "y": 2.5},
{"label": "&", "matrix": [9, 0], "x": 10.25, "y": 2.5},
{"label": "*", "matrix": [2, 12], "x": 11.25, "y": 2.5},
{"label": "(", "matrix": [2, 11], "x": 12.25, "y": 2.5},
{"label": ")", "matrix": [2, 10], "x": 13.25, "y": 2.5},
{"label": "_", "matrix": [2, 9], "x": 14.25, "y": 2.5},
{"label": "+", "matrix": [2, 8], "x": 15.25, "y": 2.5},
{"label": "Backspace", "matrix": [2, 7], "x": 16.25, "y": 2.5, "w": 2},
{"label": "Insert", "matrix": [2, 6], "x": 18.5, "y": 2.5},
{"label": "Home", "matrix": [2, 5], "x": 19.5, "y": 2.5},
{"label": "PgUp", "matrix": [2, 4], "x": 20.5, "y": 2.5},
{"label": "Num Lock", "matrix": [2, 3], "x": 21.75, "y": 2.5},
{"label": "/", "matrix": [2, 2], "x": 22.75, "y": 2.5},
{"label": "*", "matrix": [2, 1], "x": 23.75, "y": 2.5},
{"label": "-", "matrix": [2, 0], "x": 24.75, "y": 2.5},
{"label": "L10", "matrix": [10, 8], "x": 0, "y": 3.25},
{"label": "L11", "matrix": [9, 7], "x": 1, "y": 3.25},
{"label": "L12", "matrix": [8, 12], "x": 2, "y": 3.25},
{"label": "Tab", "matrix": [8, 11], "x": 3.25, "y": 3.5, "w": 1.5},
{"label": "Q", "matrix": [8, 6], "x": 4.75, "y": 3.5},
{"label": "W", "matrix": [8, 5], "x": 5.75, "y": 3.5},
{"label": "E", "matrix": [8, 4], "x": 6.75, "y": 3.5},
{"label": "R", "matrix": [8, 3], "x": 7.75, "y": 3.5},
{"label": "T", "matrix": [8, 2], "x": 8.75, "y": 3.5},
{"label": "Y", "matrix": [8, 1], "x": 9.75, "y": 3.5},
{"label": "U", "matrix": [8, 0], "x": 10.75, "y": 3.5},
{"label": "I", "matrix": [3, 12], "x": 11.75, "y": 3.5},
{"label": "O", "matrix": [3, 11], "x": 12.75, "y": 3.5},
{"label": "P", "matrix": [3, 10], "x": 13.75, "y": 3.5},
{"label": "{", "matrix": [3, 9], "x": 14.75, "y": 3.5},
{"label": "}", "matrix": [3, 8], "x": 15.75, "y": 3.5},
{"label": "|", "matrix": [3, 7], "x": 16.75, "y": 3.5, "w": 1.5},
{"label": "Delete", "matrix": [3, 6], "x": 18.5, "y": 3.5},
{"label": "End", "matrix": [3, 5], "x": 19.5, "y": 3.5},
{"label": "PgDn", "matrix": [3, 4], "x": 20.5, "y": 3.5},
{"label": "7", "matrix": [3, 3], "x": 21.75, "y": 3.5},
{"label": "8", "matrix": [3, 2], "x": 22.75, "y": 3.5},
{"label": "9", "matrix": [3, 1], "x": 23.75, "y": 3.5},
{"label": "+", "matrix": [3, 0], "x": 24.75, "y": 3.5, "h": 2},
{"label": "L13", "matrix": [9, 8], "x": 0, "y": 4.25},
{"label": "L14", "matrix": [8, 7], "x": 1, "y": 4.25},
{"label": "L15", "matrix": [7, 12], "x": 2, "y": 4.25},
{"label": "Caps Lock", "matrix": [7, 6], "x": 3.25, "y": 4.5, "w": 1.75},
{"label": "A", "matrix": [7, 5], "x": 5, "y": 4.5},
{"label": "S", "matrix": [7, 4], "x": 6, "y": 4.5},
{"label": "D", "matrix": [7, 3], "x": 7, "y": 4.5},
{"label": "F", "matrix": [7, 2], "x": 8, "y": 4.5},
{"label": "G", "matrix": [7, 1], "x": 9, "y": 4.5},
{"label": "H", "matrix": [7, 0], "x": 10, "y": 4.5},
{"label": "J", "matrix": [4, 12], "x": 11, "y": 4.5},
{"label": "K", "matrix": [4, 11], "x": 12, "y": 4.5},
{"label": "L", "matrix": [4, 10], "x": 13, "y": 4.5},
{"label": ":", "matrix": [4, 9], "x": 14, "y": 4.5},
{"label": "\"", "matrix": [4, 8], "x": 15, "y": 4.5},
{"label": "Enter", "matrix": [4, 7], "x": 16, "y": 4.5, "w": 2.25},
{"label": "4", "matrix": [4, 3], "x": 21.75, "y": 4.5},
{"label": "5", "matrix": [4, 2], "x": 22.75, "y": 4.5},
{"label": "6", "matrix": [4, 1], "x": 23.75, "y": 4.5},
{"label": "L16", "matrix": [8, 8], "x": 0, "y": 5.5},
{"label": "L17", "matrix": [7, 7], "x": 1, "y": 5.5},
{"label": "L18", "matrix": [6, 12], "x": 2, "y": 5.5},
{"label": "Shift", "matrix": [7, 11], "x": 3.25, "y": 5.5, "w": 2.25},
{"label": "Z", "matrix": [6, 5], "x": 5.5, "y": 5.5},
{"label": "X", "matrix": [6, 3], "x": 6.5, "y": 5.5},
{"label": "C", "matrix": [6, 2], "x": 7.5, "y": 5.5},
{"label": "V", "matrix": [6, 1], "x": 8.5, "y": 5.5},
{"label": "B", "matrix": [6, 0], "x": 9.5, "y": 5.5},
{"label": "N", "matrix": [5, 12], "x": 10.5, "y": 5.5},
{"label": "M", "matrix": [5, 11], "x": 11.5, "y": 5.5},
{"label": "<", "matrix": [5, 10], "x": 12.5, "y": 5.5},
{"label": ">", "matrix": [5, 9], "x": 13.5, "y": 5.5},
{"label": "?", "matrix": [5, 8], "x": 14.5, "y": 5.5},
{"label": "Shift", "matrix": [5, 7], "x": 15.5, "y": 5.5, "w": 2.75},
{"label": "Up", "matrix": [4, 5], "x": 19.5, "y": 5.5},
{"label": "1", "matrix": [5, 3], "x": 21.75, "y": 5.5},
{"label": "2", "matrix": [5, 2], "x": 22.75, "y": 5.5},
{"label": "3", "matrix": [5, 1], "x": 23.75, "y": 5.5},
{"label": "Enter", "matrix": [4, 0], "x": 24.75, "y": 5.5, "h": 2},
{"label": "L19", "matrix": [7, 8], "x": 0, "y": 6.5},
{"label": "L20", "matrix": [8, 9], "x": 1, "y": 6.5},
{"label": "L21", "matrix": [7, 9], "x": 2, "y": 6.5},
{"label": "Ctrl", "matrix": [6, 11], "x": 3.25, "y": 6.5, "w": 1.25},
{"label": "Win", "matrix": [6, 6], "x": 4.5, "y": 6.5, "w": 1.25},
{"label": "Alt", "matrix": [6, 4], "x": 5.75, "y": 6.5, "w": 1.25},
{"label": "Space", "matrix": [6, 10], "x": 7, "y": 6.5, "w": 6.25},
{"label": "Alt", "matrix": [6, 9], "x": 13.25, "y": 6.5, "w": 1.25},
{"label": "Win", "matrix": [6, 8], "x": 14.5, "y": 6.5, "w": 1.25},
{"label": "Menu", "matrix": [6, 7], "x": 15.75, "y": 6.5, "w": 1.25},
{"label": "Ctrl", "matrix": [5, 6], "x": 17, "y": 6.5, "w": 1.25},
{"label": "Left", "matrix": [4, 6], "x": 18.5, "y": 6.5},
{"label": "Down", "matrix": [5, 5], "x": 19.5, "y": 6.5},
{"label": "Right", "matrix": [4, 4], "x": 20.5, "y": 6.5},
{"label": "0", "matrix": [5, 4], "x": 21.75, "y": 6.5, "w": 2},
{"label": ".", "matrix": [5, 0], "x": 23.75, "y": 6.5}
]
}
}
}

View File

@@ -0,0 +1,42 @@
// Copyright 2024 Hyphen-ated (@Hyphen-ated)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
* │ │ │ │ │F13│F14│F15│F16│ │F17│F18│F19│F20│ │F21│F22│F23│F24│ │ │ │ │ │ │ │ │ │
* ├───┼───┼───┤ ┌───┐ ├───┼───┼───┤───┤ ├───┼───┼───┤───┤ ├───┼───┼───┤───┤ ├───┼───┼───┤ ├───┼───┼───┤───┤
* │ │ │ │ │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│ │ │ │ │ │
* └───┴───┴───┘ └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ └───┴───┴───┴───┘
* ┌───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
* │ │ │ │ │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│ │Num│ / │ * │ - │
* ├───┼───┼───┤ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
* │ │ │ │ │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│ │ 7 │ 8 │ 9 │ │
* ├───┼───┼───┤ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┤ + │
* │ │ │ │ │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ │ 4 │ 5 │ 6 │ │
* ├───┼───┼───┤ ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐ ├───┼───┼───┼───┤
* │ │ │ │ │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │ │ 1 │ 2 │ 3 │ │
* ├───┼───┼───┤ ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤Ent│
* │ │ │ │ │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl│ │ ← │ ↓ │ → │ │ 0 │ . │ │
* └───┴───┴───┘ └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
*/
[0] = LAYOUT(
KC_NO,KC_NO,KC_NO, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO,KC_NO,KC_NO, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO,KC_NO,KC_NO, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_NO,KC_NO,KC_NO, 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_P7, KC_P8, KC_P9, KC_PPLS,
KC_NO,KC_NO,KC_NO, 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_P4, KC_P5, KC_P6,
KC_NO,KC_NO,KC_NO, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_NO,KC_NO,KC_NO, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
)
};
// encoder controls volume by default
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
};
#endif

View File

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

View File

@@ -0,0 +1,23 @@
# large_lad
![large_lad](https://i.imgur.com/CQWAD2X.jpg)
Starts with the standard US 104 key layout and adds more keys on top and on the left. Total of 148 keys, one of which is a rotary encoder. Includes two rows of function keys and a 3x7 grid of keys on the left. No LEDs.
* Keyboard Maintainer: [Hyphen-ated](https://github.com/Hyphen-ated)
* Hardware Supported: Custom open source PCB.
* Hardware Availability: DIY. PCB and plate design files available at https://github.com/Hyphen-ated/large-lad-keyboard
Make example for this keyboard (after setting up your build environment):
make large_lad:default
Flashing example for this keyboard:
make large_lad: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
To enter the bootloader, there's two buttons to press on the blackpill board. Press and hold BOOT, press and release NRST, then release BOOT. Sometimes this randomly fails and you have to try again.

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