96 typedef ATTR_PACKED_STRUCT(
struct) {
157 typedef ATTR_PACKED_STRUCT(
struct)
181 typedef ATTR_PACKED_STRUCT(
struct)
211 #define HID_KEYCODE_TABLE(ENTRY) \
212 ENTRY( 0x04, 'a' , 'A' )\
213 ENTRY( 0x05, 'b' , 'B' )\
214 ENTRY( 0x06, 'c' , 'C' )\
215 ENTRY( 0x07, 'd' , 'D' )\
216 ENTRY( 0x08, 'e' , 'E' )\
217 ENTRY( 0x09, 'f' , 'F' )\
218 ENTRY( 0x0a, 'g' , 'G' )\
219 ENTRY( 0x0b, 'h' , 'H' )\
220 ENTRY( 0x0c, 'i' , 'I' )\
221 ENTRY( 0x0d, 'j' , 'J' )\
222 ENTRY( 0x0e, 'k' , 'K' )\
223 ENTRY( 0x0f, 'l' , 'L' )\
224 ENTRY( 0x10, 'm' , 'M' )\
225 ENTRY( 0x11, 'n' , 'N' )\
226 ENTRY( 0x12, 'o' , 'O' )\
227 ENTRY( 0x13, 'p' , 'P' )\
228 ENTRY( 0x14, 'q' , 'Q' )\
229 ENTRY( 0x15, 'r' , 'R' )\
230 ENTRY( 0x16, 's' , 'S' )\
231 ENTRY( 0x17, 't' , 'T' )\
232 ENTRY( 0x18, 'u' , 'U' )\
233 ENTRY( 0x19, 'v' , 'V' )\
234 ENTRY( 0x1a, 'w' , 'W' )\
235 ENTRY( 0x1b, 'x' , 'X' )\
236 ENTRY( 0x1c, 'y' , 'Y' )\
237 ENTRY( 0x1d, 'z' , 'Z' )\
239 ENTRY( 0x1e, '1' , '!' )\
240 ENTRY( 0x1f, '2' , '@' )\
241 ENTRY( 0x20, '3' , '#' )\
242 ENTRY( 0x21, '4' , '$' )\
243 ENTRY( 0x22, '5' , '%' )\
244 ENTRY( 0x23, '6' , '^' )\
245 ENTRY( 0x24, '7' , '&' )\
246 ENTRY( 0x25, '8' , '*' )\
247 ENTRY( 0x26, '9' , '(' )\
248 ENTRY( 0x27, '0' , ')' )\
250 ENTRY( 0x28, '\r' , '\r' )\
251 ENTRY( 0x29, '\x1b', '\x1b' )\
252 ENTRY( 0x2a, '\b' , '\b' )\
253 ENTRY( 0x2b, '\t' , '\t' )\
254 ENTRY( 0x2c, ' ' , ' ' )\
255 ENTRY( 0x2d, '-' , '_' )\
256 ENTRY( 0x2e, '=' , '+' )\
257 ENTRY( 0x2f, '[' , '{' )\
258 ENTRY( 0x30, ']' , '}' )\
259 ENTRY( 0x31, '\\' , '|' )\
260 ENTRY( 0x32, '#' , '~' ) \
261 ENTRY( 0x33, ';' , ':' )\
262 ENTRY( 0x34, '\'' , '\"' )\
263 ENTRY( 0x35, 0 , 0 )\
264 ENTRY( 0x36, ',' , '<' )\
265 ENTRY( 0x37, '.' , '>' )\
266 ENTRY( 0x38, '/' , '?' )\
267 ENTRY( 0x39, 0 , 0 ) \
269 ENTRY( 0x54, '/' , '/' )\
270 ENTRY( 0x55, '*' , '*' )\
271 ENTRY( 0x56, '-' , '-' )\
272 ENTRY( 0x57, '+' , '+' )\
273 ENTRY( 0x58, '\r' , '\r' )\
274 ENTRY( 0x59, '1' , 0 ) \
275 ENTRY( 0x5a, '2' , 0 )\
276 ENTRY( 0x5b, '3' , 0 )\
277 ENTRY( 0x5c, '4' , 0 )\
278 ENTRY( 0x5d, '5' , '5' )\
279 ENTRY( 0x5e, '6' , 0 )\
280 ENTRY( 0x5f, '7' , 0 )\
281 ENTRY( 0x60, '8' , 0 )\
282 ENTRY( 0x61, '9' , 0 )\
283 ENTRY( 0x62, '0' , 0 )\
284 ENTRY( 0x63, '0' , 0 )\
285 ENTRY( 0x67, '=' , '=' )\
311 #define HID_REPORT_DATA_0(data)
312 #define HID_REPORT_DATA_1(data) , data
313 #define HID_REPORT_DATA_2(data) , U16_TO_U8S_LE(data)
314 #define HID_REPORT_DATA_3(data) , U32_TO_U8S_LE(data)
316 #define HID_REPORT_ITEM(data, tag, type, size) \
317 (((tag) << 4) | ((type) << 2) | (size)) HID_REPORT_DATA_##size(data)
319 #define RI_TYPE_MAIN 0
320 #define RI_TYPE_GLOBAL 1
321 #define RI_TYPE_LOCAL 2
324 #define HID_INPUT(x) HID_REPORT_ITEM(x, 8, RI_TYPE_MAIN, 1)
325 #define HID_OUTPUT(x) HID_REPORT_ITEM(x, 9, RI_TYPE_MAIN, 1)
326 #define HID_COLLECTION(x) HID_REPORT_ITEM(x, 10, RI_TYPE_MAIN, 1)
327 #define HID_FEATURE(x) HID_REPORT_ITEM(x, 11, RI_TYPE_MAIN, 1)
328 #define HID_COLLECTION_END HID_REPORT_ITEM(x, 12, RI_TYPE_MAIN, 0)
331 #define HID_DATA (0<<0)
332 #define HID_CONSTANT (1<<0)
334 #define HID_ARRAY (0<<1)
335 #define HID_VARIABLE (1<<1)
337 #define HID_ABSOLUTE (0<<2)
338 #define HID_RELATIVE (1<<2)
340 #define HID_WRAP_NO (0<<3)
341 #define HID_WRAP (1<<3)
343 #define HID_LINEAR (0<<4)
344 #define HID_NONLINEAR (1<<4)
346 #define HID_PREFERRED_STATE (0<<5)
347 #define HID_PREFERRED_NO (1<<5)
349 #define HID_NO_NULL_POSITION (0<<6)
350 #define HID_NULL_STATE (1<<6)
352 #define HID_NON_VOLATILE (0<<7)
353 #define HID_VOLATILE (1<<7)
355 #define HID_BITFIELD (0<<8)
356 #define HID_BUFFERED_BYTES (1<<8)
360 HID_COLLECTION_PHYSICAL = 0,
361 HID_COLLECTION_APPLICATION,
362 HID_COLLECTION_LOGICAL,
363 HID_COLLECTION_REPORT,
364 HID_COLLECTION_NAMED_ARRAY,
365 HID_COLLECTION_USAGE_SWITCH,
366 HID_COLLECTION_USAGE_MODIFIER
370 #define HID_USAGE_PAGE(x) HID_REPORT_ITEM(x, 0, RI_TYPE_GLOBAL, 1)
371 #define HID_USAGE_PAGE_N(x, n) HID_REPORT_ITEM(x, 0, RI_TYPE_GLOBAL, n)
373 #define HID_LOGICAL_MIN(x) HID_REPORT_ITEM(x, 1, RI_TYPE_GLOBAL, 1)
374 #define HID_LOGICAL_MIN_N(x, n) HID_REPORT_ITEM(x, 1, RI_TYPE_GLOBAL, n)
376 #define HID_LOGICAL_MAX(x) HID_REPORT_ITEM(x, 2, RI_TYPE_GLOBAL, 1)
377 #define HID_LOGICAL_MAX_N(x, n) HID_REPORT_ITEM(x, 2, RI_TYPE_GLOBAL, n)
379 #define HID_PHYSICAL_MIN(x) HID_REPORT_ITEM(x, 3, RI_TYPE_GLOBAL, 1)
380 #define HID_PHYSICAL_MIN_N(x, n) HID_REPORT_ITEM(x, 3, RI_TYPE_GLOBAL, n)
382 #define HID_PHYSICAL_MAX(x) HID_REPORT_ITEM(x, 4, RI_TYPE_GLOBAL, 1)
383 #define HID_PHYSICAL_MAX_N(x, n) HID_REPORT_ITEM(x, 4, RI_TYPE_GLOBAL, n)
385 #define HID_UNIT_EXPONENT(x) HID_REPORT_ITEM(x, 5, RI_TYPE_GLOBAL, 1)
386 #define HID_UNIT_EXPONENT_N(x, n) HID_REPORT_ITEM(x, 5, RI_TYPE_GLOBAL, n)
388 #define HID_UNIT(x) HID_REPORT_ITEM(x, 6, RI_TYPE_GLOBAL, 1)
389 #define HID_UNIT_N(x, n) HID_REPORT_ITEM(x, 6, RI_TYPE_GLOBAL, n)
391 #define HID_REPORT_SIZE(x) HID_REPORT_ITEM(x, 7, RI_TYPE_GLOBAL, 1)
392 #define HID_REPORT_SIZE_N(x, n) HID_REPORT_ITEM(x, 7, RI_TYPE_GLOBAL, n)
394 #define HID_REPORT_ID(x) HID_REPORT_ITEM(x, 8, RI_TYPE_GLOBAL, 1)
395 #define HID_REPORT_ID_N(x) HID_REPORT_ITEM(x, 8, RI_TYPE_GLOBAL, n)
397 #define HID_REPORT_COUNT(x) HID_REPORT_ITEM(x, 9, RI_TYPE_GLOBAL, 1)
398 #define HID_REPORT_COUNT_N(x, n) HID_REPORT_ITEM(x, 9, RI_TYPE_GLOBAL, n)
400 #define HID_PUSH HID_REPORT_ITEM(x, 10, RI_TYPE_GLOBAL, 0)
401 #define HID_POP HID_REPORT_ITEM(x, 11, RI_TYPE_GLOBAL, 0)
404 #define HID_USAGE(x) HID_REPORT_ITEM(x, 0, RI_TYPE_LOCAL, 1)
405 #define HID_USAGE_N(x, n) HID_REPORT_ITEM(x, 0, RI_TYPE_LOCAL, n)
407 #define HID_USAGE_MIN(x) HID_REPORT_ITEM(x, 1, RI_TYPE_LOCAL, 1)
408 #define HID_USAGE_MIN_N(x, n) HID_REPORT_ITEM(x, 1, RI_TYPE_LOCAL, n)
410 #define HID_USAGE_MAX(x) HID_REPORT_ITEM(x, 2, RI_TYPE_LOCAL, 1)
411 #define HID_USAGE_MAX_N(x, n) HID_REPORT_ITEM(x, 2, RI_TYPE_LOCAL, n)
419 HID_USAGE_PAGE_DESKTOP = 0x01,
420 HID_USAGE_PAGE_SIMULATE = 0x02,
421 HID_USAGE_PAGE_VIRTUAL_REALITY = 0x03,
422 HID_USAGE_PAGE_SPORT = 0x04,
423 HID_USAGE_PAGE_GAME = 0x05,
424 HID_USAGE_PAGE_GENERIC_DEVICE = 0x06,
425 HID_USAGE_PAGE_KEYBOARD = 0x07,
426 HID_USAGE_PAGE_LED = 0x08,
427 HID_USAGE_PAGE_BUTTON = 0x09,
428 HID_USAGE_PAGE_ORDINAL = 0x0a,
429 HID_USAGE_PAGE_TELEPHONY = 0x0b,
430 HID_USAGE_PAGE_CONSUMER = 0x0c,
431 HID_USAGE_PAGE_DIGITIZER = 0x0d,
432 HID_USAGE_PAGE_PID = 0x0f,
433 HID_USAGE_PAGE_UNICODE = 0x10,
434 HID_USAGE_PAGE_ALPHA_DISPLAY = 0x14,
435 HID_USAGE_PAGE_MEDICAL = 0x40,
436 HID_USAGE_PAGE_MONITOR = 0x80,
437 HID_USAGE_PAGE_POWER = 0x84,
438 HID_USAGE_PAGE_BARCODE_SCANNER = 0x8c,
439 HID_USAGE_PAGE_SCALE = 0x8d,
440 HID_USAGE_PAGE_MSR = 0x8e,
441 HID_USAGE_PAGE_CAMERA = 0x90,
442 HID_USAGE_PAGE_ARCADE = 0x91,
443 HID_USAGE_PAGE_VENDOR = 0xFFFF
448 HID_USAGE_DESKTOP_POINTER = 0x01,
449 HID_USAGE_DESKTOP_MOUSE = 0x02,
450 HID_USAGE_DESKTOP_JOYSTICK = 0x04,
451 HID_USAGE_DESKTOP_GAMEPAD = 0x05,
452 HID_USAGE_DESKTOP_KEYBOARD = 0x06,
453 HID_USAGE_DESKTOP_KEYPAD = 0x07,
454 HID_USAGE_DESKTOP_MULTI_AXIS_CONTROLLER = 0x08,
455 HID_USAGE_DESKTOP_TABLET_PC_SYSTEM = 0x09,
456 HID_USAGE_DESKTOP_X = 0x30,
457 HID_USAGE_DESKTOP_Y = 0x31,
458 HID_USAGE_DESKTOP_Z = 0x32,
459 HID_USAGE_DESKTOP_RX = 0x33,
460 HID_USAGE_DESKTOP_RY = 0x34,
461 HID_USAGE_DESKTOP_RZ = 0x35,
462 HID_USAGE_DESKTOP_SLIDER = 0x36,
463 HID_USAGE_DESKTOP_DIAL = 0x37,
464 HID_USAGE_DESKTOP_WHEEL = 0x38,
465 HID_USAGE_DESKTOP_HAT_SWITCH = 0x39,
466 HID_USAGE_DESKTOP_COUNTED_BUFFER = 0x3a,
467 HID_USAGE_DESKTOP_BYTE_COUNT = 0x3b,
468 HID_USAGE_DESKTOP_MOTION_WAKEUP = 0x3c,
469 HID_USAGE_DESKTOP_START = 0x3d,
470 HID_USAGE_DESKTOP_SELECT = 0x3e,
471 HID_USAGE_DESKTOP_VX = 0x40,
472 HID_USAGE_DESKTOP_VY = 0x41,
473 HID_USAGE_DESKTOP_VZ = 0x42,
474 HID_USAGE_DESKTOP_VBRX = 0x43,
475 HID_USAGE_DESKTOP_VBRY = 0x44,
476 HID_USAGE_DESKTOP_VBRZ = 0x45,
477 HID_USAGE_DESKTOP_VNO = 0x46,
478 HID_USAGE_DESKTOP_FEATURE_NOTIFICATION = 0x47,
479 HID_USAGE_DESKTOP_RESOLUTION_MULTIPLIER = 0x48,
480 HID_USAGE_DESKTOP_SYSTEM_CONTROL = 0x80,
481 HID_USAGE_DESKTOP_SYSTEM_POWER_DOWN = 0x81,
482 HID_USAGE_DESKTOP_SYSTEM_SLEEP = 0x82,
483 HID_USAGE_DESKTOP_SYSTEM_WAKE_UP = 0x83,
484 HID_USAGE_DESKTOP_SYSTEM_CONTEXT_MENU = 0x84,
485 HID_USAGE_DESKTOP_SYSTEM_MAIN_MENU = 0x85,
486 HID_USAGE_DESKTOP_SYSTEM_APP_MENU = 0x86,
487 HID_USAGE_DESKTOP_SYSTEM_MENU_HELP = 0x87,
488 HID_USAGE_DESKTOP_SYSTEM_MENU_EXIT = 0x88,
489 HID_USAGE_DESKTOP_SYSTEM_MENU_SELECT = 0x89,
490 HID_USAGE_DESKTOP_SYSTEM_MENU_RIGHT = 0x8A,
491 HID_USAGE_DESKTOP_SYSTEM_MENU_LEFT = 0x8B,
492 HID_USAGE_DESKTOP_SYSTEM_MENU_UP = 0x8C,
493 HID_USAGE_DESKTOP_SYSTEM_MENU_DOWN = 0x8D,
494 HID_USAGE_DESKTOP_SYSTEM_COLD_RESTART = 0x8E,
495 HID_USAGE_DESKTOP_SYSTEM_WARM_RESTART = 0x8F,
496 HID_USAGE_DESKTOP_DPAD_UP = 0x90,
497 HID_USAGE_DESKTOP_DPAD_DOWN = 0x91,
498 HID_USAGE_DESKTOP_DPAD_RIGHT = 0x92,
499 HID_USAGE_DESKTOP_DPAD_LEFT = 0x93,
500 HID_USAGE_DESKTOP_SYSTEM_DOCK = 0xA0,
501 HID_USAGE_DESKTOP_SYSTEM_UNDOCK = 0xA1,
502 HID_USAGE_DESKTOP_SYSTEM_SETUP = 0xA2,
503 HID_USAGE_DESKTOP_SYSTEM_BREAK = 0xA3,
504 HID_USAGE_DESKTOP_SYSTEM_DEBUGGER_BREAK = 0xA4,
505 HID_USAGE_DESKTOP_APPLICATION_BREAK = 0xA5,
506 HID_USAGE_DESKTOP_APPLICATION_DEBUGGER_BREAK = 0xA6,
507 HID_USAGE_DESKTOP_SYSTEM_SPEAKER_MUTE = 0xA7,
508 HID_USAGE_DESKTOP_SYSTEM_HIBERNATE = 0xA8,
509 HID_USAGE_DESKTOP_SYSTEM_DISPLAY_INVERT = 0xB0,
510 HID_USAGE_DESKTOP_SYSTEM_DISPLAY_INTERNAL = 0xB1,
511 HID_USAGE_DESKTOP_SYSTEM_DISPLAY_EXTERNAL = 0xB2,
512 HID_USAGE_DESKTOP_SYSTEM_DISPLAY_BOTH = 0xB3,
513 HID_USAGE_DESKTOP_SYSTEM_DISPLAY_DUAL = 0xB4,
514 HID_USAGE_DESKTOP_SYSTEM_DISPLAY_TOGGLE_INT_EXT = 0xB5,
515 HID_USAGE_DESKTOP_SYSTEM_DISPLAY_SWAP_PRIMARY_SECONDARY = 0xB6,
516 HID_USAGE_DESKTOP_SYSTEM_DISPLAY_LCD_AUTOSCALE = 0xB7
Switzerland.
Definition: hid.h:140
Report Descriptor.
Definition: hid.h:74
Boot Interface Subclass.
Definition: hid.h:61
Right button.
Definition: hid.h:169
International.
Definition: hid.h:124
uint8_t buttons
Definition: hid.h:160
Canadian_French.
Definition: hid.h:115
Kana mode.
Definition: hid.h:206
#define BIT_(n)
n-th Bit
Definition: binary.h:54
uint8_t bReportType
Definition: hid.h:104
Arabic.
Definition: hid.h:112
int8_t x
Definition: hid.h:161
NotSupported.
Definition: hid.h:111
Netherlands/Dutch.
Definition: hid.h:129
Scroll Lock LED.
Definition: hid.h:204
Swedish.
Definition: hid.h:137
Standard HID Boot Protocol Mouse Report.
Definition: hid.h:158
Left Window.
Definition: hid.h:194
Taiwan.
Definition: hid.h:141
Set Protocol.
Definition: hid.h:92
Danish.
Definition: hid.h:117
Portuguese.
Definition: hid.h:133
uint8_t bNumDescriptors
Definition: hid.h:102
Persian (Farsi)
Definition: hid.h:131
Swiss/German.
Definition: hid.h:139
US.
Definition: hid.h:144
Hebrew.
Definition: hid.h:122
Swiss/French.
Definition: hid.h:138
hid_keyboard_led_bm_t
Definition: hid.h:201
Turkish-Q.
Definition: hid.h:142
HID Descriptor.
Definition: hid.h:73
Left button.
Definition: hid.h:168
Left Shift.
Definition: hid.h:192
Composition Mode.
Definition: hid.h:205
Feature.
Definition: hid.h:82
hid_request_report_type_t
HID Request Report Type.
Definition: hid.h:79
Latin_American.
Definition: hid.h:128
French.
Definition: hid.h:119
Korean.
Definition: hid.h:127
Spanish.
Definition: hid.h:136
Norwegian.
Definition: hid.h:130
Belgian.
Definition: hid.h:113
Finnish.
Definition: hid.h:118
Left Control.
Definition: hid.h:191
Physical Descriptor.
Definition: hid.h:75
Italian.
Definition: hid.h:125
int8_t y
Definition: hid.h:162
Right Window.
Definition: hid.h:198
hid_mouse_button_bm_t
Standard Mouse Buttons Bitmap.
Definition: hid.h:167
UK.
Definition: hid.h:143
Greek.
Definition: hid.h:121
Yugoslavia.
Definition: hid.h:145
uint8_t modifier
Definition: hid.h:184
Right Shift.
Definition: hid.h:196
Output.
Definition: hid.h:81
Standard HID Boot Protocol Keyboard Report.
Definition: hid.h:182
Left Alt.
Definition: hid.h:193
Russia.
Definition: hid.h:134
hid_subclass_type_t
HID Subclass.
Definition: hid.h:59
uint8_t bDescriptorType
Definition: hid.h:98
uint8_t reserved
Definition: hid.h:185
hid_descriptor_type_t
HID Descriptor Type.
Definition: hid.h:72
German.
Definition: hid.h:120
Set Report.
Definition: hid.h:90
Middle button.
Definition: hid.h:170
USB HID Descriptor.
Definition: hid.h:96
Keyboard.
Definition: hid.h:67
hid_keyboard_modifier_bm_t
Keyboard modifier codes bitmap.
Definition: hid.h:190
Get Idle.
Definition: hid.h:88
int8_t wheel
Definition: hid.h:163
Caps Lock LED.
Definition: hid.h:203
Get Protocol.
Definition: hid.h:89
Slovakia.
Definition: hid.h:135
Hungary.
Definition: hid.h:123
uint16_t bcdHID
Definition: hid.h:100
No Subclass.
Definition: hid.h:60
Num Lock LED.
Definition: hid.h:202
Get Report.
Definition: hid.h:87
Canadian_Bilingual.
Definition: hid.h:114
Right Control.
Definition: hid.h:195
hid_protocol_type_t
HID Protocol.
Definition: hid.h:65
Czech_Republic.
Definition: hid.h:116
Poland.
Definition: hid.h:132
Right Alt.
Definition: hid.h:197
uint8_t bLength
Definition: hid.h:97
Set Idle.
Definition: hid.h:91
hid_country_code_t
HID Country Code.
Definition: hid.h:109
uint8_t bCountryCode
Definition: hid.h:101
hid_request_type_t
HID Class Specific Control Request.
Definition: hid.h:86
Input.
Definition: hid.h:80
None.
Definition: hid.h:66
uint16_t wReportLength
Definition: hid.h:105
Mouse.
Definition: hid.h:68
Japan_Katakana.
Definition: hid.h:126
Turkish-F.
Definition: hid.h:146