* Reference combos by index, not 32-bit pointers, and store bitfields
instead of arrays in several places, to bring down our flash/RAM usage.
* Use bit field to track candidate combos, to avoid needing an explicit
`ZMK_COMBO_MAX_COMBOS_PER_KEY` setting.
* Determine the max keys per combo automatically from the devicetree,
so we remove the ZMK_COMBO_MAX_KEYS_PER_COMBO Kconfig symbol.
Fix 8 bit truncation of 16 bit scroll values when passed into
functions `zmk_hid_mouse_scroll_set` and
`zmk_hid_mouse_scroll_update`.
Fixes: #2864
Co-authored-by: Tobias Adolph <43353209+adolto@users.noreply.github.comgit>
refactor(split): Refactor split code for extension
Extract central/peripheral code to allow for plugging in alternate
transports, instead of tying all split logic to BT.
feat(split): Add full-duplex wired split support
* Depends on full-duplex hardware UART for communication.
* Supports all existing central commands/peripheral events, including
sensors/inputs from peripherals.
* Only one wired split peripheral supported (for now)
* Relies on chosen `zmk,split-uart` referencing the UART device.
docs: Add wired split config docs.
Migrate split to its own dedicated config file, and add details
on wired split config.
Co-authored-by: Nicolas Munnich <98408764+Nick-Munnich@users.noreply.github.com>
fix: Properly override stack size on RP2040
Move the system work queue stack size override on RP2040 ouf of
a `ZMK_BLE` conditional so it is properly applied generally for that
SoC.
---------
Co-authored-by: Nicolas Munnich <98408764+Nick-Munnich@users.noreply.github.com>
feat(shields): Add tester_xiao layouts
Added two layouts for the XIAO tester shield:
- Keys arranged to match the XIAO pinout, viewed from the front
- Single row of eleven keys
These layouts are abstractions since the tester_xiao shield may be
used in a situation where the "keys" are actually jumper wires on a
breadboard or the like.
feat(shields): Add tester_pro_micro layouts
Added two layouts for the Pro Micro tester shield:
- Keys arranged to match the Pro Micro pinout, viewed from the front
- Single row of eighteen keys
fix(pointing): Temp layer threading protection.
Ensure all layer operations occur on the system work queue thread.
Fixes: #2719
fix(pointing): Handle layer events to disable events
Make the temp layer input processor propely handle layers getting
deactivated externally before the temp layer timeout.
Co-authored-by: Nicolas Munnich <98408764+Nick-Munnich@users.noreply.github.com>
test(behaviors): Add same position sticky key tests
fix(behaviors): Make multiple sticky keys work on same key position
refactor(behaviors): Remove unused param2 in sticky keys
refactor(behaviors): Add max-held tap-dance config
Add new `CONFIG_ZMK_BEHAVIOR_TAP_DANCE_MAX_HELD` config for reducing RAM
usage on more constrained devices.
refactor(behaviors): Move defaults to Kconfig.defaults
Zephyr is still working on the plan upstream for generically controlling
display "backlight" pins with GPIO/PWM, so in the meantime, add our
own chosen property `zmk,display-led` that is set to an LED device child
to allow blanking/unblanking of devices that use a dedicated backlight
control pin.
fix(display): Do LVGL task processing in main on POSIX.
An SDL/Zephyr bug prevents proper display when SDL calls are
made from anything but the main thread, so add task handling
in our simple main function when on POSIX.
fix(usb): Compilation fix for 64-bit targets
Properly handle differences in the size of `size_t` on 64-bit
architectures.
fix(display): Imply, but don't force, LVGL mono theme
Some targets may be using color displays, so instead of forcing
on the mono theme, merely imply it to default it
When building for ZMK Studio, we can use the constant stock keymap
for init of the in-memory keymap, to avoid duplicate flash usage
for the keymap from the devicetree.
To be able to save on flash space, for layouts on space constrained
devices that don't require rotation, make key rotation props
optional behind a new Kconfig flag.
Save a tiny bit of RAM by properly marking our device config
struct instances const consistently, and also add missing static
modifiers to properly isolate config/data for drivers.
test(pointing): Add mock input device.
New mock input device to generate input events for tests.
test(split): Add peripheral input test.
Test event propagation from peripheral input devices.
fix(split): Proper scoping for local within switch.
Minor compile fix.
chore: Fix up test snapshots after logging changes.
Adjust the test snapshots after logging changes to the central.
fix(kscan): Don't fire last mock event twice.
Fix a bug where the kscan mock would raise the last mock event
twice before halting processing.
test(sensors): Add mock encoder sensor
Add a new mock sensor driver for generating mock encoder sensor channel
data.
test(split): Add a peripheral sensor split test
Test BLE split logic for peripheral sensors (encoders).
When building a unibody or central warnings get thrown for the backslash newlines at EOF in combos.h and input_listeners.h. Adding a trailing newline to the affected files rectifies this
* Enhance the BLE test runner to build additional peripheral builds
when detecting peripheral*.overlay files in the test.
* Add basic and multiple-peripheral tests to exercise the testing
support
* Add test for triggering local behaviors on split peripherals.
fix(ble): Fix building split code w/o settings
* Properly exclude storing peripheral addresses to settings when
settings support isn't turned on.
refactor(pointing): Allow stopping event propagation
Allow input processors to return a special value if a given input event
should not be further processed/propagated.
feat(pointing): Add behavior input processor
Add the ability to intercept certain input events and trigger behaviors
when they occur.
Co-authored-by: Jorge Villalobos <minusfive@users.noreply.github.com>
Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
The "arg" field on nanopb structs is a void* because it is shared
between the encode and decode callbacks, even though the encode
callback probably should not modify the data. We are passing const data
using this non-const pointer, which causes warnings about discarding
const. This commit explicitly casts to void* to suppress these warnings.
* include kscan.yaml so we can set kscan-composite as a wakeup source
* modify enable and disable callback to check for wakeup capabilities of
composite and children
* disable children wakeup source
The disable function is only called
when the composite is not an enabled wakeup source.
In that case the children should also not be an enabled
wakeup source, so they can get suspended
* feat(mouse): Add mouse move and scroll support
* Use Zephyr input subsystem for all pointers.
* Input processors for modifying events, e.g. scaling, swapping
codes, temporary (mouse) layers, etc.
* Mouse move/scroll behaviors.
* Infrastructure in place for physical pointer input devices.
* feat: Add input split support.
* docs: Add initial pointer docs.
---------
Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
Co-authored-by: Alexander Krikun <krikun98@gmail.com>
Co-authored-by: Robert U <urob@users.noreply.github.com>
Co-authored-by: Shawn Meier <ftc@users.noreply.github.com>
Co-authored-by: Chris Andreae <chris@andreae.gen.nz>
Co-authored-by: Anant Thazhemadam <47104651+thazhemadam@users.noreply.github.com>
Co-authored-by: Erik Tollerud <erik.tollerud@gmail.com>
Co-authored-by: Nicolas Munnich <98408764+Nick-Munnich@users.noreply.github.com>