|
|
|
@ -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 |
|
|
|
|
*/ |
|
|
|
@ -638,6 +651,9 @@ static void usbtty_init_instances (void) |
|
|
|
|
memset (device_instance, 0, sizeof (struct usb_device_instance)); |
|
|
|
|
device_instance->device_state = STATE_INIT; |
|
|
|
|
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->cdc_recv_setup = usbtty_cdc_setup; |
|
|
|
|
device_instance->bus = bus_instance; |
|
|
|
@ -751,6 +767,10 @@ static void usbtty_init_terminal_type(short type) |
|
|
|
|
device_descriptor.idProduct = |
|
|
|
|
cpu_to_le16(CONFIG_USBD_PRODUCTID_CDCACM); |
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_USBD_HS) |
|
|
|
|
qualifier_descriptor.bDeviceClass = |
|
|
|
|
COMMUNICATIONS_DEVICE_CLASS; |
|
|
|
|
#endif |
|
|
|
|
/* Assign endpoint indices */ |
|
|
|
|
tx_endpoint = ACM_TX_ENDPOINT; |
|
|
|
|
rx_endpoint = ACM_RX_ENDPOINT; |
|
|
|
@ -779,7 +799,9 @@ static void usbtty_init_terminal_type(short type) |
|
|
|
|
device_descriptor.bDeviceClass = 0xFF; |
|
|
|
|
device_descriptor.idProduct = |
|
|
|
|
cpu_to_le16(CONFIG_USBD_PRODUCTID_GSERIAL); |
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_USBD_HS) |
|
|
|
|
qualifier_descriptor.bDeviceClass = 0xFF; |
|
|
|
|
#endif |
|
|
|
|
/* Assign endpoint indices */ |
|
|
|
|
tx_endpoint = GSERIAL_TX_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, |
|
|
|
|
usb_device_event_t event, int data) |
|
|
|
|
{ |
|
|
|
|
#if defined(CONFIG_USBD_HS) |
|
|
|
|
int i; |
|
|
|
|
#endif |
|
|
|
|
switch (event) { |
|
|
|
|
case DEVICE_RESET: |
|
|
|
|
case DEVICE_BUS_INACTIVE: |
|
|
|
@ -942,6 +967,29 @@ static void usbtty_event_handler (struct usb_device_instance *device, |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
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 (); |
|
|
|
|
|
|
|
|
|
default: |
|
|
|
|