ME11B Sample Code in Maxim Integrated Team

Dependencies:   BMI160 max32630hsp3 MemoryLCD USBDevice

Fork of Host_Software_MAX32664GWEB_HR_EXTENDED by Seyhmus Cacina

Committer:
seyhmus.cacina
Date:
Mon Mar 18 10:21:53 2019 +0300
Revision:
0:ac4dea3e2894
ME11B Sample Code First Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
seyhmus.cacina 0:ac4dea3e2894 1 /* Copyright (c) 2010-2011 mbed.org, MIT License
seyhmus.cacina 0:ac4dea3e2894 2 *
seyhmus.cacina 0:ac4dea3e2894 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
seyhmus.cacina 0:ac4dea3e2894 4 * and associated documentation files (the "Software"), to deal in the Software without
seyhmus.cacina 0:ac4dea3e2894 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
seyhmus.cacina 0:ac4dea3e2894 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
seyhmus.cacina 0:ac4dea3e2894 7 * Software is furnished to do so, subject to the following conditions:
seyhmus.cacina 0:ac4dea3e2894 8 *
seyhmus.cacina 0:ac4dea3e2894 9 * The above copyright notice and this permission notice shall be included in all copies or
seyhmus.cacina 0:ac4dea3e2894 10 * substantial portions of the Software.
seyhmus.cacina 0:ac4dea3e2894 11 *
seyhmus.cacina 0:ac4dea3e2894 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
seyhmus.cacina 0:ac4dea3e2894 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
seyhmus.cacina 0:ac4dea3e2894 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
seyhmus.cacina 0:ac4dea3e2894 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
seyhmus.cacina 0:ac4dea3e2894 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
seyhmus.cacina 0:ac4dea3e2894 17 */
seyhmus.cacina 0:ac4dea3e2894 18
seyhmus.cacina 0:ac4dea3e2894 19 #include "stdint.h"
seyhmus.cacina 0:ac4dea3e2894 20 #include "USBCDC.h"
seyhmus.cacina 0:ac4dea3e2894 21
seyhmus.cacina 0:ac4dea3e2894 22 static uint8_t cdc_line_coding[7]= {0x80, 0x25, 0x00, 0x00, 0x00, 0x00, 0x08};
seyhmus.cacina 0:ac4dea3e2894 23
seyhmus.cacina 0:ac4dea3e2894 24 #define DEFAULT_CONFIGURATION (1)
seyhmus.cacina 0:ac4dea3e2894 25
seyhmus.cacina 0:ac4dea3e2894 26 #define CDC_SET_LINE_CODING 0x20
seyhmus.cacina 0:ac4dea3e2894 27 #define CDC_GET_LINE_CODING 0x21
seyhmus.cacina 0:ac4dea3e2894 28 #define CDC_SET_CONTROL_LINE_STATE 0x22
seyhmus.cacina 0:ac4dea3e2894 29
seyhmus.cacina 0:ac4dea3e2894 30 // Control Line State bits
seyhmus.cacina 0:ac4dea3e2894 31 #define CLS_DTR (1 << 0)
seyhmus.cacina 0:ac4dea3e2894 32 #define CLS_RTS (1 << 1)
seyhmus.cacina 0:ac4dea3e2894 33
seyhmus.cacina 0:ac4dea3e2894 34 #define MAX_CDC_REPORT_SIZE MAX_PACKET_SIZE_EPBULK
seyhmus.cacina 0:ac4dea3e2894 35
seyhmus.cacina 0:ac4dea3e2894 36 USBCDC::USBCDC(uint16_t vendor_id, uint16_t product_id, uint16_t product_release, bool connect_blocking): USBDevice(vendor_id, product_id, product_release) {
seyhmus.cacina 0:ac4dea3e2894 37 terminal_connected = false;
seyhmus.cacina 0:ac4dea3e2894 38 USBDevice::connect(connect_blocking);
seyhmus.cacina 0:ac4dea3e2894 39 }
seyhmus.cacina 0:ac4dea3e2894 40
seyhmus.cacina 0:ac4dea3e2894 41 bool USBCDC::USBCallback_request(void) {
seyhmus.cacina 0:ac4dea3e2894 42 /* Called in ISR context */
seyhmus.cacina 0:ac4dea3e2894 43
seyhmus.cacina 0:ac4dea3e2894 44 bool success = false;
seyhmus.cacina 0:ac4dea3e2894 45 CONTROL_TRANSFER * transfer = getTransferPtr();
seyhmus.cacina 0:ac4dea3e2894 46
seyhmus.cacina 0:ac4dea3e2894 47 /* Process class-specific requests */
seyhmus.cacina 0:ac4dea3e2894 48
seyhmus.cacina 0:ac4dea3e2894 49 if (transfer->setup.bmRequestType.Type == CLASS_TYPE) {
seyhmus.cacina 0:ac4dea3e2894 50 switch (transfer->setup.bRequest) {
seyhmus.cacina 0:ac4dea3e2894 51 case CDC_GET_LINE_CODING:
seyhmus.cacina 0:ac4dea3e2894 52 transfer->remaining = 7;
seyhmus.cacina 0:ac4dea3e2894 53 transfer->ptr = cdc_line_coding;
seyhmus.cacina 0:ac4dea3e2894 54 transfer->direction = DEVICE_TO_HOST;
seyhmus.cacina 0:ac4dea3e2894 55 success = true;
seyhmus.cacina 0:ac4dea3e2894 56 break;
seyhmus.cacina 0:ac4dea3e2894 57 case CDC_SET_LINE_CODING:
seyhmus.cacina 0:ac4dea3e2894 58 transfer->remaining = 7;
seyhmus.cacina 0:ac4dea3e2894 59 transfer->notify = true;
seyhmus.cacina 0:ac4dea3e2894 60 success = true;
seyhmus.cacina 0:ac4dea3e2894 61 break;
seyhmus.cacina 0:ac4dea3e2894 62 case CDC_SET_CONTROL_LINE_STATE:
seyhmus.cacina 0:ac4dea3e2894 63 if (transfer->setup.wValue & CLS_DTR) {
seyhmus.cacina 0:ac4dea3e2894 64 terminal_connected = true;
seyhmus.cacina 0:ac4dea3e2894 65 } else {
seyhmus.cacina 0:ac4dea3e2894 66 terminal_connected = false;
seyhmus.cacina 0:ac4dea3e2894 67 }
seyhmus.cacina 0:ac4dea3e2894 68 success = true;
seyhmus.cacina 0:ac4dea3e2894 69 break;
seyhmus.cacina 0:ac4dea3e2894 70 default:
seyhmus.cacina 0:ac4dea3e2894 71 break;
seyhmus.cacina 0:ac4dea3e2894 72 }
seyhmus.cacina 0:ac4dea3e2894 73 }
seyhmus.cacina 0:ac4dea3e2894 74
seyhmus.cacina 0:ac4dea3e2894 75 return success;
seyhmus.cacina 0:ac4dea3e2894 76 }
seyhmus.cacina 0:ac4dea3e2894 77
seyhmus.cacina 0:ac4dea3e2894 78 void USBCDC::USBCallback_requestCompleted(uint8_t *buf, uint32_t length) {
seyhmus.cacina 0:ac4dea3e2894 79 // Request of setting line coding has 7 bytes
seyhmus.cacina 0:ac4dea3e2894 80 if (length != 7) {
seyhmus.cacina 0:ac4dea3e2894 81 return;
seyhmus.cacina 0:ac4dea3e2894 82 }
seyhmus.cacina 0:ac4dea3e2894 83
seyhmus.cacina 0:ac4dea3e2894 84 CONTROL_TRANSFER * transfer = getTransferPtr();
seyhmus.cacina 0:ac4dea3e2894 85
seyhmus.cacina 0:ac4dea3e2894 86 /* Process class-specific requests */
seyhmus.cacina 0:ac4dea3e2894 87 if (transfer->setup.bmRequestType.Type == CLASS_TYPE) {
seyhmus.cacina 0:ac4dea3e2894 88 if (transfer->setup.bRequest == CDC_SET_LINE_CODING) {
seyhmus.cacina 0:ac4dea3e2894 89 if (memcmp(cdc_line_coding, buf, 7)) {
seyhmus.cacina 0:ac4dea3e2894 90 memcpy(cdc_line_coding, buf, 7);
seyhmus.cacina 0:ac4dea3e2894 91
seyhmus.cacina 0:ac4dea3e2894 92 int baud = buf[0] + (buf[1] << 8)
seyhmus.cacina 0:ac4dea3e2894 93 + (buf[2] << 16) + (buf[3] << 24);
seyhmus.cacina 0:ac4dea3e2894 94 int stop = buf[4];
seyhmus.cacina 0:ac4dea3e2894 95 int bits = buf[6];
seyhmus.cacina 0:ac4dea3e2894 96 int parity = buf[5];
seyhmus.cacina 0:ac4dea3e2894 97
seyhmus.cacina 0:ac4dea3e2894 98 lineCodingChanged(baud, bits, parity, stop);
seyhmus.cacina 0:ac4dea3e2894 99 }
seyhmus.cacina 0:ac4dea3e2894 100 }
seyhmus.cacina 0:ac4dea3e2894 101 }
seyhmus.cacina 0:ac4dea3e2894 102 }
seyhmus.cacina 0:ac4dea3e2894 103
seyhmus.cacina 0:ac4dea3e2894 104 // Called in ISR context
seyhmus.cacina 0:ac4dea3e2894 105 // Set configuration. Return false if the
seyhmus.cacina 0:ac4dea3e2894 106 // configuration is not supported.
seyhmus.cacina 0:ac4dea3e2894 107 bool USBCDC::USBCallback_setConfiguration(uint8_t configuration) {
seyhmus.cacina 0:ac4dea3e2894 108 if (configuration != DEFAULT_CONFIGURATION) {
seyhmus.cacina 0:ac4dea3e2894 109 return false;
seyhmus.cacina 0:ac4dea3e2894 110 }
seyhmus.cacina 0:ac4dea3e2894 111
seyhmus.cacina 0:ac4dea3e2894 112 // Configure endpoints > 0
seyhmus.cacina 0:ac4dea3e2894 113 addEndpoint(EPINT_IN, MAX_PACKET_SIZE_EPINT);
seyhmus.cacina 0:ac4dea3e2894 114 addEndpoint(EPBULK_IN, MAX_PACKET_SIZE_EPBULK);
seyhmus.cacina 0:ac4dea3e2894 115 addEndpoint(EPBULK_OUT, MAX_PACKET_SIZE_EPBULK);
seyhmus.cacina 0:ac4dea3e2894 116
seyhmus.cacina 0:ac4dea3e2894 117 // We activate the endpoint to be able to recceive data
seyhmus.cacina 0:ac4dea3e2894 118 readStart(EPBULK_OUT, MAX_PACKET_SIZE_EPBULK);
seyhmus.cacina 0:ac4dea3e2894 119 return true;
seyhmus.cacina 0:ac4dea3e2894 120 }
seyhmus.cacina 0:ac4dea3e2894 121
seyhmus.cacina 0:ac4dea3e2894 122 bool USBCDC::send(uint8_t * buffer, uint32_t size) {
seyhmus.cacina 0:ac4dea3e2894 123 return USBDevice::write(EPBULK_IN, buffer, size, MAX_CDC_REPORT_SIZE);
seyhmus.cacina 0:ac4dea3e2894 124 }
seyhmus.cacina 0:ac4dea3e2894 125
seyhmus.cacina 0:ac4dea3e2894 126 bool USBCDC::readEP(uint8_t * buffer, uint32_t * size) {
seyhmus.cacina 0:ac4dea3e2894 127 if (!USBDevice::readEP(EPBULK_OUT, buffer, size, MAX_CDC_REPORT_SIZE))
seyhmus.cacina 0:ac4dea3e2894 128 return false;
seyhmus.cacina 0:ac4dea3e2894 129 if (!readStart(EPBULK_OUT, MAX_CDC_REPORT_SIZE))
seyhmus.cacina 0:ac4dea3e2894 130 return false;
seyhmus.cacina 0:ac4dea3e2894 131 return true;
seyhmus.cacina 0:ac4dea3e2894 132 }
seyhmus.cacina 0:ac4dea3e2894 133
seyhmus.cacina 0:ac4dea3e2894 134 bool USBCDC::readEP_NB(uint8_t * buffer, uint32_t * size) {
seyhmus.cacina 0:ac4dea3e2894 135 if (!USBDevice::readEP_NB(EPBULK_OUT, buffer, size, MAX_CDC_REPORT_SIZE))
seyhmus.cacina 0:ac4dea3e2894 136 return false;
seyhmus.cacina 0:ac4dea3e2894 137 if (!readStart(EPBULK_OUT, MAX_CDC_REPORT_SIZE))
seyhmus.cacina 0:ac4dea3e2894 138 return false;
seyhmus.cacina 0:ac4dea3e2894 139 return true;
seyhmus.cacina 0:ac4dea3e2894 140 }
seyhmus.cacina 0:ac4dea3e2894 141
seyhmus.cacina 0:ac4dea3e2894 142
seyhmus.cacina 0:ac4dea3e2894 143 uint8_t * USBCDC::deviceDesc() {
seyhmus.cacina 0:ac4dea3e2894 144 static uint8_t deviceDescriptor[] = {
seyhmus.cacina 0:ac4dea3e2894 145 18, // bLength
seyhmus.cacina 0:ac4dea3e2894 146 1, // bDescriptorType
seyhmus.cacina 0:ac4dea3e2894 147 0x10, 0x01, // bcdUSB
seyhmus.cacina 0:ac4dea3e2894 148 2, // bDeviceClass
seyhmus.cacina 0:ac4dea3e2894 149 0, // bDeviceSubClass
seyhmus.cacina 0:ac4dea3e2894 150 0, // bDeviceProtocol
seyhmus.cacina 0:ac4dea3e2894 151 MAX_PACKET_SIZE_EP0, // bMaxPacketSize0
seyhmus.cacina 0:ac4dea3e2894 152 (uint8_t)(LSB(VENDOR_ID)), (uint8_t)(MSB(VENDOR_ID)), // idVendor
seyhmus.cacina 0:ac4dea3e2894 153 (uint8_t)(LSB(PRODUCT_ID)), (uint8_t)(MSB(PRODUCT_ID)),// idProduct
seyhmus.cacina 0:ac4dea3e2894 154 0x00, 0x01, // bcdDevice
seyhmus.cacina 0:ac4dea3e2894 155 1, // iManufacturer
seyhmus.cacina 0:ac4dea3e2894 156 2, // iProduct
seyhmus.cacina 0:ac4dea3e2894 157 3, // iSerialNumber
seyhmus.cacina 0:ac4dea3e2894 158 1 // bNumConfigurations
seyhmus.cacina 0:ac4dea3e2894 159 };
seyhmus.cacina 0:ac4dea3e2894 160 return deviceDescriptor;
seyhmus.cacina 0:ac4dea3e2894 161 }
seyhmus.cacina 0:ac4dea3e2894 162
seyhmus.cacina 0:ac4dea3e2894 163 uint8_t * USBCDC::stringIinterfaceDesc() {
seyhmus.cacina 0:ac4dea3e2894 164 static uint8_t stringIinterfaceDescriptor[] = {
seyhmus.cacina 0:ac4dea3e2894 165 0x08,
seyhmus.cacina 0:ac4dea3e2894 166 STRING_DESCRIPTOR,
seyhmus.cacina 0:ac4dea3e2894 167 'C',0,'D',0,'C',0,
seyhmus.cacina 0:ac4dea3e2894 168 };
seyhmus.cacina 0:ac4dea3e2894 169 return stringIinterfaceDescriptor;
seyhmus.cacina 0:ac4dea3e2894 170 }
seyhmus.cacina 0:ac4dea3e2894 171
seyhmus.cacina 0:ac4dea3e2894 172 uint8_t * USBCDC::stringIproductDesc() {
seyhmus.cacina 0:ac4dea3e2894 173 static uint8_t stringIproductDescriptor[] = {
seyhmus.cacina 0:ac4dea3e2894 174 0x16,
seyhmus.cacina 0:ac4dea3e2894 175 STRING_DESCRIPTOR,
seyhmus.cacina 0:ac4dea3e2894 176 'C',0,'D',0,'C',0,' ',0,'D',0,'E',0,'V',0,'I',0,'C',0,'E',0
seyhmus.cacina 0:ac4dea3e2894 177 };
seyhmus.cacina 0:ac4dea3e2894 178 return stringIproductDescriptor;
seyhmus.cacina 0:ac4dea3e2894 179 }
seyhmus.cacina 0:ac4dea3e2894 180
seyhmus.cacina 0:ac4dea3e2894 181
seyhmus.cacina 0:ac4dea3e2894 182 #define CONFIG1_DESC_SIZE (9+8+9+5+5+4+5+7+9+7+7)
seyhmus.cacina 0:ac4dea3e2894 183
seyhmus.cacina 0:ac4dea3e2894 184 uint8_t * USBCDC::configurationDesc() {
seyhmus.cacina 0:ac4dea3e2894 185 static uint8_t configDescriptor[] = {
seyhmus.cacina 0:ac4dea3e2894 186 // configuration descriptor
seyhmus.cacina 0:ac4dea3e2894 187 9, // bLength
seyhmus.cacina 0:ac4dea3e2894 188 2, // bDescriptorType
seyhmus.cacina 0:ac4dea3e2894 189 LSB(CONFIG1_DESC_SIZE), // wTotalLength
seyhmus.cacina 0:ac4dea3e2894 190 MSB(CONFIG1_DESC_SIZE),
seyhmus.cacina 0:ac4dea3e2894 191 2, // bNumInterfaces
seyhmus.cacina 0:ac4dea3e2894 192 1, // bConfigurationValue
seyhmus.cacina 0:ac4dea3e2894 193 0, // iConfiguration
seyhmus.cacina 0:ac4dea3e2894 194 0x80, // bmAttributes
seyhmus.cacina 0:ac4dea3e2894 195 50, // bMaxPower
seyhmus.cacina 0:ac4dea3e2894 196
seyhmus.cacina 0:ac4dea3e2894 197 // IAD to associate the two CDC interfaces
seyhmus.cacina 0:ac4dea3e2894 198 0x08, // bLength
seyhmus.cacina 0:ac4dea3e2894 199 0x0b, // bDescriptorType
seyhmus.cacina 0:ac4dea3e2894 200 0x00, // bFirstInterface
seyhmus.cacina 0:ac4dea3e2894 201 0x02, // bInterfaceCount
seyhmus.cacina 0:ac4dea3e2894 202 0x02, // bFunctionClass
seyhmus.cacina 0:ac4dea3e2894 203 0x02, // bFunctionSubClass
seyhmus.cacina 0:ac4dea3e2894 204 0, // bFunctionProtocol
seyhmus.cacina 0:ac4dea3e2894 205 0, // iFunction
seyhmus.cacina 0:ac4dea3e2894 206
seyhmus.cacina 0:ac4dea3e2894 207 // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
seyhmus.cacina 0:ac4dea3e2894 208 9, // bLength
seyhmus.cacina 0:ac4dea3e2894 209 4, // bDescriptorType
seyhmus.cacina 0:ac4dea3e2894 210 0, // bInterfaceNumber
seyhmus.cacina 0:ac4dea3e2894 211 0, // bAlternateSetting
seyhmus.cacina 0:ac4dea3e2894 212 1, // bNumEndpoints
seyhmus.cacina 0:ac4dea3e2894 213 0x02, // bInterfaceClass
seyhmus.cacina 0:ac4dea3e2894 214 0x02, // bInterfaceSubClass
seyhmus.cacina 0:ac4dea3e2894 215 0x01, // bInterfaceProtocol
seyhmus.cacina 0:ac4dea3e2894 216 0, // iInterface
seyhmus.cacina 0:ac4dea3e2894 217
seyhmus.cacina 0:ac4dea3e2894 218 // CDC Header Functional Descriptor, CDC Spec 5.2.3.1, Table 26
seyhmus.cacina 0:ac4dea3e2894 219 5, // bFunctionLength
seyhmus.cacina 0:ac4dea3e2894 220 0x24, // bDescriptorType
seyhmus.cacina 0:ac4dea3e2894 221 0x00, // bDescriptorSubtype
seyhmus.cacina 0:ac4dea3e2894 222 0x10, 0x01, // bcdCDC
seyhmus.cacina 0:ac4dea3e2894 223
seyhmus.cacina 0:ac4dea3e2894 224 // Call Management Functional Descriptor, CDC Spec 5.2.3.2, Table 27
seyhmus.cacina 0:ac4dea3e2894 225 5, // bFunctionLength
seyhmus.cacina 0:ac4dea3e2894 226 0x24, // bDescriptorType
seyhmus.cacina 0:ac4dea3e2894 227 0x01, // bDescriptorSubtype
seyhmus.cacina 0:ac4dea3e2894 228 0x03, // bmCapabilities
seyhmus.cacina 0:ac4dea3e2894 229 1, // bDataInterface
seyhmus.cacina 0:ac4dea3e2894 230
seyhmus.cacina 0:ac4dea3e2894 231 // Abstract Control Management Functional Descriptor, CDC Spec 5.2.3.3, Table 28
seyhmus.cacina 0:ac4dea3e2894 232 4, // bFunctionLength
seyhmus.cacina 0:ac4dea3e2894 233 0x24, // bDescriptorType
seyhmus.cacina 0:ac4dea3e2894 234 0x02, // bDescriptorSubtype
seyhmus.cacina 0:ac4dea3e2894 235 0x06, // bmCapabilities
seyhmus.cacina 0:ac4dea3e2894 236
seyhmus.cacina 0:ac4dea3e2894 237 // Union Functional Descriptor, CDC Spec 5.2.3.8, Table 33
seyhmus.cacina 0:ac4dea3e2894 238 5, // bFunctionLength
seyhmus.cacina 0:ac4dea3e2894 239 0x24, // bDescriptorType
seyhmus.cacina 0:ac4dea3e2894 240 0x06, // bDescriptorSubtype
seyhmus.cacina 0:ac4dea3e2894 241 0, // bMasterInterface
seyhmus.cacina 0:ac4dea3e2894 242 1, // bSlaveInterface0
seyhmus.cacina 0:ac4dea3e2894 243
seyhmus.cacina 0:ac4dea3e2894 244 // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13
seyhmus.cacina 0:ac4dea3e2894 245 ENDPOINT_DESCRIPTOR_LENGTH, // bLength
seyhmus.cacina 0:ac4dea3e2894 246 ENDPOINT_DESCRIPTOR, // bDescriptorType
seyhmus.cacina 0:ac4dea3e2894 247 PHY_TO_DESC(EPINT_IN), // bEndpointAddress
seyhmus.cacina 0:ac4dea3e2894 248 E_INTERRUPT, // bmAttributes (0x03=intr)
seyhmus.cacina 0:ac4dea3e2894 249 LSB(MAX_PACKET_SIZE_EPINT), // wMaxPacketSize (LSB)
seyhmus.cacina 0:ac4dea3e2894 250 MSB(MAX_PACKET_SIZE_EPINT), // wMaxPacketSize (MSB)
seyhmus.cacina 0:ac4dea3e2894 251 16, // bInterval
seyhmus.cacina 0:ac4dea3e2894 252
seyhmus.cacina 0:ac4dea3e2894 253
seyhmus.cacina 0:ac4dea3e2894 254
seyhmus.cacina 0:ac4dea3e2894 255
seyhmus.cacina 0:ac4dea3e2894 256 // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
seyhmus.cacina 0:ac4dea3e2894 257 9, // bLength
seyhmus.cacina 0:ac4dea3e2894 258 4, // bDescriptorType
seyhmus.cacina 0:ac4dea3e2894 259 1, // bInterfaceNumber
seyhmus.cacina 0:ac4dea3e2894 260 0, // bAlternateSetting
seyhmus.cacina 0:ac4dea3e2894 261 2, // bNumEndpoints
seyhmus.cacina 0:ac4dea3e2894 262 0x0A, // bInterfaceClass
seyhmus.cacina 0:ac4dea3e2894 263 0x00, // bInterfaceSubClass
seyhmus.cacina 0:ac4dea3e2894 264 0x00, // bInterfaceProtocol
seyhmus.cacina 0:ac4dea3e2894 265 0, // iInterface
seyhmus.cacina 0:ac4dea3e2894 266
seyhmus.cacina 0:ac4dea3e2894 267 // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13
seyhmus.cacina 0:ac4dea3e2894 268 ENDPOINT_DESCRIPTOR_LENGTH, // bLength
seyhmus.cacina 0:ac4dea3e2894 269 ENDPOINT_DESCRIPTOR, // bDescriptorType
seyhmus.cacina 0:ac4dea3e2894 270 PHY_TO_DESC(EPBULK_IN), // bEndpointAddress
seyhmus.cacina 0:ac4dea3e2894 271 E_BULK, // bmAttributes (0x02=bulk)
seyhmus.cacina 0:ac4dea3e2894 272 LSB(MAX_PACKET_SIZE_EPBULK),// wMaxPacketSize (LSB)
seyhmus.cacina 0:ac4dea3e2894 273 MSB(MAX_PACKET_SIZE_EPBULK),// wMaxPacketSize (MSB)
seyhmus.cacina 0:ac4dea3e2894 274 0, // bInterval
seyhmus.cacina 0:ac4dea3e2894 275
seyhmus.cacina 0:ac4dea3e2894 276 // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13
seyhmus.cacina 0:ac4dea3e2894 277 ENDPOINT_DESCRIPTOR_LENGTH, // bLength
seyhmus.cacina 0:ac4dea3e2894 278 ENDPOINT_DESCRIPTOR, // bDescriptorType
seyhmus.cacina 0:ac4dea3e2894 279 PHY_TO_DESC(EPBULK_OUT), // bEndpointAddress
seyhmus.cacina 0:ac4dea3e2894 280 E_BULK, // bmAttributes (0x02=bulk)
seyhmus.cacina 0:ac4dea3e2894 281 LSB(MAX_PACKET_SIZE_EPBULK),// wMaxPacketSize (LSB)
seyhmus.cacina 0:ac4dea3e2894 282 MSB(MAX_PACKET_SIZE_EPBULK),// wMaxPacketSize (MSB)
seyhmus.cacina 0:ac4dea3e2894 283 0 // bInterval
seyhmus.cacina 0:ac4dea3e2894 284 };
seyhmus.cacina 0:ac4dea3e2894 285 return configDescriptor;
seyhmus.cacina 0:ac4dea3e2894 286 }