mirror of
https://github.com/qmk/qmk_firmware.git
synced 2024-11-22 03:19:24 +00:00
Merge branch 'develop' into 22927-turn-off-osl-on-nesting
This commit is contained in:
commit
ab3ef70ed8
@ -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
|
||||
|
2
.github/workflows/format.yml
vendored
2
.github/workflows/format.yml
vendored
@ -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}'
|
||||
|
2
.github/workflows/format_push.yml
vendored
2
.github/workflows/format_push.yml
vendored
@ -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 }}
|
||||
|
12
.github/workflows/lint.yml
vendored
12
.github/workflows/lint.yml
vendored
@ -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
|
||||
|
||||
|
2
.github/workflows/regen_push.yml
vendored
2
.github/workflows/regen_push.yml
vendored
@ -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 }}
|
||||
|
2
.github/workflows/unit_test.yml
vendored
2
.github/workflows/unit_test.yml
vendored
@ -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
1
.gitignore
vendored
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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"},
|
||||
|
||||
|
@ -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"}
|
||||
}
|
||||
},
|
||||
|
@ -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
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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._
|
||||
|
@ -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!
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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"],
|
||||
|
@ -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"],
|
||||
|
@ -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"],
|
||||
|
@ -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": {
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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"
|
||||
|
@ -30,8 +30,6 @@
|
||||
"rows": ["C2", "D0", "B0", "C7", "C5"]
|
||||
},
|
||||
"features": {
|
||||
"audio": false,
|
||||
"backlight": false,
|
||||
"bootmagic": true,
|
||||
"command": false,
|
||||
"console": false,
|
||||
|
@ -26,8 +26,6 @@
|
||||
"rows": ["B8", "A15", "C13", "A2", "A6"]
|
||||
},
|
||||
"features": {
|
||||
"audio": false,
|
||||
"backlight": false,
|
||||
"bootmagic": true,
|
||||
"command": false,
|
||||
"console": false,
|
||||
|
@ -22,9 +22,7 @@
|
||||
"console": false,
|
||||
"command": false,
|
||||
"nkro": true,
|
||||
"backlight": false,
|
||||
"rgblight": true,
|
||||
"audio": false
|
||||
"rgblight": true
|
||||
},
|
||||
"ws2812": {
|
||||
"pin": "A8"
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -16,10 +16,7 @@
|
||||
"mousekey": true,
|
||||
"extrakey": true,
|
||||
"console": false,
|
||||
"backlight": false,
|
||||
"rgblight": true,
|
||||
"audio": false,
|
||||
"encoder": false,
|
||||
"nkro": true
|
||||
},
|
||||
"diode_direction": "COL2ROW",
|
||||
|
@ -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
|
||||
|
@ -16,10 +16,7 @@
|
||||
"mousekey": true,
|
||||
"extrakey": true,
|
||||
"console": false,
|
||||
"backlight": false,
|
||||
"rgblight": true,
|
||||
"audio": false,
|
||||
"encoder": false,
|
||||
"nkro": true
|
||||
},
|
||||
"diode_direction": "COL2ROW",
|
||||
|
@ -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
|
||||
|
@ -16,10 +16,7 @@
|
||||
"mousekey": true,
|
||||
"extrakey": true,
|
||||
"console": false,
|
||||
"backlight": false,
|
||||
"rgblight": true,
|
||||
"audio": false,
|
||||
"encoder": false,
|
||||
"nkro": true
|
||||
},
|
||||
"diode_direction": "COL2ROW",
|
||||
|
@ -48,5 +48,3 @@
|
||||
#define AUDIO_PWM_CHANNEL RP2040_PWM_CHANNEL_A
|
||||
#define AUDIO_INIT_DELAY
|
||||
#define AUDIO_CLICKY
|
||||
|
||||
#define SPEAKER_SHUTDOWN GP14
|
||||
|
@ -8,6 +8,11 @@
|
||||
"pid": "0x0108",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"audio": {
|
||||
"power_control": {
|
||||
"pin": "GP14"
|
||||
}
|
||||
},
|
||||
"encoder": {
|
||||
"rotary": [
|
||||
{"pin_a": "GP18", "pin_b": "GP17"}
|
||||
|
@ -17,7 +17,6 @@
|
||||
"extrakey": true,
|
||||
"mousekey": true,
|
||||
"nkro": true,
|
||||
"rgblight": false,
|
||||
"rgb_matrix": true
|
||||
},
|
||||
"ws2812": {
|
||||
|
@ -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
|
||||
|
||||
|
@ -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"]
|
||||
}
|
||||
}
|
||||
|
@ -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 \
|
||||
|
@ -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
|
||||
|
||||
|
@ -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"]
|
||||
}
|
||||
}
|
||||
|
@ -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 \
|
||||
|
@ -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": [
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
@ -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"],
|
||||
|
@ -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
|
||||
|
@ -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"],
|
||||
|
@ -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
|
||||
|
@ -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. */
|
||||
|
@ -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
|
||||
|
@ -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. */
|
||||
|
@ -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
|
||||
|
@ -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. */
|
||||
|
@ -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
|
||||
|
@ -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. */
|
||||
|
@ -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
|
||||
|
@ -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. */
|
||||
|
@ -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
|
||||
|
@ -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. */
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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,
|
||||
|
118
keyboards/cipulot/60xt/info.json
Normal file
118
keyboards/cipulot/60xt/info.json
Normal 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}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
43
keyboards/cipulot/60xt/keymaps/default/keymap.c
Normal file
43
keyboards/cipulot/60xt/keymaps/default/keymap.c
Normal 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
|
||||
};
|
43
keyboards/cipulot/60xt/keymaps/via/keymap.c
Normal file
43
keyboards/cipulot/60xt/keymaps/via/keymap.c
Normal 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
|
||||
};
|
1
keyboards/cipulot/60xt/keymaps/via/rules.mk
Normal file
1
keyboards/cipulot/60xt/keymaps/via/rules.mk
Normal file
@ -0,0 +1 @@
|
||||
VIA_ENABLE = yes
|
27
keyboards/cipulot/60xt/readme.md
Normal file
27
keyboards/cipulot/60xt/readme.md
Normal 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.
|
0
keyboards/cipulot/60xt/rules.mk
Normal file
0
keyboards/cipulot/60xt/rules.mk
Normal 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"],
|
||||
|
@ -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",
|
||||
|
@ -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"],
|
||||
|
@ -9,7 +9,6 @@
|
||||
"diode_direction": "COL2ROW",
|
||||
"features": {
|
||||
"audio": true,
|
||||
"backlight": false,
|
||||
"bootmagic": false,
|
||||
"command": false,
|
||||
"console": true,
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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"],
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
29
keyboards/custommk/cmk11/config.h
Normal file
29
keyboards/custommk/cmk11/config.h
Normal 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
|
@ -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>
|
121
keyboards/custommk/cmk11/info.json
Normal file
121
keyboards/custommk/cmk11/info.json
Normal 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}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
11
keyboards/custommk/cmk11/keymaps/default/keymap.c
Normal file
11
keyboards/custommk/cmk11/keymaps/default/keymap.c
Normal 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
|
||||
)
|
||||
};
|
6
keyboards/custommk/cmk11/keymaps/via/config.h
Normal file
6
keyboards/custommk/cmk11/keymaps/via/config.h
Normal file
@ -0,0 +1,6 @@
|
||||
// Copyright 2024 customMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#define DYNAMIC_KEYMAP_MACRO_COUNT 128
|
11
keyboards/custommk/cmk11/keymaps/via/keymap.c
Normal file
11
keyboards/custommk/cmk11/keymaps/via/keymap.c
Normal 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)
|
||||
)
|
||||
};
|
1
keyboards/custommk/cmk11/keymaps/via/rules.mk
Normal file
1
keyboards/custommk/cmk11/keymaps/via/rules.mk
Normal file
@ -0,0 +1 @@
|
||||
VIA_ENABLE = yes
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user