22#define ENABLE_ERR_MSG 1
23#define ENABLE_DBG_MSG 0
26#define HID_ERRMSG printf
28#define HID_ERRMSG(...)
32#define HID_DBGMSG printf
34#define HID_DBGMSG(...)
52#define CONFIG_HID_MAX_DEV 4
53#define CONFIG_HID_DEV_MAX_PIPE 8
57#define HID_DESCRIPTOR_TYPE 0x21
58#define REPORT_DESCRIPTOR_TYPE 0x22
60#define HID_SUBCLASS_BOOT_DEVICE 0x01
62#define HID_PROTOCOL_KEYBOARD 0x01
63#define HID_PROTOCOL_MOUSE 0x02
71#define TAG_OUTPUT 0x90
72#define TAG_FEATURE 0xB0
73#define TAG_COLLECTION 0xA0
74#define TAG_END_COLLECTION 0xC0
78#define TAG_USAGE_PAGE 0x04
79#define TAG_LOGICAL_MIN 0x14
80#define TAG_LOGICAL_MAX 0x24
81#define TAG_PHYSICAL_MIN 0x34
82#define TAG_PHYSICAL_MAX 0x44
83#define TAG_UNIT_EXPONENT 0x54
85#define TAG_REPORT_SIZE 0x74
86#define TAG_REPORT_ID 0x84
87#define TAG_REPORT_COUNT 0x94
93#define TAG_USAGE_MIN 0x18
94#define TAG_USAGE_MAX 0x28
95#define TAG_DESIGNATOR_INDEX 0x38
96#define TAG_DESIGNATOR_MIN 0x48
97#define TAG_DESIGNATOR_MAX 0x58
98#define TAG_STRING_INDEX 0x78
99#define TAG_STRING_MIN 0x88
100#define TAG_STRING_MAX 0x98
101#define TAG_DELIMITER 0xA8
104#define COLLECT_PHYSICAL 0x00
105#define COLLECT_APPLICATION 0x01
106#define COLLECT_LOGICAL 0x02
107#define COLLECT_VENDOR 0xFF
112#define UP_GENERIC_DESKTOP 0x01
113#define UP_SIMULATION_CONTROLS 0x02
114#define UP_VR_CONTROLS 0x03
115#define UP_SPORT_CONTROLS 0x04
116#define UP_GAME_CONTROLS 0x05
117#define UP_KEYCODE 0x07
119#define UP_BUTTON 0x09
120#define UP_ORDINAL 0x0A
121#define UP_TELEPHONY 0x0B
122#define UP_CONSUMER 0x0C
123#define UP_DIGITIZER 0x0D
124#define UP_PID_PAGE 0x0F
125#define UP_UNICODE 0x10
126#define UP_BARCODE_SCANNER 0x8C
129#define USAGE_ID_POINTER 0x01
130#define USAGE_ID_MOUSE 0x02
131#define USAGE_ID_JOYSTICK 0x04
132#define USAGE_ID_GAMEPAD 0x05
133#define USAGE_ID_KEYBOARD 0x06
134#define USAGE_ID_KEYPAD 0x07
135#define USAGE_ID_X 0x30
136#define USAGE_ID_Y 0x31
137#define USAGE_ID_Z 0x32
138#define USAGE_ID_WHEEL 0x38
140#define KEYCODE_CAPS_LOCK 0x39
141#define KEYCODE_SCROLL_LOCK 0x47
142#define KEYCODE_NUM_LOCK 0x53
144#define STATE_MASK_NUM_LOCK 0x01
145#define STATE_MASK_CAPS_LOCK 0x02
146#define STATE_MASK_SCROLL_LOCK 0x04
152#define USB_DT_HID (REQ_TYPE_CLASS_DEV | 0x01)
153#define USB_DT_REPORT (REQ_TYPE_CLASS_DEV | 0x02)
156#define HID_REPORT_GET 0x01
157#define HID_GET_IDLE 0x02
158#define HID_GET_PROTOCOL 0x03
159#define HID_REPORT_SET 0x09
160#define HID_SET_IDLE 0x0A
161#define HID_SET_PROTOCOL 0x0B
181typedef struct hid_descriptor
183 __packed uint8_t bLength;
184 __packed uint8_t bDescriptorType;
185 __packed uint16_t bcdHID;
186 __packed uint8_t bCountryCode;
187 __packed uint8_t bNumDescriptors;
188 __packed uint8_t bRPDescType;
189 __packed uint16_t wDescriptorLength;
195 uint8_t bDescriptorType;
197 uint8_t bCountryCode;
198 uint8_t bNumDescriptors;
200 uint16_t wDescriptorLength;
204typedef struct report_info
210 signed int usage_mim;
211 signed int usage_max;
212 signed int logical_min;
213 signed int logical_max;
214 signed int physical_min;
215 signed int physical_max;
216 signed int unit_exponent;
218 signed int designator_index;
219 signed int designator_min;
220 signed int designator_max;
221 signed int string_index;
222 signed int string_min;
223 signed int string_max;
226 uint8_t report_count;
233 uint32_t non_linear:1;
234 uint32_t no_preferred:1;
235 uint32_t null_state:1;
236 uint32_t is_volatile:1;
237 uint32_t buffered_bytes:1;
238 uint32_t reserved:23;
240 struct report_info *next;
243static uint8_t _designator_index, _designator_min, _designator_max;
244static uint8_t _string_index, _string_max, _string_min;
247typedef struct rp_desc_info
249 uint8_t has_report_id;
250 uint8_t last_pressed_lock_keys;
334int hid_parse_keyboard_reports(
HID_DEV_T *hdev, uint8_t *data,
int data_len);
335int hid_parse_mouse_reports(
HID_DEV_T *hdev, uint8_t *data,
int data_len);
336int32_t usbh_hid_set_report_non_blocking(
HID_DEV_T *hdev,
int rtp_typ,
int rtp_id, uint8_t *data,
int len);
void *__dso_handle __attribute__((weak))
NuMicro peripheral access layer header file.
#define CONFIG_HID_DEV_MAX_PIPE
void usbh_hid_regitser_mouse_callback(HID_MOUSE_FUNC *func)
Register the mouse event callback function to HID class driver. Any mouse reports will be sent to use...
void usbh_hid_regitser_keyboard_callback(HID_KEYBOARD_FUNC *func)
Register the keyboard event callback function to HID class driver. Any keyboard reports will be sent ...
UTR_T * utr_list[CONFIG_HID_DEV_MAX_PIPE]
void() HID_KEYBOARD_FUNC(struct usbhid_dev *hdev, KEYBOARD_EVENT_T *kbd)
void() HID_MOUSE_FUNC(struct usbhid_dev *hdev, MOUSE_EVENT_T *mouse)
HIDDEN_SYMBOLS struct usbhid_dev HID_DEV_T
struct usbhid_mouse_event MOUSE_EVENT_T
struct usbhid_keyboard_event KEYBOARD_EVENT_T
void() HID_IR_FUNC(struct usbhid_dev *hdev, uint16_t ep_addr, int status, uint8_t *rdata, uint32_t data_len)
void() HID_IW_FUNC(struct usbhid_dev *hdev, uint16_t ep_addr, int status, uint8_t *wbuff, uint32_t *data_len)
USB Host library header file.