aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQMK Bot <hello@qmk.fm>2021-02-04 01:25:39 +0000
committerQMK Bot <hello@qmk.fm>2021-02-04 01:25:39 +0000
commit711388d3e380dd2bb4c8e3e060fa7a599722b83c (patch)
treeecf8b282ad40307676ec485f3b205cafdf663e1f
parent1861ace7d2d27ead04ee242cabd286e64c6d5f19 (diff)
parent780ca5565d2bdb8e03aa2669a3203373a0a4d9dd (diff)
downloadqmk_firmware-711388d3e380dd2bb4c8e3e060fa7a599722b83c.tar.gz
qmk_firmware-711388d3e380dd2bb4c8e3e060fa7a599722b83c.zip
Merge remote-tracking branch 'origin/master' into develop
-rw-r--r--docs/feature_pointing_device.md4
-rw-r--r--quantum/pointing_device.c16
-rw-r--r--quantum/pointing_device.h1
3 files changed, 20 insertions, 1 deletions
diff --git a/docs/feature_pointing_device.md b/docs/feature_pointing_device.md
index c6d3560f3..905c2a8f9 100644
--- a/docs/feature_pointing_device.md
+++ b/docs/feature_pointing_device.md
@@ -27,6 +27,10 @@ Once you have made the necessary changes to the mouse report, you need to send i
27 27
28When the mouse report is sent, the x, y, v, and h values are set to 0 (this is done in `pointing_device_send()`, which can be overridden to avoid this behavior). This way, button states persist, but movement will only occur once. For further customization, both `pointing_device_init` and `pointing_device_task` can be overridden. 28When the mouse report is sent, the x, y, v, and h values are set to 0 (this is done in `pointing_device_send()`, which can be overridden to avoid this behavior). This way, button states persist, but movement will only occur once. For further customization, both `pointing_device_init` and `pointing_device_task` can be overridden.
29 29
30Additionally, by default, `pointing_device_send()` will only send a report when the report has actually changed. This prevents it from continuously sending mouse reports, which will keep the host system awake. This behavior can be changed by creating your own `pointing_device_send()` function.
31
32Also, you use the `has_mouse_report_changed(new, old)` function to check to see if the report has changed.
33
30In the following example, a custom key is used to click the mouse and scroll 127 units vertically and horizontally, then undo all of that when released - because that's a totally useful function. Listen, this is an example: 34In the following example, a custom key is used to click the mouse and scroll 127 units vertically and horizontally, then undo all of that when released - because that's a totally useful function. Listen, this is an example:
31 35
32```c 36```c
diff --git a/quantum/pointing_device.c b/quantum/pointing_device.c
index 9b7629f30..fbcc08e6d 100644
--- a/quantum/pointing_device.c
+++ b/quantum/pointing_device.c
@@ -25,18 +25,32 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
25 25
26static report_mouse_t mouseReport = {}; 26static report_mouse_t mouseReport = {};
27 27
28__attribute__((weak)) bool has_mouse_report_changed(report_mouse_t new, report_mouse_t old) {
29 return (new.buttons != old.buttons) ||
30 (new.x && new.x != old.x) ||
31 (new.y && new.y != old.y) ||
32 (new.h && new.h != old.h) ||
33 (new.v && new.v != old.v);
34}
35
36
28__attribute__((weak)) void pointing_device_init(void) { 37__attribute__((weak)) void pointing_device_init(void) {
29 // initialize device, if that needs to be done. 38 // initialize device, if that needs to be done.
30} 39}
31 40
32__attribute__((weak)) void pointing_device_send(void) { 41__attribute__((weak)) void pointing_device_send(void) {
42 static report_mouse_t old_report = {};
43
33 // If you need to do other things, like debugging, this is the place to do it. 44 // If you need to do other things, like debugging, this is the place to do it.
34 host_mouse_send(&mouseReport); 45 if (has_mouse_report_changed(mouseReport, old_report)) {
46 host_mouse_send(&mouseReport);
47 }
35 // send it and 0 it out except for buttons, so those stay until they are explicity over-ridden using update_pointing_device 48 // send it and 0 it out except for buttons, so those stay until they are explicity over-ridden using update_pointing_device
36 mouseReport.x = 0; 49 mouseReport.x = 0;
37 mouseReport.y = 0; 50 mouseReport.y = 0;
38 mouseReport.v = 0; 51 mouseReport.v = 0;
39 mouseReport.h = 0; 52 mouseReport.h = 0;
53 old_report = mouseReport;
40} 54}
41 55
42__attribute__((weak)) void pointing_device_task(void) { 56__attribute__((weak)) void pointing_device_task(void) {
diff --git a/quantum/pointing_device.h b/quantum/pointing_device.h
index aa074bb37..56a542d54 100644
--- a/quantum/pointing_device.h
+++ b/quantum/pointing_device.h
@@ -26,3 +26,4 @@ void pointing_device_task(void);
26void pointing_device_send(void); 26void pointing_device_send(void);
27report_mouse_t pointing_device_get_report(void); 27report_mouse_t pointing_device_get_report(void);
28void pointing_device_set_report(report_mouse_t newMouseReport); 28void pointing_device_set_report(report_mouse_t newMouseReport);
29bool has_mouse_report_changed(report_mouse_t new, report_mouse_t old);