Compare commits

..

1 Commits

Author SHA1 Message Date
Nick Brassel
4ac847674b Branch point for 2023q2 Breaking Change. 2023-02-28 11:30:58 +11:00
695 changed files with 3087 additions and 28629 deletions

1
.github/labeler.yml vendored
View File

@@ -5,7 +5,6 @@ core:
- tests/**/*
- util/**/*
- platforms/**/*
- builddefs/**/*
- Makefile
- '*.mk'
dependencies:

View File

@@ -1,60 +0,0 @@
name: CI Builds
permissions:
contents: read
on:
workflow_dispatch:
schedule:
- cron: '0 0,12 * * *'
jobs:
ci_builds:
name: "CI Build"
runs-on: self-hosted
timeout-minutes: 1380
if: github.repository == 'qmk/qmk_firmware'
strategy:
fail-fast: false
matrix:
branch: [master, develop]
keymap: [default, via]
container: qmkfm/qmk_cli
steps:
- name: Disable safe.directory check
run : git config --global --add safe.directory '*'
- uses: actions/checkout@v3
with:
submodules: recursive
ref: ${{ matrix.branch }}
- name: Install dependencies
run: pip3 install -r requirements.txt
- name: Run `qmk mass-compile` (keymap ${{ matrix.keymap }})
run: |
export NCPUS=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null)
qmk mass-compile -t -j $NCPUS -km ${{ matrix.keymap }} -e DUMP_CI_METADATA=yes || touch .failed
# Generate the step summary markdown
./util/ci/generate_failure_markdown.sh > $GITHUB_STEP_SUMMARY || true
# Truncate to a maximum of 1MB to deal with GitHub workflow limit
truncate --size='<960K' $GITHUB_STEP_SUMMARY || true
# Exit with failure if the compilation stage failed
[ ! -f .failed ] || exit 1
- name: 'Upload artifacts'
uses: actions/upload-artifact@v3
if: always()
with:
name: artifacts-${{ matrix.branch }}-${{ matrix.keymap }}
if-no-files-found: ignore
path: |
*.bin
*.hex
*.uf2
.build/failed.*

View File

@@ -21,13 +21,9 @@ jobs:
container: qmkfm/qmk_cli
steps:
- name: Disable safe.directory check
run : git config --global --add safe.directory '*'
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Install dependencies
run: pip3 install -r requirements-dev.txt
- name: Run tests

View File

@@ -22,9 +22,6 @@ jobs:
container: qmkfm/qmk_cli
steps:
- name: Disable safe.directory check
run : git config --global --add safe.directory '*'
- uses: actions/checkout@v3
with:
fetch-depth: 0
@@ -35,7 +32,7 @@ jobs:
- name: Get changed files
id: file_changes
uses: tj-actions/changed-files@v35
uses: tj-actions/changed-files@v34
- name: Run qmk formatters
shell: 'bash {0}'

View File

@@ -16,9 +16,6 @@ jobs:
container: qmkfm/qmk_cli
steps:
- name: Disable safe.directory check
run : git config --global --add safe.directory '*'
- uses: actions/checkout@v3
with:
fetch-depth: 0

View File

@@ -15,9 +15,6 @@ jobs:
container: qmkfm/qmk_cli
steps:
- name: Disable safe.directory check
run : git config --global --add safe.directory '*'
- uses: actions/checkout@v3
with:
fetch-depth: 0
@@ -27,7 +24,7 @@ jobs:
- name: Get changed files
id: file_changes
uses: tj-actions/changed-files@v35
uses: tj-actions/changed-files@v34
- name: Print info
run: |

View File

@@ -16,9 +16,6 @@ jobs:
container: qmkfm/qmk_cli
steps:
- name: Disable safe.directory check
run : git config --global --add safe.directory '*'
- uses: actions/checkout@v3
- name: Run qmk generators

View File

@@ -16,9 +16,6 @@ jobs:
container: qmkfm/qmk_cli
steps:
- name: Disable safe.directory check
run : git config --global --add safe.directory '*'
- uses: actions/checkout@v3
- name: Run qmk generators

View File

@@ -13,7 +13,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v8
- uses: actions/stale@v7
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -29,11 +29,6 @@ KEYBOARD_FILESAFE := $(subst /,_,$(KEYBOARD))
TARGET ?= $(KEYBOARD_FILESAFE)_$(KEYMAP)
KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD_FILESAFE)
ifeq ($(strip $(DUMP_CI_METADATA)),yes)
$(info CI Metadata: KEYBOARD=$(KEYBOARD))
$(info CI Metadata: KEYMAP=$(KEYMAP))
endif
# Force expansion
TARGET := $(TARGET)

View File

@@ -253,7 +253,7 @@
"0x002F": {
"group": "basic",
"key": "KC_LEFT_BRACKET",
"label": "[",
"label": "]",
"aliases": [
"KC_LBRC"
]
@@ -261,7 +261,7 @@
"0x0030": {
"group": "basic",
"key": "KC_RIGHT_BRACKET",
"label": "]",
"label": "[",
"aliases": [
"KC_RBRC"
]
@@ -1512,4 +1512,4 @@
]
}
}
}
}

View File

@@ -23,7 +23,6 @@
}
},
"type": "object",
"not": { "required": [ "vendorId", "productId" ] }, // reject via keys...
"properties": {
"keyboard_name": {"$ref": "qmk.definitions.v1#/text_identifier"},
"keyboard_folder": {"$ref": "qmk.definitions.v1#/keyboard"},

View File

@@ -34,7 +34,7 @@ The next Breaking Change is scheduled for May 28, 2023.
## What changes will be included?
To see a list of breaking changes merge candidates you can look at the [`core` label](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+label%3Acore+is%3Apr). This label is applied whenever a PR is raised or changed, but only if the PR includes changes to core areas of QMK Firmware. A PR with that label applied is not guaranteed to be merged in the current cycle. New changes might be added between now and when `develop` is closed, and it is generally the responsibility of the submitter to handle conflicts. There is also another label used by QMK Collaborators -- `breaking_change_YYYYqN` -- which signifies to maintainers that it is a strong candidate for inclusion, and should be prioritized for review.
To see a list of breaking changes merge candidates you can look at the [`core` label](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+label%3Acore+is%3Apr). This label is applied whenever a PR is raised or changed, but only if the PR includes changes to core areas of QMK Firmware. A PR with that label applied is not guaranteed to be merged in the current cycle. New changes might be added between now and when `develop` is closed, and it is generally the responsibility of the submitter to handle conflicts. There is also another label used by QMK Collaborators -- `breaking_change_YYYYqN` -- which signifies to maintainers that it is a strong candidate for inclusion, and should be prioritised for review.
If you want your breaking change to be included in this round you need to create a PR and have it accepted by QMK Collaborators before `develop` closes. After `develop` closes, new submissions will be deferred to the next breaking changes cycle.
@@ -127,12 +127,12 @@ This happens immediately after the previous `develop` branch is merged to `maste
* Validate each submodule SHA1 matches the qmk fork, e.g. for ChibiOS:
* Go to [qmk/ChibiOS](https://github.com/qmk/ChibiOS)
* Compare the commit hash in the above output to the commit hash in the repository
* If there's a mismatch, that repository needs to have its `qmk-master` branch updated to match (otherwise Configurator won't work):
* If there's a mismatch, that repository needs to have its `master` branch updated to match (otherwise Configurator won't work):
* `cd lib/chibios`
* `git fetch --all`
* `git checkout qmk-master`
* `git checkout master`
* `git reset --hard <commit hash>`
* `git push origin qmk-master --force-with-lease`
* `git push origin master --force-with-lease`
* Announce that both `master` and `develop` are now unlocked -- message `@Breaking Changes Updates` on `#qmk_firmware` in Discord:
* `@Breaking Changes Updates -- Hey folks, develop has now been merged into master -- newest batch of changes are now available for everyone to use!`

View File

@@ -4,7 +4,7 @@ ChibiOS and ChibiOS-Contrib need to be updated in tandem -- the latter has a bra
## Getting ChibiOS
* `svn` Initialization:
* `svn` Initialisation:
* Only needed to be done once
* You might need to separately install `git-svn` package in your OS's package manager
* `git svn init --stdlayout --prefix='svn/' http://svn.osdn.net/svnroot/chibios/`
@@ -21,7 +21,7 @@ ChibiOS and ChibiOS-Contrib need to be updated in tandem -- the latter has a bra
## Getting ChibiOS-Contrib
* `git` Initialization:
* `git` Initialisation:
* `git clone git@github.com:qmk/ChibiOS-Contrib`
* `git remote add upstream https://github.com/ChibiOS/ChibiOS-Contrib`
* `git checkout -b chibios-20.3.x upstream/chibios-20.3.x`
@@ -57,16 +57,3 @@ ChibiOS and ChibiOS-Contrib need to be updated in tandem -- the latter has a bra
* `git commit -am 'Update ChibiOS to 99.9.9'`
* `git push --set-upstream origin chibios-version-bump`
* Make a PR to qmk_firmware with the new branch
## When merging a PR containing an upgrade of ChibiOS/ChibiOS-Contrib:
* Update the target branch if the merge target was `master`:
* `git checkout qmk-master`
* `git reset --hard develop_YYYY_qN`
* `git push origin qmk-master --force-with-lease`
* Update the target branch if the merge target was `develop`:
* `git checkout qmk-develop`
* `git reset --hard develop_YYYY_qN`
* `git push origin qmk-develop --force-with-lease`
Note that when merging `develop` to `master`, the first workflow should still be followed.

View File

@@ -20,7 +20,7 @@ qmk compile [-c] <configuratorExport.json>
qmk compile [-c] [-e <var>=<value>] [-j <num_jobs>] -kb <keyboard_name> -km <keymap_name>
```
**Usage in Keyboard Directory**:
**Usage in Keyboard Directory**:
Must be in keyboard directory with a default keymap, or in keymap directory for keyboard, or supply one with `--keymap <keymap_name>`
```
@@ -44,7 +44,7 @@ $ qmk compile
or with optional keymap argument
```
$ cd ~/qmk_firmware/keyboards/clueboard/66/rev4
$ cd ~/qmk_firmware/keyboards/clueboard/66/rev4
$ qmk compile -km 66_iso
Ψ Compiling keymap with make clueboard/66/rev4:66_iso
...
@@ -58,7 +58,7 @@ $ qmk compile
...
```
**Usage in Layout Directory**:
**Usage in Layout Directory**:
Must be under `qmk_firmware/layouts/`, and in a keymap folder.
```
@@ -149,34 +149,6 @@ To exit out into the parent shell, simply type `exit`.
qmk cd
```
## `qmk find`
This command allows for searching through keyboard/keymap targets, filtering by specific criteria. `info.json` and `rules.mk` files contribute to the search data, as well as keymap configurations, and the results can be filtered using "dotty" syntax matching the overall `info.json` file format.
For example, one could search for all keyboards using STM32F411:
```
qmk find -f 'processor=STM32F411'
```
...and one can further constrain the list to keyboards using STM32F411 as well as rgb_matrix support:
```
qmk find -f 'processor=STM32F411' -f 'features.rgb_matrix=true'
```
**Usage**:
```
qmk find [-h] [-km KEYMAP] [-f FILTER]
options:
-km KEYMAP, --keymap KEYMAP
The keymap name to build. Default is 'default'.
-f FILTER, --filter FILTER
Filter the list of keyboards based on the supplied value in rules.mk. Matches info.json structure, and accepts the formats 'features.rgblight=true' or 'exists(matrix_pins.direct)'. May be passed multiple times, all filters need to match. Value may include wildcards such as '*' and '?'.
```
## `qmk console`
This command lets you connect to keyboard consoles to get debugging messages. It only works if your keyboard firmware has been compiled with `CONSOLE_ENABLE=yes`.
@@ -297,8 +269,7 @@ qmk json2c [-o OUTPUT] filename
## `qmk c2json`
Creates a keymap.json from a keymap.c.
Creates a keymap.json from a keymap.c.
**Note:** Parsing C source files is not easy, therefore this subcommand may not work with your keymap. In some cases not using the C pre-processor helps.
**Usage**:
@@ -471,7 +442,7 @@ $ qmk import-kbfirmware ~/Downloads/gh62.json
## `qmk format-text`
This command formats text files to have proper line endings.
This command formats text files to have proper line endings.
Every text file in the repository needs to have Unix (LF) line ending.
If you are working on **Windows**, you must ensure that line endings are corrected in order to get your PRs merged.
@@ -482,7 +453,7 @@ qmk format-text
## `qmk format-c`
This command formats C code using clang-format.
This command formats C code using clang-format.
Run it with no arguments to format all core code that has been changed. Default checks `origin/master` with `git diff`, branch can be changed using `-b <branch_name>`
@@ -585,7 +556,7 @@ qmk kle2json [-f] <filename>
**Examples**:
```
$ qmk kle2json kle.txt
$ qmk kle2json kle.txt
☒ File info.json already exists, use -f or --force to overwrite.
```

View File

@@ -202,62 +202,6 @@ This function gets called at the end of all QMK processing, before starting the
Similar to `matrix_scan_*`, these are called as often as the MCU can handle. To keep your board responsive, it's suggested to do as little as possible during these function calls, potentially throtting their behaviour if you do indeed require implementing something special.
### Example `void housekeeping_task_user(void)` implementation
This example will show you how to use `void housekeeping_task_user(void)` to turn off [RGB Light](feature_rgblight.md). For RGB Matrix, the [builtin](https://docs.qmk.fm/#/feature_rgb_matrix?id=additional-configh-options) `RGB_MATRIX_TIMEOUT` should be used.
First, add the following lines to your keymap's `config.h`:
```c
#define RGBLIGHT_SLEEP // enable rgblight_suspend() and rgblight_wakeup() in keymap.c
#define RGBLIGHT_TIMEOUT 900000 // ms to wait until rgblight time out, 900K ms is 15min.
```
Next, add the following code to your `keymap.c`:
```c
static uint32_t key_timer; // timer for last keyboard activity, use 32bit value and function to make longer idle time possible
static void refresh_rgb(void); // refreshes the activity timer and RGB, invoke whenever any activity happens
static void check_rgb_timeout(void); // checks if enough time has passed for RGB to timeout
bool is_rgb_timeout = false; // store if RGB has timed out or not in a boolean
void refresh_rgb(void) {
key_timer = timer_read32(); // store time of last refresh
if (is_rgb_timeout)
{
is_rgb_timeout = false;
rgblight_wakeup();
}
}
void check_rgb_timeout(void) {
if (!is_rgb_timeout && timer_elapsed32(key_timer) > RGBLIGHT_TIMEOUT) // check if RGB has already timeout and if enough time has passed
{
rgblight_suspend();
is_rgb_timeout = true;
}
}
/* Then, call the above functions from QMK's built in post processing functions like so */
/* Runs at the end of each scan loop, check if RGB timeout has occured or not */
void housekeeping_task_user(void) {
#ifdef RGBLIGHT_TIMEOUT
check_rgb_timeout();
#endif
}
/* Runs after each key press, check if activity occurred */
void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef RGBLIGHT_TIMEOUT
if (record->event.pressed)
refresh_rgb();
#endif
}
/* Runs after each encoder tick, check if activity occurred */
void post_encoder_update_user(uint8_t index, bool clockwise) {
#ifdef RGBLIGHT_TIMEOUT
refresh_rgb();
#endif
}
```
# Keyboard Idling/Wake Code
If the board supports it, it can be "idled", by stopping a number of functions. A good example of this is RGB lights or backlights. This can save on power consumption, or may be better behavior for your keyboard.
@@ -265,7 +209,7 @@ If the board supports it, it can be "idled", by stopping a number of functions.
This is controlled by two functions: `suspend_power_down_*` and `suspend_wakeup_init_*`, which are called when the system board is idled and when it wakes up, respectively.
### Example `suspend_power_down_user()` and `suspend_wakeup_init_user()` Implementation
### Example suspend_power_down_user() and suspend_wakeup_init_user() Implementation
```c

View File

@@ -160,7 +160,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
};
```
Alternatively, this can be done with [Key Overrides](feature_key_overrides?id=simple-example).
# Advanced topics :id=advanced-topics
@@ -181,7 +180,3 @@ This page used to encompass a large set of features. We have moved many sections
## Tap-Hold Configuration Options :id=tap-hold-configuration-options
* [Tap-Hold Configuration Options](tap_hold.md)
## Key Overrides :id=key-overrides
* [Key Overrides](feature_key_overrides.md)

View File

@@ -236,18 +236,6 @@ bool apply_autocorrect(uint8_t backspaces, const char *str) {
}
```
### Autocorrect Status
Additional user callback functions to manipulate Autocorrect:
| Function | Description |
|----------------------------|----------------------------------------------|
| `autocorrect_enable()` | Turns Autocorrect on. |
| `autocorrect_disable()` | Turns Autocorrect off. |
| `autocorrect_toggle()` | Toggles Autocorrect. |
| `autocorrect_is_enabled()` | Returns true if Autocorrect is currently on. |
## Appendix: Trie binary data format :id=appendix
This section details how the trie is serialized to byte data in autocorrect_data. You dont need to care about this to use this autocorrection implementation. But it is documented for the record in case anyone is interested in modifying the implementation, or just curious how it works.

View File

@@ -20,28 +20,24 @@ combo_t key_combos[COMBO_COUNT] = {
This will send "Escape" if you hit the A and B keys, and Ctrl+Z when you hit the C and D keys.
## Mod-Tap Support
[Mod-Tap](mod_tap.md) feature is also supported together with combos. You will need to use the full Mod-Tap keycode in the combo definition, e.g.:
As of [PR#8591](https://github.com/qmk/qmk_firmware/pull/8591/), it is possible to fire combos from ModTap keys and LayerTap keys. So in the above example you could have keys `LSFT_T(KC_A)` and `LT(_LAYER, KC_B)` and it would work. So Home Row Mods and Home Row Combos at same time is now a thing!
It is also now possible to overlap combos. Before, with the example below both combos would activate when all three keys were pressed. Now only the three key combo will activate.
```c
const uint16_t PROGMEM test_combo1[] = {LSFT_T(KC_A), LT(1, KC_B), COMBO_END};
```
## Overlapping Combos
It is possible to overlap combos. Before, with the example below both combos would activate when all three keys were pressed. Now only the three key combo will activate.
```c
const uint16_t PROGMEM test_combo1[] = {LSFT_T(KC_A), LT(1, KC_B), COMBO_END};
const uint16_t PROGMEM test_combo2[] = {LSFT_T(KC_A), LT(1, KC_B), KC_C, COMBO_END};
const uint16_t PROGMEM test_combo1[] = {LSFT_T(KC_A), LT(_LAYER, KC_B), COMBO_END};
const uint16_t PROGMEM test_combo2[] = {LSFT_T(KC_A), LT(_LAYER, KC_B), KC_C, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {
COMBO(test_combo1, KC_ESC)
COMBO(test_combo2, KC_TAB)
};
```
Executing more complex keycodes like ModTaps and LayerTaps is now also possible.
## Examples
A long list of combos can be defined in an `enum` list that ends with `COMBO_LENGTH` and you can leave `COMBO_COUNT` undefined:
If you want to add a list, then you'd use something like this:
```c
enum combos {
@@ -49,9 +45,7 @@ enum combos {
JK_TAB,
QW_SFT,
SD_LAYER,
COMBO_LENGTH
};
uint16_t COMBO_LEN = COMBO_LENGTH; // remove the COMBO_COUNT define and use this instead!
const uint16_t PROGMEM ab_combo[] = {KC_A, KC_B, COMBO_END};
const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
@@ -67,6 +61,7 @@ combo_t key_combos[COMBO_COUNT] = {
```
For a more complicated implementation, you can use the `process_combo_event` function to add custom handling.
Additionally, this example shows how you can leave `COMBO_COUNT` undefined.
```c
enum combo_events {
@@ -116,13 +111,13 @@ You can enable, disable and toggle the Combo feature on the fly. This is useful
|`QK_COMBO_OFF` |`CM_OFF` |Turns off Combo feature |
|`QK_COMBO_TOGGLE`|`CM_TOGG`|Toggles Combo feature on and off|
## Advanced Configuration
# Advanced Configuration
These configuration settings can be set in your `config.h` file.
### Combo Term
## Combo Term
By default, the timeout for the Combos to be recognized is set to 50ms. This can be changed if accidental combo misfires are happening or if you're having difficulties pressing keys at the same time. For instance, `#define COMBO_TERM 40` would set the timeout period for combos to 40ms.
### Buffer and state sizes
## Buffer and state sizes
If you're using long combos, or you have a lot of overlapping combos, you may run into issues with this, as the buffers may not be large enough to accommodate what you're doing. In this case, you can configure the sizes of the buffers used. Be aware, larger combo sizes and larger buffers will increase memory usage!
To configure the amount of keys a combo can be composed of, change the following:
@@ -143,13 +138,13 @@ Processing combos has two buffers, one for the key presses, another for the comb
| `#define COMBO_KEY_BUFFER_LENGTH 8` | 8 (the key amount `(EXTRA_)EXTRA_LONG_COMBOS` gives) |
| `#define COMBO_BUFFER_LENGTH 4` | 4 |
### Modifier Combos
## Modifier Combos
If a combo resolves to a Modifier, the window for processing the combo can be extended independently from normal combos. By default, this is disabled but can be enabled with `#define COMBO_MUST_HOLD_MODS`, and the time window can be configured with `#define COMBO_HOLD_TERM 150` (default: `TAPPING_TERM`). With `COMBO_MUST_HOLD_MODS`, you cannot tap the combo any more which makes the combo less prone to misfires.
### Strict key press order
## Strict key press order
By defining `COMBO_MUST_PRESS_IN_ORDER` combos only activate when the keys are pressed in the same order as they are defined in the key array.
### Per Combo Timing, Holding, Tapping and Key Press Order
## Per Combo Timing, Holding, Tapping and Key Press Order
For each combo, it is possible to configure the time window it has to pressed in, if it needs to be held down, if it needs to be tapped, or if its keys need to be pressed in order.
For example, tap-only combos are useful if any (or all) of the underlying keys are mod-tap or layer-tap keys. When you tap the combo, you get the combo result. When you press the combo and hold it down, the combo doesn't activate. Instead the keys are processed separately as if the combo wasn't even there.
@@ -239,7 +234,7 @@ bool get_combo_must_press_in_order(uint16_t combo_index, combo_t *combo) {
}
```
### Generic hook to (dis)allow a combo activation
## Generic hook to (dis)allow a combo activation
By defining `COMBO_SHOULD_TRIGGER` and its companying function `bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode, keyrecord_t *record)` you can block or allow combos to activate on the conditions of your choice.
For example, you could disallow some combos on the base layer and allow them on another. Or disable combos on the home row when a timer is running.
@@ -259,7 +254,7 @@ bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode
}
```
### Variable Length Combos
## Variable Length Combos
If you leave `COMBO_COUNT` undefined in `config.h`, it allows you to programmatically declare the size of the Combo data structure and avoid updating `COMBO_COUNT`. Instead a variable called `COMBO_LEN` has to be set. It can be set with something similar to the following in `keymap.c`: `uint16_t COMBO_LEN = ARRAY_SIZE(key_combos);` or by adding `COMBO_LENGTH` as the *last* entry in the combo enum and then `uint16_t COMBO_LEN = COMBO_LENGTH;` as such:
```c
enum myCombos {
@@ -271,26 +266,26 @@ uint16_t COMBO_LEN = COMBO_LENGTH;
Regardless of the method used to declare `COMBO_LEN`, this also requires to convert the `combo_t key_combos[COMBO_COUNT] = {...};` line to `combo_t key_combos[] = {...};`.
### Combo timer
## Combo timer
Normally, the timer is started on the first key press and then reset on every subsequent key press within the `COMBO_TERM`.
Inputting combos is relaxed like this, but also slightly more prone to accidental misfires.
The next two options alter the behaviour of the timer.
#### `#define COMBO_STRICT_TIMER`
### `#define COMBO_STRICT_TIMER`
With `COMBO_STRICT_TIMER`, the timer is started only on the first key press.
Inputting combos is now less relaxed; you need to make sure the full chord is pressed within the `COMBO_TERM`.
Misfires are less common but if you type multiple combos fast, there is a
chance that the latter ones might not activate properly.
#### `#define COMBO_NO_TIMER`
### `#define COMBO_NO_TIMER`
By defining `COMBO_NO_TIMER`, the timer is disabled completely and combos are activated on the first key release.
This also disables the "must hold" functionalities as they just wouldn't work at all.
### Customizable key releases
## Customizable key releases
By defining `COMBO_PROCESS_KEY_RELEASE` and implementing the function `bool process_combo_key_release(uint16_t combo_index, combo_t *combo, uint8_t key_index, uint16_t keycode)`, you can run your custom code on each key release after a combo was activated. For example you could change the RGB colors, activate haptics, or alter the modifiers.
@@ -327,13 +322,13 @@ bool process_combo_key_release(uint16_t combo_index, combo_t *combo, uint8_t key
return false;
}
```
### Layer independent combos
## Layer independent combos
If you, for example, use multiple base layers for different key layouts, one for QWERTY, and another one for Colemak, you might want your combos to work from the same key positions on all layers. Defining the same combos again for another layout is redundant and takes more memory. The solution is to just check the keycodes from one layer.
With `#define COMBO_ONLY_FROM_LAYER 0` in config.h, the combos' keys are always checked from layer `0`, even if other layers are active.
#### Combo reference layers by layer.
### Combo reference layers by layer.
If not using `COMBO_ONLY_FROM_LAYER` it is possible to specify a
combo reference layer for any layer using the `combo_ref_from_layer` hook.
@@ -390,7 +385,7 @@ In addition to the keycodes, there are a few functions that you can use to set t
| `is_combo_enabled()` | Returns the status of the combo feature state (true or false) |
## Dictionary Management
# Dictionary Management
Having 3 places to update when adding new combos or altering old ones does become cumbersome when you have a lot of combos. We can alleviate this with some magic! ... If you consider C macros magic.
First, you need to add `VPATH += keyboards/gboards` to your `rules.mk`. Next, include the file `g/keymap_combo.h` in your `keymap.c`.

View File

@@ -1,4 +1,4 @@
# Key Overrides :id=key-overrides
# Key Overrides
Key overrides allow you to override modifier-key combinations to send a different modifier-key combination or perform completely custom actions. Don't want `shift` + `1` to type `!` on your computer? Use a key override to make your keyboard type something different when you press `shift` + `1`. The general behavior is like this: If `modifiers w` + `key x` are pressed, replace these keys with `modifiers y` + `key z` in the keyboard report.
@@ -10,13 +10,13 @@ You can use key overrides in a similar way to momentary layer/fn keys to activat
- Create custom shortcuts or change existing ones: E.g. Send `ctrl`+`shift`+`z` when `ctrl`+`y` is pressed.
- Run custom code when `ctrl` + `alt` + `esc` is pressed.
## Setup :id=setup
## Setup
To enable this feature, you need to add `KEY_OVERRIDE_ENABLE = yes` to your `rules.mk`.
Then, in your `keymap.c` file, you'll need to define the array `key_overrides`, which defines all key overrides to be used. Each override is a value of type `key_override_t`. The array `key_overrides` is `NULL`-terminated and contains pointers to `key_override_t` values (`const key_override_t **`).
## Creating Key Overrides :id=creating-key-overrides
## Creating Key Overrides
The `key_override_t` struct has many options that allow you to precisely tune your overrides. The full reference is shown below. Instead of manually creating a `key_override_t` value, it is recommended to use these dedicated initializers:
@@ -34,7 +34,7 @@ Additionally takes a bitmask `options` that specifies additional options. See `k
For more customization possibilities, you may directly create a `key_override_t`, which allows you to customize even more behavior. Read further below for details and examples.
## Simple Example :id=simple-example
## Simple Example
This shows how the mentioned example of sending `delete` when `shift` + `backspace` are pressed is realized:
@@ -48,9 +48,9 @@ const key_override_t **key_overrides = (const key_override_t *[]){
};
```
## Intermediate Difficulty Examples :id=intermediate-difficulty-examples
## Intermediate Difficulty Examples
### Media Controls & Screen Brightness :id=media-controls-amp-screen-brightness
### Media Controls & Screen Brightness
In this example a single key is configured to control media, volume and screen brightness by using key overrides.
@@ -102,7 +102,7 @@ const key_override_t **key_overrides = (const key_override_t *[]){
};
```
### Flexible macOS-friendly Grave Escape :id=flexible-macos-friendly-grave-escape
### Flexible macOS-friendly Grave Escape
The [Grave Escape feature](feature_grave_esc.md) is limited in its configurability and has [bugs when used on macOS](feature_grave_esc.md#caveats). Key overrides can be used to achieve a similar functionality as Grave Escape, but with more customization and without bugs on macOS.
```c
@@ -121,8 +121,8 @@ const key_override_t **key_overrides = (const key_override_t *[]){
In addition to not encountering unexpected bugs on macOS, you can also change the behavior as you wish. Instead setting `GUI` + `ESC` = `` ` `` you may change it to an arbitrary other modifier, for example `Ctrl` + `ESC` = `` ` ``.
## Advanced Examples :id=advanced-examples
### Modifiers as Layer Keys :id=modifiers-as-layer-keys
## Advanced Examples
### Modifiers as Layer Keys
Do you really need a dedicated key to toggle your fn layer? With key overrides, perhaps not. This example shows how you can configure to use `rGUI` + `rAlt` (right GUI and right alt) to access a momentary layer like an fn layer. With this you completely eliminate the need to use a dedicated layer key. Of course the choice of modifier keys can be changed as needed, `rGUI` + `rAlt` is just an example here.
@@ -150,7 +150,7 @@ const key_override_t fn_override = {.trigger_mods = MOD_BIT(KC_RGUI) |
.enabled = NULL};
```
## Keycodes :id=keycodes
## Keycodes
|Keycode |Aliases |Description |
|------------------------|---------|----------------------|
@@ -158,7 +158,7 @@ const key_override_t fn_override = {.trigger_mods = MOD_BIT(KC_RGUI) |
|`QK_KEY_OVERRIDE_ON` |`KO_ON` |Turn on key overrides |
|`QK_KEY_OVERRIDE_OFF` |`KO_OFF` |Turn off key overrides|
## Reference for `key_override_t` :id=reference-for-key_override_t
## Reference for `key_override_t`
Advanced users may need more customization than what is offered by the simple `ko_make` initializers. For this, directly create a `key_override_t` value and set all members. Below is a reference for all members of `key_override_t`.
@@ -175,7 +175,7 @@ Advanced users may need more customization than what is offered by the simple `k
| `void *context` | A context that will be passed to the custom action function. |
| `bool *enabled` | If this points to false this override will not be used. Set to NULL to always have this override enabled. |
## Reference for `ko_option_t` :id=reference-for-ko_option_t
### Reference for `ko_option_t`
Bitfield with various options controlling the behavior of a key override.
@@ -189,11 +189,11 @@ Bitfield with various options controlling the behavior of a key override.
| `ko_option_no_reregister_trigger` | If set, the trigger key will never be registered again after the override is deactivated. |
| `ko_options_default` | The default options used by the `ko_make_xxx` functions |
## For Advanced Users: Inner Workings :id=for-advanced-users-inner-workings
## For Advanced Users: Inner Workings
This section explains how a key override works in detail, explaining where each member of `key_override_t` comes into play. Understanding this is essential to be able to take full advantage of all the options offered by key overrides.
#### Activation :id=activation
#### Activation
When the necessary keys are pressed (`trigger_mods` + `trigger`), the override is 'activated' and the replacement key is registered in the keyboard report (`replacement`), while the `trigger` key is removed from the keyboard report. The trigger modifiers may also be removed from the keyboard report upon activation of an override (`suppressed_mods`). The override will not activate if any of the `negative_modifiers` are pressed.
@@ -207,11 +207,11 @@ Use the `option` member to customize which of these events are allowed to activa
In any case, a key override can only activate if the `trigger` key is the _last_ non-modifier key that was pressed down. This emulates the behavior of how standard OSes (macOS, Windows, Linux) handle normal key input (to understand: Hold down `a`, then also hold down `b`, then hold down `shift`; `B` will be typed but not `A`).
#### Deactivation :id=deactivation
#### Deactivation
An override is 'deactivated' when one of the trigger keys (`trigger_mods`, `trigger`) is lifted, another non-modifier key is pressed down, or one of the `negative_modifiers` is pressed down. When an override deactivates, the `replacement` key is removed from the keyboard report, while the `suppressed_mods` that are still held down are re-added to the keyboard report. By default, the `trigger` key is re-added to the keyboard report if it is still held down and no other non-modifier key has been pressed since. This again emulates the behavior of how standard OSes handle normal key input (To understand: hold down `a`, then also hold down `b`, then also `shift`, then release `b`; `A` will not be typed even though you are holding the `a` and `shift` keys). Use the `option` field `ko_option_no_reregister_trigger` to prevent re-registering the trigger key in all cases.
#### Key Repeat Delay :id=key-repeat-delay
#### Key Repeat Delay
A third way in which standard OS-handling of modifier-key input is emulated in key overrides is with a ['key repeat delay'](https://www.dummies.com/computers/pcs/set-your-keyboards-repeat-delay-and-repeat-rate/). To explain what this is, let's look at how normal keyboard input is handled by mainstream OSes again: If you hold down `a`, followed by `shift`, you will see the letter `a` is first typed, then for a short moment nothing is typed and then repeating `A`s are typed. Take note that, although shift is pressed down just after `a` is pressed, it takes a moment until `A` is typed. This is caused by the aforementioned key repeat delay, and it is a feature that prevents unwanted repeated characters from being typed.
@@ -222,6 +222,6 @@ This applies equally to releasing a modifier: When you hold `shift`, then press
The duration of the key repeat delay is controlled with the `KEY_OVERRIDE_REPEAT_DELAY` macro. Define this value in your `config.h` file to change it. It is 500ms by default.
## Difference to Combos :id=difference-to-combos
## Difference to Combos
Note that key overrides are very different from [combos](https://docs.qmk.fm/#/feature_combo). Combos require that you press down several keys almost _at the same time_ and can work with any combination of non-modifier keys. Key overrides work like keyboard shortcuts (e.g. `ctrl` + `z`): They take combinations of _multiple_ modifiers and _one_ non-modifier key to then perform some custom action. Key overrides are implemented with much care to behave just like normal keyboard shortcuts would in regards to the order of pressed keys, timing, and interacton with other pressed keys. There are a number of optional settings that can be used to really fine-tune the behavior of each key override as well. Using key overrides also does not delay key input for regular key presses, which inherently happens in combos and may be undesirable.

View File

@@ -20,13 +20,13 @@ To use the ADNS 5050 sensor, add this to your `rules.mk`
POINTING_DEVICE_DRIVER = adns5050
```
The ADNS 5050 sensor uses a serial type protocol for communication, and requires an additional light source.
The ADNS 5050 sensor uses a serial type protocol for communication, and requires an additional light source.
| Setting (`config.h`) | Description | Default |
| -------------------- | ------------------------------------------------------------------ | -------------------------- |
| `ADNS5050_SCLK_PIN` | (Required) The pin connected to the clock pin of the sensor. | `POINTING_DEVICE_SCLK_PIN` |
| `ADNS5050_SDIO_PIN` | (Required) The pin connected to the data pin of the sensor. | `POINTING_DEVICE_SDIO_PIN` |
| `ADNS5050_CS_PIN` | (Required) The pin connected to the Chip Select pin of the sensor. | `POINTING_DEVICE_CS_PIN` |
| Setting | Description | Default |
| ------------------- | ------------------------------------------------------------------ | -------------------------- |
| `ADNS5050_SCLK_PIN` | (Required) The pin connected to the clock pin of the sensor. | `POINTING_DEVICE_SCLK_PIN` |
| `ADNS5050_SDIO_PIN` | (Required) The pin connected to the data pin of the sensor. | `POINTING_DEVICE_SDIO_PIN` |
| `ADNS5050_CS_PIN` | (Required) The pin connected to the Chip Select pin of the sensor. | `POINTING_DEVICE_CS_PIN` |
@@ -40,9 +40,9 @@ To use the ADNS 9800 sensor, add this to your `rules.mk`
POINTING_DEVICE_DRIVER = adns9800
```
The ADNS 9800 is an SPI driven optical sensor, that uses laser output for surface tracking.
The ADNS 9800 is an SPI driven optical sensor, that uses laser output for surface tracking.
| Setting (`config.h`) | Description | Default |
| Setting | Description | Default |
| ----------------------- | ---------------------------------------------------------------------- | ------------------------ |
| `ADNS9800_CLOCK_SPEED` | (Optional) Sets the clock speed that the sensor runs at. | `2000000` |
| `ADNS9800_SPI_LSBFIRST` | (Optional) Sets the Least/Most Significant Byte First setting for SPI. | `false` |
@@ -63,7 +63,7 @@ POINTING_DEVICE_DRIVER = analog_joystick
The Analog Joystick is an analog (ADC) driven sensor. There are a variety of joysticks that you can use for this.
| Setting (`config.h`) | Description | Default |
| Setting | Description | Default |
| --------------------------------- | -------------------------------------------------------------------------- | ------------- |
| `ANALOG_JOYSTICK_X_AXIS_PIN` | (Required) The pin used for the vertical/X axis. | _not defined_ |
| `ANALOG_JOYSTICK_Y_AXIS_PIN` | (Required) The pin used for the horizontal/Y axis. | _not defined_ |
@@ -153,7 +153,7 @@ Additionally, `POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE` is supported in thi
#### Relative mode gestures
| Gesture Setting (`config.h`) | Description | Default |
| Gesture Setting | Description | Default |
| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- |
| `CIRQUE_PINNACLE_TAP_ENABLE` | (Optional) Enable tap to "left click". Works on both sides of a split keyboard. | _not defined_ |
| `CIRQUE_PINNACLE_SECONDARY_TAP_ENABLE` | (Optional) Tap in upper right corner (half of the finger needs to be outside of the trackpad) of the trackpad will result in "right click". `CIRQUE_PINNACLE_TAP_ENABLE` must be enabled. | _not defined_ |
@@ -172,10 +172,10 @@ POINTING_DEVICE_DRIVER = paw3204
The paw 3204 sensor uses a serial type protocol for communication, and requires an additional light source.
| Setting (`config.h`) | Description | Default |
| -------------------- |--------------------------------------------------------------- | -------------------------- |
| `PAW3204_SCLK_PIN` | (Required) The pin connected to the clock pin of the sensor. | `POINTING_DEVICE_SCLK_PIN` |
| `PAW3204_SDIO_PIN` | (Required) The pin connected to the data pin of the sensor. | `POINTING_DEVICE_SDIO_PIN` |
| Setting | Description | Default |
| ------------------ |--------------------------------------------------------------- | -------------------------- |
| `PAW3204_SCLK_PIN` | (Required) The pin connected to the clock pin of the sensor. | `POINTING_DEVICE_SCLK_PIN` |
| `PAW3204_SDIO_PIN` | (Required) The pin connected to the data pin of the sensor. | `POINTING_DEVICE_SDIO_PIN` |
The CPI range is 400-1600, with supported values of (400, 500, 600, 800, 1000, 1200 and 1600). Defaults to 1000 CPI.
@@ -189,7 +189,7 @@ POINTING_DEVICE_DRIVER = pimoroni_trackball
The Pimoroni Trackball module is a I2C based breakout board with an RGB enable trackball.
| Setting (`config.h`) | Description | Default |
| Setting | Description | Default |
| ------------------------------------ | ---------------------------------------------------------------------------------- | ------- |
| `PIMORONI_TRACKBALL_ADDRESS` | (Required) Sets the I2C Address for the Pimoroni Trackball. | `0x0A` |
| `PIMORONI_TRACKBALL_TIMEOUT` | (Optional) The timeout for i2c communication with the trackball in milliseconds. | `100` |
@@ -220,7 +220,7 @@ The CPI range is 50-16000, in increments of 50. Defaults to 2000 CPI.
Both PMW 3360 and PMW 3389 are SPI driven optical sensors, that use a built in IR LED for surface tracking.
If you have different CS wiring on each half you can use `PMW33XX_CS_PIN_RIGHT` or `PMW33XX_CS_PINS_RIGHT` in combination with `PMW33XX_CS_PIN` or `PMW33XX_CS_PINS` to configure both sides independently. If `_RIGHT` values aren't provided, they default to be the same as the left ones.
| Setting (`config.h`) | Description | Default |
| Setting | Description | Default |
| ---------------------------- | ------------------------------------------------------------------------------------------- | ------------------------ |
| `PMW33XX_CS_PIN` | (Required) Sets the Chip Select pin connected to the sensor. | `POINTING_DEVICE_CS_PIN` |
| `PMW33XX_CS_PINS` | (Alternative) Sets the Chip Select pins connected to multiple sensors. | `{PMW33XX_CS_PIN}` |

View File

@@ -79,16 +79,6 @@ If you're using a custom transport (communication method), then you will also ne
SPLIT_TRANSPORT = custom
```
### Layout Macro
Configuring your layout in a split keyboard works slightly differently to a non-split keyboard. Take for example the following layout. The top left numbers refer to the matrix row and column, and the bottom right are the order of the keys in the layout:
![Physical layout](https://i.imgur.com/QeY6kMQ.png)
Since the matrix scanning procedure operates on entire rows, it first populates the left half's rows, then the right half's. Thus, the matrix as QMK views it has double the rows instead of double the columns:
![Matrix](https://i.imgur.com/4wjJzBU.png)
### Setting Handedness
By default, the firmware does not know which side is which; it needs some help to determine that. There are several ways to do this, listed in order of precedence.

View File

@@ -106,9 +106,6 @@ jobs:
steps:
- name: Disable git safe directory checks
run : git config --global --add safe.directory '*'
- name: Checkout QMK
uses: actions/checkout@v3
with:

View File

@@ -56,17 +56,11 @@ QMK maintains a Homebrew tap and formula which will automatically install the CL
You will need to install Homebrew. Follow the instructions on https://brew.sh.
!> **NOTE:** If you are using Apple Silicon, such as the M1, you will need to install a rosetta compatible version of Homebrew. This version does not override the base Homebrew. This can be done by running `arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"`. See here: [Rosetta-compatible Homebrew](https://stackoverflow.com/questions/64882584/how-to-run-the-homebrew-installer-under-rosetta-2-on-m1-macbook)
#### Installation
Install the QMK CLI by running:
brew install qmk/qmk/qmk
Install the QMK CLI on an Apple Silicon Mac by running:
arch -x86_64 brew install qmk/qmk/qmk
### ** Linux/WSL **

View File

@@ -150,8 +150,6 @@ In the above example,
* It must conform to the [layout guidelines](hardware_keyboard_guidelines.md#ltkeyboard_namehgt)
* `"matrix": [0, 0]` defines the electrical position
?> See also: [Split Keyboard Layout Macro](https://docs.qmk.fm/#/feature_split_keyboard?id=layout-macro) and [Matrix to Physical Layout](https://docs.qmk.fm/#/understanding_qmk?id=matrix-to-physical-layout-map).
## Additional Configuration
There are a lot of features that can be turned on or off, configured or tuned. Some of these have yet to be migrated over to [Data Driven Configuration](data_driven_config.md). The following sections cover the process for when an `info.json` option is unavailable.

View File

@@ -69,25 +69,15 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
- If the keyboard has multiple electrical/switch layouts:
- include a `LAYOUT_all` which specifies all possible layout positions in the electrical matrix
- use alternate layout names for all other possible layouts, preferring community layout names if an equivalent is available (e.g. `LAYOUT_tkl_ansi`, `LAYOUT_ortho_4x4` etc.)
- Microcontroller and bootloader
- Diode Direction (if not using direct pins)
- the following are required to be configured in `info.json` if necessary
- Direct pin configuration
- Backlight Configuration (where applicable)
- Split keyboard configuration (where applicable)
- Encoder Configuration
- Bootmagic Configuration
- LED Indicator Configuration
- `readme.md`
- must follow the [template](https://github.com/qmk/qmk_firmware/blob/master/data/templates/keyboard/readme.md)
- standard template should be present -- [link to template](https://github.com/qmk/qmk_firmware/blob/master/data/templates/keyboard/readme.md)
- flash command is present, and has `:flash` at end
- valid hardware availability link (unless handwired) -- private groupbuys are okay, but one-off prototypes will be questioned. If open-source, a link to files should be provided.
- clear instructions on how to reset the board into bootloader mode
- a picture about the keyboard and preferably about the PCB, too
- images are not to be placed in the `qmk_firmware` repository
- images should be uploaded to an external image hosting service, such as [imgur](https://imgur.com/).
- if imgur is used, images should be resized appropriately: append "h" to the image url i.e. [https://i.imgur.com/vqgE7Ok.jpg](https://i.imgur.com/vqgE7Ok.jpg) becomes [https://i.imgur.com/vqgE7Ok**h**.jpg](https://i.imgur.com/vqgE7Okh.jpg)
- image links should link directly to the image, not a "preview" -- i.e. [https://imgur.com/vqgE7Ok](https://imgur.com/vqgE7Ok) should be [https://i.imgur.com/vqgE7Okh.jpg](https://i.imgur.com/vqgE7Okh.jpg) when using imgur
- if imgur is used, images should be resized appropriately: append "h" to the image url i.e. `https://i.imgur.com/vqgE7Ok.jpg` becomes `https://i.imgur.com/vqgE7Okh.jpg`
- `rules.mk`
- removed `MIDI_ENABLE`, `FAUXCLICKY_ENABLE` and `HD44780_ENABLE`
- modified `# Enable Bluetooth with the Adafruit EZ-Key HID` -> `# Enable Bluetooth`
@@ -98,17 +88,11 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
- `COMBO_ENABLE`
- `ENCODER_MAP_ENABLE`
- keyboard `config.h`
- don't repeat `MANUFACTURER` in the `PRODUCT` value
- no `#define DESCRIPTION`
- no Magic Key Options, MIDI Options or HD44780 configuration
- user preference configurable `#define`s need to be moved to keymap `config.h`
- default values should not be redefined, such as `DEBOUNCE`, RGB related settings, etc.
- feature specific documentation contains most default values
- `grep` or alternative tool can be used to search for default values in core directories (e.g. `grep -r "define DEBOUNCE" quantum`)
- no copy/pasted comment blocks explaining a feature and/or its caveats -- this is what the docs are for
- `Force NKRO to be enabled ... toggled again during a power-up`
- commented-out unused defines, such as RGB effects
- no `#include "config_common.h`
- no `#define MATRIX_ROWS/COLS`, unless necessary (e.g. a keyboard with a custom matrix)
- "`DEBOUNCE`" instead of "`DEBOUNCING_DELAY`"
- bare minimum required code for a board to boot into QMK should be present
- initialisation code for the matrix and critical devices
- mirroring existing functionality of a commercial board (like custom keycodes and special animations etc.) should be handled through non-`default` keymaps
@@ -120,26 +104,31 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
- `matrix_init_board()` etc. migrated to `keyboard_pre_init_kb()`, see: [keyboard_pre_init*](custom_quantum_functions.md?id=keyboard_pre_init_-function-documentation)
- prefer `CUSTOM_MATRIX = lite` if custom matrix used, allows for standard debounce, see [custom matrix 'lite'](custom_matrix.md?id=lite)
- prefer LED indicator [Configuration Options](feature_led_indicators.md?id=configuration-options) to custom `led_update_*()` implementations where possible
- hardware that's enabled at the keyboard level and requires configuration such as OLED displays or encoders should have basic functionality implemented here
- Encoder support should not require any keyboard-level code, and associated keymaps should now leverage the [Encoder Map](feature_encoders.md?id=encoder-map) feature instead.
- `<keyboard>.h`
- `#include "quantum.h"` appears at the top
- `LAYOUT` macros should be moved to `info.json`
- keymap `config.h`
- no duplication of `rules.mk` or `config.h` from keyboard
- `keymaps/default/keymap.c`
- `QMKBEST`/`QMKURL` example macros removed
- if using `MO(1)` and `MO(2)` keycodes together to access a third layer, the [Tri Layer](https://docs.qmk.fm/#/feature_tri_layer) feature should be used, rather than manually implementing this using `layer_on/off()` and `update_tri_layer()` functions in the keymap's `process_record_user()`.
- `QMKBEST`/`QMKURL` removed
- if using `MO(_LOWER)` and `MO(_RAISE)` keycodes or equivalent, and the keymap has an adjust layer when holding both keys -- if the keymap has no "direct-to-adjust" keycode (such as `MO(_ADJUST)`) then you should prefer to write...
```
layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
```
...instead of manually handling `layer_on()`, `update_tri_layer()` inside the keymap's `process_record_user()`.
- default (and via) keymaps should be "pristine"
- bare minimum to be used as a "clean slate" for another user to develop their own user-specific keymap
- standard layouts preferred in these keymaps, if possible
- should use [encoder map feature](https://docs.qmk.fm/#/feature_encoders?id=encoder-map), rather than `encoder_update_user()`
- default keymap should not enable VIA -- the VIA integration documentation requires a keymap called `via`
- submitters can have a personal (or bells-and-whistles) keymap showcasing capabilities in the same PR but it shouldn't be embedded in the 'default' keymap
- submitters can also have a "manufacturer-matching" keymap that mirrors existing functionality of the commercial product, if porting an existing board
- Do not include VIA json files in the PR. These do not belong in the QMK repository as they are not used by QMK firmware -- they belong in the [VIA Keyboard Repo](https://github.com/the-via/keyboards)
- Do not include KLE json files in the PR. These have no use within QMK.
- Do not include source files from another keyboard or vendors keyboard folder. Including core files is fine.
- For instance, only `wilba_tech` boards shall include `keyboards/wilba_tech/wt_main.c` and `keyboards/wilba_tech/wt_rgb_backlight.c`. But including `drivers/sensors/pmw3360.c` is absolutely fine for any and all boards that require it.
- For instance, only `wilba_tech` boards shall include `keyboards/wilba_tech/wt_main.c` and `keyboards/wilba_tech/wt_rgb_backlight.c`. But including `drivers/sensors/pmw3360.c` is absolutely fine for any and all boards.
- Code that needs to be used by multiple boards is a candidate for core code changes, and should be separated out.
Also, specific to ChibiOS:
@@ -156,13 +145,7 @@ Also, specific to ChibiOS:
## Core PRs :id=core-pr
- all core PRs must now target `develop` branch, which will subsequently be merged back to `master` on the breaking changes timeline
- as indicated above, the smallest set of changes to core components should be included in each PR
- PRs containing multiple areas of change will be asked to be split up and raised separately
- keyboard and keymap changes should only be included if they affect base keyboard builds, or the default-like `default`, `via`, `default_????` keymaps etc.
- keymap modifications for anything other than the default-like keymaps **should not be included in the initial PR** in order to simplify the review process
- the core PR submitter should submit a followup PR affecting other keymaps after initial PR merge
- large-scale refactoring or consolidation PRs that affect other keymaps (such as renaming keycodes) should always be raised separately
- must now target `develop` branch, which will subsequently be merged back to `master` on the breaking changes timeline
- any new boards adding support for new hardware now requires a corresponding test board under `keyboards/handwired/onekey`
- for new MCUs, a new "child" keyboard should be added that targets your newly-added MCU, so that builds can be verified
- for new hardware support such as display panels, core-side matrix implementations, or other peripherals, an associated keymap should be provided

View File

@@ -252,6 +252,7 @@ The following animations can be enabled:
|Key |Description |
|-----------------|--------------------------------------|
|`all` |Enable all additional animation modes.|
|`alternating` |Enable alternating animation mode. |
|`breathing` |Enable breathing animation mode. |
|`christmas` |Enable christmas animation mode. |

View File

@@ -1,44 +0,0 @@
# Feature support policies
## System Constraints
In general, feature development is encouraged to support as many hardware configurations as possible. Depending on system constraints this may not always be achievable, and is usually bound by microcontroller flash and RAM capabilities.
The most frequently-hit constraint is the amount of code that can be flashed onto an ATmega32U4 -- users almost always need to pick and choose included functionality due to the size constraints.
!> [Squeezing AVR](https://docs.qmk.fm/#/squeezing_avr) has some steps that users can take in order to minimise the overall firmware size, which in some cases enables the ability for users to include other desired features.
## Deprecation & Removal Policy
QMK Firmware strives for innovation wherever possible. With ongoing feature development and other improvements made to the codebase, sometimes the retirement of outdated, under-utilised, or limited-value functionality is selected for deprecation and subsequent removal.
The intent behind feature deprecation is to maintain and/or improve quality. As a result, perpetually supporting under-utilised features would negatively impact the QMK team's ability to improve other areas of QMK Firmware.
There may be several motivations behind the deprecation or removal of functionality (keeping in mind that this list is not exhaustive):
* Better alternatives have already been implemented
* Lack of adherence to standards
* Poor support from code owners or upstream maintainers
* Poor design
* Hardware constraints
* Minimal use within the QMK Firmware repository
* Copyright disputes
* Bit-rot
When a feature is selected for deprecation, future changes to that area will cease to be developed by the QMK team, and Pull Requests submitted against those areas will be declined.
?> As QMK does not gather metrics from its users, the only way the QMK team can gauge the level of usage is to refer to the main QMK Firmware repository -- searching through forks is not practical due to the sheer number of them.
### How much advance notice will be given?
Disregarding emergencies or other high-risk concerns, deprecation of large features or entire subsystems within QMK will be communicated on the `develop` branch at least one breaking changes cycle (3 months) before removal. Advance notice may be extended for higher impact features, and is at the discretion of the QMK team.
Smaller features may be removed within a breaking changes cycle, and will generally be based on the level of use within the repository. Features with minimal use may be selected for removal at any time on the `develop` branch.
Third-party software libraries leveraged by QMK are generally forked to mitigate disappearance upstream. If the upstream repository is removed, it will generally be replaced when practical, or dependent features will be removed as per the normal deprecation policy.
### How will deprecation be communicated?
Every breaking changes merge from `develop` into `master` is accompanied by a changelog document -- intended and completed deprecations will be communicated here.
In addition, wherever possible warnings will be issued during firmware compilation when deprecated features are still being used.

View File

@@ -1,22 +0,0 @@
// Copyright 2023 Conor Burns (@Conor-Burns)
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define RGB_DI_PIN D0
#define RGB_MATRIX_LED_COUNT 18
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_BREATHING
#define RGB_MATRIX_DEFAULT_HUE 152
#define RGB_MATRIX_DEFAULT_SAT 232
#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
#define RGB_MATRIX_DEFAULT_SPD 50
#define ENABLE_RGB_MATRIX_BREATHING
#define ENABLE_RGB_MATRIX_SOLID_COLOR
#define ENABLE_RGB_MATRIX_BAND_SAT
#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
#define ENABLE_RGB_MATRIX_CYCLE_ALL
#define ENABLE_RGB_MATRIX_RAINDROPS
#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT

View File

@@ -1,153 +0,0 @@
{
"manufacturer": "Freya",
"keyboard_name": "splaytoraid",
"maintainer": "freya-irl",
"url": "https://github.com/freya-irl/splaytoraid40",
"development_board": "promicro",
"bootloader": "qmk-dfu",
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["F5", "F6", "F7", "F4", "B3", "B1", "B2"],
"rows": ["D3", "D2", "D1", "D4", "D7", "E6", "B4", "C6"]
},
"usb": {
"device_version": "1.0.0",
"pid": "0xCB00",
"vid": "0x2004"
},
"features": {
"extrakey": true,
"rgb_matrix": true,
"bootmagic": true,
"console": true,
"mousekey": true,
"nkro": true
},
"bootmagic": {
"matrix": [1, 0]
},
"build": {
"lto": true
},
"encoder": {
"enabled": true,
"rotary": [
{
"pin_a": "B5",
"pin_b": "B6",
"resolution": 4
}
]
},
"rgb_matrix": {
"driver": "WS2812",
"layout": [
{ "flags": 4, "matrix": [0, 2], "x": 0, "y": 0 },
{ "flags": 4, "matrix": [1, 0], "x": 20, "y": 0 },
{ "flags": 4, "matrix": [7, 0], "x": 61, "y": 0 },
{ "flags": 4, "matrix": [7, 1], "x": 163, "y": 0 },
{ "flags": 4, "matrix": [5, 0], "x": 203, "y": 0 },
{ "flags": 4, "matrix": [4, 2], "x": 224, "y": 0 },
{ "flags": 4, "matrix": [6, 2], "x": 0, "y": 21 },
{ "flags": 4, "matrix": [6, 1], "x": 224, "y": 21 },
{ "flags": 4, "matrix": [3, 3], "x": 20, "y": 43 },
{ "flags": 4, "matrix": [7, 3], "x": 61, "y": 43 },
{ "flags": 4, "matrix": [6, 4], "x": 163, "y": 43 },
{ "flags": 4, "matrix": [6, 3], "x": 203, "y": 43 },
{ "flags": 4, "matrix": [4, 3], "x": 61, "y": 64 },
{ "flags": 4, "matrix": [5, 5], "x": 81, "y": 64 },
{ "flags": 4, "matrix": [7, 4], "x": 101, "y": 64 },
{ "flags": 4, "matrix": [7, 5], "x": 122, "y": 64 },
{ "flags": 4, "matrix": [1, 5], "x": 142, "y": 64 },
{ "flags": 4, "matrix": [0, 3], "x": 163, "y": 64 }
]
},
"layouts": {
"LAYOUT_36": {
"layout": [
{ "label": "K10", "matrix": [1, 0], "x": 0, "y": 0 },
{ "label": "K11", "matrix": [1, 1], "x": 1, "y": 0 },
{ "label": "K02", "matrix": [0, 2], "x": 2, "y": 0 },
{ "label": "K01", "matrix": [0, 1], "x": 3, "y": 0 },
{ "label": "K12", "matrix": [1, 2], "x": 4, "y": 0 },
{ "label": "K52", "matrix": [5, 2], "x": 6, "y": 0 },
{ "label": "K04", "matrix": [0, 4], "x": 7, "y": 0 },
{ "label": "K03", "matrix": [0, 3], "x": 8, "y": 0 },
{ "label": "K14", "matrix": [1, 4], "x": 9, "y": 0 },
{ "label": "K15", "matrix": [1, 5], "x": 10, "y": 0 },
{ "label": "K30", "matrix": [3, 0], "x": 0, "y": 1 },
{ "label": "K31", "matrix": [3, 1], "x": 1, "y": 1 },
{ "label": "K22", "matrix": [2, 2], "x": 2, "y": 1 },
{ "label": "K21", "matrix": [2, 1], "x": 3, "y": 1 },
{ "label": "K13", "matrix": [1, 3], "x": 4, "y": 1 },
{ "label": "K53", "matrix": [5, 3], "x": 6, "y": 1 },
{ "label": "K24", "matrix": [2, 4], "x": 7, "y": 1 },
{ "label": "K23", "matrix": [2, 3], "x": 8, "y": 1 },
{ "label": "K34", "matrix": [3, 4], "x": 9, "y": 1 },
{ "label": "K35", "matrix": [3, 5], "x": 10, "y": 1 },
{ "label": "K50", "matrix": [5, 0], "x": 0, "y": 2 },
{ "label": "K51", "matrix": [5, 1], "x": 1, "y": 2 },
{ "label": "K42", "matrix": [4, 2], "x": 2, "y": 2 },
{ "label": "K41", "matrix": [4, 1], "x": 3, "y": 2 },
{ "label": "K32", "matrix": [3, 2], "x": 4, "y": 2 },
{ "label": "K72", "matrix": [7, 2], "x": 6, "y": 2 },
{ "label": "K44", "matrix": [4, 4], "x": 7, "y": 2 },
{ "label": "K43", "matrix": [4, 3], "x": 8, "y": 2 },
{ "label": "K54", "matrix": [5, 4], "x": 9, "y": 2 },
{ "label": "K55", "matrix": [5, 5], "x": 10, "y": 2 },
{ "label": "K62", "matrix": [6, 2], "x": 2, "y": 3 },
{ "label": "K61", "matrix": [6, 1], "x": 3, "y": 3 },
{ "label": "K33", "matrix": [3, 3], "x": 4, "y": 3 },
{ "label": "K66", "matrix": [6, 6], "x": 5, "y": 3 },
{ "label": "K73", "matrix": [7, 3], "x": 6, "y": 3 },
{ "label": "K64", "matrix": [6, 4], "x": 7, "y": 3 },
{ "label": "K63", "matrix": [6, 3], "x": 8, "y": 3 }
]
},
"LAYOUT_40": {
"layout": [
{ "label": "K70", "matrix": [7, 0], "x": 0, "y": 0 },
{ "label": "K10", "matrix": [1, 0], "x": 1, "y": 0 },
{ "label": "K11", "matrix": [1, 1], "x": 2, "y": 0 },
{ "label": "K02", "matrix": [0, 2], "x": 3, "y": 0 },
{ "label": "K01", "matrix": [0, 1], "x": 4, "y": 0 },
{ "label": "K12", "matrix": [1, 2], "x": 5, "y": 0 },
{ "label": "K52", "matrix": [5, 2], "x": 7, "y": 0 },
{ "label": "K04", "matrix": [0, 4], "x": 8, "y": 0 },
{ "label": "K03", "matrix": [0, 3], "x": 9, "y": 0 },
{ "label": "K14", "matrix": [1, 4], "x": 10, "y": 0 },
{ "label": "K15", "matrix": [1, 5], "x": 11, "y": 0 },
{ "label": "K75", "matrix": [7, 5], "x": 12, "y": 0 },
{ "label": "K71", "matrix": [7, 1], "x": 0, "y": 1 },
{ "label": "K30", "matrix": [3, 0], "x": 1, "y": 1 },
{ "label": "K31", "matrix": [3, 1], "x": 2, "y": 1 },
{ "label": "K22", "matrix": [2, 2], "x": 3, "y": 1 },
{ "label": "K21", "matrix": [2, 1], "x": 4, "y": 1 },
{ "label": "K13", "matrix": [1, 3], "x": 5, "y": 1 },
{ "label": "K53", "matrix": [5, 3], "x": 7, "y": 1 },
{ "label": "K24", "matrix": [2, 4], "x": 8, "y": 1 },
{ "label": "K23", "matrix": [2, 3], "x": 9, "y": 1 },
{ "label": "K34", "matrix": [3, 4], "x": 10, "y": 1 },
{ "label": "K35", "matrix": [3, 5], "x": 11, "y": 1 },
{ "label": "K74", "matrix": [7, 4], "x": 12, "y": 1 },
{ "label": "K50", "matrix": [5, 0], "x": 1, "y": 2 },
{ "label": "K51", "matrix": [5, 1], "x": 2, "y": 2 },
{ "label": "K42", "matrix": [4, 2], "x": 3, "y": 2 },
{ "label": "K41", "matrix": [4, 1], "x": 4, "y": 2 },
{ "label": "K32", "matrix": [3, 2], "x": 5, "y": 2 },
{ "label": "K72", "matrix": [7, 2], "x": 7, "y": 2 },
{ "label": "K44", "matrix": [4, 4], "x": 8, "y": 2 },
{ "label": "K43", "matrix": [4, 3], "x": 9, "y": 2 },
{ "label": "K54", "matrix": [5, 4], "x": 10, "y": 2 },
{ "label": "K55", "matrix": [5, 5], "x": 11, "y": 2 },
{ "label": "K62", "matrix": [6, 2], "x": 3, "y": 3 },
{ "label": "K61", "matrix": [6, 1], "x": 4, "y": 3 },
{ "label": "K33", "matrix": [3, 3], "x": 5, "y": 3 },
{ "label": "K66", "matrix": [6, 6], "x": 6, "y": 3 },
{ "label": "K73", "matrix": [7, 3], "x": 7, "y": 3 },
{ "label": "K64", "matrix": [6, 4], "x": 8, "y": 3 },
{ "label": "K63", "matrix": [6, 3], "x": 9, "y": 3 }
]
}
}
}

View File

@@ -1,49 +0,0 @@
// Copyright 2023 Conor Burns (@Conor-Burns)
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include QMK_KEYBOARD_H
enum layer_names {
_BASE,
_LOWER,
_RAISE,
_ADJUST
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_40(
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_LSFT, KC_ESC, KC_ENT, KC_MPLY, KC_SPC, KC_DEL, KC_RSFT
),
[_LOWER] = LAYOUT_40(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
[_RAISE] = LAYOUT_40(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
[_ADJUST] = LAYOUT_40(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)
};
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_LOWER] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
[_RAISE] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
[_ADJUST] = { ENCODER_CCW_CW(KC_RGHT, KC_LEFT) }
};

View File

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

View File

@@ -1,21 +0,0 @@
// Copyright 2023 Dreipunkteinsvier (@dreipunkteinsvier)
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define TAPPING_TERM 180
// Prevent normal rollover on alphas from accidentally triggering mods.
#define IGNORE_MOD_TAP_INTERRUPT
#undef LOCKING_SUPPORT_ENABLE
#undef LOCKING_RESYNC_ENABLE
#ifdef COMBO_ENABLE
#define COMBO_COUNT 9
#define COMBO_TERM 20
#define COMBO_ONLY_FROM_LAYER 0
#endif
#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD

View File

@@ -1,304 +0,0 @@
// Copyright 2023 Dreipunkteinsvier (@dreipunkteinsvier)
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include QMK_KEYBOARD_H
#include <stdio.h>
#include <string.h>
// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
// │ D E F I N I T I O N S │
// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
enum splaytoraid40_layers {
_QWERTY,
_COLEMAK,
_NAVIGATION,
_MEDIA,
_NUMBERS,
_FUNCTION,
};
// ┌───────────────────────────────────────────────────────────┐
// │ d e f i n e k e y c o d e s │
// └───────────────────────────────────────────────────────────┘
enum custom_keycodes {
COLEMAK = SAFE_RANGE,
QWERTY
};
// ┌───────────────────────────────────────────────────────────┐
// │ d e f i n e m a c r o n a m e s │
// └───────────────────────────────────────────────────────────┘
// LEFT HAND HOME ROW MODS ├───────────────────────────────────┐
#define HM_A LGUI_T(KC_A)
#define HM_S LALT_T(KC_S)
#define HM_D LCTL_T(KC_D)
#define HM_F LSFT_T(KC_F)
#define HM_G RALT_T(KC_G)
// RIGHT HAND HOME ROW MODS ├──────────────────────────────────┐
#define HM_H RALT_T(KC_H)
#define HM_J RSFT_T(KC_J)
#define HM_K LCTL_T(KC_K)
#define HM_L LALT_T(KC_L)
#define HM_SCLN LGUI_T(KC_SCLN)
// CTRL + ARROWS ├─────────────────────────────────────────────┐
#define CT_LEFT LCTL(KC_LEFT)
#define CT_DOWN LCTL(KC_DOWN)
#define CT_UP LCTL(KC_UP)
#define CT_RGHT LCTL(KC_RGHT)
// THUMB KEY LAYER TAPS ├──────────────────────────────────────┐
#define TB_TAB LT(_MEDIA, KC_TAB)
#define TB_ENT LT(_NAVIGATION, KC_ENT)
#define TB_SPC LT(_NUMBERS, KC_SPC)
#define TB_BSPC LT(_FUNCTION, KC_BSPC)
// ┌───────────────────────────────────────────────────────────┐
// │ d e f i n e c o m b o s │
// └───────────────────────────────────────────────────────────┘
// vertical combos for umlauts
const uint16_t PROGMEM ae_combo[] = {KC_Q, HM_A, COMBO_END};
const uint16_t PROGMEM ss_combo[] = {KC_W, HM_S, COMBO_END};
const uint16_t PROGMEM ue_combo[] = {KC_U, HM_J, COMBO_END};
const uint16_t PROGMEM oe_combo[] = {KC_O, HM_L, COMBO_END};
// horizontal combos for mods
const uint16_t PROGMEM del_combo[] = {HM_H, HM_J, COMBO_END};
const uint16_t PROGMEM bsp_combo[] = {HM_J, HM_K, COMBO_END};
const uint16_t PROGMEM ent_combo[] = {HM_K, HM_L, COMBO_END};
const uint16_t PROGMEM tab_combo[] = {HM_F, HM_D, COMBO_END};
const uint16_t PROGMEM esc_combo[] = {HM_D, HM_S, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {
COMBO(ae_combo, RALT(KC_Q)),
COMBO(ss_combo, RALT(KC_S)),
COMBO(ue_combo, RALT(KC_Y)),
COMBO(oe_combo, RALT(KC_P)),
COMBO(del_combo, KC_DEL),
COMBO(bsp_combo, KC_BSPC),
COMBO(ent_combo, KC_ENT),
COMBO(tab_combo, KC_TAB),
COMBO(esc_combo, KC_ESC)
};
// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
// │ K E Y M A P S │
// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
┌───────────────────────────────────────────────────────────┐
│ q w e r t y │
└───────────────────────────────────────────────────────────┘
┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
│ Q │ W │ E │ R │ T │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ Y │ U │ I │ O │ P │
├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
│ A │ S │ D │ F │ G ├─╯ ╰─┤ H │ J │ K │ L │ ; │
├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
│ Z │ X │ C │ V │ B ││ ││ ││ N │ M │ , │ . │ / │
└─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
│ ESC │ TAB │ ENTER │ │ SPACE │ BSPACE │ DEL │
└─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
[_QWERTY] = LAYOUT_36(
//╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
HM_A, HM_S, HM_D, HM_F, HM_G, HM_H, HM_J, HM_K, HM_L, HM_SCLN,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_ESC, TB_TAB, TB_ENT, KC_MPLY, TB_SPC, TB_BSPC, KC_DEL
),
/*
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
┌───────────────────────────────────────────────────────────┐
│ c o l e m a k │
└───────────────────────────────────────────────────────────┘
┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
│ Q │ W │ F │ P │ G │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ J │ L │ U │ Y │ ; │
├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
│ A │ R │ S │ T │ D ├─╯ ╰─┤ H │ N │ E │ I │ O │
├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
│ Z │ X │ C │ V │ B ││ ││ ││ K │ M │ , │ . │ / │
└─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
│ ESC │ TAB │ ENTER │ │ SPACE │ BSPACE │ DEL │
└─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
[_COLEMAK] = LAYOUT_36(
//╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,
KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_ESC, TB_TAB, TB_ENT, _______, TB_SPC, TB_BSPC, KC_DEL
),
/*
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
┌───────────────────────────────────────────────────────────┐
│ n a v i g a t i o n │
└───────────────────────────────────────────────────────────┘
┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
│ │ │ │ │ { │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ } │ CTRL ← │ CTRL ↓ │ CTRL ↑ │ CTRL → │
├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
│ │ │ │ │ ( ├─╯ ╰─┤ ) │ ← │ ↓ │ ↑ │ → │
├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
│ │ │ │ │ [ ││ ││ ││ ] │ HOME │ PG↓ │ PG↑ │ END │
└─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
│ │ │ │ │ │ │ │
└─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
[_NAVIGATION] = LAYOUT_36(
//╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
_______, _______, _______, _______, KC_LCBR, KC_RCBR, CT_LEFT, CT_DOWN, CT_UP, CT_RGHT,
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_LPRN, KC_RPRN, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
_______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_HOME, KC_PGDN, KC_PGUP, KC_END,
_______, _______, _______, _______, _______, _______, _______
),
/*
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
┌───────────────────────────────────────────────────────────┐
│ m e d i a & s y m b o l │
└───────────────────────────────────────────────────────────┘
┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
│ _ │ & │ * │ ( │ ) │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
│ + │ $ │ % │ ^ │ " ├─╯ ╰─┤ │ │ │ │ │
├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
│ ~ │ ! │ @ │ # │ | ││ ││ ││ │ │ │ │ │
└─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
│ │ │ │ │ │ │ │
└─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
[_MEDIA] = LAYOUT_36(
//╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
KC_UNDS, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI,
KC_PLUS, KC_DLR, KC_PERC, KC_CIRC, KC_DQUO, RGB_M_P, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD,
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, QWERTY, COLEMAK, _______, _______, QK_BOOTLOADER,
_______, _______, _______, _______, _______, _______, _______
),
/*
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
┌───────────────────────────────────────────────────────────┐
│ n u m b e r s │
└───────────────────────────────────────────────────────────┘
┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
│ - │ 7 │ 8 │ 9 │ 0 │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
│ = │ 4 │ 5 │ 6 │ ' ├─╯ ╰─┤ │ │ │ │ │
├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
│ ` │ 1 │ 2 │ 3 │ \ ││ ││ ││ │ │ │ │ │
└─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
│ │ │ │ │ │ │ │
└─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
[_NUMBERS] = LAYOUT_36(
//╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
KC_MINS, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, _______, _______,
KC_EQL, KC_4, KC_5, KC_6, KC_QUOT, KC_RALT, KC_RSFT, KC_LCTL, KC_LALT, KC_LGUI,
KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
/*
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
┌───────────────────────────────────────────────────────────┐
│ f u n t i o n │
└───────────────────────────────────────────────────────────┘
┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
│ F12 │ F7 │ F8 │ F9 │ PRT SCR │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
│ F11 │ F4 │ F5 │ F6 │ ├─╯ ╰─┤ │ │ │ │ │
├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
│ F10 │ F1 │ F2 │ F3 │ INS ││ ││ ││ │ │ │ │ │
└─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
│ │ │ │ │ │ │ │
└─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
[_FUNCTION] = LAYOUT_36(
//╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, _______, _______, _______, _______, _______,
KC_F11, KC_F4, KC_F5, KC_F6, _______, KC_RALT, KC_RSFT, KC_LCTL, KC_LALT, KC_LGUI,
KC_F10, KC_F1, KC_F2, KC_F3, KC_INS, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)
/*
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
┌───────────────────────────────────────────────────────────┐
│ t e m p l a t e │
└───────────────────────────────────────────────────────────┘
┌─────────┬─────────┬─────────┬─────────┬─────────┐ ┌─────────┬─────────┬─────────┬─────────┬─────────┐
│ │ │ │ │ │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │ │ │ │ │ │
├─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┤
│ │ │ │ │ ├─╯ ╰─┤ │ │ │ │ │
├─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┤
│ │ │ │ │ ││ ││ ││ │ │ │ │ │
└─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┘
│ │ │ │ │ │ │ │
└─────────┴─────────┴─────────┘ └─────────┴─────────┴─────────┘ */
/*
[_TEMPLATE] = LAYOUT_saegewerk(
//╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)*/
};
// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
// │ D I E S U N D D A S │
// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
bool caps_word_press_user(uint16_t keycode) {
switch (keycode) {
// Keycodes that continue Caps Word, with shift applied.
case KC_A ... KC_Z:
add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to the next key.
return true;
// Keycodes that continue Caps Word, without shifting.
case KC_1 ... KC_0:
case KC_BSPC:
case KC_DEL:
case KC_MINS:
case KC_UNDS:
case KC_LSFT:
case KC_RSFT:
return true;
default:
return false; // Deactivate Caps Word.
}
}
// ┌───────────────────────────────────────────────────────────┐
// │ e n c o d e r │
// └───────────────────────────────────────────────────────────┘
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[_NAVIGATION] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT) },
[_QWERTY] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_COLEMAK] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_MEDIA] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_NUMBERS] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_FUNCTION] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
};

View File

@@ -1,3 +0,0 @@
COMBO_ENABLE = yes
CAPS_WORD_ENABLE = yes
ENCODER_MAP_ENABLE = yes

View File

@@ -1,48 +0,0 @@
// Copyright 2023 Conor Burns (@Conor-Burns)
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include QMK_KEYBOARD_H
enum layer_names {
_BASE,
_LOWER,
_RAISE,
_ADJUST
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_40(
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_LSFT, KC_ESC, KC_ENT, KC_MPLY, KC_SPC, KC_DEL, KC_RSFT
),
[_LOWER] = LAYOUT_40(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
[_RAISE] = LAYOUT_40(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
[_ADJUST] = LAYOUT_40(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)
};
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_LOWER] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
[_RAISE] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
[_ADJUST] = { ENCODER_CCW_CW(KC_RGHT, KC_LEFT) }
};

View File

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

View File

@@ -1,36 +0,0 @@
# splaytoraid
![splaytoraid](https://i.imgur.com/N85DPHGh.png)
A 40% ergonomic keyboard with a stacked acrylic case and RGB underglow.
* Keyboard Maintainer: [freya](https://github.com/freya-irl)
* Hardware Supported: PCB kit and Pro Micro compatible controller
* Hardware Availability: [here](https://keeb.supply/products/splaytoraid-messenger-edition)
Make example for this keyboard (after setting up your build environment):
make 0xcb/splaytoraid:default
make 0xcb/splaytoraid/32u4:default
Flashing example for this keyboard:
make 0xcb/splaytoraid:default:flash
make 0xcb/splaytoraid/32u4:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the left top 4. col key (usually Escape) and plug in the keyboard
* **Physical reset button**: Press the button on the controller (Helios) for more than 500ms or just press it (Pluto)
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
Please note that the default bootloader for the `32u4` version is QMK DFU, for compatibility with [0xCB Pluto](https://github.com/0xCB-dev/0xCB-Pluto). Generic Pro Micros often use a different bootloader, such as `caterina`.
If the incorrect bootloader is specified, bootmagic reset and the `QK_BOOT` keycode will not work.
To avoid this problem, set the correct bootloader in your custom keymap's `rules.mk` file before compiling, or flash using an appropriate target (ex: `make 0xcb/splaytoraid/32u4:default:avrdude`). See [flashing instructions and bootloader information](https://docs.qmk.fm/#/flashing) for more details.

View File

@@ -1,25 +0,0 @@
// Copyright 2023 Conor Burns (@Conor-Burns)
/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_MATRIX_KEYPRESSES
#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
#define ENABLE_RGB_MATRIX_PIXEL_RAIN
#define ENABLE_RGB_MATRIX_DUAL_BEACON
#define ENABLE_RGB_MATRIX_HUE_BREATHING
#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
#define ENABLE_RGB_MATRIX_SPLASH
#define ENABLE_RGB_MATRIX_MULTISPLASH
#define ENABLE_RGB_MATRIX_SOLID_SPLASH

View File

@@ -1,3 +0,0 @@
# rp2040_ce
This folder is set as default in the parent rules.mk - it will build firmware compatible with the RP2040 Community Edition. See [here](https://docs.qmk.fm/#/platformdev_rp2040?id=rp2040_ce) for a list.

View File

@@ -1,2 +0,0 @@
WS2812_DRIVER = vendor
CONVERT_TO = rp2040_ce

View File

@@ -1 +0,0 @@
DEFAULT_FOLDER = 0xcb/splaytoraid/rp2040_ce

View File

@@ -3,14 +3,26 @@
#pragma once
#define OLED_DISPLAY_128X32
#define DYNAMIC_KEYMAP_LAYER_COUNT 10
#ifdef OLED_ENABLE
# define OLED_DISPLAY_128X32
#define I2C1_SCL_PIN GP17
#define I2C1_SDA_PIN GP16
#define I2C_DRIVER I2CD0
#define OLED_BRIGHTNESS 128
#define OLED_FONT_H "keyboards/1upkeyboards/pi40/lib/glcdfont.c"
#endif
#define DIODE_DIRECTION COL2ROW
#define MATRIX_ROW_PINS { GP21, GP20, GP19, GP18 }
#define MATRIX_COL_PINS { GP1, GP2, GP3, GP4, GP5, GP6, GP7, GP8, GP9, GP10, GP11, GP12 }
#define RGB_DI_PIN GP0
#define RGB_MATRIX_LED_COUNT 47
#define RGBLED_NUM 47
# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
# define RGBLIGHT_LIMIT_VAL 150

View File

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

View File

@@ -1,149 +0,0 @@
{
"keyboard_name": "pi40",
"manufacturer": "1upkeyboards",
"maintainer": "ziptyze",
"processor": "RP2040",
"bootloader": "rp2040",
"usb": {
"vid": "0x6F75",
"pid": "0x5600",
"device_version": "1.1.0"
},
"diode_direction": "COL2ROW",
"dynamic_keymap": {
"layer_count": 10
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": false,
"rgb_matrix": true,
"rgblight": false
},
"matrix_pins": {
"rows": [ "GP21", "GP20", "GP19", "GP18" ],
"cols": [ "GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP22" ]
},
"encoder": {
"enabled": true,
"rotary": [
{
"pin_a": "GP14",
"pin_b": "GP13"
}
]
},
"rgb_matrix": {
"driver": "WS2812",
"layout": [
{ "flags": 1, "matrix": [0, 0], "x": 9, "y": 8 },
{ "flags": 4, "matrix": [0, 1], "x": 28, "y": 8 },
{ "flags": 4, "matrix": [0, 2], "x": 46, "y": 8 },
{ "flags": 4, "matrix": [0, 3], "x": 65, "y": 8 },
{ "flags": 4, "matrix": [0, 4], "x": 84, "y": 8 },
{ "flags": 4, "matrix": [0, 5], "x": 102, "y": 8 },
{ "flags": 4, "matrix": [0, 6], "x": 121, "y": 8 },
{ "flags": 4, "matrix": [0, 7], "x": 140, "y": 8 },
{ "flags": 4, "matrix": [0, 8], "x": 159, "y": 8 },
{ "flags": 4, "matrix": [0, 9], "x": 177, "y": 8 },
{ "flags": 4, "matrix": [0, 10], "x": 196, "y": 8 },
{ "flags": 1, "matrix": [0, 11], "x": 215, "y": 8 },
{ "flags": 1, "matrix": [1, 11], "x": 215, "y": 24 },
{ "flags": 4, "matrix": [1, 10], "x": 196, "y": 24 },
{ "flags": 4, "matrix": [1, 9], "x": 177, "y": 24 },
{ "flags": 4, "matrix": [1, 8], "x": 159, "y": 24 },
{ "flags": 4, "matrix": [1, 7], "x": 140, "y": 24 },
{ "flags": 4, "matrix": [1, 6], "x": 121, "y": 24 },
{ "flags": 4, "matrix": [1, 5], "x": 102, "y": 24 },
{ "flags": 4, "matrix": [1, 4], "x": 84, "y": 24 },
{ "flags": 4, "matrix": [1, 3], "x": 65, "y": 24 },
{ "flags": 4, "matrix": [1, 2], "x": 46, "y": 24 },
{ "flags": 4, "matrix": [1, 1], "x": 28, "y": 24 },
{ "flags": 1, "matrix": [1, 0], "x": 9, "y": 24 },
{ "flags": 1, "matrix": [2, 0], "x": 9, "y": 40 },
{ "flags": 4, "matrix": [2, 1], "x": 28, "y": 40 },
{ "flags": 4, "matrix": [2, 2], "x": 46, "y": 40 },
{ "flags": 4, "matrix": [2, 3], "x": 65, "y": 40 },
{ "flags": 4, "matrix": [2, 4], "x": 84, "y": 40 },
{ "flags": 4, "matrix": [2, 5], "x": 102, "y": 40 },
{ "flags": 4, "matrix": [2, 6], "x": 121, "y": 40 },
{ "flags": 4, "matrix": [2, 7], "x": 140, "y": 40 },
{ "flags": 4, "matrix": [2, 8], "x": 159, "y": 40 },
{ "flags": 4, "matrix": [2, 9], "x": 177, "y": 40 },
{ "flags": 4, "matrix": [2, 10], "x": 196, "y": 40 },
{ "flags": 1, "matrix": [2, 11], "x": 215, "y": 40 },
{ "flags": 1, "matrix": [3, 11], "x": 215, "y": 56 },
{ "flags": 1, "matrix": [3, 10], "x": 196, "y": 56 },
{ "flags": 1, "matrix": [3, 9], "x": 177, "y": 56 },
{ "flags": 1, "matrix": [3, 8], "x": 159, "y": 56 },
{ "flags": 1, "matrix": [3, 7], "x": 140, "y": 56 },
{ "flags": 1, "matrix": [3, 6], "x": 121, "y": 56 },
{ "flags": 1, "matrix": [3, 4], "x": 84, "y": 56 },
{ "flags": 1, "matrix": [3, 3], "x": 65, "y": 56 },
{ "flags": 1, "matrix": [3, 2], "x": 46, "y": 56 },
{ "flags": 1, "matrix": [3, 1], "x": 28, "y": 56 },
{ "flags": 1, "matrix": [3, 0], "x": 9, "y": 56 },
{ "flags": 1, "matrix": [3, 5], "x": 102, "y": 56 }
]
},
"layouts": {
"LAYOUT_ortho_4x12": {
"layout": [
{ "matrix": [0, 12], "x": 11, "y": 0 },
{ "matrix": [0, 0], "x": 0, "y": 1 },
{ "matrix": [0, 1], "x": 1, "y": 1 },
{ "matrix": [0, 2], "x": 2, "y": 1 },
{ "matrix": [0, 3], "x": 3, "y": 1 },
{ "matrix": [0, 4], "x": 4, "y": 1 },
{ "matrix": [0, 5], "x": 5, "y": 1 },
{ "matrix": [0, 6], "x": 6, "y": 1 },
{ "matrix": [0, 7], "x": 7, "y": 1 },
{ "matrix": [0, 8], "x": 8, "y": 1 },
{ "matrix": [0, 9], "x": 9, "y": 1 },
{ "matrix": [0, 10], "x": 10, "y": 1 },
{ "matrix": [0, 11], "x": 11, "y": 1 },
{ "matrix": [1, 0], "x": 0, "y": 2 },
{ "matrix": [1, 1], "x": 1, "y": 2 },
{ "matrix": [1, 2], "x": 2, "y": 2 },
{ "matrix": [1, 3], "x": 3, "y": 2 },
{ "matrix": [1, 4], "x": 4, "y": 2 },
{ "matrix": [1, 5], "x": 5, "y": 2 },
{ "matrix": [1, 6], "x": 6, "y": 2 },
{ "matrix": [1, 7], "x": 7, "y": 2 },
{ "matrix": [1, 8], "x": 8, "y": 2 },
{ "matrix": [1, 9], "x": 9, "y": 2 },
{ "matrix": [1, 10], "x": 10, "y": 2 },
{ "matrix": [1, 11], "x": 11, "y": 2 },
{ "matrix": [2, 0], "x": 0, "y": 3 },
{ "matrix": [2, 1], "x": 1, "y": 3 },
{ "matrix": [2, 2], "x": 2, "y": 3 },
{ "matrix": [2, 3], "x": 3, "y": 3 },
{ "matrix": [2, 4], "x": 4, "y": 3 },
{ "matrix": [2, 5], "x": 5, "y": 3 },
{ "matrix": [2, 6], "x": 6, "y": 3 },
{ "matrix": [2, 7], "x": 7, "y": 3 },
{ "matrix": [2, 8], "x": 8, "y": 3 },
{ "matrix": [2, 9], "x": 9, "y": 3 },
{ "matrix": [2, 10], "x": 10, "y": 3 },
{ "matrix": [2, 11], "x": 11, "y": 3 },
{ "matrix": [3, 0], "x": 0, "y": 4 },
{ "matrix": [3, 1], "x": 1, "y": 4 },
{ "matrix": [3, 2], "x": 2, "y": 4 },
{ "matrix": [3, 3], "x": 3, "y": 4 },
{ "matrix": [3, 4], "x": 4, "y": 4 },
{ "matrix": [3, 5], "x": 5, "y": 4 },
{ "matrix": [3, 6], "x": 6, "y": 4 },
{ "matrix": [3, 7], "x": 7, "y": 4 },
{ "matrix": [3, 8], "x": 8, "y": 4 },
{ "matrix": [3, 9], "x": 9, "y": 4 },
{ "matrix": [3, 10], "x": 10, "y": 4 },
{ "matrix": [3, 11], "x": 11, "y": 4 }
]
}
}
}

View File

@@ -0,0 +1,123 @@
{
"keyboard_name": "pi40",
"manufacturer": "1upkeyboards",
"usb": {
"vid": "0x6F75",
"pid": "0x5600",
"device_version": "0.0.1"
},
"encoder": {
"rotary": [
{"pin_a": "GP14", "pin_b": "GP13"}
]
},
"processor": "RP2040",
"bootloader": "rp2040",
"board": "GENERIC_RP_RP2040",
"layouts": {
"LAYOUT": {
"layout": [
{ "matrix": [3, 6], "x": 11, "y": 0 },
{ "matrix": [0, 0], "x": 0, "y": 1 },
{ "matrix": [0, 1], "x": 1, "y": 1 },
{ "matrix": [0, 2], "x": 2, "y": 1 },
{ "matrix": [0, 3], "x": 3, "y": 1 },
{ "matrix": [0, 4], "x": 4, "y": 1 },
{ "matrix": [0, 5], "x": 5, "y": 1 },
{ "matrix": [0, 6], "x": 6, "y": 1 },
{ "matrix": [0, 7], "x": 7, "y": 1 },
{ "matrix": [0, 8], "x": 8, "y": 1 },
{ "matrix": [0, 9], "x": 9, "y": 1 },
{ "matrix": [0, 10], "x": 10, "y": 1 },
{ "matrix": [0, 11], "x": 11, "y": 1 },
{ "matrix": [1, 0], "x": 0, "y": 2 },
{ "matrix": [1, 1], "x": 1, "y": 2 },
{ "matrix": [1, 2], "x": 2, "y": 2 },
{ "matrix": [1, 3], "x": 3, "y": 2 },
{ "matrix": [1, 4], "x": 4, "y": 2 },
{ "matrix": [1, 5], "x": 5, "y": 2 },
{ "matrix": [1, 6], "x": 6, "y": 2 },
{ "matrix": [1, 7], "x": 7, "y": 2 },
{ "matrix": [1, 8], "x": 8, "y": 2 },
{ "matrix": [1, 9], "x": 9, "y": 2 },
{ "matrix": [1, 10], "x": 10, "y": 2 },
{ "matrix": [1, 11], "x": 11, "y": 2 },
{ "matrix": [2, 0], "x": 0, "y": 3 },
{ "matrix": [2, 1], "x": 1, "y": 3 },
{ "matrix": [2, 2], "x": 2, "y": 3 },
{ "matrix": [2, 3], "x": 3, "y": 3 },
{ "matrix": [2, 4], "x": 4, "y": 3 },
{ "matrix": [2, 5], "x": 5, "y": 3 },
{ "matrix": [2, 6], "x": 6, "y": 3 },
{ "matrix": [2, 7], "x": 7, "y": 3 },
{ "matrix": [2, 8], "x": 8, "y": 3 },
{ "matrix": [2, 9], "x": 9, "y": 3 },
{ "matrix": [2, 10], "x": 10, "y": 3 },
{ "matrix": [2, 11], "x": 11, "y": 3 },
{ "matrix": [3, 0], "x": 0, "y": 4 },
{ "matrix": [3, 1], "x": 1, "y": 4 },
{ "matrix": [3, 2], "x": 2, "y": 4 },
{ "matrix": [3, 3], "x": 3, "y": 4 },
{ "matrix": [3, 4], "x": 4, "y": 4 },
{ "matrix": [3, 5], "x": 5, "y": 4, "w": 2},
{ "matrix": [3, 7], "x": 7, "y": 4 },
{ "matrix": [3, 8], "x": 8, "y": 4 },
{ "matrix": [3, 9], "x": 9, "y": 4 },
{ "matrix": [3, 10], "x": 10, "y": 4 },
{ "matrix": [3, 11], "x": 11, "y": 4 }
]
},
"LAYOUT_ortho_4x12": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1, "y": 0 },
{ "matrix": [0, 2], "x": 2, "y": 0 },
{ "matrix": [0, 3], "x": 3, "y": 0 },
{ "matrix": [0, 4], "x": 4, "y": 0 },
{ "matrix": [0, 5], "x": 5, "y": 0 },
{ "matrix": [0, 6], "x": 6, "y": 0 },
{ "matrix": [0, 7], "x": 7, "y": 0 },
{ "matrix": [0, 8], "x": 8, "y": 0 },
{ "matrix": [0, 9], "x": 9, "y": 0 },
{ "matrix": [0, 10], "x": 10, "y": 0 },
{ "matrix": [0, 11], "x": 11, "y": 0 },
{ "matrix": [1, 0], "x": 0, "y": 1 },
{ "matrix": [1, 1], "x": 1, "y": 1 },
{ "matrix": [1, 2], "x": 2, "y": 1 },
{ "matrix": [1, 3], "x": 3, "y": 1 },
{ "matrix": [1, 4], "x": 4, "y": 1 },
{ "matrix": [1, 5], "x": 5, "y": 1 },
{ "matrix": [1, 6], "x": 6, "y": 1 },
{ "matrix": [1, 7], "x": 7, "y": 1 },
{ "matrix": [1, 8], "x": 8, "y": 1 },
{ "matrix": [1, 9], "x": 9, "y": 1 },
{ "matrix": [1, 10], "x": 10, "y": 1 },
{ "matrix": [1, 11], "x": 11, "y": 1 },
{ "matrix": [2, 0], "x": 0, "y": 2 },
{ "matrix": [2, 1], "x": 1, "y": 2 },
{ "matrix": [2, 2], "x": 2, "y": 2 },
{ "matrix": [2, 3], "x": 3, "y": 2 },
{ "matrix": [2, 4], "x": 4, "y": 2 },
{ "matrix": [2, 5], "x": 5, "y": 2 },
{ "matrix": [2, 6], "x": 6, "y": 2 },
{ "matrix": [2, 7], "x": 7, "y": 2 },
{ "matrix": [2, 8], "x": 8, "y": 2 },
{ "matrix": [2, 9], "x": 9, "y": 2 },
{ "matrix": [2, 10], "x": 10, "y": 2 },
{ "matrix": [2, 11], "x": 11, "y": 2 },
{ "matrix": [3, 0], "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 1, "y": 3 },
{ "matrix": [3, 2], "x": 2, "y": 3 },
{ "matrix": [3, 3], "x": 3, "y": 3 },
{ "matrix": [3, 4], "x": 4, "y": 3 },
{ "matrix": [3, 5], "x": 5, "y": 3 },
{ "matrix": [3, 6], "x": 6, "y": 3, "label": "ENC" },
{ "matrix": [3, 7], "x": 7, "y": 3 },
{ "matrix": [3, 8], "x": 8, "y": 3 },
{ "matrix": [3, 9], "x": 9, "y": 3 },
{ "matrix": [3, 10], "x": 10, "y": 3 },
{ "matrix": [3, 11], "x": 11, "y": 3 }
]
}
}
}

View File

@@ -26,8 +26,8 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ╱⎺⎺⎺⎺╲
* |RGBTOG|
* ╱⎺⎺⎺⎺╲
* |RGBTOG|
* ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
@@ -39,17 +39,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Adjust| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_ONE] = LAYOUT_ortho_4x12 (
[_ONE] = LAYOUT (
RGB_TOG,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
MO(3), KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
MO(3), KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
/* Lower
* ╱⎺⎺⎺⎺╲
* | MUTE |
* ╱⎺⎺⎺⎺╲
* | MUTE |
* ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
@@ -61,17 +61,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[_TWO] = LAYOUT_ortho_4x12 (
[_TWO] = LAYOUT (
KC_MUTE,
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
_______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
/* Raise
* ╱⎺⎺⎺⎺╲
* | MUTE |
* ╱⎺⎺⎺⎺╲
* | MUTE |
* ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
@@ -83,17 +83,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | Mute | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[_THREE] = LAYOUT_ortho_4x12 (
[_THREE] = LAYOUT (
KC_MUTE,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
_______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
/* Adjust (Lower + Raise)
* ╱⎺⎺⎺⎺╲
* | MUTE |
* ╱⎺⎺⎺⎺╲
* | MUTE |
* v-----------------------RGB CONTROL------------------v ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------.
* | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
@@ -105,12 +105,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | Mute | | | | | |
* `-----------------------------------------------------------------------------------'
*/
[_FOUR] = LAYOUT_ortho_4x12 (
[_FOUR] = LAYOUT (
KC_MUTE,
_______, QK_BOOT, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
_______, QK_BOOT, DB_TOGG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};

View File

@@ -32,8 +32,8 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ╱⎺⎺⎺⎺╲
* |RGBTOG|
* ╱⎺⎺⎺⎺╲
* |RGBTOG|
* ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
@@ -45,17 +45,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Adjust| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_ONE] = LAYOUT_ortho_4x12 (
[_ONE] = LAYOUT (
RGB_TOG,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
MO(3), KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
MO(3), KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
/* Lower
* ╱⎺⎺⎺⎺╲
* | MUTE |
* ╱⎺⎺⎺⎺╲
* | MUTE |
* ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
@@ -67,17 +67,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[_TWO] = LAYOUT_ortho_4x12 (
[_TWO] = LAYOUT (
KC_MUTE,
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
_______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
/* Raise
* ╱⎺⎺⎺⎺╲
* | MUTE |
* ╱⎺⎺⎺⎺╲
* | MUTE |
* ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
@@ -89,17 +89,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | Mute | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[_THREE] = LAYOUT_ortho_4x12 (
[_THREE] = LAYOUT (
KC_MUTE,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
_______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
/* Adjust (Lower + Raise)
* ╱⎺⎺⎺⎺╲
* | MUTE |
* ╱⎺⎺⎺⎺╲
* | MUTE |
* v-----------------------RGB CONTROL------------------v ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------.
* | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
@@ -111,17 +111,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | Mute | | | | | |
* `-----------------------------------------------------------------------------------'
*/
[_FOUR] = LAYOUT_ortho_4x12 (
[_FOUR] = LAYOUT (
KC_MUTE,
_______, QK_BOOT, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
_______, QK_BOOT, DB_TOGG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* Placeholder
* ╱⎺⎺⎺⎺╲
* | |
* ╱⎺⎺⎺⎺╲
* | |
* ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------.
* | | | | | | | | | | | | |
@@ -133,17 +133,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
[_FIVE] = LAYOUT_ortho_4x12 (
[_FIVE] = LAYOUT (
_______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* Placeholder
* ╱⎺⎺⎺⎺╲
* | |
* ╱⎺⎺⎺⎺╲
* | |
* ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------.
* | | | | | | | | | | | | |
@@ -155,17 +155,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
[_SIX] = LAYOUT_ortho_4x12 (
[_SIX] = LAYOUT (
_______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* Placeholder
* ╱⎺⎺⎺⎺╲
* | |
* ╱⎺⎺⎺⎺╲
* | |
* ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------.
* | | | | | | | | | | | | |
@@ -177,17 +177,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
[_SEVEN] = LAYOUT_ortho_4x12 (
[_SEVEN] = LAYOUT (
_______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* Placeholder
* ╱⎺⎺⎺⎺╲
* | |
* ╱⎺⎺⎺⎺╲
* | |
* ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------.
* | | | | | | | | | | | | |
@@ -199,17 +199,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
[_EIGHT] = LAYOUT_ortho_4x12 (
[_EIGHT] = LAYOUT (
_______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* Placeholder
* ╱⎺⎺⎺⎺╲
* | |
* ╱⎺⎺⎺⎺╲
* | |
* ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------.
* | | | | | | | | | | | | |
@@ -221,17 +221,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
[_NINE] = LAYOUT_ortho_4x12 (
[_NINE] = LAYOUT (
_______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* Placeholder
* ╱⎺⎺⎺⎺╲
* | |
* ╱⎺⎺⎺⎺╲
* | |
* ╲⎽⎽⎽⎽╱
* ,-----------------------------------------------------------------------------------.
* | | | | | | | | | | | | |
@@ -243,12 +243,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
[_TEN] = LAYOUT_ortho_4x12 (
[_TEN] = LAYOUT (
_______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};

View File

@@ -1,4 +0,0 @@
// Copyright 2022 ziptyze (@ziptyze)
// SPDX-License-Identifier: GPL-2.0-or-later
#define RGB_MATRIX_LED_COUNT 47

View File

@@ -1,148 +0,0 @@
{
"keyboard_name": "pi40",
"manufacturer": "1upkeyboards",
"maintainer": "ziptyze",
"processor": "RP2040",
"bootloader": "rp2040",
"usb": {
"vid": "0x6F75",
"pid": "0x5600",
"device_version": "1.0.0"
},
"diode_direction": "COL2ROW",
"dynamic_keymap": {
"layer_count": 10
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": false,
"rgb_matrix": true,
"rgblight": false
},
"matrix_pins": {
"rows": [ "GP21", "GP20", "GP19", "GP18" ],
"cols": [ "GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP22" ]
},
"encoder": {
"enabled": true,
"rotary": [
{
"pin_a": "GP14",
"pin_b": "GP13"
}
]
},
"rgb_matrix": {
"driver": "WS2812",
"layout": [
{ "flags": 1, "matrix": [0, 0], "x": 9, "y": 8 },
{ "flags": 4, "matrix": [0, 1], "x": 28, "y": 8 },
{ "flags": 4, "matrix": [0, 2], "x": 46, "y": 8 },
{ "flags": 4, "matrix": [0, 3], "x": 65, "y": 8 },
{ "flags": 4, "matrix": [0, 4], "x": 84, "y": 8 },
{ "flags": 4, "matrix": [0, 5], "x": 102, "y": 8 },
{ "flags": 4, "matrix": [0, 6], "x": 121, "y": 8 },
{ "flags": 4, "matrix": [0, 7], "x": 140, "y": 8 },
{ "flags": 4, "matrix": [0, 8], "x": 159, "y": 8 },
{ "flags": 4, "matrix": [0, 9], "x": 177, "y": 8 },
{ "flags": 4, "matrix": [0, 10], "x": 196, "y": 8 },
{ "flags": 1, "matrix": [0, 11], "x": 215, "y": 8 },
{ "flags": 1, "matrix": [1, 11], "x": 215, "y": 24 },
{ "flags": 4, "matrix": [1, 10], "x": 196, "y": 24 },
{ "flags": 4, "matrix": [1, 9], "x": 177, "y": 24 },
{ "flags": 4, "matrix": [1, 8], "x": 159, "y": 24 },
{ "flags": 4, "matrix": [1, 7], "x": 140, "y": 24 },
{ "flags": 4, "matrix": [1, 6], "x": 121, "y": 24 },
{ "flags": 4, "matrix": [1, 5], "x": 102, "y": 24 },
{ "flags": 4, "matrix": [1, 4], "x": 84, "y": 24 },
{ "flags": 4, "matrix": [1, 3], "x": 65, "y": 24 },
{ "flags": 4, "matrix": [1, 2], "x": 46, "y": 24 },
{ "flags": 4, "matrix": [1, 1], "x": 28, "y": 24 },
{ "flags": 1, "matrix": [1, 0], "x": 9, "y": 24 },
{ "flags": 1, "matrix": [2, 0], "x": 9, "y": 40 },
{ "flags": 4, "matrix": [2, 1], "x": 28, "y": 40 },
{ "flags": 4, "matrix": [2, 2], "x": 46, "y": 40 },
{ "flags": 4, "matrix": [2, 3], "x": 65, "y": 40 },
{ "flags": 4, "matrix": [2, 4], "x": 84, "y": 40 },
{ "flags": 4, "matrix": [2, 5], "x": 102, "y": 40 },
{ "flags": 4, "matrix": [2, 6], "x": 121, "y": 40 },
{ "flags": 4, "matrix": [2, 7], "x": 140, "y": 40 },
{ "flags": 4, "matrix": [2, 8], "x": 159, "y": 40 },
{ "flags": 4, "matrix": [2, 9], "x": 177, "y": 40 },
{ "flags": 4, "matrix": [2, 10], "x": 196, "y": 40 },
{ "flags": 1, "matrix": [2, 11], "x": 215, "y": 40 },
{ "flags": 1, "matrix": [3, 11], "x": 215, "y": 56 },
{ "flags": 1, "matrix": [3, 10], "x": 196, "y": 56 },
{ "flags": 1, "matrix": [3, 9], "x": 177, "y": 56 },
{ "flags": 1, "matrix": [3, 8], "x": 159, "y": 56 },
{ "flags": 1, "matrix": [3, 7], "x": 140, "y": 56 },
{ "flags": 1, "matrix": [3, 5], "x": 112, "y": 56 },
{ "flags": 1, "matrix": [3, 4], "x": 84, "y": 56 },
{ "flags": 1, "matrix": [3, 3], "x": 65, "y": 56 },
{ "flags": 1, "matrix": [3, 2], "x": 46, "y": 56 },
{ "flags": 1, "matrix": [3, 1], "x": 28, "y": 56 },
{ "flags": 1, "matrix": [3, 0], "x": 9, "y": 56 }
]
},
"layouts": {
"LAYOUT_ortho_4x12": {
"layout": [
{ "matrix": [3, 6], "x": 11, "y": 0 },
{ "matrix": [0, 0], "x": 0, "y": 1 },
{ "matrix": [0, 1], "x": 1, "y": 1 },
{ "matrix": [0, 2], "x": 2, "y": 1 },
{ "matrix": [0, 3], "x": 3, "y": 1 },
{ "matrix": [0, 4], "x": 4, "y": 1 },
{ "matrix": [0, 5], "x": 5, "y": 1 },
{ "matrix": [0, 6], "x": 6, "y": 1 },
{ "matrix": [0, 7], "x": 7, "y": 1 },
{ "matrix": [0, 8], "x": 8, "y": 1 },
{ "matrix": [0, 9], "x": 9, "y": 1 },
{ "matrix": [0, 10], "x": 10, "y": 1 },
{ "matrix": [0, 11], "x": 11, "y": 1 },
{ "matrix": [1, 0], "x": 0, "y": 2 },
{ "matrix": [1, 1], "x": 1, "y": 2 },
{ "matrix": [1, 2], "x": 2, "y": 2 },
{ "matrix": [1, 3], "x": 3, "y": 2 },
{ "matrix": [1, 4], "x": 4, "y": 2 },
{ "matrix": [1, 5], "x": 5, "y": 2 },
{ "matrix": [1, 6], "x": 6, "y": 2 },
{ "matrix": [1, 7], "x": 7, "y": 2 },
{ "matrix": [1, 8], "x": 8, "y": 2 },
{ "matrix": [1, 9], "x": 9, "y": 2 },
{ "matrix": [1, 10], "x": 10, "y": 2 },
{ "matrix": [1, 11], "x": 11, "y": 2 },
{ "matrix": [2, 0], "x": 0, "y": 3 },
{ "matrix": [2, 1], "x": 1, "y": 3 },
{ "matrix": [2, 2], "x": 2, "y": 3 },
{ "matrix": [2, 3], "x": 3, "y": 3 },
{ "matrix": [2, 4], "x": 4, "y": 3 },
{ "matrix": [2, 5], "x": 5, "y": 3 },
{ "matrix": [2, 6], "x": 6, "y": 3 },
{ "matrix": [2, 7], "x": 7, "y": 3 },
{ "matrix": [2, 8], "x": 8, "y": 3 },
{ "matrix": [2, 9], "x": 9, "y": 3 },
{ "matrix": [2, 10], "x": 10, "y": 3 },
{ "matrix": [2, 11], "x": 11, "y": 3 },
{ "matrix": [3, 0], "x": 0, "y": 4 },
{ "matrix": [3, 1], "x": 1, "y": 4 },
{ "matrix": [3, 2], "x": 2, "y": 4 },
{ "matrix": [3, 3], "x": 3, "y": 4 },
{ "matrix": [3, 4], "x": 4, "y": 4 },
{ "matrix": [3, 5], "x": 5, "y": 4 },
{ "matrix": [0, 12], "x": 6, "y": 4 },
{ "matrix": [3, 7], "x": 7, "y": 4 },
{ "matrix": [3, 8], "x": 8, "y": 4 },
{ "matrix": [3, 9], "x": 9, "y": 4 },
{ "matrix": [3, 10], "x": 10, "y": 4 },
{ "matrix": [3, 11], "x": 11, "y": 4 }
]
}
}
}

View File

@@ -1,4 +0,0 @@
// Copyright 2022 ziptyze (@ziptyze)
// SPDX-License-Identifier: GPL-2.0-or-later
#define RGB_MATRIX_LED_COUNT 47

View File

@@ -1,148 +0,0 @@
{
"keyboard_name": "pi40",
"manufacturer": "1upkeyboards",
"maintainer": "ziptyze",
"processor": "RP2040",
"bootloader": "rp2040",
"usb": {
"vid": "0x6F75",
"pid": "0x5600",
"device_version": "1.1.0"
},
"diode_direction": "COL2ROW",
"dynamic_keymap": {
"layer_count": 10
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": false,
"rgb_matrix": true,
"rgblight": false
},
"matrix_pins": {
"rows": [ "GP21", "GP20", "GP19", "GP18" ],
"cols": [ "GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP22" ]
},
"encoder": {
"enabled": true,
"rotary": [
{
"pin_a": "GP14",
"pin_b": "GP13"
}
]
},
"rgb_matrix": {
"driver": "WS2812",
"layout": [
{ "flags": 1, "matrix": [0, 0], "x": 9, "y": 8 },
{ "flags": 4, "matrix": [0, 1], "x": 28, "y": 8 },
{ "flags": 4, "matrix": [0, 2], "x": 46, "y": 8 },
{ "flags": 4, "matrix": [0, 3], "x": 65, "y": 8 },
{ "flags": 4, "matrix": [0, 4], "x": 84, "y": 8 },
{ "flags": 4, "matrix": [0, 5], "x": 102, "y": 8 },
{ "flags": 4, "matrix": [0, 6], "x": 121, "y": 8 },
{ "flags": 4, "matrix": [0, 7], "x": 140, "y": 8 },
{ "flags": 4, "matrix": [0, 8], "x": 159, "y": 8 },
{ "flags": 4, "matrix": [0, 9], "x": 177, "y": 8 },
{ "flags": 4, "matrix": [0, 10], "x": 196, "y": 8 },
{ "flags": 1, "matrix": [0, 11], "x": 215, "y": 8 },
{ "flags": 1, "matrix": [1, 11], "x": 215, "y": 24 },
{ "flags": 4, "matrix": [1, 10], "x": 196, "y": 24 },
{ "flags": 4, "matrix": [1, 9], "x": 177, "y": 24 },
{ "flags": 4, "matrix": [1, 8], "x": 159, "y": 24 },
{ "flags": 4, "matrix": [1, 7], "x": 140, "y": 24 },
{ "flags": 4, "matrix": [1, 6], "x": 121, "y": 24 },
{ "flags": 4, "matrix": [1, 5], "x": 102, "y": 24 },
{ "flags": 4, "matrix": [1, 4], "x": 84, "y": 24 },
{ "flags": 4, "matrix": [1, 3], "x": 65, "y": 24 },
{ "flags": 4, "matrix": [1, 2], "x": 46, "y": 24 },
{ "flags": 4, "matrix": [1, 1], "x": 28, "y": 24 },
{ "flags": 1, "matrix": [1, 0], "x": 9, "y": 24 },
{ "flags": 1, "matrix": [2, 0], "x": 9, "y": 40 },
{ "flags": 4, "matrix": [2, 1], "x": 28, "y": 40 },
{ "flags": 4, "matrix": [2, 2], "x": 46, "y": 40 },
{ "flags": 4, "matrix": [2, 3], "x": 65, "y": 40 },
{ "flags": 4, "matrix": [2, 4], "x": 84, "y": 40 },
{ "flags": 4, "matrix": [2, 5], "x": 102, "y": 40 },
{ "flags": 4, "matrix": [2, 6], "x": 121, "y": 40 },
{ "flags": 4, "matrix": [2, 7], "x": 140, "y": 40 },
{ "flags": 4, "matrix": [2, 8], "x": 159, "y": 40 },
{ "flags": 4, "matrix": [2, 9], "x": 177, "y": 40 },
{ "flags": 4, "matrix": [2, 10], "x": 196, "y": 40 },
{ "flags": 1, "matrix": [2, 11], "x": 215, "y": 40 },
{ "flags": 1, "matrix": [3, 11], "x": 215, "y": 56 },
{ "flags": 1, "matrix": [3, 10], "x": 196, "y": 56 },
{ "flags": 1, "matrix": [3, 9], "x": 177, "y": 56 },
{ "flags": 1, "matrix": [3, 8], "x": 159, "y": 56 },
{ "flags": 1, "matrix": [3, 7], "x": 140, "y": 56 },
{ "flags": 1, "matrix": [3, 5], "x": 112, "y": 56 },
{ "flags": 1, "matrix": [3, 4], "x": 84, "y": 56 },
{ "flags": 1, "matrix": [3, 3], "x": 65, "y": 56 },
{ "flags": 1, "matrix": [3, 2], "x": 46, "y": 56 },
{ "flags": 1, "matrix": [3, 1], "x": 28, "y": 56 },
{ "flags": 1, "matrix": [3, 0], "x": 9, "y": 56 }
]
},
"layouts": {
"LAYOUT_ortho_4x12": {
"layout": [
{ "matrix": [0, 12], "x": 11, "y": 0 },
{ "matrix": [0, 0], "x": 0, "y": 1 },
{ "matrix": [0, 1], "x": 1, "y": 1 },
{ "matrix": [0, 2], "x": 2, "y": 1 },
{ "matrix": [0, 3], "x": 3, "y": 1 },
{ "matrix": [0, 4], "x": 4, "y": 1 },
{ "matrix": [0, 5], "x": 5, "y": 1 },
{ "matrix": [0, 6], "x": 6, "y": 1 },
{ "matrix": [0, 7], "x": 7, "y": 1 },
{ "matrix": [0, 8], "x": 8, "y": 1 },
{ "matrix": [0, 9], "x": 9, "y": 1 },
{ "matrix": [0, 10], "x": 10, "y": 1 },
{ "matrix": [0, 11], "x": 11, "y": 1 },
{ "matrix": [1, 0], "x": 0, "y": 2 },
{ "matrix": [1, 1], "x": 1, "y": 2 },
{ "matrix": [1, 2], "x": 2, "y": 2 },
{ "matrix": [1, 3], "x": 3, "y": 2 },
{ "matrix": [1, 4], "x": 4, "y": 2 },
{ "matrix": [1, 5], "x": 5, "y": 2 },
{ "matrix": [1, 6], "x": 6, "y": 2 },
{ "matrix": [1, 7], "x": 7, "y": 2 },
{ "matrix": [1, 8], "x": 8, "y": 2 },
{ "matrix": [1, 9], "x": 9, "y": 2 },
{ "matrix": [1, 10], "x": 10, "y": 2 },
{ "matrix": [1, 11], "x": 11, "y": 2 },
{ "matrix": [2, 0], "x": 0, "y": 3 },
{ "matrix": [2, 1], "x": 1, "y": 3 },
{ "matrix": [2, 2], "x": 2, "y": 3 },
{ "matrix": [2, 3], "x": 3, "y": 3 },
{ "matrix": [2, 4], "x": 4, "y": 3 },
{ "matrix": [2, 5], "x": 5, "y": 3 },
{ "matrix": [2, 6], "x": 6, "y": 3 },
{ "matrix": [2, 7], "x": 7, "y": 3 },
{ "matrix": [2, 8], "x": 8, "y": 3 },
{ "matrix": [2, 9], "x": 9, "y": 3 },
{ "matrix": [2, 10], "x": 10, "y": 3 },
{ "matrix": [2, 11], "x": 11, "y": 3 },
{ "matrix": [3, 0], "x": 0, "y": 4 },
{ "matrix": [3, 1], "x": 1, "y": 4 },
{ "matrix": [3, 2], "x": 2, "y": 4 },
{ "matrix": [3, 3], "x": 3, "y": 4 },
{ "matrix": [3, 4], "x": 4, "y": 4 },
{ "matrix": [3, 5], "x": 5, "y": 4 },
{ "matrix": [3, 6], "x": 6, "y": 4 },
{ "matrix": [3, 7], "x": 7, "y": 4 },
{ "matrix": [3, 8], "x": 8, "y": 4 },
{ "matrix": [3, 9], "x": 9, "y": 4 },
{ "matrix": [3, 10], "x": 10, "y": 4 },
{ "matrix": [3, 11], "x": 11, "y": 4 }
]
}
}
}

View File

@@ -57,6 +57,28 @@ static const char PROGMEM my_logo[] = {
#endif
#ifdef RGB_MATRIX_ENABLE
led_config_t g_led_config = { {
// Key Matrix to LED Index
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 },
{ 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12 },
{ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 },
{ 46, 45, 44, 43, 42, 41, NO_LED, 40, 39, 38, 37, 36 }
}, {
// LED Index to Physical Position
{ 9, 8 }, { 28, 8 }, { 46, 8 }, { 65, 8 }, { 84, 8 }, { 102, 8 }, { 121, 8 }, { 140, 8 }, { 159, 8 }, { 177, 8 }, { 196, 8 }, { 215, 8 },
{ 215, 24 }, { 196, 24 }, { 177, 24 }, { 159, 24 }, { 140, 24 }, { 121, 24 }, { 102, 24 }, { 84, 24 }, { 65, 24 }, { 46, 24 }, { 28, 24 }, { 9, 24 },
{ 9, 40 }, { 28, 40 }, { 46, 40 }, { 65, 40 }, { 84, 40 }, { 102, 40 }, { 121, 40 }, { 140, 40 }, { 159, 40 }, { 177, 40 }, { 196, 40 }, { 215, 40 },
{ 215, 56 }, { 196, 56 }, { 177, 56 }, { 159, 56 }, { 140, 56 }, { 112, 56 }, { 84, 56 }, { 65, 56 }, { 46, 56 }, { 28, 56 }, { 9, 56 }
}, {
// LED Index to Flag
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
} };
#endif
#ifdef OLED_ENABLE
void init_timer(void){

View File

@@ -1,6 +1,21 @@
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812
WS2812_DRIVER = vendor
ENCODER_ENABLE = yes
OLED_ENABLE = yes
OLED_DRIVER = SSD1306
DEFAULT_FOLDER = 1upkeyboards/pi40/mit_v1_0
OLED_DRIVER = SSD1306

View File

@@ -1,76 +0,0 @@
{
"keyboard_name": "Knobs 3",
"manufacturer": "ANAVI",
"url": "https://github.com/AnaviTechnology/anavi-knobs-3",
"maintainer": "leon-anavi",
"processor": "RP2040",
"bootloader": "rp2040",
"matrix_pins": {
"direct": [
["GP26", "GP29", "GP0"]
]
},
"features": {
"bootmagic": false,
"command": false,
"console": false,
"extrakey": true,
"mousekey": false,
"nkro": true,
"rgblight": true
},
"rgblight": {
"pin": "GP12",
"led_count": 1,
"hue_steps": 10,
"saturation_steps": 17,
"brightness_steps": 17,
"max_brightness": 255,
"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
}
},
"encoder": {
"enabled": true,
"rotary": [
{
"pin_a": "GP27",
"pin_b": "GP28",
"resolution": 2
},
{
"pin_a": "GP4",
"pin_b": "GP3",
"resolution": 2
},
{
"pin_a": "GP1",
"pin_b": "GP2",
"resolution": 2
}
]
},
"layouts": {
"LAYOUT": {
"layout": [
{ "label":"Mute", "x": 0, "y": 0, "matrix": [0, 0] },
{ "label":"RGB", "x": 0, "y": 1, "matrix": [0, 1] },
{ "label":"Animation", "x": 0, "y": 2, "matrix": [0, 2] }
]
}
},
"usb": {
"device_version": "1.0.0",
"pid": "0x9A25",
"vid": "0xFEED"
}
}

View File

@@ -1,10 +0,0 @@
// Copyright 2022 Leon Anavi <leon@anavi.org>
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_MUTE, RGB_TOG, RGB_MOD
)
};

View File

@@ -1,73 +0,0 @@
// Copyright 2022 Leon Anavi <leon@anavi.org>
// SPDX-License-Identifier: GPL-2.0-or-later
#include "quantum.h"
#include <stdio.h>
void keyboard_post_init_kb(void) {
// Enable RGB LED
setPinOutput(GP11);
writePinHigh(GP11);
rgblight_enable();
// Offload to the user func
keyboard_post_init_user();
}
#ifdef ENCODER_ENABLE
bool encoder_update_kb(uint8_t index, bool clockwise) {
if (!encoder_update_user(index, clockwise)) { return false; }
if (0 == index) {
if (clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
} else if (1 == index) {
if (clockwise) {
tap_code(KC_UP);
} else {
tap_code(KC_DOWN);
}
} else if (2 == index) {
if (clockwise) {
tap_code(KC_LEFT);
} else {
tap_code(KC_RIGHT);
}
}
return true;
}
#endif
#ifdef OLED_ENABLE
bool oled_task_kb(void) {
if (!oled_task_user()) {
return false;
}
// Host Keyboard Layer Status
oled_write_ln_P(PSTR("ANAVI Knobs 3"), false);
oled_write_ln_P(PSTR("Keymap: Default"), false);
// Host Keyboard LED Status
led_t led_state = host_keyboard_led_state();
oled_write_P(PSTR("Num Lock: "), false);
oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Caps Lock: "), false);
oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
oled_write_P(PSTR("Scroll Lock: "), false);
oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
#ifdef RGBLIGHT_ENABLE
static char rgbStatusLine1[26] = {0};
snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
oled_write_ln(rgbStatusLine1, false);
static char rgbStatusLine2[26] = {0};
snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
oled_write_ln(rgbStatusLine2, false);
#endif
return false;
}
#endif

View File

@@ -1,12 +0,0 @@
// Copyright 2022 Leon Anavi (@leon-anavi)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <mcuconf.h>
#undef RP_I2C_USE_I2C0
#define RP_I2C_USE_I2C0 FALSE
#undef RP_I2C_USE_I2C1
#define RP_I2C_USE_I2C1 TRUE

View File

@@ -1,25 +0,0 @@
# ANAVI Knobs 3
Mini mechanical keyboard with 3 clickable rotary encoders, USB-C, RP2040 microcontroller and I2C slot for mini OLED display.
* Keyboard Maintainer: [Leon Anavi](https://github.com/leon-anavi)
* Hardware Supported: ANAVI Knobs 3
* Hardware Availability: [Crowd Supply](https://www.crowdsupply.com/anavi-technology/anavi-macro-pad-10), [GitHub repository](https://github.com/AnaviTechnology/anavi-knobs-3)
Make example for this keyboard (after setting up your build environment):
make anavi/knobs3:default
Flashing example for this keyboard:
make anavi/knobs3: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 on the left half, or top right key on the right half, and then plug in the USB cable on that keyboard half.
* **Physical reset button**: Double tap the reset button on the XIAO RP2040.
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available.

View File

@@ -1,6 +0,0 @@
WS2812_DRIVER = vendor
OLED_ENABLE = yes
OLED_DRIVER = SSD1306 # Enable Support for SSD1306 or SH1106 OLED Displays; Communicating over I2C
OPT_DEFS += -DHAL_USE_I2C=TRUE

View File

@@ -101,9 +101,11 @@ void keyboard_post_init_kb(void) {
// loop to clear out receive buffer from ble wakeup
while (!sdGetWouldBlock(&SD1)) sdGet(&SD1);
ap2_led_get_status();
#ifdef RGB_MATRIX_ENABLE
ap2_led_set_manual_control(1);
ap2_led_enable();
ap2_led_set_manual_control(1);
#endif
keyboard_post_init_user();

View File

@@ -60,6 +60,8 @@ void ap2_led_enable(void) { proto_tx(CMD_LED_ON, NULL, 0, 3); }
void ap2_led_set_profile(uint8_t prof) { proto_tx(CMD_LED_SET_PROFILE, &prof, sizeof(prof), 3); }
void ap2_led_get_status(void) { proto_tx(CMD_LED_GET_STATUS, NULL, 0, 3); }
void ap2_led_next_profile(void) { proto_tx(CMD_LED_NEXT_PROFILE, NULL, 0, 3); }
void ap2_led_next_intensity(void) { proto_tx(CMD_LED_NEXT_INTENSITY, NULL, 0, 3); }

View File

@@ -49,6 +49,7 @@ void ap2_set_IAP(void);
void ap2_led_disable(void);
void ap2_led_enable(void);
void ap2_led_set_profile(uint8_t prof);
void ap2_led_get_status(void);
void ap2_led_next_profile(void);
void ap2_led_prev_profile(void);
void ap2_led_next_intensity(void);

View File

@@ -36,7 +36,7 @@ enum {
CMD_LED_MASK_SET_MONO = 0x12,
/* Reactive / status */
CMD_LED_GET_STATUS = 0x20, /* unused */
CMD_LED_GET_STATUS = 0x20,
CMD_LED_KEY_BLINK = 0x21,
CMD_LED_KEY_DOWN = 0x22,
CMD_LED_KEY_UP = 0x23, /* TODO */

View File

@@ -1,53 +0,0 @@
// Copyright 2023 mjbogusz (@mjbogusz)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
/* Indicator LEDs */
#define LED_INDICATOR_0_PIN D0
#define LED_INDICATOR_1_PIN D5
#define LED_INDICATOR_2_PIN D4
/* RGB matrix */
#define RGB_DI_PIN B7
#define RGB_MATRIX_LED_COUNT 28
#define RGB_MATRIX_KEYPRESSES
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#ifdef RGB_MATRIX_ENABLE
// RGB Matrix Animation modes. Explicitly enabled
// For full list of effects, see:
// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
#define ENABLE_RGB_MATRIX_SOLID_COLOR
// #define ENABLE_RGB_MATRIX_ALPHAS_MODS
// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
// #define ENABLE_RGB_MATRIX_BREATHING
// #define ENABLE_RGB_MATRIX_BAND_SAT
// #define ENABLE_RGB_MATRIX_BAND_VAL
// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
#define ENABLE_RGB_MATRIX_CYCLE_ALL
// #define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
// #define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
// #define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
// #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
// #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
// #define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
// #define ENABLE_RGB_MATRIX_DUAL_BEACON
#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
// #define ENABLE_RGB_MATRIX_RAINDROPS
// #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
// #define ENABLE_RGB_MATRIX_HUE_BREATHING
// #define ENABLE_RGB_MATRIX_HUE_PENDULUM
// #define ENABLE_RGB_MATRIX_HUE_WAVE
// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
// #define ENABLE_RGB_MATRIX_PIXEL_FLOW
#define ENABLE_RGB_MATRIX_PIXEL_RAIN
// #define ENABLE_RGB_MATRIX_TYPING_HEATMAP
// #define ENABLE_RGB_MATRIX_DIGITAL_RAIN
#endif

View File

@@ -1,99 +0,0 @@
{
"manufacturer": "Atlantis",
"keyboard_name": "PS17",
"maintainer": "mjbogusz",
"url": "https://qmk.fm/keyboards/",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"bootloader_instructions": "To reset the board into bootloader mode, tap the Reset switch mounted on the bottom of the PCB.",
"usb": {
"device_version": "1.0.0",
"pid": "0x414B",
"vid": "0x0015"
},
"features": {
"bootmagic": false,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"encoder": true,
"rgb_matrix": true
},
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["F6", "F7", "D3", "D6"],
"rows": ["F0", "B4", "B5", "B6", "C6", "C7", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN"]
},
"encoder": {
"rotary": [{
"pin_a": "D2",
"pin_b": "D1"
}]
},
"layouts": {
"LAYOUT": {
"layout": [
{ "matrix": [0, 1], "x": 0, "y": 0},
{ "matrix": [1, 0], "x": 0, "y": 1.5},
{ "matrix": [1, 1], "x": 1, "y": 1.5},
{ "matrix": [1, 2], "x": 2, "y": 1.5},
{ "matrix": [1, 3], "x": 3, "y": 1.5},
{ "matrix": [2, 0], "x": 0, "y": 2.5},
{ "matrix": [2, 1], "x": 1, "y": 2.5},
{ "matrix": [2, 2], "x": 2, "y": 2.5},
{ "matrix": [2, 3], "x": 3, "y": 2.5, "h": 2},
{ "matrix": [3, 0], "x": 0, "y": 3.5},
{ "matrix": [3, 1], "x": 1, "y": 3.5},
{ "matrix": [3, 2], "x": 2, "y": 3.5},
{ "matrix": [4, 0], "x": 0, "y": 4.5},
{ "matrix": [4, 1], "x": 1, "y": 4.5},
{ "matrix": [4, 2], "x": 2, "y": 4.5},
{ "matrix": [4, 3], "x": 3, "y": 4.5, "h": 2},
{ "matrix": [5, 0], "x": 0, "y": 5.5, "w": 2},
{ "matrix": [5, 2], "x": 2, "y": 5.5}
]
}
},
"rgb_matrix": {
"driver": "WS2812",
"center_point": [126, 126],
"layout": [
{ "flags": 4, "matrix": [1, 0], "x": 74, "y": 165 },
{ "flags": 4, "matrix": [1, 1], "x": 108, "y": 165 },
{ "flags": 4, "matrix": [1, 2], "x": 144, "y": 165 },
{ "flags": 4, "matrix": [1, 3], "x": 179, "y": 165 },
{ "flags": 4, "matrix": [2, 0], "x": 74, "y": 129 },
{ "flags": 4, "matrix": [2, 1], "x": 109, "y": 129 },
{ "flags": 4, "matrix": [2, 2], "x": 143, "y": 129 },
{ "flags": 4, "matrix": [2, 3], "x": 188, "y": 121 },
{ "flags": 4, "matrix": [3, 0], "x": 74, "y": 95 },
{ "flags": 4, "matrix": [3, 1], "x": 109, "y": 95 },
{ "flags": 4, "matrix": [3, 2], "x": 143, "y": 95 },
{ "flags": 4, "matrix": [4, 0], "x": 73, "y": 60 },
{ "flags": 4, "matrix": [4, 1], "x": 109, "y": 60 },
{ "flags": 4, "matrix": [4, 2], "x": 144, "y": 60 },
{ "flags": 4, "matrix": [4, 3], "x": 188, "y": 51 },
{ "flags": 4, "matrix": [5, 0], "x": 91, "y": 25 },
{ "flags": 4, "matrix": [5, 2], "x": 144, "y": 25 },
{ "flags": 2, "x": 61, "y": 26},
{ "flags": 2, "x": 61, "y": 88},
{ "flags": 2, "x": 61, "y": 158},
{ "flags": 2, "x": 61, "y": 197},
{ "flags": 2, "x": 61, "y": 232},
{ "flags": 2, "x": 192, "y": 232},
{ "flags": 2, "x": 192, "y": 196},
{ "flags": 2, "x": 192, "y": 158},
{ "flags": 2, "x": 192, "y": 87},
{ "flags": 2, "x": 183, "y": 26},
{ "flags": 2, "x": 127, "y": 24}
]
}
}

View File

@@ -1,49 +0,0 @@
// Copyright 2023 mjbogusz (@mjbogusz)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Default layer: numpad + volume control
[0] = LAYOUT(
KC_MUTE,
TO(1), KC_PSLS, KC_PAST, KC_PMNS,
KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS,
KC_KP_4, KC_KP_5, KC_KP_6,
KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT,
KC_KP_0, KC_PDOT
),
[1] = LAYOUT(
RGB_MOD,
TO(2), KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS
),
[2] = LAYOUT(
RGB_MOD,
TO(3), KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS
),
[3] = LAYOUT(
RGB_MOD,
TO(0), KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, 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(RGB_HUI, RGB_HUD) },
[2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
[3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
};
#endif

View File

@@ -1,49 +0,0 @@
// Copyright 2023 mjbogusz (@mjbogusz)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Default layer: numpad + volume control
[0] = LAYOUT(
KC_MUTE,
TO(1), KC_PSLS, KC_PAST, KC_PMNS,
KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS,
KC_KP_4, KC_KP_5, KC_KP_6,
KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT,
KC_KP_0, KC_PDOT
),
[1] = LAYOUT(
KC_MUTE,
TO(2), XXXXXXX, XXXXXXX, KC_VOLD,
XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU,
KC_MRWD, KC_MPLY, KC_MFFD,
KC_MPRV, KC_MSTP, KC_MNXT, KC_MSEL,
XXXXXXX, XXXXXXX
),
[2] = LAYOUT(
RGB_MOD,
TO(3), KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS
),
[3] = LAYOUT(
KC_TRNS,
TO(0), KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, 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_VOLD, KC_VOLU) },
[2] = { ENCODER_CCW_CW(RGB_HUI, RGB_HUD) },
[3] = { ENCODER_CCW_CW(RGB_HUI, RGB_HUD) },
};
#endif

View File

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

View File

@@ -1,49 +0,0 @@
// Copyright 2023 mjbogusz (@mjbogusz)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Default layer: numpad + volume control
[0] = LAYOUT(
KC_MUTE,
TO(1), KC_PSLS, KC_PAST, KC_PMNS,
KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS,
KC_KP_4, KC_KP_5, KC_KP_6,
KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT,
KC_KP_0, KC_PDOT
),
[1] = LAYOUT(
RGB_MOD,
TO(2), KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS
),
[2] = LAYOUT(
KC_TRNS,
TO(3), KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS
),
[3] = LAYOUT(
KC_TRNS,
TO(0), KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, 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(RGB_HUI, RGB_HUD) },
[2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
[3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
};
#endif

View File

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

View File

@@ -1,53 +0,0 @@
// Copyright 2023 mjbogusz (@mjbogusz)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "quantum.h"
layer_state_t layer_state_set_kb(layer_state_t state) {
/* Display current layer using indicator LEDs */
writePin(LED_INDICATOR_0_PIN, !IS_LAYER_ON_STATE(state, 1));
writePin(LED_INDICATOR_1_PIN, !IS_LAYER_ON_STATE(state, 2));
writePin(LED_INDICATOR_2_PIN, !IS_LAYER_ON_STATE(state, 3));
return layer_state_set_user(state);
}
void keyboard_pre_init_kb(void) {
/* Set indicator LEDs as outputs */
setPinOutput(LED_INDICATOR_0_PIN);
setPinOutput(LED_INDICATOR_1_PIN);
setPinOutput(LED_INDICATOR_2_PIN);
keyboard_pre_init_user();
}
#if defined(ENCODER_ENABLE)
bool encoder_update_kb(uint8_t index, bool clockwise) {
if (!encoder_update_user(index, clockwise)) {
/* Don't process further events if user function exists and returns false */
return false;
}
/* Ignore index - only one encoder on this board */
if (clockwise) {
tap_code_delay(KC_VOLU, 10);
} else {
tap_code_delay(KC_VOLD, 10);
}
return false;
}
#endif
#ifdef RGB_MATRIX_ENABLE
void suspend_power_down_kb(void) {
/* Disable indicator LEDs when going to sleep */
writePin(LED_INDICATOR_0_PIN, 1);
writePin(LED_INDICATOR_1_PIN, 1);
writePin(LED_INDICATOR_2_PIN, 1);
suspend_power_down_user();
}
void suspend_wakeup_init_kb(void) {
/* Restore indicator LEDs state */
layer_state_set_kb(layer_state);
suspend_wakeup_init_user();
}
#endif

View File

@@ -1,34 +0,0 @@
# atlantis/ps17
![atlantis/ps17](https://i.imgur.com/5qGIv2Kh.jpg)
A 17-key hot-swap numpad/macropad with an EC11 clickable rotary encoder (knob) and RGB backlight and underglow
* Keyboard Maintainer: [mjbogusz](https://github.com/mjbogusz)
* Hardware Supported: Atlantis PS17
* Hardware Availability: [AliExpress, SpiderIsland Tech Co., Ltd Store](https://www.aliexpress.com/item/1005003058226085.html)
* Additional photos:
* [Full size](https://i.imgur.com/5qGIv2K.jpg)
* [PCB front](https://i.imgur.com/OmGBqvC.jpg)
* [PCB back](https://i.imgur.com/rvoZZ5f.jpg)
Make example for this keyboard (after setting up your build environment):
make atlantis/ps17:default
Flashing example for this keyboard:
make atlantis/ps17:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Physical reset button**: Briefly press the button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
## Attributions
Pin mapping and LED physical layout based on [Solartempest work](https://github.com/solartempest/qmk_firmware/tree/master/keyboards/solartempest/ps17)

View File

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

View File

@@ -37,4 +37,31 @@
{ k60, k61, k62, k63, k64 }, \
{ k70, KC_NO, k72, KC_NO, KC_NO }, \
}
/**
* \brief Compatibility layout with the split_3x5_3 community layout.
*
* This effectively renders the Charbdis Nano compatible with existing layout
* implementations relying on the `split_3x5_3` layout, which includes, among
* others, Manna-Harbour's (@manna_harbour) Miryoku layout.
*
* The last key on the layout is ignored, to transform the input 36-keys layout
* into the Charybdis Nano's 35-keys layout.
*/
#define LAYOUT_split_3x5_3( \
k00, k01, k02, k03, k04, k44, k43, k42, k41, k40, \
k10, k11, k12, k13, k14, k54, k53, k52, k51, k50, \
k20, k21, k22, k23, k24, k64, k63, k62, k61, k60, \
k32, k33, k30, k70, k72, ___ \
) \
{ \
{ k00, k01, k02, k03, k04 }, \
{ k10, k11, k12, k13, k14 }, \
{ k20, k21, k22, k23, k24 }, \
{ k30, KC_NO, k32, k33, KC_NO }, \
{ k40, k41, k42, k43, k44 }, \
{ k50, k51, k52, k53, k54 }, \
{ k60, k61, k62, k63, k64 }, \
{ k70, KC_NO, k72, KC_NO, KC_NO }, \
}
// clang-format on

View File

@@ -5,6 +5,7 @@
"pid": "0x1832",
"vid": "0xA8F8"
},
"community_layouts": ["split_3x5_3"],
"layout_aliases": {
"LAYOUT_charybdis_3x5": "LAYOUT"
},
@@ -47,6 +48,46 @@
{ "label": "R30", "x": 9, "y": 3 },
{ "label": "R31", "x": 10, "y": 3 }
]
},
"LAYOUT_split_3x5_3": {
"layout": [
{ "label": "L00", "x": 0, "y": 0 },
{ "label": "L01", "x": 1, "y": 0 },
{ "label": "L02", "x": 2, "y": 0 },
{ "label": "L03", "x": 3, "y": 0 },
{ "label": "L04", "x": 4, "y": 0 },
{ "label": "R00", "x": 11, "y": 0 },
{ "label": "R01", "x": 12, "y": 0 },
{ "label": "R02", "x": 13, "y": 0 },
{ "label": "R03", "x": 14, "y": 0 },
{ "label": "R04", "x": 15, "y": 0 },
{ "label": "L10", "x": 0, "y": 1 },
{ "label": "L11", "x": 1, "y": 1 },
{ "label": "L12", "x": 2, "y": 1 },
{ "label": "L13", "x": 3, "y": 1 },
{ "label": "L14", "x": 4, "y": 1 },
{ "label": "R10", "x": 11, "y": 1 },
{ "label": "R11", "x": 12, "y": 1 },
{ "label": "R12", "x": 13, "y": 1 },
{ "label": "R13", "x": 14, "y": 1 },
{ "label": "R14", "x": 15, "y": 1 },
{ "label": "L20", "x": 0, "y": 2 },
{ "label": "L21", "x": 1, "y": 2 },
{ "label": "L22", "x": 2, "y": 2 },
{ "label": "L23", "x": 3, "y": 2 },
{ "label": "L24", "x": 4, "y": 2 },
{ "label": "R20", "x": 11, "y": 2 },
{ "label": "R21", "x": 12, "y": 2 },
{ "label": "R22", "x": 13, "y": 2 },
{ "label": "R23", "x": 14, "y": 2 },
{ "label": "R24", "x": 15, "y": 2 },
{ "label": "L30", "x": 4, "y": 3 },
{ "label": "L31", "x": 5, "y": 3 },
{ "label": "L32", "x": 6, "y": 3 },
{ "label": "R30", "x": 9, "y": 3 },
{ "label": "R31", "x": 10, "y": 3 },
{ "label": "R32", "x": 11, "y": 3 }
]
}
}
}

View File

@@ -36,4 +36,27 @@
{ k60, k61, k62, k63, k64, k65 }, \
{ KC_NO, k71, KC_NO, k73, KC_NO, KC_NO }, \
}
/**
* \brief Compatibility layout with the split_3x5_6 community layout.
*
* This effectively renders the Charbdis Nano compatible with existing layout
* implementations relying on the `split_3x6_3` layout.
*/
#define LAYOUT_split_3x6_3( \
k00, k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, k40, \
k10, k11, k12, k13, k14, k15, k55, k54, k53, k52, k51, k50, \
k20, k21, k22, k23, k24, k25, k65, k64, k63, k62, k61, k60, \
k33, k34, k31, k71, k73, ___ \
) \
{ \
{ k00, k01, k02, k03, k04, k05 }, \
{ k10, k11, k12, k13, k14, k15 }, \
{ k20, k21, k22, k23, k24, k25 }, \
{ KC_NO, k31, KC_NO, k33, k34, KC_NO }, \
{ k40, k41, k42, k43, k44, k45 }, \
{ k50, k51, k52, k53, k54, k55 }, \
{ k60, k61, k62, k63, k64, k65 }, \
{ KC_NO, k71, KC_NO, k73, KC_NO, KC_NO }, \
}
// clang-format on

View File

@@ -3,6 +3,7 @@
"usb": {
"pid": "0x1834"
},
"community_layouts": ["split_3x6_3"],
"layout_aliases": {
"LAYOUT_charybdis_3x6": "LAYOUT"
},
@@ -51,6 +52,52 @@
{ "label": "R31", "x": 9, "y": 3 },
{ "label": "R33", "x": 10, "y": 3 }
]
},
"LAYOUT_split_3x6_3": {
"layout": [
{ "label": "L00", "x": 0, "y": 0 },
{ "label": "L01", "x": 1, "y": 0 },
{ "label": "L02", "x": 2, "y": 0 },
{ "label": "L03", "x": 3, "y": 0 },
{ "label": "L04", "x": 4, "y": 0 },
{ "label": "L05", "x": 5, "y": 0 },
{ "label": "R00", "x": 11, "y": 0 },
{ "label": "R01", "x": 12, "y": 0 },
{ "label": "R02", "x": 13, "y": 0 },
{ "label": "R03", "x": 14, "y": 0 },
{ "label": "R04", "x": 15, "y": 0 },
{ "label": "R05", "x": 16, "y": 0 },
{ "label": "L10", "x": 0, "y": 1 },
{ "label": "L11", "x": 1, "y": 1 },
{ "label": "L12", "x": 2, "y": 1 },
{ "label": "L13", "x": 3, "y": 1 },
{ "label": "L14", "x": 4, "y": 1 },
{ "label": "L15", "x": 5, "y": 1 },
{ "label": "R10", "x": 11, "y": 1 },
{ "label": "R11", "x": 12, "y": 1 },
{ "label": "R12", "x": 13, "y": 1 },
{ "label": "R13", "x": 14, "y": 1 },
{ "label": "R14", "x": 15, "y": 1 },
{ "label": "R15", "x": 16, "y": 1 },
{ "label": "L20", "x": 0, "y": 2 },
{ "label": "L21", "x": 1, "y": 2 },
{ "label": "L22", "x": 2, "y": 2 },
{ "label": "L23", "x": 3, "y": 2 },
{ "label": "L24", "x": 4, "y": 2 },
{ "label": "L25", "x": 5, "y": 2 },
{ "label": "R20", "x": 11, "y": 2 },
{ "label": "R21", "x": 12, "y": 2 },
{ "label": "R22", "x": 13, "y": 2 },
{ "label": "R23", "x": 14, "y": 2 },
{ "label": "R24", "x": 15, "y": 2 },
{ "label": "R25", "x": 16, "y": 2 },
{ "label": "L33", "x": 5, "y": 3 },
{ "label": "L34", "x": 6, "y": 3 },
{ "label": "L31", "x": 7, "y": 3 },
{ "label": "R33", "x": 9, "y": 3 },
{ "label": "R34", "x": 10, "y": 3 },
{ "label": "R31", "x": 11, "y": 3 }
]
}
}
}

View File

@@ -37,9 +37,6 @@
# undef POINTING_DEVICE_CS_PIN
# define POINTING_DEVICE_CS_PIN A15 // b14
# define PMW33XX_LIFTOFF_DISTANCE 0b1111
# define RGB_MATRIX_LED_FLUSH_LIMIT 33
# define RGB_MATRIX_LED_PROCESS_LIMIT 29
#endif
#undef ROTATIONAL_TRANSFORM_ANGLE

View File

@@ -16,7 +16,6 @@
*/
#include "drashna.h"
// clang-format off
#define LAYOUT_charybdis_4x6_wrapper(...) LAYOUT_charybdis_4x6(__VA_ARGS__)
#define LAYOUT_charybdis_4x6_base( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
@@ -27,13 +26,14 @@
KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, UC_CLUE, \
SH_TT, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, SH_TT, \
LALT_T(KC_TAB), K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(K1B), \
OS_LSFT,CTL_T(K21),ALT_T(K22),GUI_T(K23),K24,K25, K26,K27,RGUI_T(K28),RALT_T(K29),RCTL_T(K2A), OS_RSFT, \
OS_LSFT,CTL_T(K21), K22, K23, K24, K25, K26,K27,RGUI_T(K28),RALT_T(K29),RCTL_T(K2A), OS_RSFT, \
SFT_T(KC_GRV), OS_LALT, OS_LGUI, TT(_MOUSE), KC_ENT, \
KC_SPC, BK_LWER, DL_RAIS \
)
#define LAYOUT_base_wrapper(...) LAYOUT_charybdis_4x6_base(__VA_ARGS__)
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_DEFAULT_LAYER_1] = LAYOUT_base_wrapper(
_________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
@@ -120,9 +120,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
// clang-format on
void keyboard_post_init_keymap(void) {
#ifdef RGB_MATRIX_ENABLE
g_led_config.flags[53] = g_led_config.flags[54] = g_led_config.flags[55] = g_led_config.flags[0] = g_led_config.flags[1] = g_led_config.flags[2] = g_led_config.flags[3] = g_led_config.flags[29] = g_led_config.flags[30] = g_led_config.flags[31] = g_led_config.flags[32] = LED_FLAG_MODIFIER;
g_led_config.flags[53] = g_led_config.flags[54] = g_led_config.flags[55] =
g_led_config.flags[0] = g_led_config.flags[1] = g_led_config.flags[2] = g_led_config.flags[3] =
g_led_config.flags[29] = g_led_config.flags[30] = g_led_config.flags[31] = g_led_config.flags[32] =
LED_FLAG_MODIFIER;
#endif
}
@@ -167,8 +171,8 @@ const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
{{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}},
{{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}},
{{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}},
{{0, 4}, {3, 4}, {2, 4}, {5, 4}, {4, 4}, {2, 4}}
};
{{0, 4}, {3, 4}, {2, 4}, {5, 4}, {4, 4}, {2, 4}},
};
# ifdef ENCODER_MAP_ENABLE
const uint8_t PROGMEM encoder_hand_swap_config[NUM_ENCODERS] = {1, 0};

View File

@@ -37,7 +37,8 @@ ifeq ($(strip $(OVERLOAD_FEATURES)), yes)
NKRO_ENABLE = yes # Enable N-Key Rollover
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
MOUSE_SHARED_EP = no
KEYBOARD_SHARED_EP = yes
MOUSE_SHARED_EP = yes
AUTOCORRECT_ENABLE = yes
CAPS_WORD_ENABLE = yes

View File

@@ -133,24 +133,14 @@ bool oled_task_keymap(void) {
// render_rgb_hsv(1, 13);
oled_set_cursor(1, 13);
oled_write_P(PSTR("OS: "), false);
extern os_variant_t os_type;
switch (os_type) {
case OS_LINUX:
oled_write_ln_P(PSTR("Linux"), false);
break;
case OS_WINDOWS:
oled_write_ln_P(PSTR("Windows"), false);
break;
case OS_MACOS:
oled_write_ln_P(PSTR("MacOS"), false);
break;
case OS_IOS:
oled_write_ln_P(PSTR("iOS"), false);
break;
default:
break;
}
// oled_write_P(PSTR("Timer:"), false);
// oled_write(get_u8_str((uint8_t)(timer_elapsed32(oled_timer) / 1000), ' '), false);
oled_write_P(PSTR("Status: "), false);
if (is_oled_enabled) {
oled_write_P(PSTR("on "), false);
} else {
oled_write_P(PSTR("off"), false);
}
render_keylogger_status(1, 14);

View File

@@ -16,6 +16,7 @@
#pragma once
#define MATRIX_ROW_PINS { D2, D1, D0 }
#define MATRIX_COL_PINS { B6, B5, B4 }

View File

@@ -1,12 +0,0 @@
// Copyright 2023 Binepad (@binepad)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
/*
* Wear Leveling EEPROM Emulation
*/
#define WEAR_LEVELING_LOGICAL_SIZE 2048 // Number of bytes "exposed" to the rest of QMK and denotes the size of the usable EEPROM.
#define WEAR_LEVELING_BACKING_SIZE (WEAR_LEVELING_LOGICAL_SIZE * 2) // Number of bytes used by the wear-leveling algorithm for its underlying storage, and needs to be a multiple of the logical size.

View File

@@ -1,42 +0,0 @@
{
"manufacturer": "Binepad",
"keyboard_name": "BN009 R2",
"maintainer": "binepad",
"bootloader": "stm32duino",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": false
},
"matrix_pins": {
"cols": ["A1", "A2", "A6"],
"rows": ["B6", "B7", "B2"]
},
"processor": "STM32F103",
"url": "http://binepad.com",
"usb": {
"vid": "0x4249",
"pid": "0x4295",
"device_version": "2.0.0"
},
"community_layouts": ["ortho_3x3"],
"layouts": {
"LAYOUT_ortho_3x3": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1, "y": 0 },
{ "matrix": [0, 2], "x": 2, "y": 0 },
{ "matrix": [1, 0], "x": 0, "y": 1 },
{ "matrix": [1, 1], "x": 1, "y": 1 },
{ "matrix": [1, 2], "x": 2, "y": 1 },
{ "matrix": [2, 0], "x": 0, "y": 2 },
{ "matrix": [2, 1], "x": 1, "y": 2 },
{ "matrix": [2, 2], "x": 2, "y": 2 }
]
}
}
}

View File

@@ -1,15 +0,0 @@
{
"keyboard": "binepad/bn009r2",
"version": 1,
"author": "binepad",
"notes": "This file is a keymap.json file for binepad/bn009r2",
"keymap": "default",
"layout": "LAYOUT_ortho_3x3",
"layers": [
[
"KC_7", "KC_8", "KC_9",
"KC_4", "KC_5", "KC_6",
"KC_1", "KC_2", "KC_3"
]
]
}

View File

@@ -1,35 +0,0 @@
{
"config": {
"features": {
"via": true
}
},
"keyboard": "binepad/bn009r2",
"version": 1,
"author": "binepad",
"notes": "This file is a keymap.json file for binepad/bn009r2",
"keymap": "via",
"layout": "LAYOUT_ortho_3x3",
"layers": [
[
"KC_7", "KC_8", "KC_9",
"KC_4", "KC_5", "KC_6",
"KC_1", "KC_2", "KC_3"
],
[
"KC_NO", "KC_NO", "KC_NO",
"KC_NO", "KC_NO", "KC_NO",
"KC_NO", "KC_NO", "KC_NO"
],
[
"KC_NO", "KC_NO", "KC_NO",
"KC_NO", "KC_NO", "KC_NO",
"KC_NO", "KC_NO", "KC_NO"
],
[
"KC_NO", "KC_NO", "KC_NO",
"KC_NO", "KC_NO", "KC_NO",
"KC_NO", "KC_NO", "KC_NO"
]
]
}

View File

@@ -1,27 +0,0 @@
# BINEPAD BN009 R2
![BINEPAD BN009](https://imgur.com/fu0iXD0h.jpg)
*A 9% macropad*
* Keyboard Maintainer: [binepad](https://github.com/binepad)
* Hardware Supported: BN009 *(ft. STM32F103)*
* Hardware Availability: [binepad.com](https://www.binepad.com/bn009)
Make example for this keyboard (after setting up your build environment):
make binepad/bn009r2:default
Flashing example for this keyboard:
make binepad/bn009r2: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) and plug in the keyboard
* **Physical reset button**: Briefly press the button under the small hole on the back of the macropad
* **Keycode in layout**: Press the key mapped to `QK_BOOT` or `RESET` if it is available

View File

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

View File

@@ -1,26 +0,0 @@
{
"keyboard_name": "vimclutch",
"manufacturer": "blu",
"url": "https://github.com/blu006/vimclutch_hw",
"maintainer": "blu006",
"usb": {
"vid": "0xFEED",
"pid": "0x6060",
"device_version": "0.0.1"
},
"development_board": "promicro",
"diode_direction": "ROW2COL",
"matrix_pins": {
"cols": ["B3", "B2", "B6"],
"rows": ["B5"]
},
"layouts": {
"LAYOUT": {
"layout": [
{"label": "k00", "x": 0, "y": 0, "matrix": [0, 0]},
{"label": "k01", "x": 1, "y": 0, "matrix": [0, 1]},
{"label": "k02", "x": 2, "y": 0, "matrix": [0, 2]}
]
}
}
}

View File

@@ -1,58 +0,0 @@
/* Copyright 2023 Brandon Lu
*
* 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 {
_VC,
_VIM
};
enum my_keycodes {
USER_CLUTCH = QK_USER
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
[_VC] = LAYOUT(
TO(_VC), TO(_VIM), KC_F13
),
[_VIM] = LAYOUT(
TO(_VC), TO(_VIM), USER_CLUTCH
)
};
/* Layer-specific lighting */
layer_state_t layer_state_set_user(layer_state_t state) {
writePin(F4, !layer_state_cmp(state, _VC));
writePin(F5, !layer_state_cmp(state, _VIM));
return state;
};
/* Define vim-clutching */
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case USER_CLUTCH:
if (record->event.pressed) {
tap_code_delay(KC_ESC, 50);
tap_code_delay(KC_A, 50);
} else {
tap_code_delay(KC_ESC, 50);
}
break;
}
return true;
};

View File

@@ -1,7 +0,0 @@
# Default keymap for the vim clutch
The two enclosure tactile switches change between modes "voice chat" (default) and "vim clutch."
The voice chat mode uses `F13` to activate or deactivate push-to-talk.
The vim clutch uses the `ESC` and `a` keys to clutch into and out of vim.

View File

@@ -1,58 +0,0 @@
/* Copyright 2023 Brandon Lu
*
* 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 {
_VC,
_VIM
};
enum my_keycodes {
USER_CLUTCH = QK_USER
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
[_VC] = LAYOUT(
TO(_VC), TO(_VIM), KC_F13
),
[_VIM] = LAYOUT(
TO(_VC), TO(_VIM), USER_CLUTCH
)
};
/* Layer-specific lighting */
layer_state_t layer_state_set_user(layer_state_t state) {
writePin(F4, !layer_state_cmp(state, _VC));
writePin(F5, !layer_state_cmp(state, _VIM));
return state;
};
/* Define vim-clutching */
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case USER_CLUTCH:
if (record->event.pressed) {
tap_code_delay(KC_ESC, 50);
tap_code_delay(KC_I, 50);
} else {
tap_code_delay(KC_ESC, 50);
}
break;
}
return true;
};

View File

@@ -1,7 +0,0 @@
# "Traditionalist" keymap for the vim clutch
The two enclosure tactile switches change between modes "voice chat" (default) and "vim clutch."
The voice chat mode uses `F13` to activate or deactivate push-to-talk.
The vim clutch uses the `ESC` and `i` keys to clutch into and out of vim.

View File

@@ -1,67 +0,0 @@
/* Copyright 2021 John Mueller
*
* 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 {
_VIMA,
_VIMI
};
enum my_keycodes {
CLUTCH_A = QK_USER,
CLUTCH_I
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
[_VIMA] = LAYOUT(
TO(_VIMA), TO(_VIMI), CLUTCH_A
),
[_VIMI] = LAYOUT(
TO(_VIMA), TO(_VIMI), CLUTCH_I
)
};
/* Layer-specific lighting */
layer_state_t layer_state_set_user(layer_state_t state) {
writePin(F4, !layer_state_cmp(state, _VIMA));
writePin(F5, !layer_state_cmp(state, _VIMI));
return state;
};
/* Define vim-clutching */
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case CLUTCH_A:
if (record->event.pressed) {
tap_code_delay(KC_ESC, 50);
tap_code_delay(KC_A, 50);
} else {
tap_code_delay(KC_ESC, 50);
}
break;
case CLUTCH_I:
if (record->event.pressed) {
tap_code_delay(KC_ESC, 50);
tap_code_delay(KC_I, 50);
} else {
tap_code_delay(KC_ESC, 50);
}
break;
}
return true;
};

View File

@@ -1,9 +0,0 @@
# Hardcore AI keymap for the vim clutch
The two enclosure tactile switches change between different ways of using the vim clutch.
The first vim clutch mode uses the `ESC` and `a` keys to clutch into and out of vim.
The second vim clutch mode uses the `ESC` and `i` keys to clutch into and out of vim.
These different modes can be combined with shift when using vim to jump to the end or the beginning of a line. The first mode with `a` jumps to the end. The second mode with `i` jumps to the beginning.

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