Skip to content

Commit c716f9c

Browse files
masz-nordicnashif
authored andcommitted
usb: hid: macro for report descriptor
Added macro that generates simple report descriptor for mouse. This improves the readability of hid-mouse sample. Signed-off-by: Marcin Szymczyk <[email protected]>
1 parent 4e32721 commit c716f9c

File tree

2 files changed

+68
-56
lines changed

2 files changed

+68
-56
lines changed

include/usb/class/usb_hid.h

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,73 @@ struct hid_ops {
168168
#define HID_PROTOCOL_BOOT 0x00
169169
#define HID_PROTOCOL_REPORT 0x01
170170

171+
/* Example HID report descriptors */
172+
/**
173+
* @brief Simple HID mouse report descriptor for n button mouse.
174+
*
175+
* @param bcnt Button count. Allowed values from 1 to 8.
176+
*/
177+
#define HID_MOUSE_REPORT_DESC(bcnt) { \
178+
/* USAGE_PAGE (Generic Desktop) */ \
179+
HID_GI_USAGE_PAGE, USAGE_GEN_DESKTOP, \
180+
/* USAGE (Mouse) */ \
181+
HID_LI_USAGE, USAGE_GEN_DESKTOP_MOUSE, \
182+
/* COLLECTION (Application) */ \
183+
HID_MI_COLLECTION, COLLECTION_APPLICATION, \
184+
/* USAGE (Pointer) */ \
185+
HID_LI_USAGE, USAGE_GEN_DESKTOP_POINTER, \
186+
/* COLLECTION (Physical) */ \
187+
HID_MI_COLLECTION, COLLECTION_PHYSICAL, \
188+
/* Bits used for button signalling */ \
189+
/* USAGE_PAGE (Button) */ \
190+
HID_GI_USAGE_PAGE, USAGE_GEN_BUTTON, \
191+
/* USAGE_MINIMUM (Button 1) */ \
192+
HID_LI_USAGE_MIN(1), 0x01, \
193+
/* USAGE_MAXIMUM (Button bcnt) */ \
194+
HID_LI_USAGE_MAX(1), bcnt, \
195+
/* LOGICAL_MINIMUM (0) */ \
196+
HID_GI_LOGICAL_MIN(1), 0x00, \
197+
/* LOGICAL_MAXIMUM (1) */ \
198+
HID_GI_LOGICAL_MAX(1), 0x01, \
199+
/* REPORT_SIZE (1) */ \
200+
HID_GI_REPORT_SIZE, 0x01, \
201+
/* REPORT_COUNT (bcnt) */ \
202+
HID_GI_REPORT_COUNT, bcnt, \
203+
/* INPUT (Data,Var,Abs) */ \
204+
HID_MI_INPUT, 0x02, \
205+
/* Unused bits */ \
206+
/* REPORT_SIZE (8 - bcnt) */ \
207+
HID_GI_REPORT_SIZE, (8 - bcnt), \
208+
/* REPORT_COUNT (1) */ \
209+
HID_GI_REPORT_COUNT, 0x01, \
210+
/* INPUT (Cnst,Ary,Abs) */ \
211+
HID_MI_INPUT, 0x01, \
212+
/* X and Y axis, scroll */ \
213+
/* USAGE_PAGE (Generic Desktop) */ \
214+
HID_GI_USAGE_PAGE, USAGE_GEN_DESKTOP, \
215+
/* USAGE (X) */ \
216+
HID_LI_USAGE, USAGE_GEN_DESKTOP_X, \
217+
/* USAGE (Y) */ \
218+
HID_LI_USAGE, USAGE_GEN_DESKTOP_Y, \
219+
/* USAGE (WHEEL) */ \
220+
HID_LI_USAGE, USAGE_GEN_DESKTOP_WHEEL, \
221+
/* LOGICAL_MINIMUM (-127) */ \
222+
HID_GI_LOGICAL_MIN(1), -127, \
223+
/* LOGICAL_MAXIMUM (127) */ \
224+
HID_GI_LOGICAL_MAX(1), 127, \
225+
/* REPORT_SIZE (8) */ \
226+
HID_GI_REPORT_SIZE, 0x08, \
227+
/* REPORT_COUNT (3) */ \
228+
HID_GI_REPORT_COUNT, 0x03, \
229+
/* INPUT (Data,Var,Rel) */ \
230+
HID_MI_INPUT, 0x06, \
231+
/* END_COLLECTION */ \
232+
HID_MI_COLLECTION_END, \
233+
/* END_COLLECTION */ \
234+
HID_MI_COLLECTION_END, \
235+
}
236+
237+
171238
/* Register HID device */
172239
void usb_hid_register_device(const u8_t *desc, size_t size,
173240
const struct hid_ops *op);

samples/subsys/usb/hid-mouse/src/main.c

Lines changed: 1 addition & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -77,62 +77,7 @@ LOG_MODULE_REGISTER(main);
7777
#define LED_PORT LED0_GPIO_CONTROLLER
7878
#define LED LED0_GPIO_PIN
7979

80-
static const u8_t hid_report_desc[] = {
81-
HID_GI_USAGE_PAGE, USAGE_GEN_DESKTOP,
82-
/* USAGE_PAGE (Generic Desktop) 05 01 */
83-
HID_LI_USAGE, USAGE_GEN_DESKTOP_MOUSE,
84-
/* USAGE (Mouse) 09 02 */
85-
HID_MI_COLLECTION, COLLECTION_APPLICATION,
86-
/* COLLECTION (Application) A1 01 */
87-
HID_LI_USAGE, USAGE_GEN_DESKTOP_POINTER,
88-
/* USAGE (Pointer) 09 01 */
89-
HID_MI_COLLECTION, COLLECTION_PHYSICAL,
90-
/* COLLECTION (Physical) A1 00 */
91-
HID_GI_USAGE_PAGE, USAGE_GEN_BUTTON,
92-
/* USAGE_PAGE (Button) 05 09 */
93-
HID_LI_USAGE_MIN(1), 0x01,
94-
/* USAGE_MINIMUM (Button 1) 19 01 */
95-
HID_LI_USAGE_MAX(1), 0x03,
96-
/* USAGE_MAXIMUM (Button 3) 29 03 */
97-
HID_GI_LOGICAL_MIN(1), 0,
98-
/* LOGICAL_MINIMUM (0) 15 00 */
99-
HID_GI_LOGICAL_MAX(1), 1,
100-
/* LOGICAL_MAXIMUM (1) 25 01 */
101-
HID_GI_REPORT_COUNT, 3,
102-
/* REPORT_COUNT (3) 95 03 */
103-
HID_GI_REPORT_SIZE, 1,
104-
/* REPORT_SIZE (1) 75 01 */
105-
HID_MI_INPUT, 0x02,
106-
/* INPUT (Data,Var,Abs) 81 02 */
107-
HID_GI_REPORT_COUNT, 1,
108-
/* REPORT_COUNT (1) 95 01 */
109-
HID_GI_REPORT_SIZE, 5,
110-
/* REPORT_SIZE (5) 75 05 */
111-
HID_MI_INPUT, 0x01,
112-
/* INPUT (Cnst,Ary,Abs) 81 01 */
113-
HID_GI_USAGE_PAGE, USAGE_GEN_DESKTOP,
114-
/* USAGE_PAGE (Generic Desktop) 05 01 */
115-
HID_LI_USAGE, USAGE_GEN_DESKTOP_X,
116-
/* USAGE (X) 09 30 */
117-
HID_LI_USAGE, USAGE_GEN_DESKTOP_Y,
118-
/* USAGE (Y) 09 31 */
119-
HID_LI_USAGE, USAGE_GEN_DESKTOP_WHEEL,
120-
/* USAGE (Wheel) 09 38 */
121-
HID_GI_LOGICAL_MIN(1), -127,
122-
/* LOGICAL_MINIMUM (-127) 15 81 */
123-
HID_GI_LOGICAL_MAX(1), 127,
124-
/* LOGICAL_MAXIMUM (127) 25 7F */
125-
HID_GI_REPORT_SIZE, 8,
126-
/* REPORT_SIZE (8) 75 08 */
127-
HID_GI_REPORT_COUNT, 3,
128-
/* REPORT_COUNT (3) 95 03 */
129-
HID_MI_INPUT, 0x06,
130-
/* INPUT (Data,Var,Rel) 81 06 */
131-
HID_MI_COLLECTION_END,
132-
/* END_COLLECTION C0 */
133-
HID_MI_COLLECTION_END,
134-
/* END_COLLECTION C0 */
135-
};
80+
static const u8_t hid_report_desc[] = HID_MOUSE_REPORT_DESC(2);
13681

13782
static u32_t def_val[4];
13883
static volatile u8_t status[4];

0 commit comments

Comments
 (0)