From 780ca5565d2bdb8e03aa2669a3203373a0a4d9dd Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Wed, 3 Feb 2021 17:25:05 -0800 Subject: Improve Pointing Device report sending (#11064) * Improve Pointing Device report sending * Hide old report behind preprocessors too * put host_mouse_send() in curly brackets * Remove POINTING_DEVICE_ALWAYS_SEND_REPORT functionality * Fix typo * fix function ref in docs Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> --- quantum/pointing_device.c | 16 +++++++++++++++- quantum/pointing_device.h | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'quantum') diff --git a/quantum/pointing_device.c b/quantum/pointing_device.c index 9b7629f307..fbcc08e6dd 100644 --- a/quantum/pointing_device.c +++ b/quantum/pointing_device.c @@ -25,18 +25,32 @@ along with this program. If not, see . static report_mouse_t mouseReport = {}; +__attribute__((weak)) bool has_mouse_report_changed(report_mouse_t new, report_mouse_t old) { + return (new.buttons != old.buttons) || + (new.x && new.x != old.x) || + (new.y && new.y != old.y) || + (new.h && new.h != old.h) || + (new.v && new.v != old.v); +} + + __attribute__((weak)) void pointing_device_init(void) { // initialize device, if that needs to be done. } __attribute__((weak)) void pointing_device_send(void) { + static report_mouse_t old_report = {}; + // If you need to do other things, like debugging, this is the place to do it. - host_mouse_send(&mouseReport); + if (has_mouse_report_changed(mouseReport, old_report)) { + host_mouse_send(&mouseReport); + } // send it and 0 it out except for buttons, so those stay until they are explicity over-ridden using update_pointing_device mouseReport.x = 0; mouseReport.y = 0; mouseReport.v = 0; mouseReport.h = 0; + old_report = mouseReport; } __attribute__((weak)) void pointing_device_task(void) { diff --git a/quantum/pointing_device.h b/quantum/pointing_device.h index aa074bb37d..56a542d545 100644 --- a/quantum/pointing_device.h +++ b/quantum/pointing_device.h @@ -26,3 +26,4 @@ void pointing_device_task(void); void pointing_device_send(void); report_mouse_t pointing_device_get_report(void); void pointing_device_set_report(report_mouse_t newMouseReport); +bool has_mouse_report_changed(report_mouse_t new, report_mouse_t old); -- cgit v1.2.1