Commit a42e2c7
committed
fix(Hardware Support): Fix Dropped Events From Debounce Method
In some rare circumstances the Legion Go S DPad can have some chatter
when pressed, emitting a 'down', 'up', and 'down' event in the same
event frame. The deck and deck-uhid targets both contain debounce
sequences for double events, preventing a "no-op" if a 'down' then
'up' event is hit in the same frame by rescheduling the 'up' event for
later, but it doesn't account for what should happen if another
'down' event is hit while the 'up' event is scheduled. In such a case,
the second 'down' event becomes a no-op as the state doesn't change,
then the deferred 'up' event hits, clearing the state and putting the
virtual device out of sync with the physical hardware.
Additionally, all of the currently implemented target device
scheduled_events() functions fail to check for the elapsed time has
passed, instead immediately draining all scheduled events in the next
poll.
This patch addresses these issues by making the following changes:
- Mask the Legion Go S evdev events to reduce the overall processing
overhead for duplicated events and lower the chance for chatter.
- Dequeue pending 'up' events if a 'down' event is processed before that
event's scheduled interval.
- Reduce ScheduledNativeEvent timeout on deck and deck-uhid to 8ms
(approximately 2 frames) to reduce chatter collision probability.
- Check ScheduledNativeEvent.is_ready() for queued events before draining
them on all target devices with implemented scheduled_events() functions.1 parent 62663dd commit a42e2c7
9 files changed
Lines changed: 78 additions & 19 deletions
File tree
- src/input
- event
- target
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
| 82 | + | |
89 | 83 | | |
90 | 84 | | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
91 | 89 | | |
92 | 90 | | |
93 | 91 | | |
| |||
116 | 114 | | |
117 | 115 | | |
118 | 116 | | |
119 | | - | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
198 | 198 | | |
199 | 199 | | |
200 | 200 | | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
201 | 206 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1009 | 1009 | | |
1010 | 1010 | | |
1011 | 1011 | | |
1012 | | - | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
| 1016 | + | |
| 1017 | + | |
| 1018 | + | |
1013 | 1019 | | |
1014 | 1020 | | |
1015 | 1021 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
313 | 313 | | |
314 | 314 | | |
315 | 315 | | |
316 | | - | |
317 | | - | |
318 | | - | |
| 316 | + | |
319 | 317 | | |
320 | 318 | | |
321 | 319 | | |
| |||
372 | 370 | | |
373 | 371 | | |
374 | 372 | | |
375 | | - | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
376 | 380 | | |
377 | 381 | | |
378 | 382 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
537 | 537 | | |
538 | 538 | | |
539 | 539 | | |
| 540 | + | |
540 | 541 | | |
541 | 542 | | |
542 | 543 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
70 | 70 | | |
71 | 71 | | |
72 | 72 | | |
73 | | - | |
| 73 | + | |
74 | 74 | | |
75 | 75 | | |
76 | 76 | | |
| |||
932 | 932 | | |
933 | 933 | | |
934 | 934 | | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
| 942 | + | |
935 | 943 | | |
936 | 944 | | |
937 | 945 | | |
| |||
1009 | 1017 | | |
1010 | 1018 | | |
1011 | 1019 | | |
| 1020 | + | |
1012 | 1021 | | |
1013 | 1022 | | |
1014 | 1023 | | |
1015 | 1024 | | |
1016 | | - | |
| 1025 | + | |
| 1026 | + | |
| 1027 | + | |
| 1028 | + | |
| 1029 | + | |
| 1030 | + | |
| 1031 | + | |
1017 | 1032 | | |
1018 | 1033 | | |
1019 | 1034 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
50 | | - | |
| 50 | + | |
51 | 51 | | |
52 | 52 | | |
53 | 53 | | |
| |||
740 | 740 | | |
741 | 741 | | |
742 | 742 | | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
743 | 751 | | |
744 | 752 | | |
745 | 753 | | |
| |||
817 | 825 | | |
818 | 826 | | |
819 | 827 | | |
| 828 | + | |
820 | 829 | | |
821 | 830 | | |
822 | 831 | | |
823 | 832 | | |
824 | | - | |
| 833 | + | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
| 839 | + | |
825 | 840 | | |
826 | 841 | | |
827 | 842 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
379 | 379 | | |
380 | 380 | | |
381 | 381 | | |
| 382 | + | |
382 | 383 | | |
383 | 384 | | |
384 | 385 | | |
385 | 386 | | |
386 | | - | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
387 | 394 | | |
388 | 395 | | |
389 | 396 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
286 | 286 | | |
287 | 287 | | |
288 | 288 | | |
289 | | - | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
290 | 296 | | |
291 | 297 | | |
292 | 298 | | |
| |||
0 commit comments