To ensure we can tune things when other threads may have priority,
preventing UART processing in time for the studio UI requirements,
adjust our default UART thread priority, and allow overriding as needed.
feat: Add ZMK_BOARD_COMPAT Kconfig symbol, and check for it
To properly detect users selecting a base board ID, when a ZMK variant
is available, add a ZMK_BOARD_COMPAT Kconfig symbol that the ZMK
variants will enable, allowing us to detect using the bare varand and
warn/error in CI so users don't end up with passing CI that results in
an unusable firmware due to missing ZMK enablement for keyboard name,
settings storage, etc.
refactor(boards): Add ZMK_BOARD_COMPAT to ZMK board variants
To clearly indicate the ZMK board variants are set up for ZMK usage,
select the ZMK_BOARD_COMPAT symbols for them.
fix(boards): Fix pillbug board.yml to report extension
Properly not the ZMK variant is part of an extension of the existing
pillbug board.
Newer Zephyr uses a different Kconfig value to control buffers for GATT
client discovery, so adjust our defaults to bump the correct value
Fixes: #3156
refactor(core): Adjust our approach for upstream Zephyr boards
Move to using proper HWMv2 board extensions
https://docs.zephyrproject.org/4.1.0/hardware/porting/board_porting.html#board-extensions
for extending upstream Zephyr boards for use with ZMK. With this change,
using upstream Zephyr board IDs directly, e.g. `seeeduino_xiao` will be
stock versions as found upstream. To use a board variant that is tuned
for ZMK use, use the `zmk` variant, e.g. `seeeduino_xiao//zmk` which is
shorthand for `seeeduino_xiao/samd21g18a/zmk`.
refactor(boards): Move to ZMK specific variants for the nRFMicro board
For consistency, adjust the nRFMicro board definition to offer a
"vanilla" Zephyr board, and then ZMK variants, e.g.
`nrfmicro/nrf52840/zmk`.
refactor(boards): Move to ZMK specific variant for the bluemicro840 board
For consistency, adjust the bluemicro840 board definition to offer a
"vanilla" Zephyr board, and then ZMK variant, e.g. `bluemicro840//zmk`.
refactor(boards): Make tofu65 to ZMK variant by default
Make the standard Tofu65 board ID be `tofu65/rp2040/zmk` or
`tofu65//zmk` by shorthand.
refactor(boards): Move BDN9 to ZMK variant by default
Make the standard BDN9 board ID be `bdn9/stm32f072xb/zmk` or
`bdn9//zmk` by shorthand.
refactor(boards): Move Puchi BLE to ZMK variant by default
Make the standard Puchi BLE board ID be `puchi_ble/nrf52840/zmk` or
`puchi_ble//zmk` by shorthand.
refactor(boards): Move Adv360 Pro to ZMK variant by default
Make the standard Adv360 Pro board ID be `adv360pro_left/nrf52840/zmk` or
`adv360pro_left//zmk` by shorthand and for right as well.
refactor(boards): Move nRF52840 M2 to ZMK variant by default
Make the standard nRF52840 M2 board ID be `nrf52840_m2/nrf52840/zmk` or
`nrf52840_m2//zmk` by shorthand.
refactor(boards): Move Pillbug to ZMK variant by default
Make the standard Pillbug board ID be `pillbug/nrf52840/zmk` or
`pillbug//zmk` by shorthand.
refactor(boards): Move s40nc to ZMK variant by default
Make the standard s40nc board ID be `s40nc/nrf52840/zmk` or
`s40nc//zmk` by shorthand.
refactor(boards): Move nice!60 to ZMK variant by default
Make the standard nice!60 board ID be `nice60/nrf52840/zmk` or
`nice60//zmk` by shorthand.
refactor(boards): Move planck to ZMK variant by default
Make the standard planck board ID be `planck/stm32f303xc/zmk` or
`planck//zmk` by shorthand.
refactor(boards): Move preonic to ZMK variant by default
Make the standard preonic board ID be `preonic/stm32f303xc/zmk` or
`preonic//zmk` by shorthand.
refactor(boards): Move ferris to ZMK variant by default
Make the standard ferris board ID be `ferris/stm32f072xb/zmk` or
`ferris//zmk` by shorthand.
refactor(boards): Move Proton-C to ZMK variant by default
Make the standard Proton-C board ID be `proton_c/stm32f303xc/zmk` or
`proton_c//zmk` by shorthand.
refactor(boards): Move Corneish Zen to ZMK variant by default
Make the standard Corneish Zen board ID be `corneish_zen_left/nrf52840/zmk` or
`corneish_zen_left//zmk` by shorthand and for right as well.
refactor(boards): Move nice!nano to ZMK variant by default
Make the standard nice!nano board ID be `nice_nano/nrf52840/zmk` or
`nice_nano//zmk` by shorthand.
refactor(boards): Move mikoto to ZMK variant by default
Make the standard mikoto board ID be `mikoto/nrf52840/zmk` or
`mikoto//zmk` by shorthand.
refactor(boards): Move Polarity Works boards to ZMK variants
Make the standard Polarity Works board IDs be `zmk` variants.
doc: Update docs/blog post to reference ZMK variants
* Update Zephyr 4.1 blog post to mention ZMK variants
* Add note to hardware support page about variants
docs: Fix up shield board overlays for new board IDs
Adjust our documentation to properly use the correct qualified board
overlay file names that match our new board conventions.
feat(endpoints): add "no endpoint" value
This adds ZMK_TRANSPORT_NONE, which can be set as the preferred
endpoint transport if you wish to prevent the keyboard from sending any
output. More usefully, it also is used to indicate that the preferred
endpoint is not available and it could not fall back to an available
one. To go along with this, many endpoint functions are renamed for
consistency, and a few new functions are added:
- zmk_endpoint_get_preferred_transport() returns the value that was set
with zmk_endpoint_set_preferred_transport().
- zmk_endpoint_get_preferred() returns the endpoint that will be used
if it is available. This endpoint always has the same transport as
zmk_endpoint_get_preferred_transport().
- zmk_endpoint_is_connected() is a shortcut to check if the keyboard is
actually connected to an endpoint.
This change is based on #2572 but without the option to disable endpoint
fallback. It does refactor code to allow adding that feature later.
fix(endpoints): Add endpoint setting upgrade
Adding ZMK_TRANSPORT_NONE at the start of enum zmk_transport results in
the preferred transport setting no longer representing the same values
when it is saved with earlier firmware and loaded with newer firmware.
To fix this, the "endpoints/preferred" setting is now deprecated and
replaced by "endpoints/preferred2". If the old setting is present, it
is interpreted as the old enum type, upgraded to the new type, and saved
immediately to the new setting. The old setting is then deleted.
To avoid this happening again in the future, enum zmk_transport now has
explicit values assigned to identifier, and a comment is also added to
explain that existing values must not be changed.
fix: Set default transport according to enabled transports
The default value for preferred_transport is now set to USB only if
CONFIG_ZMK_USB is enabled. If not, it falls back to BLE if
CONFIG_ZMK_BLE is enabled, then to "none" if nothing is enabled.
* fix(docs): Improve link and code highlight contrast
Reset the theme's primary colors to the defaults, since the color of
links was a bit too low contrast in the dark theme. The default primary
color is a very similar but slightly lighter shade of blue.
The background color of highlighted lines in code blocks is also fairly
low contrast, but it needs to be in order to keep the text readable. To
add contrast here, we now add a colored block to the left side of a
highlighted line.
* fix(docs): Improve ZMK setup instructions
This makes several improvements to the instructions for installing and
using ZMK CLI:
- Windows Terminal is also named "Terminal", so reworded the terminal
instructions to not separate Windows from other OSes.
- Specified that Windows Terminal should always be used on Windows, as
on older installations of Windows, the default terminal when opening
PowerShell may be the legacy console host, which may not support some
of the VT sequences used by ZMK CLI.
- Switched from pipx to uv. This eliminates the need for instructions
on installing Python, as uv will automatically install a supported
version of Python if needed.
- Updated the instructions for running "zmk init", as ZMK CLI version
0.4.0 switched from immediately asking for a repo URL to prompting
the user to select between creating a new repo or cloning an existing
one first.
- Since for a new user, having a keymap compile successfully on the
first attempt after modifying it may be the exception rather than the
norm, added a note about error messages in GitHub actions with a link
to the troubleshooting page.
Also added instructions for updating ZMK CLI to the latest version on
the ZMK CLI page.
With the binding referenced to as uint8_t the keymap would be incorrect if more than 256 positions were in use, going to a uint16_t gives large enough headroom to not have to worry
deps: Use hal_stm32 with stm32c0 USB device fixes.
Pull in ZMK fork of hal_stm32 with USB device driver fixes for stm32c0.
feat: Add nBOOT_SEL bit setup for STM32 G0/C0 targets
Newer STM32 C0 and G0 series SoCs do not by default allow use of the
BOOT0 pin/button to enter the bootloader once something has been flash
to the device, which is a change from previous series, and usually not
what's wanted for keyboards running ZMK. To address this, add some
optional, but default initialization code to check the nBOOT_SEL bit and
override it if necessary to ensure BOOT pin/button functionality.
docs: Extract bootloader config into a dedicated page.
Pull the bootloader intergration options out of the system configuration
page into their own dedicated one.
Co-authored-by: Nicolas Munnich <98408764+nmunnich@users.noreply.github.com>
---------
Co-authored-by: Nicolas Munnich <98408764+nmunnich@users.noreply.github.com>
The static mouse_report definition did not initialize the d_scroll_x
field. The zmk_hid_mouse_report_body structure contains five fields
(buttons, d_x, d_y, d_scroll_y, d_scroll_x), but d_scroll_x was left
uninitialized.
Initialize d_scroll_x to 0 to ensure all fields in the mouse report
are properly initialized and avoid potential undefined behavior.
The RX buffer was previously defined as [RX_BUFFER_SIZE/2][2], which
created (RX_BUFFER_SIZE/2) small 2-byte buffers instead of the two
(RX_BUFFER_SIZE/2)-byte buffers required for DMA ping-pong operation.
Update the buffer definition to [2][RX_BUFFER_SIZE/2] and apply the
fix to both the central and peripheral wired split implementations.
This prevents potential DMA RX data corruption when using async UART.
Enable ZMK_BOOTMODE_MAGIC_VALUE_BOOTLOADER_TYPE_ADAFRUIT_NRF52 for
nRF52833, add nrf52833_uf2_boot_mode.dtsi as a copy of the nRF52840 file
for easy inclusion.
Enable retention for all nrfmicro subvariants (as this is the only
in-tree board that uses the nRF52833).
This fixes &bootloader for nRF52833 boards post-4.1 upgrade.
ZMK doesn't use SOF. Disable this to prevent unexpected USB
disconnection. The disconnection is observed under 3 circumstances on a
Linux host:
1. Keyboard just performed a firmware upgrade and USB is kept connected.
2. Keyboard is woken from USB power source and USB is kept connected.
3. Keyboard is connected when host is booting, and when Linux is just
initialized.
Disabling SOF processing will not affect boot protocol switching.
Tested on Makerdiary M60.
Adds support for building the firmware in the config-repo locally via
[act](https://github.com/nektos/act).
Linux example command:
```shell
act --artifact-server-path $PWD/.artifacts
```
MacOS (M2) example command:
```shell
act --artifact-server-path $PWD/.artifacts \
--container-architecture \
linux/amd64 --container-daemon-socket -
This deletes the Bash and PowerShell setup scripts in favor of using
ZMK CLI. The old setup scripts are broken, since the config repo
template uses ZMK version 0.3, while the setup scripts use hardware
metadata from the main branch. ZMK CLI doesn't have this issue, because
it clones the version of ZMK listed in the config repo to get hardware
metadata.
Much of the "Installing ZMK" page has been rewritten to give
instructions for installing ZMK CLI and using it to create and modify
a config repo. The previously-hidden page on ZMK CLI has been added to
the sidebar and repurposed into general documentation for the tool.
Zephyr now has some modules that get placed under /optional/modules
instead of /modules. Added that to .gitignore so Git doesn't try to
treat those like Git modules.
The original condition was always true, this commit fixes the condition
to correctly handle the remainder for sensor rotation behaviors by using
abs().
Co-authored-by: schuay <schuay@users.noreply.github.com>
* tempfile necessary because running build command makes directory pristine,
interfering with the build log being written.
* Should be automatically picked up by the artifacts in CI tests
refactor: Move to Zephyr v4.1.0
Move to Zephyr v4.1.0, with various build/compilation fixes needed for
basic use.
refactor(tests): Move to native_sim for tests.
feat(core): (Optionally) use Zephyr keyboard input devices
Add ability to assign a keyboard `input` device to a physical layout,
or use a chosen `zmk,matrix-input`.
fix(pointing): Refactor for changes to input API
Pass NULL user_data to input callbacks.
fix(tests): Fix BLE test to account for Zephyr changes
Handle additional read callback invocation once all matching
characteristic have been read.
fix(sensors): Initialize sensor data to 0 before fetching.
Be sure we don't get back any uninitialized data by initializing
the channel data to 0 before calling into the sensor API.
refactor(input): Adjust split input to input API changes.
Input callbacks now have a user_data parameter, adjust accordingly.
chore(bluetooth): Minor cleanup of split BT code after refactor
Small fixes and remove commented dead code left after the split
refactor.
refactor: Fix up BLE tests after Zephyr upgrade.
Minor changes to snapshots based on newer Zephyr version.
refactor(boards): Move to upstream xiao_ble board ID.
Move to official upstream board definition for the Seeed XIAO BLE.
refactor: Adjust metadata schema for HWMv2 board IDs w/ qualifiers
Adjust our ZMK metadata to allow for board IDs that include qualifiers
with slash delimeters.
refactor!(boards): Move nice!nano to HWMv2, and proper revisioning
Upgrade the nice!nano board to HWMv2, under the proper nicekeyboards
vendor directory, and with proper revisions. Includes a breaking change
to default the `2.0.0` version instead of the much older v1 (`1.0.0`).
fix: Disable Nordic dt-bindings header checks.
Disable the recently added Nordic dt-bindings header checks, which cause
issues for our HID related headers.
fix(studio): Correct `memset` usage.
Use the correct memset call to clear our RPC memory.
fix: Refactor for new Zephyr PM API
Adjustments to our PM code to match Zephyr PM APIs.
refactor(ble): Use correct BT opt for connectable.
Adjust for upstream Zephyr BT API changes for advertising options.
refactor(boards): Move MakerDiary M2 board to HWMv2.
Run the HWMv2 script to convert the MakerDiary M2 board.
fix(studio): Correct usage of thread analyzer API
Fix up the RPC code that invoke the thread analyzer API to account for
API changes.
chore: Remove nanopb module override.
Leverage nanopb version that's used by Zephyr.
feat(core): mapper for magic bootloader values.
To trigger bootloaders that use a magic value in RAM to trigger
bootloader mode, add a mapping retained memory driver that maps
write/read of boot mode values to a special magic value stored
in the actually backing RAM.
feat(behaviors): Add retention boot mode to reset.
Support new generic Zephyr retention boot mode API in the reset
behavior.
feat: Add double tap to enter bootloader functionality
Add ability to enter the bootloader if double tapping reset within the
specified window.
refactor(CI): Move to 4.1 container tags.
Move to the new 4.1 tagged container, to ensure updated SDK, Python
packages, etc.
refactor(boards): Move nRFMicro to HWMv2
Refactor nRFMicro to HWMv2, using proper SoC, revisions, and variants
(for flipped). Also move to devicetree setup of DCDC/HV DCDC.
refactor(boards): Move QMK Proton-C to HWMv2
Move Proton-C to HWMv2 for use with Zephyr 4.1.
chore(ci): Adjust core coverage for new board IDs.
Use correct board IDs, with qualifiers, for our core coverage testing.
refactor(boards): Move BDN9 to HWMv2
Move BDN9 to HWMv2, using the base `bdn9` ID, no longer including the
`_rev2` suffix in the ID.
refactor(boards): Move nice!60 to HWMv2
Migrate nice!60 to HWMv2.
refactor: Adjust how we're searching/loading keymap files
Use new post_boards_shields extension point for loading keymap files
from board/shield directories.
refactor(boards): Move planck rev6 to HWMv2.
Move Planck board definition to HWMv2, including versioning tweaks.
refactor(boards): Move OLKB Preonic to HWMv2
Move Preonic board definition to HWMv2 and remove `_rev3` variant
suffix in favor of board versioning with `3.0.0` as the default.
chore(deps): Pull in Zephyr optional group for nanopb.
Ensure we enable nanopb by adding +optional group filter.
fix(ci): Prevent slash characters in artifact names.
Move to HWMv2 means board IDs often include slashes, so replace those
with underscores when doing file uploads.
fix(usb): Adjust Kconfig settings for USB.
* Ensure USB isn't initialized automatically before we do, which can
happen if USB CDC logging is used/enabled for a given board.
* Adjust USB HID to initialize the USB class/interface before we enable
the USB device itself.
fix(display): Fix setting the small font for the mono theme.
Adjust for modified mono theme init function to pass the small font.
chore(ci): Fix changed board IDs for core coverage.
Adjust board IDs for our core coverage after move to HWMv2 and board
versioning consistently.
* planck_rev6 -> planck
* bdn9_rev2 -> bdn9
fix(underglow): Remove use of removed Kconfig WS2812 symbol
refactor(boards): Move PW CKP boards to HWMv2
Migrate the bt60, bt65, and bt75 to HWMv2.
refactor(boards): Move Puchi BLE to HWMv2
Migrate the Puchi BLE to HWMv2.
refactor(boards): Migrate Ferris rev02 to HWMv2.
Move Ferris rev02 to HMWv2, and remove the revision from the ID.
refactor(boards): Move Pillbug to HWMv2
Migrate the MechWild PillBug board to HWMv2.
refactor(boards): Migrate s40nc to HWMv2
Move the ShortyFortyNoCordy (s40nc) to HWMv2.
refactor(boards): Move bluemicro840 board to HWMv2.
Migrate bluemicro840 board to HWMv2, set up boot mode retention.
fix(boards): Retore bootloader support on XIAO BLE.
Set up necessary boot mode/retention to properly set GPREGRET to trigger
Adafruit bootloader to run on the XIAO BLE.
refactor(boards): Move Adv360 Pro to HWMv2.
Migrate Adv360 Pro left/right to HWMv2.
refactor(boards): Move Glove80 to HMWv2
Refactor the MoErgo Glove80 left/right to HWMv2.
refactor(boards): Move Mikoto to HMWv2.
Migrate Mikoto to HWMv2, with non-exact matching, tweaks to I2C
selection to imply it for the 7.2.0 revision for the fuel gauge.
refactor(boards): Move kbdfans Tofu65 2.0 to HMWv2
Move Tofu65 2.0 to HMWv2, with ID of just `tofu65`.
refactor(boards): Remove dz60rgb board
Remove dz60rgb, it's no longer readily available and we have other
current stm32 reference designs for testing.
refactor(boards): Move Corneish Zen to HMWv2
Move Corneish Zen to HMWv2, with IDs of
`corneish_zen_left`/`corneish_zen_right`.
refactor(boards): Migrate Corne-ish Zen status screen
* refactor(boards): Add boot mode to the nice!nano using common dtsi
* Add a new .dtsi for setting up nRF52 boot mode/retained memory
settings
* Adjust XIAO BLE to use the new include file
* Add boot mode to to the nice!nano
refactor(boards): Add boot mode support to nice!60 board
Enable boot mode for nice!60 board.
refactor(boards): Adjust Zephyr board metadata file locations
Move the ZMK metadata files for upstream Zephyr boards to align with the
HWMv2 directory structure that uses the vendor ID for the parent
directory for a board directory.
fix: Don't enable ZMK Display by default for a few shields
By convention, avoid enabling ZMK Display by default on shields that may
be built with under-resourced controllers (e.g. nRF52833 based ones).
fix: Remove usage of renamed Kconfig from core coverage.
Avoid using WS2812_LED_STRIP, since that Kconfig was renamed/split into
SPI/GPIO/I2S symbols.
refactor(boards): Adjust XIAO RP2040 override names, bootloader support
Adjust the .conf/.overlay files to match the proper naming for the
XIAO rp2040 board. Also add the necessary Kconfig/DTS bits for
supporting bootloader using retained memory/boot mode retention.
fix(display): Adjust stack sizes for display usage.
Updated LVGL is bumping our stack size, so adjust the system work queue
and dedicated display queue stack sizes as needed to account for this.
feat(display): Add thread name to dedicated display queue.
When thread names are enabled, pass a name to the dedicated display
queue for better tracibility when using the thread analyzer.
docs(blog): Add Zephyr upgrade post
docs: Add bootloader integration page
Add a dedicated page to outline steps to set up bootloader integration
using the boot retention mechanism in newer Zephyr versions.
fix(display): port nice!view display code
* remove `lv_` prefix from old LVGL methods
doc: Update local setup docs to use `west packages pip`
Install Zephyr deps using the newer `west packages pip --install`.
Signed-off-by: Peter Johanson <peter@peterjohanson.com>
refactor(split): Adjust BT split code for newer Zephyr APIs.
refactor(boards): Adjust upstream RP2040 boards for boot mode retention
Add necessary DTS/Kconfig settings to upstream RP2040 boards so they can
use the ZMK bootloader functionality using the boot mode retention
infrastructure.
docs: Update Zephyr docs links to 4.1.0 version.
Update all links to the Zephyr docs to the 4.1.0 versions to match our
Zephyr version in use.
docs: Add a note about using CMake v3 for maximum compatibility.
Some optional modules, like libmetal, which is used on nRF5340,
specifically require CMake v3, so add a note in the native toolchain
setup about this.
feat(pointing): Handle INPUT_BTN_TOUCH codes for mouse buttons
Translate INPUT_BTN_TOUCH input codes into button 0 press/release for
HID layer.
chore(pointing): Clean up some warning messages.
Properly check return code from queue-ing messages, and fix up some type
warnings in our logging calls.
* Fix input event codes line numbers
fix(studio): Properly serialize GATT RPC indications.
fix(core): Set a system work queue stack size of 2048 by default
We use a fair amount of stack even without BLE or RP2040, so default to
2048 by default everywhere, and constrained platforms can lowes this if
they really need.
refactor(core): Move away from deprecated DIS Kconfig symbols
Use the correct Device Information Service Kconfig symbols for our model
number and manufacturer.
refactor: Move upstream Zephyr board overrides to extensions dirs
Newer Zephyr supports "board extensions" to formally do what we've added
in ourselves via some hacks, so move all our board overlay/config file
overrides for upstream Zephyr boards into that correct structure.
fix(boards): Add xiao_ble sd_partition label for nosd snippet compat
Upstream xiao_ble uses different naming convention for the partition
labels, so add an additional label for the SD range, so the existing
nrf52840-nosd snippet will still work with the board.
fix(core): Don't force CBPRINTF_NANO, for proper formatting.
The nano CBPRINTF implementation lacks some padded formatting needed to
ensure consistent formatting of BLE addresses, which we use to store
keys as strings in a few places, so use the complete CBPRINTF by default
now.
fix(boards): Remove some references to old nice_nano_v2 board ID.
The nice!nano board definition now properly uses versioning, so avoid
referring to it with old `nice_nano_v2` board ID.
fix(boards): Remove nano overlays for old nice_nano_v2 board ID.
With board versioning in place, we can remove the unused
`nice_nano_v2.overlay` files from shields.
---------
Signed-off-by: Peter Johanson <peter@peterjohanson.com>
Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
Co-authored-by: Nicolas Munnich <munnich@lipn.univ-paris13.fr>
Co-authored-by: snoyer <noyer.stephane@gmail.com>
Add versions to the sidebar of the documentation, and when viewing the
deployment on zmk.dev, which tracks `main`, add a banner warning about
possibly prefering the docs for a particular stable release.
Properly use the BT_DEVICE_APPEARANCE Zephyr symbol to advertise
the correct appearance, allowing overrides, for e.g. mice.
Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
if [ -z "$matrix_content" ] || [ "$matrix_content" = "null" ]; then
echo "::notice file=${{inputs.build_matrix_path}},title=Empty build matrix file::To add a keyboard to the build, see https://zmk.dev/docs/user-setup#add-a-keyboard."
echo "Your recent build failure might be the result of breaking changes made to ZMK's main branch." >> $GITHUB_STEP_SUMMARY
echo "Consider [pinning your ZMK version](https://zmk.dev/blog/2025/06/20/pinned-zmk) to a release for increased stability." >> $GITHUB_STEP_SUMMARY
echo "See also the [list of released versions](https://github.com/zmkfirmware/zmk/releases)." >> $GITHUB_STEP_SUMMARY
echo "If you wish to stay on main, check the most recent pending release PR for breaking changes. [Our blog](https://zmk.dev/blog) may have upgrade information if breaking changes are significant." >> $GITHUB_STEP_SUMMARY
- name:Check if building a board without explicit ZMK compat
echo "::warning file=build/zephyr/.config,title=Missing ZMK Compat::The selected board does not report explicit ZMK compat. Please verify you've selected the correct board and ZMK variant if one exists"
else
echo "::error file=build/zephyr/.config,title=Missing ZMK Compat::The selected board is not set up for ZMK and there is a ZMK variant available. See https://zmk.dev/blog/2025/12/09/zephyr-4-1#zmk-board-variant."
- uses:tj-actions/changed-files@9200e69727eb73eb060652b19946b8a2fdfb654b# pin to v45.0.8 due to https://github.com/tj-actions/changed-files/issues/2463 https://www.stepsecurity.io/blog/harden-runner-detection-tj-actions-changed-files-action-is-compromised
* Move to zephyr v4.1 ([#3060](https://github.com/zmkfirmware/zmk/issues/3060))
* **core:** Allow layer behaviors to "lock" layers on (https://github.com/zmkfirmware/zmk/pull/2717)
### Features
* Add double tap to enter bootloader functionality ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* Add nBOOT_SEL bit setup for STM32 G0/C0 targets ([f85ec7e](https://github.com/zmkfirmware/zmk/commit/f85ec7e7a24be10f1cf59025a192569dc0b33167))
* Add ZMK_BOARD_COMPAT Kconfig symbol, and check for it ([a23aa00](https://github.com/zmkfirmware/zmk/commit/a23aa009d7a07d67fe5609caca7372e16610f238))
* Allow layer behaviors to "lock" layers on (https://github.com/zmkfirmware/zmk/pull/2717) ([5138c6f](https://github.com/zmkfirmware/zmk/commit/5138c6fb14783b756c5a3e61581625c700f3555b))
* **behaviors:** Add retention boot mode to reset. ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **ble:** Use appearance set in the BT_DEVICE_APPEARANCE config ([#3115](https://github.com/zmkfirmware/zmk/issues/3115)) ([ad7fbfe](https://github.com/zmkfirmware/zmk/commit/ad7fbfef920d9907ca8f143e273fa9eb7d84b25a))
* **boards/shields:** Add settings for Rpi Pico and add tester_rpi_pico shield ([#2900](https://github.com/zmkfirmware/zmk/issues/2900)) ([ccf20a1](https://github.com/zmkfirmware/zmk/commit/ccf20a1f5c1534a197d32279abbe0eaf651099d8))
* **boards:** add support for nrf52840dongle_nrf52840 ([#3011](https://github.com/zmkfirmware/zmk/issues/3011)) ([c7fae18](https://github.com/zmkfirmware/zmk/commit/c7fae18ae122b2465080507380dd55d096edd666))
* **core:** (Optionally) use Zephyr keyboard input devices ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **core:** mapper for magic bootloader values. ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **display:** Add thread name to dedicated display queue. ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **docs:** Update New Behavior Guide ([#3107](https://github.com/zmkfirmware/zmk/issues/3107)) ([e34793e](https://github.com/zmkfirmware/zmk/commit/e34793e8c7193bc868b95ec38d78f67956f759cb))
* **endpoints:** add "no endpoint" value ([6e7e0de](https://github.com/zmkfirmware/zmk/commit/6e7e0de2b621073392816b284ab4931bee709ee8))
* **endpoints:** add "no endpoint" value ([#3140](https://github.com/zmkfirmware/zmk/issues/3140)) ([6e7e0de](https://github.com/zmkfirmware/zmk/commit/6e7e0de2b621073392816b284ab4931bee709ee8))
* **layouts:** Add physical layout for Redox shield ([61de01a](https://github.com/zmkfirmware/zmk/commit/61de01abb00a73349a188ef2e10ad1cd040d31b3))
* Move to zephyr v4.1 ([#3060](https://github.com/zmkfirmware/zmk/issues/3060)) ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **pointing:** Handle INPUT_BTN_TOUCH codes for mouse buttons ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **pointing:** Release pressed keys on disconnect ([#3204](https://github.com/zmkfirmware/zmk/issues/3204)) ([24487bd](https://github.com/zmkfirmware/zmk/commit/24487bd9744f504724089f0e1cec98431a2d3333))
* **shields:** Add Studio support to boardsource3x4 ([#3154](https://github.com/zmkfirmware/zmk/issues/3154)) ([40e06f3](https://github.com/zmkfirmware/zmk/commit/40e06f3c0084751f7ae012a71d92d5801ac3b7a0))
* **split:** Add HID indicators and physical layout set to Wired split ([#3103](https://github.com/zmkfirmware/zmk/issues/3103)) ([7738924](https://github.com/zmkfirmware/zmk/commit/773892434931b74bdf54474b73c909779daa9471))
### Bug Fixes
* Add "optional" folder to .gitignore ([#3141](https://github.com/zmkfirmware/zmk/issues/3141)) ([c099041](https://github.com/zmkfirmware/zmk/commit/c0990410da4c0a0c3776448e8c05ca2ce8778c8a))
* **boards:** Fix pillbug board.yml to report extension ([a23aa00](https://github.com/zmkfirmware/zmk/commit/a23aa009d7a07d67fe5609caca7372e16610f238))
* **boards:** Remove nano overlays for old nice_nano_v2 board ID. ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **boards:** Remove some references to old nice_nano_v2 board ID. ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **boards:** Retore bootloader support on XIAO BLE. ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **ci:** disable nrf5340dk from being built in our CI ([#3066](https://github.com/zmkfirmware/zmk/issues/3066)) ([522971f](https://github.com/zmkfirmware/zmk/commit/522971f41d62d7e5d6664eb61c84d190781feeb9))
* **ci:** Pin @actions/artifact to a compatible release ([#3230](https://github.com/zmkfirmware/zmk/issues/3230)) ([ada1542](https://github.com/zmkfirmware/zmk/commit/ada1542940c3a01c0866c9fe9c30f489bc087328))
* **ci:** Prevent slash characters in artifact names. ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **core:** Don't force CBPRINTF_NANO, for proper formatting. ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **core:** Generate correct keymap layer names for all builds ([#3047](https://github.com/zmkfirmware/zmk/issues/3047)) ([0b5a103](https://github.com/zmkfirmware/zmk/commit/0b5a103c187ad337b9f50d824667866c4d7252e1)), closes [#3045](https://github.com/zmkfirmware/zmk/issues/3045)
* **core:** One tick kscan wait on RP2350 ([#3255](https://github.com/zmkfirmware/zmk/issues/3255)) ([9278505](https://github.com/zmkfirmware/zmk/commit/9278505975759e9cf01b4e6e8ead359b14a11400))
* **core:** Set a system work queue stack size of 2048 by default ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **core:** support magic bootloader values for nRF52833 ([#3163](https://github.com/zmkfirmware/zmk/issues/3163)) ([308de56](https://github.com/zmkfirmware/zmk/commit/308de56fb938057da7648a411ce0dce780dfc3f1))
* **display:** Adjust stack sizes for display usage. ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **display:** Fix setting the small font for the mono theme. ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **display:** port nice!view display code ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **docs:** Tweak layer tap example to be clearer ([#3023](https://github.com/zmkfirmware/zmk/issues/3023)) ([919bce7](https://github.com/zmkfirmware/zmk/commit/919bce7962db78139415ccf0e80fb858c89adb3d))
* Don't enable ZMK Display by default for a few shields ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **pointing:** Refactor for changes to input API ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* Refactor for new Zephyr PM API ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* Remove usage of renamed Kconfig from core coverage. ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* replace removed `K_THREAD_STACK_MEMBER` with `K_KERNEL_STACK_MEMBER` ([#3218](https://github.com/zmkfirmware/zmk/issues/3218)) ([f6c629e](https://github.com/zmkfirmware/zmk/commit/f6c629e895bbe3957ec243afb80b11e1e4b4e503))
* **sensors:** Initialize sensor data to 0 before fetching. ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* Set default transport according to enabled transports ([6e7e0de](https://github.com/zmkfirmware/zmk/commit/6e7e0de2b621073392816b284ab4931bee709ee8))
* **split:** int to pointer cast in bas proxy ([#3105](https://github.com/zmkfirmware/zmk/issues/3105)) ([ece2ce1](https://github.com/zmkfirmware/zmk/commit/ece2ce11b8c7245fbe2b4e41ec9fa7a870632e6c))
* **split:** Properly return from command handler ([#3120](https://github.com/zmkfirmware/zmk/issues/3120)) ([d32ffb0](https://github.com/zmkfirmware/zmk/commit/d32ffb0a335ece70a9ce3dc3ce014676534ee99b))
* **split:** Use correct Kconfig for bumping TX buffers for discovery ([#3216](https://github.com/zmkfirmware/zmk/issues/3216)) ([9490391](https://github.com/zmkfirmware/zmk/commit/9490391e1e4010c83291d437b7f9a71ace244581)), closes [#3156](https://github.com/zmkfirmware/zmk/issues/3156)
* **tests:** Fix BLE test to account for Zephyr changes ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **underglow:** Remove use of removed Kconfig WS2812 symbol ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **usb:** Adjust Kconfig settings for USB. ([c06fa48](https://github.com/zmkfirmware/zmk/commit/c06fa48ce59e016105d79c20942d085314502d8d))
* **usb:** Prevent unexpected USB disconnection caused by USB SOF ([#3070](https://github.com/zmkfirmware/zmk/issues/3070)) ([118359c](https://github.com/zmkfirmware/zmk/commit/118359c83efa0758144489fd5e12cc6f5bdbad4c))
### Documentation
* Added documentation note on locking layers ([5138c6f](https://github.com/zmkfirmware/zmk/commit/5138c6fb14783b756c5a3e61581625c700f3555b))
### Code Refactoring
* **core:** Allow layer behaviors to "lock" layers on (https://github.com/zmkfirmware/zmk/pull/2717) ([5138c6f](https://github.com/zmkfirmware/zmk/commit/5138c6fb14783b756c5a3e61581625c700f3555b))
// Node name must match original "EXT_POWER" label to preserve user settings.
EXT_POWER {
compatible = "zmk,ext-power-generic";
control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
init-delay-ms = <50>;
};
vbatt: vbatt {
compatible = "zmk,battery-voltage-divider";
io-channels = <&adc 2>;
output-ohms = <2000000>;
full-ohms = <(2000000 + 820000)>;
};
};
&adc {
status = "okay";
};
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.