Feature: pointer movement/scrolling#2027
Feature: pointer movement/scrolling#2027petejohanson wants to merge 14 commits intozmkfirmware:mainfrom
Conversation
8b2dc31 to
bd9210d
Compare
app/src/mouse/key_listener.c
Outdated
| k_work_submit_to_queue(zmk_mouse_work_q(), &mouse_tick); | ||
| } | ||
|
|
||
| K_TIMER_DEFINE(mouse_timer, mouse_timer_cb, mouse_clear_cb); |
There was a problem hiding this comment.
The part that initially made me bang my head against the wall with all this is the fact that Zephyr sometimes seems to de-prioritize these timers if the system is under load.
This is (as far as I was able to understand) the primary cause of the instability with mouse movement - reports can be sent out at random intervals or dropped entirely.
I was exploring re-writing this system to use a dedicated thread, but I wasn't skilled enough at C at the time.
I'm not sure this basis for the tick system is robust enough for general use.
There was a problem hiding this comment.
So... timers should be using the hardware timers to trigger, and happen in ISR context. The queue has a certain priority, can be preempted, etc. Tweaking that thread priority might help, but I'll play a bit to see what I can determine. Thanks for the insight!
There was a problem hiding this comment.
This is most certainly not definitive - it's a half-remembered conclusion from an investigation I wasn't skilled enough to perform two years ago, just food for thought. I distinctly remember reports being delayed or dropped and that causing instability. hog.c:335 might also be worth taking a look at.
bd9210d to
eab4709
Compare
|
|
||
| /* Mouse move behavior */ | ||
| #define MOVE_Y(vert) ((vert)&0xFFFF) | ||
| #define MOVE_Y_DECODE(encoded) (int16_t)((encoded)&0x0000FFFF) |
There was a problem hiding this comment.
I think it might make sense to move these decode defines outside the dt-bindings header, and to either plain mouse.h or the corresponding event headers they are used in.
There was a problem hiding this comment.
IMHO, they are complementary and should live together.... I think keeping them here is appropriate.
32ed133 to
c2bf21b
Compare
c2bf21b to
07c181d
Compare
|
Could you please change the target to https://github.com/petejohanson/zmk/tree/core/zephyr-3.5-update here? The review is unnecessarily cluttered. |
Unfortunately, that will move the PR into a different GH fork, and make a bit of a mess. I recommend reviewing each commit for clarity for now, until the Zephyr 3.5 bits are merged into ZMK |
505343b to
d837c95
Compare
d837c95 to
a95b68b
Compare
|
This isn't abandoned, I am guessing Studio work is getting more priority right now. Pete mentioned on Discord that he is planning to refactor the endpoints a bit (the current split one has some issues on some OS, like Ubuntu 22.04). Meanwhile if anyone needs a rebased branch in the very near future, you can cherry-pick from https://github.com/caksoylar/zmk/commits/caksoylar/experimental. |
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>
* Add ability to swap X/Y, invert X and Y values, and apply a scalar multiplier/divisor.
* Remove now-unused mouse work queue and related mouse main file. * Move ticks config into a DTS property on the two axis input behavior.
* Corrected logging for two-axis input timestamps.
* Buffer data from input devices and only surface to HID once synd'd.
* Always import mouse keys behavior and their associated listeners. * Tweak listener code to only add listener nodes when listener and the associated input device are enabled.
dbbeb70 to
bc75de5
Compare
|
I built a new firmware for my keyboard after the recent changes had been pushed and I noticed a very strange behavior with certain keys. I have the following settings for mouse behaviors: In both nodes the delay-ms is set to 0. But I clearly have a delay with (and only with) &msc SCRL_DOWN and &mmv MOVE_LEFT now. Sorry. Just tested it on another keyboard and the issue is most likely caused by #2042 Yep. I can confirm it now. Once I add at least one Antecedent Morph behavior to the keymap I end up with a very small delay for &msc SCRL_DOWN and &mmv MOVE_LEFT. After some more digging I discovered that the key positions of &msc SCRL_DOWN and &mmv MOVE_LEFT in my keymap are shared with these combos: And it appears that the combos are the (possibly main) contributors of these lags. But the funny thing is that the lag was non-existent even with combos until antecedent_morph_keycode_state_changed_listener started to run. So, it looks like both combos and Antecedent Morph listener contribute to these lags. Excluding Mouse layer from global combos, like: completely fixes this lag. So, I guess global combos shouldn't overlap with Mouse behaviors. |
|
|
||
| ### Examples | ||
|
|
||
| The following will send a scroll down event to the host when pressed/held: |
There was a problem hiding this comment.
Did you mean mouse movement down event?
|
Closing since #2477 is merged. |
|
@caksoylar does it mean that I can use the main zmk for pointing instead of this PR? |
|
I have been using main since, it is working. |
Correct. See the documentation on zmk.dev for the details. |
Continuation of the incremental integration of the great work from @krikun98 in #778 with the movement and scrolling pieces next. Based on the rebased work from @caksoylar and and the split acceleration from @bryanforbes
TODO