summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/class/hid/hid_device.c2
-rw-r--r--src/device/usbd.c8
-rw-r--r--src/device/usbd_desc.c181
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 =