Commit Graph

572 Commits

Author SHA1 Message Date
Pete Johanson f20e6ea759
fix(behaviors): Proper comma separated device list (#2850)
Properly generate the comma separated list of devs in caps word/
key repeat.
2025-03-02 06:49:07 -07:00
Pete Johanson 1e3e62c13d
fix(pointing): Temp layer threading protection. (#2729)
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>
2025-02-28 20:37:55 -05:00
Pete Johanson 21f54e7238
refactor(behaviors): Remove unneeded init funcs. (#2843)
Initialization functions are optional for Zephyr drivers, so remove
all our superfluous empty init functions.
2025-02-26 17:54:29 -05:00
Cem Aksoylar 7186528f77
fix(behaviors): Make multiple sticky keys work on same key position (#2758)
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
2025-02-26 17:54:08 -05:00
Pete Johanson 9406d39d14
refactor(behaviors): Small caps word RAM reduction. (#2842)
Don't use lazy initialized in-memory array of devices.
2025-02-26 17:01:04 -05:00
Xudong Zheng ea267b0f35
fix(ble): enforce maximum length for dynamic device name (#2784) 2025-02-26 13:29:30 -05:00
Pete Johanson 2fe55c4c41
refactor(behaviors): Minor RAM usage tweaks (#2839)
Follow up cleanup of some config structs not marked as const.
2025-02-26 13:17:23 -05:00
Pete Johanson 209085da73
refactor(behaviors): Add max-held tap-dance config (#2838)
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
2025-02-25 14:12:27 -05:00
Pete Johanson 18d0d2f476
refactor(combos): Reduce combo RAM usage (#2837)
Properly mark combo configs as `const` so they are place in flash,
not RAM.
2025-02-25 13:38:51 -05:00
Pete Johanson aa3e5dd70f
feat(display): Add config for display update period (#2819)
Add `CONFIG_ZMK_DISPLAY_TICK_PERIOD_MS` Kconfig to allow tweaking
the period between display updates.
2025-02-10 13:32:16 -05:00
Pete Johanson 627e6dbec9
feat(display): Add ability to set display on/off pin. (#2814)
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.
2025-02-07 17:49:30 -07:00
Pete Johanson 4b4a8a35f3
fix(display): POSIX lvgl fixes (#2812)
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
2025-02-07 02:05:21 -05:00
Pete Johanson 425256bc0d
fix(display): Only default mono theme when 1bpp (#2804)
In order to have flexibility for color displays, only imply the mono
theme if we have 1bpp.
2025-01-31 22:53:35 -05:00
Pete Johanson e4f1454e0b
refactor(keymap): Reduce flash usage for studio builds (#2771)
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.
2025-01-15 16:51:26 -05:00
Pete Johanson c367d8f636
feat(core): Make physical layout key rotation optional (#2770)
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.
2025-01-15 16:48:18 -05:00
Pete Johanson 8dddb1d9d7
Testing: split input test (#2762)
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.
2025-01-13 15:15:16 -05:00
Pete Johanson 36508c27fd
fix(studio): Allow adding layers after a layer move (#2748)
Properly return the available layers in the move layer response.
2025-01-03 19:19:19 -05:00
Pete Johanson 85aba16eec
testing: Add split BLE tests (#2737)
* 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.
2025-01-01 18:13:47 -05:00
Pete Johanson cb867f92db
Feature: input processor behavior invocation (#2714)
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>
2024-12-17 20:50:06 -05:00
Nicolas Munnich 4ef231f4bb
feat: Added `toggle-mode`, allowing toggle-on and toggle-off (#2555)
feat: added toggle mode to key and layer toggles

docs: documented toggle mode changes
2024-12-12 19:13:56 -05:00
Joel Spadin 7013158a67
fix: Fix warnings in nanopb encoding code (#2643)
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.
2024-12-11 15:00:48 -05:00
Pete Johanson 6b40bfda53
feat(mouse): Add mouse move and scroll support (#2477)
* 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>
2024-12-09 19:45:41 -05:00
Pete Johanson 0820991901
fix(studio): Properly return complete keymap from RPC (#2696)
Ensure the set active physical layout RPC returns the full keymap
details including the available layers.
2024-12-06 18:10:58 -05:00
Nicolas Munnich 40925d48e6
refactor(Kconfig): Extracted designer defaults out into new files (#2537)
docs: Fix incorrect kconfig default values

fix(Kconfig): Added a name to EC11's trigger mode choice, allowing it to be set in device Kconfig.defconfig

refactor(Kconfig): Moved designer defaults out into new files
2024-12-04 16:19:35 -05:00
Nicolas Munnich fed66a92d0 fix(studio): Improved error message when keyboard is missing a physical layout. 2024-11-13 11:38:41 -07:00
Peter Johanson 19a096ab67 fix(keymap): Set bindings with changed layout
* Fix bug with setting keymap layer bindings when a non-stock layout
  is selected.
2024-11-04 13:30:40 -07:00
Peter Johanson 8ed556df62 chore(studio): Only clear settings for overridden key positions. 2024-10-21 14:53:31 -06:00
Peter Johanson ea1a09bf99 fix: Optimize layout changes by doing runtime mapping
* To avoid tons of migration, extra flash writes, etc, we keep
  the keymaps and settings using a key position index that's tied
  to the stock layout, and at runtime mapping key positions as
  needed.
2024-10-18 15:30:13 -06:00
angweekiat 0adb80c02b
fix(usb): detect USB power mode to fallback to BLE
* Add tracking to see if we ever hit a configured status before
  suspend, so we can properly track "is connected" even when
  connected to a suspended/asleep host.
2024-10-14 19:15:45 -04:00
Pete Johanson dab4b2cdf3
fix(studio): Reduce stack usage. (#2547)
* Imply nanopb setting for reduced stack usage.
2024-10-10 12:49:51 -04:00
Peter Johanson 47a17c64d7 fix: Defer auto enabling of kscan sideband.
* Now that device init of kscan sideband is in POST_KERNEL stage,
  use a separate SYS_INIT for auto enabling the device so processing
  of early/initial presses from referenced toggle mode kscan devices
  occurs at the proper time during init.
2024-10-08 10:20:39 -06:00
Peter Johanson 29b39f2b9f feat: A few enhancements to our RPC messages.
* More fine grained status reporting when saving changes. Needed to we
  can notify the client if we've got errors saving settings due to
  running out of space, etc.
* Return the max layer name lenght in the keymap payload, for the UI to
  leverage.
2024-10-03 15:10:58 -06:00
Peter Johanson 7276fd525f feat: Build asserts for requires studio layout bits.
* When building with ZMK Studio, assert that we have physical layouts,
  and those layouts have key information set.
2024-09-30 12:00:21 -06:00
Peter Johanson 4a8ceba0db chore: Fix keymap const warning. 2024-09-25 20:23:19 -06:00
Peter Johanson 5d4b6df6a7 feat(studio): Log entry into all RPC. 2024-09-25 17:46:50 -06:00
Peter Johanson 21e1b2acad feat: Add RPC thread analysis support. 2024-09-25 17:46:50 -06:00
ReFil 17f0a4d307
feat(ble): Set device name at runtime
This allows for the device name to be set at runtime, possible uses for this include a custom display screen that lets you type it in using the keycode state event, future configuration in zmk studio, or altering it per profile as per #1169
2024-09-25 15:35:42 -04:00
ReFil 58dcf5c285
feat(power): Support multiple ext_power GPIOS 2024-09-25 15:30:45 -04:00
Peter Johanson 33e3b02ddb feat: Split physical layout selection sync.
* Ensure the split peripherals have the same selected physical
  layout on connection and change.
2024-09-23 15:12:22 -06:00
Peter Johanson f992352936 chore: Formatting fix. 2024-09-23 10:31:43 -06:00
Cem Aksoylar fb18a4d871 refactor: Condition source props on CONFIG_ZMK_SPLIT 2024-09-23 10:17:29 -06:00
Cem Aksoylar b249135742 feat(sensors): Make sensors always trigger on central (for now) 2024-09-23 10:17:29 -06:00
Cem Aksoylar 4fdfb01b6a feat(split): Make combos invoke behaviors with locality
TODO: Currently the source is hardcoded to central for source local behaviors
2024-09-23 10:17:29 -06:00
Cem Aksoylar 9e36ebd525 feat(split): Make locality work nested behavior invocations
Co-authored-by: Tokazio <tokazio@hotmail.com>
2024-09-23 10:17:29 -06:00
Peter Johanson 11f600d9e5 fix(display): Check layer name length too. 2024-09-20 22:59:44 -06:00
Peter Johanson cca637d66e fix: Properly calculate highest active layer for display. 2024-09-20 22:59:44 -06:00
Peter Johanson de38676afd fix(core): Warn only with layouts + chosen transform
* Instead of erroring out, simply ignore physical layouts if we
  detect a chosen matrix transform, and warn instead.
2024-09-19 13:12:17 -06:00
Peter Johanson 1baf18d671 chore: Better errno formatting in logs. 2024-09-19 01:15:13 -06:00
Peter Johanson 6ae07d222a feat: Bit of extra studio keymap logging. 2024-09-18 13:08:35 -06:00
XiNGRZ 62900c62be fix(studio): Ensure null-termination of layer name read from settings
This fixes the string leak when a layer name is changed to a longer one,
but is discarded and reverted to the original shorter one from ZMK Studio.
2024-09-18 10:53:23 -06:00