diff options
| author | hathach <[email protected]> | 2018-07-28 18:14:30 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2018-07-28 18:14:30 +0700 |
| commit | c729db229422a2771be394ea4ac8de65eac619e4 (patch) | |
| tree | 2e57deaccda8bd330513d2192475dfa421b56d61 /src | |
| parent | 6034553be7fed82e56da572fad798220117e8f1f (diff) | |
beter hid report
Diffstat (limited to 'src')
| -rw-r--r-- | src/class/hid/hid_device.c | 2 | ||||
| -rw-r--r-- | src/device/usbd.c | 8 | ||||
| -rw-r--r-- | src/device/usbd_desc.c | 181 |
3 files changed, 93 insertions, 98 deletions
diff --git a/src/class/hid/hid_device.c b/src/class/hid/hid_device.c index 0b4116009..e0ed2e719 100644 --- a/src/class/hid/hid_device.c +++ b/src/class/hid/hid_device.c @@ -287,6 +287,7 @@ tusb_error_t hidd_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, u *p_len = 0;
+ /*------------- Boot protocol only keyboard & mouse -------------*/
if (desc_itf->bInterfaceSubClass == HID_SUBCLASS_BOOT)
{
TU_ASSERT(desc_itf->bInterfaceProtocol == HID_PROTOCOL_KEYBOARD || desc_itf->bInterfaceProtocol == HID_PROTOCOL_MOUSE, ERR_TUD_INVALID_DESCRIPTOR);
@@ -326,6 +327,7 @@ tusb_error_t hidd_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, u *p_len = sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + sizeof(tusb_desc_endpoint_t);
}
+ /*------------- Generic (multiple report) -------------*/
else
{
// TODO HID generic
diff --git a/src/device/usbd.c b/src/device/usbd.c index f6b55a81d..49fee44c2 100644 --- a/src/device/usbd.c +++ b/src/device/usbd.c @@ -319,13 +319,13 @@ static void usbd_reset(uint8_t rhport) tud_desc_set.config = _desc_auto_config;
#if CFG_TUD_HID_KEYBOARD && CFG_TUD_DESC_BOOT_KEYBOARD
- extern uint8_t const _desc_auto_hid_kbd_report[];
- tud_desc_set.hid_report.boot_keyboard = _desc_auto_hid_kbd_report;
+ extern uint8_t const _desc_auto_hid_boot_kbd_report[];
+ tud_desc_set.hid_report.boot_keyboard = _desc_auto_hid_boot_kbd_report;
#endif
#if CFG_TUD_HID_MOUSE && CFG_TUD_DESC_BOOT_MOUSE
- extern uint8_t const _desc_auto_hid_mse_report[];
- tud_desc_set.hid_report.boot_mouse = _desc_auto_hid_mse_report;
+ extern uint8_t const _desc_auto_hid_boot_mse_report[];
+ tud_desc_set.hid_report.boot_mouse = _desc_auto_hid_boot_mse_report;
#endif
#if 0 // CFG_TUD_HID_BOOT_PROTOCOL
diff --git a/src/device/usbd_desc.c b/src/device/usbd_desc.c index 1a37c6f58..5ef205071 100644 --- a/src/device/usbd_desc.c +++ b/src/device/usbd_desc.c @@ -122,110 +122,103 @@ #endif -// TODO HID Generic - - //--------------------------------------------------------------------+ -// Keyboard Report Descriptor +// HID Report Descriptors //--------------------------------------------------------------------+ -#if CFG_TUD_HID_KEYBOARD -uint8_t const _desc_auto_hid_kbd_report[] = { - HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ), - HID_USAGE ( HID_USAGE_DESKTOP_KEYBOARD ), - HID_COLLECTION ( HID_COLLECTION_APPLICATION ), - HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD ), - // 8 bits Modifier Keys (Shfit, Control, Alt) - 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 ), +/*------------- Keyboard Descriptor -------------*/ +#if CFG_TUD_HID_KEYBOARD - HID_REPORT_COUNT ( 6 ), - HID_REPORT_SIZE ( 8 ), - HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ), +#define HID_REPORT_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) */ \ + 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 \ - // LED Indicator Kana | Compose | Scroll Lock | CapsLock | NumLock - HID_USAGE_PAGE ( HID_USAGE_PAGE_LED ), - /* 5-bit Led report */ - HID_USAGE_MIN ( 1 ), - HID_USAGE_MAX ( 5 ), - HID_REPORT_COUNT ( 5 ), - HID_REPORT_SIZE ( 1 ), - HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), +#if CFG_TUD_DESC_BOOT_KEYBOARD +uint8_t const _desc_auto_hid_boot_kbd_report[] = { HID_REPORT_KEYBOARD() }; +#endif - /* led padding */ - HID_REPORT_COUNT ( 1 ), - HID_REPORT_SIZE ( 3 ), - HID_OUTPUT ( HID_CONSTANT ), - HID_COLLECTION_END -}; #endif -//--------------------------------------------------------------------+ -// Mouse Report Descriptor -//--------------------------------------------------------------------+ +/*------------- Mouse Descriptor -------------*/ #if CFG_TUD_HID_MOUSE -uint8_t const _desc_auto_hid_mse_report[] = { - HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ), - HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ), - HID_COLLECTION ( HID_COLLECTION_APPLICATION ), - 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 ), +#define HID_REPORT_MOUSE(...) \ + HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\ + HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ) ,\ + HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\ + 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 \ - HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ), - /* X, Y position */ - HID_USAGE ( HID_USAGE_DESKTOP_X ), - HID_USAGE ( HID_USAGE_DESKTOP_Y ), - HID_LOGICAL_MIN ( 0x81 ), /* -127 */ - HID_LOGICAL_MAX ( 0x7f ), /* 127 */ - - HID_REPORT_COUNT ( 2 ), - HID_REPORT_SIZE ( 8 ), - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ), - - /* mouse scroll */ - HID_USAGE ( HID_USAGE_DESKTOP_WHEEL ), - HID_LOGICAL_MIN ( 0x81 ), /* -127 */ - HID_LOGICAL_MAX ( 0x7f ), /* 127 */ - HID_REPORT_COUNT( 1 ), - HID_REPORT_SIZE ( 8 ), - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ), +#if CFG_TUD_DESC_BOOT_MOUSE +uint8_t const _desc_auto_hid_boot_mse_report[] = { HID_REPORT_MOUSE() }; +#endif - HID_COLLECTION_END, - HID_COLLECTION_END -}; #endif @@ -540,7 +533,7 @@ desc_auto_cfg_t const _desc_auto_config_struct = .bCountryCode = HID_Local_NotSupported, .bNumDescriptors = 1, .bReportType = HID_DESC_TYPE_REPORT, - .wReportLength = sizeof(_desc_auto_hid_kbd_report) + .wReportLength = sizeof(_desc_auto_hid_boot_kbd_report) }, .ep_in = @@ -580,7 +573,7 @@ desc_auto_cfg_t const _desc_auto_config_struct = .bCountryCode = HID_Local_NotSupported, .bNumDescriptors = 1, .bReportType = HID_DESC_TYPE_REPORT, - .wReportLength = sizeof(_desc_auto_hid_mse_report) + .wReportLength = sizeof(_desc_auto_hid_boot_mse_report) }, .ep_in = |
