ULINK driver: Remove typedefs in OpenULINK firmware USB descriptor structures

Signed-off-by: Martin Schmölzer <martin.schmoelzer@student.tuwien.ac.at>
This commit is contained in:
Martin Schmölzer 2011-08-31 00:20:35 +02:00 committed by Øyvind Harboe
parent 355f183adb
commit ea7c87e5e7
2 changed files with 45 additions and 37 deletions

View File

@ -48,7 +48,7 @@
#define STR_DESCR(len,...) { len*2+2, DESCRIPTOR_TYPE_STRING, { __VA_ARGS__ } } #define STR_DESCR(len,...) { len*2+2, DESCRIPTOR_TYPE_STRING, { __VA_ARGS__ } }
/** USB Device Descriptor. See USB 1.1 spec, pp. 196 - 198 */ /** USB Device Descriptor. See USB 1.1 spec, pp. 196 - 198 */
typedef struct { struct usb_device_descriptor {
u8 bLength; ///< Size of this descriptor in bytes. u8 bLength; ///< Size of this descriptor in bytes.
u8 bDescriptorType; ///< DEVICE Descriptor Type. u8 bDescriptorType; ///< DEVICE Descriptor Type.
u16 bcdUSB; ///< USB specification release number (BCD). u16 bcdUSB; ///< USB specification release number (BCD).
@ -63,10 +63,10 @@ typedef struct {
u8 iProduct; ///< Index of product string descriptor. u8 iProduct; ///< Index of product string descriptor.
u8 iSerialNumber; ///< Index of string descriptor containing serial #. u8 iSerialNumber; ///< Index of string descriptor containing serial #.
u8 bNumConfigurations; ///< Number of possible configurations. u8 bNumConfigurations; ///< Number of possible configurations.
} usb_device_descriptor_t; };
/** USB Configuration Descriptor. See USB 1.1 spec, pp. 199 - 200 */ /** USB Configuration Descriptor. See USB 1.1 spec, pp. 199 - 200 */
typedef struct { struct usb_config_descriptor {
u8 bLength; ///< Size of this descriptor in bytes. u8 bLength; ///< Size of this descriptor in bytes.
u8 bDescriptorType; ///< CONFIGURATION descriptor type. u8 bDescriptorType; ///< CONFIGURATION descriptor type.
u16 wTotalLength; ///< Combined total length of all descriptors. u16 wTotalLength; ///< Combined total length of all descriptors.
@ -75,10 +75,10 @@ typedef struct {
u8 iConfiguration; ///< Index of configuration string descriptor. u8 iConfiguration; ///< Index of configuration string descriptor.
u8 bmAttributes; ///< Configuration characteristics. u8 bmAttributes; ///< Configuration characteristics.
u8 MaxPower; ///< Maximum power consumption in 2 mA units. u8 MaxPower; ///< Maximum power consumption in 2 mA units.
} usb_config_descriptor_t; };
/** USB Interface Descriptor. See USB 1.1 spec, pp. 201 - 203 */ /** USB Interface Descriptor. See USB 1.1 spec, pp. 201 - 203 */
typedef struct { struct usb_interface_descriptor {
u8 bLength; ///< Size of this descriptor in bytes. u8 bLength; ///< Size of this descriptor in bytes.
u8 bDescriptorType; ///< INTERFACE descriptor type. u8 bDescriptorType; ///< INTERFACE descriptor type.
u8 bInterfaceNumber; ///< Interface number. u8 bInterfaceNumber; ///< Interface number.
@ -88,48 +88,48 @@ typedef struct {
u8 bInterfaceSubclass; ///< Subclass code. u8 bInterfaceSubclass; ///< Subclass code.
u8 bInterfaceProtocol; ///< Protocol code. u8 bInterfaceProtocol; ///< Protocol code.
u8 iInterface; ///< Index of interface string descriptor. u8 iInterface; ///< Index of interface string descriptor.
} usb_interface_descriptor_t; };
/** USB Endpoint Descriptor. See USB 1.1 spec, pp. 203 - 204 */ /** USB Endpoint Descriptor. See USB 1.1 spec, pp. 203 - 204 */
typedef struct { struct usb_endpoint_descriptor {
u8 bLength; ///< Size of this descriptor in bytes. u8 bLength; ///< Size of this descriptor in bytes.
u8 bDescriptorType; ///< ENDPOINT descriptor type. u8 bDescriptorType; ///< ENDPOINT descriptor type.
u8 bEndpointAddress; ///< Endpoint Address: USB 1.1 spec, table 9-10. u8 bEndpointAddress; ///< Endpoint Address: USB 1.1 spec, table 9-10.
u8 bmAttributes; ///< Endpoint Attributes: USB 1.1 spec, table 9-10. u8 bmAttributes; ///< Endpoint Attributes: USB 1.1 spec, table 9-10.
u16 wMaxPacketSize; ///< Maximum packet size for this endpoint. u16 wMaxPacketSize; ///< Maximum packet size for this endpoint.
u8 bInterval; ///< Polling interval (in ms) for this endpoint. u8 bInterval; ///< Polling interval (in ms) for this endpoint.
} usb_endpoint_descriptor_t; };
/** USB Language Descriptor. See USB 1.1 spec, pp. 204 - 205 */ /** USB Language Descriptor. See USB 1.1 spec, pp. 204 - 205 */
typedef struct { struct usb_language_descriptor {
u8 bLength; ///< Size of this descriptor in bytes. u8 bLength; ///< Size of this descriptor in bytes.
u8 bDescriptorType; ///< STRING descriptor type. u8 bDescriptorType; ///< STRING descriptor type.
u16 wLANGID[]; ///< LANGID codes. u16 wLANGID[]; ///< LANGID codes.
} usb_language_descriptor_t; };
/** USB String Descriptor. See USB 1.1 spec, pp. 204 - 205 */ /** USB String Descriptor. See USB 1.1 spec, pp. 204 - 205 */
typedef struct { struct usb_string_descriptor {
u8 bLength; ///< Size of this descriptor in bytes. u8 bLength; ///< Size of this descriptor in bytes.
u8 bDescriptorType; ///< STRING descriptor type. u8 bDescriptorType; ///< STRING descriptor type.
u16 bString[]; ///< UNICODE encoded string. u16 bString[]; ///< UNICODE encoded string.
} usb_string_descriptor_t; };
/********************** USB Control Endpoint 0 related *********************/ /********************** USB Control Endpoint 0 related *********************/
/** USB Control Setup Data. See USB 1.1 spec, pp. 183 - 185 */ /** USB Control Setup Data. See USB 1.1 spec, pp. 183 - 185 */
typedef struct { struct setup_data {
u8 bmRequestType; ///< Characteristics of a request. u8 bmRequestType; ///< Characteristics of a request.
u8 bRequest; ///< Specific request. u8 bRequest; ///< Specific request.
u16 wValue; ///< Field that varies according to request. u16 wValue; ///< Field that varies according to request.
u16 wIndex; ///< Field that varies according to request. u16 wIndex; ///< Field that varies according to request.
u16 wLength; ///< Number of bytes to transfer in data stage. u16 wLength; ///< Number of bytes to transfer in data stage.
} setup_data_t; };
/* External declarations for variables that need to be accessed outside of /* External declarations for variables that need to be accessed outside of
* the USB module */ * the USB module */
extern volatile bool EP2_out; extern volatile bool EP2_out;
extern volatile bool EP2_in; extern volatile bool EP2_in;
extern volatile __xdata __at 0x7FE8 setup_data_t setup_data; extern volatile __xdata __at 0x7FE8 struct setup_data setup_data;
/* /*
* USB Request Types (bmRequestType): See USB 1.1 spec, page 183, table 9-2 * USB Request Types (bmRequestType): See USB 1.1 spec, page 183, table 9-2
@ -225,7 +225,7 @@ extern volatile __xdata __at 0x7FE8 setup_data_t setup_data;
/************************** EZ-USB specific stuff **************************/ /************************** EZ-USB specific stuff **************************/
/** USB Interrupts. See AN2131-TRM, page 9-4 for details */ /** USB Interrupts. See AN2131-TRM, page 9-4 for details */
typedef enum { enum usb_isr {
SUDAV_ISR = 13, SUDAV_ISR = 13,
SOF_ISR, SOF_ISR,
SUTOK_ISR, SUTOK_ISR,
@ -248,7 +248,7 @@ typedef enum {
EP6OUT_ISR, EP6OUT_ISR,
EP7IN_ISR, EP7IN_ISR,
EP7OUT_ISR EP7OUT_ISR
} USB_ISR; };
/*************************** Function Prototypes ***************************/ /*************************** Function Prototypes ***************************/

View File

@ -36,7 +36,7 @@
volatile bool EP2_out = 0; volatile bool EP2_out = 0;
volatile bool EP2_in = 0; volatile bool EP2_in = 0;
volatile __xdata __at 0x7FE8 setup_data_t setup_data; volatile __xdata __at 0x7FE8 struct setup_data setup_data;
/* Define number of endpoints (except Control Endpoint 0) in a central place. /* Define number of endpoints (except Control Endpoint 0) in a central place.
* Be sure to include the neccessary endpoint descriptors! */ * Be sure to include the neccessary endpoint descriptors! */
@ -56,8 +56,8 @@ volatile __xdata __at 0x7FE8 setup_data_t setup_data;
* old-fashioned way... * old-fashioned way...
*/ */
__code usb_device_descriptor_t device_descriptor = { __code struct usb_device_descriptor device_descriptor = {
/* .bLength = */ sizeof(usb_device_descriptor_t), /* .bLength = */ sizeof(struct usb_device_descriptor),
/* .bDescriptorType = */ DESCRIPTOR_TYPE_DEVICE, /* .bDescriptorType = */ DESCRIPTOR_TYPE_DEVICE,
/* .bcdUSB = */ 0x0110, /* BCD: 01.00 (Version 1.0 USB spec) */ /* .bcdUSB = */ 0x0110, /* BCD: 01.00 (Version 1.0 USB spec) */
/* .bDeviceClass = */ 0xFF, /* 0xFF = vendor-specific */ /* .bDeviceClass = */ 0xFF, /* 0xFF = vendor-specific */
@ -75,12 +75,13 @@ __code usb_device_descriptor_t device_descriptor = {
/* WARNING: ALL config, interface and endpoint descriptors MUST be adjacent! */ /* WARNING: ALL config, interface and endpoint descriptors MUST be adjacent! */
__code usb_config_descriptor_t config_descriptor = { __code struct usb_config_descriptor config_descriptor = {
/* .bLength = */ sizeof(usb_config_descriptor_t), /* .bLength = */ sizeof(struct usb_config_descriptor),
/* .bDescriptorType = */ DESCRIPTOR_TYPE_CONFIGURATION, /* .bDescriptorType = */ DESCRIPTOR_TYPE_CONFIGURATION,
/* .wTotalLength = */ sizeof(usb_config_descriptor_t) + /* .wTotalLength = */ sizeof(struct usb_config_descriptor) +
sizeof(usb_interface_descriptor_t) + sizeof(struct usb_interface_descriptor) +
NUM_ENDPOINTS * sizeof(usb_endpoint_descriptor_t), (NUM_ENDPOINTS *
sizeof(struct usb_endpoint_descriptor)),
/* .bNumInterfaces = */ 1, /* .bNumInterfaces = */ 1,
/* .bConfigurationValue = */ 1, /* .bConfigurationValue = */ 1,
/* .iConfiguration = */ 4, /* String describing this configuration */ /* .iConfiguration = */ 4, /* String describing this configuration */
@ -88,8 +89,8 @@ __code usb_config_descriptor_t config_descriptor = {
/* .MaxPower = */ 50 /* 100 mA */ /* .MaxPower = */ 50 /* 100 mA */
}; };
__code usb_interface_descriptor_t interface_descriptor00 = { __code struct usb_interface_descriptor interface_descriptor00 = {
/* .bLength = */ sizeof(usb_interface_descriptor_t), /* .bLength = */ sizeof(struct usb_interface_descriptor),
/* .bDescriptorType = */ DESCRIPTOR_TYPE_INTERFACE, /* .bDescriptorType = */ DESCRIPTOR_TYPE_INTERFACE,
/* .bInterfaceNumber = */ 0, /* .bInterfaceNumber = */ 0,
/* .bAlternateSetting = */ 0, /* .bAlternateSetting = */ 0,
@ -100,8 +101,8 @@ __code usb_interface_descriptor_t interface_descriptor00 = {
/* .iInterface = */ 0 /* .iInterface = */ 0
}; };
__code usb_endpoint_descriptor_t Bulk_EP2_IN_Endpoint_Descriptor = { __code struct usb_endpoint_descriptor Bulk_EP2_IN_Endpoint_Descriptor = {
/* .bLength = */ sizeof(usb_endpoint_descriptor_t), /* .bLength = */ sizeof(struct usb_endpoint_descriptor),
/* .bDescriptorType = */ 0x05, /* .bDescriptorType = */ 0x05,
/* .bEndpointAddress = */ 2 | USB_DIR_IN, /* .bEndpointAddress = */ 2 | USB_DIR_IN,
/* .bmAttributes = */ 0x02, /* .bmAttributes = */ 0x02,
@ -109,8 +110,8 @@ __code usb_endpoint_descriptor_t Bulk_EP2_IN_Endpoint_Descriptor = {
/* .bInterval = */ 0 /* .bInterval = */ 0
}; };
__code usb_endpoint_descriptor_t Bulk_EP2_OUT_Endpoint_Descriptor = { __code struct usb_endpoint_descriptor Bulk_EP2_OUT_Endpoint_Descriptor = {
/* .bLength = */ sizeof(usb_endpoint_descriptor_t), /* .bLength = */ sizeof(struct usb_endpoint_descriptor),
/* .bDescriptorType = */ 0x05, /* .bDescriptorType = */ 0x05,
/* .bEndpointAddress = */ 2 | USB_DIR_OUT, /* .bEndpointAddress = */ 2 | USB_DIR_OUT,
/* .bmAttributes = */ 0x02, /* .bmAttributes = */ 0x02,
@ -118,19 +119,26 @@ __code usb_endpoint_descriptor_t Bulk_EP2_OUT_Endpoint_Descriptor = {
/* .bInterval = */ 0 /* .bInterval = */ 0
}; };
__code usb_language_descriptor_t language_descriptor = { __code struct usb_language_descriptor language_descriptor = {
/* .bLength = */ 4, /* .bLength = */ 4,
/* .bDescriptorType = */ DESCRIPTOR_TYPE_STRING, /* .bDescriptorType = */ DESCRIPTOR_TYPE_STRING,
/* .wLANGID = */ {0x0409 /* US English */} /* .wLANGID = */ {0x0409 /* US English */}
}; };
__code usb_string_descriptor_t strManufacturer = STR_DESCR(9,'O','p','e','n','U','L','I','N','K'); __code struct usb_string_descriptor strManufacturer =
__code usb_string_descriptor_t strProduct = STR_DESCR(9,'O','p','e','n','U','L','I','N','K'); STR_DESCR(9,'O','p','e','n','U','L','I','N','K');
__code usb_string_descriptor_t strSerialNumber = STR_DESCR(6, '0','0','0','0','0','1');
__code usb_string_descriptor_t strConfigDescr = STR_DESCR(12, 'J','T','A','G',' ','A','d','a','p','t','e','r'); __code struct usb_string_descriptor strProduct =
STR_DESCR(9,'O','p','e','n','U','L','I','N','K');
__code struct usb_string_descriptor strSerialNumber =
STR_DESCR(6, '0','0','0','0','0','1');
__code struct usb_string_descriptor strConfigDescr =
STR_DESCR(12, 'J','T','A','G',' ','A','d','a','p','t','e','r');
/* Table containing pointers to string descriptors */ /* Table containing pointers to string descriptors */
__code usb_string_descriptor_t* __code en_string_descriptors[4] = { __code struct usb_string_descriptor* __code en_string_descriptors[4] = {
&strManufacturer, &strManufacturer,
&strProduct, &strProduct,
&strSerialNumber, &strSerialNumber,