summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesper Brix Rosenkilde <jbr@nordu.net>2017-09-22 13:58:49 +0200
committerJack Humbert <jack.humb@gmail.com>2017-10-10 19:20:17 +0200
commit966e2660cf8e2532b74aee64fda28203fcc5daf5 (patch)
tree9f61727adf40631199d41cd36866cc8db5ae786c
parent109b2ae0bd4cd32bde7a07e6b7f30abafbf0dfb7 (diff)
downloadqmk_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.md20
-rw-r--r--tmk_core/protocol/ps2_mouse.c12
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