1
0

Compare commits

..

55 Commits

Author SHA1 Message Date
Nick Brassel
2e766a9c7a Add Discord webhook at end of each CI run. (#20355) 2023-04-07 16:37:06 +10:00
Albert Y
4ba3fdfad2 Move a_dux to data-driven (#20043) 2023-04-06 22:27:51 -06:00
lalalademaxiya1
655c24d29d [Keyboard] Add Keychron Q11 (#20125)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: adophoxia <100170946+adophoxia@users.noreply.github.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2023-04-06 11:02:24 -07:00
dependabot[bot]
eab2b8faa0 Bump peter-evans/create-pull-request from 4 to 5 (#20346)
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 4 to 5.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v4...v5)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-05 23:34:35 +01:00
Luis Garcia
d058091d0b Add peterfalken userspace & keymaps (#19897)
Co-authored-by: Peter.Falken <luis.garcia@bitjester.com>
2023-04-05 12:35:34 -06:00
Álvaro A. Volpato
596319c92f Add Iron160 I160-S and I160-H PCBs support (#20077)
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: jack <0x6a73@protonmail.com>
2023-04-05 12:28:27 -06:00
DeskDaily
4d17fe2a99 [Keyboard] Add lxxt (#19935)
Co-authored-by: Neil Brian Ramirez <nightlykeyboards@gmail.com>
Co-authored-by: Neil Brian Ramirez <nightlyboards@gmail.com>
2023-04-05 12:25:21 -06:00
Dane Skalski
1d045e854b Add Junco Keyboard (#19516) 2023-04-05 18:06:24 +10:00
Alex Miller
f7176f070f [Keyboard] Add Budgy and Crowboard Keyboards (#19141)
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2023-04-04 14:36:23 -07:00
Nick Brassel
687883cf7d Resolve keyboard names for qmk mass-compile. (#20335) 2023-04-04 15:09:55 +10:00
Albert Y
f56cf93fa1 Add debounce time description (#20333) 2023-04-04 12:15:00 +10:00
Alex Paulescu
1fd30b3391 Manibus keyboard, update pinout (#20309) 2023-04-04 09:13:42 +10:00
Albert Y
37f205ec1a Use table for debounce algorithm description (#20322) 2023-04-04 09:06:33 +10:00
blindassassin111
26e0bfd494 [keyboard] Adding OSAv2 numpad (#20209)
Co-authored-by: jack <0x6a73@protonmail.com>
2023-04-04 09:05:13 +10:00
Andrew Kannan
a434507ab4 Add Ripple TKL Keyboard firmware (#20301) 2023-04-04 08:56:12 +10:00
Andrew Kannan
ee8c86702e Add Ripple TKL Hotswap Firmware (#20302)
Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>
2023-04-04 08:55:38 +10:00
Cameron Larsen
246cf99b4b Personal keymaps for crkbd and kyria (#20009) 2023-04-04 08:43:12 +10:00
Anjheos
eb52984a94 Adding Oceanographer to QMK. (#20324) 2023-04-03 21:18:08 +01:00
Danny
a5272a1575 Modify default encoder mappings, change PID, enable mousekeys (#20329) 2023-04-03 19:49:21 +01:00
Ryan
d06ce0153b PR checklist: keyboard updates must go to develop (#20323) 2023-04-03 16:34:03 +10:00
Purdea Andrei
c58610bea3 Data-driven updates to overnumpad controller keyboards (#20259) 2023-04-03 15:45:46 +10:00
Julius Degesys
12de0297ed Suggest qmk list-keyboards when testing build environment (#19471)
Co-authored-by: Joel Challis <git@zvecr.com>
2023-04-03 15:42:14 +10:00
Lisa Ugray
4992df56b8 Add an alternate layout definition for Keyboardio Model 01 (#20245) 2023-04-03 15:39:52 +10:00
studiokestra
f3f0bf6dbe Refactor Galatea (#20011) 2023-04-03 15:37:43 +10:00
4pplet
8a5e8ed88e Adding Unextended Standard PCB (#20190)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: 4pplet <4pplet@protonmail.com>
Co-authored-by: 4pplet <stefan.ess@gmail.com>
2023-04-03 15:24:49 +10:00
3araht
fb6557acf1 New layer added to giabalanai keyboard (#20118) 2023-04-03 15:12:11 +10:00
Sergey Vlasov
2d7240f730 onekey: Fix console output on AVR (#19930) 2023-04-03 14:28:12 +10:00
Wilba
1d1c407e4e Update WT60-H1, WT60-H3 layouts (#20114) 2023-04-03 13:09:15 +10:00
Torsten Schneider
9152928f02 Adding my keymap (#19964) 2023-04-03 13:05:48 +10:00
Pablo Martínez
15a106b1ef [Bugfix] Check QGF's bpp against display's native_bits_per_pixel (#19995) 2023-04-03 12:42:46 +10:00
andi4000
ac9f9f9efb ISO-DE Keymap for Dactyl Manuform 6x7 (#19441) 2023-04-03 10:06:40 +10:00
Woongbin Kang
ec83c0b185 Add recommendations for VSCode intellisense (#19402) 2023-04-03 10:05:48 +10:00
HorrorTroll
d300811009 Add user horrortroll in userspace (#19769) 2023-04-03 08:24:04 +10:00
Jay Greco
27e6e27d3a [Keyboard] Add nullbits SNAP keyboard (#18916)
Co-authored-by: Ryan <fauxpark@gmail.com>
2023-04-02 12:12:06 -07:00
Moritz Plattner
5687fc7646 Add support for Geistmaschine Macropod (#20116)
Co-authored-by: Pablo Martínez <58857054+elpekenin@users.noreply.github.com>
2023-04-02 12:02:20 -06:00
Travis Reed
ebe36ea83c [Keymap] Add dancxjo hotdox76v2 keymap (#20016) 2023-04-02 12:01:06 -06:00
cttt
6b205c3064 [Keyboard] Add Erdnuss 65 (#20202)
Co-authored-by: jack <0x6a73@protonmail.com>
2023-04-02 11:55:20 -06:00
butterkeebs
b5d0c44690 [Keyboard] Add pocketpad (#20229)
Co-authored-by: jack <0x6a73@protonmail.com>
2023-04-02 11:50:14 -06:00
Thomaz Peres
d0e0b9e583 [Keyboard] Add Royal Kludge RKG-68 (#20138) 2023-04-02 11:49:05 -06:00
mechlovin
b0dc99fbd8 [Keyboard] Add Mechlovin9 rev.3 (#20119)
Co-authored-by: jack <0x6a73@protonmail.com>
2023-04-02 11:47:07 -06:00
Raphael Mangubat
5b8dae0d61 Enable encoder mapping in VIA for Keebio KBO-5000 (#20272) 2023-04-02 11:23:26 -06:00
Vertex-kb
fd56a2a1dc Add angle65 (#19986)
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2023-04-02 11:08:53 -06:00
Alexander Kagno
be9f6e679b [Keymap] update arkag keymap, add hitbox layout (#20271)
Co-authored-by: Alex Kagno <alex@turncommerce.com>
2023-04-02 01:57:54 -07:00
Cameron Varley
b53356f7ab [Keyboard] Add GMMK Numpad (#20067)
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2023-04-02 01:34:54 -07:00
Albert Y
c402bac023 [Keymap] Ferris - Add split USB detection directive (#20213) 2023-04-02 01:28:00 -07:00
Shane Dowling
a030e8094f [Keymap] Add md40 ckrbd keymap (#19931)
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2023-04-02 01:27:04 -07:00
Nick Brassel
c3c401f91d [QP] Fix up delta frame boundaries (#20296) 2023-03-31 08:41:11 +11:00
Alejandro Chacón
b63e388692 [Keyboard update] Fix json error (#20299) 2023-03-30 18:25:42 +01:00
Nick Brassel
81f3f0f3e9 Revert to hex output for kint41 (#20295) 2023-03-30 01:41:36 +01:00
Maverick0197
d0c36a7683 [Keyboard] Add KeyDeck8 (#20107)
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2023-03-29 13:13:05 -07:00
4pplet
c6cc638752 [Keyboard] Add Steezy60 Rev B (#19688)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
Co-authored-by: Wolf Van Herreweghe <wolfvh@getupgamesofficial.com>
Co-authored-by: yiancar <yiancar@gmail.com>
Co-authored-by: Dasky <32983009+daskygit@users.noreply.github.com>
Co-authored-by: adophoxia <100170946+adophoxia@users.noreply.github.com>
Co-authored-by: Jue Liu <youturn@Jues-MacBook-Pro.local>
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
Co-authored-by: Shandon Anderson <shandon@shandon.codes>
Co-authored-by: jack <0x6A73@pm.me>
Co-authored-by: jason <jrucker2004@gmail.com>
Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>
2023-03-29 13:10:47 -07:00
Sắn
621dbdf8ee [Keyboard] Add Plaque80 (#20240)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>
2023-03-29 13:34:42 -06:00
Alejandro Chacón
896f38c52c [Keyboard] Add alhenkb macropad (#20123) 2023-03-29 11:47:14 -07:00
Joel Challis
f56580404d Minify content published to API (#20285) 2023-03-29 13:01:16 +01:00
Nick Brassel
5bb8f7ae84 Add ability for qmk mass-compile to build specified targets (#20294) 2023-03-29 21:26:05 +11:00
421 changed files with 31602 additions and 4019 deletions

View File

@@ -10,12 +10,11 @@ on:
jobs:
ci_builds:
if: github.repository == 'qmk/qmk_firmware'
name: "CI Build"
runs-on: self-hosted
timeout-minutes: 1380
if: github.repository == 'qmk/qmk_firmware'
strategy:
fail-fast: false
matrix:
@@ -58,3 +57,12 @@ jobs:
*.hex
*.uf2
.build/failed.*
- name: 'CI Discord Notification'
if: always()
working-directory: util/ci/
env:
DISCORD_WEBHOOK: ${{ secrets.CI_DISCORD_WEBHOOK }}
run: |
python3 -m pip install -r requirements.txt
python3 ./discord-results.py --branch ${{ matrix.branch }} --keymap ${{ matrix.keymap }} --url ${{ env.GITHUB_SERVER_URL }}/${{ env.GITHUB_REPOSITORY }}/actions/runs/${{ env.GITHUB_RUN_ID }}

View File

@@ -47,7 +47,7 @@ jobs:
git config user.email 'hello@qmk.fm'
- name: Create Pull Request
uses: peter-evans/create-pull-request@v4
uses: peter-evans/create-pull-request@v5
if: ${{ github.repository == 'qmk/qmk_firmware'}}
with:
token: ${{ secrets.QMK_BOT_TOKEN }}

View File

@@ -34,7 +34,7 @@ jobs:
git config user.email 'hello@qmk.fm'
- name: Create Pull Request
uses: peter-evans/create-pull-request@v4
uses: peter-evans/create-pull-request@v5
if: ${{ github.repository == 'qmk/qmk_firmware'}}
with:
token: ${{ secrets.QMK_BOT_TOKEN }}

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
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
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
* 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.
* 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
* Eager - any key change is reported immediately. All further inputs for DEBOUNCE ms are ignored.
* Eager algorithms are not noise-resistant.
* Recommended naming conventions:
* ```sym_eager_*```
* ```asym_eager_*_*```: key-down is using eager algorithm
* ```asym_*_eager_*```: key-up is using eager algorithm
* `sym_eager_*`
* `asym_eager_*_*`: key-down is using eager algorithm
* `asym_*_eager_*`: key-up is using eager algorithm
* Defer - wait for no changes for DEBOUNCE ms before reporting change.
* Defer algorithms are noise-resistant
* Recommended naming conventions:
* ```sym_defer_*```
* ```asym_defer_*_*```: key-down is using defer algorithm
* ```asym_*_defer_*```: key-up is using defer algorithm
* `sym_defer_*`
* `asym_defer_*_*`: key-down is using defer algorithm
* `asym_*_defer_*`: key-up is using defer algorithm
4) Global vs Per-Key vs Per-Row
* 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
* Recommended naming convention: ```*_pk```
* Recommended naming convention: `*_pk`
* 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,
and ram usage), but fast typists might prefer them over global.
## Debounce algorithms supported by QMK
## Supported Debounce Algorithms
QMK supports multiple debounce algorithms through its debounce API.
QMK supports multiple algorithms through its debounce API.
### Debounce selection
### Debounce Time
| DEBOUNCE_TYPE | Description | What else is needed |
| ------------- | --------------------------------------------------- | ----------------------------- |
| 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 |
| Anything Else | Use another algorithm from quantum/debounce/* | Nothing |
Default debounce time is 5 milliseconds and it can be changed with the following line in `config.h`:
```
#define DEBOUNCE 10
```
?> Setting `DEBOUNCE` to `0` will disable this feature.
**Regarding split keyboards**:
The debounce code is compatible with split keyboards.
### Debounce Method
### Selecting an included debouncing method
Keyboards may select one of the already implemented debounce methods, by adding to ```rules.mk``` the following line:
Keyboards may select one of the core debounce methods by adding the following line into `rules.mk`:
```
DEBOUNCE_TYPE = <name of algorithm>
```
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.
Name of algorithm is one of:
### A couple algorithms that could be implemented in the future:
* ```sym_defer_pr```
* ```sym_eager_g```
| Algorithm | Description |
| --------------------- | ----------- |
| `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_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. |
### Use your own debouncing code
You have the option to implement you own debouncing algorithm. To do this:
* Set ```DEBOUNCE_TYPE = custom``` in ```rules.mk```.
* Add ```SRC += debounce.c``` in ```rules.mk```
* Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples.
?> `sym_defer_g` is the default if `DEBOUNCE_TYPE` is undefined.
?> `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.
### Implementing your own debouncing code
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.
* Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly.
* If the algorithm might be applicable to other keyboards, please consider adding it to ```quantum/debounce```
* Use num_rows instead of MATRIX_ROWS to support split keyboards correctly.
* If your custom algorithm is applicable to other keyboards, please consider making a pull request.

View File

@@ -172,6 +172,8 @@ For example, to build a firmware for a Clueboard 66% you would use:
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:
```

View File

@@ -46,16 +46,7 @@ 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.
### 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.
#### MSYS2 Setup
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.
@@ -110,8 +101,50 @@ This installs a bunch of Git related tools that may make using Git with QMK Firm
Restart once you've installed any extensions
# Configure VS Code for QMK
1. Click <kbd><kbd>File</kbd> > <kbd>Open Folder</kbd></kbd>
2. Open the QMK Firmware folder that you cloned from GitHub.
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
## 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.

View File

@@ -53,6 +53,7 @@ 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
- `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
- `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).

View File

@@ -1,27 +0,0 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS,KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_LGUI, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
SC_LSPO, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, SC_RSPC, MO(2),
KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_RALT, MO(2), KC_SPC, KC_RALT, KC_RGUI, KC_NO, KC_APP, KC_RCTL),
[1] = LAYOUT_all(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS,KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
SC_LSPO, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, SC_RSPC, MO(2),
KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_RALT, MO(2), KC_SPC, KC_RALT, KC_RGUI, KC_NO, KC_APP, KC_RCTL),
[2] = LAYOUT_all(
KC_EXEC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, _______,
_______, KC_BSPC, KC_UP, KC_ENT, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, _______, KC_DEL,
KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MUTE, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, KC_PENT,
_______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______,
DF(1), DF(0), _______, _______, _______, _______, _______, KC_BRID, KC_BRIU, _______, _______, QK_BOOT )
};

View File

@@ -0,0 +1,39 @@
/*
Copyright 2023 Stefan Sundin "4pplet" <mail@4pplet.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Bsp│
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ \ | Ent│
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───| er │
* │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift│ │
* ├────┬───|───┴┬──┴┬──┴───┴───┴───┴───┴┬──┴┬──┴┬──┴─┬───|────┤
* │Ctrl│GUI│None│Alt│ Space │Alt│GUI│None│App│Ctrl│
* └────┴───┴────┴───┴───────────────────┴───┴───┴────┴───┴────┘
*/
[0] = LAYOUT_canon(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_NO, KC_APP, KC_RCTL)
};

View File

@@ -1,18 +1,34 @@
/*
Copyright 2023 Stefan Sundin "4pplet" <mail@4pplet.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_NO,
KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_NO, KC_SPC, KC_NO, KC_RALT, KC_RGUI, KC_NO, KC_APP, MO(1)),
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_NO,
KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_NO, KC_APP, MO(1)),
[1] = LAYOUT_all(
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
_______, KC_BSPC, KC_UP, KC_ENT, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, _______, _______,
KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MUTE, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, _______,
_______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, KC_BRID, KC_BRIU, _______, _______, _______ )
};
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
};

View File

@@ -1,32 +1,48 @@
/*
Copyright 2023 Stefan Sundin "4pplet" <mail@4pplet.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_NO,
KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_NO, KC_SPC, KC_NO, KC_RALT, KC_RGUI, KC_NO, KC_APP, MO(1)),
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUBS, KC_ENT,
KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_NO,
KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_NO, KC_APP, MO(1)),
[1] = LAYOUT_all(
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
_______, KC_BSPC, KC_UP, KC_ENT, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, _______, _______,
KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MUTE, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, _______,
_______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, KC_BRID, KC_BRIU, _______, _______, _______ ),
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
[2] = LAYOUT_all(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
[3] = LAYOUT_all(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ )
};
};

View File

@@ -5,10 +5,25 @@ A 60% PCB with a ton of layout options for SMK and Alps switches
More info: https://geekhack.org/index.php?topic=103531.0
* Keyboard Maintainer: [4pplet](https://github.com/4pplet)
* Hardware Supported: Steezy60 Rev A
* Hardware Supported: Steezy60 Rev A and B
* Hardware Availability: https://4pplet.com/products/steezy60
Make example for this keyboard (after setting up your build environment):
make 4pplet/steezy60/rev_a:default
make 4pplet/steezy60/rev_b:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
Flashing example for this keyboard:
make 4pplet/steezy60/rev_a:default:flash
make 4pplet/steezy60/rev_b: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 Escape and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB or short the reset header
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -1,96 +1,724 @@
{
"keyboard_name": "Steezy60 Rev A",
"manufacturer": "4pplet",
"url": "",
"url": "https://github.com/4pplet/steezy60",
"maintainer": "4pplet",
"usb": {
"vid": "0x4444",
"pid": "0x0002",
"device_version": "0.0.1"
},
"qmk_lufa_bootloader": {
"esc_input": "C2",
"esc_output": "C4"
},
"processor": "atmega32u2",
"bootloader": "atmel-dfu",
"community_layouts": [
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
"60_hhkb",
"60_iso",
"60_iso_split_bs_rshift",
"60_iso_tsangan",
"60_tsangan_hhkb"
],
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["C4","C6","B7","B6","B5","B4","B3","B2","B1","D6","D5","D4","D2","D1"],
"rows": ["C2","D0","B0","C7","C5"]
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": false,
"nkro": true,
"rgblight": true
},
"rgblight": {
"led_count": 12,
"pin": "D3",
"animations": {
"alternating": true,
"breathing": true,
"christmas": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"rgb_test": true,
"snake": true,
"static_gradient": true,
"twinkle": true
}
},
"layouts": {
"LAYOUT_all": {
"layout": [
{"x":0, "y":0},
{"x":1, "y":0},
{"x":2, "y":0},
{"x":3, "y":0},
{"x":4, "y":0},
{"x":5, "y":0},
{"x":6, "y":0},
{"x":7, "y":0},
{"x":8, "y":0},
{"x":9, "y":0},
{"x":10, "y":0},
{"x":11, "y":0},
{"x":12, "y":0},
{"x":13, "y":0},
{"x":14, "y":0},
{"x":0, "y":1, "w":1.5},
{"x":1.5, "y":1},
{"x":2.5, "y":1},
{"x":3.5, "y":1},
{"x":4.5, "y":1},
{"x":5.5, "y":1},
{"x":6.5, "y":1},
{"x":7.5, "y":1},
{"x":8.5, "y":1},
{"x":9.5, "y":1},
{"x":10.5, "y":1},
{"x":11.5, "y":1},
{"x":12.5, "y":1},
{"x":13.5, "y":1, "w":1.5},
{"x":0, "y":2, "w":1.75},
{"x":1.75, "y":2},
{"x":2.75, "y":2},
{"x":3.75, "y":2},
{"x":4.75, "y":2},
{"x":5.75, "y":2},
{"x":6.75, "y":2},
{"x":7.75, "y":2},
{"x":8.75, "y":2},
{"x":9.75, "y":2},
{"x":10.75, "y":2},
{"x":11.75, "y":2},
{"x":12.75, "y":2},
{"x":13.75, "y":2, "w":1.25},
{"x":0, "y":3},
{"x":1, "y":3},
{"x":2, "y":3},
{"x":3, "y":3},
{"x":4, "y":3},
{"x":5, "y":3},
{"x":6, "y":3},
{"x":7, "y":3},
{"x":8, "y":3},
{"x":9, "y":3},
{"x":10, "y":3},
{"x":11, "y":3},
{"x":12, "y":3},
{"x":13, "y":3},
{"x":14, "y":3},
{"x":0, "y":4},
{"x":1, "y":4},
{"x":2, "y":4},
{"x":3, "y":4},
{"x":4, "y":4, "w":2.25},
{"x":6.25, "y":4, "w":1.5},
{"x":7.75, "y":4, "w":2.25},
{"x":10, "y":4},
{"x":11, "y":4},
{"x":12, "y":4},
{"x":13, "y":4},
{"x":14, "y":4}
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "|", "matrix": [0, 13], "x": 13, "y": 0 },
{ "label": "~", "matrix": [4, 13], "x": 14, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "x": 0, "y": 3 },
{ "label": "NUBS", "matrix": [3, 1], "x": 1, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11, "y": 3 },
{ "label": "Shift", "matrix": [3, 12], "x": 12, "y": 3 },
{ "label": "Up", "matrix": [3, 13], "x": 13, "y": 3 },
{ "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "x": 1, "y": 4 },
{ "label": "None", "matrix": [4, 2], "x": 2, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "x": 3, "y": 4 },
{ "label": "LSpace", "matrix": [4, 4], "w": 2.5, "x": 4, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 1.25, "x": 6.5, "y": 4 },
{ "label": "RSpace", "matrix": [4, 6], "w": 2.25, "x": 7.75, "y": 4 },
{ "label": "Alt", "matrix": [4, 7], "x": 10, "y": 4 },
{ "label": "Win", "matrix": [4, 8], "x": 11, "y": 4 },
{ "label": "None", "matrix": [4, 9], "x": 12, "y": 4 },
{ "label": "Menu", "matrix": [4, 10], "x": 13, "y": 4 },
{ "label": "Fn", "matrix": [4, 11], "x": 14, "y": 4 }
]
},
"LAYOUT_60_ansi": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [4, 13], "w": 2, "x": 13, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [4, 7], "w": 1.25, "x": 10, "y": 4 },
{ "label": "Win", "matrix": [4, 8], "w": 1.25, "x": 11.25, "y": 4 },
{ "label": "Menu", "matrix": [4, 10], "w": 1.25, "x": 12.5, "y": 4 },
{ "label": "Fn", "matrix": [4, 11], "w": 1.25, "x": 13.75, "y": 4 }
]
},
"LAYOUT_60_ansi_split_bs_rshift": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "|", "matrix": [0, 13], "x": 13, "y": 0 },
{ "label": "~", "matrix": [4, 13], "x": 14, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 },
{ "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [4, 7], "w": 1.25, "x": 10, "y": 4 },
{ "label": "Win", "matrix": [4, 8], "w": 1.25, "x": 11.25, "y": 4 },
{ "label": "Menu", "matrix": [4, 10], "w": 1.25, "x": 12.5, "y": 4 },
{ "label": "Fn", "matrix": [4, 11], "w": 1.25, "x": 13.75, "y": 4 }
]
},
"LAYOUT_60_ansi_tsangan": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [4, 13], "w": 2, "x": 13, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "w": 1.5, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 },
{ "label": "Alt", "matrix": [4, 8], "w": 1.5, "x": 11, "y": 4 },
{ "label": "Win", "matrix": [4, 10], "x": 12.5, "y": 4 },
{ "label": "Ctrl", "matrix": [4, 11], "w": 1.5, "x": 13.5, "y": 4 }
]
},
"LAYOUT_60_hhkb": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "|", "matrix": [0, 13], "x": 13, "y": 0 },
{ "label": "~", "matrix": [4, 13], "x": 14, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 },
{ "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 },
{ "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "w": 1.5, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 },
{ "label": "Alt", "matrix": [4, 8], "w": 1.5, "x": 11, "y": 4 },
{ "label": "Win", "matrix": [4, 10], "x": 12.5, "y": 4 }
]
},
"LAYOUT_60_iso": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [4, 13], "w": 2, "x": 13, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [4, 7], "w": 1.25, "x": 10, "y": 4 },
{ "label": "Win", "matrix": [4, 8], "w": 1.25, "x": 11.25, "y": 4 },
{ "label": "Menu", "matrix": [4, 10], "w": 1.25, "x": 12.5, "y": 4 },
{ "label": "Fn", "matrix": [4, 11], "w": 1.25, "x": 13.75, "y": 4 }
]
},
"LAYOUT_60_iso_split_bs_rshift": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "|", "matrix": [0, 13], "x": 13, "y": 0 },
{ "label": "~", "matrix": [4, 13], "x": 14, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 },
{ "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [4, 7], "w": 1.25, "x": 10, "y": 4 },
{ "label": "Win", "matrix": [4, 8], "w": 1.25, "x": 11.25, "y": 4 },
{ "label": "Menu", "matrix": [4, 10], "w": 1.25, "x": 12.5, "y": 4 },
{ "label": "Fn", "matrix": [4, 11], "w": 1.25, "x": 13.75, "y": 4 }
]
},
"LAYOUT_60_iso_tsangan": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [4, 13], "w": 2, "x": 13, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "w": 1.5, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 },
{ "label": "Alt", "matrix": [4, 8], "w": 1.5, "x": 11, "y": 4 },
{ "label": "Win", "matrix": [4, 10], "x": 12.5, "y": 4 },
{ "label": "Ctrl", "matrix": [4, 11], "w": 1.5, "x": 13.5, "y": 4 }
]
},
"LAYOUT_60_tsangan_hhkb": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "|", "matrix": [0, 13], "x": 13, "y": 0 },
{ "label": "~", "matrix": [4, 13], "x": 14, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 },
{ "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "w": 1.5, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 },
{ "label": "Alt", "matrix": [4, 8], "w": 1.5, "x": 11, "y": 4 },
{ "label": "Win", "matrix": [4, 10], "x": 12.5, "y": 4 },
{ "label": "Ctrl", "matrix": [4, 11], "w": 1.5, "x": 13.5, "y": 4 }
]
},
"LAYOUT_canon": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "|", "matrix": [0, 13], "x": 13, "y": 0 },
{ "label": "~", "matrix": [4, 13], "x": 14, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "nuhs", "matrix": [2, 12], "x": 12.75, "y": 2 },
{ "label": "Enter", "matrix": [4, 12], "w": 1.25, "h": 2, "x": 13.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 1.5, "x": 12.25, "y": 3 },
{ "label": "Fn", "matrix": [4, 0], "x": 0, "y": 4 },
{ "label": "Ctrl", "matrix": [4, 1], "x": 1, "y": 4 },
{ "label": "Win", "matrix": [4, 2], "x": 2, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "x": 3, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 6, "x": 4, "y": 4 },
{ "label": "Alt", "matrix": [4, 7], "x": 10, "y": 4 },
{ "label": "Win", "matrix": [4, 8], "x": 11, "y": 4 },
{ "label": "Menu", "matrix": [4, 9], "x": 12, "y": 4 },
{ "label": "Ctrl", "matrix": [4, 10], "x": 13, "y": 4 },
{ "label": "Fn", "matrix": [4, 11], "x": 14, "y": 4 }
]
}
}

View File

@@ -1 +0,0 @@
#include "rev_a.h"

View File

@@ -1,18 +0,0 @@
#pragma once
#include "quantum.h"
#define LAYOUT_all( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k4d, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d,k4c, \
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \
) \
{ \
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
{k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
{k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d} \
}

View File

@@ -1,12 +1,4 @@
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
KEY_LOCK_ENABLE = yes

View File

@@ -0,0 +1,19 @@
/*
Copyright 2023 Stefan Sundin "4pplet" <mail@4pplet.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define WS2812_EXTERNAL_PULLUP

View File

@@ -0,0 +1,725 @@
{
"keyboard_name": "Steezy60 Rev B",
"manufacturer": "4pplet",
"url": "https://github.com/4pplet/steezy60",
"maintainer": "4pplet",
"usb": {
"vid": "0x4444",
"pid": "0x0013",
"device_version": "0.0.2"
},
"processor": "STM32F072",
"bootloader": "stm32-dfu",
"community_layouts": [
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
"60_hhkb",
"60_iso",
"60_iso_split_bs_rshift",
"60_iso_tsangan",
"60_tsangan_hhkb"
],
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["A7","A5","A4","A3","A1","F1","F0","C15","C14","B9","B6","B5","B4","B3"],
"rows": ["B8","A15","C13","A2","A6"]
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": false,
"nkro": true,
"rgblight": true
},
"rgblight": {
"led_count": 12,
"pin": "A8",
"animations": {
"alternating": true,
"breathing": true,
"christmas": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"rgb_test": true,
"snake": true,
"static_gradient": true,
"twinkle": true
}
},
"layouts": {
"LAYOUT_all": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "|", "matrix": [0, 13], "x": 13, "y": 0 },
{ "label": "~", "matrix": [4, 13], "x": 14, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 13], "w": 1.25, "x": 13.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "x": 0, "y": 3 },
{ "label": "NUBS", "matrix": [3, 1], "x": 1, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11, "y": 3 },
{ "label": "Shift", "matrix": [3, 12], "x": 12, "y": 3 },
{ "label": "Up", "matrix": [3, 13], "x": 13, "y": 3 },
{ "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "x": 1, "y": 4 },
{ "label": "None", "matrix": [4, 2], "x": 2, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "x": 3, "y": 4 },
{ "label": "LSpace", "matrix": [4, 4], "w": 2.5, "x": 4, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 1.25, "x": 6.5, "y": 4 },
{ "label": "RSpace", "matrix": [4, 6], "w": 2.25, "x": 7.75, "y": 4 },
{ "label": "Alt", "matrix": [4, 7], "x": 10, "y": 4 },
{ "label": "Win", "matrix": [4, 8], "x": 11, "y": 4 },
{ "label": "None", "matrix": [4, 9], "x": 12, "y": 4 },
{ "label": "Menu", "matrix": [4, 10], "x": 13, "y": 4 },
{ "label": "Fn", "matrix": [4, 11], "x": 14, "y": 4 }
]
},
"LAYOUT_60_ansi": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [4, 13], "w": 2, "x": 13, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [4, 7], "w": 1.25, "x": 10, "y": 4 },
{ "label": "Win", "matrix": [4, 8], "w": 1.25, "x": 11.25, "y": 4 },
{ "label": "Menu", "matrix": [4, 10], "w": 1.25, "x": 12.5, "y": 4 },
{ "label": "Fn", "matrix": [4, 11], "w": 1.25, "x": 13.75, "y": 4 }
]
},
"LAYOUT_60_ansi_split_bs_rshift": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "|", "matrix": [0, 13], "x": 13, "y": 0 },
{ "label": "~", "matrix": [4, 13], "x": 14, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 },
{ "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [4, 7], "w": 1.25, "x": 10, "y": 4 },
{ "label": "Win", "matrix": [4, 8], "w": 1.25, "x": 11.25, "y": 4 },
{ "label": "Menu", "matrix": [4, 10], "w": 1.25, "x": 12.5, "y": 4 },
{ "label": "Fn", "matrix": [4, 11], "w": 1.25, "x": 13.75, "y": 4 }
]
},
"LAYOUT_60_ansi_tsangan": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [4, 13], "w": 2, "x": 13, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "w": 1.5, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 },
{ "label": "Alt", "matrix": [4, 8], "w": 1.5, "x": 11, "y": 4 },
{ "label": "Win", "matrix": [4, 10], "x": 12.5, "y": 4 },
{ "label": "Ctrl", "matrix": [4, 11], "w": 1.5, "x": 13.5, "y": 4 }
]
},
"LAYOUT_60_hhkb": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "|", "matrix": [0, 13], "x": 13, "y": 0 },
{ "label": "~", "matrix": [4, 13], "x": 14, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 },
{ "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 },
{ "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "w": 1.5, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 },
{ "label": "Alt", "matrix": [4, 8], "w": 1.5, "x": 11, "y": 4 },
{ "label": "Win", "matrix": [4, 10], "x": 12.5, "y": 4 }
]
},
"LAYOUT_60_iso": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [4, 13], "w": 2, "x": 13, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [4, 7], "w": 1.25, "x": 10, "y": 4 },
{ "label": "Win", "matrix": [4, 8], "w": 1.25, "x": 11.25, "y": 4 },
{ "label": "Menu", "matrix": [4, 10], "w": 1.25, "x": 12.5, "y": 4 },
{ "label": "Fn", "matrix": [4, 11], "w": 1.25, "x": 13.75, "y": 4 }
]
},
"LAYOUT_60_iso_split_bs_rshift": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "|", "matrix": [0, 13], "x": 13, "y": 0 },
{ "label": "~", "matrix": [4, 13], "x": 14, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 },
{ "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "w": 1.25, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 6.25, "x": 3.75, "y": 4 },
{ "label": "Alt", "matrix": [4, 7], "w": 1.25, "x": 10, "y": 4 },
{ "label": "Win", "matrix": [4, 8], "w": 1.25, "x": 11.25, "y": 4 },
{ "label": "Menu", "matrix": [4, 10], "w": 1.25, "x": 12.5, "y": 4 },
{ "label": "Fn", "matrix": [4, 11], "w": 1.25, "x": 13.75, "y": 4 }
]
},
"LAYOUT_60_iso_tsangan": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "Backspace", "matrix": [4, 13], "w": 2, "x": 13, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "NUHS", "matrix": [2, 12], "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "label": "NUBS", "matrix": [3, 1], "x": 1.25, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "w": 1.5, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 },
{ "label": "Alt", "matrix": [4, 8], "w": 1.5, "x": 11, "y": 4 },
{ "label": "Win", "matrix": [4, 10], "x": 12.5, "y": 4 },
{ "label": "Ctrl", "matrix": [4, 11], "w": 1.5, "x": 13.5, "y": 4 }
]
},
"LAYOUT_60_tsangan_hhkb": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "|", "matrix": [0, 13], "x": 13, "y": 0 },
{ "label": "~", "matrix": [4, 13], "x": 14, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 },
{ "label": "Fn", "matrix": [4, 12], "x": 14, "y": 3 },
{ "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
{ "label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "w": 1.5, "x": 2.5, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 7, "x": 4, "y": 4 },
{ "label": "Alt", "matrix": [4, 8], "w": 1.5, "x": 11, "y": 4 },
{ "label": "Win", "matrix": [4, 10], "x": 12.5, "y": 4 },
{ "label": "Ctrl", "matrix": [4, 11], "w": 1.5, "x": 13.5, "y": 4 }
]
},
"LAYOUT_canon": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
{ "label": "!", "matrix": [0, 1], "x": 1, "y": 0 },
{ "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
{ "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
{ "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
{ "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
{ "label": "&", "matrix": [0, 7], "x": 7, "y": 0 },
{ "label": "*", "matrix": [0, 8], "x": 8, "y": 0 },
{ "label": "(", "matrix": [0, 9], "x": 9, "y": 0 },
{ "label": ")", "matrix": [0, 10], "x": 10, "y": 0 },
{ "label": "_", "matrix": [0, 11], "x": 11, "y": 0 },
{ "label": "+", "matrix": [0, 12], "x": 12, "y": 0 },
{ "label": "|", "matrix": [0, 13], "x": 13, "y": 0 },
{ "label": "~", "matrix": [4, 13], "x": 14, "y": 0 },
{ "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
{ "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
{ "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
{ "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
{ "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
{ "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
{ "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
{ "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
{ "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
{ "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
{ "label": "{", "matrix": [1, 11], "x": 11.5, "y": 1 },
{ "label": "}", "matrix": [1, 12], "x": 12.5, "y": 1 },
{ "label": "|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
{ "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
{ "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
{ "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
{ "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
{ "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
{ "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
{ "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
{ "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
{ "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
{ "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
{ "label": ":", "matrix": [2, 10], "x": 10.75, "y": 2 },
{ "label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
{ "label": "nuhs", "matrix": [2, 12], "x": 12.75, "y": 2 },
{ "label": "Enter", "matrix": [4, 12], "w": 1.25, "h": 2, "x": 13.75, "y": 2 },
{ "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "label": "<", "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "label": ">", "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "label": "?", "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "label": "Shift", "matrix": [3, 13], "w": 1.5, "x": 12.25, "y": 3 },
{ "label": "Fn", "matrix": [4, 0], "x": 0, "y": 4 },
{ "label": "Ctrl", "matrix": [4, 1], "x": 1, "y": 4 },
{ "label": "Win", "matrix": [4, 2], "x": 2, "y": 4 },
{ "label": "Alt", "matrix": [4, 3], "x": 3, "y": 4 },
{ "label": "Space", "matrix": [4, 5], "w": 6, "x": 4, "y": 4 },
{ "label": "Alt", "matrix": [4, 7], "x": 10, "y": 4 },
{ "label": "Win", "matrix": [4, 8], "x": 11, "y": 4 },
{ "label": "Menu", "matrix": [4, 9], "x": 12, "y": 4 },
{ "label": "Ctrl", "matrix": [4, 10], "x": 13, "y": 4 },
{ "label": "Fn", "matrix": [4, 11], "x": 14, "y": 4 }
]
}
}
}

View File

@@ -0,0 +1,10 @@
# Build Options
# change yes to no to disable
#
KEY_LOCK_ENABLE = yes
# Wildcard to allow APM32 MCU
DFU_SUFFIX_ARGS = -p FFFF -v FFFF
# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE

View File

@@ -0,0 +1,34 @@
/*
Copyright 2023 Stefan Sundin "4pplet" <4pplet@protonmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// main layer
[0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
MO(1), KC_LALT, KC_LGUI, KC_GRV, KC_SPC, KC_BSLS, KC_LEFT, KC_RIGHT,KC_DOWN, KC_UP),
// basic function layer
[1] = LAYOUT_all(
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
};

View File

@@ -0,0 +1,40 @@
/*
Copyright 2023 Stefan Sundin "4pplet" <4pplet@protonmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// main layer
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──────┐
* │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Delete│
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬────┤
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴ │
* │ Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───────┤
* │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │
* ├────┬───│───┴┬──┴┬──┴───┴───┴───┴─┬─┴─┬─┴──┬┴───┴┬────┬───┤
* │Caps│Alt│Gui │ ` │ Space │ \ │Left│Right│Down│ Up│
* └────┴───┴────┴───┴────────────────┴───┴────┴─────┴────┴───┘
*/
[0] = LAYOUT_m0116(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_CAPS, KC_LALT, KC_LGUI, KC_GRV, KC_SPC, KC_BSLS, KC_LEFT, KC_RIGHT,KC_DOWN, KC_UP)
};

View File

@@ -0,0 +1,39 @@
/*
Copyright 2023 Stefan Sundin "4pplet" <4pplet@protonmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──────┐
* │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Backsp│
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬────┤
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐Ent│
* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ \ │ │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───│───┤
* │Shft│ ` │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift│ Up│
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴┬──┴─┬─┴──┬┴────┬────┤
* │Ctrl│Alt │GUI │ Space │GUI │Left│Right│Down│
* └────┴────┴────┴──────────────────────┴────┴────┴─────┴────┘
*/
[0] = LAYOUT_m0118(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS,
KC_LSFT, KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_LEFT, KC_RIGHT,KC_DOWN)
};

View File

@@ -0,0 +1,48 @@
/*
Copyright 2023 Stefan Sundin "4pplet" <4pplet@protonmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// main layer
[0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
MO(1), KC_LALT, KC_LGUI, KC_GRV, KC_SPC, KC_BSLS, KC_LEFT, KC_RIGHT,KC_DOWN, KC_UP),
// basic function layer
[1] = LAYOUT_all(
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
// extra layer for VIA
[2] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
// extra layer for VIA
[3] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
};

View File

@@ -0,0 +1,23 @@
# Unextended Standard PCB
PCB for the Unextended Standard Project. The PCB enables use of M0116, M0118, IIc and NeXT keycaps and is designed to fit in the open sourced Unextended case.
* Keyboard Maintainer: [4pplet](https://github.com/4pplet)
* Hardware Supported: [Unextended Standard PCB](https://github.com/4pplet/Unextended-Standard-PCB)
Make example for this keyboard (after setting up your build environment):
make 4pplet/unextended_std/rev_a:default
Flashing example for this keyboard:
make 4pplet/unextended_std/rev_a: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 Escape-key and plug in the keyboard
* **Physical reset header**: Briefly short the header labled "BL/reset" on the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -0,0 +1,19 @@
/*
Copyright 2023 Stefan Sundin "4pplet" <mail@4pplet.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define WS2812_EXTERNAL_PULLUP

View File

@@ -0,0 +1,262 @@
{
"keyboard_name": "Unextended Standard Rev A",
"manufacturer": "4pplet",
"url": "https://github.com/4pplet/Unextended",
"maintainer": "4pplet",
"usb": {
"vid": "0x4444",
"pid": "0x0012",
"device_version": "0.0.1"
},
"processor": "STM32F072",
"bootloader": "stm32-dfu",
"matrix_pins": {
"rows":
["B14","B15","B6","B5","B4"],
"cols":
["B2","A4","A1","A2","F1","F0","C15","C14","C13","B9","B8","B7","B12","B3"]
},
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"mousekey": true,
"extrakey": true,
"console": false,
"command": false,
"nkro": true,
"backlight": false,
"rgblight": true,
"audio": false
},
"rgblight": {
"pin": "A8",
"led_count": 16,
"animations": {
"alternating": true,
"breathing": true,
"christmas": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"rgb_test": true,
"snake": true,
"static_gradient": true,
"twinkle": true
}
},
"indicators": {
"caps_lock": "A10",
"on_state": 0
},
"layouts": {
"LAYOUT_all": {
"layout": [
{"label":"Esc", "matrix": [0, 0], "x":0, "y":0},
{"label":"!", "matrix": [0, 1], "x":1, "y":0},
{"label":"@", "matrix": [0, 2], "x":2, "y":0},
{"label":"#", "matrix": [0, 3], "x":3, "y":0},
{"label":"$", "matrix": [0, 4], "x":4, "y":0},
{"label":"%", "matrix": [0, 5], "x":5, "y":0},
{"label":"^", "matrix": [0, 6], "x":6, "y":0},
{"label":"&", "matrix": [0, 7], "x":7, "y":0},
{"label":"*", "matrix": [0, 8], "x":8, "y":0},
{"label":"(", "matrix": [0, 9], "x":9, "y":0},
{"label":")", "matrix": [0, 10], "x":10, "y":0},
{"label":"_", "matrix": [0, 11], "x":11, "y":0},
{"label":"+", "matrix": [0, 12], "x":12, "y":0},
{"label":"Backsp", "matrix": [0, 13], "x":13, "y":0, "w":1.5},
{"label":"Tab", "matrix": [1, 0], "x":0, "y":1, "w":1.5},
{"label":"Q", "matrix": [1, 1], "x":1.5, "y":1},
{"label":"W", "matrix": [1, 2], "x":2.5, "y":1},
{"label":"E", "matrix": [1, 3], "x":3.5, "y":1},
{"label":"R", "matrix": [1, 4], "x":4.5, "y":1},
{"label":"T", "matrix": [1, 5], "x":5.5, "y":1},
{"label":"Y", "matrix": [1, 6], "x":6.5, "y":1},
{"label":"U", "matrix": [1, 7], "x":7.5, "y":1},
{"label":"I", "matrix": [1, 8], "x":8.5, "y":1},
{"label":"O", "matrix": [1, 9], "x":9.5, "y":1},
{"label":"P", "matrix": [1, 10], "x":10.5, "y":1},
{"label":"{", "matrix": [1, 11], "x":11.5, "y":1},
{"label":"}", "matrix": [1, 12], "x":12.5, "y":1},
{"label":"|", "matrix": [1, 13], "x":13.5, "y":1},
{"label":"Caps Lock", "matrix": [2, 0], "x":0, "y":2, "w":1.75},
{"label":"A", "matrix": [2, 1], "x":1.75, "y":2},
{"label":"S", "matrix": [2, 2], "x":2.75, "y":2},
{"label":"D", "matrix": [2, 3], "x":3.75, "y":2},
{"label":"F", "matrix": [2, 4], "x":4.75, "y":2},
{"label":"G", "matrix": [2, 5], "x":5.75, "y":2},
{"label":"H", "matrix": [2, 6], "x":6.75, "y":2},
{"label":"J", "matrix": [2, 7], "x":7.75, "y":2},
{"label":"K", "matrix": [2, 8], "x":8.75, "y":2},
{"label":"L", "matrix": [2, 9], "x":9.75, "y":2},
{"label":":", "matrix": [2, 10], "x":10.75, "y":2},
{"label":"\"", "matrix": [2, 11], "x":11.75, "y":2},
{"label":"nubs", "matrix": [3, 13], "x":12.75, "y":2},
{"label":"Enter", "matrix": [2, 13], "x":13.75, "y":2, "w":0.75},
{"label":"Shift", "matrix": [3, 0], "x":0, "y":3, "w":1.25},
{"label":"nubs", "matrix": [3, 1], "x":1.25, "y":3},
{"label":"Z", "matrix": [3, 2], "x":2.25, "y":3},
{"label":"X", "matrix": [3, 3], "x":3.25, "y":3},
{"label":"C", "matrix": [3, 4], "x":4.25, "y":3},
{"label":"V", "matrix": [3, 5], "x":5.25, "y":3},
{"label":"B", "matrix": [3, 6], "x":6.25, "y":3},
{"label":"N", "matrix": [3, 7], "x":7.25, "y":3},
{"label":"M", "matrix": [3, 8], "x":8.25, "y":3},
{"label":"<", "matrix": [3, 9], "x":9.25, "y":3},
{"label":">", "matrix": [3, 10], "x":10.25, "y":3},
{"label":"?", "matrix": [3, 11], "x":11.25, "y":3},
{"label":"Shift", "matrix": [3, 12], "x":12.25, "y":3, "w":1.25},
{"label":"\u2191", "matrix": [4, 13], "x":13.5, "y":3},
{"label":"Caps", "matrix": [4, 0], "x":0, "y":4},
{"label":"opt", "matrix": [4, 1], "x":1, "y":4},
{"label":"Cmd", "matrix": [4, 2], "x":2, "y":4, "w":1.75},
{"label":"`", "matrix": [4, 3], "x":3.75, "y":4},
{"label":"Space", "matrix": [4, 6], "x":4.75, "y":4, "w":4.75},
{"label":"\\", "matrix": [4, 8], "x":9.5, "y":4},
{"label":"\u2190", "matrix": [4, 9], "x":10.5, "y":4},
{"label":"\u2192", "matrix": [4, 10], "x":11.5, "y":4},
{"label":"\u2193", "matrix": [4, 11], "x":12.5, "y":4},
{"label":"\u2191", "matrix": [4, 12], "x":13.5, "y":4}
]
},
"LAYOUT_m0116": {
"layout": [
{"label":"Esc", "matrix": [0, 0], "x":0, "y":0},
{"label":"!", "matrix": [0, 1], "x":1, "y":0},
{"label":"@", "matrix": [0, 2], "x":2, "y":0},
{"label":"#", "matrix": [0, 3], "x":3, "y":0},
{"label":"$", "matrix": [0, 4], "x":4, "y":0},
{"label":"%", "matrix": [0, 5], "x":5, "y":0},
{"label":"^", "matrix": [0, 6], "x":6, "y":0},
{"label":"&", "matrix": [0, 7], "x":7, "y":0},
{"label":"*", "matrix": [0, 8], "x":8, "y":0},
{"label":"(", "matrix": [0, 9], "x":9, "y":0},
{"label":")", "matrix": [0, 10], "x":10, "y":0},
{"label":"_", "matrix": [0, 11], "x":11, "y":0},
{"label":"+", "matrix": [0, 12], "x":12, "y":0},
{"label":"Backsp", "matrix": [0, 13], "x":13, "y":0, "w":1.5},
{"label":"Tab", "matrix": [1, 0], "x":0, "y":1, "w":1.5},
{"label":"Q", "matrix": [1, 1], "x":1.5, "y":1},
{"label":"W", "matrix": [1, 2], "x":2.5, "y":1},
{"label":"E", "matrix": [1, 3], "x":3.5, "y":1},
{"label":"R", "matrix": [1, 4], "x":4.5, "y":1},
{"label":"T", "matrix": [1, 5], "x":5.5, "y":1},
{"label":"Y", "matrix": [1, 6], "x":6.5, "y":1},
{"label":"U", "matrix": [1, 7], "x":7.5, "y":1},
{"label":"I", "matrix": [1, 8], "x":8.5, "y":1},
{"label":"O", "matrix": [1, 9], "x":9.5, "y":1},
{"label":"P", "matrix": [1, 10], "x":10.5, "y":1},
{"label":"{", "matrix": [1, 11], "x":11.5, "y":1},
{"label":"}", "matrix": [1, 12], "x":12.5, "y":1},
{"label":"Enter", "matrix": [2, 13], "x":13.5, "y":1, "h":2},
{"label":"Control", "matrix": [2, 0], "x":0, "y":2, "w":1.75},
{"label":"A", "matrix": [2, 1], "x":1.75, "y":2},
{"label":"S", "matrix": [2, 2], "x":2.75, "y":2},
{"label":"D", "matrix": [2, 3], "x":3.75, "y":2},
{"label":"F", "matrix": [2, 4], "x":4.75, "y":2},
{"label":"G", "matrix": [2, 5], "x":5.75, "y":2},
{"label":"H", "matrix": [2, 6], "x":6.75, "y":2},
{"label":"J", "matrix": [2, 7], "x":7.75, "y":2},
{"label":"K", "matrix": [2, 8], "x":8.75, "y":2},
{"label":"L", "matrix": [2, 9], "x":9.75, "y":2},
{"label":":", "matrix": [2, 10], "x":10.75, "y":2},
{"label":"\"", "matrix": [2, 11], "x":11.75, "y":2},
{"label":"Shift", "matrix": [3, 0], "x":0, "y":3, "w":2.25},
{"label":"Z", "matrix": [3, 2], "x":2.25, "y":3},
{"label":"X", "matrix": [3, 3], "x":3.25, "y":3},
{"label":"C", "matrix": [3, 4], "x":4.25, "y":3},
{"label":"V", "matrix": [3, 5], "x":5.25, "y":3},
{"label":"B", "matrix": [3, 6], "x":6.25, "y":3},
{"label":"N", "matrix": [3, 7], "x":7.25, "y":3},
{"label":"M", "matrix": [3, 8], "x":8.25, "y":3},
{"label":"<", "matrix": [3, 9], "x":9.25, "y":3},
{"label":">", "matrix": [3, 10], "x":10.25, "y":3},
{"label":"?", "matrix": [3, 11], "x":11.25, "y":3},
{"label":"Shift", "matrix": [3, 12], "x":12.25, "y":3, "w":2.25},
{"label":"Caps", "matrix": [4, 0], "x":0, "y":4},
{"label":"opt", "matrix": [4, 1], "x":1, "y":4},
{"label":"Cmd", "matrix": [4, 2], "x":2, "y":4, "w":1.75},
{"label":"`", "matrix": [4, 3], "x":3.75, "y":4},
{"label":"Space", "matrix": [4, 6],"x":4.75, "y":4, "w":4.75},
{"label":"\\", "matrix": [4, 8], "x":9.5, "y":4},
{"label":"\u2190", "matrix": [4, 9], "x":10.5, "y":4},
{"label":"\u2192", "matrix": [4, 10], "x":11.5, "y":4},
{"label":"\u2193", "matrix": [4, 11], "x":12.5, "y":4},
{"label":"\u2191", "matrix": [4, 12], "x":13.5, "y":4}
]
},
"LAYOUT_m0118": {
"layout": [
{"label":"Esc", "matrix": [0, 0], "x":0, "y":0},
{"label":"!", "matrix": [0, 1], "x":1, "y":0},
{"label":"@", "matrix": [0, 2], "x":2, "y":0},
{"label":"#", "matrix": [0, 3], "x":3, "y":0},
{"label":"$", "matrix": [0, 4], "x":4, "y":0},
{"label":"%", "matrix": [0, 5], "x":5, "y":0},
{"label":"^", "matrix": [0, 6], "x":6, "y":0},
{"label":"&", "matrix": [0, 7], "x":7, "y":0},
{"label":"*", "matrix": [0, 8], "x":8, "y":0},
{"label":"(", "matrix": [0, 9], "x":9, "y":0},
{"label":")", "matrix": [0, 10], "x":10, "y":0},
{"label":"_", "matrix": [0, 11], "x":11, "y":0},
{"label":"+", "matrix": [0, 12], "x":12, "y":0},
{"label":"Backsp", "matrix": [0, 13], "x":13, "y":0, "w":1.5},
{"label":"Tab", "matrix": [1, 0], "x":0, "y":1, "w":1.5},
{"label":"Q", "matrix": [1, 1], "x":1.5, "y":1},
{"label":"W", "matrix": [1, 2], "x":2.5, "y":1},
{"label":"E", "matrix": [1, 3], "x":3.5, "y":1},
{"label":"R", "matrix": [1, 4], "x":4.5, "y":1},
{"label":"T", "matrix": [1, 5], "x":5.5, "y":1},
{"label":"Y", "matrix": [1, 6], "x":6.5, "y":1},
{"label":"U", "matrix": [1, 7], "x":7.5, "y":1},
{"label":"I", "matrix": [1, 8], "x":8.5, "y":1},
{"label":"O", "matrix": [1, 9], "x":9.5, "y":1},
{"label":"P", "matrix": [1, 10], "x":10.5, "y":1},
{"label":"{", "matrix": [1, 11], "x":11.5, "y":1},
{"label":"}", "matrix": [1, 12], "x":12.5, "y":1},
{"label":"Enter", "matrix": [2, 13], "x":13.75, "y":1, "w":0.75, "h":2},
{"label":"Caps Lock", "matrix": [2, 0], "x":0, "y":2, "w":1.75},
{"label":"A", "matrix": [2, 1], "x":1.75, "y":2},
{"label":"S", "matrix": [2, 2], "x":2.75, "y":2},
{"label":"D", "matrix": [2, 3], "x":3.75, "y":2},
{"label":"F", "matrix": [2, 4], "x":4.75, "y":2},
{"label":"G", "matrix": [2, 5], "x":5.75, "y":2},
{"label":"H", "matrix": [2, 6], "x":6.75, "y":2},
{"label":"J", "matrix": [2, 7], "x":7.75, "y":2},
{"label":"K", "matrix": [2, 8], "x":8.75, "y":2},
{"label":"L", "matrix": [2, 9], "x":9.75, "y":2},
{"label":":", "matrix": [2, 10], "x":10.75, "y":2},
{"label":"\"", "matrix": [2, 11], "x":11.75, "y":2},
{"label":"nuhs", "matrix": [3, 13], "x":12.75, "y":2},
{"label":"Shift", "matrix": [3, 0], "x":0, "y":3, "w":1.25},
{"label":"nubs", "matrix": [3, 1], "x":1.25, "y":3},
{"label":"Z", "matrix": [3, 2], "x":2.25, "y":3},
{"label":"X", "matrix": [3, 3], "x":3.25, "y":3},
{"label":"C", "matrix": [3, 4], "x":4.25, "y":3},
{"label":"V", "matrix": [3, 5], "x":5.25, "y":3},
{"label":"B", "matrix": [3, 6], "x":6.25, "y":3},
{"label":"N", "matrix": [3, 7], "x":7.25, "y":3},
{"label":"M", "matrix": [3, 8], "x":8.25, "y":3},
{"label":"<", "matrix": [3, 9], "x":9.25, "y":3},
{"label":">", "matrix": [3, 10], "x":10.25, "y":3},
{"label":"?", "matrix": [3, 11], "x":11.25, "y":3},
{"label":"Shift", "matrix": [3, 12], "x":12.25, "y":3, "w":1.25},
{"label":"\u2191", "matrix": [4, 13], "x":13.5, "y":3},
{"label":"Ctrl", "matrix": [4, 0], "x":0, "y":4, "w":1.25},
{"label":"Opt", "matrix": [4, 2], "x":1.25, "y":4, "w":1.5},
{"label":"Cmd", "matrix": [4, 3], "x":2.75, "y":4, "w":1.75},
{"label":"Space", "matrix": [4, 6], "x":4.5, "y":4, "w":5.25},
{"label":"Cmd", "matrix": [4, 9], "x":9.75, "y":4, "w":1.75},
{"label":"\u2190", "matrix": [4, 10], "x":11.5, "y":4},
{"label":"\u2192", "matrix": [4, 11], "x":12.5, "y":4},
{"label":"\u2193", "matrix": [4, 12], "x":13.5, "y":4}
]
}
}
}

View File

@@ -0,0 +1,10 @@
# Build Options
# change yes to no to disable
#
KEY_LOCK_ENABLE = yes
# Wildcard to allow APM32 MCU
DFU_SUFFIX_ARGS = -p FFFF -v FFFF
# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE

View File

@@ -1,22 +1,9 @@
/* Copyright 2018-2020
* ENDO Katsuhiro <ka2hiro@curlybracket.co.jp>
* David Philip Barr <@davidphilipbarr>
* Pierre Chevalier <pierrechevalier83@gmail.com>
* @filterpaper
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// Copyright 2018-2020
// ENDO Katsuhiro <ka2hiro@curlybracket.co.jp>
// David Philip Barr <@davidphilipbarr>
// Pierre Chevalier <pierrechevalier83@gmail.com>
// SPDX-License-Identifier: GPL-2.0+
#include "quantum.h"
#ifdef SWAP_HANDS_ENABLE

View File

@@ -1,25 +1,9 @@
/* Copyright 2018-2020 ENDO Katsuhiro <ka2hiro@curlybracket.co.jp> David Philip Barr <@davidphilipbarr> Pierre Chevalier <pierrechevalier83@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// Copyright 2018-2020
// ENDO Katsuhiro <ka2hiro@curlybracket.co.jp>
// David Philip Barr <@davidphilipbarr>
// Pierre Chevalier <pierrechevalier83@gmail.com>
// SPDX-License-Identifier: GPL-2.0+
#pragma once
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
#define EE_HANDS

View File

@@ -8,8 +8,13 @@
"pid": "0x3939",
"device_version": "0.0.1"
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"development_board": "promicro",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"unicode": true
},
"matrix_pins": {
"direct": [
["C6", "D2", "F7", "B2", "F4"],
@@ -19,6 +24,7 @@
]
},
"split": {
"enabled": true,
"soft_serial_pin": "D1",
"bootmagic": {
"matrix": [4, 4]
@@ -41,47 +47,43 @@
"layouts": {
"LAYOUT_split_3x5_2": {
"layout": [
{"x": 0, "y": 1.33, "matrix": [0, 0]},
{"x": 1, "y": 0.31, "matrix": [0, 1]},
{"x": 2, "y": 0, "matrix": [0, 2]},
{"x": 3, "y": 0.28, "matrix": [0, 3]},
{"x": 4, "y": 0.42, "matrix": [0, 4]},
{ "label": "L01", "matrix": [0, 0], "x": 0, "y": 1.33 },
{ "label": "L02", "matrix": [0, 1], "x": 1, "y": 0.31 },
{ "label": "L03", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "L04", "matrix": [0, 3], "x": 3, "y": 0.28 },
{ "label": "L05", "matrix": [0, 4], "x": 4, "y": 0.42 },
{ "label": "R01", "matrix": [4, 0], "x": 8, "y": 0.42 },
{ "label": "R02", "matrix": [4, 1], "x": 9, "y": 0.28 },
{ "label": "R03", "matrix": [4, 2], "x": 10, "y": 0 },
{ "label": "R04", "matrix": [4, 3], "x": 11, "y": 0.31 },
{ "label": "R05", "matrix": [4, 4], "x": 12, "y": 1.33 },
{"x": 8, "y": 0.42, "matrix": [4, 0]},
{"x": 9, "y": 0.28, "matrix": [4, 1]},
{"x": 10, "y": 0, "matrix": [4, 2]},
{"x": 11, "y": 0.31, "matrix": [4, 3]},
{"x": 12, "y": 1.33, "matrix": [4, 4]},
{ "label": "L06", "matrix": [1, 0], "x": 0, "y": 2.33 },
{ "label": "L07", "matrix": [1, 1], "x": 1, "y": 1.31 },
{ "label": "L08", "matrix": [1, 2], "x": 2, "y": 1 },
{ "label": "L09", "matrix": [1, 3], "x": 3, "y": 1.28 },
{ "label": "L10", "matrix": [1, 4], "x": 4, "y": 1.42 },
{ "label": "R06", "matrix": [5, 0], "x": 8, "y": 1.42 },
{ "label": "R07", "matrix": [5, 1], "x": 9, "y": 1.28 },
{ "label": "R08", "matrix": [5, 2], "x": 10, "y": 1 },
{ "label": "R09", "matrix": [5, 3], "x": 11, "y": 1.31 },
{ "label": "R10", "matrix": [5, 4], "x": 12, "y": 2.33 },
{"x": 0, "y": 2.33, "matrix": [1, 0]},
{"x": 1, "y": 1.31, "matrix": [1, 1]},
{"x": 2, "y": 1, "matrix": [1, 2]},
{"x": 3, "y": 1.28, "matrix": [1, 3]},
{"x": 4, "y": 1.42, "matrix": [1, 4]},
{ "label": "L11", "matrix": [2, 0], "x": 0, "y": 3.33 },
{ "label": "L12", "matrix": [2, 1], "x": 1, "y": 2.31 },
{ "label": "L13", "matrix": [2, 2], "x": 2, "y": 2 },
{ "label": "L14", "matrix": [2, 3], "x": 3, "y": 2.28 },
{ "label": "L15", "matrix": [2, 4], "x": 4, "y": 2.42 },
{ "label": "R11", "matrix": [6, 0], "x": 8, "y": 2.42 },
{ "label": "R12", "matrix": [6, 1], "x": 9, "y": 2.28 },
{ "label": "R13", "matrix": [6, 2], "x": 10, "y": 2 },
{ "label": "R14", "matrix": [6, 3], "x": 11, "y": 2.31 },
{ "label": "R15", "matrix": [6, 4], "x": 12, "y": 3.33 },
{"x": 8, "y": 1.42, "matrix": [5, 0]},
{"x": 9, "y": 1.28, "matrix": [5, 1]},
{"x": 10, "y": 1, "matrix": [5, 2]},
{"x": 11, "y": 1.31, "matrix": [5, 3]},
{"x": 12, "y": 2.33, "matrix": [5, 4]},
{"x": 0, "y": 3.33, "matrix": [2, 0]},
{"x": 1, "y": 2.31, "matrix": [2, 1]},
{"x": 2, "y": 2, "matrix": [2, 2]},
{"x": 3, "y": 2.28, "matrix": [2, 3]},
{"x": 4, "y": 2.42, "matrix": [2, 4]},
{"x": 8, "y": 2.42, "matrix": [6, 0]},
{"x": 9, "y": 2.28, "matrix": [6, 1]},
{"x": 10, "y": 2, "matrix": [6, 2]},
{"x": 11, "y": 2.31, "matrix": [6, 3]},
{"x": 12, "y": 3.33, "matrix": [6, 4]},
{"x": 4, "y": 3.75, "matrix": [3, 0]},
{"x": 5, "y": 4, "matrix": [3, 1]},
{"x": 7, "y": 4, "matrix": [7, 0]},
{"x": 8, "y": 3.75, "matrix": [7, 1]}
{ "label": "L16", "matrix": [3, 0], "x": 4, "y": 3.75 },
{ "label": "L17", "matrix": [3, 1], "x": 5, "y": 4 },
{ "label": "R16", "matrix": [7, 0], "x": 7, "y": 4 },
{ "label": "R17", "matrix": [7, 1], "x": 8, "y": 3.75 }
]
}
}

View File

@@ -1,14 +1 @@
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
UNICODE_ENABLE = yes # Unicode
AUDIO_ENABLE = no # Audio output
SPLIT_KEYBOARD = yes # Use shared split_common code
# This file intentionally left blank

View File

@@ -0,0 +1,98 @@
// Copyright 2023 Peter.Falken (@PeterFalken)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "peterfalken.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_MUTE,
KC_7, KC_8, KC_9,
KC_4, KC_5, KC_6,
KC_1, KC_2, KC_3,
KC_ENT, KC_0, KC_BSPC
)
};
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
};
#endif
#ifdef OLED_ENABLE
static void render_qmk_logo(void) {
static const char PROGMEM qmk_logo[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x83, 0x83, 0x83, 0x83, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe,
0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfe, 0xfe, 0xfe, 0xfe, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x83, 0x83, 0x83, 0x83, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x81, 0x83, 0x83, 0x83, 0x83, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x83, 0x83, 0x83, 0x83, 0x81,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x07, 0x1f, 0x3f, 0x7f, 0x7e, 0xf8, 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xff, 0xff,
0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf8, 0x7e, 0x7f, 0x3f, 0x1f, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff,
0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xfc, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
oled_write_raw_P(qmk_logo, sizeof(qmk_logo));
}
bool oled_task_user(void) {
render_qmk_logo();
return true;
}
#endif // OLED_ENABLE

View File

@@ -0,0 +1,3 @@
# Setup QMK features
ENCODER_MAP_ENABLE = yes
RGB_MATRIX_ENABLE = no # Disable RGB key matrix

View File

@@ -0,0 +1,73 @@
{
"manufacturer": "AlhenKB",
"keyboard_name": "Macropad 5x4",
"maintainer": "alhenx",
"development_board": "promicro",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"rows": ["F5", "F7", "B3", "B6", "B5"],
"cols": ["F4", "F6", "B1", "B2"]
},
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
"vid": "0x6178"
},
"community_layouts": ["ortho_5x4", "numpad_5x4"],
"layouts": {
"LAYOUT_ortho_5x4": {
"layout": [
{"label": "K00 (F5,F4)", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "K01 (F5,F6)", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "K02 (F5,B1)", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "K03 (F5,B2)", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "K10 (F7,F4)", "matrix": [1, 0], "x": 0, "y": 1},
{"label": "K11 (F7,F6)", "matrix": [1, 1], "x": 1, "y": 1},
{"label": "K12 (F7,B1)", "matrix": [1, 2], "x": 2, "y": 1},
{"label": "K13 (F7,B2)", "matrix": [1, 3], "x": 3, "y": 1},
{"label": "K20 (B3,F4)", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "K21 (B3,F6)", "matrix": [2, 1], "x": 1, "y": 2},
{"label": "K22 (B3,B1)", "matrix": [2, 2], "x": 2, "y": 2},
{"label": "K23 (B3,B2)", "matrix": [2, 3], "x": 3, "y": 2},
{"label": "K30 (B6,F4)", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "K31 (B6,F6)", "matrix": [3, 1], "x": 1, "y": 3},
{"label": "K32 (B6,B1)", "matrix": [3, 2], "x": 2, "y": 3},
{"label": "K33 (B6,B2)", "matrix": [3, 3], "x": 3, "y": 3},
{"label": "K40 (B5,F4)", "matrix": [4, 0], "x": 0, "y": 4},
{"label": "K41 (B5,F6)", "matrix": [4, 1], "x": 1, "y": 4},
{"label": "K42 (B5,B1)", "matrix": [4, 2], "x": 2, "y": 4},
{"label": "K43 (B5,B2)", "matrix": [4, 3], "x": 3, "y": 4}
]
},
"LAYOUT_numpad_5x4": {
"layout": [
{"label": "K00 (F5,F4)", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "K01 (F5,F6)", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "K02 (F5,B1)", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "K03 (F5,B2)", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "K10 (F7,F4)", "matrix": [1, 0], "x": 0, "y": 1},
{"label": "K11 (F7,F6)", "matrix": [1, 1], "x": 1, "y": 1},
{"label": "K12 (F7,B1)", "matrix": [1, 2], "x": 2, "y": 1},
{"label": "K20 (B3,F4)", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "K21 (B3,F6)", "matrix": [2, 1], "x": 1, "y": 2},
{"label": "K22 (B3,B1)", "matrix": [2, 2], "x": 2, "y": 2},
{"label": "K23 (B3,B2)", "matrix": [2, 3], "x": 3, "y": 1, "h": 2},
{"label": "K30 (B6,F4)", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "K31 (B6,F6)", "matrix": [3, 1], "x": 1, "y": 3},
{"label": "K32 (B6,B1)", "matrix": [3, 2], "x": 2, "y": 3},
{"label": "K40 (B5,F4)", "matrix": [4, 0], "x": 0, "y": 4, "w": 2},
{"label": "K42 (B5,B1)", "matrix": [4, 2], "x": 2, "y": 4}
{"label": "K43 (B5,B2)", "matrix": [4, 3], "x": 3, "y": 3, "h": 2},
]
}
}
}

View File

@@ -0,0 +1,27 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┬───┬───┬───┐
* │ 1 │ 2 │ 3 │ 4 │
* ├───┼───┼───┼───┤
* │ 5 │ 6 │ 7 │ 8 │
* ├───┼───┼───┼───┤
* │ Q │ W │ E │ R │
* ├───┼───┼───┼───┤
* │ A │ S │ D │ F │
* ├───┼───┼───┼───┤
* │ Z │ X │ C │ V │
* └───────┴───┴───┘
*/
[0] = LAYOUT_ortho_5x4(
KC_P1, KC_P2, KC_P3, KC_P4,
KC_P5, KC_P6, KC_P7, KC_P8,
KC_Q, KC_W, KC_E, KC_R,
KC_A, KC_S, KC_D, KC_F,
KC_Z, KC_X, KC_C, KC_V
),
};

View File

@@ -0,0 +1,48 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┬───┬───┬───┐
* │TG1│ / │ * │ - │
* ├───┼───┼───┼───┤
* │ 7 │ 8 │ 9 │ │
* ├───┼───┼───┤ + │
* │ 4 │ 5 │ 6 │ │
* ├───┼───┼───┼───┤
* │ 1 │ 2 │ 3 │ │
* ├───┴───┼───┤Ent│
* │ 0 │ . │ │
* └───────┴───┴───┘
*/
[0] = LAYOUT_numpad_5x4(
TG(1), KC_PSLS, KC_PAST, KC_PMNS,
KC_P7, KC_P8, KC_P9,
KC_P4, KC_P5, KC_P6, KC_PPLS,
KC_P1, KC_P2, KC_P3,
KC_P0, KC_PDOT, KC_PENT
),
/*
* ┌───┬───┬───┬───┐
* │TG1│ / │ * │ - │
* ┌───┬───┬───┐───┤
* │Hom│ ↑ │PgU│ │
* ├───┼───┼───┤ + │
* │ ← │ │ → │ │
* ├───┼───┼───┤───┤
* │End│ ↓ │PgD│ │
* ├───┴───┼───┤Ent│
* │Insert │Del│ │
* └───────┴───┘───┘
*/
[1] = LAYOUT_numpad_5x4(
_______, _______, _______, _______,
KC_HOME, KC_UP, KC_PGUP,
KC_LEFT, XXXXXXX, KC_RGHT, _______,
KC_END, KC_DOWN, KC_PGDN,
KC_INS, KC_DEL, _______
)
};

View File

@@ -0,0 +1,27 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┬───┬───┬───┐
* │ 1 │ 2 │ 3 │ 4 │
* ├───┼───┼───┼───┤
* │ 5 │ 6 │ 7 │ 8 │
* ├───┼───┼───┼───┤
* │ Q │ W │ E │ R │
* ├───┼───┼───┼───┤
* │ A │ S │ D │ F │
* ├───┼───┼───┼───┤
* │ Z │ X │ C │ V │
* └───────┴───┴───┘
*/
[0] = LAYOUT_ortho_5x4(
KC_P1, KC_P2, KC_P3, KC_P4,
KC_P5, KC_P6, KC_P7, KC_P8,
KC_Q, KC_W, KC_E, KC_R,
KC_A, KC_S, KC_D, KC_F,
KC_Z, KC_X, KC_C, KC_V
),
};

View File

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

View File

@@ -0,0 +1,41 @@
# AlhenKB - Macropad 5x4 and Numpad
![Imgur Image](https://imgur.com/t7Zi2w3h.jpg)
![Imgur Image](https://i.imgur.com/5xlKJlBh.jpg)
A macropad 5x4 for MerryPCB.
* Keyboard Maintainer: [Alhen](https://github.com/alhenx)
* Hardware Supported: MerryPCB
Make example for this keyboard (after setting up your build environment):
Macropad:
make alhenkb/macropad5x4:default
Numpad:
make alhenkb/macropad5x4:numpad
Flashing example for this keyboard:
Macropad:
make alhenkb/macropad5x4:default:flash
Numpad:
make alhenkb/macropad5x4:numpad:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

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

View File

@@ -20,10 +20,10 @@
#define EE_HANDS
/* define pins */
#define MATRIX_ROW_PINS { F6, F5, F4, B6, D3 }
#define MATRIX_COL_PINS { B5, B4, D7, D6, F0, F1, C6 }
#define MATRIX_ROW_PINS_RIGHT { D6, D7, B4, F7, E6 }
#define MATRIX_COL_PINS_RIGHT { B1, B2, B3, F1, F4, F5, F6 }
#define MATRIX_ROW_PINS { F4, F5, F6, D3, C6 }
#define MATRIX_COL_PINS { D7, B4, B5, B6, F0, D4, D6 }
#define MATRIX_ROW_PINS_RIGHT { F5, F1, B2, B1, C6 }
#define MATRIX_COL_PINS_RIGHT { B6, B5, D6, D5, D3, D7, B4 }
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW

View File

@@ -21,24 +21,16 @@ enum custom_layers {
_LOWER,
_UPPER,
_MOUSE,
_MEDIA,
_MEDIA,
};
#define MD_SPC MT(MOD_LSFT, KC_SPC)
#define MD_ENT MT(MOD_RALT, KC_ENT)
#define LT_SPC LT(_LOWER, KC_SPC)
enum custom_keycodes {
QWERTY = SAFE_RANGE,
LOWER,
UPPER,
MOUSE,
MEDIA,
KC_CTB,
KC_CSTB,
KC_QUIT,
KC_CTLW,
KC_CTLT,
KC_CST
MEDIA
};
/*
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05,
@@ -75,7 +67,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS,
// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
UPPER, KC_HOME, MOUSE, KC_RALT, KC_LCTL, MD_SPC, KC_LALT, KC_ENT, KC_BSPC, LOWER, KC_DEL, KC_INS, KC_END, MEDIA
TG(MOUSE), KC_HOME, MO(UPPER),KC_RALT, KC_LCTL, MD_SPC, KC_LALT, KC_ENT, KC_BSPC, MO(LOWER), KC_DEL, KC_INS, KC_END, MO(MEDIA)
// └────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
),
@@ -85,7 +77,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, _______, KC_UP, KC_LBRC, KC_RBRC, KC_F12,
// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT,_______, _______,
_______, _______, KC_LCTL, KC_RCTL, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT,_______, _______,
// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
@@ -111,9 +103,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, KC_WH_U, KC_MS_U, _______, _______, _______,
_______, _______, _______, _______, _______, _______, KC_CAPS, KC_WH_U, KC_MS_U, _______, _______, _______,
// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN2, KC_BTN3,
_______, KC_NUM, KC_BTN3, KC_BTN2, KC_BTN1, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN2, KC_BTN3,
// ├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, KC_WH_D, KC_BTN2, _______, _______, _______,
// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
@@ -136,88 +128,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
// Automatically sets the numlock on at startup
void led_set_keymap(uint8_t usb_led) {
if (!(usb_led & (1<<USB_LED_NUM_LOCK))) {
tap_code(KC_NUM_LOCK);
}
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
set_single_persistent_default_layer(_QWERTY);
}
return false;
case LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
} else {
layer_off(_LOWER);
}
return false;
case UPPER:
if(record->event.pressed) {
layer_on(_UPPER);
} else {
layer_off(_UPPER);
}
return false;
case MOUSE:
if (record->event.pressed) {
layer_on(_MOUSE);
} else {
layer_off(_MOUSE);
}
return false;
case MEDIA:
if(record->event.pressed) {
layer_on(_MEDIA);
} else {
layer_off(_MEDIA);
}
return false;
case KC_CTB:
if(record->event.pressed) {
tap_code16(C(KC_TAB));
}
return false;
case KC_CSTB:
if(record->event.pressed) {
tap_code16(C(S(KC_TAB)));
}
return false;
case KC_QUIT:
if(record->event.pressed) {
tap_code16(A(KC_F4));
}
return false;
case KC_CTLW:
if(record->event.pressed) {
tap_code16(C(KC_W));
}
return false;
case KC_CTLT:
if(record->event.pressed) {
tap_code16(C(KC_T));
}
return false;
case KC_CST:
if(record->event.pressed) {
tap_code16(C(S(KC_T)));
}
return false;
case KC_ENT:
if(record->event.pressed) {
if(get_mods() & MOD_BIT(KC_LSFT)){
tap_code(KC_SPC);
}
else {
tap_code(KC_ENT);
}
}
return false;
}
return true;
//nano to manibus communcation
bool led_update_user(led_t state) {
if (state.caps_lock != layer_state_is(_MOUSE)) {
layer_invert(_MOUSE);
}
return true;
}

14
keyboards/budgy/config.h Normal file
View File

@@ -0,0 +1,14 @@
// Copyright 2022 KeyboardDweebs (@doesntfazer)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
#define SERIAL_USART_FULL_DUPLEX
#define SERIAL_USART_TX_PIN GP1
#define SERIAL_USART_RX_PIN GP0
// #define SERIAL_USART_PIN_SWAP

81
keyboards/budgy/info.json Normal file
View File

@@ -0,0 +1,81 @@
{
"manufacturer": "KeyboardDweebs",
"keyboard_name": "budgy",
"maintainer": "doesntfazer",
"bootloader": "rp2040",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"processor": "RP2040",
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0117",
"vid": "0xFABE"
},
"matrix_pins": {
"direct": [
["GP6", "GP5", "GP4", "GP3", "GP2"],
["GP11", "GP10", "GP9", "GP8", "GP7"],
["GP15", "GP14", "GP13", "GP12", "GP16"],
["GP17", "GP18", null, null, null]
]
},
"split": {
"matrix_pins": {
"right": {
"direct": [
["GP2", "GP3", "GP4", "GP5", "GP6"],
["GP7", "GP8", "GP9", "GP10", "GP11"],
["GP16", "GP12", "GP13", "GP14", "GP15"],
["GP18", "GP17", null, null, null]
]
}
}
},
"layouts": {
"LAYOUT_split_3x5_2": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0.25 },
{ "matrix": [0, 1], "x": 1, "y": 0.25 },
{ "matrix": [0, 2], "x": 2, "y": 0.125 },
{ "matrix": [0, 3], "x": 3, "y": 0 },
{ "matrix": [0, 4], "x": 4, "y": 0.125 },
{ "matrix": [4, 0], "x": 8, "y": 0.25 },
{ "matrix": [4, 1], "x": 9, "y": 0.125 },
{ "matrix": [4, 2], "x": 10, "y": 0 },
{ "matrix": [4, 3], "x": 11, "y": 0.125 },
{ "matrix": [4, 4], "x": 12, "y": 0.25 },
{ "matrix": [1, 0], "x": 0, "y": 1.25 },
{ "matrix": [1, 1], "x": 1, "y": 1.25 },
{ "matrix": [1, 2], "x": 2, "y": 1.125 },
{ "matrix": [1, 3], "x": 3, "y": 1 },
{ "matrix": [1, 4], "x": 4, "y": 1.125 },
{ "matrix": [5, 0], "x": 8, "y": 1.25 },
{ "matrix": [5, 1], "x": 9, "y": 1.125 },
{ "matrix": [5, 2], "x": 10, "y": 1 },
{ "matrix": [5, 3], "x": 11, "y": 1.125 },
{ "matrix": [5, 4], "x": 12, "y": 1.25 },
{ "matrix": [2, 0], "x": 0, "y": 2.25 },
{ "matrix": [2, 1], "x": 1, "y": 2.25 },
{ "matrix": [2, 2], "x": 2, "y": 2.125 },
{ "matrix": [2, 3], "x": 3, "y": 2 },
{ "matrix": [2, 4], "x": 4, "y": 2.125 },
{ "matrix": [6, 0], "x": 8, "y": 2.25 },
{ "matrix": [6, 1], "x": 9, "y": 2.125 },
{ "matrix": [6, 2], "x": 10, "y": 2 },
{ "matrix": [6, 3], "x": 11, "y": 2.125 },
{ "matrix": [6, 4], "x": 12, "y": 2.25 },
{ "matrix": [3, 0], "x": 3.5, "y": 3.25 },
{ "matrix": [3, 1], "x": 4.5, "y": 3.5 },
{ "matrix": [7, 0], "x": 7.5, "y": 3.75 },
{ "matrix": [7, 1], "x": 8.5, "y": 3.5 }
]
}
}
}

View File

@@ -0,0 +1,25 @@
// Copyright 2021 Keyboard Dweebs (@doesntfazer)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
* │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ Z │ X │ C │ V │ B │ │ N │ M │ , │ . │ / │
* └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
* ┌───┐ ┌───┐
* │Bsp├───┐ ┌───┤Ent│
* └───┤Tab│ │Spc├───┘
* └───┘ └───┘
*/
[0] = LAYOUT_split_3x5_2(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_BSPC, KC_TAB, KC_SPC, KC_ENT
)
};

27
keyboards/budgy/readme.md Normal file
View File

@@ -0,0 +1,27 @@
# budgy
![budgy](https://i.imgur.com/6kjxmSMh.jpeg)
34 key, diodeless, RP2040 based, budget keyboard.
* Keyboard Maintainer: [KeyboardDweebs](https://github.com/doesntfazer)
* Hardware Supported: Raspberry Pi Pico
* Hardware Availability: [Github Page](https://github.com/doesntfazer/Budgy) Buy Directly from [Keyboard Dweebs](https://keyboarddweebs.net/)
Make example for this keyboard (after setting up your build environment):
make budgy:default
Flashing example for this keyboard:
make budgy:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

2
keyboards/budgy/rules.mk Normal file
View File

@@ -0,0 +1,2 @@
SPLIT_KEYBOARD = yes
SERIAL_DRIVER = vendor

View File

@@ -0,0 +1,56 @@
{
"manufacturer": "ButterKeebs",
"keyboard_name": "PocketPad",
"maintainer": "qmk",
"diode_direction": "ROW2COL",
"usb": {
"device_version": "1.0.0",
"pid": "0x1475",
"vid": "0xFEED"
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["F1", "C7", "D5", "B7"],
"rows": ["F7", "F6", "F5", "F4", "B1"]
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"layouts": {
"LAYOUT": {
"layout": [
{"x": 0, "y": 0, "matrix": [0,0]},
{"x": 1, "y": 0, "matrix": [0,1]},
{"x": 2, "y": 0, "matrix": [0,2]},
{"x": 3, "y": 0, "matrix": [0,3]},
{"x": 0, "y": 1, "matrix": [1,0]},
{"x": 1, "y": 1, "matrix": [1,1]},
{"x": 2, "y": 1, "matrix": [1,2]},
{"x": 3, "y": 1, "matrix": [1,3]},
{"x": 0, "y": 2, "matrix": [2,0]},
{"x": 1, "y": 2, "matrix": [2,1]},
{"x": 2, "y": 2, "matrix": [2,2]},
{"x": 3, "y": 2, "matrix": [2,3]},
{"x": 0, "y": 3, "matrix": [3,0]},
{"x": 1, "y": 3, "matrix": [3,1]},
{"x": 2, "y": 3, "matrix": [3,2]},
{"x": 3, "y": 3, "matrix": [3,3]},
{"x": 0, "y": 4, "matrix": [4,0]},
{"x": 1, "y": 4, "matrix": [4,1]}
]
}
}
}

View File

@@ -0,0 +1,14 @@
// ButterKeebs <butterkeebs@github>
// SPDX-License-Identifier: GPL-2.0+
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LAYOUT(
KC_NUM_LOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,
KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS,
KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_ENTER,
KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_DOT,
KC_F, KC_KP_0)
};

View File

@@ -0,0 +1,27 @@
# PocketPad
![PocketPad](https://tinyurl.com/2hffvnvb)
*The PocketPad is a tiny 18 key macropad/numpad using 6mm tactile switches.*
* Keyboard Maintainer: [ButterKeebs](https://github.com/butterkeebs)
* Hardware Supported: *Supports current V1.0.0 PocketPad PCB and Elite C / pin compatible MCU boards.*
* Hardware Availability: *Currently not for sale*
Make example for this keyboard (after setting up your build environment):
make butterkeebs/pocketpad:default
Flashing example for this keyboard:
make butterkeebs/pocketpad:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB. (Not available on Revision 1.0.0 PCB)
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

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

View File

@@ -0,0 +1,18 @@
// Copyright 2022 Andrew Kannan (@awkannan)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define BACKLIGHT_PWM_DRIVER PWMD3
#define BACKLIGHT_PWM_CHANNEL 1
#define BACKLIGHT_PAL_MODE 1
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
#define WS2812_SPI SPID2
#define WS2812_SPI_MOSI_PAL_MODE 0
#define WS2812_SPI_SCK_PAL_MODE 0
#define WS2812_SPI_SCK_PIN B13

View File

@@ -0,0 +1,29 @@
/* Copyright 2020 QMK
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* This file was auto-generated by:
* `qmk chibios-confmigrate -i keyboards/cannonkeys/devastatingtkl/halconf.h -r platforms/chibios/common/configs/halconf.h`
*/
#pragma once
#define HAL_USE_PWM TRUE
#define HAL_USE_SPI TRUE
#include_next <halconf.h>

View File

@@ -0,0 +1,150 @@
{
"keyboard_name": "Ripple",
"manufacturer": "CannonKeys",
"url": "https://cannonkeys.com",
"maintainer": "awkannan",
"usb": {
"vid": "0xCA04",
"pid": "0x0025",
"device_version": "0.0.1"
},
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["B1", "B2", "B10", "B11", "B12", "B14", "A8", "A9", "A10", "A3", "B0", "A2", "A1", "A7", "A0", "B4", "B6", "B7"],
"rows": ["A15", "B3", "B5", "A4", "A5", "F1"]
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"backlight": true,
"rgblight": true
},
"rgblight": {
"led_count": 20,
"pin": "B15",
"hue_steps": 17,
"saturation_steps": 17,
"brightness_steps": 17,
"animations": {
"static_gradient": true,
"twinkle": true,
"rainbow_mood": true,
"rainbow_swirl": true
}
},
"backlight": {
"pin": "A6",
"levels": 15,
"breathing": true,
"breathing_period": 5
},
"indicators": {
"caps_lock": "B9",
"scroll_lock": "F0",
"on_state": 0
},
"processor": "STM32F072",
"bootloader": "stm32-dfu",
"layouts": {
"LAYOUT": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1.25, "y": 0 },
{ "matrix": [0, 2], "x": 2.25, "y": 0 },
{ "matrix": [0, 3], "x": 3.25, "y": 0 },
{ "matrix": [0, 4], "x": 4.25, "y": 0 },
{ "matrix": [0, 5], "x": 5.5, "y": 0 },
{ "matrix": [0, 6], "x": 6.5, "y": 0 },
{ "matrix": [0, 7], "x": 7.5, "y": 0 },
{ "matrix": [0, 8], "x": 8.5, "y": 0 },
{ "matrix": [0, 9], "x": 9.75, "y": 0 },
{ "matrix": [0, 10], "x": 10.75, "y": 0 },
{ "matrix": [0, 11], "x": 11.75, "y": 0 },
{ "matrix": [0, 12], "x": 12.75, "y": 0 },
{ "matrix": [0, 14], "x": 14, "y": 0 },
{ "matrix": [0, 15], "x": 15.25, "y": 0 },
{ "matrix": [0, 16], "x": 16.25, "y": 0 },
{ "matrix": [0, 17], "x": 17.25, "y": 0 },
{ "matrix": [1, 0], "x": 0, "y": 1.25 },
{ "matrix": [1, 1], "x": 1, "y": 1.25 },
{ "matrix": [1, 2], "x": 2, "y": 1.25 },
{ "matrix": [1, 3], "x": 3, "y": 1.25 },
{ "matrix": [1, 4], "x": 4, "y": 1.25 },
{ "matrix": [1, 5], "x": 5, "y": 1.25 },
{ "matrix": [1, 6], "x": 6, "y": 1.25 },
{ "matrix": [1, 7], "x": 7, "y": 1.25 },
{ "matrix": [1, 8], "x": 8, "y": 1.25 },
{ "matrix": [1, 9], "x": 9, "y": 1.25 },
{ "matrix": [1, 10], "x": 10, "y": 1.25 },
{ "matrix": [1, 11], "x": 11, "y": 1.25 },
{ "matrix": [1, 12], "x": 12, "y": 1.25 },
{ "matrix": [1, 13], "x": 13, "y": 1.25 },
{ "matrix": [1, 14], "x": 14, "y": 1.25 },
{ "matrix": [1, 15], "x": 15.25, "y": 1.25 },
{ "matrix": [1, 16], "x": 16.25, "y": 1.25 },
{ "matrix": [1, 17], "x": 17.25, "y": 1.25 },
{ "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
{ "matrix": [2, 1], "x": 1.5, "y": 2.25 },
{ "matrix": [2, 2], "x": 2.5, "y": 2.25 },
{ "matrix": [2, 3], "x": 3.5, "y": 2.25 },
{ "matrix": [2, 4], "x": 4.5, "y": 2.25 },
{ "matrix": [2, 5], "x": 5.5, "y": 2.25 },
{ "matrix": [2, 6], "x": 6.5, "y": 2.25 },
{ "matrix": [2, 7], "x": 7.5, "y": 2.25 },
{ "matrix": [2, 8], "x": 8.5, "y": 2.25 },
{ "matrix": [2, 9], "x": 9.5, "y": 2.25 },
{ "matrix": [2, 10], "x": 10.5, "y": 2.25 },
{ "matrix": [2, 11], "x": 11.5, "y": 2.25 },
{ "matrix": [2, 12], "x": 12.5, "y": 2.25 },
{ "matrix": [2, 14], "w": 1.5, "x": 13.5, "y": 2.25 },
{ "matrix": [2, 15], "x": 15.25, "y": 2.25 },
{ "matrix": [2, 16], "x": 16.25, "y": 2.25 },
{ "matrix": [2, 17], "x": 17.25, "y": 2.25 },
{ "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
{ "matrix": [3, 1], "x": 1.75, "y": 3.25 },
{ "matrix": [3, 2], "x": 2.75, "y": 3.25 },
{ "matrix": [3, 3], "x": 3.75, "y": 3.25 },
{ "matrix": [3, 4], "x": 4.75, "y": 3.25 },
{ "matrix": [3, 5], "x": 5.75, "y": 3.25 },
{ "matrix": [3, 6], "x": 6.75, "y": 3.25 },
{ "matrix": [3, 7], "x": 7.75, "y": 3.25 },
{ "matrix": [3, 8], "x": 8.75, "y": 3.25 },
{ "matrix": [3, 9], "x": 9.75, "y": 3.25 },
{ "matrix": [3, 10], "x": 10.75, "y": 3.25 },
{ "matrix": [3, 11], "x": 11.75, "y": 3.25 },
{ "matrix": [3, 12], "x": 12.75, "y": 3.25 },
{ "matrix": [3, 14], "w": 1.25, "x": 13.75, "y": 3.25 },
{ "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.25 },
{ "matrix": [4, 1], "x": 1.25, "y": 4.25 },
{ "matrix": [4, 2], "x": 2.25, "y": 4.25 },
{ "matrix": [4, 3], "x": 3.25, "y": 4.25 },
{ "matrix": [4, 4], "x": 4.25, "y": 4.25 },
{ "matrix": [4, 5], "x": 5.25, "y": 4.25 },
{ "matrix": [4, 6], "x": 6.25, "y": 4.25 },
{ "matrix": [4, 7], "x": 7.25, "y": 4.25 },
{ "matrix": [4, 8], "x": 8.25, "y": 4.25 },
{ "matrix": [4, 9], "x": 9.25, "y": 4.25 },
{ "matrix": [4, 10], "x": 10.25, "y": 4.25 },
{ "matrix": [4, 11], "x": 11.25, "y": 4.25 },
{ "matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 4.25 },
{ "matrix": [4, 14], "x": 14, "y": 4.25 },
{ "matrix": [4, 16], "x": 16.25, "y": 4.25 },
{ "matrix": [5, 0], "w": 1.25, "x": 0, "y": 5.25 },
{ "matrix": [5, 1], "w": 1.25, "x": 1.25, "y": 5.25 },
{ "matrix": [5, 2], "w": 1.25, "x": 2.5, "y": 5.25 },
{ "matrix": [5, 6], "w": 6.25, "x": 3.75, "y": 5.25 },
{ "matrix": [5, 10], "w": 1.25, "x": 10, "y": 5.25 },
{ "matrix": [5, 11], "w": 1.25, "x": 11.25, "y": 5.25 },
{ "matrix": [5, 12], "w": 1.25, "x": 12.5, "y": 5.25 },
{ "matrix": [5, 14], "w": 1.25, "x": 13.75, "y": 5.25 },
{ "matrix": [5, 15], "x": 15.25, "y": 5.25 },
{ "matrix": [5, 16], "x": 16.25, "y": 5.25 },
{ "matrix": [5, 17], "x": 17.25, "y": 5.25 }
]
}
}
}

View File

@@ -0,0 +1,41 @@
/*
Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum layer_names {
_BASE,
_FN1
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPLY, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[_FN1] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, BL_TOGG, BL_DOWN, BL_UP,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
};

View File

@@ -0,0 +1,59 @@
/*
Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum layer_names {
_BASE,
_FN1,
_FN2,
_FN3
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPLY, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[_FN1] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, BL_TOGG, BL_DOWN, BL_UP,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[_FN2] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[_FN3] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
};

View File

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

View File

@@ -0,0 +1,31 @@
/* Copyright 2020 QMK
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* This file was auto-generated by:
* `qmk chibios-confmigrate -i keyboards/cannonkeys/devastatingtkl/mcuconf.h -r platforms/chibios/GENERIC_STM32_F072XB/configs/mcuconf.h`
*/
#pragma once
#include_next <mcuconf.h>
#undef STM32_PWM_USE_TIM3
#define STM32_PWM_USE_TIM3 TRUE
#undef STM32_SPI_USE_SPI2
#define STM32_SPI_USE_SPI2 TRUE

View File

@@ -0,0 +1,24 @@
# CannonKeys Ripple
Ripple Keyboard by Upas
* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
* Hardware Supported: STM32F072CBT6
Make example for this keyboard (after setting up your build environment):
make cannonkeys/ripple:default
Flashing example for this keyboard:
make cannonkeys/ripple:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Toggle the switch on the back of the pcb to "1" and briefly press the button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -0,0 +1,7 @@
# Wildcard to allow APM32 MCU
DFU_SUFFIX_ARGS = -v FFFF -p FFFF
WS2812_DRIVER = spi
# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE

View File

@@ -0,0 +1,125 @@
{
"keyboard_name": "Ripple HS",
"manufacturer": "CannonKeys",
"url": "https://cannonkeys.com",
"maintainer": "awkannan",
"usb": {
"vid": "0xCA04",
"pid": "0x0026",
"device_version": "0.0.1"
},
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["B1", "B2", "B10", "B11", "B12", "B14", "A8", "A9", "A10", "A3", "B0", "A2", "A1", "A7", "A0", "B4", "B6", "B7"],
"rows": ["A15", "B3", "B5", "A4", "A5", "F1"]
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"indicators": {
"caps_lock": "B9",
"scroll_lock": "F0",
"on_state": 0
},
"processor": "STM32F072",
"bootloader": "stm32-dfu",
"community_layouts": [ "tkl_f13_ansi_tsangan" ],
"layouts": {
"LAYOUT_tkl_f13_ansi_tsangan": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1.25, "y": 0 },
{ "matrix": [0, 2], "x": 2.25, "y": 0 },
{ "matrix": [0, 3], "x": 3.25, "y": 0 },
{ "matrix": [0, 4], "x": 4.25, "y": 0 },
{ "matrix": [0, 5], "x": 5.5, "y": 0 },
{ "matrix": [0, 6], "x": 6.5, "y": 0 },
{ "matrix": [0, 7], "x": 7.5, "y": 0 },
{ "matrix": [0, 8], "x": 8.5, "y": 0 },
{ "matrix": [0, 9], "x": 9.75, "y": 0 },
{ "matrix": [0, 10], "x": 10.75, "y": 0 },
{ "matrix": [0, 11], "x": 11.75, "y": 0 },
{ "matrix": [0, 12], "x": 12.75, "y": 0 },
{ "matrix": [0, 14], "x": 14, "y": 0 },
{ "matrix": [0, 15], "x": 15.25, "y": 0 },
{ "matrix": [0, 16], "x": 16.25, "y": 0 },
{ "matrix": [0, 17], "x": 17.25, "y": 0 },
{ "matrix": [1, 0], "x": 0, "y": 1.25 },
{ "matrix": [1, 1], "x": 1, "y": 1.25 },
{ "matrix": [1, 2], "x": 2, "y": 1.25 },
{ "matrix": [1, 3], "x": 3, "y": 1.25 },
{ "matrix": [1, 4], "x": 4, "y": 1.25 },
{ "matrix": [1, 5], "x": 5, "y": 1.25 },
{ "matrix": [1, 6], "x": 6, "y": 1.25 },
{ "matrix": [1, 7], "x": 7, "y": 1.25 },
{ "matrix": [1, 8], "x": 8, "y": 1.25 },
{ "matrix": [1, 9], "x": 9, "y": 1.25 },
{ "matrix": [1, 10], "x": 10, "y": 1.25 },
{ "matrix": [1, 11], "x": 11, "y": 1.25 },
{ "matrix": [1, 12], "x": 12, "y": 1.25 },
{ "matrix": [1, 14], "w": 2, "x": 13, "y": 1.25 },
{ "matrix": [1, 15], "x": 15.25, "y": 1.25 },
{ "matrix": [1, 16], "x": 16.25, "y": 1.25 },
{ "matrix": [1, 17], "x": 17.25, "y": 1.25 },
{ "matrix": [2, 0], "w": 1.5, "x": 0, "y": 2.25 },
{ "matrix": [2, 1], "x": 1.5, "y": 2.25 },
{ "matrix": [2, 2], "x": 2.5, "y": 2.25 },
{ "matrix": [2, 3], "x": 3.5, "y": 2.25 },
{ "matrix": [2, 4], "x": 4.5, "y": 2.25 },
{ "matrix": [2, 5], "x": 5.5, "y": 2.25 },
{ "matrix": [2, 6], "x": 6.5, "y": 2.25 },
{ "matrix": [2, 7], "x": 7.5, "y": 2.25 },
{ "matrix": [2, 8], "x": 8.5, "y": 2.25 },
{ "matrix": [2, 9], "x": 9.5, "y": 2.25 },
{ "matrix": [2, 10], "x": 10.5, "y": 2.25 },
{ "matrix": [2, 11], "x": 11.5, "y": 2.25 },
{ "matrix": [2, 12], "x": 12.5, "y": 2.25 },
{ "matrix": [2, 14], "w": 1.5, "x": 13.5, "y": 2.25 },
{ "matrix": [2, 15], "x": 15.25, "y": 2.25 },
{ "matrix": [2, 16], "x": 16.25, "y": 2.25 },
{ "matrix": [2, 17], "x": 17.25, "y": 2.25 },
{ "matrix": [3, 0], "w": 1.75, "x": 0, "y": 3.25 },
{ "matrix": [3, 1], "x": 1.75, "y": 3.25 },
{ "matrix": [3, 2], "x": 2.75, "y": 3.25 },
{ "matrix": [3, 3], "x": 3.75, "y": 3.25 },
{ "matrix": [3, 4], "x": 4.75, "y": 3.25 },
{ "matrix": [3, 5], "x": 5.75, "y": 3.25 },
{ "matrix": [3, 6], "x": 6.75, "y": 3.25 },
{ "matrix": [3, 7], "x": 7.75, "y": 3.25 },
{ "matrix": [3, 8], "x": 8.75, "y": 3.25 },
{ "matrix": [3, 9], "x": 9.75, "y": 3.25 },
{ "matrix": [3, 10], "x": 10.75, "y": 3.25 },
{ "matrix": [3, 11], "x": 11.75, "y": 3.25 },
{ "matrix": [3, 14], "w": 2.25, "x": 12.75, "y": 3.25 },
{ "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.25 },
{ "matrix": [4, 2], "x": 2.25, "y": 4.25 },
{ "matrix": [4, 3], "x": 3.25, "y": 4.25 },
{ "matrix": [4, 4], "x": 4.25, "y": 4.25 },
{ "matrix": [4, 5], "x": 5.25, "y": 4.25 },
{ "matrix": [4, 6], "x": 6.25, "y": 4.25 },
{ "matrix": [4, 7], "x": 7.25, "y": 4.25 },
{ "matrix": [4, 8], "x": 8.25, "y": 4.25 },
{ "matrix": [4, 9], "x": 9.25, "y": 4.25 },
{ "matrix": [4, 10], "x": 10.25, "y": 4.25 },
{ "matrix": [4, 11], "x": 11.25, "y": 4.25 },
{ "matrix": [4, 12], "w": 2.75, "x": 12.25, "y": 4.25 },
{ "matrix": [4, 16], "x": 16.25, "y": 4.25 },
{ "matrix": [5, 0], "w": 1.5, "x": 0, "y": 5.25 },
{ "matrix": [5, 1], "x": 1.5, "y": 5.25 },
{ "matrix": [5, 2], "w": 1.5, "x": 2.5, "y": 5.25 },
{ "matrix": [5, 6], "w": 7, "x": 4, "y": 5.25 },
{ "matrix": [5, 11], "w": 1.5, "x": 11, "y": 5.25 },
{ "matrix": [5, 12], "x": 12.5, "y": 5.25 },
{ "matrix": [5, 14], "w": 1.5, "x": 13.5, "y": 5.25 },
{ "matrix": [5, 15], "x": 15.25, "y": 5.25 },
{ "matrix": [5, 16], "x": 16.25, "y": 5.25 },
{ "matrix": [5, 17], "x": 17.25, "y": 5.25 }
]
}
}
}

View File

@@ -0,0 +1,41 @@
/*
Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum layer_names {
_BASE,
_FN1
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_tkl_f13_ansi_tsangan(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPLY, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[_FN1] = LAYOUT_tkl_f13_ansi_tsangan(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, BL_TOGG, BL_DOWN, BL_UP,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
};

View File

@@ -0,0 +1,59 @@
/*
Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum layer_names {
_BASE,
_FN1,
_FN2,
_FN3
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_tkl_f13_ansi_tsangan(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPLY, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[_FN1] = LAYOUT_tkl_f13_ansi_tsangan(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, BL_TOGG, BL_DOWN, BL_UP,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[_FN2] = LAYOUT_tkl_f13_ansi_tsangan(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[_FN3] = LAYOUT_tkl_f13_ansi_tsangan(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
};

View File

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

View File

@@ -0,0 +1,24 @@
# CannonKeys Ripple HS
Ripple Keyboard by Upas
* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
* Hardware Supported: STM32F072CBT6
Make example for this keyboard (after setting up your build environment):
make cannonkeys/ripple_hs:default
Flashing example for this keyboard:
make cannonkeys/ripple_hs:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the top left key and plug in the keyboard
* **Physical reset button**: Toggle the switch on the back of the pcb to "1" and briefly press the button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available. In the pre-supplied keymaps it is on the second layer, replacing the R key.

View File

@@ -0,0 +1,5 @@
# Wildcard to allow APM32 MCU
DFU_SUFFIX_ARGS = -v FFFF -p FFFF
# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE

View File

@@ -1,4 +1,4 @@
/* Copyright 2021 HorrorTroll <https://github.com/HorrorTroll>
/* Copyright 2023 Citrus Lab
*
* 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
@@ -13,13 +13,11 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "led/rainbow_reactive_simple/rainbow_reactive_simple.h"
// The pin connected to the data pin of the LEDs
#define RGBLIGHT_LAYERS//允许您定义可打开或关闭的照明层。非常适合显示当前键盘层或大写锁定状态。
#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF//如果已定义,则即使 RGB 光源处于关闭状态,也会显示照明图层。
static HSV RAINBOW_REACTIVE_SIMPLE_math(HSV hsv, uint8_t i, uint8_t time, uint16_t offset) {
hsv.h = g_led_config.point[i].x - time;
hsv.v = scale8(255 - offset, hsv.v);
return hsv;
}
bool RAINBOW_REACTIVE_SIMPLE(effect_params_t* params) { return effect_rainbow_reactive(params, &RAINBOW_REACTIVE_SIMPLE_math); }
#define LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE//尝试使开关状态与键盘指示灯状态保持一致

View File

@@ -0,0 +1,28 @@
/* Copyright 2023 Citrus Lab
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
//Indicator light function
bool led_update_kb(led_t led_state) {
if (led_update_user(led_state)) {
if (led_state.caps_lock) {
rgblight_setrgb_at(255, 255, 255, 0); //white
} else {
rgblight_setrgb_at(0, 0, 0, 0);
}
}
return true;
}

View File

@@ -0,0 +1,109 @@
{
"keyboard_name": "Erdnuss65",
"manufacturer": "Citrus Lab",
"processor": "STM32F103",
"bootloader": "stm32duino",
"maintainer": "ctt",
"usb": {
"vid": "0x636C",
"pid": "0x6374",
"device_version": "0.0.1"
},
"matrix_pins": {
"rows":
["B10","B1", "B0","A7","A6"],
"cols":
["B12","B14","B15","A8","B13","B3","B4","B5","A1","A2","A0","A3","A4","A5","B11"]
},
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"mousekey": true,
"extrakey": true,
"console": false,
"command": false,
"nkro": true,
"backlight": false,
"rgblight": true,
"audio": false
},
"rgblight": {
"pin": "A15",
"led_count": 1
},
"layouts": {
"LAYOUT": {
"layout": [
{"label": "ESC K00 (B10,B12)", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1 K01 (B10,B14)", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "2 K02 (B10,B15)", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "3 K03 (B10,A8)", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "4 K04 (B10,B13)", "matrix": [0, 4], "x": 4, "y": 0},
{"label": "5 K05 (B10,B3)", "matrix": [0, 5], "x": 5, "y": 0},
{"label": "6 K06 (B10,B4)", "matrix": [0, 6], "x": 6, "y": 0},
{"label": "7 K07 (B10,B5)", "matrix": [0, 7], "x": 7, "y": 0},
{"label": "8 K08 (B10,A1)", "matrix": [0, 8], "x": 8, "y": 0},
{"label": "9 K09 (B10,A2)", "matrix": [0, 9], "x": 9, "y": 0},
{"label": "0 K0A (B10,A0)", "matrix": [0, 10], "x": 10, "y": 0},
{"label": "- K0B (B10,A3)", "matrix": [0, 11], "x": 11, "y": 0},
{"label": "= K0C (B10,A4)", "matrix": [0, 12], "x": 12, "y": 0},
{"label": "BACKSPACE K0D (B10,A5)", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"label": "INS (B10,B11)", "matrix": [0, 14], "x": 15, "y": 0},
{"label": "TAB (B1,B12)", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"label": "Q (B1,B14)", "matrix": [1, 1], "x": 1.5, "y": 1},
{"label": "W (B1,B15)", "matrix": [1, 2], "x": 2.5, "y": 1},
{"label": "E (B1,A8)", "matrix": [1, 3], "x": 3.5, "y": 1},
{"label": "R (B1,B13)", "matrix": [1, 4], "x": 4.5, "y": 1},
{"label": "T (B1,B3)", "matrix": [1, 5], "x": 5.5, "y": 1},
{"label": "Y (B1,B4)", "matrix": [1, 6], "x": 6.5, "y": 1},
{"label": "U (B1,B5)", "matrix": [1, 7], "x": 7.5, "y": 1},
{"label": "I (B1,A1)", "matrix": [1, 8], "x": 8.5, "y": 1},
{"label": "O (B1,A2)", "matrix": [1, 9], "x": 9.5, "y": 1},
{"label": "P (B1,A0)", "matrix": [1, 10], "x": 10.5, "y": 1},
{"label": "[ (B1,A3)", "matrix": [1, 11], "x": 11.5, "y": 1},
{"label": "] (B1,A4)", "matrix": [1, 12], "x": 12.5, "y": 1},
{"label": "\" (B1,A5)", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"label": "DEL (B1,B11)", "matrix": [1, 14], "x": 15, "y": 1},
{"label": "CAPSLOCK (B0,B12)", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.25},
{"label": "A (B0,B14)", "matrix": [2, 1], "x": 1.75, "y": 2},
{"label": "S (B0,B15)", "matrix": [2, 2], "x": 2.75, "y": 2},
{"label": "D (B0,A8)", "matrix": [2, 3], "x": 3.75, "y": 2},
{"label": "F (B0,B13)", "matrix": [2, 4], "x": 4.75, "y": 2},
{"label": "G (B0,B3)", "matrix": [2, 5], "x": 5.75, "y": 2},
{"label": "H (B0,B4)", "matrix": [2, 6], "x": 6.75, "y": 2},
{"label": "J (B0,B5)", "matrix": [2, 7], "x": 7.75, "y": 2},
{"label": "K (B0,A1)", "matrix": [2, 8], "x": 8.75, "y": 2},
{"label": "L (B0,A2)", "matrix": [2, 9], "x": 9.75, "y": 2},
{"label": "; (B0,A0)", "matrix": [2, 10], "x": 10.75, "y": 2},
{"label": "' (B0,A3)", "matrix": [2, 11], "x": 11.75, "y": 2},
{"label": "ENTER (B0,A5)", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"label": "PGUP (B0,B11)", "matrix": [2, 14], "x": 15, "y": 2},
{"label": "LSHIFT (A7,B12)", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"label": "Z (A7,B14)", "matrix": [3, 1], "x": 2.25, "y": 3},
{"label": "X (A7,B15)", "matrix": [3, 2], "x": 3.25, "y": 3},
{"label": "C (A7,A8)", "matrix": [3, 3], "x": 4.25, "y": 3},
{"label": "V (A7,B13)", "matrix": [3, 4], "x": 5.25, "y": 3},
{"label": "B (A7,B3)", "matrix": [3, 5], "x": 6.25, "y": 3},
{"label": "N (A7,B4)", "matrix": [3, 6], "x": 7.25, "y": 3},
{"label": "M (A7,B5)", "matrix": [3, 7], "x": 8.25, "y": 3},
{"label": ", (A7,A1)", "matrix": [3, 8], "x": 9.25, "y": 3},
{"label": ". (A7,A2)", "matrix": [3, 9], "x": 10.25, "y": 3},
{"label": "/ (A7,A0)", "matrix": [3, 10], "x": 11.25, "y": 3},
{"label": "RSHIFT (A7,A4)", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"label": "UP (A7,A5)", "matrix": [3, 13], "x": 14, "y": 3},
{"label": "PGDN (A7,B11)", "matrix": [3, 14], "x": 15, "y": 3},
{"label": "LCTRL (A6,B12)", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"label": "WIN (A6,B14)", "matrix": [4, 1], "x": 1.5, "y": 4},
{"label": "ALT (A6,B15)", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"label": "SPACE (A6,A8)", "matrix": [4, 3], "x": 4, "y": 4, "w": 7},
{"label": "FN (A6,A0)", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
{"label": "LEFT (A6,A4)", "matrix": [4, 12], "x": 13, "y": 4},
{"label": "DOWN (A6,A5)", "matrix": [4, 13], "x": 14, "y": 4},
{"label": "RIGHT (A6,B11)", "matrix": [4, 14], "x": 15, "y": 4}
]
}
}
}

View File

@@ -0,0 +1,23 @@
// Copyright 2023 Citrus Lab
// SPDX-License-Identifier: GPL-2.0
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MPRV,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, _______, RESET, KC_MNXT,
_______, _______, _______, _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, KC_HOME,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MYCM, KC_VOLU, KC_END,
_______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_MPLY
)
};

View File

@@ -0,0 +1,39 @@
// Copyright 2023 Citrus Lab
// SPDX-License-Identifier: GPL-2.0
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MPRV,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, _______, RESET, KC_MNXT,
_______, _______, _______, _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, KC_HOME,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MYCM, KC_VOLU, KC_END,
_______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_MPLY
),
[2] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
),
[3] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
),
};

View File

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

View File

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

View File

@@ -0,0 +1,2 @@
# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE

View File

@@ -0,0 +1,2 @@
# Citrus Lab
QMK folders for PCB commissions.

View File

@@ -0,0 +1,48 @@
/* Copyright 2022 Cameron Larsen <@cameronjlarsen>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
/* Select hand configuration */
#define MASTER_LEFT
// #define MASTER_RIGHT
// #define EE_HANDS
#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 135
#define IGNORE_MOD_TAP_INTERRUPT
#define CAPS_WORD_IDLE_TIMEOUT 5000 // Turn off Caps Word after 5 seconds.
#ifdef RGBLIGHT_ENABLE
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_KNIGHT
#define RGBLIGHT_EFFECT_CHRISTMAS
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
#define RGBLIGHT_LIMIT_VAL 120
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
#endif
#define OLED_FONT_H "keyboards/crkbd/lib/glcdfont.c"

View File

@@ -0,0 +1,360 @@
/* Copyright 2022 Cameron Larsen <@cameronjlarsen>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#include <stdio.h>
#include "features/oneshot.h"
enum layers {
_QWERTY = 0,
SYM,
NAV,
FUN,
};
// Aliases for readability
#define QWERTY DF(_QWERTY)
#define LA_SYM LT(SYM, KC_TAB)
#define LA_NAV MO(NAV)
// One shot mods
enum keycodes {
OS_SHFT = QK_USER,
OS_CTRL,
OS_ALT,
OS_GUI,
};
// Note: LAlt/Enter (ALT_ENT) is not the same thing as the keyboard shortcut Alt+Enter.
// The notation `mod/tap` denotes a key that activates the modifier `mod` when held down, and
// produces the key `tap` when tapped (i.e. pressed and released).
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* Base Layer: QWERTY
*
* Inspiration:
*
* https://github.com/serebrov/qmk_firmware/blob/custom/keyboards/kyria/keymaps/kyria-mini/keymap.c
*
* Notes:
* - F & J enables CAPSWORD, disables after 5 seconds
* - Left thumb CTRL and SHIFT are one shot
* - Enter is moved to ; location and ; is moved to Sym layer
* - ESC can be accessed by NAV and G
* - BKSP is accessed by NAV and Enter
* - Tab is accessed by tapping SYM layer
* - FUN layer is accessed by holding NAV and SYM layers at the same time
*
* ,----------------------------------. ,----------------------------------.
* | Q | W | E | R | T | | Y | U | I | O | P |
* |------+------+------+------+------| |------+------+------+------+------|
* | A | S | D | F | G | | H | J | K | L | Enter|
* |------+------+------+------+------. ,------+------+------+------+------|
* | Z | X | C | V | B | | N | M | , < | . > | / ? |
* `------+------+------+------+------+------. ,------+------+------+------+-------------'
* | OSM | OSM | Nav | | Sym | Space| GUI |
* | Ctrl | Shift| | | Tab | | |
* `---------------------' `--------------------'
*/
[_QWERTY] = LAYOUT_split_3x5_3(
KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y, KC_U , KC_I , KC_O , KC_P ,
KC_A , KC_S , KC_D , KC_F , KC_G , KC_H, KC_J , KC_K , KC_L , KC_ENT ,
KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N, KC_M ,KC_COMM, KC_DOT , KC_SLSH,
OS_CTRL, OS_SHFT, LA_NAV , LA_SYM , KC_SPC, OS_GUI
),
/*
* Sym Layer: Numbers and symbols
*
* Notes:
* - Symbols are grouped together and shifted symbols from middle row are on bottom row
* - Exception is angle brackets
*
* ,----------------------------------. ,----------------------------------.
* | 1 ! | 2 @ | 3 # | 4 $ | 5 % | | 6 ^ | 7 & | 8 * | 9 ( | 0 ) |
* |------+------+------+------+------| |------+------+------+------+------|
* | ` | ( | ) | ' | = | | \ | - | [ | ] | ; |
* |------+------+------+------+------+ +------+------+------+------+------|
* | ~ | < | > | " | + | | | | _ | { | } | : |
* `-------------+------+------+------+------. ,------+------+------+------+-------------'
* | | | | | | | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
[SYM] = LAYOUT_split_3x5_3(
KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,
KC_GRV , KC_LPRN, KC_RPRN, KC_QUOT, KC_EQL , KC_BSLS, KC_MINS, KC_LBRC, KC_RBRC, KC_SCLN,
KC_TILD, KC_LABK, KC_RABK, KC_DQUO, KC_PLUS, KC_PIPE, KC_UNDS, KC_LCBR, KC_RCBR, KC_COLN,
_______, _______, _______, _______, _______, _______
),
/*
* Nav Layer: Navigation, Media
*
* Notes:
* - Vim style navigation keys
* - Volume and Media Keys
* - BKSP on Enter
* - DEL on /
* - Esc on G
*
* ,----------------------------------. ,----------------------------------.
* | | | | BriUp| BriDn| | Home | PgDn | PgUp | End |PrtScr|
* |------+------+------+------+------| |------+------+------+------+------|
* | GUI | Alt | Ctrl | Shift| Esc | | ← | ↓ | ↑ | → | Bksp |
* |------+------+------+------+------+ +------+------+------+------+------|
* | | Vol- | Mute | Vol+ |NumLck| | MPrev| MPlay| MStop| MNext|Delete|
* `-------------+------+------+------+------. ,------+------+------+------+-------------'
* | | | | | | | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
[NAV] = LAYOUT_split_3x5_3(
_______, _______, _______, KC_BRIU, KC_BRID, KC_HOME, KC_PGDN, KC_PGUP, KC_END , KC_PSCR,
OS_GUI , OS_ALT , OS_CTRL, OS_SHFT, KC_ESC , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_BSPC,
_______, KC_VOLD, KC_MUTE, KC_VOLU, KC_NUM , KC_MPRV, KC_MPLY, KC_MSTP, KC_MNXT, KC_DEL ,
_______, _______, _______, _______, _______, _______
),
/*
* Function Layer: Function keys
*
* Notes:
* - F1-F10 on bottom row
* - F11-F12 on index finger inner row
* - Homerow mods
* - Num keys on top row
*
* ,----------------------------------. ,----------------------------------.
* | 1 ! | 2 @ | 3 # | 4 $ | 5 % | | 6 ^ | 7 & | 8 * | 9 ( | 0 ) |
* |------+------+------+------+------| |------+------+------+------+------|
* | GUI | Alt | Ctrl | Shift| F11 | | F12 | Shift| Ctrl | Alt | GUI |
* |------+------+------+------+------+ +------+------+------+------+------|
* | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 |
* `-------------+------+------+------+------. ,------+------+------+------+-------------'
* | | | | | | | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
[FUN] = LAYOUT_split_3x5_3(
KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,
OS_GUI , OS_ALT , OS_CTRL, OS_SHFT, KC_F11 , KC_F12 , OS_SHFT, OS_CTRL, OS_ALT , OS_GUI ,
KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 ,
_______, _______, _______, _______, _______, _______
),
};
enum combo_events {
CAPS_COMBO,
// Other combos...
COMBO_LENGTH
};
uint16_t COMBO_LEN = COMBO_LENGTH;
const uint16_t PROGMEM caps_combo[] = {KC_F, KC_J, COMBO_END};
combo_t key_combos[] = {
[CAPS_COMBO] = COMBO_ACTION(caps_combo),
// Other combos...C
};
void process_combo_event(uint16_t combo_index, bool pressed) {
switch(combo_index) {
case CAPS_COMBO:
if (pressed) {
caps_word_on(); // Activate Caps Word!
}
break;
// Other combos...
}
}
bool is_oneshot_cancel_key(uint16_t keycode){
switch (keycode) {
case LA_NAV:
return true;
default:
return false;
}
}
bool is_oneshot_ignored_key(uint16_t keycode){
switch (keycode) {
case LA_NAV:
case LA_SYM:
case OS_SHFT:
case OS_CTRL:
case OS_ALT:
case OS_GUI:
return true;
default:
return false;
}
}
oneshot_state os_shft_state = os_up_unqueued;
oneshot_state os_ctrl_state = os_up_unqueued;
oneshot_state os_alt_state = os_up_unqueued;
oneshot_state os_cmd_state = os_up_unqueued;
bool caps_word_press_user(uint16_t keycode) {
switch (keycode) {
// Keycodes that continue Caps Word, with shift applied.
case KC_A ... KC_Z:
case KC_MINS:
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_UNDS:
return true;
default:
return false; // Deactivate Caps Word.
}
}
layer_state_t layer_state_set_user(layer_state_t state){
return update_tri_layer_state(state, SYM, NAV, FUN);
}
#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
if (!is_keyboard_master()) {
return OLED_ROTATION_180; // flips the display 180 degrees if offhand
}
return rotation;
}
void oled_render_layer_state(void) {
oled_write_P(PSTR("Layer: "), false);
switch (get_highest_layer(layer_state | default_layer_state)) {
case _QWERTY:
oled_write_ln_P(PSTR("QWERTY"), false);
break;
case SYM:
oled_write_ln_P(PSTR("Sym"), false);
break;
case NAV:
oled_write_ln_P(PSTR("Nav"), false);
break;
case FUN:
oled_write_ln_P(PSTR("Function"), false);
break;
default:
oled_write_ln_P(PSTR("Undefined"), false);
}
}
char keylog_str[24] = {};
const char code_to_name[60] = {
' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\',
'#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
void set_keylog(uint16_t keycode, keyrecord_t *record) {
char name = ' ';
if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) ||
(keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; }
if (keycode < 60) {
name = code_to_name[keycode];
}
// update keylog
snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
record->event.key.row, record->event.key.col,
keycode, name);
}
void oled_render_keylog(void) {
oled_write(keylog_str, false);
}
void render_bootmagic_status(bool status) {
/* Show Ctrl-Gui Swap options */
static const char PROGMEM logo[][2][3] = {
{{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
{{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
};
if (status) {
oled_write_ln_P(logo[0][0], false);
oled_write_ln_P(logo[0][1], false);
} else {
oled_write_ln_P(logo[1][0], false);
oled_write_ln_P(logo[1][1], false);
}
}
void oled_render_logo(void) {
static const char PROGMEM crkbd_logo[] = {
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
0};
oled_write_P(crkbd_logo, false);
}
bool oled_task_user(void) {
if (is_keyboard_master()) {
oled_render_layer_state();
oled_render_keylog();
} else {
oled_render_logo();
}
return false;
}
bool process_record_user(uint16_t keycode, keyrecord_t* record) {
if (!process_caps_word(keycode, record)) { return false; }
// Your macros ...
update_oneshot(
&os_shft_state, KC_LSFT, OS_SHFT,
keycode, record
);
update_oneshot(
&os_ctrl_state, KC_LCTL, OS_CTRL,
keycode, record
);
update_oneshot(
&os_alt_state, KC_LALT, OS_ALT,
keycode, record
);
update_oneshot(
&os_cmd_state, KC_LGUI, OS_GUI,
keycode, record
);
if (record->event.pressed) {
set_keylog(keycode, record);
}
return true;
}
#endif

View File

@@ -0,0 +1,15 @@
BOOTMAGIC_ENABLE = no
BOOLOADER = atmel-dfu
OLED_ENABLE = yes
OLED_DRIVER = SSD1306 # Enables the use of OLED displays
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
COMMAND_ENABLE = no # Disables the command feature
COMBO_ENABLE = yes
MOUSEKEY_ENABLE = no
CONSOLE_ENABLE = no
AUDIO_ENABLE = no
MIDI_ENABLE = no
BLUETOOTH_ENABLE = no
BACKLIGHT_ENABLE = no
CAPS_WORD_ENABLE = yes
CUSTOM_ONESHOT_ENABLE = yes

View File

@@ -0,0 +1,41 @@
/*
This is the c configuration file for the keymap
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 300
#undef RGBLED_NUM
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_KNIGHT
#define RGBLIGHT_EFFECT_CHRISTMAS
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
#define RGBLED_NUM 27
#define RGBLIGHT_LIMIT_VAL 120
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17

View File

@@ -0,0 +1,38 @@
// Copyright 2021 Shane Dowling (@shano)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#define KC_ESCC MT(MOD_LCTL, KC_ESC)
#define KC_ENTS MT(MOD_LSFT, KC_ENT)
#define KC_FN MO(_FN)
enum layers {
_QWERTY,
_FN,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
//,----+----+----+----+----+----. ,----+----+----+----+----+----.
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_LSFT, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT,
//|----+----+----+----+----+----+ |----+----+----+----+----+----|
KC_ESCC, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_ESC ,
//`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
KC_LALT,KC_LGUI,KC_SPC , KC_ENTS,KC_FN,KC_FN
// `----+----+----' `+---+----+----'c
),
[_FN] = LAYOUT(
//,----+----+----+----+----+----. ,----+----+----+----+----+----.
_______,KC_1, KC_2 ,KC_3, KC_4,KC_5, KC_6,KC_7,KC_8,KC_9,KC_0,KC_BSPC,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
_______,KC_EXCLAIM,KC_AT,KC_HASH,KC_DOLLAR,KC_PERCENT, KC_LEFT,KC_DOWN, KC_UP ,KC_RIGHT,KC_LBRC,KC_RBRC,
//|----+----+----+----+----+----+ |----+----+----+----+----+----|
_______, KC_CIRCUMFLEX , KC_AMPR , KC_ASTERISK , KC_LEFT_PAREN , KC_RIGHT_PAREN , KC_MINUS,KC_PLUS,KC_EQL,KC_PIPE,KC_GRAVE,KC_BACKSLASH,
//`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
_______,_______,_______ , _______,_______,_______
// `----+----+----' `----+----+----'
)
};

View File

@@ -0,0 +1,19 @@
# MD40: Minimally Disruptive 40% Keymap
This keymap is an attempt to go from a standard keyboard layout to a 40% keyboard with minimal disruption.
Some aims:
- Two layers only
- Existing keyboard positions where possible
- Exceptions where it's not possible
- Exceptions where it makes sense
Supports crkbd only.
## Base Layer
![Base Layer](https://i.imgur.com/hXLP6ush.png)
## Fn Layer
![Base Layer](https://i.imgur.com/Sozd1p8h.png)

View File

@@ -0,0 +1,8 @@
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no # Mouse keys
NKRO_ENABLE = no # Enable N-Key Rollover

View File

@@ -0,0 +1,66 @@
{
"manufacturer": "KeyboardDweebs",
"keyboard_name": "crowboard",
"maintainer": "doesntfazer",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"mousekey": true,
"extrakey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["GP6", "GP7", "GP8", "GP9", "GP10", "GP18", "GP19", "GP20", "GP21", "GP22"],
"rows": ["GP14", "GP15", "GP16", "GP17"]
},
"processor": "RP2040",
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"layouts": {
"LAYOUT": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1, "y": 0 },
{ "matrix": [0, 2], "x": 2, "y": 0 },
{ "matrix": [0, 3], "x": 3, "y": 0 },
{ "matrix": [0, 4], "x": 4, "y": 0 },
{ "matrix": [0, 5], "x": 5, "y": 0 },
{ "matrix": [0, 6], "x": 6, "y": 0 },
{ "matrix": [0, 7], "x": 7, "y": 0 },
{ "matrix": [0, 8], "x": 8, "y": 0 },
{ "matrix": [0, 9], "x": 9, "y": 0 },
{ "matrix": [1, 0], "x": 0, "y": 1 },
{ "matrix": [1, 1], "x": 1, "y": 1 },
{ "matrix": [1, 2], "x": 2, "y": 1 },
{ "matrix": [1, 3], "x": 3, "y": 1 },
{ "matrix": [1, 4], "x": 4, "y": 1 },
{ "matrix": [1, 5], "x": 5, "y": 1 },
{ "matrix": [1, 6], "x": 6, "y": 1 },
{ "matrix": [1, 7], "x": 7, "y": 1 },
{ "matrix": [1, 8], "x": 8, "y": 1 },
{ "matrix": [1, 9], "x": 9, "y": 1 },
{ "matrix": [2, 0], "x": 0, "y": 2 },
{ "matrix": [2, 1], "x": 1, "y": 2 },
{ "matrix": [2, 2], "x": 2, "y": 2 },
{ "matrix": [2, 3], "x": 3, "y": 2 },
{ "matrix": [2, 4], "x": 4, "y": 2 },
{ "matrix": [2, 5], "x": 5, "y": 2 },
{ "matrix": [2, 6], "x": 6, "y": 2 },
{ "matrix": [2, 7], "x": 7, "y": 2 },
{ "matrix": [2, 8], "x": 8, "y": 2 },
{ "matrix": [2, 9], "x": 9, "y": 2 },
{ "matrix": [3, 2], "x": 2, "y": 3 },
{ "matrix": [3, 3], "x": 3, "y": 3 },
{ "matrix": [3, 4], "x": 4, "y": 3 },
{ "matrix": [3, 5], "x": 5, "y": 3 },
{ "matrix": [3, 6], "x": 6, "y": 3 },
{ "matrix": [3, 7], "x": 7, "y": 3 }
]
}
}
}

View File

@@ -0,0 +1,6 @@
// Copyright 2022 doesntfazer (@doesntfazer)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define HOLD_ON_OTHER_KEY_PRESS_PER_KEY

View File

@@ -0,0 +1,60 @@
// Copyright 2021 Keyboard Dweebs (@doesntfazer)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#define CTLA LCTL(KC_A)
#define CAE LCTL(LALT(KC_END))
#define CAD LCTL(LALT(KC_DEL))
enum crow_layers {
_QWERTY,
_LOWER,
_RAISE,
_ADJUST,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT (
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
LCTL_T(KC_A), KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT,
LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
KC_LCTL, TL_LOWR, KC_SPACE, KC_BSPC, TL_UPPR, KC_RALT
),
[_LOWER] = LAYOUT (
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
KC_TAB, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_MINUS, KC_EQUAL, KC_LBRC, KC_RBRC,
KC_LCTL, KC_GRAVE, KC_LGUI, KC_LALT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN,
KC_TRNS, TL_LOWR, KC_TRNS, KC_ENTER, TL_UPPR, KC_TRNS
),
[_RAISE] = LAYOUT (
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
KC_ESC, KC_DEL, CTLA, KC_TRNS, KC_TRNS, KC_TRNS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR,
KC_CAPS, KC_TILDE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PIPE, KC_COLN,
KC_TRNS, TL_LOWR, KC_TRNS, KC_TRNS, TL_UPPR, KC_TRNS
),
[_ADJUST] = LAYOUT (
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, CAD, CAE, CAD, CAD,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};
bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case LCTL_T(KC_A):
// Do not force the mod-tap key press to be handled as a modifier
// if any other key was pressed while the mod-tap key is held down.
return false;
default:
// Force the mod-tap key press to be handled as a modifier if any
// other key was pressed while the mod-tap key is held down.
return true;
}
}

View File

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

View File

@@ -0,0 +1,28 @@
# crowboard
![crowboard](https://i.imgur.com/Rg7IYPwh.jpg)
RP2040 based 36 key keyboard
* Keyboard Maintainer: [doesntfazer](https://github.com/doesntfazer)
* Hardware Supported: Raspberry Pi Pico
* Hardware Availability: keyboarddweebs.net
## Bootloader
Enter the bootloader in 2 ways:
* **Physical reset button**: Hold the button down on the raspberry pi pico while plugging it in. There is no reset button on the pcb.
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
Make example for this keyboard (after setting up your build environment):
make crowboard:default
Flashing example for this keyboard:
make crowboard: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).

View File

@@ -0,0 +1 @@
PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS!

View File

@@ -7,3 +7,7 @@
#define TAPPING_TERM 230
#define IGNORE_MOD_TAP_INTERRUPT
// Handle master/slave detection on low cost Promicro
#ifdef __AVR__
# define SPLIT_USB_DETECT
#endif

View File

@@ -1,5 +1,4 @@
/* Copyright 2020 Purdea Andrei
*
/*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
@@ -14,11 +13,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "overnumpad_1xb.h"
void keyboard_post_init_kb(void)
{
//debug_enable=true;
//debug_matrix=true;
}
#pragma once
/* key matrix size, only 1x4 are used in current state.
IO expander setup would allow up to 1x16 + 1 from the MCU */
#define MATRIX_ROWS 1
#define MATRIX_COLS 17

View File

@@ -0,0 +1,41 @@
{
"manufacturer": "Geistmaschine",
"keyboard_name": "Macropod",
"maintainer": "ebastler",
"bootloader": "atmel-dfu",
"processor": "atmega32u4",
"url": "https://geistmaschine.io/",
"usb": {
"device_version": "1.0.0",
"pid": "0x0004",
"vid": "0x676D"
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": false,
"nkro": false,
"encoder": true
},
"encoder": {
"rotary": [
{
"pin_a": "D3",
"pin_b": "D5",
"resolution": 2
}
]
},
"layouts": {
"LAYOUT_fourkey": {
"layout": [
{"x":0, "y":0, "matrix":[0,0] },
{"x":0, "y":1.25, "matrix":[0,1] },
{"x":0, "y":2.25, "matrix":[0,2] },
{"x":0, "y":3.25, "matrix":[0,3] }
]
}
}
}

View File

@@ -0,0 +1,35 @@
/* Copyright 2023 Moritz Plattner
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_fourkey (
LT(1, KC_MUTE), KC_MPRV, KC_MPLY, KC_MNXT
),
[1] = LAYOUT_fourkey (
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[1] = { ENCODER_CCW_CW(KC_MRWD, KC_MFFD) },
};
#endif

View File

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

View File

@@ -0,0 +1,35 @@
/* Copyright 2023 Moritz Plattner
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_fourkey (
LT(1, KC_MUTE), KC_MPRV, KC_MPLY, KC_MNXT
),
[1] = LAYOUT_fourkey (
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[1] = { ENCODER_CCW_CW(KC_MRWD, KC_MFFD) },
};
#endif

View File

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

View File

@@ -0,0 +1,21 @@
// Copyright 2022 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include "quantum.h"
// This will be overridden by encoder map in all default keymaps, but serves as a catch-all for user keymaps that may omit the map.
#if defined (ENCODER_ENABLE) && !defined (ENCODER_MAP_ENABLE)
bool encoder_update_kb(uint8_t index, bool clockwise) {
if (!encoder_update_user(index, clockwise)) {
return false; /* Don't process further events if user function exists and returns false */
}
if (index == 0) { /* First encoder */
if (clockwise) {
tap_code_delay(KC_VOLU, 10);
} else {
tap_code_delay(KC_VOLD, 10);
}
}
return true;
}
#endif

View File

@@ -0,0 +1,87 @@
/* Copyright 2023 ebastler and elpekenin
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "pca9555.h"
#include "quantum.h"
// PCA9555 i2c address, 0x20: A0 = 0, A1 = 0, A2 = 0
#define IC1 0x20
// Define how long to wait to reach the IO expander after connection loss again
// Since this board is modular, it should not spam unnecessary i2c requests if used without a module
#define RETRY_TIMESPAN 2000
typedef enum {
PLUGGED,
DOUBTFUL,
UNPLUGGED
} expander_status_t;
void pca9555_setup(void) {
// Initialize the expander, no need to set ports to inputs as that is the default behavior
pca9555_init(IC1);
}
void matrix_init_custom(void) {
// Encoder pushbutton on the MCU is connected to PD2
setPinInputHigh(D2);
pca9555_setup();
}
bool matrix_scan_custom(matrix_row_t current_matrix[]) {
static expander_status_t status = DOUBTFUL;
static uint32_t retry_timer = 0;
// initialize one byte filled with 1
uint8_t pin_states = 0xFF;
if (status != UNPLUGGED || timer_elapsed32(retry_timer) > RETRY_TIMESPAN) {
// If the chip was unplugged before, it needs to be re-initialized
if(status==UNPLUGGED) {
pca9555_setup();
}
// Read the entire port into this byte, 1 = not pressed, 0 = pressed
bool ret = pca9555_readPins(IC1, PCA9555_PORT0, &pin_states);
// Update state
if (ret) {
status = PLUGGED;
} else {
switch (status) {
case PLUGGED:
status = DOUBTFUL;
break;
case DOUBTFUL:
status = UNPLUGGED;
break;
// If we've diagnosed as unplugged, update timer to not read I2C
case UNPLUGGED:
retry_timer = timer_read32();
}
}
}
// Shift pin states by 1 to make room for the switch connected to the MCU, then OR them together and invert (as QMK uses inverted logic compared to the electrical levels)
matrix_row_t data = ~(pin_states << 1 | readPin(D2));
bool changed = current_matrix[0] != data;
current_matrix[0] = data;
return changed;
}

View File

@@ -0,0 +1,25 @@
# Geistmaschine Macropod
![macropod](https://i.imgur.com/lAsCslA.png)
Macropod is a modular macropad, designed around a central big encoder with a magnetic connector for modularity. The default module uses three MX style keys.
* Keyboard Maintainer: [ebastler](https://github.com/ebastler)
* Hardware Supported: Macropod rev1
* Hardware Availability: [geistmaschine.io](https://geistmaschine.io/)
Make example for this keyboard (after setting up your build environment):
qmk compile -kb geistmaschine/macropod -km default
Flashing example for this keyboard:
qmk flash -kb geistmaschine/macropod -km default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 2 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (the knob on the main module) and plug in the keyboard
* **Physical reset button**: Briefly tap the button marked "RST" on the back of the main module PCB

View File

@@ -0,0 +1,5 @@
CUSTOM_MATRIX = lite
VPATH += drivers/gpio
SRC += pca9555.c matrix.c
QUANTUM_LIB_SRC += i2c_master.c

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