aboutsummaryrefslogtreecommitdiffstats
path: root/testhal/STM32/USB_CDC/main.c
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2011-02-15 18:44:29 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2011-02-15 18:44:29 +0000
commit60d8f68906f28d369f35b624e129deee5092c86d (patch)
tree5c45e6bea6107dca69f8e3095a6ddda4e7c219a6 /testhal/STM32/USB_CDC/main.c
parent35ff7323526f5225d1a00c7812291e9fcdbfafac (diff)
downloadChibiOS-60d8f68906f28d369f35b624e129deee5092c86d.tar.gz
ChibiOS-60d8f68906f28d369f35b624e129deee5092c86d.tar.bz2
ChibiOS-60d8f68906f28d369f35b624e129deee5092c86d.zip
More improvements to the generic USB driver, implemented suspend and wakeup handling in the STM32 USB driver.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2742 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'testhal/STM32/USB_CDC/main.c')
-rw-r--r--testhal/STM32/USB_CDC/main.c213
1 files changed, 101 insertions, 112 deletions
diff --git a/testhal/STM32/USB_CDC/main.c b/testhal/STM32/USB_CDC/main.c
index 423a47413..9868b00ab 100644
--- a/testhal/STM32/USB_CDC/main.c
+++ b/testhal/STM32/USB_CDC/main.c
@@ -30,129 +30,118 @@
#define DATA_AVAILABLE_EP 3
/*
- * USB driver structure.
+ * USB Driver structure.
*/
static SerialUSBDriver SDU1;
/*
* USB Device Descriptor.
*/
-static const uint8_t vcom_device_descriptor_data[] = {
- 18, /* bLength. */
- USB_DESCRIPTOR_DEVICE, /* bDescriptorType. */
- 0x10, 0x01, /* bcdUSB (1.1). */
- 0x02, /* bDeviceClass (CDC). */
- 0x00, /* bDeviceSubClass. */
- 0x00, /* bDeviceProtocol. */
- 0x40, /* bMaxPacketSize. */
- 0x83, 0x04, /* idVendor (0x0483). */
- 0x40, 0x57, /* idProduct (0x7540). */
- 0x00, 0x02, /* bcdDevice (2.00). */
- 1, /* iManufacturer. */
- 2, /* iProduct. */
- 3, /* IiSerialNumber. */
- 1 /* bNumConfigurations. */
+static const uint8_t vcom_device_descriptor_data[18] = {
+ USB_DESC_DEVICE (0x0110, /* bcdUSB (1.1). */
+ 0x02, /* bDeviceClass (CDC). */
+ 0x00, /* bDeviceSubClass. */
+ 0x00, /* bDeviceProtocol. */
+ 0x40, /* bMaxPacketSize. */
+ 0x0483, /* idVendor (ST). */
+ 0x5740, /* idProduct. */
+ 0x0200, /* bcdDevice. */
+ 1, /* iManufacturer. */
+ 2, /* iProduct. */
+ 3, /* iSerialNumber. */
+ 1) /* bNumConfigurations. */
};
/*
- * Device descriptor wrapper.
+ * Device Descriptor wrapper.
*/
static const USBDescriptor vcom_device_descriptor = {
- sizeof (vcom_device_descriptor_data),
+ sizeof vcom_device_descriptor_data,
vcom_device_descriptor_data
};
-/* Configuration Descriptor tree for a VCOM.*/
-static const uint8_t vcom_configuration_descriptor_data[] = {
- /* Configuration descriptor.*/
- 9, /* bLength. */
- USB_DESCRIPTOR_CONFIGURATION, /* bDescriptorType. */
- 67, 0, /* wTotalLength. */
- 0x02, /* bNumInterfaces. */
- 0x01, /* bConfigurationValue. */
- 0, /* iConfiguration. */
- 0xC0, /* bmAttributes (self powered). */
- 50, /* MaxPower (100mA). */
+/* Configuration Descriptor tree for a CDC.*/
+static const uint8_t vcom_configuration_descriptor_data[67] = {
+ /* Configuration Descriptor.*/
+ USB_DESC_CONFIGURATION(67, /* wTotalLength. */
+ 0x02, /* bNumInterfaces. */
+ 0x01, /* bConfigurationValue. */
+ 0, /* iConfiguration. */
+ 0xC0, /* bmAttributes (self powered). */
+ 50), /* bMaxPower (100mA). */
/* Interface Descriptor.*/
- 9, /* bLength. */
- USB_DESCRIPTOR_INTERFACE, /* bDescriptorType. */
- 0x00, /* bInterfaceNumber. */
- 0x00, /* bAlternateSetting. */
- 0x01, /* bNumEndpoints. */
- 0x02, /* bInterfaceClass (Communications
- Interface Class, CDC section 4.2). */
- 0x02, /* bInterfaceSubClass (Abstract Control
- Model, CDC section 4.3). */
- 0x01, /* bInterfaceProtocol (AT commands, CDC
- section 4.4). */
- 0, /* iInterface. */
+ USB_DESC_INTERFACE (0x00, /* bInterfaceNumber. */
+ 0x00, /* bAlternateSetting. */
+ 0x01, /* bNumEndpoints. */
+ 0x02, /* bInterfaceClass (Communications
+ Interface Class, CDC section
+ 4.2). */
+ 0x02, /* bInterfaceSubClass (Abstract
+ Control Model, CDC section 4.3). */
+ 0x01, /* bInterfaceProtocol (AT commands,
+ CDC section 4.4). */
+ 0), /* iInterface. */
/* Header Functional Descriptor (CDC section 5.2.3).*/
- 5, /* bLength. */
- 0x24, /* bDescriptorType (CS_INTERFACE). */
- 0x00, /* bDescriptorSubtype (Header Functional
- Descriptor. */
- 0x10, 0x01, /* bcdCDC (1.10). */
- /* Call Managment Functional Descriptor. */
- 5, /* bFunctionLength. */
- 0x24, /* bDescriptorType (CS_INTERFACE). */
- 0x01, /* bDescriptorSubtype (Call Management
- Functional Descriptor). */
- 0x00, /* bmCapabilities (D0+D1). */
- 0x01, /* bDataInterface. */
+ USB_DESC_BYTE (5), /* bLength. */
+ USB_DESC_BYTE (0x24), /* bDescriptorType (CS_INTERFACE). */
+ USB_DESC_BYTE (0x00), /* bDescriptorSubtype (Header
+ Functional Descriptor. */
+ USB_DESC_BCD (0x0110), /* bcdCDC. */
+ /* Call Management Functional Descriptor. */
+ USB_DESC_BYTE (5), /* bFunctionLength. */
+ USB_DESC_BYTE (0x24), /* bDescriptorType (CS_INTERFACE). */
+ USB_DESC_BYTE (0x01), /* bDescriptorSubtype (Call Management
+ Functional Descriptor). */
+ USB_DESC_BYTE (0x00), /* bmCapabilities (D0+D1). */
+ USB_DESC_BYTE (0x01), /* bDataInterface. */
/* ACM Functional Descriptor.*/
- 4, /* bFunctionLength. */
- 0x24, /* bDescriptorType (CS_INTERFACE). */
- 0x02, /* bDescriptorSubtype (Abstract Control
- Management Descriptor). */
- 0x02, /* bmCapabilities. */
+ USB_DESC_BYTE (4), /* bFunctionLength. */
+ USB_DESC_BYTE (0x24), /* bDescriptorType (CS_INTERFACE). */
+ USB_DESC_BYTE (0x02), /* bDescriptorSubtype (Abstract
+ Control Management Descriptor). */
+ USB_DESC_BYTE (0x02), /* bmCapabilities. */
/* Union Functional Descriptor.*/
- 5, /* bFunctionLength. */
- 0x24, /* bDescriptorType (CS_INTERFACE). */
- 0x06, /* bDescriptorSubtype (Union Functional
- Descriptor). */
- 0x00, /* bMasterInterface (Communication Class
- Interface). */
- 0x01, /* bSlaveInterface0 (Data Class
- Interface). */
+ USB_DESC_BYTE (5), /* bFunctionLength. */
+ USB_DESC_BYTE (0x24), /* bDescriptorType (CS_INTERFACE). */
+ USB_DESC_BYTE (0x06), /* bDescriptorSubtype (Union
+ Functional Descriptor). */
+ USB_DESC_BYTE (0x00), /* bMasterInterface (Communication
+ Class Interface). */
+ USB_DESC_BYTE (0x01), /* bSlaveInterface0 (Data Class
+ Interface). */
/* Endpoint 2 Descriptor.*/
- 7, /* bLength. */
- USB_DESCRIPTOR_ENDPOINT, /* bDescriptorType. */
- INTERRUPT_REQUEST_EP | 0x80, /* bEndpointAddress (IN). */
- 0x03, /* bmAttributes (Interrupt). */
- 0x08, 0x00, /* wMaxPacketSize. */
- 0xFF, /* bInterval. */
+ USB_DESC_ENDPOINT (INTERRUPT_REQUEST_EP|0x80, /* bEndpointAddress. */
+ 0x03, /* bmAttributes (Interrupt). */
+ 0x0008, /* wMaxPacketSize. */
+ 0xFF), /* bInterval. */
/* Interface Descriptor.*/
- 9, /* bLength. */
- USB_DESCRIPTOR_INTERFACE, /* bDescriptorType. */
- 0x01, /* bInterfaceNumber. */
- 0x00, /* bAlternateSetting. */
- 0x02, /* bNumEndpoints. */
- 0x0A, /* bInterfaceClass (Data Class
- Interface, CDC section 4.5). */
- 0x00, /* bInterfaceSubClass (CDC section 4.6).*/
- 0x00, /* bInterfaceProtocol (CDC section 4.7).*/
- 0x00, /* iInterface. */
+ USB_DESC_INTERFACE (0x01, /* bInterfaceNumber. */
+ 0x00, /* bAlternateSetting. */
+ 0x02, /* bNumEndpoints. */
+ 0x0A, /* bInterfaceClass (Data Class
+ Interface, CDC section 4.5). */
+ 0x00, /* bInterfaceSubClass (CDC section
+ 4.6). */
+ 0x00, /* bInterfaceProtocol (CDC section
+ 4.7). */
+ 0x00), /* iInterface. */
/* Endpoint 3 Descriptor.*/
- 7, /* bLength. */
- USB_DESCRIPTOR_ENDPOINT, /* bDescriptorType. */
- DATA_AVAILABLE_EP, /* bEndpointAddress (OUT). */
- 0x02, /* bmAttributes (Bulk). */
- 0x40, 0x00, /* wMaxPacketSize. */
- 0x00, /* bInterval (ignored for bulk. */
+ USB_DESC_ENDPOINT (DATA_AVAILABLE_EP, /* bEndpointAddress. */
+ 0x02, /* bmAttributes (Bulk). */
+ 0x0040, /* wMaxPacketSize. */
+ 0x00), /* bInterval. */
/* Endpoint 1 Descriptor.*/
- 7, /* bLength. */
- USB_DESCRIPTOR_ENDPOINT, /* bDescriptorType. */
- DATA_REQUEST_EP | 0x80, /* bEndpointAddress (IN). */
- 0x02, /* bmAttributes (Bulk). */
- 0x40, 0x00, /* wMaxPacketSize. */
- 0x00 /* bInterval (ignored for bulk. */
+ USB_DESC_ENDPOINT (DATA_REQUEST_EP|0x80, /* bEndpointAddress. */
+ 0x02, /* bmAttributes (Bulk). */
+ 0x0040, /* wMaxPacketSize. */
+ 0x00) /* bInterval. */
};
/*
- * Configuration descriptor wrapper.
+ * Configuration Descriptor wrapper.
*/
static const USBDescriptor vcom_configuration_descriptor = {
- sizeof (vcom_configuration_descriptor_data),
+ sizeof vcom_configuration_descriptor_data,
vcom_configuration_descriptor_data
};
@@ -160,28 +149,28 @@ static const USBDescriptor vcom_configuration_descriptor = {
* U.S. English language identifier.
*/
static const uint8_t vcom_string0[] = {
- 4, /* bLength. */
- USB_DESCRIPTOR_STRING, /* bDescriptorType. */
- 0x09, 0x04 /* wLANGID (0x0409, U.S. English). */
+ USB_DESC_BYTE(4), /* bLength. */
+ USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType. */
+ USB_DESC_WORD(0x0409) /* wLANGID (U.S. English). */
};
/*
* Vendor string.
*/
static const uint8_t vcom_string1[] = {
- 38, /* bLength. */
- USB_DESCRIPTOR_STRING, /* bDescriptorType. */
+ USB_DESC_BYTE(38), /* bLength. */
+ USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType. */
'S', 0, 'T', 0, 'M', 0, 'i', 0, 'c', 0, 'r', 0, 'o', 0, 'e', 0,
'l', 0, 'e', 0, 'c', 0, 't', 0, 'r', 0, 'o', 0, 'n', 0, 'i', 0,
'c', 0, 's', 0
};
/*
- * Device description string.
+ * Device Description string.
*/
static const uint8_t vcom_string2[] = {
- 56, /* bLength. */
- USB_DESCRIPTOR_STRING, /* bDescriptorType. */
+ USB_DESC_BYTE(56), /* bLength. */
+ USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType. */
'C', 0, 'h', 0, 'i', 0, 'b', 0, 'i', 0, 'O', 0, 'S', 0, '/', 0,
'R', 0, 'T', 0, ' ', 0, 'V', 0, 'i', 0, 'r', 0, 't', 0, 'u', 0,
'a', 0, 'l', 0, ' ', 0, 'C', 0, 'O', 0, 'M', 0, ' ', 0, 'P', 0,
@@ -189,11 +178,11 @@ static const uint8_t vcom_string2[] = {
};
/*
- * Serial number string.
+ * Serial Number string.
*/
static const uint8_t vcom_string3[] = {
- 8, /* bLength. */
- USB_DESCRIPTOR_STRING, /* bDescriptorType. */
+ USB_DESC_BYTE(8), /* bLength. */
+ USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType. */
'0' + CH_KERNEL_MAJOR, 0,
'0' + CH_KERNEL_MINOR, 0,
'0' + CH_KERNEL_PATCH, 0
@@ -203,10 +192,10 @@ static const uint8_t vcom_string3[] = {
* Strings wrappers array.
*/
static const USBDescriptor vcom_strings[] = {
- {sizeof(vcom_string0), vcom_string0},
- {sizeof(vcom_string1), vcom_string1},
- {sizeof(vcom_string2), vcom_string2},
- {sizeof(vcom_string3), vcom_string3}
+ {sizeof vcom_string0, vcom_string0},
+ {sizeof vcom_string1, vcom_string1},
+ {sizeof vcom_string2, vcom_string2},
+ {sizeof vcom_string3, vcom_string3}
};
/*
@@ -291,7 +280,7 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
return;
case USB_EVENT_SUSPEND:
return;
- case USB_EVENT_RESUME:
+ case USB_EVENT_WAKEUP:
return;
case USB_EVENT_STALLED:
return;