aboutsummaryrefslogtreecommitdiff
path: root/quantum/pointing_device
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/pointing_device')
-rw-r--r--quantum/pointing_device/pointing_device.c35
-rw-r--r--quantum/pointing_device/pointing_device.h14
2 files changed, 32 insertions, 17 deletions
diff --git a/quantum/pointing_device/pointing_device.c b/quantum/pointing_device/pointing_device.c
index cac2875fc8..5ee65c9c61 100644
--- a/quantum/pointing_device/pointing_device.c
+++ b/quantum/pointing_device/pointing_device.c
@@ -25,6 +25,10 @@
# include "mousekey.h"
#endif
+#ifdef POINTING_DEVICE_HIRES_SCROLL_ENABLE
+# include "usb_descriptor_common.h"
+#endif
+
#if (defined(POINTING_DEVICE_ROTATION_90) + defined(POINTING_DEVICE_ROTATION_180) + defined(POINTING_DEVICE_ROTATION_270)) > 1
# error More than one rotation selected. This is not supported.
#endif
@@ -78,6 +82,9 @@ uint16_t pointing_device_get_shared_cpi(void) {
static report_mouse_t local_mouse_report = {};
static bool pointing_device_force_send = false;
+#ifdef POINTING_DEVICE_HIRES_SCROLL_ENABLE
+static uint16_t hires_scroll_resolution;
+#endif
#define POINTING_DEVICE_DRIVER_CONCAT(name) name##_pointing_device_driver
#define POINTING_DEVICE_DRIVER(name) POINTING_DEVICE_DRIVER_CONCAT(name)
@@ -176,6 +183,12 @@ __attribute__((weak)) void pointing_device_init(void) {
# endif
#endif
}
+#ifdef POINTING_DEVICE_HIRES_SCROLL_ENABLE
+ hires_scroll_resolution = POINTING_DEVICE_HIRES_SCROLL_MULTIPLIER;
+ for (int i = 0; i < POINTING_DEVICE_HIRES_SCROLL_EXPONENT; i++) {
+ hires_scroll_resolution *= 10;
+ }
+#endif
pointing_device_init_kb();
pointing_device_init_user();
@@ -404,10 +417,10 @@ void pointing_device_set_cpi_on_side(bool left, uint16_t cpi) {
* @return mouse_hv_report_t clamped value
*/
static inline mouse_hv_report_t pointing_device_hv_clamp(hv_clamp_range_t value) {
- if (value < HV_REPORT_MIN) {
- return HV_REPORT_MIN;
- } else if (value > HV_REPORT_MAX) {
- return HV_REPORT_MAX;
+ if (value < MOUSE_REPORT_HV_MIN) {
+ return MOUSE_REPORT_HV_MIN;
+ } else if (value > MOUSE_REPORT_HV_MAX) {
+ return MOUSE_REPORT_HV_MAX;
} else {
return value;
}
@@ -420,10 +433,10 @@ static inline mouse_hv_report_t pointing_device_hv_clamp(hv_clamp_range_t value)
* @return mouse_xy_report_t clamped value
*/
static inline mouse_xy_report_t pointing_device_xy_clamp(xy_clamp_range_t value) {
- if (value < XY_REPORT_MIN) {
- return XY_REPORT_MIN;
- } else if (value > XY_REPORT_MAX) {
- return XY_REPORT_MAX;
+ if (value < MOUSE_REPORT_XY_MIN) {
+ return MOUSE_REPORT_XY_MIN;
+ } else if (value > MOUSE_REPORT_XY_MAX) {
+ return MOUSE_REPORT_XY_MAX;
} else {
return value;
}
@@ -523,3 +536,9 @@ __attribute__((weak)) void pointing_device_keycode_handler(uint16_t keycode, boo
pointing_device_send();
}
}
+
+#ifdef POINTING_DEVICE_HIRES_SCROLL_ENABLE
+uint16_t pointing_device_get_hires_scroll_resolution(void) {
+ return hires_scroll_resolution;
+}
+#endif \ No newline at end of file
diff --git a/quantum/pointing_device/pointing_device.h b/quantum/pointing_device/pointing_device.h
index 72188c977d..d8b583c87e 100644
--- a/quantum/pointing_device/pointing_device.h
+++ b/quantum/pointing_device/pointing_device.h
@@ -92,27 +92,19 @@ typedef enum {
} pointing_device_buttons_t;
#ifdef MOUSE_EXTENDED_REPORT
-# define XY_REPORT_MIN INT16_MIN
-# define XY_REPORT_MAX INT16_MAX
typedef int32_t xy_clamp_range_t;
#else
-# define XY_REPORT_MIN INT8_MIN
-# define XY_REPORT_MAX INT8_MAX
typedef int16_t xy_clamp_range_t;
#endif
#ifdef WHEEL_EXTENDED_REPORT
-# define HV_REPORT_MIN INT16_MIN
-# define HV_REPORT_MAX INT16_MAX
typedef int32_t hv_clamp_range_t;
#else
-# define HV_REPORT_MIN INT8_MIN
-# define HV_REPORT_MAX INT8_MAX
typedef int16_t hv_clamp_range_t;
#endif
#define CONSTRAIN_HID(amt) ((amt) < INT8_MIN ? INT8_MIN : ((amt) > INT8_MAX ? INT8_MAX : (amt)))
-#define CONSTRAIN_HID_XY(amt) ((amt) < XY_REPORT_MIN ? XY_REPORT_MIN : ((amt) > XY_REPORT_MAX ? XY_REPORT_MAX : (amt)))
+#define CONSTRAIN_HID_XY(amt) ((amt) < MOUSE_REPORT_XY_MIN ? MOUSE_REPORT_XY_MIN : ((amt) > MOUSE_REPORT_XY_MAX ? MOUSE_REPORT_XY_MAX : (amt)))
void pointing_device_init(void);
bool pointing_device_task(void);
@@ -130,6 +122,10 @@ uint8_t pointing_device_handle_buttons(uint8_t buttons, bool pressed, poi
report_mouse_t pointing_device_adjust_by_defines(report_mouse_t mouse_report);
void pointing_device_keycode_handler(uint16_t keycode, bool pressed);
+#ifdef POINTING_DEVICE_HIRES_SCROLL_ENABLE
+uint16_t pointing_device_get_hires_scroll_resolution(void);
+#endif
+
#if defined(SPLIT_POINTING_ENABLE)
void pointing_device_set_shared_report(report_mouse_t report);
uint16_t pointing_device_get_shared_cpi(void);