From 9b77bf929541fa94f56564f63c486e989c044239 Mon Sep 17 00:00:00 2001 From: Ethan Halsall Date: Tue, 8 Jun 2021 22:01:51 -0500 Subject: [PATCH] lufa: Update mouse descriptor for 16 bit #692 Squashed commit from: https://github.com/tmk/tmk_keyboard/pull/692 --- tmk_core/common/report.h | 10 ++++++ tmk_core/protocol/lufa/descriptor.c | 47 +++++++++++++++++++++++------ 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/tmk_core/common/report.h b/tmk_core/common/report.h index fde57776..298591a4 100644 --- a/tmk_core/common/report.h +++ b/tmk_core/common/report.h @@ -157,6 +157,15 @@ typedef struct { } __attribute__ ((packed)) report_keyboard_t; */ +#ifdef ENABLE_16_BIT_MOUSE_REPORT +typedef struct { + uint8_t buttons; + int16_t x; + int16_t y; + int16_t v; + int16_t h; +} __attribute__ ((packed)) report_mouse_t; +#else typedef struct { uint8_t buttons; int8_t x; @@ -164,6 +173,7 @@ typedef struct { int8_t v; int8_t h; } __attribute__ ((packed)) report_mouse_t; +#endif /* keycode to system usage */ diff --git a/tmk_core/protocol/lufa/descriptor.c b/tmk_core/protocol/lufa/descriptor.c index 141226ad..131ed1d7 100644 --- a/tmk_core/protocol/lufa/descriptor.c +++ b/tmk_core/protocol/lufa/descriptor.c @@ -84,6 +84,35 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] = }; #ifdef MOUSE_ENABLE + +#ifdef ENABLE_16_BIT_MOUSE_REPORT + #define REPORT_SIZE 16 + + #ifndef MOUSE_PRECISION + #define MOUSE_PRECISION 16 + #endif + + #ifndef MOUSE_WHEEL_PRECISION + #define MOUSE_WHEEL_PRECISION 16 + #endif +#else + #define REPORT_SIZE 8 + + #ifndef MOUSE_PRECISION + #define MOUSE_PRECISION 8 + #endif + + #ifndef MOUSE_WHEEL_PRECISION + #define MOUSE_WHEEL_PRECISION 8 + #endif +#endif + +#define HID_MOUSE_REPORT_SIZE HID_RI_REPORT_SIZE(8, REPORT_SIZE) +#define HID_MOUSE_LOGICAL_MINIMUM HID_RI_LOGICAL_MINIMUM(REPORT_SIZE, (-1 << (MOUSE_PRECISION - 1)) + 1) +#define HID_MOUSE_LOGICAL_MAXIMUM HID_RI_LOGICAL_MAXIMUM(REPORT_SIZE, (1 << (MOUSE_PRECISION - 1)) - 1) +#define HID_MOUSE_WHEEL_LOGICAL_MINIMUM HID_RI_LOGICAL_MINIMUM(REPORT_SIZE, (-1 << (MOUSE_WHEEL_PRECISION - 1)) + 1) +#define HID_MOUSE_WHEEL_LOGICAL_MAXIMUM HID_RI_LOGICAL_MAXIMUM(REPORT_SIZE, (1 << (MOUSE_WHEEL_PRECISION - 1)) - 1) + const USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] = { HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ @@ -107,25 +136,25 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] = HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ HID_RI_USAGE(8, 0x30), /* Usage X */ HID_RI_USAGE(8, 0x31), /* Usage Y */ - HID_RI_LOGICAL_MINIMUM(8, -127), - HID_RI_LOGICAL_MAXIMUM(8, 127), + HID_MOUSE_LOGICAL_MINIMUM, + HID_MOUSE_LOGICAL_MAXIMUM, HID_RI_REPORT_COUNT(8, 0x02), - HID_RI_REPORT_SIZE(8, 0x08), + HID_MOUSE_REPORT_SIZE, HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), HID_RI_USAGE(8, 0x38), /* Wheel */ - HID_RI_LOGICAL_MINIMUM(8, -127), - HID_RI_LOGICAL_MAXIMUM(8, 127), + HID_MOUSE_WHEEL_LOGICAL_MINIMUM, + HID_MOUSE_WHEEL_LOGICAL_MAXIMUM, HID_RI_REPORT_COUNT(8, 0x01), - HID_RI_REPORT_SIZE(8, 0x08), + HID_MOUSE_REPORT_SIZE, HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), HID_RI_USAGE_PAGE(8, 0x0C), /* Consumer */ HID_RI_USAGE(16, 0x0238), /* AC Pan (Horizontal wheel) */ - HID_RI_LOGICAL_MINIMUM(8, -127), - HID_RI_LOGICAL_MAXIMUM(8, 127), + HID_MOUSE_WHEEL_LOGICAL_MINIMUM, + HID_MOUSE_WHEEL_LOGICAL_MAXIMUM, HID_RI_REPORT_COUNT(8, 0x01), - HID_RI_REPORT_SIZE(8, 0x08), + HID_MOUSE_REPORT_SIZE, HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), HID_RI_END_COLLECTION(0),