Usb Bulk Tranceport driver Made by Shoichi Yamasuge. LoadLibray USBDEViCE. moive http://youtu.be/uGPH3AwrFpU USB バルク通信用のドライバーです 使用時には、USBDEVICEライブラリの追加必要。 動画は下記 http://youtu.be/uGPH3AwrFpU
USBBULK.cpp@3:a71b7d2b97ef, 2014-04-28 (annotated)
- Committer:
- yamasho
- Date:
- Mon Apr 28 07:37:14 2014 +0000
- Revision:
- 3:a71b7d2b97ef
- Parent:
- 2:2dc4682d7c0f
Description Modify;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yamasho | 0:e8c90969688d | 1 | #include "stdint.h" |
yamasho | 0:e8c90969688d | 2 | #include "USBHAL.h" |
yamasho | 0:e8c90969688d | 3 | #include "USBBULK.h" |
yamasho | 0:e8c90969688d | 4 | |
yamasho | 0:e8c90969688d | 5 | /* Made By Shoichi Yamasuge */ |
yamasho | 0:e8c90969688d | 6 | /* Operatration Movie */ |
yamasho | 0:e8c90969688d | 7 | /* http://youtu.be/uGPH3AwrFpU */ |
yamasho | 0:e8c90969688d | 8 | |
yamasho | 0:e8c90969688d | 9 | USBBULK::USBBULK( uint16_t vendor_id, uint16_t product_id, uint16_t product_release ):USBDevice( vendor_id, product_id, product_release) |
yamasho | 0:e8c90969688d | 10 | { |
yamasho | 0:e8c90969688d | 11 | VendorId = vendor_id; |
yamasho | 0:e8c90969688d | 12 | ProductId = product_id; |
yamasho | 0:e8c90969688d | 13 | ProductReleas = product_release; |
yamasho | 0:e8c90969688d | 14 | } |
yamasho | 0:e8c90969688d | 15 | |
yamasho | 0:e8c90969688d | 16 | |
yamasho | 0:e8c90969688d | 17 | bool USBBULK::Write( uint8_t *Data ) |
yamasho | 0:e8c90969688d | 18 | { |
yamasho | 0:e8c90969688d | 19 | return write(EPBULK_IN, Data, MAX_BULK_SIZE, MAX_BULK_SIZE); |
yamasho | 0:e8c90969688d | 20 | } |
yamasho | 0:e8c90969688d | 21 | |
yamasho | 0:e8c90969688d | 22 | bool USBBULK::WriteNB( uint8_t *Data ) |
yamasho | 0:e8c90969688d | 23 | { |
yamasho | 0:e8c90969688d | 24 | return writeNB(EPBULK_IN, Data, MAX_BULK_SIZE, MAX_BULK_SIZE); |
yamasho | 0:e8c90969688d | 25 | } |
yamasho | 0:e8c90969688d | 26 | |
yamasho | 0:e8c90969688d | 27 | bool USBBULK::read( uint8_t *Data ) |
yamasho | 0:e8c90969688d | 28 | { |
yamasho | 0:e8c90969688d | 29 | uint32_t bytesRead = 0; |
yamasho | 0:e8c90969688d | 30 | bool result; |
yamasho | 0:e8c90969688d | 31 | result = USBDevice::readEP(EPBULK_OUT, Data, &bytesRead, MAX_BULK_SIZE ); |
yamasho | 1:84abb7607a27 | 32 | #if defined(TARGET_LPC11UXX) |
yamasho | 2:2dc4682d7c0f | 33 | wait_us(100); //Counter Mesure USB Bank Wait!? |
yamasho | 1:84abb7607a27 | 34 | #endif |
yamasho | 2:2dc4682d7c0f | 35 | if(!readStart(EPBULK_OUT, MAX_BULK_SIZE )) |
yamasho | 0:e8c90969688d | 36 | { |
yamasho | 0:e8c90969688d | 37 | return false; |
yamasho | 0:e8c90969688d | 38 | } |
yamasho | 1:84abb7607a27 | 39 | |
yamasho | 0:e8c90969688d | 40 | return result; |
yamasho | 0:e8c90969688d | 41 | |
yamasho | 0:e8c90969688d | 42 | } |
yamasho | 0:e8c90969688d | 43 | |
yamasho | 0:e8c90969688d | 44 | bool USBBULK::readNB( uint8_t *Data ) |
yamasho | 0:e8c90969688d | 45 | { |
yamasho | 0:e8c90969688d | 46 | uint32_t bytesRead = 0; |
yamasho | 0:e8c90969688d | 47 | bool result; |
yamasho | 0:e8c90969688d | 48 | result = USBDevice::readEP_NB(EPBULK_OUT, Data, &bytesRead, MAX_BULK_SIZE ); |
yamasho | 1:84abb7607a27 | 49 | #if defined(TARGET_LPC11UXX) |
yamasho | 2:2dc4682d7c0f | 50 | wait_us(100); //Counter Mesure USB Bank Wait !? |
yamasho | 1:84abb7607a27 | 51 | #endif |
yamasho | 2:2dc4682d7c0f | 52 | if(!readStart(EPBULK_OUT, MAX_BULK_SIZE )) |
yamasho | 0:e8c90969688d | 53 | { |
yamasho | 0:e8c90969688d | 54 | return false; |
yamasho | 0:e8c90969688d | 55 | } |
yamasho | 1:84abb7607a27 | 56 | |
yamasho | 0:e8c90969688d | 57 | return result; |
yamasho | 0:e8c90969688d | 58 | } |
yamasho | 0:e8c90969688d | 59 | |
yamasho | 0:e8c90969688d | 60 | |
yamasho | 0:e8c90969688d | 61 | // |
yamasho | 0:e8c90969688d | 62 | // Route callbacks from lower layers to class(es) |
yamasho | 0:e8c90969688d | 63 | // |
yamasho | 0:e8c90969688d | 64 | |
yamasho | 0:e8c90969688d | 65 | #define DEFAULT_CONFIGURATION (1) |
yamasho | 0:e8c90969688d | 66 | |
yamasho | 0:e8c90969688d | 67 | |
yamasho | 0:e8c90969688d | 68 | bool USBBULK::USBCallback_setConfiguration(uint8_t configuration) |
yamasho | 0:e8c90969688d | 69 | { |
yamasho | 0:e8c90969688d | 70 | if (configuration != DEFAULT_CONFIGURATION) |
yamasho | 0:e8c90969688d | 71 | { |
yamasho | 0:e8c90969688d | 72 | return false; |
yamasho | 0:e8c90969688d | 73 | } |
yamasho | 0:e8c90969688d | 74 | |
yamasho | 0:e8c90969688d | 75 | addEndpoint(EPBULK_IN, MAX_PACKET_SIZE_EPINT); |
yamasho | 0:e8c90969688d | 76 | addEndpoint(EPBULK_OUT, MAX_PACKET_SIZE_EPINT); |
yamasho | 0:e8c90969688d | 77 | |
yamasho | 0:e8c90969688d | 78 | readStart(EPBULK_OUT, MAX_PACKET_SIZE_EPINT); |
yamasho | 0:e8c90969688d | 79 | return true; |
yamasho | 0:e8c90969688d | 80 | } |
yamasho | 0:e8c90969688d | 81 | |
yamasho | 0:e8c90969688d | 82 | uint8_t * USBBULK::stringLangidDesc() |
yamasho | 0:e8c90969688d | 83 | { |
yamasho | 0:e8c90969688d | 84 | static uint8_t stringLangidDescriptor[] = |
yamasho | 0:e8c90969688d | 85 | { |
yamasho | 0:e8c90969688d | 86 | 0x04, /*bLength*/ |
yamasho | 0:e8c90969688d | 87 | 0x03, /*bDescriptorType 0x03*/ |
yamasho | 0:e8c90969688d | 88 | 0x09, |
yamasho | 0:e8c90969688d | 89 | 0x04 /*bString Lang ID - 0x409 */ |
yamasho | 0:e8c90969688d | 90 | }; |
yamasho | 0:e8c90969688d | 91 | return stringLangidDescriptor; |
yamasho | 0:e8c90969688d | 92 | } |
yamasho | 0:e8c90969688d | 93 | |
yamasho | 0:e8c90969688d | 94 | uint8_t * USBBULK::stringImanufacturerDesc() |
yamasho | 0:e8c90969688d | 95 | { |
yamasho | 0:e8c90969688d | 96 | static uint8_t stringImanufacturerDescriptor[] = { |
yamasho | 0:e8c90969688d | 97 | 00, /* Dummy Lenght */ |
yamasho | 0:e8c90969688d | 98 | STRING_DESCRIPTOR, /*bDescriptorType 0x03*/ |
yamasho | 0:e8c90969688d | 99 | 'Y',0, |
yamasho | 0:e8c90969688d | 100 | 'o',0, |
yamasho | 0:e8c90969688d | 101 | 'u',0, |
yamasho | 0:e8c90969688d | 102 | 'r',0, |
yamasho | 0:e8c90969688d | 103 | ' ',0, |
yamasho | 0:e8c90969688d | 104 | 'C',0, |
yamasho | 0:e8c90969688d | 105 | 'o',0, |
yamasho | 0:e8c90969688d | 106 | 'm',0, |
yamasho | 0:e8c90969688d | 107 | 'p',0, |
yamasho | 0:e8c90969688d | 108 | 'a',0, |
yamasho | 0:e8c90969688d | 109 | 'n',0, |
yamasho | 0:e8c90969688d | 110 | 'y',0, |
yamasho | 0:e8c90969688d | 111 | ' ',0, |
yamasho | 0:e8c90969688d | 112 | 'N',0, |
yamasho | 0:e8c90969688d | 113 | 'a',0, |
yamasho | 0:e8c90969688d | 114 | 'm',0, |
yamasho | 0:e8c90969688d | 115 | 'e',0, |
yamasho | 0:e8c90969688d | 116 | 0 ,0 |
yamasho | 0:e8c90969688d | 117 | }; |
yamasho | 0:e8c90969688d | 118 | stringImanufacturerDescriptor[0] = sizeof(stringImanufacturerDescriptor-2); |
yamasho | 0:e8c90969688d | 119 | return stringImanufacturerDescriptor; |
yamasho | 0:e8c90969688d | 120 | } |
yamasho | 0:e8c90969688d | 121 | |
yamasho | 0:e8c90969688d | 122 | uint8_t * USBBULK::stringIserialDesc() |
yamasho | 0:e8c90969688d | 123 | { |
yamasho | 0:e8c90969688d | 124 | static uint8_t stringIserialDescriptor[] = { |
yamasho | 0:e8c90969688d | 125 | 00, /* Dummy Lenght */ |
yamasho | 0:e8c90969688d | 126 | STRING_DESCRIPTOR, /*bDescriptorType 0x03*/ |
yamasho | 0:e8c90969688d | 127 | '0',0, |
yamasho | 0:e8c90969688d | 128 | '1',0, |
yamasho | 0:e8c90969688d | 129 | '2',0, |
yamasho | 0:e8c90969688d | 130 | '3',0, |
yamasho | 0:e8c90969688d | 131 | '4',0, |
yamasho | 0:e8c90969688d | 132 | '5',0, |
yamasho | 0:e8c90969688d | 133 | '6',0, |
yamasho | 0:e8c90969688d | 134 | '7',0, |
yamasho | 0:e8c90969688d | 135 | '8',0, |
yamasho | 0:e8c90969688d | 136 | '9',0, |
yamasho | 0:e8c90969688d | 137 | 0,0 |
yamasho | 0:e8c90969688d | 138 | }; |
yamasho | 0:e8c90969688d | 139 | stringIserialDescriptor[0] = sizeof(stringIserialDescriptor)-2; // bLength |
yamasho | 0:e8c90969688d | 140 | return stringIserialDescriptor; |
yamasho | 0:e8c90969688d | 141 | } |
yamasho | 0:e8c90969688d | 142 | |
yamasho | 0:e8c90969688d | 143 | |
yamasho | 0:e8c90969688d | 144 | uint8_t * USBBULK::stringIproductDesc() |
yamasho | 0:e8c90969688d | 145 | { |
yamasho | 0:e8c90969688d | 146 | static uint8_t stringIproductlDescriptor[] = { |
yamasho | 0:e8c90969688d | 147 | 00, /* Dummy Lenght */ |
yamasho | 0:e8c90969688d | 148 | STRING_DESCRIPTOR, /*bDescriptorType 0x03*/ |
yamasho | 0:e8c90969688d | 149 | 'U',0, |
yamasho | 0:e8c90969688d | 150 | 's',0, |
yamasho | 0:e8c90969688d | 151 | 'b',0, |
yamasho | 0:e8c90969688d | 152 | ' ',0, |
yamasho | 0:e8c90969688d | 153 | 'B',0, |
yamasho | 0:e8c90969688d | 154 | 'u',0, |
yamasho | 0:e8c90969688d | 155 | 'l',0, |
yamasho | 0:e8c90969688d | 156 | 'k',0, |
yamasho | 0:e8c90969688d | 157 | ' ',0, |
yamasho | 0:e8c90969688d | 158 | 'P',0, |
yamasho | 0:e8c90969688d | 159 | 'r',0, |
yamasho | 0:e8c90969688d | 160 | 'o',0, |
yamasho | 0:e8c90969688d | 161 | 'd',0, |
yamasho | 0:e8c90969688d | 162 | 'u',0, |
yamasho | 0:e8c90969688d | 163 | 'c',0, |
yamasho | 0:e8c90969688d | 164 | 't',0, |
yamasho | 0:e8c90969688d | 165 | 0,0 |
yamasho | 0:e8c90969688d | 166 | }; |
yamasho | 0:e8c90969688d | 167 | stringIproductlDescriptor[0] = sizeof(stringIproductlDescriptor)-2; // bLength |
yamasho | 0:e8c90969688d | 168 | return stringIproductlDescriptor; |
yamasho | 0:e8c90969688d | 169 | } |
yamasho | 0:e8c90969688d | 170 | |
yamasho | 0:e8c90969688d | 171 | uint8_t * USBBULK::stringIConfigurationDesc() |
yamasho | 0:e8c90969688d | 172 | { |
yamasho | 0:e8c90969688d | 173 | static uint8_t stringIconfigurationDescriptor[] = { |
yamasho | 0:e8c90969688d | 174 | 00, //bLength |
yamasho | 0:e8c90969688d | 175 | STRING_DESCRIPTOR, /*bDescriptorType 0x03*/ |
yamasho | 0:e8c90969688d | 176 | '0',0,'1',0 /*bString iConfiguration - 01*/ |
yamasho | 0:e8c90969688d | 177 | }; |
yamasho | 0:e8c90969688d | 178 | stringIconfigurationDescriptor[0] = sizeof(stringIconfigurationDescriptor)-2; |
yamasho | 0:e8c90969688d | 179 | return stringIconfigurationDescriptor; |
yamasho | 0:e8c90969688d | 180 | } |
yamasho | 0:e8c90969688d | 181 | |
yamasho | 0:e8c90969688d | 182 | |
yamasho | 0:e8c90969688d | 183 | uint8_t * USBBULK::stringIinterfaceDesc() { |
yamasho | 0:e8c90969688d | 184 | static uint8_t stringIinterfaceDescriptor[] = { |
yamasho | 0:e8c90969688d | 185 | 0, //bLength |
yamasho | 0:e8c90969688d | 186 | STRING_DESCRIPTOR, //bDescriptorType 0x03 |
yamasho | 0:e8c90969688d | 187 | 'U',0, |
yamasho | 0:e8c90969688d | 188 | 's',0, |
yamasho | 0:e8c90969688d | 189 | 'b',0, |
yamasho | 0:e8c90969688d | 190 | ' ',0, |
yamasho | 0:e8c90969688d | 191 | 'B',0, |
yamasho | 0:e8c90969688d | 192 | 'u',0, |
yamasho | 0:e8c90969688d | 193 | 'l',0, |
yamasho | 0:e8c90969688d | 194 | 'k',0, |
yamasho | 0:e8c90969688d | 195 | ' ',0, |
yamasho | 0:e8c90969688d | 196 | 'I',0, |
yamasho | 0:e8c90969688d | 197 | 'n',0, |
yamasho | 0:e8c90969688d | 198 | 't',0, |
yamasho | 0:e8c90969688d | 199 | 'e',0, |
yamasho | 0:e8c90969688d | 200 | 'r',0, |
yamasho | 0:e8c90969688d | 201 | 'F',0, |
yamasho | 0:e8c90969688d | 202 | 'a',0, |
yamasho | 0:e8c90969688d | 203 | 'c',0, |
yamasho | 0:e8c90969688d | 204 | 'e',0, |
yamasho | 0:e8c90969688d | 205 | 0,0 |
yamasho | 0:e8c90969688d | 206 | }; |
yamasho | 0:e8c90969688d | 207 | stringIinterfaceDescriptor[0] = sizeof(stringIinterfaceDescriptor)-2; //bLength |
yamasho | 0:e8c90969688d | 208 | return stringIinterfaceDescriptor; |
yamasho | 0:e8c90969688d | 209 | } |
yamasho | 0:e8c90969688d | 210 | |
yamasho | 0:e8c90969688d | 211 | #define DEFAULT_CONFIGURATION (1) |
yamasho | 0:e8c90969688d | 212 | |
yamasho | 0:e8c90969688d | 213 | uint8_t * USBBULK::configurationDesc() { |
yamasho | 0:e8c90969688d | 214 | |
yamasho | 0:e8c90969688d | 215 | static uint8_t configurationDescriptor[] = { |
yamasho | 0:e8c90969688d | 216 | /* *****Configuration Descriptor ******** */ |
yamasho | 0:e8c90969688d | 217 | CONFIGURATION_DESCRIPTOR_LENGTH,// bLength (#9) |
yamasho | 0:e8c90969688d | 218 | CONFIGURATION_DESCRIPTOR, // bDescriptorType (#2) |
yamasho | 3:a71b7d2b97ef | 219 | LSB(CONFIGURATION_DESCRIPTOR_LENGTH+INTERFACE_DESCRIPTOR_LENGTH+ENDPOINT_DESCRIPTOR_LENGTH*2), // wTotalLength (LSB) |
yamasho | 3:a71b7d2b97ef | 220 | MSB(CONFIGURATION_DESCRIPTOR_LENGTH+INTERFACE_DESCRIPTOR_LENGTH+ENDPOINT_DESCRIPTOR_LENGTH*2), // wTotalLength (MSB) |
yamasho | 0:e8c90969688d | 221 | 0x01, // bNumInterfaces |
yamasho | 0:e8c90969688d | 222 | DEFAULT_CONFIGURATION, // bConfigurationValue |
yamasho | 0:e8c90969688d | 223 | 0x00, // iConfiguration |
yamasho | 0:e8c90969688d | 224 | C_RESERVED | C_SELF_POWERED, // bmAttributes |
yamasho | 0:e8c90969688d | 225 | C_POWER(250), // bMaxPower 250mA |
yamasho | 0:e8c90969688d | 226 | /* ****** Interface Descriptor ******** */ |
yamasho | 0:e8c90969688d | 227 | INTERFACE_DESCRIPTOR_LENGTH, // bLength (#9) |
yamasho | 0:e8c90969688d | 228 | INTERFACE_DESCRIPTOR, // bDescriptorType (#4) |
yamasho | 0:e8c90969688d | 229 | 0x00, // bInterfaceNumber: Number of Interface |
yamasho | 0:e8c90969688d | 230 | 0x00, // bAlternateSetting: Alternate setting |
yamasho | 0:e8c90969688d | 231 | 0x02, // bNumEndpoints: One endpoints used |
yamasho | 0:e8c90969688d | 232 | VENDER_SPECIFIC_CLASS, // bInterfaceClass: Communication Interface Class |
yamasho | 0:e8c90969688d | 233 | 0x00, // bInterfaceSubClass |
yamasho | 0:e8c90969688d | 234 | 0x00, // bInterfaceProtocol |
yamasho | 0:e8c90969688d | 235 | 0x00, // iInterface |
yamasho | 0:e8c90969688d | 236 | /* ****** EndPoint Descriptor ******** */ |
yamasho | 0:e8c90969688d | 237 | ENDPOINT_DESCRIPTOR_LENGTH, // bLength (#7) |
yamasho | 0:e8c90969688d | 238 | ENDPOINT_DESCRIPTOR, // bDescriptorType (#5) |
yamasho | 0:e8c90969688d | 239 | PHY_TO_DESC(EPBULK_IN), // bEndpointAddress (#81) |
yamasho | 0:e8c90969688d | 240 | E_BULK, // bmAttributes (#02) |
yamasho | 0:e8c90969688d | 241 | LSB(MAX_PACKET_SIZE_EPINT), // wMaxPacketSize (LSB) |
yamasho | 0:e8c90969688d | 242 | MSB(MAX_PACKET_SIZE_EPINT), // wMaxPacketSize (MSB) |
yamasho | 0:e8c90969688d | 243 | 0, // bInterval (milliseconds 0:none..) |
yamasho | 0:e8c90969688d | 244 | |
yamasho | 0:e8c90969688d | 245 | ENDPOINT_DESCRIPTOR_LENGTH, // bLength (#7) |
yamasho | 0:e8c90969688d | 246 | ENDPOINT_DESCRIPTOR, // bDescriptorType (#5) |
yamasho | 0:e8c90969688d | 247 | PHY_TO_DESC(EPBULK_OUT ), // bEndpointAddress (#02) |
yamasho | 0:e8c90969688d | 248 | E_BULK, // bmAttributes (#02) |
yamasho | 0:e8c90969688d | 249 | LSB(MAX_PACKET_SIZE_EPINT), // wMaxPacketSize (LSB) |
yamasho | 0:e8c90969688d | 250 | MSB(MAX_PACKET_SIZE_EPINT), // wMaxPacketSize (MSB) |
yamasho | 0:e8c90969688d | 251 | 0, // bInterval (milliseconds 0:none..) |
yamasho | 0:e8c90969688d | 252 | }; |
yamasho | 0:e8c90969688d | 253 | return configurationDescriptor; |
yamasho | 0:e8c90969688d | 254 | } |