Usb Bulk Tranceport driver Made by Shoichi Yamasuge. LoadLibray USBDEViCE. moive http://youtu.be/uGPH3AwrFpU USB バルク通信用のドライバーです 使用時には、USBDEVICEライブラリの追加必要。 動画は下記 http://youtu.be/uGPH3AwrFpU

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?

UserRevisionLine numberNew 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 }