Merge branch 'develop' into 22927-turn-off-osl-on-nesting

This commit is contained in:
KoFish 2024-03-12 10:27:44 +01:00 committed by GitHub
commit ab3ef70ed8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
336 changed files with 3779 additions and 2005 deletions

View File

@ -4,39 +4,39 @@
root = true
[*]
end_of_line = lf
indent_style = space
indent_size = 4
# We recommend you to keep these unchanged
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[{*.yaml,*.yml}] # To match GitHub Actions formatting
indent_size = 2
[*.md]
trim_trailing_whitespace = false
indent_size = 4
[{qmk,*.py}]
charset = utf-8
max_line_length = 200
# Make these match what we have in .gitattributes
[*.mk]
end_of_line = lf
[{Makefile,*.mk}]
indent_style = tab
[Makefile]
end_of_line = lf
indent_style = tab
[*.sh]
end_of_line = lf
# The gitattributes file will handle the line endings conversion properly according to the operating system settings for other files
# We don't have gitattributes properly for these
# So if the user have for example core.autocrlf set to true
# the line endings would be wrong.
# Don't override anything in `lib/`...
[lib/**]
indent_style = unset
indent_size = unset
tab_width = unset
end_of_line = unset
charset = unset
spelling_language = unset
trim_trailing_whitespace = unset
insert_final_newline = unset
# ...except QMK's `lib/python`.
[{*.py,lib/python/**.py}]
end_of_line = lf
indent_style = space
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 200

View File

@ -36,6 +36,8 @@ jobs:
- name: Get changed files
id: file_changes
uses: tj-actions/changed-files@v42
with:
use_rest_api: true
- name: Run qmk formatters
shell: 'bash {0}'

View File

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

View File

@ -28,6 +28,8 @@ jobs:
- name: Get changed files
id: file_changes
uses: tj-actions/changed-files@v42
with:
use_rest_api: true
- name: Print info
run: |
@ -62,10 +64,12 @@ jobs:
qmk format-text ${{ steps.file_changes.outputs.all_changed_files}} || true
for file in ${{ steps.file_changes.outputs.all_changed_files}}; do
if ! git diff --quiet $file; then
echo "File '${file}' Requires Formatting"
echo "::error file=${file}::Requires Formatting"
exit_code=$(($exit_code + 1))
if [[ -f $file ]]; then
if ! git diff --quiet $file; then
echo "File '${file}' Requires Formatting"
echo "::error file=${file}::Requires Formatting"
exit_code=$(($exit_code + 1))
fi
fi
done

View File

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

View File

@ -32,4 +32,4 @@ jobs:
- name: Install dependencies
run: pip3 install -r requirements-dev.txt
- name: Run tests
run: make test:all
run: qmk test-c

1
.gitignore vendored
View File

@ -37,6 +37,7 @@ quantum/version.h
# DD config at wrong location
/keyboards/**/keymaps/*/info.json
/keyboards/**/keymaps/*/keyboard.json
# Old-style QMK Makefiles
/keyboards/**/Makefile

View File

@ -119,7 +119,7 @@ MAIN_KEYMAP_PATH_3 := $(KEYBOARD_PATH_3)/keymaps/$(KEYMAP)
MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP)
MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP)
# Pull in rules from info.json
# Pull in rules from DD keyboard config
INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --output $(INTERMEDIATE_OUTPUT)/src/info_rules.mk)
include $(INFO_RULES_MK)
@ -221,7 +221,7 @@ include $(BUILDDEFS_PATH)/converters.mk
MCU_ORIG := $(MCU)
include $(wildcard $(PLATFORM_PATH)/*/mcu_selection.mk)
# PLATFORM_KEY should be detected in info.json via key 'processor' (or rules.mk 'MCU')
# PLATFORM_KEY should be detected in DD keyboard config via key 'processor' (or rules.mk 'MCU')
ifeq ($(PLATFORM_KEY),)
$(call CATASTROPHIC_ERROR,Platform not defined)
endif
@ -335,38 +335,54 @@ ifneq ("$(wildcard $(KEYBOARD_PATH_5)/post_config.h)","")
POST_CONFIG_H += $(KEYBOARD_PATH_5)/post_config.h
endif
# Pull in stuff from info.json
INFO_JSON_FILES :=
# Create dependencies on DD keyboard config - structure validated elsewhere
DD_CONFIG_FILES :=
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/info.json)","")
INFO_JSON_FILES += $(KEYBOARD_PATH_1)/info.json
DD_CONFIG_FILES += $(KEYBOARD_PATH_1)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/info.json)","")
INFO_JSON_FILES += $(KEYBOARD_PATH_2)/info.json
DD_CONFIG_FILES += $(KEYBOARD_PATH_2)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/info.json)","")
INFO_JSON_FILES += $(KEYBOARD_PATH_3)/info.json
DD_CONFIG_FILES += $(KEYBOARD_PATH_3)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/info.json)","")
INFO_JSON_FILES += $(KEYBOARD_PATH_4)/info.json
DD_CONFIG_FILES += $(KEYBOARD_PATH_4)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/info.json)","")
INFO_JSON_FILES += $(KEYBOARD_PATH_5)/info.json
DD_CONFIG_FILES += $(KEYBOARD_PATH_5)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/keyboard.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_1)/keyboard.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/keyboard.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_2)/keyboard.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/keyboard.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_3)/keyboard.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/keyboard.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_4)/keyboard.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/keyboard.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_5)/keyboard.json
endif
CONFIG_H += $(INTERMEDIATE_OUTPUT)/src/info_config.h
KEYBOARD_SRC += $(INTERMEDIATE_OUTPUT)/src/default_keyboard.c
$(INTERMEDIATE_OUTPUT)/src/info_config.h: $(INFO_JSON_FILES)
$(INTERMEDIATE_OUTPUT)/src/info_config.h: $(DD_CONFIG_FILES)
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
$(eval CMD=$(QMK_BIN) generate-config-h --quiet --keyboard $(KEYBOARD) --output $(INTERMEDIATE_OUTPUT)/src/info_config.h)
@$(BUILD_CMD)
$(INTERMEDIATE_OUTPUT)/src/default_keyboard.c: $(INFO_JSON_FILES)
$(INTERMEDIATE_OUTPUT)/src/default_keyboard.c: $(DD_CONFIG_FILES)
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
$(eval CMD=$(QMK_BIN) generate-keyboard-c --quiet --keyboard $(KEYBOARD) --output $(INTERMEDIATE_OUTPUT)/src/default_keyboard.c)
@$(BUILD_CMD)
$(INTERMEDIATE_OUTPUT)/src/default_keyboard.h: $(INFO_JSON_FILES)
$(INTERMEDIATE_OUTPUT)/src/default_keyboard.h: $(DD_CONFIG_FILES)
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
$(eval CMD=$(QMK_BIN) generate-keyboard-h --quiet --keyboard $(KEYBOARD) --include $(FOUND_KEYBOARD_H) --output $(INTERMEDIATE_OUTPUT)/src/default_keyboard.h)
@$(BUILD_CMD)

View File

@ -19,6 +19,8 @@
// Audio
"AUDIO_DEFAULT_ON": {"info_key": "audio.default.on", "value_type": "bool"},
"AUDIO_DEFAULT_CLICKY_ON": {"info_key": "audio.default.clicky", "value_type": "bool"},
"AUDIO_POWER_CONTROL_PIN": {"info_key": "audio.power_control.pin"},
"AUDIO_POWER_CONTROL_PIN_ON_STATE": {"info_key": "audio.power_control.on_state", "value_type": "int" },
"AUDIO_VOICES": {"info_key": "audio.voices", "value_type": "flag"},
"SENDSTRING_BELL": {"info_key": "audio.macro_beep", "value_type": "flag"},

View File

@ -135,6 +135,14 @@
},
"macro_beep": {"type": "boolean"},
"pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"},
"power_control": {
"type": "object",
"additionalProperties": false,
"properties": {
"on_state": {"$ref": "qmk.definitions.v1#/bit"},
"pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}
}
},
"voices": {"type": "boolean"}
}
},

View File

@ -1,20 +0,0 @@
// Copyright %YEAR% %REAL_NAME% (@%USER_NAME%)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT

View File

@ -791,3 +791,39 @@ This command converts a TTF font to an intermediate format for editing, before c
This command converts an intermediate font image to the QFF File Format. See the [Quantum Painter](quantum_painter.md?id=quantum-painter-cli) documentation for more information on this command.
## `qmk test-c`
This command runs the C unit test suite. If you make changes to C code you should ensure this runs successfully.
**Usage**:
```
qmk test-c [-h] [-t TEST] [-l] [-c] [-e ENV] [-j PARALLEL]
options:
-h, --help show this help message and exit
-t TEST, --test TEST Test to run from the available list. Supports wildcard globs. May be passed multiple times.
-l, --list List available tests.
-c, --clean Remove object files before compiling.
-e ENV, --env ENV Set a variable to be passed to make. May be passed multiple times.
-j PARALLEL, --parallel PARALLEL
Set the number of parallel make jobs; 0 means unlimited.
```
**Examples**:
Run entire test suite:
qmk test-c
List available tests:
qmk test-c --list
Run matching test:
qmk test-c --test unicode*
Run single test:
qmk test-c --test basic

View File

@ -171,29 +171,31 @@ The available keycodes for audio are:
## Audio Config
| Settings | Default | Description |
|---------------------------------|----------------------|-------------------------------------------------------------------------------|
|`AUDIO_PIN` | *Not defined* |Configures the pin that the speaker is connected to. |
|`AUDIO_PIN_ALT` | *Not defined* |Configures the pin for a second speaker or second pin connected to one speaker.|
|`AUDIO_PIN_ALT_AS_NEGATIVE` | *Not defined* |Enables support for one speaker connected to two pins. |
|`AUDIO_INIT_DELAY` | *Not defined* |Enables delay during startup song to accomidate for USB startup issues. |
|`AUDIO_ENABLE_TONE_MULTIPLEXING` | *Not defined* |Enables time splicing/multiplexing to create multiple tones simutaneously. |
|`STARTUP_SONG` | `STARTUP_SOUND` |Plays when the keyboard starts up (audio.c) |
|`GOODBYE_SONG` | `GOODBYE_SOUND` |Plays when you press the QK_BOOT key (quantum.c) |
|`AG_NORM_SONG` | `AG_NORM_SOUND` |Plays when you press AG_NORM (process_magic.c) |
|`AG_SWAP_SONG` | `AG_SWAP_SOUND` |Plays when you press AG_SWAP (process_magic.c) |
|`CG_NORM_SONG` | `AG_NORM_SOUND` |Plays when you press CG_NORM (process_magic.c) |
|`CG_SWAP_SONG` | `AG_SWAP_SOUND` |Plays when you press CG_SWAP (process_magic.c) |
|`MUSIC_ON_SONG` | `MUSIC_ON_SOUND` |Plays when music mode is activated (process_music.c) |
|`MUSIC_OFF_SONG` | `MUSIC_OFF_SOUND` |Plays when music mode is deactivated (process_music.c) |
|`MIDI_ON_SONG` | `MUSIC_ON_SOUND` |Plays when midi mode is activated (process_music.c) |
|`MIDI_OFF_SONG` | `MUSIC_OFF_SOUND` |Plays when midi mode is deactivated (process_music.c) |
|`CHROMATIC_SONG` | `CHROMATIC_SOUND` |Plays when the chromatic music mode is selected (process_music.c) |
|`GUITAR_SONG` | `GUITAR_SOUND` |Plays when the guitar music mode is selected (process_music.c) |
|`VIOLIN_SONG` | `VIOLIN_SOUND` |Plays when the violin music mode is selected (process_music.c) |
|`MAJOR_SONG` | `MAJOR_SOUND` |Plays when the major music mode is selected (process_music.c) |
|`DEFAULT_LAYER_SONGS` | *Not defined* |Plays song when switched default layers with [`set_single_persistent_default_layer(layer)`](ref_functions.md#setting-the-persistent-default-layer)(quantum.c) |
|`SENDSTRING_BELL` | *Not defined* |Plays chime when the "enter" ("\a") character is sent (send_string.c) |
| Settings | Default | Description |
|----------------------------------|----------------------|---------------------------------------------------------------------------------------------|
|`AUDIO_PIN` | *Not defined* |Configures the pin that the speaker is connected to. |
|`AUDIO_PIN_ALT` | *Not defined* |Configures the pin for a second speaker or second pin connected to one speaker. |
|`AUDIO_PIN_ALT_AS_NEGATIVE` | *Not defined* |Enables support for one speaker connected to two pins. |
|`AUDIO_INIT_DELAY` | *Not defined* |Enables delay during startup song to accomidate for USB startup issues. |
|`AUDIO_ENABLE_TONE_MULTIPLEXING` | *Not defined* |Enables time splicing/multiplexing to create multiple tones simutaneously. |
|`AUDIO_POWER_CONTROL_PIN` | *Not defined* |Enables power control code to enable or cut off power to speaker (such as with PAM8302 amp). |
|`AUDIO_POWER_CONTROL_PIN_ON_STATE`| `1` |The state of the audio power control pin when audio is "on" - `1` for high, `0` for low. |
|`STARTUP_SONG` | `STARTUP_SOUND` |Plays when the keyboard starts up (audio.c) |
|`GOODBYE_SONG` | `GOODBYE_SOUND` |Plays when you press the QK_BOOT key (quantum.c) |
|`AG_NORM_SONG` | `AG_NORM_SOUND` |Plays when you press AG_NORM (process_magic.c) |
|`AG_SWAP_SONG` | `AG_SWAP_SOUND` |Plays when you press AG_SWAP (process_magic.c) |
|`CG_NORM_SONG` | `AG_NORM_SOUND` |Plays when you press CG_NORM (process_magic.c) |
|`CG_SWAP_SONG` | `AG_SWAP_SOUND` |Plays when you press CG_SWAP (process_magic.c) |
|`MUSIC_ON_SONG` | `MUSIC_ON_SOUND` |Plays when music mode is activated (process_music.c) |
|`MUSIC_OFF_SONG` | `MUSIC_OFF_SOUND` |Plays when music mode is deactivated (process_music.c) |
|`MIDI_ON_SONG` | `MUSIC_ON_SOUND` |Plays when midi mode is activated (process_music.c) |
|`MIDI_OFF_SONG` | `MUSIC_OFF_SOUND` |Plays when midi mode is deactivated (process_music.c) |
|`CHROMATIC_SONG` | `CHROMATIC_SOUND` |Plays when the chromatic music mode is selected (process_music.c) |
|`GUITAR_SONG` | `GUITAR_SOUND` |Plays when the guitar music mode is selected (process_music.c) |
|`VIOLIN_SONG` | `VIOLIN_SOUND` |Plays when the violin music mode is selected (process_music.c) |
|`MAJOR_SONG` | `MAJOR_SOUND` |Plays when the major music mode is selected (process_music.c) |
|`DEFAULT_LAYER_SONGS` | *Not defined* |Plays song when switched default layers with [`set_single_persistent_default_layer(layer)`](ref_functions.md#setting-the-persistent-default-layer)(quantum.c). |
|`SENDSTRING_BELL` | *Not defined* |Plays chime when the "enter" ("\a") character is sent (send_string.c) |
## Tempo
the 'speed' at which SONGs are played is dictated by the set Tempo, which is measured in beats-per-minute. Note lengths are defined relative to that.

View File

@ -780,6 +780,9 @@ There are several functions that allow for more advanced interaction with the au
| `get_auto_mouse_timeout(void)` | Return the current timeout for turing off the layer | | `uint16_t` |
| `set_auto_mouse_debounce(uint16_t timeout)` | Change/set the debounce for preventing layer activation | | `void`(None) |
| `get_auto_mouse_debounce(void)` | Return the current debounce for preventing layer activation | | `uint8_t` |
| `is_auto_mouse_active(void)` | Returns the active state of the auto mouse layer (eg if the layer has been triggered)| | `bool` |
| `get_auto_mouse_key_tracker(void)` | Gets the current count for the auto mouse key tracker. | | `int8_t` |
| `set_auto_mouse_key_tracker(int8_t key_tracker)` | Sets/Overrides the current count for the auto mouse key tracker. | | `void`(None) |
_NOTES:_
- _Due to the nature of how some functions work, the `auto_mouse_trigger_reset`, and `auto_mouse_layer_off` functions should never be called in the `layer_state_set_*` stack as this can cause indefinite loops._

View File

@ -117,3 +117,77 @@ Using the [standard `compile_commands.json` database](https://clang.llvm.org/doc
1. Start typing `clangd: Restart Language Server` and select it when it appears.
Now you're ready to code QMK Firmware in VS Code!
# Debugging ARM MCUs with Visual Studio Code
**...and a Black Magic Probe.**
Visual Studio Code has the ability to debug applications, but requires some configuration in order to get it to be able to do so for ARM targets.
This documentation describes a known-working configuration for setting up the use of a Black Magic Probe to debug using VS Code.
It is assumed that you've correctly set up the electrical connectivity of the Black Magic Probe with your MCU. Wiring up `NRST`, `SWDIO`, `SWCLK`, and `GND` should be enough.
Install the following plugin into VS Code:
* [Cortex-Debug](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) -
This adds debugger support for ARM Cortex targets to VS Code.
A debugging target for the MCU for your board needs to be defined, and can be done so by adding the following to a `.vscode/launch.json` file:
```json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Black Magic Probe (OneKey Proton-C)",
"type": "cortex-debug",
"request": "launch",
"cwd": "${workspaceRoot}",
"executable": "${workspaceRoot}/.build/handwired_onekey_proton_c_default.elf",
"servertype": "bmp",
"BMPGDBSerialPort": "COM4",
"svdFile": "Q:\\svd\\STM32F303.svd",
"device": "STM32F303",
"v1": false,
"windows": {
"armToolchainPath": "C:\\QMK_MSYS\\mingw64\\bin"
}
}
]
}
```
You'll need to perform some modifications to the file above in order to target your specific device:
* `"name"`: Can be anything, but if you're debugging multiple targets you'll want something descriptive here.
* `"cwd"`: The path to the QMK Firmware repository root directory -- _if using the `.vscode` directory existing in the `qmk_firmware` git repository, the default above should be correct_
* `"executable"`: The path to the `elf` file generated as part of the build for your keyboard -- _exists in `<qmk_firmware>/.build`_
* `"BMPGDBSerialPort"`: The `COM` port under Windows, or the `/dev/...` path for Linux/macOS. Two serial port devices will be created -- the Black Magic Probe debug port is *usually* the first. If it doesn't work, try the second.
* `"svdFile"`: _[Optional]_ The path to the SVD file that defines the register layout for the MCU -- the appropriate file can be downloaded from the [cmsis-svd repository](https://github.com/posborne/cmsis-svd/tree/master/data/STMicro)
* `"device"`: The name of the MCU, which matches the `<name>` tag at the top of the downloaded `svd` file.
* `"armToolchainPath"`: _[Optional]_ The path to the ARM toolchain installation location on Windows -- under normal circumstances Linux/macOS will auto-detect this correctly and will not need to be specified.
!> Windows builds of QMK Firmware are generally compiled using QMK MSYS, and the path to gdb's location (`C:\\QMK_MSYS\\mingw64\\bin`) needs to be specified under `armToolchainPath` for it to be detected. You may also need to change the GDB path to point at `C:\\QMK_MSYS\\mingw64\\bin\\gdb-multiarch.exe` in the VSCode Cortex-Debug user settings: ![VSCode Settings](https://i.imgur.com/EGrPM1L.png)
Optionally, the following modifications should also be made to the keyboard's `rules.mk` file to disable optimisations -- not strictly required but will ensure breakpoints and variable viewing works correctly:
```makefile
# Disable optimisations for debugging purposes
LTO_ENABLE = no
OPT = g
DEBUG = 3
```
At this point, you should build and flash your firmware through normal methods (`qmk compile ...` and `qmk flash ...`).
Once completed, you can:
* Switch to the debug view in VS Code (in the sidebar, the Play button with a bug next to it)
* Select the newly-created debug target in the dropdown at the top of the sidebar
* Click the green play button next to the dropdown
VS Code's debugger will then start executing the compiled firmware on the MCU.
At this stage, you should have full debugging set up, with breakpoints and variable listings working!

View File

@ -123,10 +123,17 @@ Configures the [Audio](feature_audio.md) feature.
* Default: `false`
* `pins` (Required)
* The GPIO pin(s) connected to the speaker(s).
* `power_control`
* `on_state`
* The logical GPIO state required to turn the speaker on.
* Default: `1` (on = high)
* `pin`
* The GPIO pin connected to speaker power circuit.
* `voices`
* Use multiple audio voices.
* Default: `false`
## Backlight :id=backlight
Configures the [Backlight](feature_backlight.md) feature.

View File

@ -208,9 +208,9 @@ The following `#define`s apply only to the `pwm` driver:
|`WS2812_PWM_DRIVER` |`PWMD2` |The PWM driver to use |
|`WS2812_PWM_CHANNEL` |`2` |The PWM channel to use |
|`WS2812_PWM_PAL_MODE` |`2` |The pin alternative function to use |
|`WS2812_DMA_STREAM` |`STM32_DMA1_STREAM2`|The DMA Stream for `TIMx_UP` |
|`WS2812_DMA_CHANNEL` |`2` |The DMA Channel for `TIMx_UP` |
|`WS2812_DMAMUX_ID` |*Not defined* |The DMAMUX configuration for `TIMx_UP` - only required if your MCU has a DMAMUX peripheral|
|`WS2812_PWM_DMA_STREAM` |`STM32_DMA1_STREAM2`|The DMA Stream for `TIMx_UP` |
|`WS2812_PWM_DMA_CHANNEL` |`2` |The DMA Channel for `TIMx_UP` |
|`WS2812_PWM_DMAMUX_ID` |*Not defined* |The DMAMUX configuration for `TIMx_UP` - only required if your MCU has a DMAMUX peripheral|
|`WS2812_PWM_COMPLEMENTARY_OUTPUT`|*Not defined* |Whether the PWM output is complementary (`TIMx_CHyN`) |
?> Using a complementary timer output (`TIMx_CHyN`) is possible only for advanced-control timers (1, 8 and 20 on STM32), and the `STM32_PWM_USE_ADVANCED` option in `mcuconf.h` must be set to `TRUE`. Complementary outputs of general-purpose timers are not supported due to ChibiOS limitations.

View File

@ -18,16 +18,13 @@
"driver": "vendor"
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": false,
"rgb_matrix": true,
"rgblight": false
"rgb_matrix": true
},
"matrix_pins": {
"rows": ["GP21", "GP20", "GP19", "GP18"],

View File

@ -18,16 +18,13 @@
"driver": "vendor"
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": false,
"rgb_matrix": true,
"rgblight": false
"rgb_matrix": true
},
"matrix_pins": {
"rows": ["GP21", "GP20", "GP19", "GP18"],

View File

@ -18,16 +18,13 @@
"driver": "vendor"
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": false,
"rgb_matrix": true,
"rgblight": false
"rgb_matrix": true
},
"matrix_pins": {
"rows": ["GP21", "GP20", "GP19", "GP18"],

View File

@ -15,8 +15,6 @@
"layer_count": 10
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,
@ -24,7 +22,6 @@
"mousekey": true,
"nkro": false,
"rgb_matrix": true,
"rgblight": false,
"oled": true
},
"matrix_pins": {

View File

@ -15,8 +15,6 @@
"layer_count": 10
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,
@ -24,8 +22,7 @@
"extrakey": true,
"mousekey": true,
"nkro": false,
"rgb_matrix": true,
"rgblight": false
"rgb_matrix": true
},
"ws2812": {
"pin": "GP17",

View File

@ -15,16 +15,13 @@
"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
"rgb_matrix": true
},
"ws2812": {
"pin": "GP15",

View File

@ -15,16 +15,13 @@
"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
"rgb_matrix": true
},
"ws2812": {
"pin": "GP19",

View File

@ -12,8 +12,6 @@
"vid": "0x6F75"
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,
@ -21,8 +19,7 @@
"extrakey": true,
"mousekey": true,
"nkro": false,
"rgb_matrix": true,
"rgblight": false
"rgb_matrix": true
},
"ws2812": {
"pin": "GP6",

View File

@ -11,8 +11,6 @@
"vid": "0x6F75"
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,
@ -20,8 +18,7 @@
"extrakey": true,
"mousekey": true,
"nkro": false,
"rgb_matrix": true,
"rgblight": false
"rgb_matrix": true
},
"ws2812": {
"pin": "D7"

View File

@ -30,8 +30,6 @@
"rows": ["C2", "D0", "B0", "C7", "C5"]
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,

View File

@ -26,8 +26,6 @@
"rows": ["B8", "A15", "C13", "A2", "A6"]
},
"features": {
"audio": false,
"backlight": false,
"bootmagic": true,
"command": false,
"console": false,

View File

@ -22,9 +22,7 @@
"console": false,
"command": false,
"nkro": true,
"backlight": false,
"rgblight": true,
"audio": false
"rgblight": true
},
"ws2812": {
"pin": "A8"

View File

@ -28,5 +28,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_DMA_CHANNEL 6
#define WS2812_PWM_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_PWM_DMA_CHANNEL 6

View File

@ -28,5 +28,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_DMA_CHANNEL 6
#define WS2812_PWM_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_PWM_DMA_CHANNEL 6

View File

@ -28,5 +28,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_DMA_CHANNEL 6
#define WS2812_PWM_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_PWM_DMA_CHANNEL 6

View File

@ -27,8 +27,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_DMA_CHANNEL 6
#define WS2812_PWM_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_PWM_DMA_CHANNEL 6
// If this is defined, the caps lock LED will turn on and off according to the state of caps lock. If not, the LED will shine like all other LEDs despite the caps lock state.
#define CAPSLOCK_INDICATOR

View File

@ -28,8 +28,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_DMA_CHANNEL 6
#define WS2812_PWM_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_PWM_DMA_CHANNEL 6
// If this is defined, the caps lock LED will turn on and off according to the state of caps lock. If not, the LED will shine like all other LEDs despite the caps lock state.
#define CAPSLOCK_INDICATOR

View File

@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_DMA_CHANNEL 6
#define WS2812_PWM_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_PWM_DMA_CHANNEL 6
#define EEPROM_I2C_24LC256

View File

@ -24,5 +24,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_DMA_CHANNEL 6
#define WS2812_PWM_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_PWM_DMA_CHANNEL 6

View File

@ -16,10 +16,7 @@
"mousekey": true,
"extrakey": true,
"console": false,
"backlight": false,
"rgblight": true,
"audio": false,
"encoder": false,
"nkro": true
},
"diode_direction": "COL2ROW",

View File

@ -24,5 +24,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_DMA_CHANNEL 6
#define WS2812_PWM_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_PWM_DMA_CHANNEL 6

View File

@ -16,10 +16,7 @@
"mousekey": true,
"extrakey": true,
"console": false,
"backlight": false,
"rgblight": true,
"audio": false,
"encoder": false,
"nkro": true
},
"diode_direction": "COL2ROW",

View File

@ -24,5 +24,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_DMA_CHANNEL 6
#define WS2812_PWM_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_PWM_DMA_CHANNEL 6

View File

@ -16,10 +16,7 @@
"mousekey": true,
"extrakey": true,
"console": false,
"backlight": false,
"rgblight": true,
"audio": false,
"encoder": false,
"nkro": true
},
"diode_direction": "COL2ROW",

View File

@ -48,5 +48,3 @@
#define AUDIO_PWM_CHANNEL RP2040_PWM_CHANNEL_A
#define AUDIO_INIT_DELAY
#define AUDIO_CLICKY
#define SPEAKER_SHUTDOWN GP14

View File

@ -8,6 +8,11 @@
"pid": "0x0108",
"device_version": "0.0.1"
},
"audio": {
"power_control": {
"pin": "GP14"
}
},
"encoder": {
"rotary": [
{"pin_a": "GP18", "pin_b": "GP17"}

View File

@ -17,7 +17,6 @@
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgblight": false,
"rgb_matrix": true
},
"ws2812": {

View File

@ -19,27 +19,12 @@
#include "pin_defs.h"
// key matrix size
#define MATRIX_ROWS 5
#define MATRIX_COLS 14
// layer size: MATRIX_ROWS * MATRIX_COLS * sizeof(uint16_t) = 140 bytes
#define LINE_UART_TX B0 // Master TX, LED RX
#define LINE_UART_RX B1 // Master RX, LED TX
#define LINE_BT_UART_TX A4 // Master TX, BLE RX
#define LINE_BT_UART_RX A5 // Master RX, BLE TX
// outputs (rows are pulled low)
#define MATRIX_ROW_PINS \
{ C2, C1, B5, B4, C3 }
// inputs (columns are sampled)
// PORTA 12,13 conflict with SWD
#define MATRIX_COL_PINS \
{ C4, C5, B10, B11, C0, A15, A8, A10, A11, A12, A13, A14, B2, B3 }
// Obins stock firmware has something similar to this already enabled, but disabled by default in QMK
#define PERMISSIVE_HOLD

View File

@ -3,124 +3,9 @@
"usb": {
"pid": "0x8008"
},
"eeprom": {
"driver": "wear_leveling",
"wear_leveling": {
"driver": "spi_flash",
"backing_size": 2048
}
},
"rgb_matrix": {
"animations":{
"alphas_mods": true,
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
"rainbow_moving_chevron": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"pixel_fractal": true,
"pixel_flow": true,
"pixel_rain": true,
"typing_heatmap": true,
"digital_rain": true,
"solid_reactive_simple": true,
"solid_reactive": true,
"solid_reactive_wide": true,
"solid_reactive_multiwide": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_nexus": true,
"solid_reactive_multinexus": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true
},
"driver": "custom",
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
{"matrix": [0, 1], "x": 16, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 32, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 48, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 65, "y": 0, "flags": 4},
{"matrix": [0, 5], "x": 81, "y": 0, "flags": 4},
{"matrix": [0, 6], "x": 97, "y": 0, "flags": 4},
{"matrix": [0, 7], "x": 113, "y": 0, "flags": 4},
{"matrix": [0, 8], "x": 129, "y": 0, "flags": 4},
{"matrix": [0, 9], "x": 145, "y": 0, "flags": 4},
{"matrix": [0, 10], "x": 161, "y": 0, "flags": 4},
{"matrix": [0, 11], "x": 178, "y": 0, "flags": 4},
{"matrix": [0, 12], "x": 194, "y": 0, "flags": 4},
{"matrix": [0, 13], "x": 218, "y": 0, "flags": 4},
{"matrix": [1, 0], "x": 4, "y": 16, "flags": 4},
{"matrix": [1, 1], "x": 24, "y": 16, "flags": 4},
{"matrix": [1, 2], "x": 40, "y": 16, "flags": 4},
{"matrix": [1, 3], "x": 57, "y": 16, "flags": 4},
{"matrix": [1, 4], "x": 73, "y": 16, "flags": 4},
{"matrix": [1, 5], "x": 89, "y": 16, "flags": 4},
{"matrix": [1, 6], "x": 105, "y": 16, "flags": 4},
{"matrix": [1, 7], "x": 121, "y": 16, "flags": 4},
{"matrix": [1, 8], "x": 137, "y": 16, "flags": 4},
{"matrix": [1, 9], "x": 153, "y": 16, "flags": 4},
{"matrix": [1, 10], "x": 170, "y": 16, "flags": 4},
{"matrix": [1, 11], "x": 186, "y": 16, "flags": 4},
{"matrix": [1, 12], "x": 202, "y": 16, "flags": 4},
{"matrix": [1, 13], "x": 222, "y": 16, "flags": 4},
{"matrix": [2, 0], "x": 6, "y": 32, "flags": 4},
{"matrix": [2, 1], "x": 28, "y": 32, "flags": 4},
{"matrix": [2, 2], "x": 44, "y": 32, "flags": 4},
{"matrix": [2, 3], "x": 61, "y": 32, "flags": 4},
{"matrix": [2, 4], "x": 77, "y": 32, "flags": 4},
{"matrix": [2, 5], "x": 93, "y": 32, "flags": 4},
{"matrix": [2, 6], "x": 109, "y": 32, "flags": 4},
{"matrix": [2, 7], "x": 125, "y": 32, "flags": 4},
{"matrix": [2, 8], "x": 141, "y": 32, "flags": 4},
{"matrix": [2, 9], "x": 157, "y": 32, "flags": 4},
{"matrix": [2, 10], "x": 174, "y": 32, "flags": 4},
{"matrix": [2, 11], "x": 190, "y": 32, "flags": 4},
{"matrix": [2, 12], "x": 216, "y": 32, "flags": 4},
{"matrix": [3, 0], "x": 10, "y": 48, "flags": 1},
{"matrix": [3, 2], "x": 36, "y": 48, "flags": 4},
{"matrix": [3, 3], "x": 52, "y": 48, "flags": 4},
{"matrix": [3, 4], "x": 69, "y": 48, "flags": 4},
{"matrix": [3, 5], "x": 85, "y": 48, "flags": 4},
{"matrix": [3, 6], "x": 101, "y": 48, "flags": 4},
{"matrix": [3, 7], "x": 117, "y": 48, "flags": 4},
{"matrix": [3, 8], "x": 133, "y": 48, "flags": 4},
{"matrix": [3, 9], "x": 149, "y": 48, "flags": 4},
{"matrix": [3, 10], "x": 165, "y": 48, "flags": 4},
{"matrix": [3, 11], "x": 182, "y": 48, "flags": 4},
{"matrix": [3, 12], "x": 212, "y": 48, "flags": 1},
{"matrix": [4, 0], "x": 2, "y": 64, "flags": 1},
{"matrix": [4, 2], "x": 22, "y": 64, "flags": 1},
{"matrix": [4, 3], "x": 42, "y": 64, "flags": 1},
{"matrix": [4, 6], "x": 103, "y": 64, "flags": 4},
{"matrix": [4, 9], "x": 163, "y": 64, "flags": 1},
{"matrix": [4, 10], "x": 184, "y": 64, "flags": 1},
{"matrix": [4, 11], "x": 204, "y": 64, "flags": 1},
{"matrix": [4, 12], "x": 224, "y": 64, "flags": 1}
],
"led_flush_limit": 40
},
"community_layouts": ["60_ansi"]
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["C4", "C5", "B10", "B11", "C0", "A15", "A8", "A10", "A11", "A12", "A13", "A14", "B2", "B3"],
"rows": ["C2", "C1", "B5", "B4", "C3"]
}
}

View File

@ -13,25 +13,8 @@ BOARD = ANNEPRO2_C15
BOOTLOADER = custom
PROGRAM_CMD = annepro2_tools --boot $(BUILD_DIR)/$(TARGET).bin
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Enable N-Key Rollover
# Custom RGB matrix handling
RGB_MATRIX_ENABLE = yes
# Keys
CUSTOM_MATRIX = lite
# Anne Pro 2
SRC = \
matrix.c \
annepro2_ble.c \
ap2_led.c \
protocol.c \

View File

@ -19,25 +19,12 @@
#include "pin_defs.h"
// key matrix size
#define MATRIX_ROWS 5
#define MATRIX_COLS 14
// layer size: MATRIX_ROWS * MATRIX_COLS * sizeof(uint16_t) = 140 bytes
#define LINE_UART_TX B0
#define LINE_UART_RX B1
#define LINE_BT_UART_TX A4 // Master TX, BLE RX
#define LINE_BT_UART_RX A5 // Master RX, BLE TX
// outputs (rows are pulled low)
#define MATRIX_ROW_PINS \
{ B5, B4, B3, B2, D1 }
// inputs (columns are sampled)
#define MATRIX_COL_PINS \
{ C4, C5, D0, B15, C11, A15, C12, C13, A8, A10, A11, A14, D2, D3 }
// Obins stock firmware has something similar to this already enabled, but disabled by default in QMK
#define PERMISSIVE_HOLD

View File

@ -3,124 +3,9 @@
"usb": {
"pid": "0x8009"
},
"eeprom": {
"driver": "wear_leveling",
"wear_leveling": {
"driver": "spi_flash",
"backing_size": 2048
}
},
"rgb_matrix": {
"animations":{
"alphas_mods": true,
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
"rainbow_moving_chevron": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"pixel_fractal": true,
"pixel_flow": true,
"pixel_rain": true,
"typing_heatmap": true,
"digital_rain": true,
"solid_reactive_simple": true,
"solid_reactive": true,
"solid_reactive_wide": true,
"solid_reactive_multiwide": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_nexus": true,
"solid_reactive_multinexus": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true
},
"driver": "custom",
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
{"matrix": [0, 1], "x": 16, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 32, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 48, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 65, "y": 0, "flags": 4},
{"matrix": [0, 5], "x": 81, "y": 0, "flags": 4},
{"matrix": [0, 6], "x": 97, "y": 0, "flags": 4},
{"matrix": [0, 7], "x": 113, "y": 0, "flags": 4},
{"matrix": [0, 8], "x": 129, "y": 0, "flags": 4},
{"matrix": [0, 9], "x": 145, "y": 0, "flags": 4},
{"matrix": [0, 10], "x": 161, "y": 0, "flags": 4},
{"matrix": [0, 11], "x": 178, "y": 0, "flags": 4},
{"matrix": [0, 12], "x": 194, "y": 0, "flags": 4},
{"matrix": [0, 13], "x": 218, "y": 0, "flags": 4},
{"matrix": [1, 0], "x": 4, "y": 16, "flags": 4},
{"matrix": [1, 1], "x": 24, "y": 16, "flags": 4},
{"matrix": [1, 2], "x": 40, "y": 16, "flags": 4},
{"matrix": [1, 3], "x": 57, "y": 16, "flags": 4},
{"matrix": [1, 4], "x": 73, "y": 16, "flags": 4},
{"matrix": [1, 5], "x": 89, "y": 16, "flags": 4},
{"matrix": [1, 6], "x": 105, "y": 16, "flags": 4},
{"matrix": [1, 7], "x": 121, "y": 16, "flags": 4},
{"matrix": [1, 8], "x": 137, "y": 16, "flags": 4},
{"matrix": [1, 9], "x": 153, "y": 16, "flags": 4},
{"matrix": [1, 10], "x": 170, "y": 16, "flags": 4},
{"matrix": [1, 11], "x": 186, "y": 16, "flags": 4},
{"matrix": [1, 12], "x": 202, "y": 16, "flags": 4},
{"matrix": [1, 13], "x": 222, "y": 16, "flags": 4},
{"matrix": [2, 0], "x": 6, "y": 32, "flags": 4},
{"matrix": [2, 1], "x": 28, "y": 32, "flags": 4},
{"matrix": [2, 2], "x": 44, "y": 32, "flags": 4},
{"matrix": [2, 3], "x": 61, "y": 32, "flags": 4},
{"matrix": [2, 4], "x": 77, "y": 32, "flags": 4},
{"matrix": [2, 5], "x": 93, "y": 32, "flags": 4},
{"matrix": [2, 6], "x": 109, "y": 32, "flags": 4},
{"matrix": [2, 7], "x": 125, "y": 32, "flags": 4},
{"matrix": [2, 8], "x": 141, "y": 32, "flags": 4},
{"matrix": [2, 9], "x": 157, "y": 32, "flags": 4},
{"matrix": [2, 10], "x": 174, "y": 32, "flags": 4},
{"matrix": [2, 11], "x": 190, "y": 32, "flags": 4},
{"matrix": [2, 12], "x": 216, "y": 32, "flags": 4},
{"matrix": [3, 0], "x": 10, "y": 48, "flags": 1},
{"matrix": [3, 2], "x": 36, "y": 48, "flags": 4},
{"matrix": [3, 3], "x": 52, "y": 48, "flags": 4},
{"matrix": [3, 4], "x": 69, "y": 48, "flags": 4},
{"matrix": [3, 5], "x": 85, "y": 48, "flags": 4},
{"matrix": [3, 6], "x": 101, "y": 48, "flags": 4},
{"matrix": [3, 7], "x": 117, "y": 48, "flags": 4},
{"matrix": [3, 8], "x": 133, "y": 48, "flags": 4},
{"matrix": [3, 9], "x": 149, "y": 48, "flags": 4},
{"matrix": [3, 10], "x": 165, "y": 48, "flags": 4},
{"matrix": [3, 11], "x": 182, "y": 48, "flags": 4},
{"matrix": [3, 12], "x": 212, "y": 48, "flags": 1},
{"matrix": [4, 0], "x": 2, "y": 64, "flags": 1},
{"matrix": [4, 2], "x": 22, "y": 64, "flags": 1},
{"matrix": [4, 3], "x": 42, "y": 64, "flags": 1},
{"matrix": [4, 6], "x": 103, "y": 64, "flags": 4},
{"matrix": [4, 9], "x": 163, "y": 64, "flags": 1},
{"matrix": [4, 10], "x": 184, "y": 64, "flags": 1},
{"matrix": [4, 11], "x": 204, "y": 64, "flags": 1},
{"matrix": [4, 12], "x": 224, "y": 64, "flags": 1}
],
"led_flush_limit": 40
},
"community_layouts": ["60_ansi", "60_iso"]
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["C4", "C5", "D0", "B15", "C11", "A15", "C12", "C13", "A8", "A10", "A11", "A14", "D2", "D3"],
"rows": ["B5", "B4", "B3", "B2", "D1"]
}
}

View File

@ -13,25 +13,8 @@ BOARD = ANNEPRO2_C18
BOOTLOADER = custom
PROGRAM_CMD = annepro2_tools --boot $(BUILD_DIR)/$(TARGET).bin
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Enable N-Key Rollover
# Custom RGB matrix handling
RGB_MATRIX_ENABLE = yes
# Keys
CUSTOM_MATRIX = lite
# Anne Pro 2
SRC = \
matrix.c \
annepro2_ble.c \
ap2_led.c \
protocol.c \

View File

@ -6,6 +6,135 @@
"vid": "0xAC20",
"device_version": "13.3.7"
},
"build": {
"lto": true
},
"eeprom": {
"driver": "wear_leveling",
"wear_leveling": {
"driver": "spi_flash",
"backing_size": 2048
}
},
"features": {
"bootmagic": true,
"mousekey": true,
"extrakey": true,
"rgb_matrix": true
},
"rgb_matrix": {
"animations":{
"alphas_mods": true,
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
"rainbow_moving_chevron": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"pixel_fractal": true,
"pixel_flow": true,
"pixel_rain": true,
"typing_heatmap": true,
"digital_rain": true,
"solid_reactive_simple": true,
"solid_reactive": true,
"solid_reactive_wide": true,
"solid_reactive_multiwide": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_nexus": true,
"solid_reactive_multinexus": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true
},
"driver": "custom",
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
{"matrix": [0, 1], "x": 16, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 32, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 48, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 65, "y": 0, "flags": 4},
{"matrix": [0, 5], "x": 81, "y": 0, "flags": 4},
{"matrix": [0, 6], "x": 97, "y": 0, "flags": 4},
{"matrix": [0, 7], "x": 113, "y": 0, "flags": 4},
{"matrix": [0, 8], "x": 129, "y": 0, "flags": 4},
{"matrix": [0, 9], "x": 145, "y": 0, "flags": 4},
{"matrix": [0, 10], "x": 161, "y": 0, "flags": 4},
{"matrix": [0, 11], "x": 178, "y": 0, "flags": 4},
{"matrix": [0, 12], "x": 194, "y": 0, "flags": 4},
{"matrix": [0, 13], "x": 218, "y": 0, "flags": 4},
{"matrix": [1, 0], "x": 4, "y": 16, "flags": 4},
{"matrix": [1, 1], "x": 24, "y": 16, "flags": 4},
{"matrix": [1, 2], "x": 40, "y": 16, "flags": 4},
{"matrix": [1, 3], "x": 57, "y": 16, "flags": 4},
{"matrix": [1, 4], "x": 73, "y": 16, "flags": 4},
{"matrix": [1, 5], "x": 89, "y": 16, "flags": 4},
{"matrix": [1, 6], "x": 105, "y": 16, "flags": 4},
{"matrix": [1, 7], "x": 121, "y": 16, "flags": 4},
{"matrix": [1, 8], "x": 137, "y": 16, "flags": 4},
{"matrix": [1, 9], "x": 153, "y": 16, "flags": 4},
{"matrix": [1, 10], "x": 170, "y": 16, "flags": 4},
{"matrix": [1, 11], "x": 186, "y": 16, "flags": 4},
{"matrix": [1, 12], "x": 202, "y": 16, "flags": 4},
{"matrix": [1, 13], "x": 222, "y": 16, "flags": 4},
{"matrix": [2, 0], "x": 6, "y": 32, "flags": 4},
{"matrix": [2, 1], "x": 28, "y": 32, "flags": 4},
{"matrix": [2, 2], "x": 44, "y": 32, "flags": 4},
{"matrix": [2, 3], "x": 61, "y": 32, "flags": 4},
{"matrix": [2, 4], "x": 77, "y": 32, "flags": 4},
{"matrix": [2, 5], "x": 93, "y": 32, "flags": 4},
{"matrix": [2, 6], "x": 109, "y": 32, "flags": 4},
{"matrix": [2, 7], "x": 125, "y": 32, "flags": 4},
{"matrix": [2, 8], "x": 141, "y": 32, "flags": 4},
{"matrix": [2, 9], "x": 157, "y": 32, "flags": 4},
{"matrix": [2, 10], "x": 174, "y": 32, "flags": 4},
{"matrix": [2, 11], "x": 190, "y": 32, "flags": 4},
{"matrix": [2, 12], "x": 216, "y": 32, "flags": 4},
{"matrix": [3, 0], "x": 10, "y": 48, "flags": 1},
{"matrix": [3, 2], "x": 36, "y": 48, "flags": 4},
{"matrix": [3, 3], "x": 52, "y": 48, "flags": 4},
{"matrix": [3, 4], "x": 69, "y": 48, "flags": 4},
{"matrix": [3, 5], "x": 85, "y": 48, "flags": 4},
{"matrix": [3, 6], "x": 101, "y": 48, "flags": 4},
{"matrix": [3, 7], "x": 117, "y": 48, "flags": 4},
{"matrix": [3, 8], "x": 133, "y": 48, "flags": 4},
{"matrix": [3, 9], "x": 149, "y": 48, "flags": 4},
{"matrix": [3, 10], "x": 165, "y": 48, "flags": 4},
{"matrix": [3, 11], "x": 182, "y": 48, "flags": 4},
{"matrix": [3, 12], "x": 212, "y": 48, "flags": 1},
{"matrix": [4, 0], "x": 2, "y": 64, "flags": 1},
{"matrix": [4, 2], "x": 22, "y": 64, "flags": 1},
{"matrix": [4, 3], "x": 42, "y": 64, "flags": 1},
{"matrix": [4, 6], "x": 103, "y": 64, "flags": 4},
{"matrix": [4, 9], "x": 163, "y": 64, "flags": 1},
{"matrix": [4, 10], "x": 184, "y": 64, "flags": 1},
{"matrix": [4, 11], "x": 204, "y": 64, "flags": 1},
{"matrix": [4, 12], "x": 224, "y": 64, "flags": 1}
],
"led_flush_limit": 40
},
"community_layouts": ["60_ansi", "60_iso"],
"layouts": {
"LAYOUT_60_ansi": {
"layout": [

View File

@ -97,10 +97,10 @@ enum anne_pro_layers {
*/
[FN2] = LAYOUT_60_ansi( /* FN2 */
_______, KC_AP2_BT1, KC_AP2_BT2, KC_AP2_BT3, KC_AP2_BT4, _______, _______, _______, _______, KC_AP_RGB_MOD, KC_AP_RGB_TOG, KC_AP_RGB_VAD, KC_AP_RGB_VAI, _______,
MO(FN2), _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_HOME, KC_END, _______,
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_HOME, KC_END, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_DEL, _______,
_______, _______, _______, _______, _______, MO(FN1), MO(FN2), _______
_______, _______, _______, _______, _______, _______, _______, _______
),
};
// clang-format on

View File

@ -97,10 +97,10 @@ enum anne_pro_layers {
*/
[FN2] = LAYOUT_60_ansi( /* FN2 */
_______, KC_AP2_BT1, KC_AP2_BT2, KC_AP2_BT3, KC_AP2_BT4, _______, _______, _______, _______, KC_AP_RGB_MOD, KC_AP_RGB_TOG, KC_AP_RGB_VAD, KC_AP_RGB_VAI, _______,
MO(FN2), _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_HOME, KC_END, _______,
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_HOME, KC_END, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_DEL, _______,
_______, _______, _______, _______, _______, MO(FN1), MO(FN2), _______
_______, _______, _______, _______, _______, _______, _______, _______
),
};
// clang-format on

View File

@ -97,10 +97,10 @@ enum anne_pro_layers {
*/
[FN2] = LAYOUT_60_ansi( /* FN2 */
_______, KC_AP2_BT1, KC_AP2_BT2, KC_AP2_BT3, KC_AP2_BT4, _______, _______, _______, _______, KC_AP_RGB_MOD, KC_AP_RGB_TOG, KC_AP_RGB_VAD, KC_AP_RGB_VAI, _______,
MO(FN2), _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_HOME, KC_END, _______,
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_HOME, KC_END, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_DEL, _______,
_______, _______, _______, _______, _______, MO(FN1), MO(FN2), _______
_______, _______, _______, _______, _______, _______, _______, _______
),
};
// clang-format on

View File

@ -76,9 +76,9 @@ enum anne_pro_layers {
[FN1] = LAYOUT_60_iso( /* FN1 */
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_HOME, KC_END,
MO(FN1), KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______, _______,
_______, _______, KC_VOLU, KC_VOLD, KC_MUTE, _______, _______, _______, _______, _______, KC_INS, KC_DEL, _______,
_______, _______, _______, _______, KC_APP, MO(FN1), MO(FN2), _______
_______, _______, _______, _______, KC_APP, _______, MO(FN2), _______
),
/*
* Layer FN2
@ -98,9 +98,9 @@ enum anne_pro_layers {
[FN2] = LAYOUT_60_iso( /* FN2 */
_______, KC_AP2_BT1, KC_AP2_BT2, KC_AP2_BT3, KC_AP2_BT4, _______, _______, _______, _______, KC_AP_RGB_MOD, KC_AP_RGB_TOG, KC_AP_RGB_VAD, KC_AP_RGB_VAI, _______,
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_HOME, KC_END,
MO(FN1), KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_DEL, _______,
_______, _______, _______, _______, KC_APP, MO(FN1), MO(FN2), _______
_______, _______, _______, _______, KC_APP, _______, _______, _______
),
};
// clang-format on

View File

@ -1,63 +0,0 @@
/*
* Copyright (c) 2018 Charlie Waters
*
* 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 <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <hal.h>
#include "timer.h"
#include "wait.h"
#include "print.h"
#include "matrix.h"
#include "annepro2.h"
pin_t row_list[MATRIX_ROWS] = MATRIX_ROW_PINS;
pin_t col_list[MATRIX_COLS] = MATRIX_COL_PINS;
bool matrix_scan_custom(matrix_row_t current_matrix[]) {
bool matrix_has_changed = false;
// cache of input ports for columns
static uint16_t port_cache[4];
// scan each row
for (int row = 0; row < MATRIX_ROWS; row++) {
palClearLine(row_list[row]);
__NOP();
__NOP();
__NOP();
__NOP();
// read i/o ports
port_cache[0] = palReadPort(IOPORTA);
port_cache[1] = palReadPort(IOPORTB);
port_cache[2] = palReadPort(IOPORTC);
port_cache[3] = palReadPort(IOPORTD);
palSetLine(row_list[row]);
// get columns from ports
matrix_row_t data = 0;
for (int col = 0; col < MATRIX_COLS; ++col) {
pin_t line = col_list[col];
uint16_t port = port_cache[HT32_PAL_IDX(PAL_PORT(line))];
data |= (((port & (1 << PAL_PAD(line))) ? 0 : 1) << col);
}
if (current_matrix[row] != data) {
current_matrix[row] = data;
matrix_has_changed = true;
}
}
return matrix_has_changed;
}

View File

@ -19,8 +19,7 @@
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"encoder": false
"nkro": true
},
"matrix_pins": {
"cols": ["D3", "F4", "F5", "F6", "F7", "D7", "C6", "D4", "D2"],

View File

@ -19,7 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* RGB Light */
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_DMA_STREAM STM32_DMA1_STREAM5
#define WS2812_DMA_CHANNEL 5
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM5
#define WS2812_PWM_DMA_CHANNEL 5
#define WS2812_BYTE_ORDER WS2812_BYTE_ORDER_RGB

View File

@ -5,18 +5,13 @@
"development_board": "promicro",
"diode_direction": "COL2ROW",
"features": {
"audio": false,
"backlight": false,
"bluetooth": false,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgblight": true,
"sleep_led": false,
"unicode": false
"rgblight": true
},
"matrix_pins": {
"cols": ["E6", "D0", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7"],

View File

@ -22,6 +22,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define WS2812_PWM_CHANNEL 3
#define WS2812_PWM_PAL_MODE 2
#define WS2812_PWM_COMPLEMENTARY_OUTPUT
#define WS2812_DMA_STREAM STM32_DMA1_STREAM5
#define WS2812_DMA_CHANNEL 5
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM5
#define WS2812_PWM_DMA_CHANNEL 5
#define WS2812_BYTE_ORDER WS2812_BYTE_ORDER_RGB

View File

@ -27,8 +27,8 @@
#define WS2812_PWM_CHANNEL 2
#define WS2812_PWM_PAL_MODE 1
#define WS2812_EXTERNAL_PULLUP
#define WS2812_DMA_STREAM STM32_DMA1_STREAM1
#define WS2812_DMA_CHANNEL 3
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM1
#define WS2812_PWM_DMA_CHANNEL 3
#define WS2812_PWM_TARGET_PERIOD 800000
/* Serial configuration for split keyboard. */

View File

@ -30,8 +30,8 @@
#define WS2812_PWM_DRIVER PWMD2
#define WS2812_PWM_CHANNEL 4
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA1_STREAM7
#define WS2812_DMA_CHANNEL 3
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM7
#define WS2812_PWM_DMA_CHANNEL 3
/* CRC. */
#define CRC8_USE_TABLE

View File

@ -25,8 +25,8 @@
#define WS2812_PWM_CHANNEL 2
#define WS2812_PWM_PAL_MODE 1
#define WS2812_EXTERNAL_PULLUP
#define WS2812_DMA_STREAM STM32_DMA1_STREAM1
#define WS2812_DMA_CHANNEL 3
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM1
#define WS2812_PWM_DMA_CHANNEL 3
#define WS2812_PWM_TARGET_PERIOD 800000
/* Serial configuration for split keyboard. */

View File

@ -30,8 +30,8 @@
#define WS2812_PWM_DRIVER PWMD2
#define WS2812_PWM_CHANNEL 4
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA1_STREAM7
#define WS2812_DMA_CHANNEL 3
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM7
#define WS2812_PWM_DMA_CHANNEL 3
/* CRC. */
#define CRC8_USE_TABLE

View File

@ -27,8 +27,8 @@
#define WS2812_PWM_CHANNEL 2
#define WS2812_PWM_PAL_MODE 1
#define WS2812_EXTERNAL_PULLUP
#define WS2812_DMA_STREAM STM32_DMA1_STREAM1
#define WS2812_DMA_CHANNEL 3
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM1
#define WS2812_PWM_DMA_CHANNEL 3
#define WS2812_PWM_TARGET_PERIOD 800000
/* Serial configuration for split keyboard. */

View File

@ -30,8 +30,8 @@
#define WS2812_PWM_DRIVER PWMD2
#define WS2812_PWM_CHANNEL 4
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA1_STREAM7
#define WS2812_DMA_CHANNEL 3
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM7
#define WS2812_PWM_DMA_CHANNEL 3
/* CRC. */
#define CRC8_USE_TABLE

View File

@ -27,8 +27,8 @@
#define WS2812_PWM_CHANNEL 2
#define WS2812_PWM_PAL_MODE 1
#define WS2812_EXTERNAL_PULLUP
#define WS2812_DMA_STREAM STM32_DMA1_STREAM1
#define WS2812_DMA_CHANNEL 3
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM1
#define WS2812_PWM_DMA_CHANNEL 3
#define WS2812_PWM_TARGET_PERIOD 800000
/* Serial configuration for split keyboard. */

View File

@ -30,8 +30,8 @@
#define WS2812_PWM_DRIVER PWMD2
#define WS2812_PWM_CHANNEL 4
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA1_STREAM7
#define WS2812_DMA_CHANNEL 3
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM7
#define WS2812_PWM_DMA_CHANNEL 3
/* CRC. */
#define CRC8_USE_TABLE

View File

@ -27,8 +27,8 @@
#define WS2812_PWM_CHANNEL 2
#define WS2812_PWM_PAL_MODE 1
#define WS2812_EXTERNAL_PULLUP
#define WS2812_DMA_STREAM STM32_DMA1_STREAM1
#define WS2812_DMA_CHANNEL 3
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM1
#define WS2812_PWM_DMA_CHANNEL 3
#define WS2812_PWM_TARGET_PERIOD 800000
/* Serial configuration for split keyboard. */

View File

@ -30,8 +30,8 @@
#define WS2812_PWM_DRIVER PWMD2
#define WS2812_PWM_CHANNEL 4
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA1_STREAM7
#define WS2812_DMA_CHANNEL 3
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM7
#define WS2812_PWM_DMA_CHANNEL 3
/* CRC. */
#define CRC8_USE_TABLE

View File

@ -27,8 +27,8 @@
#define WS2812_PWM_CHANNEL 2
#define WS2812_PWM_PAL_MODE 1
#define WS2812_EXTERNAL_PULLUP
#define WS2812_DMA_STREAM STM32_DMA1_STREAM1
#define WS2812_DMA_CHANNEL 3
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM1
#define WS2812_PWM_DMA_CHANNEL 3
#define WS2812_PWM_TARGET_PERIOD 800000
/* Serial configuration for split keyboard. */

View File

@ -30,8 +30,8 @@
#define WS2812_PWM_DRIVER PWMD2
#define WS2812_PWM_CHANNEL 4
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA1_STREAM7
#define WS2812_DMA_CHANNEL 3
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM7
#define WS2812_PWM_DMA_CHANNEL 3
/* CRC. */
#define CRC8_USE_TABLE

View File

@ -18,5 +18,5 @@
#define WS2812_PWM_DRIVER PWMD2
#define WS2812_PWM_CHANNEL 4
#define WS2812_DMA_STREAM STM32_DMA1_STREAM2
#define WS2812_DMA_CHANNEL 2
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM2
#define WS2812_PWM_DMA_CHANNEL 2

View File

@ -20,5 +20,5 @@
#define WS2812_PWM_CHANNEL 1
#define WS2812_PWM_PAL_MODE 1 //TIM1_CH1N (AF1)
#define WS2812_PWM_COMPLEMENTARY_OUTPUT
#define WS2812_DMA_STREAM STM32_DMA1_STREAM6
#define WS2812_DMA_CHANNEL 7 //7 works, CxS[3:0] 0111 = TIM1_UP on Channel 6? (RM0394.pdf pg.298)
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM6
#define WS2812_PWM_DMA_CHANNEL 7 //7 works, CxS[3:0] 0111 = TIM1_UP on Channel 6? (RM0394.pdf pg.298)

View File

@ -22,10 +22,7 @@
"console": false,
"command": false,
"nkro": true,
"backlight": false,
"rgblight": true,
"audio": false,
"key_lock": false
"rgblight": true
},
"rgblight": {
"led_count": 14,

View File

@ -0,0 +1,118 @@
{
"manufacturer": "Cipulot",
"keyboard_name": "60XT",
"maintainer": "Cipulot",
"bootloader": "stm32-dfu",
"build": {
"lto": true
},
"qmk": {
"locking": {
"enabled": true,
"resync": true
}
},
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"indicators": {
"caps_lock": "A1"
},
"matrix_pins": {
"cols": ["A5", "A2", "A0", "F1", "F0", "C15", "C14", "C13", "B9", "B8", "B7", "B6", "B5", "B4", "B3", "A15"],
"rows": ["B1", "B2", "A6", "A7", "B0"]
},
"processor": "STM32F072",
"usb": {
"device_version": "0.0.1",
"pid": "0x6BC2",
"shared_endpoint": {
"keyboard": true
},
"vid": "0x6369"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1.25, "y": 0},
{"matrix": [0, 2], "x": 2.25, "y": 0},
{"matrix": [0, 3], "x": 3.25, "y": 0},
{"matrix": [0, 4], "x": 4.25, "y": 0},
{"matrix": [0, 5], "x": 5.25, "y": 0},
{"matrix": [0, 6], "x": 6.25, "y": 0},
{"matrix": [0, 7], "x": 7.25, "y": 0},
{"matrix": [0, 8], "x": 8.25, "y": 0},
{"matrix": [0, 9], "x": 9.25, "y": 0},
{"matrix": [0, 10], "x": 10.25, "y": 0},
{"matrix": [0, 11], "x": 11.25, "y": 0},
{"matrix": [0, 12], "x": 12.25, "y": 0},
{"matrix": [0, 13], "x": 13.25, "y": 0},
{"matrix": [0, 14], "x": 14.25, "y": 0},
{"matrix": [0, 15], "x": 15.25, "y": 0},
{"matrix": [1, 15], "x": 16.5, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1.25, "y": 1, "w": 1.5},
{"matrix": [1, 2], "x": 2.75, "y": 1},
{"matrix": [1, 3], "x": 3.75, "y": 1},
{"matrix": [1, 4], "x": 4.75, "y": 1},
{"matrix": [1, 5], "x": 5.75, "y": 1},
{"matrix": [1, 6], "x": 6.75, "y": 1},
{"matrix": [1, 7], "x": 7.75, "y": 1},
{"matrix": [1, 8], "x": 8.75, "y": 1},
{"matrix": [1, 9], "x": 9.75, "y": 1},
{"matrix": [1, 10], "x": 10.75, "y": 1},
{"matrix": [1, 11], "x": 11.75, "y": 1},
{"matrix": [1, 12], "x": 12.75, "y": 1},
{"matrix": [1, 13], "x": 13.75, "y": 1},
{"matrix": [1, 14], "x": 14.75, "y": 1, "w": 1.5},
{"matrix": [2, 15], "x": 16.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1.25, "y": 2, "w": 1.75},
{"matrix": [2, 2], "x": 3, "y": 2},
{"matrix": [2, 3], "x": 4, "y": 2},
{"matrix": [2, 4], "x": 5, "y": 2},
{"matrix": [2, 5], "x": 6, "y": 2},
{"matrix": [2, 6], "x": 7, "y": 2},
{"matrix": [2, 7], "x": 8, "y": 2},
{"matrix": [2, 8], "x": 9, "y": 2},
{"matrix": [2, 9], "x": 10, "y": 2},
{"matrix": [2, 10], "x": 11, "y": 2},
{"matrix": [2, 11], "x": 12, "y": 2},
{"matrix": [2, 12], "x": 13, "y": 2},
{"matrix": [2, 13], "x": 14, "y": 2},
{"matrix": [2, 14], "x": 15, "y": 2, "w": 1.25},
{"matrix": [3, 15], "x": 16.5, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3},
{"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
{"matrix": [3, 2], "x": 2.5, "y": 3},
{"matrix": [3, 3], "x": 3.5, "y": 3},
{"matrix": [3, 4], "x": 4.5, "y": 3},
{"matrix": [3, 5], "x": 5.5, "y": 3},
{"matrix": [3, 6], "x": 6.5, "y": 3},
{"matrix": [3, 7], "x": 7.5, "y": 3},
{"matrix": [3, 8], "x": 8.5, "y": 3},
{"matrix": [3, 9], "x": 9.5, "y": 3},
{"matrix": [3, 10], "x": 10.5, "y": 3},
{"matrix": [3, 11], "x": 11.5, "y": 3},
{"matrix": [3, 12], "x": 12.5, "y": 3},
{"matrix": [3, 13], "x": 13.5, "y": 3, "w": 1.75},
{"matrix": [3, 14], "x": 15.25, "y": 3},
{"matrix": [4, 14], "x": 16.5, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.5},
{"matrix": [4, 2], "x": 2.75, "y": 4},
{"matrix": [4, 3], "x": 3.75, "y": 4, "w": 1.5},
{"matrix": [4, 8], "x": 5.25, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 12.25, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 13.75, "y": 4},
{"matrix": [4, 13], "x": 14.75, "y": 4, "w": 1.5},
{"matrix": [4, 15], "x": 16.5, "y": 4}
]
}
}
}

View File

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

View File

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

View File

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

View File

@ -0,0 +1,27 @@
# 60XT
![60XT](https://i.imgur.com/7lAvjpmh.png)
A 60% XT solder and hot swap PCB.
* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
* Hardware Supported: 60XT
* Hardware Availability: [Eloquent Clicks](https://eloquentclicks.com/)
Make example for this keyboard (after setting up your build environment):
make cipulot/60xt:default
Flashing example for this keyboard:
make cipulot/60xt: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:
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is configured.
* **Physical reset button**: Long press the reset button soldered on the PCB.
* **Bootmagic reset**: Hold down the top left key and plug in the controller.

View File

View File

@ -11,11 +11,9 @@
"command": false,
"console": true,
"extrakey": true,
"midi": false,
"mousekey": true,
"nkro": true,
"rgblight": true,
"unicode": false
"rgblight": true
},
"matrix_pins": {
"cols": ["F4", "E6", "B1", "D2"],

View File

@ -11,11 +11,9 @@
"command": false,
"console": true,
"extrakey": true,
"midi": false,
"mousekey": true,
"nkro": true,
"rgblight": true,
"unicode": false
"rgblight": true
},
"indicators": {
"num_lock": "B4",

View File

@ -12,11 +12,8 @@
"console": true,
"encoder": true,
"extrakey": true,
"midi": false,
"mousekey": true,
"nkro": true,
"rgblight": false,
"unicode": false
"nkro": true
},
"matrix_pins": {
"cols": ["D2", "D3", "D4", "D5", "D7", "E0", "E1", "B0", "E6", "B3", "B2"],

View File

@ -9,7 +9,6 @@
"diode_direction": "COL2ROW",
"features": {
"audio": true,
"backlight": false,
"bootmagic": false,
"command": false,
"console": true,

View File

@ -6,18 +6,12 @@
"bootloader": "atmel-dfu",
"diode_direction": "COL2ROW",
"features": {
"audio": false,
"backlight": false,
"bluetooth": false,
"bootmagic": false,
"command": false,
"console": true,
"extrakey": true,
"midi": false,
"mousekey": true,
"nkro": true,
"rgblight": false,
"unicode": false
"nkro": true
},
"indicators": {
"caps_lock": "F0"

View File

@ -6,18 +6,13 @@
"bootloader": "atmel-dfu",
"diode_direction": "COL2ROW",
"features": {
"audio": false,
"backlight": true,
"bluetooth": false,
"bootmagic": false,
"command": false,
"console": true,
"extrakey": true,
"midi": false,
"mousekey": true,
"nkro": true,
"rgblight": true,
"unicode": false
"rgblight": true
},
"indicators": {
"caps_lock": "B4"

View File

@ -6,18 +6,14 @@
"bootloader": "atmel-dfu",
"diode_direction": "COL2ROW",
"features": {
"audio": false,
"backlight": true,
"bluetooth": false,
"bootmagic": false,
"command": false,
"console": true,
"extrakey": true,
"midi": false,
"mousekey": true,
"nkro": true,
"rgblight": true,
"unicode": false
"rgblight": true
},
"indicators": {
"caps_lock": "B4"

View File

@ -8,17 +8,12 @@
"diode_direction": "COL2ROW",
"features": {
"audio": true,
"backlight": false,
"bluetooth": false,
"bootmagic": false,
"command": false,
"console": true,
"extrakey": true,
"midi": false,
"mousekey": true,
"nkro": true,
"rgblight": false,
"unicode": false
"nkro": true
},
"matrix_pins": {
"cols": ["B10", "B2", "B1", "B0", "A7", "B4", "B3", "B5"],

View File

@ -8,16 +8,13 @@
"features": {
"audio": true,
"backlight": true,
"bluetooth": false,
"bootmagic": false,
"command": false,
"console": true,
"extrakey": true,
"midi": false,
"mousekey": false,
"nkro": true,
"rgblight": true,
"unicode": false
"rgblight": true
},
"indicators": {
"caps_lock": "B4"

View File

@ -9,16 +9,13 @@
"features": {
"audio": true,
"backlight": true,
"bluetooth": false,
"bootmagic": false,
"command": false,
"console": true,
"extrakey": true,
"midi": false,
"mousekey": true,
"nkro": false,
"rgblight": true,
"unicode": false
"rgblight": true
},
"build": {
"lto": true

View File

@ -24,6 +24,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define WS2812_PWM_DRIVER PWMD3
#define WS2812_PWM_CHANNEL 1
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA1_STREAM3
#define WS2812_DMA_CHANNEL 3
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM3
#define WS2812_PWM_DMA_CHANNEL 3
#define WS2812_BYTE_ORDER WS2812_BYTE_ORDER_RGB

View File

@ -0,0 +1,29 @@
// Copyright 2024 customMK
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
// FRAM configuration
#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN B7
#define EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR 4 // 48MHz / 4 = 12MHz; max supported by MB85R64 is 20MHz
// SPI configuration
#define SPI_DRIVER SPID1
#define SPI_SCK_PIN B3
#define SPI_MOSI_PIN B5
#define SPI_MISO_PIN B4
// Audio configuration
#define AUDIO_PIN B8
#define AUDIO_PWM_DRIVER PWMD4
#define AUDIO_PWM_CHANNEL 3
#define AUDIO_PWM_PAL_MODE 2
#define AUDIO_STATE_TIMER GPTD5
#define AUDIO_INIT_DELAY
// WS2812 configuration
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_DMA_CHANNEL 6

View File

@ -1,4 +1,4 @@
/* Copyright 2022 Jose Pablo Ramirez <jp.ramangulo@gmail.com>
/* Copyright 2024 customMK
*
* 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
@ -14,29 +14,17 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
#pragma once
#ifdef AUDIO_ENABLE
void keyboard_pre_init_kb(void) {
// ensure pin is set and enabled pre-audio init
setPinOutput(SPEAKER_SHUTDOWN);
writePinHigh(SPEAKER_SHUTDOWN);
keyboard_pre_init_user();
}
#define HAL_USE_PWM TRUE
void keyboard_post_init_kb(void) {
// set pin based on active status
writePin(SPEAKER_SHUTDOWN, audio_is_on());
keyboard_post_init_user();
}
#define HAL_USE_SPI TRUE
void audio_on_user(void) {
writePinHigh(SPEAKER_SHUTDOWN);
}
#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
void audio_off_user(void) {
// needs a delay or it runs right after play note.
wait_ms(200);
writePinLow(SPEAKER_SHUTDOWN);
}
#endif
#define SERIAL_BUFFERS_SIZE 256
// This enables interrupt-driven mode
#define SPI_USE_WAIT TRUE
#include_next <halconf.h>

View File

@ -0,0 +1,121 @@
{
"manufacturer": "customMK",
"keyboard_name": "CMK11",
"maintainer": "customMK",
"bootloader": "stm32-dfu",
"diode_direction": "ROW2COL",
"dynamic_keymap": {
"layer_count": 32
},
"eeprom": {
"driver": "spi"
},
"features": {
"audio": true,
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true
},
"matrix_pins": {
"cols": ["B0", "A1", "A2", "A3", "A6", "B10"],
"rows": ["A5", "A4"]
},
"processor": "STM32F411",
"qmk": {
"tap_keycode_delay": 10
},
"rgb_matrix": {
"animations": {
"alphas_mods": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_sat": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"band_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"digital_rain": true,
"dual_beacon": true,
"gradient_left_right": true,
"gradient_up_down": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"jellybean_raindrops": true,
"multisplash": true,
"pixel_flow": true,
"pixel_fractal": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"rainbow_pinwheels": true,
"raindrops": true,
"solid_multisplash": true,
"solid_reactive": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_nexus": true,
"solid_reactive_simple": true,
"solid_reactive_wide": true,
"solid_splash": true,
"splash": true,
"typing_heatmap": true
},
"driver": "ws2812",
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
{"matrix": [0, 1], "x": 45, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 90, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 134, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 179, "y": 0, "flags": 4},
{"matrix": [0, 5], "x": 224, "y": 0, "flags": 4},
{"matrix": [1, 0], "x": 23, "y": 64, "flags": 4},
{"matrix": [1, 1], "x": 68, "y": 64, "flags": 4},
{"matrix": [1, 2], "x": 112, "y": 64, "flags": 4},
{"matrix": [1, 3], "x": 157, "y": 64, "flags": 4},
{"matrix": [1, 4], "x": 202, "y": 64, "flags": 4}
],
"max_brightness": 120,
"sat_steps": 8,
"speed_steps": 10,
"val_steps": 8
},
"url": "https://shop.custommk.com/collections/cmk11/products/ckm11",
"usb": {
"device_version": "1.0.0",
"pid": "0xFABA",
"vid": "0xF35B"
},
"ws2812": {
"driver": "pwm",
"pin": "A10"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [1, 0], "x": 0.5, "y": 1},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1}
]
}
}
}

View File

@ -0,0 +1,11 @@
// Copyright 2024 customMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_ESC, KC_C, KC_V, KC_VOLU, KC_VOLD, KC_DEL,
KC_LCTL, KC_PGUP, KC_SPC, KC_PGDN, KC_ENT
)
};

View File

@ -0,0 +1,6 @@
// Copyright 2024 customMK
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define DYNAMIC_KEYMAP_MACRO_COUNT 128

View File

@ -0,0 +1,11 @@
// Copyright 2024 customMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_ESC, KC_C, KC_V, KC_VOLU, KC_VOLD, KC_DEL,
KC_LCTL, KC_PGUP, KC_SPC, KC_PGDN, MO(1)
)
};

View File

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

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