Compare commits

..

160 Commits

Author SHA1 Message Date
Thomas Haukland 645c1e9182 Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2023-03-12 11:53:25 +01:00
QMK Bot b74f2c7b86 Merge remote-tracking branch 'origin/master' into develop 2023-03-12 10:24:16 +00:00
QMK Bot b27f9c636a Merge remote-tracking branch 'origin/master' into develop 2023-03-12 01:56:02 +00:00
QMK Bot 727a55b3cc Merge remote-tracking branch 'origin/master' into develop 2023-03-12 01:19:34 +00:00
QMK Bot bd6cc9e256 Merge remote-tracking branch 'origin/master' into develop 2023-03-11 21:05:08 +00:00
QMK Bot 2ac9e82f61 Merge remote-tracking branch 'origin/master' into develop 2023-03-11 17:53:29 +00:00
QMK Bot be49f85f31 Merge remote-tracking branch 'origin/master' into develop 2023-03-11 17:29:59 +00:00
QMK Bot e23bc28144 Merge remote-tracking branch 'origin/master' into develop 2023-03-11 17:27:23 +00:00
QMK Bot fd3864fb94 Merge remote-tracking branch 'origin/master' into develop 2023-03-11 16:53:25 +00:00
Nick Brassel 07157cd707 Merge remote-tracking branch 'upstream/master' into develop 2023-03-11 23:59:47 +11:00
QMK Bot d3a9cf5d25 Merge remote-tracking branch 'origin/master' into develop 2023-03-11 03:47:48 +00:00
Joel Challis a974c51d25 Relocate various modifier defines (#18638) 2023-03-10 18:27:29 -08:00
leah-splitkb 46bbb81dd2 Add RP2040 Community Edition alias for Liatris (#19966) 2023-03-10 12:47:10 -08:00
Ryan e933e0411f Move matrix config to info.json, part 5 (#20003)
Co-authored-by: Nick Brassel <nick@tzarc.org>
2023-03-11 05:41:58 +11:00
Ryan 1022afa6c2 Move matrix config to info.json, part 8 (#20030) 2023-03-11 04:59:07 +11:00
QMK Bot 4b1f0e8daa Merge remote-tracking branch 'origin/master' into develop 2023-03-10 17:57:50 +00:00
QMK Bot 5a60010f74 Merge remote-tracking branch 'origin/master' into develop 2023-03-10 17:52:09 +00:00
QMK Bot 4a91caf4fe Merge remote-tracking branch 'origin/master' into develop 2023-03-10 17:40:52 +00:00
QMK Bot 45f540f3bb Merge remote-tracking branch 'origin/master' into develop 2023-03-10 16:08:58 +00:00
Ryan 20dca46924 Remove pointless USE_I2C blocks in keyboard headers (#20084) 2023-03-10 16:00:30 +00:00
Ryan dc18d9dd85 Restore matrix pins for ep/40 (#20083) 2023-03-10 16:00:14 +00:00
Ryan caa8c81086 Move matrix config to info.json, part 7 (#20020) 2023-03-11 00:39:56 +11:00
Ryan ace372d90d Move matrix config to info.json, part 3 (#19991)
Co-authored-by: Nick Brassel <nick@tzarc.org>
2023-03-11 00:34:34 +11:00
Ryan 76cc7fe109 Move matrix config to info.json, part 6 (#20019) 2023-03-11 00:32:05 +11:00
Ryan 9e64300e67 Move matrix config to info.json, part 4 (#20001) 2023-03-11 00:00:24 +11:00
Ryan dd086a51d8 Move matrix config to info.json, part 2 (#19987) 2023-03-10 22:16:56 +11:00
QMK Bot 80661e5f19 Merge remote-tracking branch 'origin/master' into develop 2023-03-10 10:24:35 +00:00
QMK Bot 961f2d503f Merge remote-tracking branch 'origin/master' into develop 2023-03-10 09:21:48 +00:00
QMK Bot 3b67310bef Merge remote-tracking branch 'origin/master' into develop 2023-03-10 07:53:16 +00:00
QMK Bot d4af89ba40 Merge remote-tracking branch 'origin/master' into develop 2023-03-10 07:20:07 +00:00
QMK Bot 6728b8c0f3 Merge remote-tracking branch 'origin/master' into develop 2023-03-10 07:06:40 +00:00
QMK Bot 84d29a793f Merge remote-tracking branch 'origin/master' into develop 2023-03-10 00:22:48 +00:00
QMK Bot 57112d700a Merge remote-tracking branch 'origin/master' into develop 2023-03-09 22:39:30 +00:00
QMK Bot 0ddb27249e Merge remote-tracking branch 'origin/master' into develop 2023-03-08 19:59:01 +00:00
QMK Bot 43731a9ea0 Merge remote-tracking branch 'origin/master' into develop 2023-03-08 19:38:22 +00:00
QMK Bot dd194d5db9 Merge remote-tracking branch 'origin/master' into develop 2023-03-08 10:45:18 +00:00
QMK Bot 6498acd2d3 Merge remote-tracking branch 'origin/master' into develop 2023-03-08 08:51:15 +00:00
QMK Bot 43648760c4 Merge remote-tracking branch 'origin/master' into develop 2023-03-08 06:38:46 +00:00
Joel Challis 5edf41da60 Remove empty rules.mk from keymaps (#20056) 2023-03-08 03:34:41 +00:00
QMK Bot 98b93802c6 Merge remote-tracking branch 'origin/master' into develop 2023-03-07 22:51:11 +00:00
QMK Bot 1f64fccacb Merge remote-tracking branch 'origin/master' into develop 2023-03-07 21:08:24 +00:00
Aidan Smith 31ab01dce0 Change aidansmithdotdev/fine40 to use Encoder Map (#19912)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: jack <0x6a73@protonmail.com>
2023-03-07 14:06:00 -07:00
QMK Bot 8b7878ef8d Merge remote-tracking branch 'origin/master' into develop 2023-03-07 18:30:26 +00:00
QMK Bot 8e99162654 Merge remote-tracking branch 'origin/master' into develop 2023-03-07 18:14:33 +00:00
QMK Bot 487e0f010a Merge remote-tracking branch 'origin/master' into develop 2023-03-07 01:06:15 +00:00
QMK Bot 725a9f66e3 Merge remote-tracking branch 'origin/master' into develop 2023-03-06 19:39:51 +00:00
QMK Bot c1dfcfc571 Merge remote-tracking branch 'origin/master' into develop 2023-03-06 19:25:38 +00:00
QMK Bot 97522bd58a Merge remote-tracking branch 'origin/master' into develop 2023-03-06 19:18:07 +00:00
QMK Bot b8c9cb8b09 Merge remote-tracking branch 'origin/master' into develop 2023-03-06 01:28:47 +00:00
QMK Bot cfa473e161 Merge remote-tracking branch 'origin/master' into develop 2023-03-05 23:08:22 +00:00
Ryan 23c365b023 Move matrix config to info.json, part 1 (#19985) 2023-03-05 22:53:52 +00:00
QMK Bot b34d51d08d Merge remote-tracking branch 'origin/master' into develop 2023-03-05 13:29:51 +00:00
QMK Bot 8075eb5ea4 Merge remote-tracking branch 'origin/master' into develop 2023-03-04 00:53:53 +00:00
QMK Bot fab04ef580 Merge remote-tracking branch 'origin/master' into develop 2023-03-03 23:04:40 +00:00
QMK Bot 3290bc7d5f Merge remote-tracking branch 'origin/master' into develop 2023-03-03 22:02:32 +00:00
Joel Challis 3be5d90b6d Remove some use of keymap.h (#20006) 2023-03-03 17:50:40 +00:00
Joel Challis c3c40dfda8 Remove some use of keymap.h (#19980) 2023-03-03 11:26:53 +00:00
QMK Bot 6676cc1942 Merge remote-tracking branch 'origin/master' into develop 2023-03-03 03:16:47 +00:00
Nick Brassel 4cf8f69a4b Remove Vagrant due to bit-rot. (#20000) 2023-03-03 14:16:18 +11:00
Joel Challis be781927c1 Merge upstream changes to uf2conv (#19993) 2023-03-03 10:26:37 +11:00
QMK Bot 0a7f15964c Merge remote-tracking branch 'origin/master' into develop 2023-03-01 23:57:53 +00:00
QMK Bot 500da8e46c Merge remote-tracking branch 'origin/master' into develop 2023-03-01 17:54:11 +00:00
QMK Bot a83cb601fc Merge remote-tracking branch 'origin/master' into develop 2023-03-01 17:50:14 +00:00
QMK Bot c9b49cd83b Merge remote-tracking branch 'origin/master' into develop 2023-03-01 17:06:15 +00:00
QMK Bot 512c1197ff Merge remote-tracking branch 'origin/master' into develop 2023-03-01 02:56:03 +00:00
Ryan 9b09e7c6d7 Check all rows have the correct number of columns when parsing g_led_config (#19954) 2023-03-01 01:51:18 +00:00
Huckies f1894e4bac Improve robustness of AW20216 driver (#19849)
* added soft reset and auto lowpower for AW20216
2023-03-01 01:44:40 +00:00
QMK Bot 791ab00ff3 Merge remote-tracking branch 'origin/master' into develop 2023-02-28 20:29:48 +00:00
QMK Bot c9b206ffc8 Merge remote-tracking branch 'origin/master' into develop 2023-02-28 20:25:54 +00:00
QMK Bot 7a518e509e Merge remote-tracking branch 'origin/master' into develop 2023-02-28 20:24:24 +00:00
QMK Bot 0472399f67 Merge remote-tracking branch 'origin/master' into develop 2023-02-28 20:23:02 +00:00
QMK Bot 209e652ff4 Merge remote-tracking branch 'origin/master' into develop 2023-02-28 20:10:51 +00:00
Joel Challis fc05929124 Strip whitespace from CONVERT_TO variables (#19948) 2023-02-28 11:15:54 -08:00
QMK Bot 184c1e5187 Merge remote-tracking branch 'origin/master' into develop 2023-02-28 19:15:33 +00:00
Ryan 7a8265247b Remove "w":1 and "h":1 from info.json (#19961) 2023-02-28 15:06:11 +00:00
QMK Bot bfeccf3172 Merge remote-tracking branch 'origin/master' into develop 2023-02-28 14:19:21 +00:00
Nick Brassel 4ac847674b Branch point for 2023q2 Breaking Change. 2023-02-28 11:30:58 +11:00
Thomas Haukland 8a3ff9daf3 Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2023-02-05 11:28:08 +01:00
Thomas Haukland 097149c573 Merge branch 'develop' of github.com:qmk/qmk_firmware into develop
# Conflicts:
#	keyboards/bastardkb/skeletyl/blackpill/halconf.h
#	keyboards/bastardkb/skeletyl/blackpill/mcuconf.h
2022-11-17 19:10:30 +01:00
Thomas Haukland 5e1be19513 Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-11-13 13:36:40 +01:00
Thomas Haukland bc5a4aedb2 Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-11-12 12:09:30 +01:00
Thomas Haukland 48a9f0ceef Tented blackpill finished.
via enabled in rules messed up layer nr 6???
2022-11-07 21:42:21 +01:00
Thomas Haukland 132980b706 Merge branch 'develop' of github.com:tompi/qmk_firmware into develop 2022-11-07 20:51:54 +01:00
Thomas Haukland 69029ff17d Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-11-07 20:51:29 +01:00
Thomas Haukland 1441e32f31 Tented skeletyl works, except layer 6... 2022-11-07 20:50:16 +01:00
Thomas Haukland 7e0823899a Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-11-02 21:47:12 +01:00
Thomas Haukland e99dcf3f49 Merge branch 'develop' of github.com:tompi/qmk_firmware into develop 2022-11-02 21:43:46 +01:00
Thomas Haukland 7473f7100d Fix vonreg cpu config 2022-10-28 21:30:27 +02:00
Thomas Haukland 8ddf9904e5 Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-10-28 20:11:30 +02:00
Thomas Haukland 4fe275a2f2 Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-10-23 15:53:07 +02:00
Thomas Haukland f40f03dedc Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-10-17 20:34:24 +02:00
Thomas Haukland 94435a48ed Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-10-14 13:14:37 +02:00
Thomas Haukland 8199264160 Merge branch 'develop' of github.com:tompi/qmk_firmware into develop 2022-10-11 21:29:38 +02:00
Thomas Haukland 967660862c Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-10-11 21:29:05 +02:00
Thomas Haukland 2619685747 Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-10-09 12:06:05 +02:00
Thomas Haukland 51fef9f825 Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-10-06 22:14:03 +02:00
Thomas Haukland 1e8f58d73e ferris: remap mouse buttons 2022-10-01 12:05:56 +02:00
Thomas Haukland 30120b4e5b mouse buttons on ferris 2022-10-01 11:03:09 +02:00
Thomas Haukland e1337cc928 CAPS WORD for zompi 2022-09-25 20:33:42 +02:00
Thomas Haukland 08b55ef037 Zompi: per key led works 2022-09-25 20:31:49 +02:00
Thomas Haukland b72b00f7c7 CAPS WORD for blacktyl 2022-09-25 20:30:16 +02:00
Thomas Haukland 733d2245d8 Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-09-25 13:49:36 +02:00
Thomas Haukland bf0a78149d Ferris: enabling caps word 2022-09-25 13:48:29 +02:00
Thomas Haukland b292324586 Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-09-25 10:07:07 +02:00
Thomas Haukland f785d092bc Merge branch 'master' of github.com:tompi/qmk_firmware into develop 2022-09-17 18:43:05 +02:00
Thomas Haukland 449b6b7e05 Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-09-17 18:42:10 +02:00
Thomas Haukland 23405481a0 Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-09-03 08:54:12 +02:00
Thomas Haukland 886bd2946b zompi: leds work 2022-09-03 08:52:40 +02:00
Thomas Haukland ac7864d2b8 Merge branch 'develop' of github.com:tompi/qmk_firmware into develop 2022-08-28 09:43:46 +02:00
Thomas Haukland 0c18526ada zompi: split works, no external pullup needed 2022-08-28 09:42:11 +02:00
Thomas Haukland 78a00d66ea Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-08-28 09:24:44 +02:00
Thomas Haukland 40229454d0 keymap change for skeletylt; add reboot key 2022-08-28 09:23:31 +02:00
Thomas Haukland 53e52d0b94 change 0 position and add mouse clicks 2022-08-22 23:27:52 +02:00
Thomas Haukland fa67bef4ec change 0 position and add mouse clicks 2022-08-22 18:26:43 +02:00
Thomas Haukland e224ec4fc6 Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-08-21 10:03:29 +02:00
Thomas Haukland 68eaa2ea99 Merge branch 'master' into develop 2022-08-18 08:12:41 +02:00
Thomas Haukland 0a4c3ec63a Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-08-18 08:09:19 +02:00
Thomas Haukland d43884affe Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-08-07 19:52:13 +02:00
Thomas Haukland 50dffc477f Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-07-29 11:39:40 +02:00
Thomas Haukland cc703c1004 custom oled logo 2022-07-05 20:34:26 +02:00
Thomas Haukland 22ffbeb99b encoder works 2022-07-05 20:06:11 +02:00
Thomas Haukland 78c2197d15 Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-07-05 20:02:39 +02:00
Thomas Haukland d9bbbebad8 zompi: oled works 2022-07-05 20:00:42 +02:00
Thomas Haukland 2feae0ab52 Merge branch 'develop' of github.com:qmk/qmk_firmware into develop 2022-07-02 16:06:55 +02:00
Thomas Haukland 3fac02d691 Zompi compiles and flashes! 2022-07-02 16:05:48 +02:00
Thomas Haukland a9cae18438 vonreg keymap and settings 2022-07-02 10:30:10 +02:00
Thomas Haukland 9f3cc5cce9 Merge branch 'master' of github.com:tompi/qmk_firmware 2022-06-28 10:33:39 +02:00
Thomas Haukland e45799664f blacktyl_keymap 2022-06-28 10:31:52 +02:00
Thomas Haukland c9c419cdeb Merge branch 'master' of github.com:qmk/qmk_firmware 2022-06-18 09:06:27 +02:00
Thomas Haukland e86bf67aef Underscore for blacktyl 2022-06-18 09:03:35 +02:00
Thomas Haukland ca50ac57ae Lars blacktyl 2022-06-18 08:59:16 +02:00
Thomas Haukland 2ada43ec71 Added some keys 2022-06-17 16:05:57 +02:00
Thomas Haukland 069111d928 mod tap adjustments 2022-06-17 10:37:13 +02:00
Thomas Haukland d4fea0f3dd masse 2022-06-06 18:52:08 +02:00
Thomas Haukland ed4744eb62 rename lars keymap 2022-05-23 21:15:57 +02:00
Thomas Haukland b41f55e22e Swap space and backspace on ferris 2022-05-23 21:10:32 +02:00
Thomas Haukland 7691878f4b Lars skeletyl: wip, debug enabled 2022-05-19 21:56:36 +02:00
Thomas Haukland 54802c8d67 Put space on left thumb(more sane placement) 2022-05-19 21:55:36 +02:00
Thomas Haukland 5154e72fa4 Merge branch 'master' of github.com:qmk/qmk_firmware 2022-05-19 21:19:51 +02:00
Thomas Haukland a716b3b7b1 Blacktyl: media and mouse keys
Also magic boot++
2022-05-13 20:16:44 +02:00
Thomas Haukland 6aa20ba32d Merge branch 'master' of github.com:qmk/qmk_firmware 2022-05-07 23:06:36 +02:00
Thomas Haukland b60f498f3d Merge branch 'master' of github.com:qmk/qmk_firmware 2022-04-17 11:23:26 +02:00
Thomas Haukland 699bfcc533 Use user LED: light when not typing...
also enabling boot magic and RALT
2022-04-16 23:16:30 +02:00
Thomas Haukland 79b1e1e23b stabilize vonreg 2022-04-09 23:57:07 +02:00
Thomas Haukland d13d264942 colemak dh for the vonreg 2022-04-09 22:40:02 +02:00
Thomas Haukland de2e6769a2 The vonreg works... 2022-04-09 19:25:11 +02:00
Thomas Haukland 19a3d3ea10 Modifiers for navigation layer 2022-04-05 22:16:06 +02:00
Thomas Haukland f8ae2b6230 Ferris keymap: fallthrough on arrow layer 2022-04-05 12:56:41 +02:00
Thomas Haukland 2f1e89c37d Home row mods 2022-04-03 21:53:31 +02:00
Thomas Haukland d41a769e92 Fix vonreg serial pin 2022-04-03 18:35:39 +02:00
Thomas Haukland 950645da0d Colemak DH for blacktyl 2022-04-03 18:35:13 +02:00
Thomas Haukland f9a455fa53 The blacktyl works as soldered... 2022-03-30 23:09:08 +02:00
Thomas Haukland 17744429a4 Blacktyl: Left side works 2022-03-27 23:30:11 +02:00
Thomas Haukland 196074e57b The Vonreg works with bitbanging on pin B6 2022-03-22 22:12:14 +01:00
Thomas Haukland 07d68ed7a8 Keymap wip 2022-03-13 18:38:26 +01:00
Thomas Haukland 5f304e7e15 Accessible symbol layer and longer tap wait 2022-02-27 10:26:17 +01:00
Thomas Haukland 89c5bffdfc Fix missing G 2022-02-21 21:52:30 +01:00
Thomas Haukland 69a1130f87 Shift keys 2022-02-20 21:04:42 +01:00
Thomas Haukland b399abf528 Norwegian letters on layer 3 2022-02-06 21:33:44 +01:00
Thomas Haukland 32b56d7e27 Custom layout: first attempt 2022-02-06 16:33:08 +01:00
5828 changed files with 28731 additions and 92918 deletions
-1
View File
@@ -1 +0,0 @@
github: [manna-harbour]
+41
View File
@@ -0,0 +1,41 @@
name: Bug report
description: Create a report to help us improve QMK Firmware.
title: "[Bug] "
labels: ["bug", "help wanted"]
body:
- type: markdown
attributes:
value: |
Provide a general summary of the bug in the title above.
- type: textarea
attributes:
label: Describe the Bug
description: A clear and concise description of what the bug is.
- type: input
attributes:
label: Keyboard Used
description: The name of the keyboard from the `make` or `qmk compile`/`qmk flash` commands, eg. `planck/rev6`.
- type: input
attributes:
label: Link to product page (if applicable)
- type: input
attributes:
label: Operating System
- type: textarea
attributes:
label: qmk doctor Output
description: Output from running the `qmk doctor` command.
render: text
- type: checkboxes
attributes:
label: Is AutoHotKey / Karabiner installed
options:
- label: AutoHotKey (Windows)
- label: Karabiner (macOS)
- type: input
attributes:
label: Other keyboard-related software installed
- type: textarea
attributes:
label: Additional Context
description: Add any other relevant information about the problem here.
+8
View File
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: QMK Discord
url: https://discord.gg/Uq7gcHh
about: Ask questions, discuss issues and features. Chill.
- name: OLKB Subreddit
url: https://www.reddit.com/r/olkb
about: All things OLKB and QMK.
@@ -0,0 +1,24 @@
name: Feature request
description: Suggest a new feature or changes to existing features.
title: "[Feature Request] "
labels: ["enhancement", "help wanted"]
body:
- type: markdown
attributes:
value: |
Provide a general summary of the changes you want in the title above.
Please refrain from asking maintainers to add support for specific keyboards -- it is unlikely they will have hardware available, and will not be able to help.
Your best bet is to take the initiative, add support, then submit a PR yourself.
- type: checkboxes
attributes:
label: Feature Request Type
options:
- label: Core functionality
- label: Add-on hardware support (eg. audio, RGB, OLED screen, etc.)
- label: Alteration (enhancement/optimization) of existing feature(s)
- label: New behavior
- type: textarea
attributes:
label: Description
description: A few sentences describing what it is that you'd like to see in QMK. Additional information (such as links to spec sheets, licensing info, other related issues or PRs, etc) would be helpful.
+19
View File
@@ -0,0 +1,19 @@
name: Other issues
description: Anything else that doesn't fall into the above categories.
labels: ["help wanted", "question"]
body:
- type: markdown
attributes:
value: |
Provide a general summary of the changes you want in the title above.
- type: markdown
attributes:
value: |
Please check [https://docs.qmk.fm/#/support](https://docs.qmk.fm/#/support) for additional resources first. If that doesn't answer your question, choose the bug report template instead, as that may be more appropriate.
Please refrain from asking maintainers to add support for specific keyboards -- it is unlikely they will have hardware available, and will not be able to help.
Your best bet is to take the initiative, add support, then submit a PR yourself.
- type: textarea
attributes:
label: Issue Description
description: Describe your issue in as much detail as possible.
+11
View File
@@ -0,0 +1,11 @@
---
name: Blank issue
about: If you're 100% sure that you don't need one of the other issue templates, use
this one instead.
title: ''
labels: help wanted, question
assignees: ''
---
+35
View File
@@ -0,0 +1,35 @@
<!--- Provide a general summary of your changes in the title above. -->
<!--- This template is entirely optional and can be removed, but is here to help both you and us. -->
<!--- Anything on lines wrapped in comments like these will not show up in the final text. -->
## Description
<!--- Describe your changes in detail here. -->
## Types of Changes
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply. -->
- [ ] Core
- [ ] Bugfix
- [ ] New feature
- [ ] Enhancement/optimization
- [ ] Keyboard (addition or update)
- [ ] Keymap/layout/userspace (addition or update)
- [ ] Documentation
## Issues Fixed or Closed by This PR
*
## Checklist
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [ ] My code follows the code style of this project: [**C**](https://docs.qmk.fm/#/coding_conventions_c), [**Python**](https://docs.qmk.fm/#/coding_conventions_python)
- [ ] I have read the [**PR Checklist** document](https://docs.qmk.fm/#/pr_checklist) and have made the appropriate changes.
- [ ] My change requires a change to the documentation.
- [ ] I have updated the documentation accordingly.
- [ ] I have read the [**CONTRIBUTING** document](https://docs.qmk.fm/#/contributing).
- [ ] I have added tests to cover my changes.
- [ ] I have tested the changes and verified that they work and don't break anything (as well as I can manage).
+9
View File
@@ -0,0 +1,9 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
labels: CI
reviewers:
- "qmk/collaborators"
schedule:
interval: "daily"
+42
View File
@@ -0,0 +1,42 @@
core:
- quantum/**/*
- tmk_core/**/*
- drivers/**/*
- tests/**/*
- util/**/*
- platforms/**/*
- builddefs/**/*
- Makefile
- '*.mk'
dependencies:
- any:
- 'lib/**/*'
- '!lib/python/**/*'
keyboard:
- any:
- 'keyboards/**/*'
- '!keyboards/**/keymaps/**/*'
keymap:
- users/**/*
- layouts/**/*
- keyboards/**/keymaps/**/*
via:
- keyboards/**/keymaps/via/*
cli:
- requirements.txt
- lib/python/**/*
python:
- '**/*.py'
documentation:
- docs/**/*
translation:
- docs/fr-fr/**/*
- docs/es/**/*
- docs/ja/**/*
- docs/he-il/**/*
- docs/pt-br/**/*
- docs/zh-cn/**/*
- docs/de/**/*
- docs/ru-ru/**/*
CI:
- .github/**/*
+50
View File
@@ -0,0 +1,50 @@
name: Update API Data
permissions:
contents: read
on:
push:
branches:
- master
- develop
paths:
- 'keyboards/**'
- 'layouts/community/**'
- 'lib/python/**'
- 'data/**'
- '.github/workflows/api.yml'
workflow_dispatch:
jobs:
api_data:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
# protect against those who work in their fork on 'important' branches
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 1
persist-credentials: false
- name: Install dependencies
run: |
pip3 install -r requirements-dev.txt
- name: Generate API Data
run: |
qmk generate-api
- name: Upload API Data
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --follow-symlinks --delete
env:
AWS_S3_BUCKET: ${{ github.ref == 'refs/heads/develop' && secrets['API_SPACE_DEVELOP'] || secrets['API_SPACE_MASTER'] }}
AWS_ACCESS_KEY_ID: ${{ secrets.SPACES_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SPACES_SECRET_KEY }}
AWS_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
SOURCE_DIR: '.build/api_data'
+20
View File
@@ -0,0 +1,20 @@
name: Automatic Approve
permissions: {}
on:
schedule:
- cron: "*/5 * * * *"
jobs:
automatic_approve:
runs-on: ubuntu-latest
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: mheap/automatic-approve-action@v1
with:
token: ${{ secrets.QMK_BOT_TOKEN }}
workflows: "format.yml,lint.yml,unit_test.yml"
dangerous_files: "lib/python/,Makefile,paths.mk,builddefs/"
+37
View File
@@ -0,0 +1,37 @@
name: Essential files modified
permissions:
contents: write
on:
push:
branches:
- master
paths:
- builddefs/**/*
- drivers/**/*
- platforms/**/*
- quantum/**/*
- tests/**/*
- tmk_core/**/*
- util/**/*
- Makefile
- '*.mk'
jobs:
tag:
runs-on: ubuntu-latest
# protect against those who develop with their fork on master
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Bump version and push tag
uses: anothrNick/github-tag-action@1.61.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DEFAULT_BUMP: 'patch'
@@ -1,11 +0,0 @@
# Copyright 2021 Manna Harbour
# https://github.com/manna-harbour/miryoku
name: 'Build Example contra'
on:
- workflow_dispatch
jobs:
build:
uses: ./.github/workflows/main.yml
with:
keyboard: '["contra"]'
-11
View File
@@ -1,11 +0,0 @@
# Copyright 2021 Manna Harbour
# https://github.com/manna-harbour/miryoku
name: 'Build Example crkbd'
on:
- workflow_dispatch
jobs:
build:
uses: ./.github/workflows/main.yml
with:
keyboard: '["crkbd"]'
@@ -1,11 +0,0 @@
# Copyright 2021 Manna Harbour
# https://github.com/manna-harbour/miryoku
name: 'Build Example ergodox_ez'
on:
- workflow_dispatch
jobs:
build:
uses: ./.github/workflows/main.yml
with:
keyboard: '["ergodox_ez"]'
@@ -1,11 +0,0 @@
# Copyright 2021 Manna Harbour
# https://github.com/manna-harbour/miryoku
name: 'Build Example keebio/levinson'
on:
- workflow_dispatch
jobs:
build:
uses: ./.github/workflows/main.yml
with:
keyboard: '["keebio/levinson"]'
@@ -1,11 +0,0 @@
# Copyright 2021 Manna Harbour
# https://github.com/manna-harbour/miryoku
name: 'Build Example planck/rev6'
on:
- workflow_dispatch
jobs:
build:
uses: ./.github/workflows/main.yml
with:
keyboard: '["planck/rev6"]'
-12
View File
@@ -1,12 +0,0 @@
# Copyright 2022 Manna Harbour
# https://github.com/manna-harbour/miryoku
name: 'Build Example 𝑥MK'
on:
- workflow_dispatch
jobs:
build:
uses: ./.github/workflows/main.yml
with:
keyboard: '["converter/xmk"]'
merge: '["manna-harbour/qmk_firmware/xmk"]'
-113
View File
@@ -1,113 +0,0 @@
# Copyright 2021 Manna Harbour
# https://github.com/manna-harbour/miryoku
name: 'Build Inputs'
on:
workflow_dispatch:
inputs:
keyboard:
description: 'Keyboard'
required: true
alphas:
description: 'Miryoku Alphas'
required: false
default: 'default'
type: choice
options:
- "default"
- "AZERTY"
- "BEAKL15"
- "Colemak"
- "ColemakDHK"
- "Dvorak"
- "Halmak"
- "QWERTY"
- "QWERTZ"
- "Workman"
nav:
description: 'Miryoku Nav'
required: false
default: 'default'
type: choice
options:
- "default"
- "invertedT"
- "vi"
clipboard:
description: 'Miryoku Clipboard'
required: false
default: 'default'
type: choice
options:
- "default"
- "fun"
- "Mac"
- "Win"
layers:
description: 'Miryoku Layers'
required: false
default: 'default'
type: choice
options:
- "default"
- "flip"
mapping:
description: 'Miryoku Mapping'
required: false
default: 'default'
rules:
description: 'custom_rules.mk'
required: false
default: 'default'
custom_config:
description: 'custom_config.h'
required: false
default: 'default'
merge:
description: 'Merge QMK Branches'
required: false
default: 'default'
jobs:
process-inputs:
runs-on: ubuntu-latest
outputs:
keyboard: ${{ steps.process-inputs.outputs.keyboard }}
alphas: ${{ steps.process-inputs.outputs.alphas }}
nav: ${{ steps.process-inputs.outputs.nav }}
clipboard: ${{ steps.process-inputs.outputs.clipboard }}
layers: ${{ steps.process-inputs.outputs.layers }}
mapping: ${{ steps.process-inputs.outputs.mapping }}
rules: ${{ steps.process-inputs.outputs.rules }}
custom_config: ${{ steps.process-inputs.outputs.custom_config }}
merge: ${{ steps.process-inputs.outputs.merge }}
steps:
- name: Process inputs
id: process-inputs
run: |
set-output()
{
json=`echo "$2" | jq -cnR 'inputs | split(",";"")'`
echo "$1=$json" >> $GITHUB_OUTPUT
}
set-output "keyboard" "${{ github.event.inputs.keyboard }}"
set-output "alphas" "${{ github.event.inputs.alphas }}"
set-output "nav" "${{ github.event.inputs.nav }}"
set-output "clipboard" "${{ github.event.inputs.clipboard }}"
set-output "layers" "${{ github.event.inputs.layers }}"
set-output "mapping" "${{ github.event.inputs.mapping }}"
set-output "rules" "${{ github.event.inputs.rules }}"
set-output "custom_config" "${{ github.event.inputs.custom_config }}"
set-output "merge" "${{ github.event.inputs.merge }}"
build:
uses: ./.github/workflows/main.yml
needs: process-inputs
with:
keyboard: ${{ needs.process-inputs.outputs.keyboard }}
alphas: ${{ needs.process-inputs.outputs.alphas }}
nav: ${{ needs.process-inputs.outputs.nav }}
clipboard: ${{ needs.process-inputs.outputs.clipboard }}
layers: ${{ needs.process-inputs.outputs.layers }}
mapping: ${{ needs.process-inputs.outputs.mapping }}
rules: ${{ needs.process-inputs.outputs.rules }}
custom_config: ${{ needs.process-inputs.outputs.custom_config }}
merge: ${{ needs.process-inputs.outputs.merge }}
+40
View File
@@ -0,0 +1,40 @@
name: CI Builds
permissions:
contents: read
on:
push:
branches:
- master
- develop
jobs:
ci_builds:
name: "CI Build"
runs-on: self-hosted
timeout-minutes: 1380
if: github.repository == 'qmk/qmk_firmware'
strategy:
matrix:
keymap:
- default
- via
container: qmkfm/qmk_cli
steps:
- name: Disable safe.directory check
run : git config --global --add safe.directory '*'
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Install dependencies
run: pip3 install -r requirements.txt
- name: Run `qmk mass-compile` (keymap ${{ matrix.keymap }})
run: qmk mass-compile -j $(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null) -km ${{ matrix.keymap }}
+34
View File
@@ -0,0 +1,34 @@
name: CLI CI
permissions:
contents: read
on:
push:
branches:
- master
- develop
pull_request:
paths:
- 'lib/python/**'
- 'requirements.txt'
- '.github/workflows/cli.yml'
jobs:
test:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
steps:
- name: Disable safe.directory check
run : git config --global --add safe.directory '*'
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Install dependencies
run: pip3 install -r requirements-dev.txt
- name: Run tests
run: qmk pytest
+37
View File
@@ -0,0 +1,37 @@
name: Update develop after master merge
permissions:
contents: write
on:
push:
branches:
- master
jobs:
develop_update:
runs-on: ubuntu-latest
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: actions/checkout@v3
with:
token: ${{ secrets.QMK_BOT_TOKEN }}
fetch-depth: 0
- name: Disable automatic eol conversion
run: |
echo "* -text" > .git/info/attributes
- name: Checkout develop
run: |
git fetch origin master develop
git checkout develop
- name: Update develop from master
run: |
git config --global user.name "QMK Bot"
git config --global user.email "hello@qmk.fm"
git merge origin/master
git push origin develop
+46
View File
@@ -0,0 +1,46 @@
name: Generate Docs
permissions:
contents: write
on:
push:
branches:
- master
paths:
- 'tmk_core/**'
- 'quantum/**'
- 'platforms/**'
- 'docs/**'
- '.github/workflows/docs.yml'
jobs:
generate:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
# protect against those who develop with their fork on master
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 1
- name: Install dependencies
run: |
apt-get update && apt-get install -y rsync nodejs npm doxygen
npm install -g moxygen
- name: Build docs
run: |
qmk --verbose generate-docs
- name: Deploy
uses: JamesIves/github-pages-deploy-action@v4.4.1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BASE_BRANCH: master
BRANCH: gh-pages
FOLDER: .build/docs
GIT_CONFIG_EMAIL: hello@qmk.fm
@@ -0,0 +1,42 @@
name: Update feature branches after develop merge
permissions:
contents: write
on:
push:
branches:
- develop
jobs:
feature_branch_update:
runs-on: ubuntu-latest
if: github.repository == 'qmk/qmk_firmware'
strategy:
matrix:
branch:
- xap
steps:
- uses: actions/checkout@v3
with:
token: ${{ secrets.QMK_BOT_TOKEN }}
fetch-depth: 0
- name: Disable automatic eol conversion
run: |
echo "* -text" > .git/info/attributes
- name: Checkout branch
run: |
git fetch origin develop ${{ matrix.branch }}
git checkout ${{ matrix.branch }}
- name: Update branch from develop
run: |
git config --global user.name "QMK Bot"
git config --global user.email "hello@qmk.fm"
git merge origin/develop
git push origin ${{ matrix.branch }}
+55
View File
@@ -0,0 +1,55 @@
name: PR Lint Format
permissions:
contents: read
on:
pull_request:
paths:
- 'drivers/**'
- 'lib/arm_atsam/**'
- 'lib/lib8tion/**'
- 'lib/python/**'
- 'platforms/**'
- 'quantum/**'
- 'tests/**'
- 'tmk_core/**'
jobs:
lint:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
steps:
- name: Disable safe.directory check
run : git config --global --add safe.directory '*'
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Install dependencies
run: |
pip3 install -r requirements-dev.txt
- name: Get changed files
id: file_changes
uses: tj-actions/changed-files@v35
- name: Run qmk formatters
shell: 'bash {0}'
run: |
echo '${{ steps.file_changes.outputs.added_files}}' '${{ steps.file_changes.outputs.modified_files}}' > ~/files_changed.txt
qmk format-c --core-only $(< ~/files_changed.txt) || true
qmk format-python $(< ~/files_changed.txt) || true
qmk format-text $(< ~/files_changed.txt) || true
- name: Fail when formatting required
run: |
git diff
for file in $(git diff --name-only); do
echo "File '${file}' Requires Formatting"
echo "::error file=${file}::Requires Formatting"
done
test -z "$(git diff --name-only)"
+59
View File
@@ -0,0 +1,59 @@
name: Lint Format
permissions:
contents: read
on:
push:
branches:
- master
- develop
jobs:
lint:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
steps:
- name: Disable safe.directory check
run : git config --global --add safe.directory '*'
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Disable automatic eol conversion
run: |
echo "* -text" > .git/info/attributes
- name: Install dependencies
run: |
pip3 install -r requirements-dev.txt
- name: Run qmk formatters
shell: 'bash {0}'
run: |
qmk format-c -a
qmk format-python -a
qmk format-text -a
git diff
- uses: rlespinasse/github-slug-action@v3.x
- name: Become QMK Bot
run: |
git config user.name 'QMK Bot'
git config user.email 'hello@qmk.fm'
- name: Create Pull Request
uses: peter-evans/create-pull-request@v4
if: ${{ github.repository == 'qmk/qmk_firmware'}}
with:
token: ${{ secrets.QMK_BOT_TOKEN }}
delete-branch: true
branch: bugfix/format_${{ env.GITHUB_REF_SLUG }}
author: QMK Bot <hello@qmk.fm>
committer: QMK Bot <hello@qmk.fm>
commit-message: Format code according to conventions
title: '[CI] Format code according to conventions'
+18
View File
@@ -0,0 +1,18 @@
name: "Pull Request Labeler"
permissions:
contents: read
pull-requests: write
on:
pull_request_target:
types: [opened, synchronize, reopened, ready_for_review, locked]
jobs:
triage:
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@main
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
configuration-path: '.github/labeler.yml'
+74
View File
@@ -0,0 +1,74 @@
name: PR Lint keyboards
permissions:
contents: read
on:
pull_request:
paths:
- 'keyboards/**'
jobs:
lint:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
steps:
- name: Disable safe.directory check
run : git config --global --add safe.directory '*'
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Install dependencies
run: pip3 install -r requirements-dev.txt
- name: Get changed files
id: file_changes
uses: tj-actions/changed-files@v35
- name: Print info
run: |
git rev-parse --short HEAD
echo ${{ github.event.pull_request.base.sha }}
echo '${{ steps.file_changes.outputs.all_changed_files}}'
- name: Run qmk lint
shell: 'bash {0}'
run: |
QMK_CHANGES=$(echo -e '${{ steps.file_changes.outputs.all_changed_files}}' | sed 's/ /\n/g')
QMK_KEYBOARDS=$(qmk list-keyboards)
exit_code=0
for KB in $QMK_KEYBOARDS; do
KEYBOARD_CHANGES=$(echo "$QMK_CHANGES" | grep -E '^(keyboards/'${KB}'/)')
if [[ -z "$KEYBOARD_CHANGES" ]]; then
# skip as no changes for this keyboard
continue
fi
KEYMAP_ONLY=$(echo "$KEYBOARD_CHANGES" | grep -cv /keymaps/)
if [[ $KEYMAP_ONLY -gt 0 ]]; then
echo "linting ${KB}"
qmk lint --keyboard ${KB} && qmk info -l --keyboard ${KB}
exit_code=$(($exit_code + $?))
fi
done
qmk format-text ${{ steps.file_changes.outputs.all_changed_files}} || true
for file in ${{ steps.file_changes.outputs.all_changed_files}}; do
if ! git diff --quiet $file; then
echo "File '${file}' Requires Formatting"
echo "::error file=${file}::Requires Formatting"
exit_code=$(($exit_code + 1))
fi
done
if [[ $exit_code -gt 255 ]]; then
exit 255
fi
exit $exit_code
-126
View File
@@ -1,126 +0,0 @@
# Copyright 2021 Manna Harbour
# https://github.com/manna-harbour/miryoku
name: 'Main'
on:
workflow_call:
inputs:
keyboard:
type: string
default: '["default"]'
alphas:
type: string
default: '["default"]'
nav:
type: string
default: '["default"]'
clipboard:
type: string
default: '["default"]'
layers:
type: string
default: '["default"]'
mapping:
type: string
default: '["default"]'
rules:
type: string
default: '["default"]'
custom_config:
type: string
default: '["default"]'
merge:
type: string
default: '["default"]'
jobs:
main:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
strategy:
fail-fast: false
matrix:
keyboard: ${{ fromJSON(inputs.keyboard) }}
alphas: ${{ fromJSON(inputs.alphas) }}
nav: ${{ fromJSON(inputs.nav) }}
clipboard: ${{ fromJSON(inputs.clipboard) }}
layers: ${{ fromJSON(inputs.layers) }}
mapping: ${{ fromJSON(inputs.mapping) }}
rules: ${{ fromJSON(inputs.rules) }}
custom_config: ${{ fromJSON(inputs.custom_config) }}
merge: ${{ fromJSON(inputs.merge) }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Merge branches
if: ${{ matrix.merge != '' && matrix.merge != 'default' }}
run: |
git config --global --add safe.directory '*'
git config user.name "${GITHUB_ACTOR}"
git config user.email "${GITHUB_ACTOR}@users.noreply.github.com"
git fetch --unshallow
revert=`git log --grep='^\[miryoku-github\]' --pretty='format:%H' | tr '\n' ' '`
git revert $revert
for merge in ${{ matrix.merge }}
do
user=`echo "$merge" | cut -f 1 -d '/'`
repo=`echo "$merge" | cut -f 2 -d '/'`
branch=`echo "$merge" | cut -f 3- -d '/'`
remote="$user-$repo"
git remote add "$remote" "https://github.com/$user/$repo.git"
git fetch "$remote" "$branch"
git merge "$remote/$branch"
git remote remove "$remote"
git status
done
- name: Submodules
run: |
git config --global --add safe.directory '*'
make git-submodule
- name: Process inputs
id: inputs
run: |
artifact_dir="artifacts"
mkdir "$artifact_dir"
user='users/manna-harbour_miryoku'
rules="$user/custom_rules.mk"
config="$user/custom_config.h"
artifact_build_name=`echo "miryoku_qmk ${{ matrix.keyboard }}" | tr '/' '_'`
for option in "alphas=${{ matrix.alphas }}" "nav=${{ matrix.nav }}" "clipboard=${{ matrix.clipboard }}" "layers=${{ matrix.layers }}" "mapping=${{ matrix.mapping }}"
do
if ! expr "$option" : '.*=default$'
then
artifact_build_name="$artifact_build_name "`echo "$option" | tr '=' '_'`
option=`echo "MIRYOKU_$option" | tr 'a-z' 'A-Z'`
echo "$option" >> "$rules"
fi
done
if [ -n "${{ matrix.rules }}" -a "${{ matrix.rules }}" != 'default' ]
then
artifact_build_name="$artifact_build_name rules_"`echo "${{ matrix.rules }}" | md5sum | cut -d ' ' -f 1`
echo "${{ matrix.rules }}" >> "$rules"
fi
if [ -n "${{ matrix.custom_config }}" -a "${{ matrix.custom_config }}" != 'default' ]
then
artifact_build_name="$artifact_build_name config_"`echo "${{ matrix.custom_config }}" | md5sum | cut -d ' ' -f 1`
echo "${{ matrix.custom_config }}" >> "$config"
fi
cp "$rules" "$config" "$artifact_dir"
if [ -n "${{ matrix.merge }}" -a "${{ matrix.merge }}" != 'default' ]
then
artifact_build_name="$artifact_build_name merge_"`echo "${{ matrix.merge }}" | md5sum | cut -d ' ' -f 1`
fi
artifact_build_name=`echo $artifact_build_name | tr ' ' '-'`
echo "artifact_build_name=$artifact_build_name" >> $GITHUB_OUTPUT
echo "artifact_dir=$artifact_dir" >> $GITHUB_OUTPUT
- name: Build
run: qmk compile -kb ${{ matrix.keyboard }} -km manna-harbour_miryoku
- name: Copy firmware
run: |
cp *manna-harbour_miryoku* "${{ steps.inputs.outputs.artifact_dir }}"
- name: Archive artifacts
uses: actions/upload-artifact@v3
with:
name: ${{ steps.inputs.outputs.artifact_build_name }}
path: ${{ steps.inputs.outputs.artifact_dir }}
continue-on-error: true
+36
View File
@@ -0,0 +1,36 @@
name: PR Regenerate Files
permissions:
contents: read
on:
pull_request:
paths:
- 'data/constants/**'
- 'lib/python/**'
jobs:
regen:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
steps:
- name: Disable safe.directory check
run : git config --global --add safe.directory '*'
- uses: actions/checkout@v3
- name: Run qmk generators
run: |
util/regen.sh
git diff
- name: Fail when regeneration required
run: |
git diff
for file in $(git diff --name-only); do
echo "File '${file}' Requires Regeneration"
echo "::error file=${file}::Requires Regeneration"
done
test -z "$(git diff --name-only)"
+46
View File
@@ -0,0 +1,46 @@
name: Regenerate Files
permissions:
contents: write
on:
push:
branches:
- master
- develop
jobs:
regen:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
steps:
- name: Disable safe.directory check
run : git config --global --add safe.directory '*'
- uses: actions/checkout@v3
- name: Run qmk generators
run: |
util/regen.sh
git diff
- uses: rlespinasse/github-slug-action@v3.x
- name: Become QMK Bot
run: |
git config user.name 'QMK Bot'
git config user.email 'hello@qmk.fm'
- name: Create Pull Request
uses: peter-evans/create-pull-request@v4
if: ${{ github.repository == 'qmk/qmk_firmware'}}
with:
token: ${{ secrets.QMK_BOT_TOKEN }}
delete-branch: true
branch: bugfix/regen_${{ env.GITHUB_REF_SLUG }}
author: QMK Bot <hello@qmk.fm>
committer: QMK Bot <hello@qmk.fm>
commit-message: Regenerate Files
title: '[CI] Regenerate Files'
+65
View File
@@ -0,0 +1,65 @@
name: 'Close stale issues and PRs'
permissions:
issues: write
pull-requests: write
on:
schedule:
- cron: '30 1 * * *'
workflow_dispatch:
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v7
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
remove-stale-when-updated: true
exempt-draft-pr: true
ascending: true
operations-per-run: 150
stale-issue-label: stale
days-before-issue-stale: 90
days-before-issue-close: 30
exempt-issue-labels: bug,in progress,on hold,discussion,to do
stale-issue-message: >
This issue has been automatically marked as stale because it has not had activity in the
last 90 days. It will be closed in the next 30 days unless it is tagged properly or other activity
occurs.
For maintainers: Please label with `bug`, `in progress`, `on hold`, `discussion` or `to do` to prevent
the issue from being re-flagged.
close-issue-message: >
This issue has been automatically closed because it has not had activity in the last 30 days.
If this issue is still valid, re-open the issue and let us know.
// [stale-action-closed]
stale-pr-label: stale
days-before-pr-stale: 45
days-before-pr-close: 30
exempt-pr-labels: bug,awaiting review,breaking_change,in progress,on hold
stale-pr-message: >
Thank you for your contribution!
This pull request has been automatically marked as stale because it has not had
activity in the last 45 days. It will be closed in 30 days if no further activity occurs.
Please feel free to give a status update now, or re-open when it's ready.
For maintainers: Please label with `bug`, `awaiting review`, `breaking_change`, `in progress`, or `on hold`
to prevent the issue from being re-flagged.
close-pr-message: >
Thank you for your contribution!
This pull request has been automatically closed because it has not had activity in the last 30 days.
Please feel free to give a status update now, ping for review, or re-open when it's ready.
// [stale-action-closed]
-38
View File
@@ -1,38 +0,0 @@
# Copyright 2021 Manna Harbour
# https://github.com/manna-harbour/miryoku
name: 'Test All Configs'
on:
- workflow_dispatch
jobs:
build:
if: github.repository_owner == 'manna-harbour'
uses: ./.github/workflows/main.yml
with:
keyboard: '["crkbd"]'
alphas: '[
"default",
"azerty",
"colemak",
"colemakdhk",
"dvorak",
"halmak",
"workman",
"qwerty",
"qwertz"
]'
nav: '[
"default",
"vi",
"invertedt"
]'
clipboard: '[
"default",
"fun",
"mac",
"win"
]'
layers: '[
"default",
"flip"
]'
-14
View File
@@ -1,14 +0,0 @@
# Copyright 2021 Manna Harbour
# https://github.com/manna-harbour/miryoku
name: 'Test Build'
on:
push:
pull_request:
workflow_dispatch:
jobs:
build:
if: github.repository_owner == 'manna-harbour'
uses: ./.github/workflows/main.yml
with:
keyboard: '["crkbd"]'
-86
View File
@@ -1,86 +0,0 @@
# Copyright 2021 Manna Harbour
# https://github.com/manna-harbour/miryoku
name: 'Test Inputs'
on:
workflow_dispatch:
inputs:
keyboard:
description: 'Keyboard'
required: true
alphas:
description: 'Miryoku Alphas'
required: false
default: 'default'
nav:
description: 'Miryoku Nav'
required: false
default: 'default'
clipboard:
description: 'Miryoku Clipboard'
required: false
default: 'default'
layers:
description: 'Miryoku Layers'
required: false
default: 'default'
mapping:
description: 'Miryoku Mapping'
required: false
default: 'default'
rules:
description: 'custom_rules.mk'
required: false
default: 'default'
custom_config:
description: 'custom_config.h'
required: false
default: 'default'
merge:
description: 'Merge QMK Branches'
required: false
default: 'default'
jobs:
process-inputs:
runs-on: ubuntu-latest
outputs:
keyboard: ${{ steps.process-inputs.outputs.keyboard }}
alphas: ${{ steps.process-inputs.outputs.alphas }}
nav: ${{ steps.process-inputs.outputs.nav }}
clipboard: ${{ steps.process-inputs.outputs.clipboard }}
layers: ${{ steps.process-inputs.outputs.layers }}
mapping: ${{ steps.process-inputs.outputs.mapping }}
rules: ${{ steps.process-inputs.outputs.rules }}
custom_config: ${{ steps.process-inputs.outputs.custom_config }}
merge: ${{ steps.process-inputs.outputs.merge }}
steps:
- name: Process inputs
id: process-inputs
run: |
set-output()
{
json=`echo "$2" | jq -cnR 'inputs | split(",";"")'`
echo "$1=$json" >> $GITHUB_OUTPUT
}
set-output "keyboard" "${{ github.event.inputs.keyboard }}"
set-output "alphas" "${{ github.event.inputs.alphas }}"
set-output "nav" "${{ github.event.inputs.nav }}"
set-output "clipboard" "${{ github.event.inputs.clipboard }}"
set-output "layers" "${{ github.event.inputs.layers }}"
set-output "mapping" "${{ github.event.inputs.mapping }}"
set-output "rules" "${{ github.event.inputs.rules }}"
set-output "custom_config" "${{ github.event.inputs.custom_config }}"
set-output "merge" "${{ github.event.inputs.merge }}"
build:
uses: ./.github/workflows/main.yml
needs: process-inputs
with:
keyboard: ${{ needs.process-inputs.outputs.keyboard }}
alphas: ${{ needs.process-inputs.outputs.alphas }}
nav: ${{ needs.process-inputs.outputs.nav }}
clipboard: ${{ needs.process-inputs.outputs.clipboard }}
layers: ${{ needs.process-inputs.outputs.layers }}
mapping: ${{ needs.process-inputs.outputs.mapping }}
rules: ${{ needs.process-inputs.outputs.rules }}
custom_config: ${{ needs.process-inputs.outputs.custom_config }}
merge: ${{ needs.process-inputs.outputs.merge }}
-16
View File
@@ -1,16 +0,0 @@
# Copyright 2022 Manna Harbour
# https://github.com/manna-harbour/miryoku
name: 'Test Merge'
on:
workflow_dispatch:
jobs:
build:
if: github.repository_owner == 'manna-harbour'
uses: ./.github/workflows/main.yml
with:
keyboard: '["crkbd"]'
merge: '[
"qmk/qmk_firmware/master",
"qmk/qmk_firmware/develop"
]'
+35
View File
@@ -0,0 +1,35 @@
name: Unit Tests
permissions:
contents: read
on:
push:
branches:
- master
- develop
pull_request:
paths:
- 'builddefs/**'
- 'quantum/**'
- 'platforms/**'
- 'tmk_core/**'
- 'tests/**'
- '*.mk'
- 'Makefile'
- '.github/workflows/unit_test.yml'
jobs:
test:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Install dependencies
run: pip3 install -r requirements-dev.txt
- name: Run tests
run: make test:all
-4
View File
@@ -30,9 +30,6 @@ quantum/version.h
*.qmk *.qmk
*.uf2 *.uf2
# DD config at wrong location
/keyboards/**/keymaps/*/info.json
# Old-style QMK Makefiles # Old-style QMK Makefiles
/keyboards/**/Makefile /keyboards/**/Makefile
@@ -48,7 +45,6 @@ quantum/version.h
.idea/ .idea/
.project .project
.settings/ .settings/
.vagrant/
# ? # ?
.dep .dep
Vendored
-95
View File
@@ -1,95 +0,0 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
# define a name instead of just 'default'
config.vm.define "qmk_firmware"
# VMware/Virtualbox ( and also Hyperv/Parallels) 64 bit
config.vm.box = "generic/debian10"
config.vm.synced_folder '.', '/vagrant'
# This section allows you to customize the Virtualbox VM
# settings, ie showing the GUI or upping the memory
# or cores if desired
config.vm.provider "virtualbox" do |vb|
# Hide the VirtualBox GUI when booting the machine
vb.gui = false
# Uncomment the below lines if you want to program
# your Teensy via the VM rather than your host OS
#vb.customize ['modifyvm', :id, '--usb', 'on']
#vb.customize ['usbfilter', 'add', '0',
# '--target', :id,
# '--name', 'teensy',
# '--vendorid', '0x16c0',
# '--productid','0x0478'
# ]
# Customize the amount of memory on the VM:
vb.memory = "512"
# Uncomment the below lines if you have time sync
# issues with make and incremental builds
#vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 1000 ]
end
# This section allows you to customize the VMware VM
# settings, ie showing the GUI or upping the memory
# or cores if desired
config.vm.provider "vmware_workstation" do |vmw|
# Hide the VMware GUI when booting the machine
vmw.gui = false
# Customize the amount of memory on the VM:
vmw.memory = "512"
end
config.vm.provider "vmware_fusion" do |vmf|
# Hide the vmfare GUI when booting the machine
vmf.gui = false
# Customize the amount of memory on the VM:
vmf.memory = "512"
end
# Docker provider pulls from hub.docker.com respecting docker.image if
# config.vm.box is nil. In this case, we adhoc build util/vagrant/Dockerfile.
# Note that this bind-mounts from the current dir to
# /vagrant in the guest, so unless your UID is 1000 to match vagrant in the
# image, you'll need to: chmod -R a+rw .
config.vm.provider "docker" do |docker, override|
override.vm.box = nil
docker.build_dir = "util/vagrant"
docker.has_ssh = true
end
# Unless we are running the docker container directly
# 1. run container detached on vm
# 2. attach on 'vagrant ssh'
["virtualbox", "vmware_workstation", "vmware_fusion"].each do |type|
config.vm.provider type do |virt, override|
override.vm.provision "docker" do |d|
d.run "qmkfm/qmk_cli",
cmd: "tail -f /dev/null",
args: "--privileged -v /dev:/dev -v '/vagrant:/vagrant'"
end
override.vm.provision "shell", inline: <<-SHELL
echo 'docker restart qmkfm-qmk_cli && exec docker exec -it qmkfm-qmk_cli /bin/bash -l' >> ~vagrant/.bashrc
SHELL
end
end
config.vm.post_up_message = <<-EOT
Log into the environment using 'vagrant ssh'. QMK directory synchronized with
host is located at /vagrant
To compile the .hex files use make command inside this directory, e.g.
cd /vagrant
make <keyboard>:default
Examples:
make planck/rev4:default:dfu
make planck/rev4:default
EOT
end
-5
View File
@@ -29,11 +29,6 @@ KEYBOARD_FILESAFE := $(subst /,_,$(KEYBOARD))
TARGET ?= $(KEYBOARD_FILESAFE)_$(KEYMAP) TARGET ?= $(KEYBOARD_FILESAFE)_$(KEYMAP)
KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD_FILESAFE) KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD_FILESAFE)
ifeq ($(strip $(DUMP_CI_METADATA)),yes)
$(info CI Metadata: KEYBOARD=$(KEYBOARD))
$(info CI Metadata: KEYMAP=$(KEYMAP))
endif
# Force expansion # Force expansion
TARGET := $(TARGET) TARGET := $(TARGET)
+8 -3
View File
@@ -7,7 +7,12 @@ endif
# TODO: opt in rather than assume everything uses a pro micro # TODO: opt in rather than assume everything uses a pro micro
PIN_COMPATIBLE ?= promicro PIN_COMPATIBLE ?= promicro
# Remove whitespace from any rule.mk provided vars
# - env cannot be overwritten but cannot have whitespace anyway
CONVERT_TO:=$(strip $(CONVERT_TO))
ifneq ($(CONVERT_TO),) ifneq ($(CONVERT_TO),)
# stash so we can overwrite env provided vars if needed # stash so we can overwrite env provided vars if needed
ACTIVE_CONVERTER=$(CONVERT_TO) ACTIVE_CONVERTER=$(CONVERT_TO)
@@ -23,13 +28,13 @@ ifneq ($(CONVERT_TO),)
TARGET := $(TARGET)_$(CONVERT_TO) TARGET := $(TARGET)_$(CONVERT_TO)
# Configure any defaults # Configure any defaults
OPT_DEFS += -DCONVERT_TO_$(strip $(shell echo $(CONVERT_TO) | tr '[:lower:]' '[:upper:]')) OPT_DEFS += -DCONVERT_TO_$(shell echo $(CONVERT_TO) | tr '[:lower:]' '[:upper:]')
OPT_DEFS += -DCONVERTER_TARGET=\"$(strip $(CONVERT_TO))\" OPT_DEFS += -DCONVERTER_TARGET=\"$(CONVERT_TO)\"
OPT_DEFS += -DCONVERTER_ENABLED OPT_DEFS += -DCONVERTER_ENABLED
VPATH += $(CONVERTER) VPATH += $(CONVERTER)
# Configure for "alias" - worst case it produces an idential define # Configure for "alias" - worst case it produces an idential define
OPT_DEFS += -DCONVERT_TO_$(strip $(shell echo $(ACTIVE_CONVERTER) | tr '[:lower:]' '[:upper:]')) OPT_DEFS += -DCONVERT_TO_$(shell echo $(ACTIVE_CONVERTER) | tr '[:lower:]' '[:upper:]')
# Finally run any converter specific logic # Finally run any converter specific logic
include $(CONVERTER)/converter.mk include $(CONVERTER)/converter.mk
@@ -253,7 +253,7 @@
"0x002F": { "0x002F": {
"group": "basic", "group": "basic",
"key": "KC_LEFT_BRACKET", "key": "KC_LEFT_BRACKET",
"label": "[", "label": "]",
"aliases": [ "aliases": [
"KC_LBRC" "KC_LBRC"
] ]
@@ -261,7 +261,7 @@
"0x0030": { "0x0030": {
"group": "basic", "group": "basic",
"key": "KC_RIGHT_BRACKET", "key": "KC_RIGHT_BRACKET",
"label": "]", "label": "[",
"aliases": [ "aliases": [
"KC_RBRC" "KC_RBRC"
] ]
@@ -1512,4 +1512,4 @@
] ]
} }
} }
} }
+5
View File
@@ -74,6 +74,11 @@
"processor": "RP2040", "processor": "RP2040",
"bootloader": "rp2040", "bootloader": "rp2040",
"board": "QMK_PM2040" "board": "QMK_PM2040"
},
"liatris": {
"processor": "RP2040",
"bootloader": "rp2040",
"board": "QMK_PM2040"
} }
} }
} }
+1 -1
View File
@@ -35,7 +35,7 @@
}, },
"development_board": { "development_board": {
"type": "string", "type": "string",
"enum": ["promicro", "elite_c", "elite_pi", "proton_c", "kb2040", "promicro_rp2040", "blok", "michi", "bit_c_pro", "stemcell", "bluepill", "blackpill_f401", "blackpill_f411", "bonsai_c4", "helios"] "enum": ["promicro", "elite_c", "elite_pi", "proton_c", "kb2040", "promicro_rp2040", "blok", "michi", "bit_c_pro", "stemcell", "bluepill", "blackpill_f401", "blackpill_f411", "bonsai_c4", "helios", "liatris"]
}, },
"pin_compatible": { "pin_compatible": {
"type": "string", "type": "string",
-1
View File
@@ -41,7 +41,6 @@
* [Keymap Overview](keymap.md) * [Keymap Overview](keymap.md)
* Development Environments * Development Environments
* [Docker Guide](getting_started_docker.md) * [Docker Guide](getting_started_docker.md)
* [Vagrant Guide](getting_started_vagrant.md)
* Flashing * Flashing
* [Flashing](flashing.md) * [Flashing](flashing.md)
* [Flashing ATmega32A (ps2avrgb)](flashing_bootloadhid.md) * [Flashing ATmega32A (ps2avrgb)](flashing_bootloadhid.md)
+7 -36
View File
@@ -20,7 +20,7 @@ qmk compile [-c] <configuratorExport.json>
qmk compile [-c] [-e <var>=<value>] [-j <num_jobs>] -kb <keyboard_name> -km <keymap_name> qmk compile [-c] [-e <var>=<value>] [-j <num_jobs>] -kb <keyboard_name> -km <keymap_name>
``` ```
**Usage in Keyboard Directory**: **Usage in Keyboard Directory**:
Must be in keyboard directory with a default keymap, or in keymap directory for keyboard, or supply one with `--keymap <keymap_name>` Must be in keyboard directory with a default keymap, or in keymap directory for keyboard, or supply one with `--keymap <keymap_name>`
``` ```
@@ -44,7 +44,7 @@ $ qmk compile
or with optional keymap argument or with optional keymap argument
``` ```
$ cd ~/qmk_firmware/keyboards/clueboard/66/rev4 $ cd ~/qmk_firmware/keyboards/clueboard/66/rev4
$ qmk compile -km 66_iso $ qmk compile -km 66_iso
Ψ Compiling keymap with make clueboard/66/rev4:66_iso Ψ Compiling keymap with make clueboard/66/rev4:66_iso
... ...
@@ -58,7 +58,7 @@ $ qmk compile
... ...
``` ```
**Usage in Layout Directory**: **Usage in Layout Directory**:
Must be under `qmk_firmware/layouts/`, and in a keymap folder. Must be under `qmk_firmware/layouts/`, and in a keymap folder.
``` ```
@@ -149,34 +149,6 @@ To exit out into the parent shell, simply type `exit`.
qmk cd qmk cd
``` ```
## `qmk find`
This command allows for searching through keyboard/keymap targets, filtering by specific criteria. `info.json` and `rules.mk` files contribute to the search data, as well as keymap configurations, and the results can be filtered using "dotty" syntax matching the overall `info.json` file format.
For example, one could search for all keyboards using STM32F411:
```
qmk find -f 'processor=STM32F411'
```
...and one can further constrain the list to keyboards using STM32F411 as well as rgb_matrix support:
```
qmk find -f 'processor=STM32F411' -f 'features.rgb_matrix=true'
```
**Usage**:
```
qmk find [-h] [-km KEYMAP] [-f FILTER]
options:
-km KEYMAP, --keymap KEYMAP
The keymap name to build. Default is 'default'.
-f FILTER, --filter FILTER
Filter the list of keyboards based on the supplied value in rules.mk. Matches info.json structure, and accepts the formats 'features.rgblight=true' or 'exists(matrix_pins.direct)'. May be passed multiple times, all filters need to match. Value may include wildcards such as '*' and '?'.
```
## `qmk console` ## `qmk console`
This command lets you connect to keyboard consoles to get debugging messages. It only works if your keyboard firmware has been compiled with `CONSOLE_ENABLE=yes`. This command lets you connect to keyboard consoles to get debugging messages. It only works if your keyboard firmware has been compiled with `CONSOLE_ENABLE=yes`.
@@ -297,8 +269,7 @@ qmk json2c [-o OUTPUT] filename
## `qmk c2json` ## `qmk c2json`
Creates a keymap.json from a keymap.c. Creates a keymap.json from a keymap.c.
**Note:** Parsing C source files is not easy, therefore this subcommand may not work with your keymap. In some cases not using the C pre-processor helps. **Note:** Parsing C source files is not easy, therefore this subcommand may not work with your keymap. In some cases not using the C pre-processor helps.
**Usage**: **Usage**:
@@ -471,7 +442,7 @@ $ qmk import-kbfirmware ~/Downloads/gh62.json
## `qmk format-text` ## `qmk format-text`
This command formats text files to have proper line endings. This command formats text files to have proper line endings.
Every text file in the repository needs to have Unix (LF) line ending. Every text file in the repository needs to have Unix (LF) line ending.
If you are working on **Windows**, you must ensure that line endings are corrected in order to get your PRs merged. If you are working on **Windows**, you must ensure that line endings are corrected in order to get your PRs merged.
@@ -482,7 +453,7 @@ qmk format-text
## `qmk format-c` ## `qmk format-c`
This command formats C code using clang-format. This command formats C code using clang-format.
Run it with no arguments to format all core code that has been changed. Default checks `origin/master` with `git diff`, branch can be changed using `-b <branch_name>` Run it with no arguments to format all core code that has been changed. Default checks `origin/master` with `git diff`, branch can be changed using `-b <branch_name>`
@@ -585,7 +556,7 @@ qmk kle2json [-f] <filename>
**Examples**: **Examples**:
``` ```
$ qmk kle2json kle.txt $ qmk kle2json kle.txt
☒ File info.json already exists, use -f or --force to overwrite. ☒ File info.json already exists, use -f or --force to overwrite.
``` ```
+1 -57
View File
@@ -202,62 +202,6 @@ This function gets called at the end of all QMK processing, before starting the
Similar to `matrix_scan_*`, these are called as often as the MCU can handle. To keep your board responsive, it's suggested to do as little as possible during these function calls, potentially throtting their behaviour if you do indeed require implementing something special. Similar to `matrix_scan_*`, these are called as often as the MCU can handle. To keep your board responsive, it's suggested to do as little as possible during these function calls, potentially throtting their behaviour if you do indeed require implementing something special.
### Example `void housekeeping_task_user(void)` implementation
This example will show you how to use `void housekeeping_task_user(void)` to turn off [RGB Light](feature_rgblight.md). For RGB Matrix, the [builtin](https://docs.qmk.fm/#/feature_rgb_matrix?id=additional-configh-options) `RGB_MATRIX_TIMEOUT` should be used.
First, add the following lines to your keymap's `config.h`:
```c
#define RGBLIGHT_SLEEP // enable rgblight_suspend() and rgblight_wakeup() in keymap.c
#define RGBLIGHT_TIMEOUT 900000 // ms to wait until rgblight time out, 900K ms is 15min.
```
Next, add the following code to your `keymap.c`:
```c
static uint32_t key_timer; // timer for last keyboard activity, use 32bit value and function to make longer idle time possible
static void refresh_rgb(void); // refreshes the activity timer and RGB, invoke whenever any activity happens
static void check_rgb_timeout(void); // checks if enough time has passed for RGB to timeout
bool is_rgb_timeout = false; // store if RGB has timed out or not in a boolean
void refresh_rgb(void) {
key_timer = timer_read32(); // store time of last refresh
if (is_rgb_timeout)
{
is_rgb_timeout = false;
rgblight_wakeup();
}
}
void check_rgb_timeout(void) {
if (!is_rgb_timeout && timer_elapsed32(key_timer) > RGBLIGHT_TIMEOUT) // check if RGB has already timeout and if enough time has passed
{
rgblight_suspend();
is_rgb_timeout = true;
}
}
/* Then, call the above functions from QMK's built in post processing functions like so */
/* Runs at the end of each scan loop, check if RGB timeout has occured or not */
void housekeeping_task_user(void) {
#ifdef RGBLIGHT_TIMEOUT
check_rgb_timeout();
#endif
}
/* Runs after each key press, check if activity occurred */
void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef RGBLIGHT_TIMEOUT
if (record->event.pressed)
refresh_rgb();
#endif
}
/* Runs after each encoder tick, check if activity occurred */
void post_encoder_update_user(uint8_t index, bool clockwise) {
#ifdef RGBLIGHT_TIMEOUT
refresh_rgb();
#endif
}
```
# Keyboard Idling/Wake Code # Keyboard Idling/Wake Code
If the board supports it, it can be "idled", by stopping a number of functions. A good example of this is RGB lights or backlights. This can save on power consumption, or may be better behavior for your keyboard. If the board supports it, it can be "idled", by stopping a number of functions. A good example of this is RGB lights or backlights. This can save on power consumption, or may be better behavior for your keyboard.
@@ -265,7 +209,7 @@ If the board supports it, it can be "idled", by stopping a number of functions.
This is controlled by two functions: `suspend_power_down_*` and `suspend_wakeup_init_*`, which are called when the system board is idled and when it wakes up, respectively. This is controlled by two functions: `suspend_power_down_*` and `suspend_wakeup_init_*`, which are called when the system board is idled and when it wakes up, respectively.
### Example `suspend_power_down_user()` and `suspend_wakeup_init_user()` Implementation ### Example suspend_power_down_user() and suspend_wakeup_init_user() Implementation
```c ```c
+3 -8
View File
@@ -37,9 +37,9 @@ For more information on bitwise operators in C, click [here](https://en.wikipedi
In practice, this means that you can check whether a given modifier is active with `get_mods() & MOD_BIT(KC_<modifier>)` (see the [list of modifier keycodes](keycodes_basic.md#modifiers)) or with `get_mods() & MOD_MASK_<modifier>` if the difference between left and right hand modifiers is not important and you want to match both. Same thing can be done for one-shot modifiers if you replace `get_mods()` with `get_oneshot_mods()`. In practice, this means that you can check whether a given modifier is active with `get_mods() & MOD_BIT(KC_<modifier>)` (see the [list of modifier keycodes](keycodes_basic.md#modifiers)) or with `get_mods() & MOD_MASK_<modifier>` if the difference between left and right hand modifiers is not important and you want to match both. Same thing can be done for one-shot modifiers if you replace `get_mods()` with `get_oneshot_mods()`.
To check that *only* a specific set of mods is active at a time, use a simple equality operator: `get_mods() == <mod mask>`. To check that *only* a specific set of mods is active at a time, AND the modifier state and your desired mod mask as explained above and compare the result to the mod mask itself: `get_mods() & <mod mask> == <mod mask>`.
For example, let's say you want to trigger a piece of custom code if one-shot left control and one-shot left shift are on but every other one-shot mods are off. To do so, you can compose the desired mod mask by combining the mod bits for left control and shift with `(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))` and then plug it in: `get_oneshot_mods() == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))`. Using `MOD_MASK_CS` instead for the mod bitmask would have forced you to press four modifier keys (both versions of control and shift) to fulfill the condition. For example, let's say you want to trigger a piece of custom code if one-shot left control and one-shot left shift are on but every other one-shot mods are off. To do so, you can compose the desired mod mask by combining the mod bits for left control and shift with `(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))` and then plug it in: `get_oneshot_mods() & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT)) == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))`. Using `MOD_MASK_CS` instead for the mod bitmask would have forced you to press four modifier keys (both versions of control and shift) to fulfill the condition.
The full list of mod masks is as follows: The full list of mod masks is as follows:
@@ -91,7 +91,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case KC_ESC: case KC_ESC:
// Detect the activation of only Left Alt // Detect the activation of only Left Alt
if (get_mods() == MOD_BIT(KC_LALT)) { if ((get_mods() & MOD_BIT(KC_LALT)) == MOD_BIT(KC_LALT)) {
if (record->event.pressed) { if (record->event.pressed) {
// No need to register KC_LALT because it's already active. // No need to register KC_LALT because it's already active.
// The Alt modifier will apply on this KC_TAB. // The Alt modifier will apply on this KC_TAB.
@@ -160,7 +160,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true; return true;
}; };
``` ```
Alternatively, this can be done with [Key Overrides](feature_key_overrides?id=simple-example).
# Advanced topics :id=advanced-topics # Advanced topics :id=advanced-topics
@@ -181,7 +180,3 @@ This page used to encompass a large set of features. We have moved many sections
## Tap-Hold Configuration Options :id=tap-hold-configuration-options ## Tap-Hold Configuration Options :id=tap-hold-configuration-options
* [Tap-Hold Configuration Options](tap_hold.md) * [Tap-Hold Configuration Options](tap_hold.md)
## Key Overrides :id=key-overrides
* [Key Overrides](feature_key_overrides.md)
-12
View File
@@ -236,18 +236,6 @@ bool apply_autocorrect(uint8_t backspaces, const char *str) {
} }
``` ```
### Autocorrect Status
Additional user callback functions to manipulate Autocorrect:
| Function | Description |
|----------------------------|----------------------------------------------|
| `autocorrect_enable()` | Turns Autocorrect on. |
| `autocorrect_disable()` | Turns Autocorrect off. |
| `autocorrect_toggle()` | Toggles Autocorrect. |
| `autocorrect_is_enabled()` | Returns true if Autocorrect is currently on. |
## Appendix: Trie binary data format :id=appendix ## Appendix: Trie binary data format :id=appendix
This section details how the trie is serialized to byte data in autocorrect_data. You dont need to care about this to use this autocorrection implementation. But it is documented for the record in case anyone is interested in modifying the implementation, or just curious how it works. This section details how the trie is serialized to byte data in autocorrect_data. You dont need to care about this to use this autocorrection implementation. But it is documented for the record in case anyone is interested in modifying the implementation, or just curious how it works.
+1 -1
View File
@@ -58,7 +58,7 @@ const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
const uint16_t PROGMEM qw_combo[] = {KC_Q, KC_W, COMBO_END}; const uint16_t PROGMEM qw_combo[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM sd_combo[] = {KC_S, KC_D, COMBO_END}; const uint16_t PROGMEM sd_combo[] = {KC_S, KC_D, COMBO_END};
combo_t key_combos[] = { combo_t key_combos[COMBO_COUNT] = {
[AB_ESC] = COMBO(ab_combo, KC_ESC), [AB_ESC] = COMBO(ab_combo, KC_ESC),
[JK_TAB] = COMBO(jk_combo, KC_TAB), [JK_TAB] = COMBO(jk_combo, KC_TAB),
[QW_SFT] = COMBO(qw_combo, KC_LSFT), [QW_SFT] = COMBO(qw_combo, KC_LSFT),
+8 -1
View File
@@ -17,14 +17,17 @@ Currently the following converters are available:
| `promicro` | `bit_c_pro` | | `promicro` | `bit_c_pro` |
| `promicro` | `stemcell` | | `promicro` | `stemcell` |
| `promicro` | `bonsai_c4` | | `promicro` | `bonsai_c4` |
| `promicro` | `elite_pi` |
| `promicro` | `rp2040_ce` | | `promicro` | `rp2040_ce` |
| `promicro` | `elite_pi` | | `promicro` | `elite_pi` |
| `promicro` | `helios` | | `promicro` | `helios` |
| `promicro` | `liatris` |
| `promicro` | `michi` | | `promicro` | `michi` |
| `elite_c` | `stemcell` | | `elite_c` | `stemcell` |
| `elite_c` | `rp2040_ce` | | `elite_c` | `rp2040_ce` |
| `elite_c` | `elite_pi` | | `elite_c` | `elite_pi` |
| `elite_c` | `helios` | | `elite_c` | `helios` |
| `elite_c` | `liatris` |
See below for more in depth information on each converter. See below for more in depth information on each converter.
@@ -87,6 +90,7 @@ If a board currently supported in QMK uses a [Pro Micro](https://www.sparkfun.co
| [customMK Bonsai C4](https://shop.custommk.com/products/bonsai-c4-microcontroller-board) | `bonsai_c4` | | [customMK Bonsai C4](https://shop.custommk.com/products/bonsai-c4-microcontroller-board) | `bonsai_c4` |
| [Elite-Pi](https://keeb.io/products/elite-pi-usb-c-pro-micro-replacement-rp2040) | `elite_pi` | | [Elite-Pi](https://keeb.io/products/elite-pi-usb-c-pro-micro-replacement-rp2040) | `elite_pi` |
| [0xCB Helios](https://keeb.supply/products/0xcb-helios) | `helios` | | [0xCB Helios](https://keeb.supply/products/0xcb-helios) | `helios` |
| [Liatris](https://splitkb.com/products/liatris) | `liatris` |
| [Michi](https://github.com/ci-bus/michi-promicro-rp2040) | `michi` | | [Michi](https://github.com/ci-bus/michi-promicro-rp2040) | `michi` |
Converter summary: Converter summary:
@@ -103,6 +107,7 @@ Converter summary:
| `rp2040_ce` | `-e CONVERT_TO=rp2040_ce` | `CONVERT_TO=rp2040_ce` | `#ifdef CONVERT_TO_RP2040_CE` | | `rp2040_ce` | `-e CONVERT_TO=rp2040_ce` | `CONVERT_TO=rp2040_ce` | `#ifdef CONVERT_TO_RP2040_CE` |
| `elite_pi` | `-e CONVERT_TO=elite_pi` | `CONVERT_TO=elite_pi` | `#ifdef CONVERT_TO_ELITE_PI` | | `elite_pi` | `-e CONVERT_TO=elite_pi` | `CONVERT_TO=elite_pi` | `#ifdef CONVERT_TO_ELITE_PI` |
| `helios` | `-e CONVERT_TO=helios` | `CONVERT_TO=helios` | `#ifdef CONVERT_TO_HELIOS` | | `helios` | `-e CONVERT_TO=helios` | `CONVERT_TO=helios` | `#ifdef CONVERT_TO_HELIOS` |
| `liatris` | `-e CONVERT_TO=liatris` | `CONVERT_TO=liatris` | `#ifdef CONVERT_TO_LIATRIS` |
| `michi` | `-e CONVERT_TO=michi` | `CONVERT_TO=michi` | `#ifdef CONVERT_TO_MICHI` | | `michi` | `-e CONVERT_TO=michi` | `CONVERT_TO=michi` | `#ifdef CONVERT_TO_MICHI` |
### Proton C :id=proton_c ### Proton C :id=proton_c
@@ -167,7 +172,7 @@ The Bonsai C4 only has one on-board LED (B2), and by default, both the Pro Micro
#define B0 PAL_LINE(GPIOA, 9) #define B0 PAL_LINE(GPIOA, 9)
``` ```
### RP2040 Community Edition - Elite-Pi and Helios :id=rp2040_ce ### RP2040 Community Edition - Elite-Pi, Helios, and Liatris :id=rp2040_ce
Feature set currently identical to [Adafruit KB2040](#kb2040). Feature set currently identical to [Adafruit KB2040](#kb2040).
@@ -184,6 +189,7 @@ If a board currently supported in QMK uses an [Elite-C](https://keeb.io/products
| [STeMCell](https://github.com/megamind4089/STeMCell) | `stemcell` | | [STeMCell](https://github.com/megamind4089/STeMCell) | `stemcell` |
| [Elite-Pi](https://keeb.io/products/elite-pi-usb-c-pro-micro-replacement-rp2040) | `elite_pi` | | [Elite-Pi](https://keeb.io/products/elite-pi-usb-c-pro-micro-replacement-rp2040) | `elite_pi` |
| [0xCB Helios](https://keeb.supply/products/0xcb-helios) | `helios` | | [0xCB Helios](https://keeb.supply/products/0xcb-helios) | `helios` |
| [Liatris](https://splitkb.com/products/liatris) | `liatris` |
Converter summary: Converter summary:
@@ -193,6 +199,7 @@ Converter summary:
| `rp2040_ce` | `-e CONVERT_TO=rp2040_ce` | `CONVERT_TO=rp2040_ce` | `#ifdef CONVERT_TO_RP2040_CE` | | `rp2040_ce` | `-e CONVERT_TO=rp2040_ce` | `CONVERT_TO=rp2040_ce` | `#ifdef CONVERT_TO_RP2040_CE` |
| `elite_pi` | `-e CONVERT_TO=elite_pi` | `CONVERT_TO=elite_pi` | `#ifdef CONVERT_TO_ELITE_PI` | | `elite_pi` | `-e CONVERT_TO=elite_pi` | `CONVERT_TO=elite_pi` | `#ifdef CONVERT_TO_ELITE_PI` |
| `helios` | `-e CONVERT_TO=helios` | `CONVERT_TO=helios` | `#ifdef CONVERT_TO_HELIOS` | | `helios` | `-e CONVERT_TO=helios` | `CONVERT_TO=helios` | `#ifdef CONVERT_TO_HELIOS` |
| `liatris` | `-e CONVERT_TO=liatris` | `CONVERT_TO=liatris` | `#ifdef CONVERT_TO_LIATRIS` |
### STeMCell :id=stemcell_elite ### STeMCell :id=stemcell_elite
+44 -44
View File
@@ -57,78 +57,78 @@ susceptible to noise, you must choose a debounce method that will also mitigate
if the scanning is slow, and you are using a timestamp-based algorithm, you might end up making a debouncing decision based on only two if the scanning is slow, and you are using a timestamp-based algorithm, you might end up making a debouncing decision based on only two
sampled values, which will limit the noise-resistance of the algorithm. sampled values, which will limit the noise-resistance of the algorithm.
* Currently all built-in debounce algorithms support timestamp-based debouncing only. In the future we might * Currently all built-in debounce algorithms support timestamp-based debouncing only. In the future we might
implement cycles-based debouncing, and it will be selectable via a `config.h` macro. implement cycles-based debouncing, and it will be selectable via a ```config.h``` macro.
2) Symmetric vs Asymmetric 2) Symmetric vs Asymmetric
* Symmetric - apply the same debouncing algorithm, to both key-up and key-down events. * Symmetric - apply the same debouncing algorithm, to both key-up and key-down events.
* Recommended naming convention: `sym_*` * Recommended naming convention: ```sym_*```
* Asymmetric - apply different debouncing algorithms to key-down and key-up events. E.g. Eager key-down, Defer key-up. * Asymmetric - apply different debouncing algorithms to key-down and key-up events. E.g. Eager key-down, Defer key-up.
* Recommended naming convention: `asym_*` followed by details of the type of algorithm in use, in order, for key-down and then key-up * Recommended naming convention: ```asym_*``` followed by details of the type of algorithm in use, in order, for key-down and then key-up
3) Eager vs Defer 3) Eager vs Defer
* Eager - any key change is reported immediately. All further inputs for DEBOUNCE ms are ignored. * Eager - any key change is reported immediately. All further inputs for DEBOUNCE ms are ignored.
* Eager algorithms are not noise-resistant. * Eager algorithms are not noise-resistant.
* Recommended naming conventions: * Recommended naming conventions:
* `sym_eager_*` * ```sym_eager_*```
* `asym_eager_*_*`: key-down is using eager algorithm * ```asym_eager_*_*```: key-down is using eager algorithm
* `asym_*_eager_*`: key-up is using eager algorithm * ```asym_*_eager_*```: key-up is using eager algorithm
* Defer - wait for no changes for DEBOUNCE ms before reporting change. * Defer - wait for no changes for DEBOUNCE ms before reporting change.
* Defer algorithms are noise-resistant * Defer algorithms are noise-resistant
* Recommended naming conventions: * Recommended naming conventions:
* `sym_defer_*` * ```sym_defer_*```
* `asym_defer_*_*`: key-down is using defer algorithm * ```asym_defer_*_*```: key-down is using defer algorithm
* `asym_*_defer_*`: key-up is using defer algorithm * ```asym_*_defer_*```: key-up is using defer algorithm
4) Global vs Per-Key vs Per-Row 4) Global vs Per-Key vs Per-Row
* Global - one timer for all keys. Any key change state affects global timer * Global - one timer for all keys. Any key change state affects global timer
* Recommended naming convention: `*_g` * Recommended naming convention: ```*_g```
* Per-key - one timer per key * Per-key - one timer per key
* Recommended naming convention: `*_pk` * Recommended naming convention: ```*_pk```
* Per-row - one timer per row * Per-row - one timer per row
* Recommended naming convention: `*_pr` * Recommended naming convention: ```*_pr```
* Per-key and per-row algorithms consume more resources (in terms of performance, * Per-key and per-row algorithms consume more resources (in terms of performance,
and ram usage), but fast typists might prefer them over global. and ram usage), but fast typists might prefer them over global.
## Supported Debounce Algorithms ## Debounce algorithms supported by QMK
QMK supports multiple algorithms through its debounce API. QMK supports multiple debounce algorithms through its debounce API.
### Debounce Time ### Debounce selection
Default debounce time is 5 milliseconds and it can be changed with the following line in `config.h`: | DEBOUNCE_TYPE | Description | What else is needed |
``` | ------------- | --------------------------------------------------- | ----------------------------- |
#define DEBOUNCE 10 | Not defined | Use the default algorithm, currently sym_defer_g | Nothing |
``` | custom | Use your own debounce code | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
?> Setting `DEBOUNCE` to `0` will disable this feature. | Anything Else | Use another algorithm from quantum/debounce/* | Nothing |
### Debounce Method **Regarding split keyboards**:
The debounce code is compatible with split keyboards.
Keyboards may select one of the core debounce methods by adding the following line into `rules.mk`: ### Selecting an included debouncing method
Keyboards may select one of the already implemented debounce methods, by adding to ```rules.mk``` the following line:
``` ```
DEBOUNCE_TYPE = <name of algorithm> DEBOUNCE_TYPE = <name of algorithm>
``` ```
Name of algorithm is one of: Where name of algorithm is one of:
* ```sym_defer_g``` - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE``` milliseconds of no changes has occurred, all input changes are pushed.
* This is the current default algorithm. This is the highest performance algorithm with lowest memory usage, and it's also noise-resistant.
* ```sym_eager_pr``` - debouncing per row. On any state change, response is immediate, followed by locking the row ```DEBOUNCE``` milliseconds of no further input for that row.
For use in keyboards where refreshing ```NUM_KEYS``` 8-bit counters is computationally expensive / low scan rate, and fingers usually only hit one row at a time. This could be
appropriate for the ErgoDox models; the matrix is rotated 90°, and hence its "rows" are really columns, and each finger only hits a single "row" at a time in normal use.
* ```sym_eager_pk``` - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE``` milliseconds of no further input for that key
* ```sym_defer_pr``` - debouncing per row. On any state change, a per-row timer is set. When ```DEBOUNCE``` milliseconds of no changes have occurred on that row, the entire row is pushed. Can improve responsiveness over `sym_defer_g` while being less susceptible than per-key debouncers to noise.
* ```sym_defer_pk``` - debouncing per key. On any state change, a per-key timer is set. When ```DEBOUNCE``` milliseconds of no changes have occurred on that key, the key status change is pushed.
* ```asym_eager_defer_pk``` - debouncing per key. On a key-down state change, response is immediate, followed by ```DEBOUNCE``` milliseconds of no further input for that key. On a key-up state change, a per-key timer is set. When ```DEBOUNCE``` milliseconds of no changes have occurred on that key, the key-up status change is pushed.
| Algorithm | Description | ### A couple algorithms that could be implemented in the future:
| --------------------- | ----------- | * ```sym_defer_pr```
| `sym_defer_g` | Debouncing per keyboard. On any state change, a global timer is set. When `DEBOUNCE` milliseconds of no changes has occurred, all input changes are pushed. This is the highest performance algorithm with lowest memory usage and is noise-resistant. | * ```sym_eager_g```
| `sym_defer_pr` | Debouncing per row. On any state change, a per-row timer is set. When `DEBOUNCE` milliseconds of no changes have occurred on that row, the entire row is pushed. This can improve responsiveness over `sym_defer_g` while being less susceptible to noise than per-key algorithm. |
| `sym_defer_pk` | Debouncing per key. On any state change, a per-key timer is set. When `DEBOUNCE` milliseconds of no changes have occurred on that key, the key status change is pushed. |
| `sym_eager_pr` | Debouncing per row. On any state change, response is immediate, followed by `DEBOUNCE` milliseconds of no further input for that row. |
| `sym_eager_pk` | Debouncing per key. On any state change, response is immediate, followed by `DEBOUNCE` milliseconds of no further input for that key. |
| `asym_eager_defer_pk` | Debouncing per key. On a key-down state change, response is immediate, followed by `DEBOUNCE` milliseconds of no further input for that key. On a key-up state change, a per-key timer is set. When `DEBOUNCE` milliseconds of no changes have occurred on that key, the key-up status change is pushed. |
?> `sym_defer_g` is the default if `DEBOUNCE_TYPE` is undefined. ### Use your own debouncing code
You have the option to implement you own debouncing algorithm. To do this:
?> `sym_eager_pr` is suitable for use in keyboards where refreshing `NUM_KEYS` 8-bit counters is computationally expensive or has low scan rate while fingers usually hit one row at a time. This could be appropriate for the ErgoDox models where the matrix is rotated 90°. Hence its "rows" are really columns and each finger only hits a single "row" at a time with normal usage. * Set ```DEBOUNCE_TYPE = custom``` in ```rules.mk```.
* Add ```SRC += debounce.c``` in ```rules.mk```
### Implementing your own debouncing code * Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples.
You have the option to implement you own debouncing algorithm with the following steps:
* Set `DEBOUNCE_TYPE = custom` in `rules.mk`.
* Add `SRC += debounce.c` in `rules.mk`
* Implement your own `debounce.c`. See `quantum/debounce` for examples.
* Debouncing occurs after every raw matrix scan. * Debouncing occurs after every raw matrix scan.
* Use num_rows instead of MATRIX_ROWS to support split keyboards correctly. * Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly.
* If your custom algorithm is applicable to other keyboards, please consider making a pull request. * If the algorithm might be applicable to other keyboards, please consider adding it to ```quantum/debounce```
+17 -17
View File
@@ -1,4 +1,4 @@
# Key Overrides :id=key-overrides # Key Overrides
Key overrides allow you to override modifier-key combinations to send a different modifier-key combination or perform completely custom actions. Don't want `shift` + `1` to type `!` on your computer? Use a key override to make your keyboard type something different when you press `shift` + `1`. The general behavior is like this: If `modifiers w` + `key x` are pressed, replace these keys with `modifiers y` + `key z` in the keyboard report. Key overrides allow you to override modifier-key combinations to send a different modifier-key combination or perform completely custom actions. Don't want `shift` + `1` to type `!` on your computer? Use a key override to make your keyboard type something different when you press `shift` + `1`. The general behavior is like this: If `modifiers w` + `key x` are pressed, replace these keys with `modifiers y` + `key z` in the keyboard report.
@@ -10,13 +10,13 @@ You can use key overrides in a similar way to momentary layer/fn keys to activat
- Create custom shortcuts or change existing ones: E.g. Send `ctrl`+`shift`+`z` when `ctrl`+`y` is pressed. - Create custom shortcuts or change existing ones: E.g. Send `ctrl`+`shift`+`z` when `ctrl`+`y` is pressed.
- Run custom code when `ctrl` + `alt` + `esc` is pressed. - Run custom code when `ctrl` + `alt` + `esc` is pressed.
## Setup :id=setup ## Setup
To enable this feature, you need to add `KEY_OVERRIDE_ENABLE = yes` to your `rules.mk`. To enable this feature, you need to add `KEY_OVERRIDE_ENABLE = yes` to your `rules.mk`.
Then, in your `keymap.c` file, you'll need to define the array `key_overrides`, which defines all key overrides to be used. Each override is a value of type `key_override_t`. The array `key_overrides` is `NULL`-terminated and contains pointers to `key_override_t` values (`const key_override_t **`). Then, in your `keymap.c` file, you'll need to define the array `key_overrides`, which defines all key overrides to be used. Each override is a value of type `key_override_t`. The array `key_overrides` is `NULL`-terminated and contains pointers to `key_override_t` values (`const key_override_t **`).
## Creating Key Overrides :id=creating-key-overrides ## Creating Key Overrides
The `key_override_t` struct has many options that allow you to precisely tune your overrides. The full reference is shown below. Instead of manually creating a `key_override_t` value, it is recommended to use these dedicated initializers: The `key_override_t` struct has many options that allow you to precisely tune your overrides. The full reference is shown below. Instead of manually creating a `key_override_t` value, it is recommended to use these dedicated initializers:
@@ -34,7 +34,7 @@ Additionally takes a bitmask `options` that specifies additional options. See `k
For more customization possibilities, you may directly create a `key_override_t`, which allows you to customize even more behavior. Read further below for details and examples. For more customization possibilities, you may directly create a `key_override_t`, which allows you to customize even more behavior. Read further below for details and examples.
## Simple Example :id=simple-example ## Simple Example
This shows how the mentioned example of sending `delete` when `shift` + `backspace` are pressed is realized: This shows how the mentioned example of sending `delete` when `shift` + `backspace` are pressed is realized:
@@ -48,9 +48,9 @@ const key_override_t **key_overrides = (const key_override_t *[]){
}; };
``` ```
## Intermediate Difficulty Examples :id=intermediate-difficulty-examples ## Intermediate Difficulty Examples
### Media Controls & Screen Brightness :id=media-controls-amp-screen-brightness ### Media Controls & Screen Brightness
In this example a single key is configured to control media, volume and screen brightness by using key overrides. In this example a single key is configured to control media, volume and screen brightness by using key overrides.
@@ -102,7 +102,7 @@ const key_override_t **key_overrides = (const key_override_t *[]){
}; };
``` ```
### Flexible macOS-friendly Grave Escape :id=flexible-macos-friendly-grave-escape ### Flexible macOS-friendly Grave Escape
The [Grave Escape feature](feature_grave_esc.md) is limited in its configurability and has [bugs when used on macOS](feature_grave_esc.md#caveats). Key overrides can be used to achieve a similar functionality as Grave Escape, but with more customization and without bugs on macOS. The [Grave Escape feature](feature_grave_esc.md) is limited in its configurability and has [bugs when used on macOS](feature_grave_esc.md#caveats). Key overrides can be used to achieve a similar functionality as Grave Escape, but with more customization and without bugs on macOS.
```c ```c
@@ -121,8 +121,8 @@ const key_override_t **key_overrides = (const key_override_t *[]){
In addition to not encountering unexpected bugs on macOS, you can also change the behavior as you wish. Instead setting `GUI` + `ESC` = `` ` `` you may change it to an arbitrary other modifier, for example `Ctrl` + `ESC` = `` ` ``. In addition to not encountering unexpected bugs on macOS, you can also change the behavior as you wish. Instead setting `GUI` + `ESC` = `` ` `` you may change it to an arbitrary other modifier, for example `Ctrl` + `ESC` = `` ` ``.
## Advanced Examples :id=advanced-examples ## Advanced Examples
### Modifiers as Layer Keys :id=modifiers-as-layer-keys ### Modifiers as Layer Keys
Do you really need a dedicated key to toggle your fn layer? With key overrides, perhaps not. This example shows how you can configure to use `rGUI` + `rAlt` (right GUI and right alt) to access a momentary layer like an fn layer. With this you completely eliminate the need to use a dedicated layer key. Of course the choice of modifier keys can be changed as needed, `rGUI` + `rAlt` is just an example here. Do you really need a dedicated key to toggle your fn layer? With key overrides, perhaps not. This example shows how you can configure to use `rGUI` + `rAlt` (right GUI and right alt) to access a momentary layer like an fn layer. With this you completely eliminate the need to use a dedicated layer key. Of course the choice of modifier keys can be changed as needed, `rGUI` + `rAlt` is just an example here.
@@ -150,7 +150,7 @@ const key_override_t fn_override = {.trigger_mods = MOD_BIT(KC_RGUI) |
.enabled = NULL}; .enabled = NULL};
``` ```
## Keycodes :id=keycodes ## Keycodes
|Keycode |Aliases |Description | |Keycode |Aliases |Description |
|------------------------|---------|----------------------| |------------------------|---------|----------------------|
@@ -158,7 +158,7 @@ const key_override_t fn_override = {.trigger_mods = MOD_BIT(KC_RGUI) |
|`QK_KEY_OVERRIDE_ON` |`KO_ON` |Turn on key overrides | |`QK_KEY_OVERRIDE_ON` |`KO_ON` |Turn on key overrides |
|`QK_KEY_OVERRIDE_OFF` |`KO_OFF` |Turn off key overrides| |`QK_KEY_OVERRIDE_OFF` |`KO_OFF` |Turn off key overrides|
## Reference for `key_override_t` :id=reference-for-key_override_t ## Reference for `key_override_t`
Advanced users may need more customization than what is offered by the simple `ko_make` initializers. For this, directly create a `key_override_t` value and set all members. Below is a reference for all members of `key_override_t`. Advanced users may need more customization than what is offered by the simple `ko_make` initializers. For this, directly create a `key_override_t` value and set all members. Below is a reference for all members of `key_override_t`.
@@ -175,7 +175,7 @@ Advanced users may need more customization than what is offered by the simple `k
| `void *context` | A context that will be passed to the custom action function. | | `void *context` | A context that will be passed to the custom action function. |
| `bool *enabled` | If this points to false this override will not be used. Set to NULL to always have this override enabled. | | `bool *enabled` | If this points to false this override will not be used. Set to NULL to always have this override enabled. |
## Reference for `ko_option_t` :id=reference-for-ko_option_t ### Reference for `ko_option_t`
Bitfield with various options controlling the behavior of a key override. Bitfield with various options controlling the behavior of a key override.
@@ -189,11 +189,11 @@ Bitfield with various options controlling the behavior of a key override.
| `ko_option_no_reregister_trigger` | If set, the trigger key will never be registered again after the override is deactivated. | | `ko_option_no_reregister_trigger` | If set, the trigger key will never be registered again after the override is deactivated. |
| `ko_options_default` | The default options used by the `ko_make_xxx` functions | | `ko_options_default` | The default options used by the `ko_make_xxx` functions |
## For Advanced Users: Inner Workings :id=for-advanced-users-inner-workings ## For Advanced Users: Inner Workings
This section explains how a key override works in detail, explaining where each member of `key_override_t` comes into play. Understanding this is essential to be able to take full advantage of all the options offered by key overrides. This section explains how a key override works in detail, explaining where each member of `key_override_t` comes into play. Understanding this is essential to be able to take full advantage of all the options offered by key overrides.
#### Activation :id=activation #### Activation
When the necessary keys are pressed (`trigger_mods` + `trigger`), the override is 'activated' and the replacement key is registered in the keyboard report (`replacement`), while the `trigger` key is removed from the keyboard report. The trigger modifiers may also be removed from the keyboard report upon activation of an override (`suppressed_mods`). The override will not activate if any of the `negative_modifiers` are pressed. When the necessary keys are pressed (`trigger_mods` + `trigger`), the override is 'activated' and the replacement key is registered in the keyboard report (`replacement`), while the `trigger` key is removed from the keyboard report. The trigger modifiers may also be removed from the keyboard report upon activation of an override (`suppressed_mods`). The override will not activate if any of the `negative_modifiers` are pressed.
@@ -207,11 +207,11 @@ Use the `option` member to customize which of these events are allowed to activa
In any case, a key override can only activate if the `trigger` key is the _last_ non-modifier key that was pressed down. This emulates the behavior of how standard OSes (macOS, Windows, Linux) handle normal key input (to understand: Hold down `a`, then also hold down `b`, then hold down `shift`; `B` will be typed but not `A`). In any case, a key override can only activate if the `trigger` key is the _last_ non-modifier key that was pressed down. This emulates the behavior of how standard OSes (macOS, Windows, Linux) handle normal key input (to understand: Hold down `a`, then also hold down `b`, then hold down `shift`; `B` will be typed but not `A`).
#### Deactivation :id=deactivation #### Deactivation
An override is 'deactivated' when one of the trigger keys (`trigger_mods`, `trigger`) is lifted, another non-modifier key is pressed down, or one of the `negative_modifiers` is pressed down. When an override deactivates, the `replacement` key is removed from the keyboard report, while the `suppressed_mods` that are still held down are re-added to the keyboard report. By default, the `trigger` key is re-added to the keyboard report if it is still held down and no other non-modifier key has been pressed since. This again emulates the behavior of how standard OSes handle normal key input (To understand: hold down `a`, then also hold down `b`, then also `shift`, then release `b`; `A` will not be typed even though you are holding the `a` and `shift` keys). Use the `option` field `ko_option_no_reregister_trigger` to prevent re-registering the trigger key in all cases. An override is 'deactivated' when one of the trigger keys (`trigger_mods`, `trigger`) is lifted, another non-modifier key is pressed down, or one of the `negative_modifiers` is pressed down. When an override deactivates, the `replacement` key is removed from the keyboard report, while the `suppressed_mods` that are still held down are re-added to the keyboard report. By default, the `trigger` key is re-added to the keyboard report if it is still held down and no other non-modifier key has been pressed since. This again emulates the behavior of how standard OSes handle normal key input (To understand: hold down `a`, then also hold down `b`, then also `shift`, then release `b`; `A` will not be typed even though you are holding the `a` and `shift` keys). Use the `option` field `ko_option_no_reregister_trigger` to prevent re-registering the trigger key in all cases.
#### Key Repeat Delay :id=key-repeat-delay #### Key Repeat Delay
A third way in which standard OS-handling of modifier-key input is emulated in key overrides is with a ['key repeat delay'](https://www.dummies.com/computers/pcs/set-your-keyboards-repeat-delay-and-repeat-rate/). To explain what this is, let's look at how normal keyboard input is handled by mainstream OSes again: If you hold down `a`, followed by `shift`, you will see the letter `a` is first typed, then for a short moment nothing is typed and then repeating `A`s are typed. Take note that, although shift is pressed down just after `a` is pressed, it takes a moment until `A` is typed. This is caused by the aforementioned key repeat delay, and it is a feature that prevents unwanted repeated characters from being typed. A third way in which standard OS-handling of modifier-key input is emulated in key overrides is with a ['key repeat delay'](https://www.dummies.com/computers/pcs/set-your-keyboards-repeat-delay-and-repeat-rate/). To explain what this is, let's look at how normal keyboard input is handled by mainstream OSes again: If you hold down `a`, followed by `shift`, you will see the letter `a` is first typed, then for a short moment nothing is typed and then repeating `A`s are typed. Take note that, although shift is pressed down just after `a` is pressed, it takes a moment until `A` is typed. This is caused by the aforementioned key repeat delay, and it is a feature that prevents unwanted repeated characters from being typed.
@@ -222,6 +222,6 @@ This applies equally to releasing a modifier: When you hold `shift`, then press
The duration of the key repeat delay is controlled with the `KEY_OVERRIDE_REPEAT_DELAY` macro. Define this value in your `config.h` file to change it. It is 500ms by default. The duration of the key repeat delay is controlled with the `KEY_OVERRIDE_REPEAT_DELAY` macro. Define this value in your `config.h` file to change it. It is 500ms by default.
## Difference to Combos :id=difference-to-combos ## Difference to Combos
Note that key overrides are very different from [combos](https://docs.qmk.fm/#/feature_combo). Combos require that you press down several keys almost _at the same time_ and can work with any combination of non-modifier keys. Key overrides work like keyboard shortcuts (e.g. `ctrl` + `z`): They take combinations of _multiple_ modifiers and _one_ non-modifier key to then perform some custom action. Key overrides are implemented with much care to behave just like normal keyboard shortcuts would in regards to the order of pressed keys, timing, and interacton with other pressed keys. There are a number of optional settings that can be used to really fine-tune the behavior of each key override as well. Using key overrides also does not delay key input for regular key presses, which inherently happens in combos and may be undesirable. Note that key overrides are very different from [combos](https://docs.qmk.fm/#/feature_combo). Combos require that you press down several keys almost _at the same time_ and can work with any combination of non-modifier keys. Key overrides work like keyboard shortcuts (e.g. `ctrl` + `z`): They take combinations of _multiple_ modifiers and _one_ non-modifier key to then perform some custom action. Key overrides are implemented with much care to behave just like normal keyboard shortcuts would in regards to the order of pressed keys, timing, and interacton with other pressed keys. There are a number of optional settings that can be used to really fine-tune the behavior of each key override as well. Using key overrides also does not delay key input for regular key presses, which inherently happens in combos and may be undesirable.
+16 -85
View File
@@ -20,13 +20,13 @@ To use the ADNS 5050 sensor, add this to your `rules.mk`
POINTING_DEVICE_DRIVER = adns5050 POINTING_DEVICE_DRIVER = adns5050
``` ```
The ADNS 5050 sensor uses a serial type protocol for communication, and requires an additional light source. The ADNS 5050 sensor uses a serial type protocol for communication, and requires an additional light source.
| Setting (`config.h`) | Description | Default | | Setting | Description | Default |
| -------------------- | ------------------------------------------------------------------ | -------------------------- | | ------------------- | ------------------------------------------------------------------ | -------------------------- |
| `ADNS5050_SCLK_PIN` | (Required) The pin connected to the clock pin of the sensor. | `POINTING_DEVICE_SCLK_PIN` | | `ADNS5050_SCLK_PIN` | (Required) The pin connected to the clock pin of the sensor. | `POINTING_DEVICE_SCLK_PIN` |
| `ADNS5050_SDIO_PIN` | (Required) The pin connected to the data pin of the sensor. | `POINTING_DEVICE_SDIO_PIN` | | `ADNS5050_SDIO_PIN` | (Required) The pin connected to the data pin of the sensor. | `POINTING_DEVICE_SDIO_PIN` |
| `ADNS5050_CS_PIN` | (Required) The pin connected to the Chip Select pin of the sensor. | `POINTING_DEVICE_CS_PIN` | | `ADNS5050_CS_PIN` | (Required) The pin connected to the Chip Select pin of the sensor. | `POINTING_DEVICE_CS_PIN` |
@@ -40,9 +40,9 @@ To use the ADNS 9800 sensor, add this to your `rules.mk`
POINTING_DEVICE_DRIVER = adns9800 POINTING_DEVICE_DRIVER = adns9800
``` ```
The ADNS 9800 is an SPI driven optical sensor, that uses laser output for surface tracking. The ADNS 9800 is an SPI driven optical sensor, that uses laser output for surface tracking.
| Setting (`config.h`) | Description | Default | | Setting | Description | Default |
| ----------------------- | ---------------------------------------------------------------------- | ------------------------ | | ----------------------- | ---------------------------------------------------------------------- | ------------------------ |
| `ADNS9800_CLOCK_SPEED` | (Optional) Sets the clock speed that the sensor runs at. | `2000000` | | `ADNS9800_CLOCK_SPEED` | (Optional) Sets the clock speed that the sensor runs at. | `2000000` |
| `ADNS9800_SPI_LSBFIRST` | (Optional) Sets the Least/Most Significant Byte First setting for SPI. | `false` | | `ADNS9800_SPI_LSBFIRST` | (Optional) Sets the Least/Most Significant Byte First setting for SPI. | `false` |
@@ -63,7 +63,7 @@ POINTING_DEVICE_DRIVER = analog_joystick
The Analog Joystick is an analog (ADC) driven sensor. There are a variety of joysticks that you can use for this. The Analog Joystick is an analog (ADC) driven sensor. There are a variety of joysticks that you can use for this.
| Setting (`config.h`) | Description | Default | | Setting | Description | Default |
| --------------------------------- | -------------------------------------------------------------------------- | ------------- | | --------------------------------- | -------------------------------------------------------------------------- | ------------- |
| `ANALOG_JOYSTICK_X_AXIS_PIN` | (Required) The pin used for the vertical/X axis. | _not defined_ | | `ANALOG_JOYSTICK_X_AXIS_PIN` | (Required) The pin used for the vertical/X axis. | _not defined_ |
| `ANALOG_JOYSTICK_Y_AXIS_PIN` | (Required) The pin used for the horizontal/Y axis. | _not defined_ | | `ANALOG_JOYSTICK_Y_AXIS_PIN` | (Required) The pin used for the horizontal/Y axis. | _not defined_ |
@@ -153,7 +153,7 @@ Additionally, `POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE` is supported in thi
#### Relative mode gestures #### Relative mode gestures
| Gesture Setting (`config.h`) | Description | Default | | Gesture Setting | Description | Default |
| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- |
| `CIRQUE_PINNACLE_TAP_ENABLE` | (Optional) Enable tap to "left click". Works on both sides of a split keyboard. | _not defined_ | | `CIRQUE_PINNACLE_TAP_ENABLE` | (Optional) Enable tap to "left click". Works on both sides of a split keyboard. | _not defined_ |
| `CIRQUE_PINNACLE_SECONDARY_TAP_ENABLE` | (Optional) Tap in upper right corner (half of the finger needs to be outside of the trackpad) of the trackpad will result in "right click". `CIRQUE_PINNACLE_TAP_ENABLE` must be enabled. | _not defined_ | | `CIRQUE_PINNACLE_SECONDARY_TAP_ENABLE` | (Optional) Tap in upper right corner (half of the finger needs to be outside of the trackpad) of the trackpad will result in "right click". `CIRQUE_PINNACLE_TAP_ENABLE` must be enabled. | _not defined_ |
@@ -172,10 +172,10 @@ POINTING_DEVICE_DRIVER = paw3204
The paw 3204 sensor uses a serial type protocol for communication, and requires an additional light source. The paw 3204 sensor uses a serial type protocol for communication, and requires an additional light source.
| Setting (`config.h`) | Description | Default | | Setting | Description | Default |
| -------------------- |--------------------------------------------------------------- | -------------------------- | | ------------------ |--------------------------------------------------------------- | -------------------------- |
| `PAW3204_SCLK_PIN` | (Required) The pin connected to the clock pin of the sensor. | `POINTING_DEVICE_SCLK_PIN` | | `PAW3204_SCLK_PIN` | (Required) The pin connected to the clock pin of the sensor. | `POINTING_DEVICE_SCLK_PIN` |
| `PAW3204_SDIO_PIN` | (Required) The pin connected to the data pin of the sensor. | `POINTING_DEVICE_SDIO_PIN` | | `PAW3204_SDIO_PIN` | (Required) The pin connected to the data pin of the sensor. | `POINTING_DEVICE_SDIO_PIN` |
The CPI range is 400-1600, with supported values of (400, 500, 600, 800, 1000, 1200 and 1600). Defaults to 1000 CPI. The CPI range is 400-1600, with supported values of (400, 500, 600, 800, 1000, 1200 and 1600). Defaults to 1000 CPI.
@@ -189,7 +189,7 @@ POINTING_DEVICE_DRIVER = pimoroni_trackball
The Pimoroni Trackball module is a I2C based breakout board with an RGB enable trackball. The Pimoroni Trackball module is a I2C based breakout board with an RGB enable trackball.
| Setting (`config.h`) | Description | Default | | Setting | Description | Default |
| ------------------------------------ | ---------------------------------------------------------------------------------- | ------- | | ------------------------------------ | ---------------------------------------------------------------------------------- | ------- |
| `PIMORONI_TRACKBALL_ADDRESS` | (Required) Sets the I2C Address for the Pimoroni Trackball. | `0x0A` | | `PIMORONI_TRACKBALL_ADDRESS` | (Required) Sets the I2C Address for the Pimoroni Trackball. | `0x0A` |
| `PIMORONI_TRACKBALL_TIMEOUT` | (Optional) The timeout for i2c communication with the trackball in milliseconds. | `100` | | `PIMORONI_TRACKBALL_TIMEOUT` | (Optional) The timeout for i2c communication with the trackball in milliseconds. | `100` |
@@ -220,7 +220,7 @@ The CPI range is 50-16000, in increments of 50. Defaults to 2000 CPI.
Both PMW 3360 and PMW 3389 are SPI driven optical sensors, that use a built in IR LED for surface tracking. Both PMW 3360 and PMW 3389 are SPI driven optical sensors, that use a built in IR LED for surface tracking.
If you have different CS wiring on each half you can use `PMW33XX_CS_PIN_RIGHT` or `PMW33XX_CS_PINS_RIGHT` in combination with `PMW33XX_CS_PIN` or `PMW33XX_CS_PINS` to configure both sides independently. If `_RIGHT` values aren't provided, they default to be the same as the left ones. If you have different CS wiring on each half you can use `PMW33XX_CS_PIN_RIGHT` or `PMW33XX_CS_PINS_RIGHT` in combination with `PMW33XX_CS_PIN` or `PMW33XX_CS_PINS` to configure both sides independently. If `_RIGHT` values aren't provided, they default to be the same as the left ones.
| Setting (`config.h`) | Description | Default | | Setting | Description | Default |
| ---------------------------- | ------------------------------------------------------------------------------------------- | ------------------------ | | ---------------------------- | ------------------------------------------------------------------------------------------- | ------------------------ |
| `PMW33XX_CS_PIN` | (Required) Sets the Chip Select pin connected to the sensor. | `POINTING_DEVICE_CS_PIN` | | `PMW33XX_CS_PIN` | (Required) Sets the Chip Select pin connected to the sensor. | `POINTING_DEVICE_CS_PIN` |
| `PMW33XX_CS_PINS` | (Alternative) Sets the Chip Select pins connected to multiple sensors. | `{PMW33XX_CS_PIN}` | | `PMW33XX_CS_PINS` | (Alternative) Sets the Chip Select pins connected to multiple sensors. | `{PMW33XX_CS_PIN}` |
@@ -434,75 +434,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
This allows you to toggle between scrolling and cursor movement by pressing the DRAG_SCROLL key. This allows you to toggle between scrolling and cursor movement by pressing the DRAG_SCROLL key.
### Advanced Drag Scroll
Sometimes, like with the Cirque trackpad, you will run into issues where the scrolling may be too fast.
Here is a slightly more advanced example of drag scrolling. You will be able to change the scroll speed based on the values in set in `SCROLL_DIVISOR_H` and `SCROLL_DIVISOR_V`. This bit of code is also set up so that instead of toggling the scrolling state with set_scrolling = !set_scrolling, the set_scrolling variable is set directly to record->event.pressed. This way, the drag scrolling will only be active while the DRAG_SCROLL button is held down.
```c
enum custom_keycodes {
DRAG_SCROLL = SAFE_RANGE,
};
bool set_scrolling = false;
// Modify these values to adjust the scrolling speed
#define SCROLL_DIVISOR_H 8.0
#define SCROLL_DIVISOR_V 8.0
// Variables to store accumulated scroll values
float scroll_accumulated_h = 0;
float scroll_accumulated_v = 0;
// Function to handle mouse reports and perform drag scrolling
report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
// Check if drag scrolling is active
if (set_scrolling) {
// Calculate and accumulate scroll values based on mouse movement and divisors
scroll_accumulated_h += (float)mouse_report.x / SCROLL_DIVISOR_H;
scroll_accumulated_v += (float)mouse_report.y / SCROLL_DIVISOR_V;
// Assign integer parts of accumulated scroll values to the mouse report
mouse_report.h = (int8_t)scroll_accumulated_h;
mouse_report.v = (int8_t)scroll_accumulated_v;
// Update accumulated scroll values by subtracting the integer parts
scroll_accumulated_h -= (int8_t)scroll_accumulated_h;
scroll_accumulated_v -= (int8_t)scroll_accumulated_v;
// Clear the X and Y values of the mouse report
mouse_report.x = 0;
mouse_report.y = 0;
}
return mouse_report;
}
// Function to handle key events and enable/disable drag scrolling
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case DRAG_SCROLL:
// Toggle set_scrolling when DRAG_SCROLL key is pressed or released
set_scrolling = record->event.pressed;
break;
default:
break;
}
return true;
}
// Function to handle layer changes and disable drag scrolling when not in AUTO_MOUSE_DEFAULT_LAYER
layer_state_t layer_state_set_user(layer_state_t state) {
// Disable set_scrolling if the current layer is not the AUTO_MOUSE_DEFAULT_LAYER
if (get_highest_layer(state) != AUTO_MOUSE_DEFAULT_LAYER) {
set_scrolling = false;
}
return state;
}
```
## Split Examples ## Split Examples
The following examples make use the `SPLIT_POINTING_ENABLE` functionality and show how to manipulate the mouse report for a scrolling mode. The following examples make use the `SPLIT_POINTING_ENABLE` functionality and show how to manipulate the mouse report for a scrolling mode.
+1 -1
View File
@@ -1,4 +1,4 @@
# Word Per Minute (WPM) Calculation # Word Per Minute (WPM) Calculcation
The WPM feature uses time between keystrokes to compute a rolling average words per minute rate and makes this available for various uses. The WPM feature uses time between keystrokes to compute a rolling average words per minute rate and makes this available for various uses.
-56
View File
@@ -1,56 +0,0 @@
# Vagrant Quick Start
This project includes a `Vagrantfile` that will allow you to build a new firmware for your keyboard very easily without major changes to your primary operating system. This also ensures that when you clone the project and perform a build, you have the exact same environment as anyone else using the Vagrantfile to build. This makes it much easier for people to help you troubleshoot any issues you encounter.
## Requirements
Using the `Vagrantfile` in this repository requires you have [Vagrant](https://www.vagrantup.com/) as well as a supported provider installed:
* [VirtualBox](https://www.virtualbox.org/) (Version at least 5.0.12)
* Sold as 'the most accessible platform to use Vagrant'
* [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](https://www.vagrantup.com/vmware)
* The (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion
* [Docker](https://www.docker.com/)
Other than having Vagrant, a suitable provider installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start an environment (either a virtual machine or container) that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below.
## Flashing the Firmware
The "easy" way to flash the firmware is using a tool from your host OS:
* [QMK Toolbox](https://github.com/qmk/qmk_toolbox) (recommended)
* [Teensy Loader](https://www.pjrc.com/teensy/loader.html)
If you want to program via the command line you can uncomment the ['modifyvm'] lines in the Vagrantfile to enable the USB passthrough into Linux and then program using the command line tools like dfu-util/dfu-programmer or you can install the Teensy CLI version.
## Vagrantfile Overview
The development environment is configured to run the QMK Docker image, `qmkfm/qmk_cli`. This not only ensures predictability between systems, it also mirrors the CI environment.
## FAQ
### Why am I seeing issues under Virtualbox?
Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12. **Alternately, you can try running the following command:**
```
vagrant plugin install vagrant-vbguest
```
### How do I remove an existing environment?
Finished with your environment? From anywhere inside the folder where you checked out this project, Execute:
```
vagrant destroy
```
### What if I want to use Docker directly?
Want to benefit from the Vagrant workflow without a virtual machine? The Vagrantfile is configured to bypass running a virtual machine, and run the container directly. Execute the following when bringing up the environment to force the use of Docker:
```
vagrant up --provider=docker
```
### How do I access the virtual machine instead of the Docker container?
Execute the following to bypass the `vagrant` user booting directly to the official qmk builder image:
```
vagrant ssh -c 'sudo -i'
```
-35
View File
@@ -35,40 +35,6 @@ To use a 5V/16MHz Pro Micro as an ISP flashing tool, you will first need to load
!> Note that the `10` pin on the Pro Micro should be wired to the `RESET` pin on the keyboard's controller. ***DO NOT*** connect the `RESET` pin on the Pro Micro to the `RESET` on the keyboard. !> Note that the `10` pin on the Pro Micro should be wired to the `RESET` pin on the keyboard's controller. ***DO NOT*** connect the `RESET` pin on the Pro Micro to the `RESET` on the keyboard.
### Arduino Uno / Micro as ISP
[Arduino Uno](https://store.arduino.cc/products/arduino-uno-rev3)
[Arduino Micro](https://store.arduino.cc/products/arduino-micro)
A standard Uno or Micro can be used as an ISP flashing tool using the [example "ArduinoISP" sketch](https://docs.arduino.cc/built-in-examples/arduino-isp/ArduinoISP#load-the-sketch) to emulate an STK500 ISP. Also works with Sparkfun Pro Micros and clones.
**AVRDUDE Programmer**: `stk500v1`
**AVRDUDE Port**: Serial
#### Wiring
|Uno |Keyboard|
|-----------|--------|
|`5V` |`VCC` |
|`GND` |`GND` |
|`10` (`B2`)|`RESET` |
|`13` (`B5`)|`SCLK` |
|`11` (`B3`)|`MOSI` |
|`12` (`B4`)|`MISO` |
|Micro |Keyboard|
|-----------|--------|
|`5V` |`VCC` |
|`GND` |`GND` |
|`10` (`B6`)|`RESET` |
|`15` (`B1`)|`SCLK` |
|`16` (`B2`)|`MOSI` |
|`14` (`B3`)|`MISO` |
!> Note that the `10` pin on the Uno/Micro should be wired to the `RESET` pin on the keyboard's controller. ***DO NOT*** connect the `RESET` pin on the Uno/Micro to the `RESET` on the keyboard.
### Teensy 2.0 as ISP ### Teensy 2.0 as ISP
[PJRC Teensy 2.0](https://www.pjrc.com/store/teensy.html) [PJRC Teensy 2.0](https://www.pjrc.com/store/teensy.html)
@@ -91,7 +57,6 @@ To use a Teensy 2.0 as an ISP flashing tool, you will first need to load a [spec
!> Note that the `B0` pin on the Teensy should be wired to the `RESET` pin on the keyboard's controller. ***DO NOT*** connect the `RESET` pin on the Teensy to the `RESET` on the keyboard. !> Note that the `B0` pin on the Teensy should be wired to the `RESET` pin on the keyboard's controller. ***DO NOT*** connect the `RESET` pin on the Teensy to the `RESET` on the keyboard.
### SparkFun PocketAVR / USBtinyISP ### SparkFun PocketAVR / USBtinyISP
[SparkFun PocketAVR](https://www.sparkfun.com/products/9825) [SparkFun PocketAVR](https://www.sparkfun.com/products/9825)
-1
View File
@@ -38,7 +38,6 @@
* [キーマップの概要](ja/keymap.md) * [キーマップの概要](ja/keymap.md)
* 開発環境 * 開発環境
* [Docker のガイド](ja/getting_started_docker.md) * [Docker のガイド](ja/getting_started_docker.md)
* [Vagrant のガイド](ja/getting_started_vagrant.md)
* 書き込み * 書き込み
* [書き込み](ja/flashing.md) * [書き込み](ja/flashing.md)
* [ATmega32A の書き込み (ps2avrgb)](ja/flashing_bootloadhid.md) * [ATmega32A の書き込み (ps2avrgb)](ja/flashing_bootloadhid.md)
-61
View File
@@ -1,61 +0,0 @@
# Vagrant クイックスタート
<!---
original document: 0.12.43:docs/getting_started_vagrant.md
git diff 0.12.43 HEAD -- docs/getting_started_vagrant.md | cat
-->
このプロジェクトは、プライマリオペレーティングシステムに大きな変更を加えることなくキーボードの新しいファームウェアを非常に簡単に構築することができる `Vagrantfile` を含みます。これは、あなたがプロジェクトをクローンしビルドを実行した時に、ビルドのために Vagrantfile を使っている他のユーザと全く同じ環境を持つことも保証します。これにより、人々はあなたが遭遇した問題の解決をより簡単に行えるようになります。
## 必要事項
このリポジトリ内の `Vagrantfile` を使うには、[Vagrant](https://www.vagrantup.com/) およびサポートされるプロバイダがインストールされている必要があります:
* [VirtualBox](https://www.virtualbox.org/) (バージョン 5.0.12 以降)
* 「Vagrant を使うために最もアクセスしやすいプラットフォーム」とうたわれています。
* [VMware Workstation](https://www.vmware.com/products/workstation) および [Vagrant VMware プラグイン](https://www.vagrantup.com/vmware)
* (有料) VMware プラグインには、ライセンスされた VMware Workstation/Fusion のコピーが必要です。
* [Docker](https://www.docker.com/)
Vagrant 以外に、適切なプロバイダがインストールされ、その後におそらくコンピュータを再起動すると、このプロジェクトをチェックアウトしたフォルダ内の任意の場所で 'vagrant up' を単純に実行することができ、このプロジェクトをビルドするのに必要な全てのツールが含まれる環境(仮想マシンあるいはコンテナ)が開始されます。Vagrant 起動時にうまく始めるためのヒントが表示されますが、それ以外に、以下のビルドドキュメントを参照することもできます。
## ファームウェアの書き込み
ファームウェアを書き込む「簡単な」方法は、ホスト OS からツールを使うことです:
* [QMK Toolbox](https://github.com/qmk/qmk_toolbox) (推奨)
* [Teensy ローダー](https://www.pjrc.com/teensy/loader.html)
コマンドラインでプログラムしたい場合は、Vagranfile の ['modifyvm'] 行のコメントを解除して Linux への USB パススルーを有効にし、dfu-util/dfu-programmer のようなコマンドラインツールを使ってプログラムすることができます。あるいは Teensy CLI バージョンをインストールすることができます。
## Vagrantfile の概要
開発環境は QMK Docker イメージ、`qmkfm/qmk_cli` を実行するように設定されています。これはシステム間の予測可能性が保証されるだけでなく、CI 環境もミラーされます。
## FAQ
### Virtualbox で問題が発生するのはなぜですか?
Virtualbox 5 の特定のバージョンはこの Vagrantfile のボックスにインストールされている Virtualbox の拡張機能と互換性が無いようです。/vagrant のマウントで問題が発生した場合は、Virtualbox のバージョンを少なくとも 5.0.12 にアップグレードしてください。**または、以下のコマンドを実行してみることができます:**
```console
vagrant plugin install vagrant-vbguest
```
### 既存の環境を削除するにはどうすればいいですか?
あなたの環境での作業が完了しましたか?このプロジェクトをチェックアウトしたフォルダの中のどこからでも、以下を実行してください:
```console
vagrant destroy
```
### Docker を直接使いたい場合はどうしますか?
仮想マシン無しで Vagrant のワークフローを活用したいですか?Vagrantfile は仮想マシンの実行をバイパスし、コンテナを直接実行するように設定されています。Docker を強制的に使うように環境を立ち上げる場合は、以下を実行してください:
```console
vagrant up --provider=docker
```
### Docker コンテナではなく仮想マシンにアクセスするにはどうすればいいですか?
以下を実行して、公式の QMK ビルダーイメージから直接起動する `vagrant` ユーザをバイパスするようにします:
```console
vagrant ssh -c 'sudo -i'
```
-8
View File
@@ -56,17 +56,11 @@ QMK maintains a Homebrew tap and formula which will automatically install the CL
You will need to install Homebrew. Follow the instructions on https://brew.sh. You will need to install Homebrew. Follow the instructions on https://brew.sh.
!> **NOTE:** If you are using Apple Silicon, such as the M1, you will need to install a rosetta compatible version of Homebrew. This version does not override the base Homebrew. This can be done by running `arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"`. See here: [Rosetta-compatible Homebrew](https://stackoverflow.com/questions/64882584/how-to-run-the-homebrew-installer-under-rosetta-2-on-m1-macbook)
#### Installation #### Installation
Install the QMK CLI by running: Install the QMK CLI by running:
brew install qmk/qmk/qmk brew install qmk/qmk/qmk
Install the QMK CLI on an Apple Silicon Mac by running:
arch -x86_64 brew install qmk/qmk/qmk
### ** Linux/WSL ** ### ** Linux/WSL **
@@ -172,8 +166,6 @@ For example, to build a firmware for a Clueboard 66% you would use:
qmk compile -kb clueboard/66/rev3 -km default qmk compile -kb clueboard/66/rev3 -km default
?> The keyboard option is the path relative to the keyboard directory, the above example would be found in `qmk_firmware/keyboards/clueboard/66/rev3`. If you're unsure you can view a full list of supported keyboards with `qmk list-keyboards`.
When it is done you should have a lot of output that ends similar to this: When it is done you should have a lot of output that ends similar to this:
``` ```
+10 -43
View File
@@ -46,7 +46,16 @@ Before starting, you will want to make sure that you have all of the build tools
This part is super simple. However, there is some configuration that we need to do to ensure things are configured correctly. This part is super simple. However, there is some configuration that we need to do to ensure things are configured correctly.
#### MSYS2 Setup ### Configuring VS Code
First, we need to set up IntelliSense. This isn't strictly required, but it will make your life a LOT easier. To do this, we need to create the `.vscode/c_cpp_properties.json` file in the QMK Firmware folder, You can do this all manually, but I've done most of the work already.
Grab [this file](https://gist.github.com/drashna/48e2c49ce877be592a1650f91f8473e8) and save it. You may need to edit this file, if you didn't install MSYS2 to the default location, or are using WSL/LxSS.
Once you have saved this file, you will need to reload VS Code, if it was already running.
?> You should see an `extensions.json` and `settings.json` file in the `.vscode` folder, as well.
Now, we will set up the MSYS2 window to show up in VSCode as the integrated terminal. This has a number of advantages. Mostly, you can control+click on errors and jump to those files. This makes debugging much easier. It's also nice, in that you don't have to jump to another window. Now, we will set up the MSYS2 window to show up in VSCode as the integrated terminal. This has a number of advantages. Mostly, you can control+click on errors and jump to those files. This makes debugging much easier. It's also nice, in that you don't have to jump to another window.
@@ -101,50 +110,8 @@ This installs a bunch of Git related tools that may make using Git with QMK Firm
Restart once you've installed any extensions Restart once you've installed any extensions
# Configure VS Code for QMK # Configure VS Code for QMK
1. Click <kbd><kbd>File</kbd> > <kbd>Open Folder</kbd></kbd> 1. Click <kbd><kbd>File</kbd> > <kbd>Open Folder</kbd></kbd>
2. Open the QMK Firmware folder that you cloned from GitHub. 2. Open the QMK Firmware folder that you cloned from GitHub.
3. Click <kbd><kbd>File</kbd> > <kbd>Save Workspace As...</kbd></kbd> 3. Click <kbd><kbd>File</kbd> > <kbd>Save Workspace As...</kbd></kbd>
## Configuring VS Code
Using the [standard `compile_commands.json` database](https://clang.llvm.org/docs/JSONCompilationDatabase.html), we can get VS code C/C++ extension to use the exact same includes and defines used for your keyboard and keymap.
1. Run `qmk generate-compilation-database -kb <keyboard> -km <keymap>` to generate the `compile_commands.json`.
1. Create `.vscode/c_cpp_properties.json` with the following content:
```
{
"configurations": [
{
"name": "qmk",
"compilerArgs": ["-mmcu=atmega32u4"],
"compilerPath": "/usr/bin/avr-gcc",
"cStandard": "gnu11",
"cppStandard": "gnu++14",
"compileCommands": "${workspaceFolder}/compile_commands.json",
"intelliSenseMode": "linux-gcc-arm",
"browse": {
"path": [
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
],
"version": 4
}
```
Change values in `.vscode/c_cpp_properties.json` for your environment:
1. Copy the `-mmcu` argument from `compile_commands.json` into your `compilerArgs`. This is to work around a [bug in vscode c/c++ extension](https://github.com/microsoft/vscode-cpptools/issues/6478).
1. Use the `compilerPath` from `compile_commands.json`.
1. Modify `cStandard`, `cppStandard` and `intelliSenseMode` values to the correct values for your platform. See [this section](https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference#_configuration-properties) for reference. For WSL, it should still be gcc-x64.
And now you're ready to code QMK Firmware in VS Code And now you're ready to code QMK Firmware in VS Code
## Troubleshooting VSCode C/C++ extension
If the defines are not matching what you expect, open the source code and run action `C/C++: Log Diagnostics`. This will list the exact list of defines and include paths defined in `compile_commands.json`, and if it's not part of your compilation database, it will tell you so.
-1
View File
@@ -53,7 +53,6 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
- keyboard moves within the repository *must* go through the `develop` branch instead of `master`, so as to ensure compatibility for users - keyboard moves within the repository *must* go through the `develop` branch instead of `master`, so as to ensure compatibility for users
- `data/mappings/keyboard_aliases.hjson` must be updated to reflect the move, so users with pre-created configurator keymap.json files continue to detect the correct keyboard - `data/mappings/keyboard_aliases.hjson` must be updated to reflect the move, so users with pre-created configurator keymap.json files continue to detect the correct keyboard
- keyboard updates and refactors (eg. to data driven) *must* go through `develop` to reduce `master` -> `develop` merge conflicts
- PR submissions from a `kbfirmware` export (or equivalent) will not be accepted unless converted to new QMK standards -- try `qmk import-kbfirmware` first - PR submissions from a `kbfirmware` export (or equivalent) will not be accepted unless converted to new QMK standards -- try `qmk import-kbfirmware` first
- `info.json` - `info.json`
- With the move to [data driven](https://docs.qmk.fm/#/data_driven_config) keyboard configuration, we encourage contributors to utilise as many features as possible of the info.json [schema](https://github.com/qmk/qmk_firmware/blob/master/data/schemas/keyboard.jsonschema). - With the move to [data driven](https://docs.qmk.fm/#/data_driven_config) keyboard configuration, we encourage contributors to utilise as many features as possible of the info.json [schema](https://github.com/qmk/qmk_firmware/blob/master/data/schemas/keyboard.jsonschema).
+1
View File
@@ -194,6 +194,7 @@ That said, there are a number of Pro Micro replacements with ARM controllers:
* [Blok](https://boardsource.xyz/store/628b95b494dfa308a6581622) * [Blok](https://boardsource.xyz/store/628b95b494dfa308a6581622)
* [Elite-Pi](https://keeb.io/products/elite-pi-usb-c-pro-micro-replacement-rp2040) * [Elite-Pi](https://keeb.io/products/elite-pi-usb-c-pro-micro-replacement-rp2040)
* [0xCB Helios](https://keeb.supply/products/0xcb-helios) ([Open Source](https://github.com/0xCB-dev/0xCB-Helios), DIY/PCBA/Shop) * [0xCB Helios](https://keeb.supply/products/0xcb-helios) ([Open Source](https://github.com/0xCB-dev/0xCB-Helios), DIY/PCBA/Shop)
* [Liatris](https://splitkb.com/products/liatris)
* [Michi](https://github.com/ci-bus/michi-promicro-rp2040) * [Michi](https://github.com/ci-bus/michi-promicro-rp2040)
There are other, non-Pro Micro compatible boards out there. The most popular being: There are other, non-Pro Micro compatible boards out there. The most popular being:
+1 -2
View File
@@ -42,7 +42,6 @@
* [键映射总览](zh-cn/keymap.md) * [键映射总览](zh-cn/keymap.md)
* 开发环境 * 开发环境
* [Docker指南](zh-cn/getting_started_docker.md) * [Docker指南](zh-cn/getting_started_docker.md)
* [Vagrant指南](zh-cn/getting_started_vagrant.md)
* 刷写(Flashing) * 刷写(Flashing)
* [刷写](zh-cn/flashing.md) * [刷写](zh-cn/flashing.md)
* [刷写ATmega32A (ps2avrgb)](zh-cn/flashing_bootloadhid.md) * [刷写ATmega32A (ps2avrgb)](zh-cn/flashing_bootloadhid.md)
@@ -188,5 +187,5 @@
* [Midi辅助功能](zh-cn/internals/midi_util.md) * [Midi辅助功能](zh-cn/internals/midi_util.md)
* [发送函数](zh-cn/internals/send_functions.md) * [发送函数](zh-cn/internals/send_functions.md)
* [Sysex工具](zh-cn/internals/sysex_tools.md) * [Sysex工具](zh-cn/internals/sysex_tools.md)
<!--fromen:20211014-12:00(GMT+8) commit 04cf161aa01fd433b5dae69d9fd31569ed5dca59--> <!--fromen:20211014-12:00(GMT+8) commit 04cf161aa01fd433b5dae69d9fd31569ed5dca59-->
-61
View File
@@ -1,61 +0,0 @@
# Vagrant快速上手指引
<!---
original document: 0.15.12:docs/getting_started_vagrant.md
git diff 0.15.12 HEAD -- docs/getting_started_vagrant.md | cat
-->
本工程包含一份 `Vagrantfile`,可以方便地在不更改你系统环境情况下完成新固件文件的构建工作。这同时也保证了在你拉取该工程代码后的编译环境与也使用Vagrantfile的其它人的一致。当你需要其他人协助你排查遇到的问题时会方便很多。
## 需求
本工程中的 `Vagrantfile` 需要安装[Vagrant](https://www.vagrantup.com/)以及可用的虚拟机服务:
* [VirtualBox](https://www.virtualbox.org/) (5.0.12及以后版本)
* 卖点是'最适用于Vagrant的平台'
* [VMware Workstation](https://www.vmware.com/products/workstation) 及 [Vagrant VMware插件](https://www.vagrantup.com/vmware)
* (付费购买的)VMware插件需要在经过正版授权的VMware Workstation/Fusion上运行
* [Docker](https://www.docker.com/)
安装了Vagrant之后,在安装合适的虚拟机服务后可能需要重启机器。拉取本工程后在工程目录下执行 'vagrant up' 将启动一个包含了所有本工程所需工具的构建环境(虚拟机或是容器)。最后会有一个vagrant启动提示告知你一切正常就绪,否则你也可以参考一下下面的构建文档。
## 刷写固件
比较“简单”的方案是在你的宿主系统上借助以下工具刷写固件:
* [QMK工具箱](https://github.com/qmk/qmk_toolbox) (推荐)
* [Teensy Loader](https://www.pjrc.com/teensy/loader.html)
如果你希望通过命令行进行编程工作,可以在Vagrantfile中取消掉['modifyvm']的注释以允许USB直通到Linux环境,既可以使用dfu-util/dfu-programmer之类的命令行工具进行编程工作,或是安装Teensy的命令行版本。
## Vagrantfile概览
开发环境被配置为运行QMK Docker镜像 `qmkfm/qmk_cli`,不仅让各系统下的功能预期一致,也是我们CI环境的镜像。
## FAQ
### 为什么我的VirtualBox环境会有问题?
VirtualBox 5的某些版本与工程中Vagrantfile中指定的VirtualBox扩展存在兼容问题。如果你遇到了/vagrant挂载不成功的问题,请升级VirtualBox至5.0.12或更高版本。**或者,可以尝试执行如下命令:**
```console
vagrant plugin install vagrant-vbguest
```
### 如何移除一个现有环境?
不再需要这个环境了是吗?在本工程目录下的任何位置,执行:
```console
vagrant destroy
```
### 如果我是想直接用Docker呢?
想在不使用虚拟机技术的情况下也能使用Vagrant工作流?Vagrangfile已配置为允许绕过运行虚拟机,直接运行容器。通过如下方式执行命令可以强制使用Docker来启动环境:
```console
vagrant up --provider=docker
```
### 如何访问虚拟机环境而非Docker容器?
通过如下方法跳过 `vagrant` 的用户初始化过程以在QMK构建镜像中直接执行:
```console
vagrant ssh -c 'sudo -i'
```
+19
View File
@@ -1,4 +1,5 @@
/* Copyright 2021 Jasper Chan /* Copyright 2021 Jasper Chan
* 2023 Huckies <https://github.com/Huckies>
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -15,6 +16,7 @@
*/ */
#include "aw20216.h" #include "aw20216.h"
#include "wait.h"
#include "spi_master.h" #include "spi_master.h"
/* The AW20216 appears to be somewhat similar to the IS31FL743, although quite /* The AW20216 appears to be somewhat similar to the IS31FL743, although quite
@@ -34,6 +36,8 @@
#define AW_REG_CONFIGURATION 0x00 // PG0 #define AW_REG_CONFIGURATION 0x00 // PG0
#define AW_REG_GLOBALCURRENT 0x01 // PG0 #define AW_REG_GLOBALCURRENT 0x01 // PG0
#define AW_REG_RESET 0x2F // PG0
#define AW_REG_MIXFUNCTION 0x46 // PG0
// Default value of AW_REG_CONFIGURATION // Default value of AW_REG_CONFIGURATION
// D7:D4 = 1011, SWSEL (SW1~SW12 active) // D7:D4 = 1011, SWSEL (SW1~SW12 active)
@@ -41,7 +45,10 @@
// D2:D1 = 00, OSDE (open/short detection enable) // D2:D1 = 00, OSDE (open/short detection enable)
// D0 = 0, CHIPEN (write 1 to enable LEDs when hardware enable pulled high) // D0 = 0, CHIPEN (write 1 to enable LEDs when hardware enable pulled high)
#define AW_CONFIG_DEFAULT 0b10110000 #define AW_CONFIG_DEFAULT 0b10110000
#define AW_MIXCR_DEFAULT 0b00000000
#define AW_RESET_CMD 0xAE
#define AW_CHIPEN 1 #define AW_CHIPEN 1
#define AW_LPEN (0x01 << 1)
#define AW_PWM_REGISTER_COUNT 216 #define AW_PWM_REGISTER_COUNT 216
@@ -94,6 +101,10 @@ static inline bool AW20216_write_register(pin_t cs_pin, uint8_t page, uint8_t re
return AW20216_write(cs_pin, page, reg, &value, 1); return AW20216_write(cs_pin, page, reg, &value, 1);
} }
void AW20216_soft_reset(pin_t cs_pin) {
AW20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_RESET, AW_RESET_CMD);
}
static void AW20216_init_scaling(pin_t cs_pin) { static void AW20216_init_scaling(pin_t cs_pin) {
// Set constant current to the max, control brightness with PWM // Set constant current to the max, control brightness with PWM
for (uint8_t i = 0; i < AW_PWM_REGISTER_COUNT; i++) { for (uint8_t i = 0; i < AW_PWM_REGISTER_COUNT; i++) {
@@ -111,15 +122,23 @@ static inline void AW20216_soft_enable(pin_t cs_pin) {
AW20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_CONFIGURATION, AW_CONFIG_DEFAULT | AW_CHIPEN); AW20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_CONFIGURATION, AW_CONFIG_DEFAULT | AW_CHIPEN);
} }
static inline void AW20216_auto_lowpower(pin_t cs_pin) {
AW20216_write_register(cs_pin, AW_PAGE_FUNCTION, AW_REG_MIXFUNCTION, AW_MIXCR_DEFAULT | AW_LPEN);
}
void AW20216_init(pin_t cs_pin, pin_t en_pin) { void AW20216_init(pin_t cs_pin, pin_t en_pin) {
setPinOutput(en_pin); setPinOutput(en_pin);
writePinHigh(en_pin); writePinHigh(en_pin);
AW20216_soft_reset(cs_pin);
wait_ms(2);
// Drivers should start with all scaling and PWM registers as off // Drivers should start with all scaling and PWM registers as off
AW20216_init_current_limit(cs_pin); AW20216_init_current_limit(cs_pin);
AW20216_init_scaling(cs_pin); AW20216_init_scaling(cs_pin);
AW20216_soft_enable(cs_pin); AW20216_soft_enable(cs_pin);
AW20216_auto_lowpower(cs_pin);
} }
void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
-7
View File
@@ -16,13 +16,6 @@
#pragma once #pragma once
#define MATRIX_ROW_PINS { B1, F7, F6, F5, F4 }
#define MATRIX_COL_PINS { D3, D2, D1, D0, D4, C6, D7, E6, B4, B5, B3, B2 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE #define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */ /* Locking resynchronize hack */
+5
View File
@@ -6,6 +6,11 @@
"vid": "0x7654", "vid": "0x7654",
"device_version": "0.0.1" "device_version": "0.0.1"
}, },
"matrix_pins": {
"cols": ["D3", "D2", "D1", "D0", "D4", "C6", "D7", "E6", "B4", "B5", "B3", "B2"],
"rows": ["B1", "F7", "F6", "F5", "F4"]
},
"diode_direction": "COL2ROW",
"features": { "features": {
"extrakey": true, "extrakey": true,
"console": true, "console": true,
-17
View File
@@ -17,23 +17,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once #pragma once
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { B0, B1, B2, B3, B7 }
#define MATRIX_COL_PINS { D0, D1, D2, D3, D5, D4, D6, D7, F7, F6, F5, F4, F1, F0 }
/* COL2ROW, ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE #define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */ /* Locking resynchronize hack */
+5
View File
@@ -8,6 +8,11 @@
"pid": "0x6161", "pid": "0x6161",
"device_version": "0.0.1" "device_version": "0.0.1"
}, },
"matrix_pins": {
"cols": ["D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7", "F7", "F6", "F5", "F4", "F1", "F0"],
"rows": ["B0", "B1", "B2", "B3", "B7"]
},
"diode_direction": "COL2ROW",
"processor": "atmega32u4", "processor": "atmega32u4",
"bootloader": "atmel-dfu", "bootloader": "atmel-dfu",
"layout_aliases": { "layout_aliases": {
-22
View File
@@ -1,22 +0,0 @@
// Copyright 2023 Conor Burns (@Conor-Burns)
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define RGB_DI_PIN D0
#define RGB_MATRIX_LED_COUNT 18
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_BREATHING
#define RGB_MATRIX_DEFAULT_HUE 152
#define RGB_MATRIX_DEFAULT_SAT 232
#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
#define RGB_MATRIX_DEFAULT_SPD 50
#define ENABLE_RGB_MATRIX_BREATHING
#define ENABLE_RGB_MATRIX_SOLID_COLOR
#define ENABLE_RGB_MATRIX_BAND_SAT
#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
#define ENABLE_RGB_MATRIX_CYCLE_ALL
#define ENABLE_RGB_MATRIX_RAINDROPS
#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-153
View File
@@ -1,153 +0,0 @@
{
"manufacturer": "Freya",
"keyboard_name": "splaytoraid",
"maintainer": "freya-irl",
"url": "https://github.com/freya-irl/splaytoraid40",
"development_board": "promicro",
"bootloader": "qmk-dfu",
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["F5", "F6", "F7", "F4", "B3", "B1", "B2"],
"rows": ["D3", "D2", "D1", "D4", "D7", "E6", "B4", "C6"]
},
"usb": {
"device_version": "1.0.0",
"pid": "0xCB00",
"vid": "0x2004"
},
"features": {
"extrakey": true,
"rgb_matrix": true,
"bootmagic": true,
"console": true,
"mousekey": true,
"nkro": true
},
"bootmagic": {
"matrix": [1, 0]
},
"build": {
"lto": true
},
"encoder": {
"enabled": true,
"rotary": [
{
"pin_a": "B5",
"pin_b": "B6",
"resolution": 4
}
]
},
"rgb_matrix": {
"driver": "WS2812",
"layout": [
{ "flags": 4, "matrix": [0, 2], "x": 0, "y": 0 },
{ "flags": 4, "matrix": [1, 0], "x": 20, "y": 0 },
{ "flags": 4, "matrix": [7, 0], "x": 61, "y": 0 },
{ "flags": 4, "matrix": [7, 1], "x": 163, "y": 0 },
{ "flags": 4, "matrix": [5, 0], "x": 203, "y": 0 },
{ "flags": 4, "matrix": [4, 2], "x": 224, "y": 0 },
{ "flags": 4, "matrix": [6, 2], "x": 0, "y": 21 },
{ "flags": 4, "matrix": [6, 1], "x": 224, "y": 21 },
{ "flags": 4, "matrix": [3, 3], "x": 20, "y": 43 },
{ "flags": 4, "matrix": [7, 3], "x": 61, "y": 43 },
{ "flags": 4, "matrix": [6, 4], "x": 163, "y": 43 },
{ "flags": 4, "matrix": [6, 3], "x": 203, "y": 43 },
{ "flags": 4, "matrix": [4, 3], "x": 61, "y": 64 },
{ "flags": 4, "matrix": [5, 5], "x": 81, "y": 64 },
{ "flags": 4, "matrix": [7, 4], "x": 101, "y": 64 },
{ "flags": 4, "matrix": [7, 5], "x": 122, "y": 64 },
{ "flags": 4, "matrix": [1, 5], "x": 142, "y": 64 },
{ "flags": 4, "matrix": [0, 3], "x": 163, "y": 64 }
]
},
"layouts": {
"LAYOUT_36": {
"layout": [
{ "label": "K10", "matrix": [1, 0], "x": 0, "y": 0 },
{ "label": "K11", "matrix": [1, 1], "x": 1, "y": 0 },
{ "label": "K02", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "K01", "matrix": [0, 1], "x": 3, "y": 0 },
{ "label": "K12", "matrix": [1, 2], "x": 4, "y": 0 },
{ "label": "K52", "matrix": [5, 2], "x": 6, "y": 0 },
{ "label": "K04", "matrix": [0, 4], "x": 7, "y": 0 },
{ "label": "K03", "matrix": [0, 3], "x": 8, "y": 0 },
{ "label": "K14", "matrix": [1, 4], "x": 9, "y": 0 },
{ "label": "K15", "matrix": [1, 5], "x": 10, "y": 0 },
{ "label": "K30", "matrix": [3, 0], "x": 0, "y": 1 },
{ "label": "K31", "matrix": [3, 1], "x": 1, "y": 1 },
{ "label": "K22", "matrix": [2, 2], "x": 2, "y": 1 },
{ "label": "K21", "matrix": [2, 1], "x": 3, "y": 1 },
{ "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
{ "label": "K53", "matrix": [5, 3], "x": 6, "y": 1 },
{ "label": "K24", "matrix": [2, 4], "x": 7, "y": 1 },
{ "label": "K23", "matrix": [2, 3], "x": 8, "y": 1 },
{ "label": "K34", "matrix": [3, 4], "x": 9, "y": 1 },
{ "label": "K35", "matrix": [3, 5], "x": 10, "y": 1 },
{ "label": "K50", "matrix": [5, 0], "x": 0, "y": 2 },
{ "label": "K51", "matrix": [5, 1], "x": 1, "y": 2 },
{ "label": "K42", "matrix": [4, 2], "x": 2, "y": 2 },
{ "label": "K41", "matrix": [4, 1], "x": 3, "y": 2 },
{ "label": "K32", "matrix": [3, 2], "x": 4, "y": 2 },
{ "label": "K72", "matrix": [7, 2], "x": 6, "y": 2 },
{ "label": "K44", "matrix": [4, 4], "x": 7, "y": 2 },
{ "label": "K43", "matrix": [4, 3], "x": 8, "y": 2 },
{ "label": "K54", "matrix": [5, 4], "x": 9, "y": 2 },
{ "label": "K55", "matrix": [5, 5], "x": 10, "y": 2 },
{ "label": "K62", "matrix": [6, 2], "x": 2, "y": 3 },
{ "label": "K61", "matrix": [6, 1], "x": 3, "y": 3 },
{ "label": "K33", "matrix": [3, 3], "x": 4, "y": 3 },
{ "label": "K66", "matrix": [6, 6], "x": 5, "y": 3 },
{ "label": "K73", "matrix": [7, 3], "x": 6, "y": 3 },
{ "label": "K64", "matrix": [6, 4], "x": 7, "y": 3 },
{ "label": "K63", "matrix": [6, 3], "x": 8, "y": 3 }
]
},
"LAYOUT_40": {
"layout": [
{ "label": "K70", "matrix": [7, 0], "x": 0, "y": 0 },
{ "label": "K10", "matrix": [1, 0], "x": 1, "y": 0 },
{ "label": "K11", "matrix": [1, 1], "x": 2, "y": 0 },
{ "label": "K02", "matrix": [0, 2], "x": 3, "y": 0 },
{ "label": "K01", "matrix": [0, 1], "x": 4, "y": 0 },
{ "label": "K12", "matrix": [1, 2], "x": 5, "y": 0 },
{ "label": "K52", "matrix": [5, 2], "x": 7, "y": 0 },
{ "label": "K04", "matrix": [0, 4], "x": 8, "y": 0 },
{ "label": "K03", "matrix": [0, 3], "x": 9, "y": 0 },
{ "label": "K14", "matrix": [1, 4], "x": 10, "y": 0 },
{ "label": "K15", "matrix": [1, 5], "x": 11, "y": 0 },
{ "label": "K75", "matrix": [7, 5], "x": 12, "y": 0 },
{ "label": "K71", "matrix": [7, 1], "x": 0, "y": 1 },
{ "label": "K30", "matrix": [3, 0], "x": 1, "y": 1 },
{ "label": "K31", "matrix": [3, 1], "x": 2, "y": 1 },
{ "label": "K22", "matrix": [2, 2], "x": 3, "y": 1 },
{ "label": "K21", "matrix": [2, 1], "x": 4, "y": 1 },
{ "label": "K13", "matrix": [1, 3], "x": 5, "y": 1 },
{ "label": "K53", "matrix": [5, 3], "x": 7, "y": 1 },
{ "label": "K24", "matrix": [2, 4], "x": 8, "y": 1 },
{ "label": "K23", "matrix": [2, 3], "x": 9, "y": 1 },
{ "label": "K34", "matrix": [3, 4], "x": 10, "y": 1 },
{ "label": "K35", "matrix": [3, 5], "x": 11, "y": 1 },
{ "label": "K74", "matrix": [7, 4], "x": 12, "y": 1 },
{ "label": "K50", "matrix": [5, 0], "x": 1, "y": 2 },
{ "label": "K51", "matrix": [5, 1], "x": 2, "y": 2 },
{ "label": "K42", "matrix": [4, 2], "x": 3, "y": 2 },
{ "label": "K41", "matrix": [4, 1], "x": 4, "y": 2 },
{ "label": "K32", "matrix": [3, 2], "x": 5, "y": 2 },
{ "label": "K72", "matrix": [7, 2], "x": 7, "y": 2 },
{ "label": "K44", "matrix": [4, 4], "x": 8, "y": 2 },
{ "label": "K43", "matrix": [4, 3], "x": 9, "y": 2 },
{ "label": "K54", "matrix": [5, 4], "x": 10, "y": 2 },
{ "label": "K55", "matrix": [5, 5], "x": 11, "y": 2 },
{ "label": "K62", "matrix": [6, 2], "x": 3, "y": 3 },
{ "label": "K61", "matrix": [6, 1], "x": 4, "y": 3 },
{ "label": "K33", "matrix": [3, 3], "x": 5, "y": 3 },
{ "label": "K66", "matrix": [6, 6], "x": 6, "y": 3 },
{ "label": "K73", "matrix": [7, 3], "x": 7, "y": 3 },
{ "label": "K64", "matrix": [6, 4], "x": 8, "y": 3 },
{ "label": "K63", "matrix": [6, 3], "x": 9, "y": 3 }
]
}
}
}
@@ -1,49 +0,0 @@
// Copyright 2023 Conor Burns (@Conor-Burns)
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include QMK_KEYBOARD_H
enum layer_names {
_BASE,
_LOWER,
_RAISE,
_ADJUST
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_40(
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_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_LSFT, KC_ESC, KC_ENT, KC_MPLY, KC_SPC, KC_DEL, KC_RSFT
),
[_LOWER] = LAYOUT_40(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
[_RAISE] = LAYOUT_40(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
[_ADJUST] = LAYOUT_40(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)
};
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_LOWER] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
[_RAISE] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
[_ADJUST] = { ENCODER_CCW_CW(KC_RGHT, KC_LEFT) }
};
@@ -1,21 +0,0 @@
// Copyright 2023 Dreipunkteinsvier (@dreipunkteinsvier)
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define TAPPING_TERM 180
// Prevent normal rollover on alphas from accidentally triggering mods.
#define IGNORE_MOD_TAP_INTERRUPT
#undef LOCKING_SUPPORT_ENABLE
#undef LOCKING_RESYNC_ENABLE
#ifdef COMBO_ENABLE
#define COMBO_COUNT 9
#define COMBO_TERM 20
#define COMBO_ONLY_FROM_LAYER 0
#endif
#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
@@ -1,304 +0,0 @@
// Copyright 2023 Dreipunkteinsvier (@dreipunkteinsvier)
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include QMK_KEYBOARD_H
#include <stdio.h>
#include <string.h>
// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
// │ D E F I N I T I O N S │
// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
enum splaytoraid40_layers {
_QWERTY,
_COLEMAK,
_NAVIGATION,
_MEDIA,
_NUMBERS,
_FUNCTION,
};
// ┌───────────────────────────────────────────────────────────┐
// │ d e f i n e k e y c o d e s │
// └───────────────────────────────────────────────────────────┘
enum custom_keycodes {
COLEMAK = SAFE_RANGE,
QWERTY
};
// ┌───────────────────────────────────────────────────────────┐
// │ d e f i n e m a c r o n a m e s │
// └───────────────────────────────────────────────────────────┘
// LEFT HAND HOME ROW MODS ├───────────────────────────────────┐
#define HM_A LGUI_T(KC_A)
#define HM_S LALT_T(KC_S)
#define HM_D LCTL_T(KC_D)
#define HM_F LSFT_T(KC_F)
#define HM_G RALT_T(KC_G)
// RIGHT HAND HOME ROW MODS ├──────────────────────────────────┐
#define HM_H RALT_T(KC_H)
#define HM_J RSFT_T(KC_J)
#define HM_K LCTL_T(KC_K)
#define HM_L LALT_T(KC_L)
#define HM_SCLN LGUI_T(KC_SCLN)
// CTRL + ARROWS ├─────────────────────────────────────────────┐
#define CT_LEFT LCTL(KC_LEFT)
#define CT_DOWN LCTL(KC_DOWN)
#define CT_UP LCTL(KC_UP)
#define CT_RGHT LCTL(KC_RGHT)
// THUMB KEY LAYER TAPS ├──────────────────────────────────────┐
#define TB_TAB LT(_MEDIA, KC_TAB)
#define TB_ENT LT(_NAVIGATION, KC_ENT)
#define TB_SPC LT(_NUMBERS, KC_SPC)
#define TB_BSPC LT(_FUNCTION, KC_BSPC)
// ┌───────────────────────────────────────────────────────────┐
// │ d e f i n e c o m b o s │
// └───────────────────────────────────────────────────────────┘
// vertical combos for umlauts
const uint16_t PROGMEM ae_combo[] = {KC_Q, HM_A, COMBO_END};
const uint16_t PROGMEM ss_combo[] = {KC_W, HM_S, COMBO_END};
const uint16_t PROGMEM ue_combo[] = {KC_U, HM_J, COMBO_END};
const uint16_t PROGMEM oe_combo[] = {KC_O, HM_L, COMBO_END};
// horizontal combos for mods
const uint16_t PROGMEM del_combo[] = {HM_H, HM_J, COMBO_END};
const uint16_t PROGMEM bsp_combo[] = {HM_J, HM_K, COMBO_END};
const uint16_t PROGMEM ent_combo[] = {HM_K, HM_L, COMBO_END};
const uint16_t PROGMEM tab_combo[] = {HM_F, HM_D, COMBO_END};
const uint16_t PROGMEM esc_combo[] = {HM_D, HM_S, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {
COMBO(ae_combo, RALT(KC_Q)),
COMBO(ss_combo, RALT(KC_S)),
COMBO(ue_combo, RALT(KC_Y)),
COMBO(oe_combo, RALT(KC_P)),
COMBO(del_combo, KC_DEL),
COMBO(bsp_combo, KC_BSPC),
COMBO(ent_combo, KC_ENT),
COMBO(tab_combo, KC_TAB),
COMBO(esc_combo, KC_ESC)
};
// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
// │ K E Y M A P S │
// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
┌───────────────────────────────────────────────────────────┐
│ q w e r t y │
└───────────────────────────────────────────────────────────┘
┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
│ 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 │ , │ . │ / │
└─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
│ ESC │ TAB │ ENTER │ │ SPACE │ BSPACE │ DEL │
└─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
[_QWERTY] = LAYOUT_36(
//╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
HM_A, HM_S, HM_D, HM_F, HM_G, HM_H, HM_J, HM_K, HM_L, HM_SCLN,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_ESC, TB_TAB, TB_ENT, KC_MPLY, TB_SPC, TB_BSPC, KC_DEL
),
/*
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
┌───────────────────────────────────────────────────────────┐
│ c o l e m a k │
└───────────────────────────────────────────────────────────┘
┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
│ Q │ W │ F │ P │ G │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ J │ L │ U │ Y │ ; │
├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
│ A │ R │ S │ T │ D ├─╯ ╰─┤ H │ N │ E │ I │ O │
├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
│ Z │ X │ C │ V │ B ││ ││ ││ K │ M │ , │ . │ / │
└─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
│ ESC │ TAB │ ENTER │ │ SPACE │ BSPACE │ DEL │
└─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
[_COLEMAK] = LAYOUT_36(
//╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,
KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_ESC, TB_TAB, TB_ENT, _______, TB_SPC, TB_BSPC, KC_DEL
),
/*
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
┌───────────────────────────────────────────────────────────┐
│ n a v i g a t i o n │
└───────────────────────────────────────────────────────────┘
┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
│ │ │ │ │ { │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ } │ CTRL ← │ CTRL ↓ │ CTRL ↑ │ CTRL → │
├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
│ │ │ │ │ ( ├─╯ ╰─┤ ) │ ← │ ↓ │ ↑ │ → │
├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
│ │ │ │ │ [ ││ ││ ││ ] │ HOME │ PG↓ │ PG↑ │ END │
└─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
│ │ │ │ │ │ │ │
└─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
[_NAVIGATION] = LAYOUT_36(
//╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
_______, _______, _______, _______, KC_LCBR, KC_RCBR, CT_LEFT, CT_DOWN, CT_UP, CT_RGHT,
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_LPRN, KC_RPRN, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
_______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_HOME, KC_PGDN, KC_PGUP, KC_END,
_______, _______, _______, _______, _______, _______, _______
),
/*
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
┌───────────────────────────────────────────────────────────┐
│ m e d i a & s y m b o l │
└───────────────────────────────────────────────────────────┘
┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
│ _ │ & │ * │ ( │ ) │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
│ + │ $ │ % │ ^ │ " ├─╯ ╰─┤ │ │ │ │ │
├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
│ ~ │ ! │ @ │ # │ | ││ ││ ││ │ │ │ │ │
└─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
│ │ │ │ │ │ │ │
└─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
[_MEDIA] = LAYOUT_36(
//╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
KC_UNDS, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI,
KC_PLUS, KC_DLR, KC_PERC, KC_CIRC, KC_DQUO, RGB_M_P, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD,
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, QWERTY, COLEMAK, _______, _______, QK_BOOTLOADER,
_______, _______, _______, _______, _______, _______, _______
),
/*
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
┌───────────────────────────────────────────────────────────┐
│ n u m b e r s │
└───────────────────────────────────────────────────────────┘
┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
│ - │ 7 │ 8 │ 9 │ 0 │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
│ = │ 4 │ 5 │ 6 │ ' ├─╯ ╰─┤ │ │ │ │ │
├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
│ ` │ 1 │ 2 │ 3 │ \ ││ ││ ││ │ │ │ │ │
└─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
│ │ │ │ │ │ │ │
└─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
[_NUMBERS] = LAYOUT_36(
//╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
KC_MINS, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, _______, _______,
KC_EQL, KC_4, KC_5, KC_6, KC_QUOT, KC_RALT, KC_RSFT, KC_LCTL, KC_LALT, KC_LGUI,
KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
/*
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
┌───────────────────────────────────────────────────────────┐
│ f u n t i o n │
└───────────────────────────────────────────────────────────┘
┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
│ F12 │ F7 │ F8 │ F9 │ PRT SCR │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
│ F11 │ F4 │ F5 │ F6 │ ├─╯ ╰─┤ │ │ │ │ │
├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
│ F10 │ F1 │ F2 │ F3 │ INS ││ ││ ││ │ │ │ │ │
└─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
│ │ │ │ │ │ │ │
└─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
[_FUNCTION] = LAYOUT_36(
//╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, _______, _______, _______, _______, _______,
KC_F11, KC_F4, KC_F5, KC_F6, _______, KC_RALT, KC_RSFT, KC_LCTL, KC_LALT, KC_LGUI,
KC_F10, KC_F1, KC_F2, KC_F3, KC_INS, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)
/*
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
┌───────────────────────────────────────────────────────────┐
│ t e m p l a t e │
└───────────────────────────────────────────────────────────┘
┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
│ │ │ │ │ │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
│ │ │ │ │ ├─╯ ╰─┤ │ │ │ │ │
├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
│ │ │ │ │ ││ ││ ││ │ │ │ │ │
└─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
│ │ │ │ │ │ │ │
└─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
/*
[_TEMPLATE] = LAYOUT_saegewerk(
//╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)*/
};
// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
// │ D I E S U N D D A S │
// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
bool caps_word_press_user(uint16_t keycode) {
switch (keycode) {
// Keycodes that continue Caps Word, with shift applied.
case KC_A ... KC_Z:
add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to the next key.
return true;
// Keycodes that continue Caps Word, without shifting.
case KC_1 ... KC_0:
case KC_BSPC:
case KC_DEL:
case KC_MINS:
case KC_UNDS:
case KC_LSFT:
case KC_RSFT:
return true;
default:
return false; // Deactivate Caps Word.
}
}
// ┌───────────────────────────────────────────────────────────┐
// │ e n c o d e r │
// └───────────────────────────────────────────────────────────┘
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[_NAVIGATION] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT) },
[_QWERTY] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_COLEMAK] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_MEDIA] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_NUMBERS] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_FUNCTION] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
};
@@ -1,3 +0,0 @@
COMBO_ENABLE = yes
CAPS_WORD_ENABLE = yes
ENCODER_MAP_ENABLE = yes
@@ -1,48 +0,0 @@
// Copyright 2023 Conor Burns (@Conor-Burns)
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include QMK_KEYBOARD_H
enum layer_names {
_BASE,
_LOWER,
_RAISE,
_ADJUST
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_40(
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_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_LSFT, KC_ESC, KC_ENT, KC_MPLY, KC_SPC, KC_DEL, KC_RSFT
),
[_LOWER] = LAYOUT_40(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
[_RAISE] = LAYOUT_40(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
[_ADJUST] = LAYOUT_40(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)
};
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_LOWER] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
[_RAISE] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
[_ADJUST] = { ENCODER_CCW_CW(KC_RGHT, KC_LEFT) }
};
@@ -1,2 +0,0 @@
VIA_ENABLE = yes
ENCODER_MAP_ENABLE = yes
-36
View File
@@ -1,36 +0,0 @@
# splaytoraid
![splaytoraid](https://i.imgur.com/N85DPHGh.png)
A 40% ergonomic keyboard with a stacked acrylic case and RGB underglow.
* Keyboard Maintainer: [freya](https://github.com/freya-irl)
* Hardware Supported: PCB kit and Pro Micro compatible controller
* Hardware Availability: [here](https://keeb.supply/products/splaytoraid-messenger-edition)
Make example for this keyboard (after setting up your build environment):
make 0xcb/splaytoraid:default
make 0xcb/splaytoraid/32u4:default
Flashing example for this keyboard:
make 0xcb/splaytoraid:default:flash
make 0xcb/splaytoraid/32u4: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 left top 4. col key (usually Escape) and plug in the keyboard
* **Physical reset button**: Press the button on the controller (Helios) for more than 500ms or just press it (Pluto)
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
Please note that the default bootloader for the `32u4` version is QMK DFU, for compatibility with [0xCB Pluto](https://github.com/0xCB-dev/0xCB-Pluto). Generic Pro Micros often use a different bootloader, such as `caterina`.
If the incorrect bootloader is specified, bootmagic reset and the `QK_BOOT` keycode will not work.
To avoid this problem, set the correct bootloader in your custom keymap's `rules.mk` file before compiling, or flash using an appropriate target (ex: `make 0xcb/splaytoraid/32u4:default:avrdude`). See [flashing instructions and bootloader information](https://docs.qmk.fm/#/flashing) for more details.
@@ -1,25 +0,0 @@
// Copyright 2023 Conor Burns (@Conor-Burns)
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_MATRIX_KEYPRESSES
#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
#define ENABLE_RGB_MATRIX_PIXEL_RAIN
#define ENABLE_RGB_MATRIX_DUAL_BEACON
#define ENABLE_RGB_MATRIX_HUE_BREATHING
#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
#define ENABLE_RGB_MATRIX_SPLASH
#define ENABLE_RGB_MATRIX_MULTISPLASH
#define ENABLE_RGB_MATRIX_SOLID_SPLASH
@@ -1,3 +0,0 @@
# rp2040_ce
This folder is set as default in the parent rules.mk - it will build firmware compatible with the RP2040 Community Edition. See [here](https://docs.qmk.fm/#/platformdev_rp2040?id=rp2040_ce) for a list.
@@ -1,2 +0,0 @@
WS2812_DRIVER = vendor
CONVERT_TO = rp2040_ce
-1
View File
@@ -1 +0,0 @@
DEFAULT_FOLDER = 0xcb/splaytoraid/rp2040_ce
-19
View File
@@ -16,26 +16,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#pragma once #pragma once
// clang-format off
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { D5, D6, D7, B0, B1, B2, B3, B4 }
#define MATRIX_COL_PINS { B5, D4, C0, C1, C2, C3 }
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
#define TAP_CODE_DELAY 10 #define TAP_CODE_DELAY 10
// clang-format on
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE #define LOCKING_SUPPORT_ENABLE
+5
View File
@@ -8,6 +8,11 @@
"pid": "0xA455", "pid": "0xA455",
"device_version": "0.0.1" "device_version": "0.0.1"
}, },
"matrix_pins": {
"cols": ["B5", "D4", "C0", "C1", "C2", "C3"],
"rows": ["D5", "D6", "D7", "B0", "B1", "B2", "B3", "B4"]
},
"diode_direction": "COL2ROW",
"encoder": { "encoder": {
"rotary": [ "rotary": [
{"pin_a": "D0", "pin_b": "D1"} {"pin_a": "D0", "pin_b": "D1"}
-6
View File
@@ -16,12 +16,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.*/
#pragma once #pragma once
#define MATRIX_ROW_PINS { F0, F5, F4, F6 }
#define MATRIX_COL_PINS { D6, D7, B5 }
#define DIODE_DIRECTION ROW2COL
#define SSD1306OLED #define SSD1306OLED
#define RGB_DI_PIN B7 #define RGB_DI_PIN B7
+5
View File
@@ -8,6 +8,11 @@
"pid": "0x7C99", "pid": "0x7C99",
"device_version": "0.0.1" "device_version": "0.0.1"
}, },
"matrix_pins": {
"cols": ["D6", "D7", "B5"],
"rows": ["F0", "F5", "F4", "F6"]
},
"diode_direction": "ROW2COL",
"encoder": { "encoder": {
"rotary": [ "rotary": [
{"pin_a": "C7", "pin_b": "F7"} {"pin_a": "C7", "pin_b": "F7"}
-17
View File
@@ -17,23 +17,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once #pragma once
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { B3, B2, B1, B0, D4 }
#define MATRIX_COL_PINS { C7, F7, F6, F5, F4, F1, E6, D1, D0, D2, D3, D5, D6, D7 }
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
#define RGB_DI_PIN F0 #define RGB_DI_PIN F0
#ifdef RGB_DI_PIN #ifdef RGB_DI_PIN
#define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_BREATHING
@@ -8,6 +8,11 @@
"pid": "0x6873", "pid": "0x6873",
"device_version": "0.0.1" "device_version": "0.0.1"
}, },
"matrix_pins": {
"cols": ["C7", "F7", "F6", "F5", "F4", "F1", "E6", "D1", "D0", "D2", "D3", "D5", "D6", "D7"],
"rows": ["B3", "B2", "B1", "B0", "D4"]
},
"diode_direction": "COL2ROW",
"backlight": { "backlight": {
"pin": "B7", "pin": "B7",
"levels": 5, "levels": 5,
-8
View File
@@ -18,14 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once #pragma once
/* key matrix pins */
#define MATRIX_ROW_PINS { B3, B2, B1, B0, D4 }
#define MATRIX_COL_PINS { F6, F5, F4, F1, E6, D0, D1, D2, D3, D5, D6, D7, B4, B5 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE #define LOCKING_SUPPORT_ENABLE
@@ -8,6 +8,11 @@
"pid": "0x6874", "pid": "0x6874",
"device_version": "0.0.1" "device_version": "0.0.1"
}, },
"matrix_pins": {
"cols": ["F6", "F5", "F4", "F1", "E6", "D0", "D1", "D2", "D3", "D5", "D6", "D7", "B4", "B5"],
"rows": ["B3", "B2", "B1", "B0", "D4"]
},
"diode_direction": "COL2ROW",
"backlight": { "backlight": {
"pin": "B7" "pin": "B7"
}, },
-8
View File
@@ -1,13 +1,5 @@
#pragma once #pragma once
/* key matrix pins */
#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3, F4 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE #define LOCKING_SUPPORT_ENABLE
@@ -8,6 +8,11 @@
"pid": "0x7267", "pid": "0x7267",
"device_version": "0.0.1" "device_version": "0.0.1"
}, },
"matrix_pins": {
"cols": ["F0", "F1", "E6", "C7", "C6", "B7", "D4", "B1", "B0", "B5", "B4", "D7", "D6", "B3", "F4"],
"rows": ["D0", "D1", "D2", "D3", "D5"]
},
"diode_direction": "COL2ROW",
"backlight": { "backlight": {
"pin": "B6", "pin": "B6",
"levels": 5 "levels": 5
+8 -1
View File
@@ -3,14 +3,21 @@
#pragma once #pragma once
#define OLED_DISPLAY_128X32
#define DYNAMIC_KEYMAP_LAYER_COUNT 10
#ifdef OLED_ENABLE
# define OLED_DISPLAY_128X32
#define I2C1_SCL_PIN GP17 #define I2C1_SCL_PIN GP17
#define I2C1_SDA_PIN GP16 #define I2C1_SDA_PIN GP16
#define I2C_DRIVER I2CD0 #define I2C_DRIVER I2CD0
#define OLED_BRIGHTNESS 128 #define OLED_BRIGHTNESS 128
#define OLED_FONT_H "keyboards/1upkeyboards/pi40/lib/glcdfont.c" #define OLED_FONT_H "keyboards/1upkeyboards/pi40/lib/glcdfont.c"
#endif
#define RGB_DI_PIN GP0 #define RGB_DI_PIN GP0
#define RGB_MATRIX_LED_COUNT 47
#define RGBLED_NUM 47
# define RGB_MATRIX_KEYPRESSES // reacts to keypresses # define RGB_MATRIX_KEYPRESSES // reacts to keypresses
# define RGB_MATRIX_FRAMEBUFFER_EFFECTS # define RGB_MATRIX_FRAMEBUFFER_EFFECTS
# define RGBLIGHT_LIMIT_VAL 150 # define RGBLIGHT_LIMIT_VAL 150
@@ -1,6 +0,0 @@
// Copyright 2022 ziptyze (@ziptyze)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define RGB_MATRIX_LED_COUNT 48
@@ -1,149 +0,0 @@
{
"keyboard_name": "pi40",
"manufacturer": "1upkeyboards",
"maintainer": "ziptyze",
"processor": "RP2040",
"bootloader": "rp2040",
"usb": {
"vid": "0x6F75",
"pid": "0x5600",
"device_version": "1.1.0"
},
"diode_direction": "COL2ROW",
"dynamic_keymap": {
"layer_count": 10
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": false,
"rgb_matrix": true,
"rgblight": false
},
"matrix_pins": {
"rows": [ "GP21", "GP20", "GP19", "GP18" ],
"cols": [ "GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP22" ]
},
"encoder": {
"enabled": true,
"rotary": [
{
"pin_a": "GP14",
"pin_b": "GP13"
}
]
},
"rgb_matrix": {
"driver": "WS2812",
"layout": [
{ "flags": 1, "matrix": [0, 0], "x": 9, "y": 8 },
{ "flags": 4, "matrix": [0, 1], "x": 28, "y": 8 },
{ "flags": 4, "matrix": [0, 2], "x": 46, "y": 8 },
{ "flags": 4, "matrix": [0, 3], "x": 65, "y": 8 },
{ "flags": 4, "matrix": [0, 4], "x": 84, "y": 8 },
{ "flags": 4, "matrix": [0, 5], "x": 102, "y": 8 },
{ "flags": 4, "matrix": [0, 6], "x": 121, "y": 8 },
{ "flags": 4, "matrix": [0, 7], "x": 140, "y": 8 },
{ "flags": 4, "matrix": [0, 8], "x": 159, "y": 8 },
{ "flags": 4, "matrix": [0, 9], "x": 177, "y": 8 },
{ "flags": 4, "matrix": [0, 10], "x": 196, "y": 8 },
{ "flags": 1, "matrix": [0, 11], "x": 215, "y": 8 },
{ "flags": 1, "matrix": [1, 11], "x": 215, "y": 24 },
{ "flags": 4, "matrix": [1, 10], "x": 196, "y": 24 },
{ "flags": 4, "matrix": [1, 9], "x": 177, "y": 24 },
{ "flags": 4, "matrix": [1, 8], "x": 159, "y": 24 },
{ "flags": 4, "matrix": [1, 7], "x": 140, "y": 24 },
{ "flags": 4, "matrix": [1, 6], "x": 121, "y": 24 },
{ "flags": 4, "matrix": [1, 5], "x": 102, "y": 24 },
{ "flags": 4, "matrix": [1, 4], "x": 84, "y": 24 },
{ "flags": 4, "matrix": [1, 3], "x": 65, "y": 24 },
{ "flags": 4, "matrix": [1, 2], "x": 46, "y": 24 },
{ "flags": 4, "matrix": [1, 1], "x": 28, "y": 24 },
{ "flags": 1, "matrix": [1, 0], "x": 9, "y": 24 },
{ "flags": 1, "matrix": [2, 0], "x": 9, "y": 40 },
{ "flags": 4, "matrix": [2, 1], "x": 28, "y": 40 },
{ "flags": 4, "matrix": [2, 2], "x": 46, "y": 40 },
{ "flags": 4, "matrix": [2, 3], "x": 65, "y": 40 },
{ "flags": 4, "matrix": [2, 4], "x": 84, "y": 40 },
{ "flags": 4, "matrix": [2, 5], "x": 102, "y": 40 },
{ "flags": 4, "matrix": [2, 6], "x": 121, "y": 40 },
{ "flags": 4, "matrix": [2, 7], "x": 140, "y": 40 },
{ "flags": 4, "matrix": [2, 8], "x": 159, "y": 40 },
{ "flags": 4, "matrix": [2, 9], "x": 177, "y": 40 },
{ "flags": 4, "matrix": [2, 10], "x": 196, "y": 40 },
{ "flags": 1, "matrix": [2, 11], "x": 215, "y": 40 },
{ "flags": 1, "matrix": [3, 11], "x": 215, "y": 56 },
{ "flags": 1, "matrix": [3, 10], "x": 196, "y": 56 },
{ "flags": 1, "matrix": [3, 9], "x": 177, "y": 56 },
{ "flags": 1, "matrix": [3, 8], "x": 159, "y": 56 },
{ "flags": 1, "matrix": [3, 7], "x": 140, "y": 56 },
{ "flags": 1, "matrix": [3, 6], "x": 121, "y": 56 },
{ "flags": 1, "matrix": [3, 4], "x": 84, "y": 56 },
{ "flags": 1, "matrix": [3, 3], "x": 65, "y": 56 },
{ "flags": 1, "matrix": [3, 2], "x": 46, "y": 56 },
{ "flags": 1, "matrix": [3, 1], "x": 28, "y": 56 },
{ "flags": 1, "matrix": [3, 0], "x": 9, "y": 56 },
{ "flags": 1, "matrix": [3, 5], "x": 102, "y": 56 }
]
},
"layouts": {
"LAYOUT_ortho_4x12": {
"layout": [
{ "matrix": [0, 12], "x": 11, "y": 0 },
{ "matrix": [0, 0], "x": 0, "y": 1 },
{ "matrix": [0, 1], "x": 1, "y": 1 },
{ "matrix": [0, 2], "x": 2, "y": 1 },
{ "matrix": [0, 3], "x": 3, "y": 1 },
{ "matrix": [0, 4], "x": 4, "y": 1 },
{ "matrix": [0, 5], "x": 5, "y": 1 },
{ "matrix": [0, 6], "x": 6, "y": 1 },
{ "matrix": [0, 7], "x": 7, "y": 1 },
{ "matrix": [0, 8], "x": 8, "y": 1 },
{ "matrix": [0, 9], "x": 9, "y": 1 },
{ "matrix": [0, 10], "x": 10, "y": 1 },
{ "matrix": [0, 11], "x": 11, "y": 1 },
{ "matrix": [1, 0], "x": 0, "y": 2 },
{ "matrix": [1, 1], "x": 1, "y": 2 },
{ "matrix": [1, 2], "x": 2, "y": 2 },
{ "matrix": [1, 3], "x": 3, "y": 2 },
{ "matrix": [1, 4], "x": 4, "y": 2 },
{ "matrix": [1, 5], "x": 5, "y": 2 },
{ "matrix": [1, 6], "x": 6, "y": 2 },
{ "matrix": [1, 7], "x": 7, "y": 2 },
{ "matrix": [1, 8], "x": 8, "y": 2 },
{ "matrix": [1, 9], "x": 9, "y": 2 },
{ "matrix": [1, 10], "x": 10, "y": 2 },
{ "matrix": [1, 11], "x": 11, "y": 2 },
{ "matrix": [2, 0], "x": 0, "y": 3 },
{ "matrix": [2, 1], "x": 1, "y": 3 },
{ "matrix": [2, 2], "x": 2, "y": 3 },
{ "matrix": [2, 3], "x": 3, "y": 3 },
{ "matrix": [2, 4], "x": 4, "y": 3 },
{ "matrix": [2, 5], "x": 5, "y": 3 },
{ "matrix": [2, 6], "x": 6, "y": 3 },
{ "matrix": [2, 7], "x": 7, "y": 3 },
{ "matrix": [2, 8], "x": 8, "y": 3 },
{ "matrix": [2, 9], "x": 9, "y": 3 },
{ "matrix": [2, 10], "x": 10, "y": 3 },
{ "matrix": [2, 11], "x": 11, "y": 3 },
{ "matrix": [3, 0], "x": 0, "y": 4 },
{ "matrix": [3, 1], "x": 1, "y": 4 },
{ "matrix": [3, 2], "x": 2, "y": 4 },
{ "matrix": [3, 3], "x": 3, "y": 4 },
{ "matrix": [3, 4], "x": 4, "y": 4 },
{ "matrix": [3, 5], "x": 5, "y": 4 },
{ "matrix": [3, 6], "x": 6, "y": 4 },
{ "matrix": [3, 7], "x": 7, "y": 4 },
{ "matrix": [3, 8], "x": 8, "y": 4 },
{ "matrix": [3, 9], "x": 9, "y": 4 },
{ "matrix": [3, 10], "x": 10, "y": 4 },
{ "matrix": [3, 11], "x": 11, "y": 4 }
]
}
}
}
+128
View File
@@ -0,0 +1,128 @@
{
"keyboard_name": "pi40",
"manufacturer": "1upkeyboards",
"usb": {
"vid": "0x6F75",
"pid": "0x5600",
"device_version": "0.0.1"
},
"matrix_pins": {
"cols": ["GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12"],
"rows": ["GP21", "GP20", "GP19", "GP18"]
},
"diode_direction": "COL2ROW",
"encoder": {
"rotary": [
{"pin_a": "GP14", "pin_b": "GP13"}
]
},
"processor": "RP2040",
"bootloader": "rp2040",
"board": "GENERIC_RP_RP2040",
"layouts": {
"LAYOUT": {
"layout": [
{ "matrix": [3, 6], "x": 11, "y": 0 },
{ "matrix": [0, 0], "x": 0, "y": 1 },
{ "matrix": [0, 1], "x": 1, "y": 1 },
{ "matrix": [0, 2], "x": 2, "y": 1 },
{ "matrix": [0, 3], "x": 3, "y": 1 },
{ "matrix": [0, 4], "x": 4, "y": 1 },
{ "matrix": [0, 5], "x": 5, "y": 1 },
{ "matrix": [0, 6], "x": 6, "y": 1 },
{ "matrix": [0, 7], "x": 7, "y": 1 },
{ "matrix": [0, 8], "x": 8, "y": 1 },
{ "matrix": [0, 9], "x": 9, "y": 1 },
{ "matrix": [0, 10], "x": 10, "y": 1 },
{ "matrix": [0, 11], "x": 11, "y": 1 },
{ "matrix": [1, 0], "x": 0, "y": 2 },
{ "matrix": [1, 1], "x": 1, "y": 2 },
{ "matrix": [1, 2], "x": 2, "y": 2 },
{ "matrix": [1, 3], "x": 3, "y": 2 },
{ "matrix": [1, 4], "x": 4, "y": 2 },
{ "matrix": [1, 5], "x": 5, "y": 2 },
{ "matrix": [1, 6], "x": 6, "y": 2 },
{ "matrix": [1, 7], "x": 7, "y": 2 },
{ "matrix": [1, 8], "x": 8, "y": 2 },
{ "matrix": [1, 9], "x": 9, "y": 2 },
{ "matrix": [1, 10], "x": 10, "y": 2 },
{ "matrix": [1, 11], "x": 11, "y": 2 },
{ "matrix": [2, 0], "x": 0, "y": 3 },
{ "matrix": [2, 1], "x": 1, "y": 3 },
{ "matrix": [2, 2], "x": 2, "y": 3 },
{ "matrix": [2, 3], "x": 3, "y": 3 },
{ "matrix": [2, 4], "x": 4, "y": 3 },
{ "matrix": [2, 5], "x": 5, "y": 3 },
{ "matrix": [2, 6], "x": 6, "y": 3 },
{ "matrix": [2, 7], "x": 7, "y": 3 },
{ "matrix": [2, 8], "x": 8, "y": 3 },
{ "matrix": [2, 9], "x": 9, "y": 3 },
{ "matrix": [2, 10], "x": 10, "y": 3 },
{ "matrix": [2, 11], "x": 11, "y": 3 },
{ "matrix": [3, 0], "x": 0, "y": 4 },
{ "matrix": [3, 1], "x": 1, "y": 4 },
{ "matrix": [3, 2], "x": 2, "y": 4 },
{ "matrix": [3, 3], "x": 3, "y": 4 },
{ "matrix": [3, 4], "x": 4, "y": 4 },
{ "matrix": [3, 5], "x": 5, "y": 4, "w": 2},
{ "matrix": [3, 7], "x": 7, "y": 4 },
{ "matrix": [3, 8], "x": 8, "y": 4 },
{ "matrix": [3, 9], "x": 9, "y": 4 },
{ "matrix": [3, 10], "x": 10, "y": 4 },
{ "matrix": [3, 11], "x": 11, "y": 4 }
]
},
"LAYOUT_ortho_4x12": {
"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": [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": [1, 10], "x": 10, "y": 1 },
{ "matrix": [1, 11], "x": 11, "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": [2, 10], "x": 10, "y": 2 },
{ "matrix": [2, 11], "x": 11, "y": 2 },
{ "matrix": [3, 0], "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 1, "y": 3 },
{ "matrix": [3, 2], "x": 2, "y": 3 },
{ "matrix": [3, 3], "x": 3, "y": 3 },
{ "matrix": [3, 4], "x": 4, "y": 3 },
{ "matrix": [3, 5], "x": 5, "y": 3 },
{ "matrix": [3, 6], "x": 6, "y": 3, "label": "ENC" },
{ "matrix": [3, 7], "x": 7, "y": 3 },
{ "matrix": [3, 8], "x": 8, "y": 3 },
{ "matrix": [3, 9], "x": 9, "y": 3 },
{ "matrix": [3, 10], "x": 10, "y": 3 },
{ "matrix": [3, 11], "x": 11, "y": 3 }
]
}
}
}
@@ -26,8 +26,8 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty /* Qwerty
* ╱⎺⎺⎺⎺╲ * ╱⎺⎺⎺⎺╲
* |RGBTOG| * |RGBTOG|
* ╲⎽⎽⎽⎽╱ * ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
@@ -39,17 +39,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Adjust| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * |Adjust| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------' * `-----------------------------------------------------------------------------------'
*/ */
[_ONE] = LAYOUT_ortho_4x12 ( [_ONE] = LAYOUT (
RGB_TOG, RGB_TOG,
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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ESC, 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_ENT , KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
MO(3), KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT MO(3), KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
), ),
/* Lower /* Lower
* ╱⎺⎺⎺⎺╲ * ╱⎺⎺⎺⎺╲
* | MUTE | * | MUTE |
* ╲⎽⎽⎽⎽╱ * ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
@@ -61,17 +61,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Next | Vol- | Vol+ | Play | * | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------' * `-----------------------------------------------------------------------------------'
*/ */
[_TWO] = LAYOUT_ortho_4x12 ( [_TWO] = LAYOUT (
KC_MUTE, KC_MUTE,
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
), ),
/* Raise /* Raise
* ╱⎺⎺⎺⎺╲ * ╱⎺⎺⎺⎺╲
* | MUTE | * | MUTE |
* ╲⎽⎽⎽⎽╱ * ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
@@ -83,17 +83,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | Mute | | Next | Vol- | Vol+ | Play | * | | | | | | | Mute | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------' * `-----------------------------------------------------------------------------------'
*/ */
[_THREE] = LAYOUT_ortho_4x12 ( [_THREE] = LAYOUT (
KC_MUTE, KC_MUTE,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
), ),
/* Adjust (Lower + Raise) /* Adjust (Lower + Raise)
* ╱⎺⎺⎺⎺╲ * ╱⎺⎺⎺⎺╲
* | MUTE | * | MUTE |
* v-----------------------RGB CONTROL------------------v ╲⎽⎽⎽⎽╱ * v-----------------------RGB CONTROL------------------v ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
* | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del | * | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
@@ -105,12 +105,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | Mute | | | | | | * | | | | | | | Mute | | | | | |
* `-----------------------------------------------------------------------------------' * `-----------------------------------------------------------------------------------'
*/ */
[_FOUR] = LAYOUT_ortho_4x12 ( [_FOUR] = LAYOUT (
KC_MUTE, KC_MUTE,
_______, QK_BOOT, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL , _______, QK_BOOT, DB_TOGG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
) )
}; };
@@ -32,8 +32,8 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty /* Qwerty
* ╱⎺⎺⎺⎺╲ * ╱⎺⎺⎺⎺╲
* |RGBTOG| * |RGBTOG|
* ╲⎽⎽⎽⎽╱ * ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
@@ -45,17 +45,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Adjust| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * |Adjust| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------' * `-----------------------------------------------------------------------------------'
*/ */
[_ONE] = LAYOUT_ortho_4x12 ( [_ONE] = LAYOUT (
RGB_TOG, RGB_TOG,
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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ESC, 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_ENT , KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
MO(3), KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT MO(3), KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
), ),
/* Lower /* Lower
* ╱⎺⎺⎺⎺╲ * ╱⎺⎺⎺⎺╲
* | MUTE | * | MUTE |
* ╲⎽⎽⎽⎽╱ * ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
@@ -67,17 +67,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Next | Vol- | Vol+ | Play | * | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------' * `-----------------------------------------------------------------------------------'
*/ */
[_TWO] = LAYOUT_ortho_4x12 ( [_TWO] = LAYOUT (
KC_MUTE, KC_MUTE,
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
), ),
/* Raise /* Raise
* ╱⎺⎺⎺⎺╲ * ╱⎺⎺⎺⎺╲
* | MUTE | * | MUTE |
* ╲⎽⎽⎽⎽╱ * ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
@@ -89,17 +89,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | Mute | | Next | Vol- | Vol+ | Play | * | | | | | | | Mute | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------' * `-----------------------------------------------------------------------------------'
*/ */
[_THREE] = LAYOUT_ortho_4x12 ( [_THREE] = LAYOUT (
KC_MUTE, KC_MUTE,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
), ),
/* Adjust (Lower + Raise) /* Adjust (Lower + Raise)
* ╱⎺⎺⎺⎺╲ * ╱⎺⎺⎺⎺╲
* | MUTE | * | MUTE |
* v-----------------------RGB CONTROL------------------v ╲⎽⎽⎽⎽╱ * v-----------------------RGB CONTROL------------------v ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
* | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del | * | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
@@ -111,17 +111,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | Mute | | | | | | * | | | | | | | Mute | | | | | |
* `-----------------------------------------------------------------------------------' * `-----------------------------------------------------------------------------------'
*/ */
[_FOUR] = LAYOUT_ortho_4x12 ( [_FOUR] = LAYOUT (
KC_MUTE, KC_MUTE,
_______, QK_BOOT, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL , _______, QK_BOOT, DB_TOGG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
), ),
/* Placeholder /* Placeholder
* ╱⎺⎺⎺⎺╲ * ╱⎺⎺⎺⎺╲
* | | * | |
* ╲⎽⎽⎽⎽╱ * ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
* | | | | | | | | | | | | | * | | | | | | | | | | | | |
@@ -133,17 +133,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | | * | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------' * `-----------------------------------------------------------------------------------'
*/ */
[_FIVE] = LAYOUT_ortho_4x12 ( [_FIVE] = LAYOUT (
_______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
), ),
/* Placeholder /* Placeholder
* ╱⎺⎺⎺⎺╲ * ╱⎺⎺⎺⎺╲
* | | * | |
* ╲⎽⎽⎽⎽╱ * ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
* | | | | | | | | | | | | | * | | | | | | | | | | | | |
@@ -155,17 +155,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | | * | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------' * `-----------------------------------------------------------------------------------'
*/ */
[_SIX] = LAYOUT_ortho_4x12 ( [_SIX] = LAYOUT (
_______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
), ),
/* Placeholder /* Placeholder
* ╱⎺⎺⎺⎺╲ * ╱⎺⎺⎺⎺╲
* | | * | |
* ╲⎽⎽⎽⎽╱ * ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
* | | | | | | | | | | | | | * | | | | | | | | | | | | |
@@ -177,17 +177,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | | * | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------' * `-----------------------------------------------------------------------------------'
*/ */
[_SEVEN] = LAYOUT_ortho_4x12 ( [_SEVEN] = LAYOUT (
_______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
), ),
/* Placeholder /* Placeholder
* ╱⎺⎺⎺⎺╲ * ╱⎺⎺⎺⎺╲
* | | * | |
* ╲⎽⎽⎽⎽╱ * ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
* | | | | | | | | | | | | | * | | | | | | | | | | | | |
@@ -199,17 +199,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | | * | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------' * `-----------------------------------------------------------------------------------'
*/ */
[_EIGHT] = LAYOUT_ortho_4x12 ( [_EIGHT] = LAYOUT (
_______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
), ),
/* Placeholder /* Placeholder
* ╱⎺⎺⎺⎺╲ * ╱⎺⎺⎺⎺╲
* | | * | |
* ╲⎽⎽⎽⎽╱ * ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
* | | | | | | | | | | | | | * | | | | | | | | | | | | |
@@ -221,17 +221,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | | * | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------' * `-----------------------------------------------------------------------------------'
*/ */
[_NINE] = LAYOUT_ortho_4x12 ( [_NINE] = LAYOUT (
_______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
), ),
/* Placeholder /* Placeholder
* ╱⎺⎺⎺⎺╲ * ╱⎺⎺⎺⎺╲
* | | * | |
* ╲⎽⎽⎽⎽╱ * ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
* | | | | | | | | | | | | | * | | | | | | | | | | | | |
@@ -243,12 +243,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | | * | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------' * `-----------------------------------------------------------------------------------'
*/ */
[_TEN] = LAYOUT_ortho_4x12 ( [_TEN] = LAYOUT (
_______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
) )
}; };

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