Hi Jens Dender,
Thanks for your reply.
After review your demo, I have some suggestions for you.
1. You would see the CDC class should involve two interfaces and two endpoints at least, therefore the composite demo needs 5+1 endpoints to achieve the 2 CDC class + 1 HID class at least. For the composite demo, I'd like to exemplify the amended descriptor below.
ALIGNED(4) uint8_t USB_FsConfigDescriptor[] = {
USB_CONFIGURATION_DESC_SIZE,
USB_CONFIGURATION_DESCRIPTOR_TYPE,
WBVAL(
USB_CONFIGURATION_DESC_SIZE +
USB_INTERFACE_DESC_SIZE +
HID_DESC_SIZE +
USB_ENDPOINT_DESC_SIZE +
USB_INTERFACE_ASSOC_DESC_SIZE +
USB_INTERFACE_DESC_SIZE +
0x0013 +
1 * USB_ENDPOINT_DESC_SIZE +
USB_INTERFACE_DESC_SIZE +
2 * USB_ENDPOINT_DESC_SIZE +
USB_INTERFACE_ASSOC_DESC_SIZE +
USB_INTERFACE_DESC_SIZE +
0x0013 +
1 * USB_ENDPOINT_DESC_SIZE +
USB_INTERFACE_DESC_SIZE +
2 * USB_ENDPOINT_DESC_SIZE +
0
),
0x03,
0x01,
0x00,
USB_CONFIG_SELF_POWERED,
USB_CONFIG_POWER_MA(2),
USB_INTERFACE_DESC_SIZE,
USB_INTERFACE_DESCRIPTOR_TYPE,
USB_HID_IF_NUM,
0x00,
0x01,
USB_DEVICE_CLASS_HUMAN_INTERFACE,
HID_SUBCLASS_BOOT,
HID_PROTOCOL_MOUSE,
0x04,
HID_DESC_SIZE,
HID_HID_DESCRIPTOR_TYPE,
WBVAL(0x0111),
0x00,
0x01,
HID_REPORT_DESCRIPTOR_TYPE,
WBVAL(sizeof(Mouse_ReportDescriptor)),
USB_ENDPOINT_DESC_SIZE,
USB_ENDPOINT_DESCRIPTOR_TYPE,
HID_EP_IN,
USB_ENDPOINT_TYPE_INTERRUPT,
WBVAL(0x0008),
HID_MOUSE_REPORT_INTERVAL,
USB_INTERFACE_ASSOC_DESC_SIZE,
USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE,
USB_CDC_CIF_NUM,
0x02,
CDC_COMMUNICATION_INTERFACE_CLASS,
CDC_ABSTRACT_CONTROL_MODEL,
0x00,
0x05,
USB_INTERFACE_DESC_SIZE,
USB_INTERFACE_DESCRIPTOR_TYPE,
USB_CDC_CIF_NUM,
0x00,
0x01,
CDC_COMMUNICATION_INTERFACE_CLASS,
CDC_ABSTRACT_CONTROL_MODEL,
0x00,
0x05,
0x05,
CDC_CS_INTERFACE,
CDC_HEADER,
WBVAL(CDC_V1_10),
0x05,
CDC_CS_INTERFACE,
CDC_CALL_MANAGEMENT,
0x01,
USB_CDC_DIF_NUM,
0x04,
CDC_CS_INTERFACE,
CDC_ABSTRACT_CONTROL_MANAGEMENT,
0x02,
0x05,
CDC_CS_INTERFACE,
CDC_UNION,
USB_CDC_CIF_NUM,
USB_CDC_DIF_NUM,
USB_ENDPOINT_DESC_SIZE,
USB_ENDPOINT_DESCRIPTOR_TYPE,
USB_CDC_INT_EP,
USB_ENDPOINT_TYPE_INTERRUPT,
WBVAL(0x0010),
0x02,
USB_INTERFACE_DESC_SIZE,
USB_INTERFACE_DESCRIPTOR_TYPE,
USB_CDC_DIF_NUM,
0x00,
0x02,
CDC_DATA_INTERFACE_CLASS,
0x00,
0x00,
0x05,
USB_ENDPOINT_DESC_SIZE,
USB_ENDPOINT_DESCRIPTOR_TYPE,
USB_CDC_OUT_EP,
USB_ENDPOINT_TYPE_BULK,
WBVAL(USB_FS_MAX_BULK_PACKET),
0x00,
USB_ENDPOINT_DESC_SIZE,
USB_ENDPOINT_DESCRIPTOR_TYPE,
USB_CDC_IN_EP,
USB_ENDPOINT_TYPE_BULK,
WBVAL(64),
0x00,
USB_INTERFACE_ASSOC_DESC_SIZE,
USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE,
Sec_USB_CDC_CIF_NUM,
0x02,
CDC_COMMUNICATION_INTERFACE_CLASS,
CDC_ABSTRACT_CONTROL_MODEL,
0x00,
0x05,
USB_INTERFACE_DESC_SIZE,
USB_INTERFACE_DESCRIPTOR_TYPE,
Sec_USB_CDC_CIF_NUM,
0x00,
0x01,
CDC_COMMUNICATION_INTERFACE_CLASS,
CDC_ABSTRACT_CONTROL_MODEL,
0x00,
0x05,
0x05,
CDC_CS_INTERFACE,
CDC_HEADER,
WBVAL(CDC_V1_10),
0x05,
CDC_CS_INTERFACE,
CDC_CALL_MANAGEMENT,
0x01,
Sec_USB_CDC_DIF_NUM,
0x04,
CDC_CS_INTERFACE,
CDC_ABSTRACT_CONTROL_MANAGEMENT,
0x02,
0x05,
CDC_CS_INTERFACE,
CDC_UNION,
Sec_USB_CDC_CIF_NUM,
Sec_USB_CDC_DIF_NUM,
USB_ENDPOINT_DESC_SIZE,
USB_ENDPOINT_DESCRIPTOR_TYPE,
Sec_USB_CDC_INT_EP,
USB_ENDPOINT_TYPE_INTERRUPT,
WBVAL(0x0010),
0x02,
USB_INTERFACE_DESC_SIZE,
USB_INTERFACE_DESCRIPTOR_TYPE,
Sec_USB_CDC_DIF_NUM,
0x00,
0x02,
CDC_DATA_INTERFACE_CLASS,
0x00,
0x00,
0x05,
USB_ENDPOINT_DESC_SIZE,
USB_ENDPOINT_DESCRIPTOR_TYPE,
Sec_USB_CDC_OUT_EP,
USB_ENDPOINT_TYPE_BULK,
WBVAL(USB_FS_MAX_BULK_PACKET),
0x00,
USB_ENDPOINT_DESC_SIZE,
USB_ENDPOINT_DESCRIPTOR_TYPE,
Sec_USB_CDC_IN_EP,
USB_ENDPOINT_TYPE_BULK,
WBVAL(64),
0x00,
0
};
#define HID_EP_IN 0x81
#define USB_HID_IF_NUM 0
#define HID_MOUSE_REPORT_INTERVAL_MS 10
#define HID_MOUSE_REPORT_INTERVAL 10
#define USB_CDC_CIF_NUM 1
#define USB_CDC_DIF_NUM 2
#define USB_CDC_IN_EP 0x82
#define USB_CDC_OUT_EP 0x01
#define USB_CDC_INT_EP 0x83
#define Sec_USB_CDC_CIF_NUM 3
#define Sec_USB_CDC_DIF_NUM 4
#define Sec_USB_CDC_IN_EP 0x85
#define Sec_USB_CDC_OUT_EP 0x04
#define Sec_USB_CDC_INT_EP 0x86
2. You need to consider the bug of the ROM driver as the errata demonstrates.
3. I think you need to get the idea of the process of window handles a composite device, I think you may need to modify the INF file to suit the new USB composite device and the attachment will help you a lot.
Have a great day,
Ping
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------