aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/jtag/drivers/OpenULINK/src/usb.c113
1 files changed, 49 insertions, 64 deletions
diff --git a/src/jtag/drivers/OpenULINK/src/usb.c b/src/jtag/drivers/OpenULINK/src/usb.c
index 557afff5..98ae67f7 100644
--- a/src/jtag/drivers/OpenULINK/src/usb.c
+++ b/src/jtag/drivers/OpenULINK/src/usb.c
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2011 by Martin Schmoelzer *
+ * Copyright (C) 2011-2013 by Martin Schmoelzer *
* <martin.schmoelzer@student.tuwien.ac.at> *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -43,87 +43,72 @@ volatile __xdata __at 0x7FE8 struct setup_data setup_data;
* Be sure to include the neccessary endpoint descriptors! */
#define NUM_ENDPOINTS 2
-/*
- * Normally, we would initialize the descriptor structures in C99 style:
- *
- * __code usb_device_descriptor_t device_descriptor = {
- * .bLength = foo,
- * .bDescriptorType = bar,
- * .bcdUSB = 0xABCD,
- * ...
- * };
- *
- * But SDCC currently does not support this, so we have to do it the
- * old-fashioned way...
- */
-
__code struct usb_device_descriptor device_descriptor = {
- /* .bLength = */ sizeof(struct usb_device_descriptor),
- /* .bDescriptorType = */ DESCRIPTOR_TYPE_DEVICE,
- /* .bcdUSB = */ 0x0110, /* BCD: 01.00 (Version 1.0 USB spec) */
- /* .bDeviceClass = */ 0xFF, /* 0xFF = vendor-specific */
- /* .bDeviceSubClass = */ 0xFF,
- /* .bDeviceProtocol = */ 0xFF,
- /* .bMaxPacketSize0 = */ 64,
- /* .idVendor = */ 0xC251,
- /* .idProduct = */ 0x2710,
- /* .bcdDevice = */ 0x0100,
- /* .iManufacturer = */ 1,
- /* .iProduct = */ 2,
- /* .iSerialNumber = */ 3,
- /* .bNumConfigurations = */ 1
+ .bLength = sizeof(struct usb_device_descriptor),
+ .bDescriptorType = DESCRIPTOR_TYPE_DEVICE,
+ .bcdUSB = 0x0110, /* BCD: 01.00 (Version 1.0 USB spec) */
+ .bDeviceClass = 0xFF, /* 0xFF = vendor-specific */
+ .bDeviceSubClass = 0xFF,
+ .bDeviceProtocol = 0xFF,
+ .bMaxPacketSize0 = 64,
+ .idVendor = 0xC251,
+ .idProduct = 0x2710,
+ .bcdDevice = 0x0100,
+ .iManufacturer = 1,
+ .iProduct = 2,
+ .iSerialNumber = 3,
+ .bNumConfigurations = 1
};
/* WARNING: ALL config, interface and endpoint descriptors MUST be adjacent! */
__code struct usb_config_descriptor config_descriptor = {
- /* .bLength = */ sizeof(struct usb_config_descriptor),
- /* .bDescriptorType = */ DESCRIPTOR_TYPE_CONFIGURATION,
- /* .wTotalLength = */ sizeof(struct usb_config_descriptor) +
- sizeof(struct usb_interface_descriptor) +
- (NUM_ENDPOINTS *
- sizeof(struct usb_endpoint_descriptor)),
- /* .bNumInterfaces = */ 1,
- /* .bConfigurationValue = */ 1,
- /* .iConfiguration = */ 4, /* String describing this configuration */
- /* .bmAttributes = */ 0x80, /* Only MSB set according to USB spec */
- /* .MaxPower = */ 50 /* 100 mA */
+ .bLength = sizeof(struct usb_config_descriptor),
+ .bDescriptorType = DESCRIPTOR_TYPE_CONFIGURATION,
+ .wTotalLength = sizeof(struct usb_config_descriptor) +
+ sizeof(struct usb_interface_descriptor) +
+ (NUM_ENDPOINTS * sizeof(struct usb_endpoint_descriptor)),
+ .bNumInterfaces = 1,
+ .bConfigurationValue = 1,
+ .iConfiguration = 4, /* String describing this configuration */
+ .bmAttributes = 0x80, /* Only MSB set according to USB spec */
+ .MaxPower = 50 /* 100 mA */
};
__code struct usb_interface_descriptor interface_descriptor00 = {
- /* .bLength = */ sizeof(struct usb_interface_descriptor),
- /* .bDescriptorType = */ DESCRIPTOR_TYPE_INTERFACE,
- /* .bInterfaceNumber = */ 0,
- /* .bAlternateSetting = */ 0,
- /* .bNumEndpoints = */ NUM_ENDPOINTS,
- /* .bInterfaceClass = */ 0xFF,
- /* .bInterfaceSubclass = */ 0xFF,
- /* .bInterfaceProtocol = */ 0xFF,
- /* .iInterface = */ 0
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = DESCRIPTOR_TYPE_INTERFACE,
+ .bInterfaceNumber = 0,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = NUM_ENDPOINTS,
+ .bInterfaceClass = 0xFF,
+ .bInterfaceSubclass = 0xFF,
+ .bInterfaceProtocol = 0xFF,
+ .iInterface = 0
};
__code struct usb_endpoint_descriptor Bulk_EP2_IN_Endpoint_Descriptor = {
- /* .bLength = */ sizeof(struct usb_endpoint_descriptor),
- /* .bDescriptorType = */ 0x05,
- /* .bEndpointAddress = */ 2 | USB_DIR_IN,
- /* .bmAttributes = */ 0x02,
- /* .wMaxPacketSize = */ 64,
- /* .bInterval = */ 0
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = 0x05,
+ .bEndpointAddress = (2 | USB_DIR_IN),
+ .bmAttributes = 0x02,
+ .wMaxPacketSize = 64,
+ .bInterval = 0
};
__code struct usb_endpoint_descriptor Bulk_EP2_OUT_Endpoint_Descriptor = {
- /* .bLength = */ sizeof(struct usb_endpoint_descriptor),
- /* .bDescriptorType = */ 0x05,
- /* .bEndpointAddress = */ 2 | USB_DIR_OUT,
- /* .bmAttributes = */ 0x02,
- /* .wMaxPacketSize = */ 64,
- /* .bInterval = */ 0
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = 0x05,
+ .bEndpointAddress = (2 | USB_DIR_OUT),
+ .bmAttributes = 0x02,
+ .wMaxPacketSize = 64,
+ .bInterval = 0
};
__code struct usb_language_descriptor language_descriptor = {
- /* .bLength = */ 4,
- /* .bDescriptorType = */ DESCRIPTOR_TYPE_STRING,
- /* .wLANGID = */ {0x0409 /* US English */}
+ .bLength = 4,
+ .bDescriptorType = DESCRIPTOR_TYPE_STRING,
+ .wLANGID = {0x0409 /* US English */}
};
__code struct usb_string_descriptor strManufacturer =