1
0
Fork 0
forked from forks/qmk_firmware

Merge remote-tracking branch 'origin/master' into develop

This commit is contained in:
QMK Bot 2021-02-04 01:25:39 +00:00
commit 711388d3e3
3 changed files with 20 additions and 1 deletions

View file

@ -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. 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: 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 ```c

View file

@ -25,18 +25,32 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
static report_mouse_t mouseReport = {}; 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) { __attribute__((weak)) void pointing_device_init(void) {
// initialize device, if that needs to be done. // initialize device, if that needs to be done.
} }
__attribute__((weak)) void pointing_device_send(void) { __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 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 // 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.x = 0;
mouseReport.y = 0; mouseReport.y = 0;
mouseReport.v = 0; mouseReport.v = 0;
mouseReport.h = 0; mouseReport.h = 0;
old_report = mouseReport;
} }
__attribute__((weak)) void pointing_device_task(void) { __attribute__((weak)) void pointing_device_task(void) {

View file

@ -26,3 +26,4 @@ void pointing_device_task(void);
void pointing_device_send(void); void pointing_device_send(void);
report_mouse_t pointing_device_get_report(void); report_mouse_t pointing_device_get_report(void);
void pointing_device_set_report(report_mouse_t newMouseReport); void pointing_device_set_report(report_mouse_t newMouseReport);
bool has_mouse_report_changed(report_mouse_t new, report_mouse_t old);