290 lines
9.8 KiB
C
290 lines
9.8 KiB
C
#include <stdlib.h>
|
|
|
|
#include <board.h>
|
|
|
|
#include <usb/common/core/USBGenericDescriptor.h>
|
|
#include <usb/common/core/USBDeviceDescriptor.h>
|
|
#include <usb/common/core/USBConfigurationDescriptor.h>
|
|
#include <usb/common/core/USBInterfaceDescriptor.h>
|
|
#include <usb/common/core/USBEndpointDescriptor.h>
|
|
//#include <usb/common/core/USBStringDescriptor.h>
|
|
|
|
#include <usb/device/core/USBDDriver.h>
|
|
#include <usb/device/core/USBDDriverDescriptors.h>
|
|
|
|
#define MIN(a, b) ((a < b) ? a : b)
|
|
|
|
#define ISOCH
|
|
|
|
struct perf_conf_descs {
|
|
USBConfigurationDescriptor configuration;
|
|
USBInterfaceDescriptor interface;
|
|
USBEndpointDescriptor bulkOut;
|
|
USBEndpointDescriptor bulkIn;
|
|
USBEndpointDescriptor bulkIn5;
|
|
} __attribute__((packed));
|
|
|
|
static const USBDeviceDescriptor dev_desc = {
|
|
.bLength = sizeof(USBDeviceDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_DEVICE,
|
|
.bcdUSB = USBDeviceDescriptor_USB2_00,
|
|
.bDeviceClass = 0xff,
|
|
.bDeviceSubClass = 0xff,
|
|
.bDeviceProtocol = 0xff,
|
|
.bMaxPacketSize0 = CHIP_USB_ENDPOINTS_MAXPACKETSIZE(0),
|
|
.idVendor = 0x16c0,
|
|
.idProduct = 0x0763,
|
|
.bcdDevice = 0x0100,
|
|
.iManufacturer = 0,
|
|
.iProduct = 0,
|
|
.iSerialNumber = 0,
|
|
.bNumConfigurations = 1,
|
|
};
|
|
|
|
static const USBDeviceQualifierDescriptor qual_desc = {
|
|
.bLength = sizeof(USBDeviceQualifierDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_DEVICEQUALIFIER,
|
|
.bcdUSB = USBDeviceDescriptor_USB2_00,
|
|
.bDeviceClass = 0xff,
|
|
.bDeviceSubClass = 0,
|
|
.bDeviceProtocol = 0xff,
|
|
.bMaxPacketSize0 = CHIP_USB_ENDPOINTS_MAXPACKETSIZE(0),
|
|
.bNumConfigurations = 1,
|
|
.bReserved = 0,
|
|
};
|
|
|
|
static const struct perf_conf_descs conf_desc = {
|
|
.configuration = {
|
|
.bLength = sizeof(USBConfigurationDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_CONFIGURATION,
|
|
.wTotalLength = sizeof(struct perf_conf_descs),
|
|
.bNumInterfaces = 1,
|
|
.bConfigurationValue = 1,
|
|
.iConfiguration = 0,
|
|
.bmAttributes = BOARD_USB_BMATTRIBUTES,
|
|
.bMaxPower = USBConfigurationDescriptor_POWER(100),
|
|
},
|
|
.interface = {
|
|
.bLength = sizeof(USBInterfaceDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_INTERFACE,
|
|
.bInterfaceNumber = 0,
|
|
.bAlternateSetting = 0,
|
|
.bNumEndpoints = 3,
|
|
.bInterfaceClass = 0xff,
|
|
.bInterfaceSubClass = 0,
|
|
.bInterfaceProtocol = 0xff,
|
|
.iInterface = 0,
|
|
},
|
|
.bulkOut = {
|
|
.bLength = sizeof(USBEndpointDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_ENDPOINT,
|
|
.bEndpointAddress = USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_OUT, 1),
|
|
.bmAttributes = USBEndpointDescriptor_BULK,
|
|
.wMaxPacketSize = MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(1), USBEndpointDescriptor_MAXBULKSIZE_FS),
|
|
.bInterval = 0,
|
|
},
|
|
.bulkIn = {
|
|
.bLength = sizeof(USBEndpointDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_ENDPOINT,
|
|
.bEndpointAddress = USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN, 2),
|
|
.bmAttributes = USBEndpointDescriptor_BULK,
|
|
.wMaxPacketSize = MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(2), USBEndpointDescriptor_MAXBULKSIZE_FS),
|
|
.bInterval = 0,
|
|
},
|
|
.bulkIn5 = {
|
|
.bLength = sizeof(USBEndpointDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_ENDPOINT,
|
|
.bEndpointAddress = USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN, 5),
|
|
#ifdef ISOCH
|
|
.bmAttributes = USBEndpointDescriptor_ISOCHRONOUS,
|
|
.wMaxPacketSize = MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(5), USBEndpointDescriptor_MAXISOCHRONOUSSIZE_FS),
|
|
.bInterval = 0,
|
|
#else
|
|
.bmAttributes = USBEndpointDescriptor_BULK,
|
|
.wMaxPacketSize = MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(5), USBEndpointDescriptor_MAXBULKSIZE_FS),
|
|
.bInterval = 0x04,
|
|
#endif
|
|
},
|
|
};
|
|
static const struct perf_conf_descs conf_desc_hs = {
|
|
.configuration = {
|
|
.bLength = sizeof(USBConfigurationDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_CONFIGURATION,
|
|
.wTotalLength = sizeof(struct perf_conf_descs),
|
|
.bNumInterfaces = 1,
|
|
.bConfigurationValue = 1,
|
|
.iConfiguration = 0,
|
|
.bmAttributes = BOARD_USB_BMATTRIBUTES,
|
|
.bMaxPower = USBConfigurationDescriptor_POWER(100),
|
|
},
|
|
.interface = {
|
|
.bLength = sizeof(USBInterfaceDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_INTERFACE,
|
|
.bInterfaceNumber = 0,
|
|
.bAlternateSetting = 0,
|
|
.bNumEndpoints = 3,
|
|
.bInterfaceClass = 0xff,
|
|
.bInterfaceSubClass = 0,
|
|
.bInterfaceProtocol = 0xff,
|
|
.iInterface = 0,
|
|
},
|
|
.bulkOut = {
|
|
.bLength = sizeof(USBEndpointDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_ENDPOINT,
|
|
.bEndpointAddress = USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_OUT, 1),
|
|
.bmAttributes = USBEndpointDescriptor_BULK,
|
|
.wMaxPacketSize = MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(1), USBEndpointDescriptor_MAXBULKSIZE_HS),
|
|
.bInterval = 0,
|
|
},
|
|
.bulkIn = {
|
|
.bLength = sizeof(USBEndpointDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_ENDPOINT,
|
|
.bEndpointAddress = USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN, 2),
|
|
.bmAttributes = USBEndpointDescriptor_BULK,
|
|
.wMaxPacketSize = MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(2), USBEndpointDescriptor_MAXBULKSIZE_HS),
|
|
.bInterval = 0,
|
|
},
|
|
.bulkIn5 = {
|
|
.bLength = sizeof(USBEndpointDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_ENDPOINT,
|
|
.bEndpointAddress = USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN, 5),
|
|
|
|
#ifdef ISOCH
|
|
.bmAttributes = USBEndpointDescriptor_ISOCHRONOUS,
|
|
.wMaxPacketSize = MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(5), USBEndpointDescriptor_MAXISOCHRONOUSSIZE_HS),
|
|
.bInterval = 0,
|
|
#else
|
|
.bmAttributes = USBEndpointDescriptor_BULK,
|
|
.wMaxPacketSize = MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(5), USBEndpointDescriptor_MAXBULKSIZE_HS),
|
|
.bInterval = 0,
|
|
#endif
|
|
},
|
|
};
|
|
|
|
static const struct perf_conf_descs conf_desc_other_fs = {
|
|
.configuration = {
|
|
.bLength = sizeof(USBConfigurationDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_OTHERSPEEDCONFIGURATION,
|
|
.wTotalLength = sizeof(struct perf_conf_descs),
|
|
.bNumInterfaces = 1,
|
|
.bConfigurationValue = 1,
|
|
.iConfiguration = 0,
|
|
.bmAttributes = BOARD_USB_BMATTRIBUTES,
|
|
.bMaxPower = USBConfigurationDescriptor_POWER(100),
|
|
},
|
|
.interface = {
|
|
.bLength = sizeof(USBInterfaceDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_INTERFACE,
|
|
.bInterfaceNumber = 0,
|
|
.bAlternateSetting = 0,
|
|
.bNumEndpoints = 3,
|
|
.bInterfaceClass = 0xff,
|
|
.bInterfaceSubClass = 0,
|
|
.bInterfaceProtocol = 0xff,
|
|
.iInterface = 0,
|
|
},
|
|
.bulkOut = {
|
|
.bLength = sizeof(USBEndpointDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_ENDPOINT,
|
|
.bEndpointAddress = USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_OUT, 1),
|
|
.bmAttributes = USBEndpointDescriptor_BULK,
|
|
.wMaxPacketSize = MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(1), USBEndpointDescriptor_MAXBULKSIZE_FS),
|
|
.bInterval = 0,
|
|
},
|
|
.bulkIn = {
|
|
.bLength = sizeof(USBEndpointDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_ENDPOINT,
|
|
.bEndpointAddress = USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN, 2),
|
|
.bmAttributes = USBEndpointDescriptor_BULK,
|
|
.wMaxPacketSize = MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(2), USBEndpointDescriptor_MAXBULKSIZE_FS),
|
|
.bInterval = 0,
|
|
},
|
|
.bulkIn5 = {
|
|
.bLength = sizeof(USBEndpointDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_ENDPOINT,
|
|
.bEndpointAddress = USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN, 5),
|
|
#ifdef ISOCH
|
|
.bmAttributes = USBEndpointDescriptor_ISOCHRONOUS,
|
|
.wMaxPacketSize = MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(5), USBEndpointDescriptor_MAXISOCHRONOUSSIZE_FS),
|
|
.bInterval = 0x04,
|
|
#else
|
|
.bmAttributes = USBEndpointDescriptor_BULK,
|
|
.wMaxPacketSize = MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(5), USBEndpointDescriptor_MAXBULKSIZE_FS),
|
|
.bInterval = 0,
|
|
#endif
|
|
},
|
|
};
|
|
static const struct perf_conf_descs conf_desc_other_hs = {
|
|
.configuration = {
|
|
.bLength = sizeof(USBConfigurationDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_OTHERSPEEDCONFIGURATION,
|
|
.wTotalLength = sizeof(struct perf_conf_descs),
|
|
.bNumInterfaces = 1,
|
|
.bConfigurationValue = 1,
|
|
.iConfiguration = 0,
|
|
.bmAttributes = BOARD_USB_BMATTRIBUTES,
|
|
.bMaxPower = USBConfigurationDescriptor_POWER(100),
|
|
},
|
|
.interface = {
|
|
.bLength = sizeof(USBInterfaceDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_INTERFACE,
|
|
.bInterfaceNumber = 0,
|
|
.bAlternateSetting = 0,
|
|
.bNumEndpoints = 3,
|
|
.bInterfaceClass = 0xff,
|
|
.bInterfaceSubClass = 0,
|
|
.bInterfaceProtocol = 0xff,
|
|
.iInterface = 0,
|
|
},
|
|
.bulkOut = {
|
|
.bLength = sizeof(USBEndpointDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_ENDPOINT,
|
|
.bEndpointAddress = USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_OUT, 1),
|
|
.bmAttributes = USBEndpointDescriptor_BULK,
|
|
.wMaxPacketSize = MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(1), USBEndpointDescriptor_MAXBULKSIZE_HS),
|
|
.bInterval = 0,
|
|
},
|
|
.bulkIn = {
|
|
.bLength = sizeof(USBEndpointDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_ENDPOINT,
|
|
.bEndpointAddress = USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN, 2),
|
|
.bmAttributes = USBEndpointDescriptor_BULK,
|
|
.wMaxPacketSize = MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(2), USBEndpointDescriptor_MAXBULKSIZE_HS),
|
|
.bInterval = 0,
|
|
},
|
|
.bulkIn5 = {
|
|
.bLength = sizeof(USBEndpointDescriptor),
|
|
.bDescriptorType = USBGenericDescriptor_ENDPOINT,
|
|
.bEndpointAddress = USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN, 5),
|
|
#ifdef ISOCH
|
|
.bmAttributes = USBEndpointDescriptor_ISOCHRONOUS,
|
|
.wMaxPacketSize = MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(5), USBEndpointDescriptor_MAXISOCHRONOUSSIZE_HS),
|
|
.bInterval = 0x04,
|
|
#else
|
|
.bmAttributes = USBEndpointDescriptor_BULK,
|
|
.wMaxPacketSize = MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(5), USBEndpointDescriptor_MAXBULKSIZE_HS),
|
|
.bInterval = 0,
|
|
#endif
|
|
},
|
|
};
|
|
|
|
const USBDDriverDescriptors usb_perf_driver_desc = {
|
|
.pFsDevice = &dev_desc,
|
|
.pFsConfiguration = &conf_desc,
|
|
.pFsQualifier = &qual_desc,
|
|
.pFsOtherSpeed = &conf_desc_other_fs,
|
|
.pHsDevice = &dev_desc,
|
|
.pHsConfiguration = &conf_desc_hs,
|
|
.pHsQualifier = &qual_desc,
|
|
.pHsOtherSpeed = &conf_desc_other_hs,
|
|
.pStrings = NULL,
|
|
.numStrings = 0,
|
|
};
|
|
|
|
#if 0
|
|
static USBDDriver perftest_usbdriver = {
|
|
.pDescriptors = &driver_desc,
|
|
//.pInterfaces =
|
|
};
|
|
#endif
|