This commit adds tentative support for the Plover HID Protocol, a
simple HID-based protocol that works over both USB and BLE.
The main value-add of this feature is that it allows ZMK to be used for
interfacing with Plover from the Open Steno Project without Plover
having to intercept all keyboard keypresses.
Usually hobbyist steno machines use legacy serial port protocols for
this, but since we can't use those over BLE we might as well develop a
protocol that works both for USB and BLE and at the same time remove
some of the pain points of those old protocols.
* Update docs for mod-morph
* Add unit tests for mod-morph
* Add keep-mods to DT binding
Co-authored-by: Martin Aumüller <aumuell@reserv.at>
Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
* Add ZMK_HID_CONSUMER_REPORT_USAGES choice to allow choosing
between full consumer usage range, with poor OS compat,
or basic consumer usage range, with broader compat.
this makes LS(LEFT_CONTROL) work as if shift and control were both
pressed explicitly. Previously, the left shift would have been released
as soon as another key was pressed. The implicit behavior is useful in
case of LS(NUMBER_1) when rolling over to other keys.
Also see #361.
* If various events get dropped, we can end up with duplicate
codes in our report, so tweak to ensure we look for all matches
and clear them when we have a keycode released.
The application usage used by report 1 is `HID_USAGE_GD_KEYBOARD`. Moreover, the `keys` usage page (0x07) that primarily feeds into this report is predominantly keyboard codes. The rest of the system should align with this naming convention.
This prevents stuck keys when switching endpoints by clearing
everything in the HID report and sending one last report before
switching to the new endpoint.