dev hid enhancement, add report descriptor templates for keyboard, mouse, consumer, syscontrol, gamepad
This commit is contained in:
		| @@ -609,106 +609,6 @@ enum | ||||
|   HID_USAGE_CONSUMER_AC_PAN                            = 0x0238, | ||||
| }; | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // HID Report Descriptor Template | ||||
| //--------------------------------------------------------------------+ | ||||
|  | ||||
| /*------------- Keyboard Descriptor Template -------------*/ | ||||
| #define HID_REPORT_DESC_KEYBOARD(...) \ | ||||
|   HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP     )                    ,\ | ||||
|   HID_USAGE      ( HID_USAGE_DESKTOP_KEYBOARD )                    ,\ | ||||
|   HID_COLLECTION ( HID_COLLECTION_APPLICATION )                    ,\ | ||||
|     /* 8 bits Modifier Keys (Shfit, Control, Alt) */ \ | ||||
|     __VA_ARGS__ \ | ||||
|     HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD )                     ,\ | ||||
|       HID_USAGE_MIN    ( 224                                    )  ,\ | ||||
|       HID_USAGE_MAX    ( 231                                    )  ,\ | ||||
|       HID_LOGICAL_MIN  ( 0                                      )  ,\ | ||||
|       HID_LOGICAL_MAX  ( 1                                      )  ,\ | ||||
|       HID_REPORT_COUNT ( 8                                      )  ,\ | ||||
|       HID_REPORT_SIZE  ( 1                                      )  ,\ | ||||
|       HID_INPUT        ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE )  ,\ | ||||
|       /* 8 bit reserved */ \ | ||||
|       HID_REPORT_COUNT ( 1                                      )  ,\ | ||||
|       HID_REPORT_SIZE  ( 8                                      )  ,\ | ||||
|       HID_INPUT        ( HID_CONSTANT                           )  ,\ | ||||
|     /* 6-byte Keycodes */ \ | ||||
|     HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD )                     ,\ | ||||
|       HID_USAGE_MIN    ( 0                                   )     ,\ | ||||
|       HID_USAGE_MAX    ( 255                                 )     ,\ | ||||
|       HID_LOGICAL_MIN  ( 0                                   )     ,\ | ||||
|       HID_LOGICAL_MAX  ( 255                                 )     ,\ | ||||
|       HID_REPORT_COUNT ( 6                                   )     ,\ | ||||
|       HID_REPORT_SIZE  ( 8                                   )     ,\ | ||||
|       HID_INPUT        ( HID_DATA | HID_ARRAY | HID_ABSOLUTE )     ,\ | ||||
|     /* 5-bit LED Indicator Kana | Compose | ScrollLock | CapsLock | NumLock */ \ | ||||
|     HID_USAGE_PAGE  ( HID_USAGE_PAGE_LED                   )       ,\ | ||||
|       HID_USAGE_MIN    ( 1                                       ) ,\ | ||||
|       HID_USAGE_MAX    ( 5                                       ) ,\ | ||||
|       HID_REPORT_COUNT ( 5                                       ) ,\ | ||||
|       HID_REPORT_SIZE  ( 1                                       ) ,\ | ||||
|       HID_OUTPUT       ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE  ) ,\ | ||||
|       /* led padding */ \ | ||||
|       HID_REPORT_COUNT ( 1                                       ) ,\ | ||||
|       HID_REPORT_SIZE  ( 3                                       ) ,\ | ||||
|       HID_OUTPUT       ( HID_CONSTANT                            ) ,\ | ||||
|   HID_COLLECTION_END \ | ||||
|  | ||||
| /*------------- Mouse Descriptor Template -------------*/ | ||||
| #define HID_REPORT_DESC_MOUSE(...) \ | ||||
|   HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP      )                    ,\ | ||||
|   HID_USAGE      ( HID_USAGE_DESKTOP_MOUSE     )                    ,\ | ||||
|   HID_COLLECTION ( HID_COLLECTION_APPLICATION  )                    ,\ | ||||
|     __VA_ARGS__ \ | ||||
|     HID_USAGE      ( HID_USAGE_DESKTOP_POINTER )                    ,\ | ||||
|     HID_COLLECTION ( HID_COLLECTION_PHYSICAL   )                    ,\ | ||||
|       HID_USAGE_PAGE  ( HID_USAGE_PAGE_BUTTON  )                    ,\ | ||||
|         HID_USAGE_MIN    ( 1                                      ) ,\ | ||||
|         HID_USAGE_MAX    ( 3                                      ) ,\ | ||||
|         HID_LOGICAL_MIN  ( 0                                      ) ,\ | ||||
|         HID_LOGICAL_MAX  ( 1                                      ) ,\ | ||||
|         /* Left, Right, Middle, Backward, Forward mouse buttons */   \ | ||||
|         HID_REPORT_COUNT ( 3                                      ) ,\ | ||||
|         HID_REPORT_SIZE  ( 1                                      ) ,\ | ||||
|         HID_INPUT        ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ | ||||
|         /* 3 bit padding */ \ | ||||
|         HID_REPORT_COUNT ( 1                                      ) ,\ | ||||
|         HID_REPORT_SIZE  ( 5                                      ) ,\ | ||||
|         HID_INPUT        ( HID_CONSTANT                           ) ,\ | ||||
|       HID_USAGE_PAGE  ( HID_USAGE_PAGE_DESKTOP )                    ,\ | ||||
|         /* X, Y position [-127, 127] */ \ | ||||
|         HID_USAGE        ( HID_USAGE_DESKTOP_X                    ) ,\ | ||||
|         HID_USAGE        ( HID_USAGE_DESKTOP_Y                    ) ,\ | ||||
|         HID_LOGICAL_MIN  ( 0x81                                   ) ,\ | ||||
|         HID_LOGICAL_MAX  ( 0x7f                                   ) ,\ | ||||
|         HID_REPORT_COUNT ( 2                                      ) ,\ | ||||
|         HID_REPORT_SIZE  ( 8                                      ) ,\ | ||||
|         HID_INPUT        ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\ | ||||
|         /* Mouse scroll [-127, 127] */ \ | ||||
|         HID_USAGE       ( HID_USAGE_DESKTOP_WHEEL                )  ,\ | ||||
|         HID_LOGICAL_MIN ( 0x81                                   )  ,\ | ||||
|         HID_LOGICAL_MAX ( 0x7f                                   )  ,\ | ||||
|         HID_REPORT_COUNT( 1                                      )  ,\ | ||||
|         HID_REPORT_SIZE ( 8                                      )  ,\ | ||||
|         HID_INPUT       ( HID_DATA | HID_VARIABLE | HID_RELATIVE )  ,\ | ||||
|     HID_COLLECTION_END                                              ,\ | ||||
|   HID_COLLECTION_END \ | ||||
|  | ||||
| //------------- Consumer Control Report Template -------------// | ||||
| #define HID_REPORT_DESC_CONSUMER(...) \ | ||||
|   HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER    )              ,\ | ||||
|   HID_USAGE      ( HID_USAGE_CONSUMER_CONTROL )              ,\ | ||||
|   HID_COLLECTION ( HID_COLLECTION_APPLICATION )              ,\ | ||||
|     __VA_ARGS__ \ | ||||
|     HID_LOGICAL_MIN  ( 0x00                                ) ,\ | ||||
|     HID_LOGICAL_MAX_N( 0x03FF, 2                           ) ,\ | ||||
|     HID_USAGE_MIN    ( 0x00                                ) ,\ | ||||
|     HID_USAGE_MAX_N  ( 0x03FF, 2                           ) ,\ | ||||
|     HID_REPORT_COUNT ( 1                                   ) ,\ | ||||
|     HID_REPORT_SIZE  ( 16                                  ) ,\ | ||||
|     HID_INPUT        ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\ | ||||
|   HID_COLLECTION_END \ | ||||
|  | ||||
|  | ||||
| #ifdef __cplusplus | ||||
|  } | ||||
|   | ||||
| @@ -59,7 +59,7 @@ | ||||
| #define ITF_IDX_BOOT_KBD   0 | ||||
| #define ITF_IDX_BOOT_MSE   ( ITF_IDX_BOOT_KBD + (CFG_TUD_HID_KEYBOARD && CFG_TUD_HID_KEYBOARD_BOOT) ) | ||||
| #define ITF_IDX_GENERIC    ( ITF_IDX_BOOT_MSE + (CFG_TUD_HID_MOUSE && CFG_TUD_HID_MOUSE_BOOT) ) | ||||
| #define ITF_COUNT          ( ITF_IDX_GENERIC + TUD_OPT_HID_GENERIC ) | ||||
| #define ITF_COUNT          ( ITF_IDX_GENERIC + 1 ) | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
| @@ -118,8 +118,6 @@ static inline hidd_interface_t* get_interface_by_itfnum(uint8_t itf_num) | ||||
| //--------------------------------------------------------------------+ | ||||
| // HID GENERIC API | ||||
| //--------------------------------------------------------------------+ | ||||
| #if TUD_OPT_HID_GENERIC | ||||
|  | ||||
| bool tud_hid_generic_ready(void) | ||||
| { | ||||
|   return (_hidd_itf[ITF_IDX_GENERIC].ep_in != 0) && !dcd_edpt_busy(TUD_OPT_RHPORT, _hidd_itf[ITF_IDX_GENERIC].ep_in); | ||||
| @@ -145,8 +143,6 @@ bool tud_hid_generic_report(uint8_t report_id, void const* report, uint8_t len) | ||||
|   return dcd_edpt_xfer(TUD_OPT_RHPORT, p_hid->ep_in, p_hid->report_buf, len + ( report_id ? 1 : 0) ); | ||||
| } | ||||
|  | ||||
| #endif // TUD_OPT_HID_GENERIC | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // KEYBOARD APPLICATION API | ||||
| //--------------------------------------------------------------------+ | ||||
| @@ -384,14 +380,12 @@ tusb_error_t hidd_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, u | ||||
|   /*------------- Generic (multiple report) -------------*/ | ||||
|   else | ||||
|   { | ||||
|     #if TUD_OPT_HID_GENERIC | ||||
|     // TODO parse report ID for keyboard, mouse | ||||
|     p_hid = &_hidd_itf[ITF_IDX_GENERIC]; | ||||
|  | ||||
|     p_hid->desc_report   = tud_desc_set.hid_report.generic; | ||||
|     p_hid->get_report_cb = tud_hid_generic_get_report_cb; | ||||
|     p_hid->set_report_cb = tud_hid_generic_set_report_cb; | ||||
|     #endif | ||||
|  | ||||
|     TU_ASSERT(p_hid, ERR_TUD_INVALID_DESCRIPTOR); | ||||
|   } | ||||
|   | ||||
| @@ -197,6 +197,175 @@ ATTR_WEAK void tud_hid_mouse_set_report_cb(uint8_t report_id, hid_report_type_t | ||||
|  | ||||
| #endif | ||||
|  | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // HID Report Descriptor Template | ||||
| //--------------------------------------------------------------------+ | ||||
| /* These template should be used as follow | ||||
|  * - Only 1 report : no parameter | ||||
|  *      uint8_t report_desc[] = { ID_REPORT_DESC_KEYBOARD() }; | ||||
|  * | ||||
|  * - Multiple Reports: "HID_REPORT_ID(ID)," must be passed to template | ||||
|  *      uint8_t report_desc[] = { | ||||
|  *          ID_REPORT_DESC_KEYBOARD( HID_REPORT_ID(1) ,) , | ||||
|  *          HID_REPORT_DESC_MOUSE  ( HID_REPORT_ID(2) ,) | ||||
|  *      }; | ||||
|  */ | ||||
|  | ||||
| /*------------- Keyboard Descriptor Template -------------*/ | ||||
| #define HID_REPORT_DESC_KEYBOARD(...) \ | ||||
|   HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP     )                    ,\ | ||||
|   HID_USAGE      ( HID_USAGE_DESKTOP_KEYBOARD )                    ,\ | ||||
|   HID_COLLECTION ( HID_COLLECTION_APPLICATION )                    ,\ | ||||
|     /* 8 bits Modifier Keys (Shfit, Control, Alt) */ \ | ||||
|     __VA_ARGS__ \ | ||||
|     HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD )                     ,\ | ||||
|       HID_USAGE_MIN    ( 224                                    )  ,\ | ||||
|       HID_USAGE_MAX    ( 231                                    )  ,\ | ||||
|       HID_LOGICAL_MIN  ( 0                                      )  ,\ | ||||
|       HID_LOGICAL_MAX  ( 1                                      )  ,\ | ||||
|       HID_REPORT_COUNT ( 8                                      )  ,\ | ||||
|       HID_REPORT_SIZE  ( 1                                      )  ,\ | ||||
|       HID_INPUT        ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE )  ,\ | ||||
|       /* 8 bit reserved */ \ | ||||
|       HID_REPORT_COUNT ( 1                                      )  ,\ | ||||
|       HID_REPORT_SIZE  ( 8                                      )  ,\ | ||||
|       HID_INPUT        ( HID_CONSTANT                           )  ,\ | ||||
|     /* 6-byte Keycodes */ \ | ||||
|     HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD )                     ,\ | ||||
|       HID_USAGE_MIN    ( 0                                   )     ,\ | ||||
|       HID_USAGE_MAX    ( 255                                 )     ,\ | ||||
|       HID_LOGICAL_MIN  ( 0                                   )     ,\ | ||||
|       HID_LOGICAL_MAX  ( 255                                 )     ,\ | ||||
|       HID_REPORT_COUNT ( 6                                   )     ,\ | ||||
|       HID_REPORT_SIZE  ( 8                                   )     ,\ | ||||
|       HID_INPUT        ( HID_DATA | HID_ARRAY | HID_ABSOLUTE )     ,\ | ||||
|     /* 5-bit LED Indicator Kana | Compose | ScrollLock | CapsLock | NumLock */ \ | ||||
|     HID_USAGE_PAGE  ( HID_USAGE_PAGE_LED                   )       ,\ | ||||
|       HID_USAGE_MIN    ( 1                                       ) ,\ | ||||
|       HID_USAGE_MAX    ( 5                                       ) ,\ | ||||
|       HID_REPORT_COUNT ( 5                                       ) ,\ | ||||
|       HID_REPORT_SIZE  ( 1                                       ) ,\ | ||||
|       HID_OUTPUT       ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE  ) ,\ | ||||
|       /* led padding */ \ | ||||
|       HID_REPORT_COUNT ( 1                                       ) ,\ | ||||
|       HID_REPORT_SIZE  ( 3                                       ) ,\ | ||||
|       HID_OUTPUT       ( HID_CONSTANT                            ) ,\ | ||||
|   HID_COLLECTION_END \ | ||||
|  | ||||
| /*------------- Mouse Descriptor Template -------------*/ | ||||
| #define HID_REPORT_DESC_MOUSE(...) \ | ||||
|   HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP      )                    ,\ | ||||
|   HID_USAGE      ( HID_USAGE_DESKTOP_MOUSE     )                    ,\ | ||||
|   HID_COLLECTION ( HID_COLLECTION_APPLICATION  )                    ,\ | ||||
|     __VA_ARGS__ \ | ||||
|     HID_USAGE      ( HID_USAGE_DESKTOP_POINTER )                    ,\ | ||||
|     HID_COLLECTION ( HID_COLLECTION_PHYSICAL   )                    ,\ | ||||
|       HID_USAGE_PAGE  ( HID_USAGE_PAGE_BUTTON  )                    ,\ | ||||
|         HID_USAGE_MIN    ( 1                                      ) ,\ | ||||
|         HID_USAGE_MAX    ( 3                                      ) ,\ | ||||
|         HID_LOGICAL_MIN  ( 0                                      ) ,\ | ||||
|         HID_LOGICAL_MAX  ( 1                                      ) ,\ | ||||
|         /* Left, Right, Middle, Backward, Forward mouse buttons */   \ | ||||
|         HID_REPORT_COUNT ( 3                                      ) ,\ | ||||
|         HID_REPORT_SIZE  ( 1                                      ) ,\ | ||||
|         HID_INPUT        ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ | ||||
|         /* 3 bit padding */ \ | ||||
|         HID_REPORT_COUNT ( 1                                      ) ,\ | ||||
|         HID_REPORT_SIZE  ( 5                                      ) ,\ | ||||
|         HID_INPUT        ( HID_CONSTANT                           ) ,\ | ||||
|       HID_USAGE_PAGE  ( HID_USAGE_PAGE_DESKTOP )                    ,\ | ||||
|         /* X, Y position [-127, 127] */ \ | ||||
|         HID_USAGE        ( HID_USAGE_DESKTOP_X                    ) ,\ | ||||
|         HID_USAGE        ( HID_USAGE_DESKTOP_Y                    ) ,\ | ||||
|         HID_LOGICAL_MIN  ( 0x81                                   ) ,\ | ||||
|         HID_LOGICAL_MAX  ( 0x7f                                   ) ,\ | ||||
|         HID_REPORT_COUNT ( 2                                      ) ,\ | ||||
|         HID_REPORT_SIZE  ( 8                                      ) ,\ | ||||
|         HID_INPUT        ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\ | ||||
|         /* Mouse scroll [-127, 127] */ \ | ||||
|         HID_USAGE       ( HID_USAGE_DESKTOP_WHEEL                )  ,\ | ||||
|         HID_LOGICAL_MIN ( 0x81                                   )  ,\ | ||||
|         HID_LOGICAL_MAX ( 0x7f                                   )  ,\ | ||||
|         HID_REPORT_COUNT( 1                                      )  ,\ | ||||
|         HID_REPORT_SIZE ( 8                                      )  ,\ | ||||
|         HID_INPUT       ( HID_DATA | HID_VARIABLE | HID_RELATIVE )  ,\ | ||||
|     HID_COLLECTION_END                                              ,\ | ||||
|   HID_COLLECTION_END \ | ||||
|  | ||||
| //------------- Consumer Control Report Template -------------// | ||||
| #define HID_REPORT_DESC_CONSUMER(...) \ | ||||
|   HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER    )              ,\ | ||||
|   HID_USAGE      ( HID_USAGE_CONSUMER_CONTROL )              ,\ | ||||
|   HID_COLLECTION ( HID_COLLECTION_APPLICATION )              ,\ | ||||
|     __VA_ARGS__ \ | ||||
|     HID_LOGICAL_MIN  ( 0x00                                ) ,\ | ||||
|     HID_LOGICAL_MAX_N( 0x03FF, 2                           ) ,\ | ||||
|     HID_USAGE_MIN    ( 0x00                                ) ,\ | ||||
|     HID_USAGE_MAX_N  ( 0x03FF, 2                           ) ,\ | ||||
|     HID_REPORT_COUNT ( 1                                   ) ,\ | ||||
|     HID_REPORT_SIZE  ( 16                                  ) ,\ | ||||
|     HID_INPUT        ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\ | ||||
|   HID_COLLECTION_END \ | ||||
|  | ||||
| //------------- System Control Report Template -------------// | ||||
| /* 0x00 - do nothing | ||||
|  * 0x01 - Power Off | ||||
|  * 0x02 - Standby | ||||
|  * 0x04 - Wake Host | ||||
|  */ | ||||
| #define HID_REPORT_DESC_SYSTEM_CONTROL(...) \ | ||||
|   HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP           )        ,\ | ||||
|   HID_USAGE      ( HID_USAGE_DESKTOP_SYSTEM_CONTROL )        ,\ | ||||
|   HID_COLLECTION ( HID_COLLECTION_APPLICATION       )        ,\ | ||||
|     __VA_ARGS__ \ | ||||
|     /* 2 bit system power control */ \ | ||||
|     HID_LOGICAL_MIN  ( 1                                   ) ,\ | ||||
|     HID_LOGICAL_MAX  ( 3                                   ) ,\ | ||||
|     HID_REPORT_COUNT ( 1                                   ) ,\ | ||||
|     HID_REPORT_SIZE  ( 2                                   ) ,\ | ||||
|     HID_USAGE        ( HID_USAGE_DESKTOP_SYSTEM_SLEEP      ) ,\ | ||||
|     HID_USAGE        ( HID_USAGE_DESKTOP_SYSTEM_POWER_DOWN ) ,\ | ||||
|     HID_USAGE        ( HID_USAGE_DESKTOP_SYSTEM_WAKE_UP    ) ,\ | ||||
|     HID_INPUT        ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\ | ||||
|     /* 6 bit padding */ \ | ||||
|     HID_REPORT_COUNT ( 1                                   ) ,\ | ||||
|     HID_REPORT_SIZE  ( 6                                   ) ,\ | ||||
|     HID_INPUT        ( HID_CONSTANT                        ) ,\ | ||||
|   HID_COLLECTION_END \ | ||||
|  | ||||
| //------------- Gamepad Report Template -------------// | ||||
| // Gamepad with 16 buttons and 2 joysticks | ||||
| // | Button Map (2 bytes) |  X | Y | Z | Rz | ||||
| #define HID_REPORT_DESC_GAMEPAD(...) \ | ||||
|   HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP     )        ,\ | ||||
|   HID_USAGE      ( HID_USAGE_DESKTOP_GAMEPAD  )        ,\ | ||||
|   HID_COLLECTION ( HID_COLLECTION_APPLICATION )        ,\ | ||||
|     __VA_ARGS__ \ | ||||
|     /* 16 bit Button Map */ \ | ||||
|     HID_USAGE_PAGE   ( HID_USAGE_PAGE_BUTTON                  ) ,\ | ||||
|     HID_USAGE_MIN    ( 1                                      ) ,\ | ||||
|     HID_USAGE_MAX    ( 16                                     ) ,\ | ||||
|     HID_LOGICAL_MIN  ( 0                                      ) ,\ | ||||
|     HID_LOGICAL_MAX  ( 1                                      ) ,\ | ||||
|     HID_REPORT_COUNT ( 16                                     ) ,\ | ||||
|     HID_REPORT_SIZE  ( 1                                      ) ,\ | ||||
|     HID_INPUT        ( HID_DATA | HID_ARRAY | HID_ABSOLUTE    ) ,\ | ||||
|     /* X, Y, Z, Rz (min -127, max 127 ) */ \ | ||||
|     HID_USAGE_PAGE   ( HID_USAGE_PAGE_DESKTOP                 ) ,\ | ||||
|     HID_LOGICAL_MIN  ( 0x81                                   ) ,\ | ||||
|     HID_LOGICAL_MAX  ( 0x7f                                   ) ,\ | ||||
|     HID_USAGE        ( HID_USAGE_DESKTOP_X                    ) ,\ | ||||
|     HID_USAGE        ( HID_USAGE_DESKTOP_Y                    ) ,\ | ||||
|     HID_USAGE        ( HID_USAGE_DESKTOP_Z                    ) ,\ | ||||
|     HID_USAGE        ( HID_USAGE_DESKTOP_RZ                   ) ,\ | ||||
|     HID_REPORT_COUNT ( 4                                      ) ,\ | ||||
|     HID_REPORT_SIZE  ( 8                                      ) ,\ | ||||
|     HID_INPUT        ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\ | ||||
|   HID_COLLECTION_END \ | ||||
|  | ||||
|  | ||||
|  | ||||
| /** @} */ | ||||
| /** @} */ | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 hathach
					hathach