Loading...
Searching...
No Matches
hid.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2021 Nils Ollrogge
3 *
4 * This file is subject to the terms and conditions of the GNU Lesser General
5 * Public License v2.1. See the file LICENSE in the top level directory for
6 * more details.
7 */
8
9#pragma once
10
23
24#include <stdint.h>
25
26#include "usb/hid/hid_usage.h"
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
35#define USB_TYPE_DESCRIPTOR_HID 0x21
36
40#define USB_HID_VERSION_BCD 0x0110
41
46#define USB_HID_SUBCLASS_NONE 0x0
47#define USB_HID_SUBCLASS_BOOT 0x1
49
54#define USB_HID_PROTOCOL_NONE 0x0
55#define USB_HID_PROTOCOL_KEYBOARD 0x1
56#define USB_HID_PROTOCOL_MOUSE 0x2
58
63#define USB_HID_DESCR_HID 0x21
64#define USB_HID_DESCR_REPORT 0x22
65#define USB_HID_DESCR_PHYSICAL 0x23
67
71#define USB_HID_COUNTRY_CODE_NOTSUPPORTED 0x00
72
77#define USB_HID_REQUEST_GET_REPORT 0x01
78#define USB_HID_REQUEST_GET_IDLE 0x02
79#define USB_HID_REQUEST_GET_PROTOCOL 0x03
80#define USB_HID_REQUEST_SET_REPORT 0x09
81#define USB_HID_REQUEST_SET_IDLE 0x0a
82#define USB_HID_REQUEST_SET_PROTOCOL 0x0b
84
88#define USBUS_HID_EP_IN_REQUIRED_NUMOF 1
89
93#define USBUS_HID_EP_OUT_REQUIRED_NUMOF 1
94
100typedef struct __attribute__((packed)){
101 uint8_t length;
103 uint8_t desc_type;
105
106 uint16_t bcd_hid;
108 uint8_t country_code;
110 uint8_t num_descrs;
112
113 uint8_t report_type;
114 uint16_t report_length;
116
124
128#define USB_HID_ITEM_TYPE_MAIN 0x0
129
133#define USB_HID_ITEM_TYPE_GLOBAL 0x1
134
138#define USB_HID_ITEM_TYPE_LOCAL 0x2
139
143#define USB_HID_ITEM_TAG_INPUT 0x8
144
148#define USB_HID_ITEM_TAG_OUTPUT 0x9
149
153#define USB_HID_ITEM_TAG_COLLECTION 0xA
154
158#define USB_HID_ITEM_TAG_FEATURE 0xB
159
163#define USB_HID_ITEM_TAG_COLLECTION_END 0xC
164
168#define USB_HID_ITEM_TAG_USAGE_PAGE 0x0
172#define USB_HID_ITEM_TAG_LOGICAL_MIN 0x1
173
177#define USB_HID_ITEM_TAG_LOGICAL_MAX 0x2
178
182#define USB_HID_ITEM_TAG_PHYSICAL_MIN 0x3
183
187#define USB_HID_ITEM_TAG_PHYSICAL_MAX 0x4
188
192#define USB_HID_ITEM_TAG_UNIT_EXPONENT 0x5
193
197#define USB_HID_ITEM_TAG_UNIT 0x6
198
202#define USB_HID_ITEM_TAG_REPORT_SIZE 0x7
203
207#define USB_HID_ITEM_TAG_REPORT_ID 0x8
208
212#define USB_HID_ITEM_TAG_REPORT_COUNT 0x9
213
217#define USB_HID_ITEM_TAG_USAGE 0x0
218
222#define USB_HID_ITEM_TAG_USAGE_MIN 0x1
223
227#define USB_HID_ITEM_TAG_USAGE_MAX 0x2
228
232#define USB_HID_COLLECTION_PHYSICAL 0x00
233
237#define USB_HID_COLLECTION_APPLICATION 0x01
238
242#define USB_HID_COLLECTION_LOGICAL 0x02
243
247#define USB_HID_COLLECTION_REPORT 0x03
248
252#define USB_HID_COLLECTION_NAMED_ARRAY 0x04
253
257#define USB_HID_COLLECTION_USAGE_SWITCH 0x05
258
262#define USB_HID_COLLECTION_USAGE_MOD 0x06
263
271#define USB_HID_ITEM(tag, type, size) \
272 (((tag & 0xF) << 4) | ((type & 0x3) << 2) | (size & 0x3))
273
281#define USB_HID_INPUT(input) \
282 USB_HID_ITEM(USB_HID_ITEM_TAG_INPUT, USB_HID_ITEM_TYPE_MAIN, 1), \
283 input
284
292#define USB_HID_OUTPUT(output) \
293 USB_HID_ITEM(USB_HID_ITEM_TAG_OUTPUT, USB_HID_ITEM_TYPE_MAIN, 1), \
294 output
295
303#define USB_HID_FEATURE(feature) \
304 USB_HID_ITEM(USB_HID_ITEM_TAG_FEATURE, USB_HID_ITEM_TYPE_MAIN, 1), \
305 feature
306
314#define USB_HID_COLLECTION(collection) \
315 USB_HID_ITEM(USB_HID_ITEM_TAG_COLLECTION, USB_HID_ITEM_TYPE_MAIN, 1), \
316 collection
317
321#define USB_HID_END_COLLECTION \
322 USB_HID_ITEM(USB_HID_ITEM_TAG_COLLECTION_END, USB_HID_ITEM_TYPE_MAIN, 0)
323
331#define USB_HID_USAGE_PAGE(page) \
332 USB_HID_ITEM(USB_HID_ITEM_TAG_USAGE_PAGE, USB_HID_ITEM_TYPE_GLOBAL, 1), \
333 page
334
342#define USB_HID_USAGE_PAGE16(page) \
343 USB_HID_ITEM(USB_HID_ITEM_TAG_USAGE_PAGE, USB_HID_ITEM_TYPE_GLOBAL, 2), \
344 page & 0xff, (page >> 8)
345
353#define USB_HID_LOGICAL_MIN8(minimum) \
354 USB_HID_ITEM(USB_HID_ITEM_TAG_LOGICAL_MIN, USB_HID_ITEM_TYPE_GLOBAL, 1), \
355 minimum
356
364#define USB_HID_LOGICAL_MIN16(minimum) \
365 USB_HID_ITEM(USB_HID_ITEM_TAG_LOGICAL_MIN, USB_HID_ITEM_TYPE_GLOBAL, 2), \
366 minimum & 0xff, (minimum >> 8)
367
375#define USB_HID_LOGICAL_MIN32(minimum) \
376 USB_HID_ITEM(USB_HID_ITEM_TAG_LOGICAL_MIN, USB_HID_ITEM_TYPE_GLOBAL, 3), \
377 minimum & 0xff, \
378 (minimum >> 8) & 0xff, \
379 (minimum >> 16) & 0xff, \
380 (minimum >> 24) & 0xff
381
389#define USB_HID_LOGICAL_MAX8(maximum) \
390 USB_HID_ITEM(USB_HID_ITEM_TAG_LOGICAL_MAX, USB_HID_ITEM_TYPE_GLOBAL, 1), \
391 maximum
392
400#define USB_HID_LOGICAL_MAX16(maximum) \
401 USB_HID_ITEM(USB_HID_ITEM_TAG_LOGICAL_MAX, USB_HID_ITEM_TYPE_GLOBAL, 2), \
402 (maximum & 0xff), (maximum >> 8)
403
411#define USB_HID_LOGICAL_MAX32(maximum) \
412 USB_HID_ITEM(USB_HID_ITEM_TAG_LOGICAL_MAX, USB_HID_ITEM_TYPE_GLOBAL, 3), \
413 maximum & 0xff, \
414 (maximum >> 8) & 0xff, \
415 (maximum >> 16) & 0xff, \
416 (maximum >> 24) & 0xff
417
425#define USB_HID_REPORT_SIZE(size) \
426 USB_HID_ITEM(USB_HID_ITEM_TAG_REPORT_SIZE, USB_HID_ITEM_TYPE_GLOBAL, 1), \
427 size
428
436#define USB_HID_REPORT_ID(id) \
437 USB_HID_ITEM(USB_HID_ITEM_TAG_REPORT_ID, USB_HID_ITEM_TYPE_GLOBAL, 1), \
438 id
439
447#define USB_HID_REPORT_COUNT(count) \
448 USB_HID_ITEM(USB_HID_ITEM_TAG_REPORT_COUNT, USB_HID_ITEM_TYPE_GLOBAL, 1), \
449 count
450
458#define USB_HID_USAGE(index) \
459 USB_HID_ITEM(USB_HID_ITEM_TAG_USAGE, USB_HID_ITEM_TYPE_LOCAL, 1), \
460 index
461
469#define USB_HID_USAGE_MIN8(start) \
470 USB_HID_ITEM(USB_HID_ITEM_TAG_USAGE_MIN, USB_HID_ITEM_TYPE_LOCAL, 1), \
471 start
472
480#define USB_HID_USAGE_MIN16(start) \
481 USB_HID_ITEM(USB_HID_ITEM_TAG_USAGE_MIN, USB_HID_ITEM_TYPE_LOCAL, 2), \
482 start & 0xff, (start >> 8) & 0xff
483
491#define USB_HID_USAGE_MAX8(end) \
492 USB_HID_ITEM(USB_HID_ITEM_TAG_USAGE_MAX, USB_HID_ITEM_TYPE_LOCAL, 1), \
493 end
494
502#define USB_HID_USAGE_MAX16(end) \
503 USB_HID_ITEM(USB_HID_ITEM_TAG_USAGE_MAX, USB_HID_ITEM_TYPE_LOCAL, 2), \
504 end & 0xff, (end >> 8) & 0xff
505
507
508#ifdef __cplusplus
509}
510#endif
511
Definition for USB HID usage tables.
USB HID descriptor struct.
Definition hid.h:100
uint8_t report_type
Type of HID class report.
Definition hid.h:113
uint8_t country_code
Numeric expression identifying country code of the localized hardware.
Definition hid.h:108
uint16_t report_length
the total size of the Report descriptor.
Definition hid.h:114
uint8_t desc_type
Constant name specifying type of HID descriptor.
Definition hid.h:103
uint8_t length
Numeric expression that is the total size of the HID descriptor.
Definition hid.h:101
uint16_t bcd_hid
Numeric expression identifying the HID Class Specification release.
Definition hid.h:106
uint8_t num_descrs
Numeric expression specifying the number of class descriptors.
Definition hid.h:110