From 060eff690fdaba18e44dc0908fefd993bf3515c2 Mon Sep 17 00:00:00 2001 From: Drashna Jael're Date: Wed, 2 Mar 2022 11:32:13 -0800 Subject: [PATCH 1/3] Move 'has_mouse_report_changed' checkto report.c --- quantum/mousekey.c | 12 ++++++++---- quantum/pointing_device.c | 13 +------------ quantum/pointing_device.h | 1 - tmk_core/protocol/report.c | 13 +++++++++++++ tmk_core/protocol/report.h | 4 ++++ 5 files changed, 26 insertions(+), 17 deletions(-) diff --git a/quantum/mousekey.c b/quantum/mousekey.c index 8bafbf977a7f..00b43fac4fbb 100644 --- a/quantum/mousekey.c +++ b/quantum/mousekey.c @@ -209,7 +209,7 @@ static uint8_t wheel_unit(void) { void mousekey_task(void) { // report cursor and scroll movement independently - report_mouse_t const tmpmr = mouse_report; + report_mouse_t tmpmr = mouse_report; mouse_report.x = 0; mouse_report.y = 0; @@ -251,7 +251,9 @@ void mousekey_task(void) { } } - if (mouse_report.x || mouse_report.y || mouse_report.v || mouse_report.h) mousekey_send(); + if (has_mouse_report_changed(&mouse_report, &tmpmr)) { + mousekey_send(); + } mouse_report = tmpmr; } @@ -340,7 +342,7 @@ uint16_t w_intervals[mkspd_COUNT] = {MK_W_INTERVAL_UNMOD, MK_W_INTERVAL_0 void mousekey_task(void) { // report cursor and scroll movement independently - report_mouse_t const tmpmr = mouse_report; + report_mouse_t tmpmr = mouse_report; mouse_report.x = 0; mouse_report.y = 0; mouse_report.v = 0; @@ -355,7 +357,9 @@ void mousekey_task(void) { mouse_report.h = tmpmr.h; } - if (mouse_report.x || mouse_report.y || mouse_report.v || mouse_report.h) mousekey_send(); + if (has_mouse_report_changed(&mouse_report, &tmpmr)) { + mousekey_send(); + } mouse_report = tmpmr; } diff --git a/quantum/pointing_device.c b/quantum/pointing_device.c index 47a0af45d2a1..a160647890d8 100644 --- a/quantum/pointing_device.c +++ b/quantum/pointing_device.c @@ -70,17 +70,6 @@ static report_mouse_t local_mouse_report = {}; extern const pointing_device_driver_t pointing_device_driver; -/** - * @brief Compares 2 mouse reports for difference and returns result - * - * @param[in] new_report report_mouse_t - * @param[in] old_report report_mouse_t - * @return bool result - */ -__attribute__((weak)) bool has_mouse_report_changed(report_mouse_t new_report, report_mouse_t old_report) { - return memcmp(&new_report, &old_report, sizeof(new_report)); -} - /** * @brief Keyboard level code pointing device initialisation * @@ -165,7 +154,7 @@ __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. - if (has_mouse_report_changed(local_mouse_report, old_report)) { + if (has_mouse_report_changed(&local_mouse_report, &old_report)) { host_mouse_send(&local_mouse_report); } // send it and 0 it out except for buttons, so those stay until they are explicity over-ridden using update_pointing_device diff --git a/quantum/pointing_device.h b/quantum/pointing_device.h index a6bdbf120c6a..5c0eaeaf3484 100644 --- a/quantum/pointing_device.h +++ b/quantum/pointing_device.h @@ -80,7 +80,6 @@ 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 mouse_report); -bool has_mouse_report_changed(report_mouse_t new_report, report_mouse_t old_report); uint16_t pointing_device_get_cpi(void); void pointing_device_set_cpi(uint16_t cpi); diff --git a/tmk_core/protocol/report.c b/tmk_core/protocol/report.c index 854b59ae4817..e581e48fac96 100644 --- a/tmk_core/protocol/report.c +++ b/tmk_core/protocol/report.c @@ -278,3 +278,16 @@ void clear_keys_from_report(report_keyboard_t* keyboard_report) { #endif memset(keyboard_report->keys, 0, sizeof(keyboard_report->keys)); } + +#ifdef MOUSE_ENABLE +/** + * @brief Compares 2 mouse reports for difference and returns result + * + * @param[in] new_report report_mouse_t + * @param[in] old_report report_mouse_t + * @return bool result + */ +__attribute__((weak)) bool has_mouse_report_changed(report_mouse_t *new_report, report_mouse_t *old_report) { + return memcmp(new_report, old_report, sizeof(report_mouse_t)); +} +#endif diff --git a/tmk_core/protocol/report.h b/tmk_core/protocol/report.h index 1adc892f3b76..7bbeb78af797 100644 --- a/tmk_core/protocol/report.h +++ b/tmk_core/protocol/report.h @@ -320,6 +320,10 @@ void add_key_to_report(report_keyboard_t* keyboard_report, uint8_t key); void del_key_from_report(report_keyboard_t* keyboard_report, uint8_t key); void clear_keys_from_report(report_keyboard_t* keyboard_report); +#ifdef MOUSE_ENABLE +bool has_mouse_report_changed(report_mouse_t* new_report, report_mouse_t* old_report); +#endif + #ifdef __cplusplus } #endif From 2276ee06808d5a79736634ed2510ddc032fb1793 Mon Sep 17 00:00:00 2001 From: Drashna Jael're Date: Wed, 2 Mar 2022 11:56:59 -0800 Subject: [PATCH 2/3] change mousekeys to use memcpy --- quantum/mousekey.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quantum/mousekey.c b/quantum/mousekey.c index 00b43fac4fbb..9f94e6d7c555 100644 --- a/quantum/mousekey.c +++ b/quantum/mousekey.c @@ -254,7 +254,7 @@ void mousekey_task(void) { if (has_mouse_report_changed(&mouse_report, &tmpmr)) { mousekey_send(); } - mouse_report = tmpmr; + memcpy(&mouse_report, &tmpmr, sizeof(tmpmr)); } void mousekey_on(uint8_t code) { @@ -360,7 +360,7 @@ void mousekey_task(void) { if (has_mouse_report_changed(&mouse_report, &tmpmr)) { mousekey_send(); } - mouse_report = tmpmr; + memcpy(&mouse_report, &tmpmr, sizeof(tmpmr)); } void adjust_speed(void) { From 549c8f65b5b62c0e2b28e59e19a490f3c3f3d67f Mon Sep 17 00:00:00 2001 From: Drashna Jael're Date: Sat, 5 Mar 2022 17:33:32 -0800 Subject: [PATCH 3/3] fix linting issues --- quantum/mousekey.c | 8 ++++---- tmk_core/protocol/report.c | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/quantum/mousekey.c b/quantum/mousekey.c index 9f94e6d7c555..0cbb472045b7 100644 --- a/quantum/mousekey.c +++ b/quantum/mousekey.c @@ -343,10 +343,10 @@ uint16_t w_intervals[mkspd_COUNT] = {MK_W_INTERVAL_UNMOD, MK_W_INTERVAL_0 void mousekey_task(void) { // report cursor and scroll movement independently report_mouse_t tmpmr = mouse_report; - mouse_report.x = 0; - mouse_report.y = 0; - mouse_report.v = 0; - mouse_report.h = 0; + mouse_report.x = 0; + mouse_report.y = 0; + mouse_report.v = 0; + mouse_report.h = 0; if ((tmpmr.x || tmpmr.y) && timer_elapsed(last_timer_c) > c_intervals[mk_speed]) { mouse_report.x = tmpmr.x; diff --git a/tmk_core/protocol/report.c b/tmk_core/protocol/report.c index e581e48fac96..5755098c60f1 100644 --- a/tmk_core/protocol/report.c +++ b/tmk_core/protocol/report.c @@ -287,7 +287,7 @@ void clear_keys_from_report(report_keyboard_t* keyboard_report) { * @param[in] old_report report_mouse_t * @return bool result */ -__attribute__((weak)) bool has_mouse_report_changed(report_mouse_t *new_report, report_mouse_t *old_report) { +__attribute__((weak)) bool has_mouse_report_changed(report_mouse_t* new_report, report_mouse_t* old_report) { return memcmp(new_report, old_report, sizeof(report_mouse_t)); } #endif