diff options
author | Jesper Brix Rosenkilde <jbr@nordu.net> | 2017-09-22 13:58:49 +0200 |
---|---|---|
committer | Jack Humbert <jack.humb@gmail.com> | 2017-10-10 19:20:17 +0200 |
commit | 966e2660cf8e2532b74aee64fda28203fcc5daf5 (patch) | |
tree | 9f61727adf40631199d41cd36866cc8db5ae786c | |
parent | 109b2ae0bd4cd32bde7a07e6b7f30abafbf0dfb7 (diff) | |
download | qmk_firmware-966e2660cf8e2532b74aee64fda28203fcc5daf5.tar.gz qmk_firmware-966e2660cf8e2532b74aee64fda28203fcc5daf5.tar.xz |
Add option to reverse PS2 mouse axes and scrolling
-rw-r--r-- | docs/feature_ps2_mouse.md | 20 | ||||
-rw-r--r-- | tmk_core/protocol/ps2_mouse.c | 12 |
2 files changed, 32 insertions, 0 deletions
diff --git a/docs/feature_ps2_mouse.md b/docs/feature_ps2_mouse.md index 8629b28cf..dac3a5b36 100644 --- a/docs/feature_ps2_mouse.md +++ b/docs/feature_ps2_mouse.md @@ -227,6 +227,26 @@ Fine control over the scrolling is supported with the following defines: #define PS2_MOUSE_SCROLL_DIVISOR_V 2 ``` +#### Invert mouse and scroll axes + +To invert the X and Y axes you can put: + +``` +#define PS2_MOUSE_INVERT_X +#define PS2_MOUSE_INVERT_Y +``` + +into config.h. + +To reverse the scroll axes you can put: + +``` +#define PS2_MOUSE_INVERT_H +#define PS2_MOUSE_INVERT_V +``` + +into config.h. + #### Debug settings To debug the mouse, add `debug_mouse = true` or enable via bootmagic. diff --git a/tmk_core/protocol/ps2_mouse.c b/tmk_core/protocol/ps2_mouse.c index 4ed3cae1f..cf1055eb8 100644 --- a/tmk_core/protocol/ps2_mouse.c +++ b/tmk_core/protocol/ps2_mouse.c @@ -169,8 +169,14 @@ static inline void ps2_mouse_convert_report_to_hid(report_mouse_t *mouse_report) // remove sign and overflow flags mouse_report->buttons &= PS2_MOUSE_BTN_MASK; +#ifdef PS2_MOUSE_INVERT_X + mouse_report->x = -mouse_report->x; +#endif +#ifndef PS2_MOUSE_INVERT_Y // NOTE if not! // invert coordinate of y to conform to USB HID mouse mouse_report->y = -mouse_report->y; +#endif + } static inline void ps2_mouse_clear_report(report_mouse_t *mouse_report) { @@ -227,6 +233,12 @@ static inline void ps2_mouse_scroll_button_task(report_mouse_t *mouse_report) { mouse_report->h = mouse_report->x/(PS2_MOUSE_SCROLL_DIVISOR_H); mouse_report->x = 0; mouse_report->y = 0; +#ifdef PS2_MOUSE_INVERT_H + mouse_report->h = -mouse_report->h; +#endif +#ifdef PS2_MOUSE_INVERT_V + mouse_report->v = -mouse_report->v; +#endif } } else if (0 == (PS2_MOUSE_SCROLL_BTN_MASK & mouse_report->buttons)) { // None of the scroll buttons are pressed |