aboutsummaryrefslogtreecommitdiff
path: root/tmk_core
diff options
context:
space:
mode:
authoreynsai <[email protected]>2024-10-06 05:26:55 -0400
committerGitHub <[email protected]>2024-10-06 11:26:55 +0200
commit2cb35373c6ecc4341b538cc5ad37accf3e5030e4 (patch)
treebd578fdeceb031dc54e43a8274255c58781a0db0 /tmk_core
parentbf6de46d7fd9ab185c57c1ebb9372ea980846040 (diff)
downloadqmk_firmware-2cb35373c6ecc4341b538cc5ad37accf3e5030e4.tar.gz
qmk_firmware-2cb35373c6ecc4341b538cc5ad37accf3e5030e4.zip
Extended wheel reports (#24422)
extended wheel reports
Diffstat (limited to 'tmk_core')
-rw-r--r--tmk_core/protocol/report.h10
-rw-r--r--tmk_core/protocol/usb_descriptor.c24
-rw-r--r--tmk_core/protocol/vusb/vusb.c30
3 files changed, 49 insertions, 15 deletions
diff --git a/tmk_core/protocol/report.h b/tmk_core/protocol/report.h
index 0e4f6e9def..37c8ea48f1 100644
--- a/tmk_core/protocol/report.h
+++ b/tmk_core/protocol/report.h
@@ -199,6 +199,12 @@ typedef int16_t mouse_xy_report_t;
typedef int8_t mouse_xy_report_t;
#endif
+#ifdef WHEEL_EXTENDED_REPORT
+typedef int16_t mouse_hv_report_t;
+#else
+typedef int8_t mouse_hv_report_t;
+#endif
+
typedef struct {
#ifdef MOUSE_SHARED_EP
uint8_t report_id;
@@ -210,8 +216,8 @@ typedef struct {
#endif
mouse_xy_report_t x;
mouse_xy_report_t y;
- int8_t v;
- int8_t h;
+ mouse_hv_report_t v;
+ mouse_hv_report_t h;
} PACKED report_mouse_t;
typedef struct {
diff --git a/tmk_core/protocol/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c
index 7454c9a7c4..0ac02bb19f 100644
--- a/tmk_core/protocol/usb_descriptor.c
+++ b/tmk_core/protocol/usb_descriptor.c
@@ -165,20 +165,34 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = {
# endif
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
- // Vertical wheel (1 byte)
- HID_RI_USAGE(8, 0x38), // Wheel
+ // Vertical wheel (1 or 2 bytes)
+ HID_RI_USAGE(8, 0x38), // Wheel
+# ifndef WHEEL_EXTENDED_REPORT
HID_RI_LOGICAL_MINIMUM(8, -127),
HID_RI_LOGICAL_MAXIMUM(8, 127),
HID_RI_REPORT_COUNT(8, 0x01),
HID_RI_REPORT_SIZE(8, 0x08),
+# else
+ HID_RI_LOGICAL_MINIMUM(16, -32767),
+ HID_RI_LOGICAL_MAXIMUM(16, 32767),
+ HID_RI_REPORT_COUNT(8, 0x01),
+ HID_RI_REPORT_SIZE(8, 0x10),
+# endif
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
- // Horizontal wheel (1 byte)
- HID_RI_USAGE_PAGE(8, 0x0C), // Consumer
- HID_RI_USAGE(16, 0x0238), // AC Pan
+ // Horizontal wheel (1 or 2 bytes)
+ HID_RI_USAGE_PAGE(8, 0x0C),// Consumer
+ HID_RI_USAGE(16, 0x0238), // AC Pan
+# ifndef WHEEL_EXTENDED_REPORT
HID_RI_LOGICAL_MINIMUM(8, -127),
HID_RI_LOGICAL_MAXIMUM(8, 127),
HID_RI_REPORT_COUNT(8, 0x01),
HID_RI_REPORT_SIZE(8, 0x08),
+# else
+ HID_RI_LOGICAL_MINIMUM(16, -32767),
+ HID_RI_LOGICAL_MAXIMUM(16, 32767),
+ HID_RI_REPORT_COUNT(8, 0x01),
+ HID_RI_REPORT_SIZE(8, 0x10),
+# endif
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
HID_RI_END_COLLECTION(0),
HID_RI_END_COLLECTION(0),
diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c
index c8ab494253..886ee2375e 100644
--- a/tmk_core/protocol/vusb/vusb.c
+++ b/tmk_core/protocol/vusb/vusb.c
@@ -524,23 +524,37 @@ const PROGMEM uchar shared_hid_report[] = {
# endif
0x81, 0x06, // Input (Data, Variable, Relative)
- // Vertical wheel (1 byte)
+ // Vertical wheel (1 or 2 bytes)
0x09, 0x38, // Usage (Wheel)
+# ifndef WHEEL_EXTENDED_REPORT
0x15, 0x81, // Logical Minimum (-127)
0x25, 0x7F, // Logical Maximum (127)
0x95, 0x01, // Report Count (1)
0x75, 0x08, // Report Size (8)
+# else
+ 0x16, 0x01, 0x80, // Logical Minimum (-32767)
+ 0x26, 0xFF, 0x7F, // Logical Maximum (32767)
+ 0x95, 0x01, // Report Count (1)
+ 0x75, 0x10, // Report Size (16)
+# endif
0x81, 0x06, // Input (Data, Variable, Relative)
- // Horizontal wheel (1 byte)
+ // Horizontal wheel (1 or 2 bytes)
0x05, 0x0C, // Usage Page (Consumer)
0x0A, 0x38, 0x02, // Usage (AC Pan)
- 0x15, 0x81, // Logical Minimum (-127)
- 0x25, 0x7F, // Logical Maximum (127)
+# ifndef WHEEL_EXTENDED_REPORT
+ 0x15, 0x81, // Logical Minimum (-127)
+ 0x25, 0x7F, // Logical Maximum (127)
+ 0x95, 0x01, // Report Count (1)
+ 0x75, 0x08, // Report Size (8)
+# else
+ 0x16, 0x01, 0x80, // Logical Minimum (-32767)
+ 0x26, 0xFF, 0x7F, // Logical Maximum (32767)
0x95, 0x01, // Report Count (1)
- 0x75, 0x08, // Report Size (8)
- 0x81, 0x06, // Input (Data, Variable, Relative)
- 0xC0, // End Collection
- 0xC0, // End Collection
+ 0x75, 0x10, // Report Size (16)
+# endif
+ 0x81, 0x06, // Input (Data, Variable, Relative)
+ 0xC0, // End Collection
+ 0xC0, // End Collection
#endif
#ifdef EXTRAKEY_ENABLE