Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
qmk-bot committed Feb 4, 2021
2 parents 1861ace + 780ca55 commit 711388d
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
4 changes: 4 additions & 0 deletions docs/feature_pointing_device.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ Once you have made the necessary changes to the mouse report, you need to send i

When 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.

Additionally, 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.

Also, you use the `has_mouse_report_changed(new, old)` function to check to see if the report has changed.

In 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:

```c
Expand Down
16 changes: 15 additions & 1 deletion quantum/pointing_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,32 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.

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) {
Expand Down
1 change: 1 addition & 0 deletions quantum/pointing_device.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

0 comments on commit 711388d

Please sign in to comment.