|
@@ -133,6 +133,19 @@ static struct usb_device_descriptor device_descriptor = {
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
+#if defined(CONFIG_USBD_HS)
|
|
|
|
+static struct usb_qualifier_descriptor qualifier_descriptor = {
|
|
|
|
+ .bLength = sizeof(struct usb_qualifier_descriptor),
|
|
|
|
+ .bDescriptorType = USB_DT_QUAL,
|
|
|
|
+ .bcdUSB = cpu_to_le16(USB_BCD_VERSION),
|
|
|
|
+ .bDeviceClass = COMMUNICATIONS_DEVICE_CLASS,
|
|
|
|
+ .bDeviceSubClass = 0x00,
|
|
|
|
+ .bDeviceProtocol = 0x00,
|
|
|
|
+ .bMaxPacketSize0 = EP0_MAX_PACKET_SIZE,
|
|
|
|
+ .bNumConfigurations = NUM_CONFIGS
|
|
|
|
+};
|
|
|
|
+#endif
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Static CDC ACM specific descriptors
|
|
* Static CDC ACM specific descriptors
|
|
*/
|
|
*/
|
|
@@ -638,6 +651,9 @@ static void usbtty_init_instances (void)
|
|
memset (device_instance, 0, sizeof (struct usb_device_instance));
|
|
memset (device_instance, 0, sizeof (struct usb_device_instance));
|
|
device_instance->device_state = STATE_INIT;
|
|
device_instance->device_state = STATE_INIT;
|
|
device_instance->device_descriptor = &device_descriptor;
|
|
device_instance->device_descriptor = &device_descriptor;
|
|
|
|
+#if defined(CONFIG_USBD_HS)
|
|
|
|
+ device_instance->qualifier_descriptor = &qualifier_descriptor;
|
|
|
|
+#endif
|
|
device_instance->event = usbtty_event_handler;
|
|
device_instance->event = usbtty_event_handler;
|
|
device_instance->cdc_recv_setup = usbtty_cdc_setup;
|
|
device_instance->cdc_recv_setup = usbtty_cdc_setup;
|
|
device_instance->bus = bus_instance;
|
|
device_instance->bus = bus_instance;
|
|
@@ -751,6 +767,10 @@ static void usbtty_init_terminal_type(short type)
|
|
device_descriptor.idProduct =
|
|
device_descriptor.idProduct =
|
|
cpu_to_le16(CONFIG_USBD_PRODUCTID_CDCACM);
|
|
cpu_to_le16(CONFIG_USBD_PRODUCTID_CDCACM);
|
|
|
|
|
|
|
|
+#if defined(CONFIG_USBD_HS)
|
|
|
|
+ qualifier_descriptor.bDeviceClass =
|
|
|
|
+ COMMUNICATIONS_DEVICE_CLASS;
|
|
|
|
+#endif
|
|
/* Assign endpoint indices */
|
|
/* Assign endpoint indices */
|
|
tx_endpoint = ACM_TX_ENDPOINT;
|
|
tx_endpoint = ACM_TX_ENDPOINT;
|
|
rx_endpoint = ACM_RX_ENDPOINT;
|
|
rx_endpoint = ACM_RX_ENDPOINT;
|
|
@@ -779,7 +799,9 @@ static void usbtty_init_terminal_type(short type)
|
|
device_descriptor.bDeviceClass = 0xFF;
|
|
device_descriptor.bDeviceClass = 0xFF;
|
|
device_descriptor.idProduct =
|
|
device_descriptor.idProduct =
|
|
cpu_to_le16(CONFIG_USBD_PRODUCTID_GSERIAL);
|
|
cpu_to_le16(CONFIG_USBD_PRODUCTID_GSERIAL);
|
|
-
|
|
|
|
|
|
+#if defined(CONFIG_USBD_HS)
|
|
|
|
+ qualifier_descriptor.bDeviceClass = 0xFF;
|
|
|
|
+#endif
|
|
/* Assign endpoint indices */
|
|
/* Assign endpoint indices */
|
|
tx_endpoint = GSERIAL_TX_ENDPOINT;
|
|
tx_endpoint = GSERIAL_TX_ENDPOINT;
|
|
rx_endpoint = GSERIAL_RX_ENDPOINT;
|
|
rx_endpoint = GSERIAL_RX_ENDPOINT;
|
|
@@ -932,6 +954,9 @@ static int usbtty_configured (void)
|
|
static void usbtty_event_handler (struct usb_device_instance *device,
|
|
static void usbtty_event_handler (struct usb_device_instance *device,
|
|
usb_device_event_t event, int data)
|
|
usb_device_event_t event, int data)
|
|
{
|
|
{
|
|
|
|
+#if defined(CONFIG_USBD_HS)
|
|
|
|
+ int i;
|
|
|
|
+#endif
|
|
switch (event) {
|
|
switch (event) {
|
|
case DEVICE_RESET:
|
|
case DEVICE_RESET:
|
|
case DEVICE_BUS_INACTIVE:
|
|
case DEVICE_BUS_INACTIVE:
|
|
@@ -942,6 +967,29 @@ static void usbtty_event_handler (struct usb_device_instance *device,
|
|
break;
|
|
break;
|
|
|
|
|
|
case DEVICE_ADDRESS_ASSIGNED:
|
|
case DEVICE_ADDRESS_ASSIGNED:
|
|
|
|
+#if defined(CONFIG_USBD_HS)
|
|
|
|
+ /*
|
|
|
|
+ * is_usbd_high_speed routine needs to be defined by
|
|
|
|
+ * specific gadget driver
|
|
|
|
+ * It returns TRUE if device enumerates at High speed
|
|
|
|
+ * Retuns FALSE otherwise
|
|
|
|
+ */
|
|
|
|
+ for (i = 0; i < NUM_ENDPOINTS; i++) {
|
|
|
|
+ if (((ep_descriptor_ptrs[i]->bmAttributes &
|
|
|
|
+ USB_ENDPOINT_XFERTYPE_MASK) ==
|
|
|
|
+ USB_ENDPOINT_XFER_BULK)
|
|
|
|
+ && is_usbd_high_speed()) {
|
|
|
|
+
|
|
|
|
+ ep_descriptor_ptrs[i]->wMaxPacketSize =
|
|
|
|
+ CONFIG_USBD_SERIAL_BULK_HS_PKTSIZE;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ endpoint_instance[i + 1].tx_packetSize =
|
|
|
|
+ ep_descriptor_ptrs[i]->wMaxPacketSize;
|
|
|
|
+ endpoint_instance[i + 1].rcv_packetSize =
|
|
|
|
+ ep_descriptor_ptrs[i]->wMaxPacketSize;
|
|
|
|
+ }
|
|
|
|
+#endif
|
|
usbtty_init_endpoints ();
|
|
usbtty_init_endpoints ();
|
|
|
|
|
|
default:
|
|
default:
|