aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManna Harbour <51143715+manna-harbour@users.noreply.github.com>2020-07-03 06:54:15 +1000
committerGitHub <noreply@github.com>2020-07-02 21:54:15 +0100
commitb7dc2eb9ab2bb3c6ac9ac8e975728002e0e9d62d (patch)
treec711547dbd79f0dee916a7cf2e28f64ab0820645
parent00fc35539d774c43cde383a8d2cc8b254787ce6c (diff)
downloadqmk_firmware-b7dc2eb9ab2bb3c6ac9ac8e975728002e0e9d62d.tar.gz
qmk_firmware-b7dc2eb9ab2bb3c6ac9ac8e975728002e0e9d62d.zip
Add movement hook to ps2_mouse (#8805)
Process mouse movement in the keymap before it is sent to the host. Example uses include filtering noise, adding acceleration, and automatically activating a layer. To use, define the following function in your keymap: void ps2_mouse_moved_user(report_mouse_t *mouse_report);
-rw-r--r--docs/feature_ps2_mouse.md10
-rw-r--r--tmk_core/protocol/ps2_mouse.c5
-rw-r--r--tmk_core/protocol/ps2_mouse.h3
3 files changed, 18 insertions, 0 deletions
diff --git a/docs/feature_ps2_mouse.md b/docs/feature_ps2_mouse.md
index c1bd8bff5..e54981085 100644
--- a/docs/feature_ps2_mouse.md
+++ b/docs/feature_ps2_mouse.md
@@ -294,3 +294,13 @@ To debug the mouse, add `debug_mouse = true` or enable via bootmagic.
294#define PS2_MOUSE_DEBUG_HID 294#define PS2_MOUSE_DEBUG_HID
295#define PS2_MOUSE_DEBUG_RAW 295#define PS2_MOUSE_DEBUG_RAW
296``` 296```
297
298### Movement Hook :id=movement-hook
299
300Process mouse movement in the keymap before it is sent to the host. Example
301uses include filtering noise, adding acceleration, and automatically activating
302a layer. To use, define the following function in your keymap:
303
304```c
305void ps2_mouse_moved_user(report_mouse_t *mouse_report);
306```
diff --git a/tmk_core/protocol/ps2_mouse.c b/tmk_core/protocol/ps2_mouse.c
index a0e52bc7c..8df465026 100644
--- a/tmk_core/protocol/ps2_mouse.c
+++ b/tmk_core/protocol/ps2_mouse.c
@@ -68,6 +68,8 @@ void ps2_mouse_init(void) {
68 68
69__attribute__((weak)) void ps2_mouse_init_user(void) {} 69__attribute__((weak)) void ps2_mouse_init_user(void) {}
70 70
71__attribute__((weak)) void ps2_mouse_moved_user(report_mouse_t *mouse_report) {}
72
71void ps2_mouse_task(void) { 73void ps2_mouse_task(void) {
72 static uint8_t buttons_prev = 0; 74 static uint8_t buttons_prev = 0;
73 extern int tp_buttons; 75 extern int tp_buttons;
@@ -98,6 +100,9 @@ void ps2_mouse_task(void) {
98#if PS2_MOUSE_SCROLL_BTN_MASK 100#if PS2_MOUSE_SCROLL_BTN_MASK
99 ps2_mouse_scroll_button_task(&mouse_report); 101 ps2_mouse_scroll_button_task(&mouse_report);
100#endif 102#endif
103 if (mouse_report.x || mouse_report.y || mouse_report.v) {
104 ps2_mouse_moved_user(&mouse_report);
105 }
101#ifdef PS2_MOUSE_DEBUG_HID 106#ifdef PS2_MOUSE_DEBUG_HID
102 // Used to debug the bytes sent to the host 107 // Used to debug the bytes sent to the host
103 ps2_mouse_print_report(&mouse_report); 108 ps2_mouse_print_report(&mouse_report);
diff --git a/tmk_core/protocol/ps2_mouse.h b/tmk_core/protocol/ps2_mouse.h
index 30053ef18..d743fb3d8 100644
--- a/tmk_core/protocol/ps2_mouse.h
+++ b/tmk_core/protocol/ps2_mouse.h
@@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
20 20
21#include <stdbool.h> 21#include <stdbool.h>
22#include "debug.h" 22#include "debug.h"
23#include "report.h"
23 24
24#define PS2_MOUSE_SEND(command, message) \ 25#define PS2_MOUSE_SEND(command, message) \
25 do { \ 26 do { \
@@ -174,4 +175,6 @@ void ps2_mouse_set_resolution(ps2_mouse_resolution_t resolution);
174 175
175void ps2_mouse_set_sample_rate(ps2_mouse_sample_rate_t sample_rate); 176void ps2_mouse_set_sample_rate(ps2_mouse_sample_rate_t sample_rate);
176 177
178void ps2_mouse_moved_user(report_mouse_t *mouse_report);
179
177#endif 180#endif