summaryrefslogtreecommitdiff
path: root/src/device
diff options
context:
space:
mode:
authorhathach <[email protected]>2018-07-28 12:38:45 +0700
committerhathach <[email protected]>2018-07-28 12:38:45 +0700
commit9f61493020821ba7e3226e67b56a062501feb429 (patch)
treed2a6a21ee5eb5bf494756023b5345893636332ea /src/device
parent456506045f0cb4234b6fef9fddf621a53cd862ac (diff)
change HID config, move HID boot config to part of auto descriptor only
Diffstat (limited to 'src/device')
-rw-r--r--src/device/usbd.c6
-rw-r--r--src/device/usbd.h2
-rw-r--r--src/device/usbd_desc.c79
3 files changed, 37 insertions, 50 deletions
diff --git a/src/device/usbd.c b/src/device/usbd.c
index 8f406d0bd..f6b55a81d 100644
--- a/src/device/usbd.c
+++ b/src/device/usbd.c
@@ -116,7 +116,7 @@ static usbd_class_driver_t const usbd_class_drivers[] =
#endif
- #if TUD_OPT_HID_ENABLED
+ #if CFG_TUD_HID
{
.class_code = TUSB_CLASS_HID,
.init = hidd_init,
@@ -318,12 +318,12 @@ static void usbd_reset(uint8_t rhport)
tud_desc_set.device = (uint8_t const*) &_desc_auto_device;
tud_desc_set.config = _desc_auto_config;
- #if CFG_TUD_HID_KEYBOARD && CFG_TUD_HID_KEYBOARD_BOOT
+ #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;
#endif
- #if CFG_TUD_HID_MOUSE && CFG_TUD_HID_MOUSE_BOOT
+ #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;
#endif
diff --git a/src/device/usbd.h b/src/device/usbd.h
index 8413aa15e..8ef1209e1 100644
--- a/src/device/usbd.h
+++ b/src/device/usbd.h
@@ -66,7 +66,7 @@ typedef struct {
uint16_t string_count;
struct {
- uint8_t const* composite;
+ uint8_t const* generic;
uint8_t const* boot_keyboard;
uint8_t const* boot_mouse;
} hid_report;
diff --git a/src/device/usbd_desc.c b/src/device/usbd_desc.c
index b1bb07809..1a37c6f58 100644
--- a/src/device/usbd_desc.c
+++ b/src/device/usbd_desc.c
@@ -47,9 +47,13 @@
#if CFG_TUD_DESC_AUTO
+// Generic (multiple) Report : Keyboard + Mouse + Gamepad + Joystick
+#define HID_GENERIC (CFG_TUD_HID && ( (CFG_TUD_HID_KEYBOARD && !CFG_TUD_DESC_BOOT_KEYBOARD) || \
+ (CFG_TUD_HID_MOUSE && !CFG_TUD_DESC_BOOT_MOUSE) ))
+
/*------------- VID/PID -------------*/
#ifndef CFG_TUD_DESC_VID
-#define CFG_TUD_DESC_VID 0xCAFE
+#define CFG_TUD_DESC_VID 0xCAFE
#endif
#ifndef CFG_TUD_DESC_PID
@@ -58,11 +62,11 @@
* Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC.
*
* Auto ProductID layout's Bitmap:
- * [MSB] HID Generic | HID Composite | HID Mouse | HID Keyboard | MSC | CDC [LSB]
+ * [MSB] HID Generic | Boot Mouse | Boot Keyboard | MSC | CDC [LSB]
*/
-#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) )
-#define CFG_TUD_DESC_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | \
- _PID_MAP(HID_KEYBOARD, 2) | _PID_MAP(HID_MOUSE, 3) /*| _PID_MAP(HID_GENERIC, 5)*/ )
+#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) )
+#define CFG_TUD_DESC_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \
+ _PID_MAP(HID_KEYBOARD, 2) | _PID_MAP(HID_MOUSE, 3) | (HID_GENERIC << 4) )
#endif
/*------------- Interface Numbering -------------*/
@@ -76,8 +80,8 @@
#define ITF_NUM_HID_KBD (ITF_NUM_MSC + CFG_TUD_MSC)
#define ITF_NUM_HID_MSE (ITF_NUM_HID_KBD + CFG_TUD_HID_KEYBOARD)
-#define ITF_TOTAL (ITF_NUM_HID_MSE + CFG_TUD_HID_MOUSE)
-
+#define ITF_NUM_HID_GEN (ITF_NUM_HID_MSE + CFG_TUD_HID_MOUSE)
+#define ITF_TOTAL (ITF_NUM_HID_GEN + HID_GENERIC)
/*------------- Endpoint Numbering & Size -------------*/
#define _EP_IN(x) (0x80 | (x))
@@ -96,23 +100,24 @@
// HID Keyboard with boot protocol
-#if CFG_TUD_HID_KEYBOARD && CFG_TUD_HID_KEYBOARD_BOOT
+#if CFG_TUD_HID_KEYBOARD && CFG_TUD_DESC_BOOT_KEYBOARD
#define EP_HID_KBD_BOOT _EP_IN (ITF_NUM_HID_KBD+1)
#define EP_HID_KBD_BOOT_SZ 8
-
#endif
// HID Mouse with boot protocol
-#if CFG_TUD_HID_MOUSE && CFG_TUD_HID_MOUSE_BOOT
+#if CFG_TUD_HID_MOUSE && CFG_TUD_DESC_BOOT_MOUSE
#define EP_HID_MSE_BOOT _EP_IN (ITF_NUM_HID_MSE+1)
#define EP_HID_MSE_BOOT_SZ 8
#endif
-#if 0 // CFG_TUD_HID_BOOT_PROTOCOL
+
+
+#if HID_GENERIC
// HID composite = keyboard + mouse
-#define EP_HID_COMP _EP_IN (ITF_NUM_HID_KBD+1)
-#define EP_HID_COMP_SIZE 16
+#define EP_HID_GEN _EP_IN (EP_HID_MSE_BOOT+1)
+#define EP_HID_GEN_SIZE 16
#endif
@@ -307,7 +312,7 @@ typedef struct ATTR_PACKED
#endif
//------------- HID -------------//
-#if CFG_TUD_HID_KEYBOARD && CFG_TUD_HID_KEYBOARD_BOOT
+#if CFG_TUD_HID_KEYBOARD && CFG_TUD_DESC_BOOT_KEYBOARD
struct ATTR_PACKED
{
tusb_desc_interface_t itf;
@@ -316,7 +321,7 @@ typedef struct ATTR_PACKED
} hid_kbd_boot;
#endif
-#if CFG_TUD_HID_MOUSE && CFG_TUD_HID_MOUSE_BOOT
+#if CFG_TUD_HID_MOUSE && CFG_TUD_DESC_BOOT_MOUSE
struct ATTR_PACKED
{
tusb_desc_interface_t itf;
@@ -325,20 +330,18 @@ typedef struct ATTR_PACKED
} hid_mse_boot;
#endif
-#if 0 // CFG_TUD_HID_BOOT_PROTOCOL
+#if HID_GENERIC
-#if CFG_TUD_HID_KEYBOARD || CFG_TUD_HID_MOUSE
struct ATTR_PACKED
{
tusb_desc_interface_t itf;
tusb_hid_descriptor_hid_t hid_desc;
tusb_desc_endpoint_t ep_in;
- #if CFG_TUD_HID_KEYBOARD
+ #if 0 // CFG_TUD_HID_KEYBOARD
tusb_desc_endpoint_t ep_out;
#endif
- } hid_composite;
-#endif
+ } hid_generic;
#endif
@@ -513,7 +516,7 @@ desc_auto_cfg_t const _desc_auto_config_struct =
},
#endif // msc
-#if CFG_TUD_HID_KEYBOARD && CFG_TUD_HID_KEYBOARD_BOOT
+#if CFG_TUD_HID_KEYBOARD && CFG_TUD_DESC_BOOT_KEYBOARD
.hid_kbd_boot =
{
.itf =
@@ -553,7 +556,7 @@ desc_auto_cfg_t const _desc_auto_config_struct =
#endif // boot keyboard
//------------- HID Mouse -------------//
-#if CFG_TUD_HID_MOUSE && CFG_TUD_HID_MOUSE_BOOT
+#if CFG_TUD_HID_MOUSE && CFG_TUD_DESC_BOOT_MOUSE
.hid_mse_boot =
{
.itf =
@@ -593,23 +596,22 @@ desc_auto_cfg_t const _desc_auto_config_struct =
#endif // boot mouse
-#if 0
+#if HID_GENERIC
-#if CFG_TUD_HID_KEYBOARD || CFG_TUD_HID_MOUSE
- //------------- HID Keyboard + Mouse (multiple reports) -------------//
+ //------------- HID Generic Multiple report -------------//
.hid_composite =
{
.itf =
{
.bLength = sizeof(tusb_desc_interface_t),
.bDescriptorType = TUSB_DESC_INTERFACE,
- .bInterfaceNumber = ITF_NUM_HID_KBD,
+ .bInterfaceNumber = ITF_NUM_HID_GEN,
.bAlternateSetting = 0x00,
.bNumEndpoints = 2,
.bInterfaceClass = TUSB_CLASS_HID,
.bInterfaceSubClass = 0,
.bInterfaceProtocol = 0,
- .iInterface = 4 + CFG_TUD_CDC + CFG_TUD_MSC,
+ .iInterface = 0, // 4 + CFG_TUD_CDC + CFG_TUD_MSC,
},
.hid_desc =
@@ -620,41 +622,26 @@ 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_composite_report)
+ .wReportLength = sizeof(_desc_auto_hid_generic_report)
},
.ep_in =
{
.bLength = sizeof(tusb_desc_endpoint_t),
.bDescriptorType = TUSB_DESC_ENDPOINT,
- .bEndpointAddress = EP_HID_COMP,
+ .bEndpointAddress = EP_HID_GEN,
.bmAttributes = { .xfer = TUSB_XFER_INTERRUPT },
- .wMaxPacketSize = { .size = EP_HID_COMP_SIZE },
+ .wMaxPacketSize = { .size = EP_HID_GEN_SIZE },
.bInterval = 0x0A
}
}
-#endif
-#endif // boot protocol
+#endif // hid generic
};
uint8_t const * const _desc_auto_config = (uint8_t const*) &_desc_auto_config_struct;
#endif
-/*------------------------------------------------------------------*/
-/* MACRO TYPEDEF CONSTANT ENUM
- *------------------------------------------------------------------*/
-
-/*------------------------------------------------------------------*/
-/* VARIABLE DECLARATION
- *------------------------------------------------------------------*/
-
-/*------------------------------------------------------------------*/
-/* FUNCTION DECLARATION
- *------------------------------------------------------------------*/
-
-
-
#endif