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);
This commit is contained in:
Manna Harbour 2020-07-03 06:54:15 +10:00 committed by GitHub
parent 00fc35539d
commit b7dc2eb9ab
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 0 deletions

View file

@ -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);
```

View file

@ -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);

View file

@ -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