Line data Source code
1 1 : /*
2 : * Copyright (c) 2018 Intel Corporation
3 : * Copyright (c) 2018,2021 Nordic Semiconductor ASA
4 : *
5 : * SPDX-License-Identifier: Apache-2.0
6 : */
7 :
8 : /**
9 : * @file
10 : * @brief USB Human Interface Device (HID) common definitions header
11 : *
12 : * Header follows Device Class Definition for Human Interface Devices (HID)
13 : * Version 1.11 document (HID1_11-1.pdf).
14 : */
15 :
16 : #ifndef ZEPHYR_INCLUDE_USB_CLASS_HID_H_
17 : #define ZEPHYR_INCLUDE_USB_CLASS_HID_H_
18 :
19 : #ifdef __cplusplus
20 : extern "C" {
21 : #endif
22 :
23 : /**
24 : * @brief hid.h API
25 : * @defgroup usb_hid_definitions USB HID common definitions
26 : * @ingroup usb
27 : * @since 1.11
28 : * @version 1.0.0
29 : * @{
30 : */
31 :
32 : /**
33 : * @name USB HID types and values
34 : * @{
35 : */
36 :
37 : /** HID Specification release v1.11 */
38 1 : #define USB_HID_VERSION 0x0111
39 :
40 : /** USB HID Class HID descriptor type */
41 1 : #define USB_DESC_HID 0x21
42 : /** USB HID Class Report descriptor type */
43 1 : #define USB_DESC_HID_REPORT 0x22
44 : /** USB HID Class physical descriptor type */
45 1 : #define USB_DESC_HID_PHYSICAL 0x23
46 :
47 : /** USB HID Class GetReport bRequest value */
48 1 : #define USB_HID_GET_REPORT 0x01
49 : /** USB HID Class GetIdle bRequest value */
50 1 : #define USB_HID_GET_IDLE 0x02
51 : /** USB HID Class GetProtocol bRequest value */
52 1 : #define USB_HID_GET_PROTOCOL 0x03
53 : /** USB HID Class SetReport bRequest value */
54 1 : #define USB_HID_SET_REPORT 0x09
55 : /** USB HID Class SetIdle bRequest value */
56 1 : #define USB_HID_SET_IDLE 0x0A
57 : /** USB HID Class SetProtocol bRequest value */
58 1 : #define USB_HID_SET_PROTOCOL 0x0B
59 :
60 : /** USB HID Boot Interface Protocol (bInterfaceProtocol) Code None */
61 1 : #define HID_BOOT_IFACE_CODE_NONE 0
62 : /** USB HID Boot Interface Protocol (bInterfaceProtocol) Code Keyboard */
63 1 : #define HID_BOOT_IFACE_CODE_KEYBOARD 1
64 : /** USB HID Boot Interface Protocol (bInterfaceProtocol) Code Mouse */
65 1 : #define HID_BOOT_IFACE_CODE_MOUSE 2
66 :
67 : /** USB HID Class Boot protocol code */
68 1 : #define HID_PROTOCOL_BOOT 0
69 : /** USB HID Class Report protocol code */
70 1 : #define HID_PROTOCOL_REPORT 1
71 :
72 : /** HID Main item type */
73 1 : #define HID_ITEM_TYPE_MAIN 0x0
74 : /** HID Global item type */
75 1 : #define HID_ITEM_TYPE_GLOBAL 0x1
76 : /** HID Local item type */
77 1 : #define HID_ITEM_TYPE_LOCAL 0x2
78 :
79 : /** HID Input item tag */
80 1 : #define HID_ITEM_TAG_INPUT 0x8
81 : /** HID Output item tag */
82 1 : #define HID_ITEM_TAG_OUTPUT 0x9
83 : /** HID Collection item tag */
84 1 : #define HID_ITEM_TAG_COLLECTION 0xA
85 : /** HID Feature item tag */
86 1 : #define HID_ITEM_TAG_FEATURE 0xB
87 : /** HID End Collection item tag */
88 1 : #define HID_ITEM_TAG_COLLECTION_END 0xC
89 :
90 : /** HID Usage Page item tag */
91 1 : #define HID_ITEM_TAG_USAGE_PAGE 0x0
92 : /** HID Logical Minimum item tag */
93 1 : #define HID_ITEM_TAG_LOGICAL_MIN 0x1
94 : /** HID Logical Maximum item tag */
95 1 : #define HID_ITEM_TAG_LOGICAL_MAX 0x2
96 : /** HID Physical Minimum item tag */
97 1 : #define HID_ITEM_TAG_PHYSICAL_MIN 0x3
98 : /** HID Physical Maximum item tag */
99 1 : #define HID_ITEM_TAG_PHYSICAL_MAX 0x4
100 : /** HID Unit Exponent item tag */
101 1 : #define HID_ITEM_TAG_UNIT_EXPONENT 0x5
102 : /** HID Unit item tag */
103 1 : #define HID_ITEM_TAG_UNIT 0x6
104 : /** HID Report Size item tag */
105 1 : #define HID_ITEM_TAG_REPORT_SIZE 0x7
106 : /** HID Report ID item tag */
107 1 : #define HID_ITEM_TAG_REPORT_ID 0x8
108 : /** HID Report count item tag */
109 1 : #define HID_ITEM_TAG_REPORT_COUNT 0x9
110 :
111 : /** HID Usage item tag */
112 1 : #define HID_ITEM_TAG_USAGE 0x0
113 : /** HID Usage Minimum item tag */
114 1 : #define HID_ITEM_TAG_USAGE_MIN 0x1
115 : /** HID Usage Maximum item tag */
116 1 : #define HID_ITEM_TAG_USAGE_MAX 0x2
117 :
118 : /** Physical collection type */
119 1 : #define HID_COLLECTION_PHYSICAL 0x00
120 : /** Application collection type */
121 1 : #define HID_COLLECTION_APPLICATION 0x01
122 : /** Logical collection type */
123 1 : #define HID_COLLECTION_LOGICAL 0x02
124 : /** Report collection type */
125 1 : #define HID_COLLECTION_REPORT 0x03
126 : /** Named Array collection type */
127 1 : #define HID_COLLECTION_NAMED_ARRAY 0x04
128 : /** Usage Switch collection type */
129 1 : #define HID_COLLECTION_USAGE_SWITCH 0x05
130 : /** Modifier collection type */
131 1 : #define HID_COLLECTION_MODIFIER 0x06
132 :
133 :
134 : /* Usage page and IDs from Universal Serial Bus HID Usage Tables */
135 :
136 : /** HID Generic Desktop Controls Usage page */
137 1 : #define HID_USAGE_GEN_DESKTOP 0x01
138 : /** HID Keyboard Usage page */
139 1 : #define HID_USAGE_GEN_KEYBOARD 0x07
140 : /** HID LEDs Usage page */
141 1 : #define HID_USAGE_GEN_LEDS 0x08
142 : /** HID Button Usage page */
143 1 : #define HID_USAGE_GEN_BUTTON 0x09
144 : /** HID Sensors Usage page */
145 1 : #define HID_USAGE_SENSORS 0x20
146 :
147 : /** HID Generic Desktop Undefined Usage ID */
148 1 : #define HID_USAGE_GEN_DESKTOP_UNDEFINED 0x00
149 : /** HID Generic Desktop Pointer Usage ID */
150 1 : #define HID_USAGE_GEN_DESKTOP_POINTER 0x01
151 : /** HID Generic Desktop Mouse Usage ID */
152 1 : #define HID_USAGE_GEN_DESKTOP_MOUSE 0x02
153 : /** HID Generic Desktop Joystick Usage ID */
154 1 : #define HID_USAGE_GEN_DESKTOP_JOYSTICK 0x04
155 : /** HID Generic Desktop Gamepad Usage ID */
156 1 : #define HID_USAGE_GEN_DESKTOP_GAMEPAD 0x05
157 : /** HID Generic Desktop Keyboard Usage ID */
158 1 : #define HID_USAGE_GEN_DESKTOP_KEYBOARD 0x06
159 : /** HID Generic Desktop Keypad Usage ID */
160 1 : #define HID_USAGE_GEN_DESKTOP_KEYPAD 0x07
161 : /** HID Generic Desktop X Usage ID */
162 1 : #define HID_USAGE_GEN_DESKTOP_X 0x30
163 : /** HID Generic Desktop Y Usage ID */
164 1 : #define HID_USAGE_GEN_DESKTOP_Y 0x31
165 : /** HID Generic Desktop Wheel Usage ID */
166 1 : #define HID_USAGE_GEN_DESKTOP_WHEEL 0x38
167 :
168 : /** HID Sensors Collection Usage ID */
169 1 : #define HID_USAGE_SENSOR_TYPE_COLLECTION 0x001
170 : /** HID Sensors Environmental Temperature Type Usage ID */
171 1 : #define HID_USAGE_SENSORS_TYPE_ENVIRONMENTAL_TEMPERATURE 0x033
172 : /** HID Sensors Event Sensor State Usage ID */
173 1 : #define HID_USAGE_SENSORS_EVENT_SENSOR_STATE 0x201
174 : /** HID Sensors Friendly Name Property Usage ID */
175 1 : #define HID_USAGE_SENSORS_PROPERTY_FRIENDLY_NAME 0x301
176 : /** HID Sensors Enviromental Temperature Data Usage ID */
177 1 : #define HID_USAGE_SENSORS_DATA_ENVIRONMENTAL_TEMPERATURE 0x434
178 : /** HID Sensors Timestamp Property Usage ID */
179 1 : #define HID_USAGE_SENSORS_PROPERTY_TIMESTAMP 0x529
180 : /** HID Sensors Sensor State Undefined Usage ID */
181 1 : #define HID_USAGE_SENSORS_SENSOR_STATE_UNDEFINED 0x800
182 : /** HID Sensors Sensor State Ready Usage ID */
183 1 : #define HID_USAGE_SENSORS_SENSOR_STATE_READY 0x801
184 : /** HID Sensors Sensor State Not Available Usage ID */
185 1 : #define HID_USAGE_SENSORS_SENSOR_STATE_NOT_AVAILABLE 0x802
186 : /** HID Sensors Sensor State No Data Usage ID */
187 1 : #define HID_USAGE_SENSORS_SENSOR_STATE_NO_DATA 0x803
188 : /** HID Sensors Sensor State Initializing Usage ID */
189 1 : #define HID_USAGE_SENSORS_SENSOR_STATE_INITIALIZING 0x804
190 : /** HID Sensors Sensor State Access Denied Usage ID */
191 1 : #define HID_USAGE_SENSORS_SENSOR_STATE_ACCESS_DENIED 0x805
192 : /** HID Sensors Sensor State Error Usage ID */
193 1 : #define HID_USAGE_SENSORS_SENSOR_STATE_ERROR 0x806
194 :
195 : /**
196 : * @}
197 : */
198 :
199 : /**
200 : * @defgroup usb_hid_items USB HID Item helpers
201 : * @{
202 : */
203 :
204 : /**
205 : * @brief Define HID short item.
206 : *
207 : * @param bTag Item tag
208 : * @param bType Item type
209 : * @param bSize Item data size
210 : * @return HID Input item
211 : */
212 1 : #define HID_ITEM(bTag, bType, bSize) (((bTag & 0xF) << 4) | \
213 : ((bType & 0x3) << 2) | (bSize & 0x3))
214 :
215 : /**
216 : * @brief Define HID Input item with the data length of one byte.
217 : *
218 : * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
219 : * @ref HID_KEYBOARD_REPORT_DESC()
220 : *
221 : * @param a Input item data
222 : * @return HID Input item
223 : */
224 1 : #define HID_INPUT(a) \
225 : HID_ITEM(HID_ITEM_TAG_INPUT, HID_ITEM_TYPE_MAIN, 1), a
226 :
227 : /**
228 : * @brief Define HID Output item with the data length of one byte.
229 : *
230 : * For usage examples, see @ref HID_KEYBOARD_REPORT_DESC()
231 : *
232 : * @param a Output item data
233 : * @return HID Output item
234 : */
235 1 : #define HID_OUTPUT(a) \
236 : HID_ITEM(HID_ITEM_TAG_OUTPUT, HID_ITEM_TYPE_MAIN, 1), a
237 :
238 : /**
239 : * @brief Define HID Feature item with the data length of one byte.
240 : *
241 : * @param a Feature item data
242 : * @return HID Feature item
243 : */
244 1 : #define HID_FEATURE(a) \
245 : HID_ITEM(HID_ITEM_TAG_FEATURE, HID_ITEM_TYPE_MAIN, 1), a
246 :
247 : /**
248 : * @brief Define HID Collection item with the data length of one byte.
249 : *
250 : * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
251 : * @ref HID_KEYBOARD_REPORT_DESC()
252 : *
253 : * @param a Collection item data
254 : * @return HID Collection item
255 : */
256 1 : #define HID_COLLECTION(a) \
257 : HID_ITEM(HID_ITEM_TAG_COLLECTION, HID_ITEM_TYPE_MAIN, 1), a
258 :
259 : /**
260 : * @brief Define HID End Collection (non-data) item.
261 : *
262 : * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
263 : * @ref HID_KEYBOARD_REPORT_DESC()
264 : *
265 : * @return HID End Collection item
266 : */
267 1 : #define HID_END_COLLECTION \
268 : HID_ITEM(HID_ITEM_TAG_COLLECTION_END, HID_ITEM_TYPE_MAIN, 0)
269 :
270 : /**
271 : * @brief Define HID Usage Page item.
272 : *
273 : * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
274 : * @ref HID_KEYBOARD_REPORT_DESC()
275 : *
276 : * @param page Usage Page
277 : * @return HID Usage Page item
278 : */
279 1 : #define HID_USAGE_PAGE(page) \
280 : HID_ITEM(HID_ITEM_TAG_USAGE_PAGE, HID_ITEM_TYPE_GLOBAL, 1), page
281 :
282 : /**
283 : * @brief Define HID Logical Minimum item with the data length of one byte.
284 : *
285 : * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
286 : * @ref HID_KEYBOARD_REPORT_DESC()
287 : *
288 : * @param a Minimum value in logical units
289 : * @return HID Logical Minimum item
290 : */
291 1 : #define HID_LOGICAL_MIN8(a) \
292 : HID_ITEM(HID_ITEM_TAG_LOGICAL_MIN, HID_ITEM_TYPE_GLOBAL, 1), a
293 :
294 : /**
295 : * @brief Define HID Logical Maximum item with the data length of one byte.
296 : *
297 : * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
298 : * @ref HID_KEYBOARD_REPORT_DESC()
299 : *
300 : * @param a Maximum value in logical units
301 : * @return HID Logical Maximum item
302 : */
303 1 : #define HID_LOGICAL_MAX8(a) \
304 : HID_ITEM(HID_ITEM_TAG_LOGICAL_MAX, HID_ITEM_TYPE_GLOBAL, 1), a
305 :
306 : /**
307 : * @brief Define HID Logical Minimum item with the data length of two bytes.
308 : *
309 : * @param a Minimum value lower byte
310 : * @param b Minimum value higher byte
311 : * @return HID Logical Minimum item
312 : */
313 1 : #define HID_LOGICAL_MIN16(a, b) \
314 : HID_ITEM(HID_ITEM_TAG_LOGICAL_MIN, HID_ITEM_TYPE_GLOBAL, 2), a, b
315 :
316 : /**
317 : * @brief Define HID Logical Maximum item with the data length of two bytes.
318 : *
319 : * @param a Minimum value lower byte
320 : * @param b Minimum value higher byte
321 : * @return HID Logical Maximum item
322 : */
323 1 : #define HID_LOGICAL_MAX16(a, b) \
324 : HID_ITEM(HID_ITEM_TAG_LOGICAL_MAX, HID_ITEM_TYPE_GLOBAL, 2), a, b
325 :
326 : /**
327 : * @brief Define HID Logical Minimum item with the data length of four bytes.
328 : *
329 : * @param a Minimum value lower byte
330 : * @param b Minimum value low middle byte
331 : * @param c Minimum value high middle byte
332 : * @param d Minimum value higher byte
333 : * @return HID Logical Minimum item
334 : */
335 1 : #define HID_LOGICAL_MIN32(a, b, c, d) \
336 : HID_ITEM(HID_ITEM_TAG_LOGICAL_MIN, HID_ITEM_TYPE_GLOBAL, 3), a, b, c, d
337 :
338 : /**
339 : * @brief Define HID Logical Maximum item with the data length of four bytes.
340 : *
341 : * @param a Minimum value lower byte
342 : * @param b Minimum value low middle byte
343 : * @param c Minimum value high middle byte
344 : * @param d Minimum value higher byte
345 : * @return HID Logical Maximum item
346 : */
347 1 : #define HID_LOGICAL_MAX32(a, b, c, d) \
348 : HID_ITEM(HID_ITEM_TAG_LOGICAL_MAX, HID_ITEM_TYPE_GLOBAL, 3), a, b, c, d
349 :
350 : /**
351 : * @brief Define HID Report Size item with the data length of one byte.
352 : *
353 : * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
354 : * @ref HID_KEYBOARD_REPORT_DESC()
355 : *
356 : * @param size Report field size in bits
357 : * @return HID Report Size item
358 : */
359 1 : #define HID_REPORT_SIZE(size) \
360 : HID_ITEM(HID_ITEM_TAG_REPORT_SIZE, HID_ITEM_TYPE_GLOBAL, 1), size
361 :
362 : /**
363 : * @brief Define HID Report ID item with the data length of one byte.
364 : *
365 : * @param id Report ID
366 : * @return HID Report ID item
367 : */
368 1 : #define HID_REPORT_ID(id) \
369 : HID_ITEM(HID_ITEM_TAG_REPORT_ID, HID_ITEM_TYPE_GLOBAL, 1), id
370 :
371 : /**
372 : * @brief Define HID Report Count item with the data length of one byte.
373 : *
374 : * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
375 : * @ref HID_KEYBOARD_REPORT_DESC()
376 : *
377 : * @param count Number of data fields included in the report
378 : * @return HID Report Count item
379 : */
380 1 : #define HID_REPORT_COUNT(count) \
381 : HID_ITEM(HID_ITEM_TAG_REPORT_COUNT, HID_ITEM_TYPE_GLOBAL, 1), count
382 :
383 : /**
384 : * @brief Define HID Usage Index item with the data length of one byte.
385 : *
386 : * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
387 : * @ref HID_KEYBOARD_REPORT_DESC()
388 : *
389 : * @param idx HID Usage ID per the HID Usage Table
390 : * @return HID Usage Index item
391 : */
392 1 : #define HID_USAGE(idx) \
393 : HID_ITEM(HID_ITEM_TAG_USAGE, HID_ITEM_TYPE_LOCAL, 1), idx
394 :
395 : /**
396 : * @brief Define HID Usage Index item with the data length of two bytes.
397 : *
398 : * @param idx HID Usage ID per the HID Usage Table
399 : * @return HID Usage Index item
400 : */
401 1 : #define HID_USAGE16(idx) \
402 : HID_ITEM(HID_ITEM_TAG_USAGE, HID_ITEM_TYPE_LOCAL, 2), (uint8_t)idx, (idx >> 8)
403 :
404 : /**
405 : * @brief Define HID Usage Minimum item with the data length of one byte.
406 : *
407 : * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
408 : * @ref HID_KEYBOARD_REPORT_DESC()
409 : *
410 : * @param a Starting Usage
411 : * @return HID Usage Minimum item
412 : */
413 1 : #define HID_USAGE_MIN8(a) \
414 : HID_ITEM(HID_ITEM_TAG_USAGE_MIN, HID_ITEM_TYPE_LOCAL, 1), a
415 :
416 : /**
417 : * @brief Define HID Usage Maximum item with the data length of one byte.
418 : *
419 : * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
420 : * @ref HID_KEYBOARD_REPORT_DESC()
421 : *
422 : * @param a Ending Usage
423 : * @return HID Usage Maximum item
424 : */
425 1 : #define HID_USAGE_MAX8(a) \
426 : HID_ITEM(HID_ITEM_TAG_USAGE_MAX, HID_ITEM_TYPE_LOCAL, 1), a
427 :
428 : /**
429 : * @brief Define HID Usage Minimum item with the data length of two bytes.
430 : *
431 : * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
432 : * @ref HID_KEYBOARD_REPORT_DESC()
433 : *
434 : * @param a Starting Usage lower byte
435 : * @param b Starting Usage higher byte
436 : * @return HID Usage Minimum item
437 : */
438 1 : #define HID_USAGE_MIN16(a, b) \
439 : HID_ITEM(HID_ITEM_TAG_USAGE_MIN, HID_ITEM_TYPE_LOCAL, 2), a, b
440 :
441 : /**
442 : * @brief Define HID Usage Maximum item with the data length of two bytes.
443 : *
444 : * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
445 : * @ref HID_KEYBOARD_REPORT_DESC()
446 : *
447 : * @param a Ending Usage lower byte
448 : * @param b Ending Usage higher byte
449 : * @return HID Usage Maximum item
450 : */
451 1 : #define HID_USAGE_MAX16(a, b) \
452 : HID_ITEM(HID_ITEM_TAG_USAGE_MAX, HID_ITEM_TYPE_LOCAL, 2), a, b
453 :
454 : /**
455 : * @brief Define HID Unit Exponent item.
456 : *
457 : * @param exp Unit exponent, refer to the HID Unit Exponent table
458 : * in the specification for usage
459 : * @return HID Unit Exponent item
460 : */
461 1 : #define HID_UNIT_EXPONENT(exp) HID_ITEM(HID_ITEM_TAG_UNIT_EXPONENT, HID_ITEM_TYPE_GLOBAL, 1), exp
462 :
463 : /**
464 : * @}
465 : */
466 :
467 : /**
468 : * @defgroup usb_hid_mk_report_desc Mouse and keyboard report descriptors
469 : * @{
470 : */
471 :
472 : /**
473 : * @brief Simple HID mouse report descriptor for n button mouse.
474 : *
475 : * @param bcnt Button count. Allowed values from 1 to 8.
476 : */
477 1 : #define HID_MOUSE_REPORT_DESC(bcnt) { \
478 : HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP), \
479 : HID_USAGE(HID_USAGE_GEN_DESKTOP_MOUSE), \
480 : HID_COLLECTION(HID_COLLECTION_APPLICATION), \
481 : HID_USAGE(HID_USAGE_GEN_DESKTOP_POINTER), \
482 : HID_COLLECTION(HID_COLLECTION_PHYSICAL), \
483 : /* Bits used for button signalling */ \
484 : HID_USAGE_PAGE(HID_USAGE_GEN_BUTTON), \
485 : HID_USAGE_MIN8(1), \
486 : HID_USAGE_MAX8(bcnt), \
487 : HID_LOGICAL_MIN8(0), \
488 : HID_LOGICAL_MAX8(1), \
489 : HID_REPORT_SIZE(1), \
490 : HID_REPORT_COUNT(bcnt), \
491 : /* HID_INPUT (Data,Var,Abs) */ \
492 : HID_INPUT(0x02), \
493 : /* Unused bits */ \
494 : HID_REPORT_SIZE(8 - bcnt), \
495 : HID_REPORT_COUNT(1), \
496 : /* HID_INPUT (Cnst,Ary,Abs) */ \
497 : HID_INPUT(1), \
498 : /* X and Y axis, scroll */ \
499 : HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP), \
500 : HID_USAGE(HID_USAGE_GEN_DESKTOP_X), \
501 : HID_USAGE(HID_USAGE_GEN_DESKTOP_Y), \
502 : HID_USAGE(HID_USAGE_GEN_DESKTOP_WHEEL), \
503 : HID_LOGICAL_MIN8(-127), \
504 : HID_LOGICAL_MAX8(127), \
505 : HID_REPORT_SIZE(8), \
506 : HID_REPORT_COUNT(3), \
507 : /* HID_INPUT (Data,Var,Rel) */ \
508 : HID_INPUT(0x06), \
509 : HID_END_COLLECTION, \
510 : HID_END_COLLECTION, \
511 : }
512 :
513 : /**
514 : * @brief Simple HID keyboard report descriptor.
515 : */
516 1 : #define HID_KEYBOARD_REPORT_DESC() { \
517 : HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP), \
518 : HID_USAGE(HID_USAGE_GEN_DESKTOP_KEYBOARD), \
519 : HID_COLLECTION(HID_COLLECTION_APPLICATION), \
520 : HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP_KEYPAD), \
521 : /* HID_USAGE_MINIMUM(Keyboard LeftControl) */ \
522 : HID_USAGE_MIN8(0xE0), \
523 : /* HID_USAGE_MAXIMUM(Keyboard Right GUI) */ \
524 : HID_USAGE_MAX8(0xE7), \
525 : HID_LOGICAL_MIN8(0), \
526 : HID_LOGICAL_MAX8(1), \
527 : HID_REPORT_SIZE(1), \
528 : HID_REPORT_COUNT(8), \
529 : /* HID_INPUT(Data,Var,Abs) */ \
530 : HID_INPUT(0x02), \
531 : HID_REPORT_SIZE(8), \
532 : HID_REPORT_COUNT(1), \
533 : /* HID_INPUT(Cnst,Var,Abs) */ \
534 : HID_INPUT(0x03), \
535 : HID_REPORT_SIZE(1), \
536 : HID_REPORT_COUNT(5), \
537 : HID_USAGE_PAGE(HID_USAGE_GEN_LEDS), \
538 : /* HID_USAGE_MINIMUM(Num Lock) */ \
539 : HID_USAGE_MIN8(1), \
540 : /* HID_USAGE_MAXIMUM(Kana) */ \
541 : HID_USAGE_MAX8(5), \
542 : /* HID_OUTPUT(Data,Var,Abs) */ \
543 : HID_OUTPUT(0x02), \
544 : HID_REPORT_SIZE(3), \
545 : HID_REPORT_COUNT(1), \
546 : /* HID_OUTPUT(Cnst,Var,Abs) */ \
547 : HID_OUTPUT(0x03), \
548 : HID_REPORT_SIZE(8), \
549 : HID_REPORT_COUNT(6), \
550 : HID_LOGICAL_MIN8(0), \
551 : HID_LOGICAL_MAX8(101), \
552 : HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP_KEYPAD), \
553 : /* HID_USAGE_MIN8(Reserved) */ \
554 : HID_USAGE_MIN8(0), \
555 : /* HID_USAGE_MAX8(Keyboard Application) */ \
556 : HID_USAGE_MAX8(101), \
557 : /* HID_INPUT (Data,Ary,Abs) */ \
558 : HID_INPUT(0x00), \
559 : HID_END_COLLECTION, \
560 : }
561 :
562 : /**
563 : * @brief HID keyboard button codes.
564 : */
565 0 : enum hid_kbd_code {
566 : HID_KEY_A = 4,
567 : HID_KEY_B = 5,
568 : HID_KEY_C = 6,
569 : HID_KEY_D = 7,
570 : HID_KEY_E = 8,
571 : HID_KEY_F = 9,
572 : HID_KEY_G = 10,
573 : HID_KEY_H = 11,
574 : HID_KEY_I = 12,
575 : HID_KEY_J = 13,
576 : HID_KEY_K = 14,
577 : HID_KEY_L = 15,
578 : HID_KEY_M = 16,
579 : HID_KEY_N = 17,
580 : HID_KEY_O = 18,
581 : HID_KEY_P = 19,
582 : HID_KEY_Q = 20,
583 : HID_KEY_R = 21,
584 : HID_KEY_S = 22,
585 : HID_KEY_T = 23,
586 : HID_KEY_U = 24,
587 : HID_KEY_V = 25,
588 : HID_KEY_W = 26,
589 : HID_KEY_X = 27,
590 : HID_KEY_Y = 28,
591 : HID_KEY_Z = 29,
592 : HID_KEY_1 = 30,
593 : HID_KEY_2 = 31,
594 : HID_KEY_3 = 32,
595 : HID_KEY_4 = 33,
596 : HID_KEY_5 = 34,
597 : HID_KEY_6 = 35,
598 : HID_KEY_7 = 36,
599 : HID_KEY_8 = 37,
600 : HID_KEY_9 = 38,
601 : HID_KEY_0 = 39,
602 : HID_KEY_ENTER = 40,
603 : HID_KEY_ESC = 41,
604 : HID_KEY_BACKSPACE = 42,
605 : HID_KEY_TAB = 43,
606 : HID_KEY_SPACE = 44,
607 : HID_KEY_MINUS = 45,
608 : HID_KEY_EQUAL = 46,
609 : HID_KEY_LEFTBRACE = 47,
610 : HID_KEY_RIGHTBRACE = 48,
611 : HID_KEY_BACKSLASH = 49,
612 : HID_KEY_HASH = 50, /* Non-US # and ~ */
613 : HID_KEY_SEMICOLON = 51,
614 : HID_KEY_APOSTROPHE = 52,
615 : HID_KEY_GRAVE = 53,
616 : HID_KEY_COMMA = 54,
617 : HID_KEY_DOT = 55,
618 : HID_KEY_SLASH = 56,
619 : HID_KEY_CAPSLOCK = 57,
620 : HID_KEY_F1 = 58,
621 : HID_KEY_F2 = 59,
622 : HID_KEY_F3 = 60,
623 : HID_KEY_F4 = 61,
624 : HID_KEY_F5 = 62,
625 : HID_KEY_F6 = 63,
626 : HID_KEY_F7 = 64,
627 : HID_KEY_F8 = 65,
628 : HID_KEY_F9 = 66,
629 : HID_KEY_F10 = 67,
630 : HID_KEY_F11 = 68,
631 : HID_KEY_F12 = 69,
632 : HID_KEY_SYSRQ = 70, /* PRINTSCREEN */
633 : HID_KEY_SCROLLLOCK = 71,
634 : HID_KEY_PAUSE = 72,
635 : HID_KEY_INSERT = 73,
636 : HID_KEY_HOME = 74,
637 : HID_KEY_PAGEUP = 75,
638 : HID_KEY_DELETE = 76,
639 : HID_KEY_END = 77,
640 : HID_KEY_PAGEDOWN = 78,
641 : HID_KEY_RIGHT = 79,
642 : HID_KEY_LEFT = 80,
643 : HID_KEY_DOWN = 81,
644 : HID_KEY_UP = 82,
645 : HID_KEY_NUMLOCK = 83,
646 : HID_KEY_KPSLASH = 84, /* NUMPAD DIVIDE */
647 : HID_KEY_KPASTERISK = 85, /* NUMPAD MULTIPLY */
648 : HID_KEY_KPMINUS = 86,
649 : HID_KEY_KPPLUS = 87,
650 : HID_KEY_KPENTER = 88,
651 : HID_KEY_KP_1 = 89,
652 : HID_KEY_KP_2 = 90,
653 : HID_KEY_KP_3 = 91,
654 : HID_KEY_KP_4 = 92,
655 : HID_KEY_KP_5 = 93,
656 : HID_KEY_KP_6 = 94,
657 : HID_KEY_KP_7 = 95,
658 : HID_KEY_KP_8 = 96,
659 : HID_KEY_KP_9 = 97,
660 : HID_KEY_KP_0 = 98,
661 : };
662 :
663 : /**
664 : * @brief HID keyboard modifiers.
665 : */
666 0 : enum hid_kbd_modifier {
667 : HID_KBD_MODIFIER_NONE = 0x00,
668 : HID_KBD_MODIFIER_LEFT_CTRL = 0x01,
669 : HID_KBD_MODIFIER_LEFT_SHIFT = 0x02,
670 : HID_KBD_MODIFIER_LEFT_ALT = 0x04,
671 : HID_KBD_MODIFIER_LEFT_UI = 0x08,
672 : HID_KBD_MODIFIER_RIGHT_CTRL = 0x10,
673 : HID_KBD_MODIFIER_RIGHT_SHIFT = 0x20,
674 : HID_KBD_MODIFIER_RIGHT_ALT = 0x40,
675 : HID_KBD_MODIFIER_RIGHT_UI = 0x80,
676 : };
677 :
678 : /**
679 : * @brief HID keyboard LEDs.
680 : */
681 0 : enum hid_kbd_led {
682 : HID_KBD_LED_NUM_LOCK = 0x01,
683 : HID_KBD_LED_CAPS_LOCK = 0x02,
684 : HID_KBD_LED_SCROLL_LOCK = 0x04,
685 : HID_KBD_LED_COMPOSE = 0x08,
686 : HID_KBD_LED_KANA = 0x10,
687 : };
688 :
689 : /**
690 : * @}
691 : */
692 :
693 : /**
694 : * @}
695 : */
696 :
697 : #ifdef __cplusplus
698 : }
699 : #endif
700 :
701 : #endif /* ZEPHYR_INCLUDE_USB_CLASS_HID_H_ */
|