Skip to content

Commit fca5def

Browse files
authored
Merge pull request #175 from eltariel/main
Unbreak relative mouse mode by adding pan to descriptor
2 parents 28c3f1c + 19de554 commit fca5def

File tree

2 files changed

+65
-103
lines changed

2 files changed

+65
-103
lines changed

src/include/usb_descriptors.h

Lines changed: 63 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -55,64 +55,70 @@
5555
.iSerialNumber = 0x03,\
5656
.bNumConfigurations = 0x01}\
5757

58+
/* Common mouse descriptor. Use HID_RELATIVE or HID_ABSOLUTE for ABS_OR_REL. */
59+
#define TUD_HID_REPORT_DESC_MOUSE_COMMON(ABS_OR_REL, MOUSE_MIN, ...)\
60+
HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
61+
HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ) ,\
62+
HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\
63+
/* Report ID if any */\
64+
__VA_ARGS__ \
65+
HID_USAGE ( HID_USAGE_DESKTOP_POINTER ) ,\
66+
HID_COLLECTION ( HID_COLLECTION_PHYSICAL ) ,\
67+
HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ) ,\
68+
HID_USAGE_MIN ( 1 ) ,\
69+
HID_USAGE_MAX ( 5 ) ,\
70+
HID_LOGICAL_MIN ( 0 ) ,\
71+
HID_LOGICAL_MAX ( 1 ) ,\
72+
\
73+
/* Left, Right, Middle, Backward, Forward buttons */ \
74+
HID_REPORT_COUNT( 5 ) ,\
75+
HID_REPORT_SIZE ( 1 ) ,\
76+
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\
77+
\
78+
/* 3 bit padding */ \
79+
HID_REPORT_COUNT( 1 ) ,\
80+
HID_REPORT_SIZE ( 3 ) ,\
81+
HID_INPUT ( HID_CONSTANT ) ,\
82+
HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
83+
\
84+
/* X, Y position [MOUSE_MIN, 32767] */ \
85+
HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\
86+
HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\
87+
MOUSE_MIN ,\
88+
HID_LOGICAL_MAX_N( 0x7FFF, 2 ) ,\
89+
HID_REPORT_SIZE ( 16 ) ,\
90+
HID_REPORT_COUNT ( 2 ) ,\
91+
HID_INPUT ( HID_DATA | HID_VARIABLE | ABS_OR_REL ) ,\
92+
\
93+
/* Vertical wheel scroll [-127, 127] */ \
94+
HID_USAGE ( HID_USAGE_DESKTOP_WHEEL ) ,\
95+
HID_LOGICAL_MIN ( 0x81 ) ,\
96+
HID_LOGICAL_MAX ( 0x7f ) ,\
97+
HID_REPORT_COUNT( 1 ) ,\
98+
HID_REPORT_SIZE ( 8 ) ,\
99+
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\
100+
\
101+
/* Horizontal wheel (AC Pan) */ \
102+
HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ) ,\
103+
HID_LOGICAL_MIN ( 0x81 ) ,\
104+
HID_LOGICAL_MAX ( 0x7f ) ,\
105+
HID_REPORT_COUNT( 1 ) ,\
106+
HID_REPORT_SIZE ( 8 ) ,\
107+
HID_USAGE_N ( HID_USAGE_CONSUMER_AC_PAN, 2 ) ,\
108+
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\
109+
\
110+
/* Mouse mode (0 = absolute, 1 = relative) */ \
111+
HID_REPORT_COUNT( 1 ), \
112+
HID_REPORT_SIZE ( 8 ), \
113+
HID_INPUT ( HID_CONSTANT ), \
114+
HID_COLLECTION_END , \
115+
HID_COLLECTION_END \
58116

59-
#define TUD_HID_REPORT_DESC_ABS_MOUSE(...) \
60-
HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
61-
HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ) ,\
62-
HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\
63-
/* Report ID */\
64-
__VA_ARGS__ \
65-
HID_USAGE ( HID_USAGE_DESKTOP_POINTER ) ,\
66-
HID_COLLECTION ( HID_COLLECTION_PHYSICAL ) ,\
67-
HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ) ,\
68-
HID_USAGE_MIN ( 1 ) ,\
69-
HID_USAGE_MAX ( 5 ) ,\
70-
HID_LOGICAL_MIN ( 0 ) ,\
71-
HID_LOGICAL_MAX ( 1 ) ,\
72-
\
73-
/* Left, Right, Middle, Backward, Forward buttons */ \
74-
HID_REPORT_COUNT( 5 ) ,\
75-
HID_REPORT_SIZE ( 1 ) ,\
76-
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\
77-
\
78-
/* 3 bit padding */ \
79-
HID_REPORT_COUNT( 1 ) ,\
80-
HID_REPORT_SIZE ( 3 ) ,\
81-
HID_INPUT ( HID_CONSTANT ) ,\
82-
HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
83-
\
84-
/* X, Y absolute position [0, 32767] */ \
85-
HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\
86-
HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\
87-
HID_LOGICAL_MIN ( 0x00 ) ,\
88-
HID_LOGICAL_MAX_N( 0x7FFF, 2 ) ,\
89-
HID_REPORT_SIZE ( 16 ) ,\
90-
HID_REPORT_COUNT ( 2 ) ,\
91-
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\
92-
\
93-
/* Vertical wheel scroll [-127, 127] */ \
94-
HID_USAGE ( HID_USAGE_DESKTOP_WHEEL ) ,\
95-
HID_LOGICAL_MIN ( 0x81 ) ,\
96-
HID_LOGICAL_MAX ( 0x7f ) ,\
97-
HID_REPORT_COUNT( 1 ) ,\
98-
HID_REPORT_SIZE ( 8 ) ,\
99-
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\
100-
\
101-
/* Horizontal wheel (AC Pan) */ \
102-
HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ) ,\
103-
HID_LOGICAL_MIN ( 0x81 ) ,\
104-
HID_LOGICAL_MAX ( 0x7f ) ,\
105-
HID_REPORT_COUNT( 1 ) ,\
106-
HID_REPORT_SIZE ( 8 ) ,\
107-
HID_USAGE_N ( HID_USAGE_CONSUMER_AC_PAN, 2 ) ,\
108-
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\
109-
\
110-
/* Mouse mode (0 = absolute, 1 = relative) */ \
111-
HID_REPORT_COUNT( 1 ), \
112-
HID_REPORT_SIZE ( 8 ), \
113-
HID_INPUT ( HID_CONSTANT ), \
114-
HID_COLLECTION_END , \
115-
HID_COLLECTION_END \
117+
/* Absolute mouse, range=[0..32767] */
118+
#define TUD_HID_REPORT_DESC_ABS_MOUSE(...) TUD_HID_REPORT_DESC_MOUSE_COMMON(HID_ABSOLUTE, HID_LOGICAL_MIN(0), __VA_ARGS__)
119+
120+
/* Relative mouse, range=[-32767..32767] */
121+
#define TUD_HID_REPORT_DESC_MOUSEHELP(...) TUD_HID_REPORT_DESC_MOUSE_COMMON(HID_RELATIVE, HID_LOGICAL_MIN_N(-32767, 2), __VA_ARGS__)
116122

117123
// Consumer Control Report Descriptor Template
118124
#define TUD_HID_REPORT_DESC_CONSUMER_CTRL(...) \
@@ -161,50 +167,6 @@ HID_COLLECTION_END \
161167
HID_OUTPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\
162168
HID_COLLECTION_END \
163169

164-
#define TUD_HID_REPORT_DESC_MOUSEHELP(...) \
165-
HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
166-
HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ) ,\
167-
HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\
168-
/* Report ID if any */\
169-
__VA_ARGS__ \
170-
HID_USAGE ( HID_USAGE_DESKTOP_POINTER ) ,\
171-
HID_COLLECTION ( HID_COLLECTION_PHYSICAL ) ,\
172-
HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ) ,\
173-
HID_USAGE_MIN ( 1 ) ,\
174-
HID_USAGE_MAX ( 5 ) ,\
175-
HID_LOGICAL_MIN ( 0 ) ,\
176-
HID_LOGICAL_MAX ( 1 ) ,\
177-
/* Left, Right, Middle, Backward, Forward buttons */ \
178-
HID_REPORT_COUNT( 5 ) ,\
179-
HID_REPORT_SIZE ( 1 ) ,\
180-
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\
181-
/* 3 bit padding */ \
182-
HID_REPORT_COUNT( 1 ) ,\
183-
HID_REPORT_SIZE ( 3 ) ,\
184-
HID_INPUT ( HID_CONSTANT ) ,\
185-
HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
186-
/* X, Y position [-32767, 32767] */ \
187-
HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\
188-
HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\
189-
HID_LOGICAL_MIN_N ( 0x8000, 2 ) ,\
190-
HID_LOGICAL_MAX_N ( 0x7fff, 2 ) ,\
191-
HID_REPORT_SIZE ( 16 ) ,\
192-
HID_REPORT_COUNT( 2 ) ,\
193-
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\
194-
/* Vertical wheel scroll [-127, 127] */ \
195-
HID_USAGE ( HID_USAGE_DESKTOP_WHEEL ) ,\
196-
HID_LOGICAL_MIN ( 0x81 ) ,\
197-
HID_LOGICAL_MAX ( 0x7f ) ,\
198-
HID_REPORT_COUNT( 1 ) ,\
199-
HID_REPORT_SIZE ( 8 ) ,\
200-
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\
201-
/* Mouse mode (0 = absolute, 1 = relative) */ \
202-
HID_REPORT_COUNT( 1 ), \
203-
HID_REPORT_SIZE ( 8 ), \
204-
HID_INPUT ( HID_CONSTANT ), \
205-
HID_COLLECTION_END , \
206-
HID_COLLECTION_END \
207-
208170
#define HID_USAGE_DIGITIZER 0x01
209171

210172
#define TUD_HID_REPORT_DESC_DIGITIZER_PEN(...) \

src/usb_descriptors.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,10 @@ uint8_t const *tud_hid_descriptor_report_cb(uint8_t instance) {
8181
}
8282
}
8383

84-
uint8_t instance = ITF_NUM_HID;
85-
uint8_t report_id = REPORT_ID_MOUSE;
8684
bool tud_mouse_report(uint8_t mode, uint8_t buttons, int16_t x, int16_t y, int8_t wheel, int8_t pan) {
8785
mouse_report_t report = {.buttons = buttons, .wheel = wheel, .x = x, .y = y, .mode = mode, .pan = pan};
86+
uint8_t instance = ITF_NUM_HID;
87+
uint8_t report_id = REPORT_ID_MOUSE;
8888

8989
if (mode == RELATIVE) {
9090
instance = ITF_NUM_HID_REL_M;

0 commit comments

Comments
 (0)