// // Copyright 2013-2014 Ettus Research LLC // /* Define the USB 2.0 and USB 3.0 enumeration descriptions for the USRP B200 * device. */ #include "b200_main.h" /* Standard Device Descriptor for USB 2.0 */ uint8_t b200_usb2_dev_desc[] __attribute__ ((aligned (32))) = { 0x12, /* Descriptor size */ CY_U3P_USB_DEVICE_DESCR, /* Device descriptor type */ 0x10,0x02, /* USB 2.10 */ 0xFF, /* Device class */ 0x00, /* Device sub-class */ 0x00, /* Device protocol */ 0x40, /* Maxpacket size for EP0 : 64 bytes */ 0xB4,0x04, /* Vendor ID */ 0xF0,0x00, /* Product ID */ 0x00,0x00, /* Device release number */ 0x01, /* Manufacture string index */ 0x02, /* Product string index */ 0x03, /* Serial number string index */ 0x01 /* Number of configurations */ }; /* Standard Device Descriptor for USB 3.0 */ uint8_t b200_usb3_dev_desc[] __attribute__ ((aligned (32))) = { 0x12, /* Descriptor size */ CY_U3P_USB_DEVICE_DESCR, /* Device descriptor type */ 0x00,0x03, /* USB 3.0 */ 0xFF, /* Device class */ 0x00, /* Device sub-class */ 0x00, /* Device protocol */ 0x09, /* Maxpacket size for EP0 : 2^9 */ 0xB4,0x04, /* Vendor ID */ 0xF0,0x00, /* Product ID */ 0x00,0x00, /* Device release number */ 0x01, /* Manufacture string index */ 0x02, /* Product string index */ 0x03, /* Serial number string index */ 0x01 /* Number of configurations */ }; /* Binary Device Object Store Descriptor */ const uint8_t b200_usb_bos_desc[] __attribute__ ((aligned (32))) = { 0x05, /* Descriptor size */ CY_U3P_BOS_DESCR, /* Device descriptor type */ 0x16,0x00, /* Length of this descriptor and all sub descriptors */ 0x02, /* Number of device capability descriptors */ /* USB 2.0 extension */ 0x07, /* Descriptor size */ CY_U3P_DEVICE_CAPB_DESCR, /* Device capability type descriptor */ CY_U3P_USB2_EXTN_CAPB_TYPE, /* USB 2.0 extension capability type */ 0x02,0x00,0x00,0x00, /* Supported device level features: LPM support */ /* SuperSpeed device capability */ 0x0A, /* Descriptor size */ CY_U3P_DEVICE_CAPB_DESCR, /* Device capability type descriptor */ CY_U3P_SS_USB_CAPB_TYPE, /* SuperSpeed device capability type */ 0x00, /* Supported device level features */ 0x0E,0x00, /* Speeds supported by the device : SS, HS and FS */ 0x03, /* Functionality support */ 0x00, /* U1 Device Exit latency */ 0x00,0x00 /* U2 Device Exit latency */ }; /* Standard Device Qualifier Descriptor */ const uint8_t b200_dev_qual_desc[] __attribute__ ((aligned (32))) = { 0x0A, /* Descriptor size */ CY_U3P_USB_DEVQUAL_DESCR, /* Device qualifier descriptor type */ 0x00,0x02, /* USB 2.0 */ 0xFF, /* Device class */ 0x00, /* Device sub-class */ 0x00, /* Device protocol */ 0x40, /* Maxpacket size for EP0 : 64 bytes */ 0x01, /* Number of configurations */ 0x00 /* Reserved */ }; /* Standard Full Speed Configuration Descriptor */ const uint8_t b200_usb_fs_config_desc[] __attribute__ ((aligned (32))) = { /* Configuration descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_CONFIG_DESCR, /* Configuration descriptor type */ 0x52,0x00, /* Length of this descriptor and all sub descriptors */ 0x05, /* Number of interfaces */ 0x01, /* Configuration number */ 0x00, /* Configuration string index */ 0x80, /* Config characteristics - bus powered */ 0x01, /* Lie about the max power consumption (in 2mA unit) : 2mA */ /* Interface descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface descriptor type */ 0x00, /* Interface number */ 0x00, /* Alternate setting number */ 0x00, /* Number of endpoints */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x02, /* Interface descriptor string index */ /* Interface descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface descriptor type */ 0x01, /* Interface number */ 0x00, /* Alternate setting number */ 0x01, /* Number of endpoints */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x02, /* Interface descriptor string index */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ DATA_ENDPOINT_PRODUCER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x40,0x00, /* Max packet size = 64 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Interface descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface descriptor type */ 0x02, /* Interface number */ 0x00, /* Alternate setting number */ 0x01, /* Number of endpoints */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x02, /* Interface descriptor string index */ /* Endpoint descriptor for consumer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ DATA_ENDPOINT_CONSUMER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x40,0x00, /* Max packet size = 64 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Interface descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface descriptor type */ 0x03, /* Interface number */ 0x00, /* Alternate setting number */ 0x01, /* Number of endpoints */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x02, /* Interface descriptor string index */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ CTRL_ENDPOINT_PRODUCER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x40,0x00, /* Max packet size = 64 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Interface descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface descriptor type */ 0x04, /* Interface number */ 0x00, /* Alternate setting number */ 0x01, /* Number of endpoints */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x02, /* Interface descriptor string index */ /* Endpoint descriptor for consumer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ CTRL_ENDPOINT_CONSUMER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x40,0x00, /* Max packet size = 64 bytes */ 0x00 /* Servicing interval for data transfers : 0 for bulk */ }; /* Standard High Speed Configuration Descriptor */ const uint8_t b200_usb_hs_config_desc[] __attribute__ ((aligned (32))) = { /* Configuration descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_CONFIG_DESCR, /* Configuration descriptor type */ 0x52,0x00, /* Length of this descriptor and all sub descriptors */ 0x05, /* Number of interfaces */ 0x01, /* Configuration number */ 0x00, /* COnfiguration string index */ 0x80, /* Config characteristics - bus powered */ 0x01, /* Lie about the max power consumption (in 2mA unit) : 2mA */ /* Interface descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x00, /* Interface number */ 0x00, /* Alternate setting number */ 0x00, /* Number of endpoints */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x02, /* Interface descriptor string index */ /* Interface descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x01, /* Interface number */ 0x00, /* Alternate setting number */ 0x01, /* Number of endpoints */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x02, /* Interface descriptor string index */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ DATA_ENDPOINT_PRODUCER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x02, /* Max packet size = 512 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Interface descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x02, /* Interface number */ 0x00, /* Alternate setting number */ 0x01, /* Number of endpoints */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x02, /* Interface descriptor string index */ /* Endpoint descriptor for consumer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ DATA_ENDPOINT_CONSUMER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x02, /* Max packet size = 512 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Interface descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x03, /* Interface number */ 0x00, /* Alternate setting number */ 0x01, /* Number of endpoints */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x02, /* Interface descriptor string index */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ CTRL_ENDPOINT_PRODUCER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x02, /* Max packet size = 512 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Interface descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x04, /* Interface number */ 0x00, /* Alternate setting number */ 0x01, /* Number of endpoints */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x02, /* Interface descriptor string index */ /* Endpoint descriptor for consumer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ CTRL_ENDPOINT_CONSUMER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x02, /* Max packet size = 512 bytes */ 0x00 /* Servicing interval for data transfers : 0 for bulk */ }; /* Standard Super Speed Configuration Descriptor */ const uint8_t b200_usb_ss_config_desc[] __attribute__ ((aligned (32))) = { /* Configuration descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_CONFIG_DESCR, /* Configuration descriptor type */ 0x6A,0x00, /* Length of this descriptor and all sub descriptors */ 0x05, /* Number of interfaces */ 0x01, /* Configuration number */ 0x00, /* COnfiguration string index */ 0x80, /* Config characteristics - D6: Self power; D5: Remote wakeup */ 0x01, /* Lie about the max power consumption (in 8mA unit) : 8mA */ /* Interface descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x00, /* Interface number */ 0x00, /* Alternate setting number */ 0x00, /* Number of end points */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x02, /* Interface descriptor string index */ /* Interface descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x01, /* Interface number */ 0x00, /* Alternate setting number */ 0x01, /* Number of end points */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x02, /* Interface descriptor string index */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ DATA_ENDPOINT_PRODUCER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x04, /* Max packet size = 1024 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Super speed endpoint companion descriptor for producer EP */ 0x06, /* Descriptor size */ CY_U3P_SS_EP_COMPN_DESCR, /* SS endpoint companion descriptor type */ (USB3_PACKETS_PER_BURST - 1), /* Max no. of packets in a burst : 0: burst 1 packet at a time */ 0x00, /* Max streams for bulk EP = 0 (No streams) */ 0x00,0x00, /* Service interval for the EP : 0 for bulk */ /* Interface descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x02, /* Interface number */ 0x00, /* Alternate setting number */ 0x01, /* Number of end points */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x02, /* Interface descriptor string index */ /* Endpoint descriptor for consumer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ DATA_ENDPOINT_CONSUMER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x04, /* Max packet size = 1024 bytes */ 0x00, /* Servicing interval for data transfers : 0 for Bulk */ /* Super speed endpoint companion descriptor for consumer EP */ 0x06, /* Descriptor size */ CY_U3P_SS_EP_COMPN_DESCR, /* SS endpoint companion descriptor type */ (USB3_PACKETS_PER_BURST - 1), /* Max no. of packets in a burst : 0: burst 1 packet at a time */ 0x00, /* Max streams for bulk EP = 0 (No streams) */ 0x00,0x00, /* Service interval for the EP : 0 for bulk */ /* Interface descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x03, /* Interface number */ 0x00, /* Alternate setting number */ 0x01, /* Number of end points */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x02, /* Interface descriptor string index */ /* Endpoint descriptor for producer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ CTRL_ENDPOINT_PRODUCER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x04, /* Max packet size = 1024 bytes */ 0x00, /* Servicing interval for data transfers : 0 for bulk */ /* Super speed endpoint companion descriptor for producer EP */ 0x06, /* Descriptor size */ CY_U3P_SS_EP_COMPN_DESCR, /* SS endpoint companion descriptor type */ (USB3_PACKETS_PER_BURST - 1), /* Max no. of packets in a burst : 0: burst 1 packet at a time */ 0x00, /* Max streams for bulk EP = 0 (No streams) */ 0x00,0x00, /* Service interval for the EP : 0 for bulk */ /* Interface descriptor */ 0x09, /* Descriptor size */ CY_U3P_USB_INTRFC_DESCR, /* Interface Descriptor type */ 0x04, /* Interface number */ 0x00, /* Alternate setting number */ 0x01, /* Number of end points */ 0xFF, /* Interface class */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol code */ 0x02, /* Interface descriptor string index */ /* Endpoint descriptor for consumer EP */ 0x07, /* Descriptor size */ CY_U3P_USB_ENDPNT_DESCR, /* Endpoint descriptor type */ CTRL_ENDPOINT_CONSUMER, /* Endpoint address and description */ CY_U3P_USB_EP_BULK, /* Bulk endpoint type */ 0x00,0x04, /* Max packet size = 1024 bytes */ 0x00, /* Servicing interval for data transfers : 0 for Bulk */ /* Super speed endpoint companion descriptor for consumer EP */ 0x06, /* Descriptor size */ CY_U3P_SS_EP_COMPN_DESCR, /* SS endpoint companion descriptor type */ (USB3_PACKETS_PER_BURST - 1), /* Max no. of packets in a burst : 0: burst 1 packet at a time */ 0x00, /* Max streams for bulk EP = 0 (No streams) */ 0x00,0x00 /* Service interval for the EP : 0 for bulk */ }; /* Standard Language ID String Descriptor */ const uint8_t b200_string_lang_id_desc[] __attribute__ ((aligned (32))) = { 0x04, /* Descriptor Size */ CY_U3P_USB_STRING_DESCR, /* Device Descriptor Type */ 0x09,0x04 /* Language ID supported */ }; /* Standard Manufacturer String Descriptor */ const uint8_t b200_usb_manufacture_desc[] __attribute__ ((aligned (32))) = { 0x26, /* Descriptor Size */ CY_U3P_USB_STRING_DESCR, /* Device Descriptor Type */ 'E',0x00, 't',0x00, 't',0x00, 'u',0x00, 's',0x00, ' ',0x00, 'R',0x00, 'e',0x00, 's',0x00, 'e',0x00, 'a',0x00, 'r',0x00, 'c',0x00, 'h',0x00, ' ',0x00, 'L',0x00, 'L',0x00, 'C',0x00 }; /* NI Manufacturer String Descriptor */ const uint8_t niusrp_usb_manufacture_desc[] __attribute__ ((aligned (32))) = { 0x36, /* Descriptor Size */ CY_U3P_USB_STRING_DESCR, /* Device Descriptor Type */ 'N',0x00, 'a',0x00, 't',0x00, 'i',0x00, 'o',0x00, 'n',0x00, 'a',0x00, 'l',0x00, ' ',0x00, 'I',0x00, 'n',0x00, 's',0x00, 't',0x00, 'r',0x00, 'u',0x00, 'm',0x00, 'e',0x00, 'n',0x00, 't',0x00, 's',0x00, ' ',0x00, 'C',0x00, 'o',0x00, 'r',0x00, 'p',0x00, '.',0x00 }; /* Standard Product String Descriptor */ const uint8_t b200_usb_product_desc[] __attribute__ ((aligned (32))) = { 0x14, /* Descriptor Size */ CY_U3P_USB_STRING_DESCR, /* Device Descriptor Type */ 'U',0x00, 'S',0x00, 'R',0x00, 'P',0x00, ' ',0x00, 'B',0x00, '2',0x00, '0',0x00, '0',0x00 }; /* NI-USRP 2900 Product String Descriptor */ const uint8_t niusrp_2900_usb_product_desc[] __attribute__ ((aligned (32))) = { 0x1A, /* Descriptor Size */ CY_U3P_USB_STRING_DESCR, /* Device Descriptor Type */ 'N',0x00, 'I',0x00, ' ',0x00, 'U',0x00, 'S',0x00, 'R',0x00, 'P',0x00, '-',0x00, '2',0x00, '9',0x00, '0',0x00, '0',0x00 }; /* NI-USRP 2901 Product String Descriptor */ const uint8_t niusrp_2901_usb_product_desc[] __attribute__ ((aligned (32))) = { 0x1A, /* Descriptor Size */ CY_U3P_USB_STRING_DESCR, /* Device Descriptor Type */ 'N',0x00, 'I',0x00, ' ',0x00, 'U',0x00, 'S',0x00, 'R',0x00, 'P',0x00, '-',0x00, '2',0x00, '9',0x00, '0',0x00, '1',0x00 }; const uint8_t unknown_desc[] __attribute__ ((aligned (32))) = { 0x10, /* Descriptor Size */ CY_U3P_USB_STRING_DESCR, /* Device Descriptor Type */ 'U',0x00, 'n',0x00, 'k',0x00, 'n',0x00, 'o',0x00, 'w',0x00, 'n',0x00 }; /* Microsoft OS Descriptor. */ const uint8_t CyFxUsbOSDscr[] __attribute__ ((aligned (32))) = { 0x10, CY_U3P_USB_STRING_DESCR, 'O', 0x00, 'S', 0x00, ' ', 0x00, 'D', 0x00, 'e', 0x00, 's', 0x00, 'c', 0x00 }; uint8_t dev_serial[20] __attribute__ ((aligned (32))) = { 0x14, CY_U3P_USB_STRING_DESCR, '0', 0x00, '0', 0x00, '0', 0x00, '0', 0x00, '0', 0x00, '0', 0x00, '0', 0x00, '0', 0x00, '0', 0x00 }; /* Place this buffer as the last buffer so that no other variable / code shares * the same cache line. Do not add any other variables / arrays in this file. * This will lead to variables sharing the same cache line. */ const uint8_t CyFxUsbDscrAlignBuffer[32] __attribute__ ((aligned (32)));