浏览代码

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);
Manna Harbour 5 年之前
父节点
当前提交
b7dc2eb9ab
共有 3 个文件被更改,包括 18 次插入0 次删除
  1. 10 0
      docs/feature_ps2_mouse.md
  2. 5 0
      tmk_core/protocol/ps2_mouse.c
  3. 3 0
      tmk_core/protocol/ps2_mouse.h

+ 10 - 0
docs/feature_ps2_mouse.md

@@ -294,3 +294,13 @@ To debug the mouse, add `debug_mouse = true` or enable via bootmagic.
 #define PS2_MOUSE_DEBUG_HID
 #define PS2_MOUSE_DEBUG_RAW
 ```
+
+### Movement Hook :id=movement-hook
+
+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:
+
+```c
+void ps2_mouse_moved_user(report_mouse_t *mouse_report);
+```

+ 5 - 0
tmk_core/protocol/ps2_mouse.c

@@ -68,6 +68,8 @@ void ps2_mouse_init(void) {
 
 __attribute__((weak)) void ps2_mouse_init_user(void) {}
 
+__attribute__((weak)) void ps2_mouse_moved_user(report_mouse_t *mouse_report) {}
+
 void ps2_mouse_task(void) {
     static uint8_t buttons_prev = 0;
     extern int     tp_buttons;
@@ -98,6 +100,9 @@ void ps2_mouse_task(void) {
 #if PS2_MOUSE_SCROLL_BTN_MASK
         ps2_mouse_scroll_button_task(&mouse_report);
 #endif
+        if (mouse_report.x || mouse_report.y || mouse_report.v) {
+            ps2_mouse_moved_user(&mouse_report);
+        }
 #ifdef PS2_MOUSE_DEBUG_HID
         // Used to debug the bytes sent to the host
         ps2_mouse_print_report(&mouse_report);

+ 3 - 0
tmk_core/protocol/ps2_mouse.h

@@ -20,6 +20,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdbool.h>
 #include "debug.h"
+#include "report.h"
 
 #define PS2_MOUSE_SEND(command, message)                                                \
     do {                                                                                \
@@ -174,4 +175,6 @@ void ps2_mouse_set_resolution(ps2_mouse_resolution_t resolution);
 
 void ps2_mouse_set_sample_rate(ps2_mouse_sample_rate_t sample_rate);
 
+void ps2_mouse_moved_user(report_mouse_t *mouse_report);
+
 #endif