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

Committer:
yamasho
Date:
Sat Nov 30 10:48:29 2013 +0000
Revision:
0:e8c90969688d
Child:
1:84abb7607a27
Usb Bulk 1st version;

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 0:e8c90969688d 32 if(!readStart(EPBULK_OUT, MAX_BULK_SIZE ))
yamasho 0:e8c90969688d 33 {
yamasho 0:e8c90969688d 34 return false;
yamasho 0:e8c90969688d 35 }
yamasho 0:e8c90969688d 36 return result;
yamasho 0:e8c90969688d 37
yamasho 0:e8c90969688d 38 }
yamasho 0:e8c90969688d 39
yamasho 0:e8c90969688d 40 bool USBBULK::readNB( uint8_t *Data )
yamasho 0:e8c90969688d 41 {
yamasho 0:e8c90969688d 42 uint32_t bytesRead = 0;
yamasho 0:e8c90969688d 43 bool result;
yamasho 0:e8c90969688d 44 result = USBDevice::readEP_NB(EPBULK_OUT, Data, &bytesRead, MAX_BULK_SIZE );
yamasho 0:e8c90969688d 45 if(!readStart(EPBULK_OUT, MAX_BULK_SIZE ))
yamasho 0:e8c90969688d 46 {
yamasho 0:e8c90969688d 47 return false;
yamasho 0:e8c90969688d 48 }
yamasho 0:e8c90969688d 49 return result;
yamasho 0:e8c90969688d 50 }
yamasho 0:e8c90969688d 51
yamasho 0:e8c90969688d 52
yamasho 0:e8c90969688d 53 //
yamasho 0:e8c90969688d 54 // Route callbacks from lower layers to class(es)
yamasho 0:e8c90969688d 55 //
yamasho 0:e8c90969688d 56
yamasho 0:e8c90969688d 57 #define DEFAULT_CONFIGURATION (1)
yamasho 0:e8c90969688d 58
yamasho 0:e8c90969688d 59
yamasho 0:e8c90969688d 60 bool USBBULK::USBCallback_setConfiguration(uint8_t configuration)
yamasho 0:e8c90969688d 61 {
yamasho 0:e8c90969688d 62 if (configuration != DEFAULT_CONFIGURATION)
yamasho 0:e8c90969688d 63 {
yamasho 0:e8c90969688d 64 return false;
yamasho 0:e8c90969688d 65 }
yamasho 0:e8c90969688d 66
yamasho 0:e8c90969688d 67 addEndpoint(EPBULK_IN, MAX_PACKET_SIZE_EPINT);
yamasho 0:e8c90969688d 68 addEndpoint(EPBULK_OUT, MAX_PACKET_SIZE_EPINT);
yamasho 0:e8c90969688d 69
yamasho 0:e8c90969688d 70 readStart(EPBULK_OUT, MAX_PACKET_SIZE_EPINT);
yamasho 0:e8c90969688d 71 return true;
yamasho 0:e8c90969688d 72 }
yamasho 0:e8c90969688d 73
yamasho 0:e8c90969688d 74 uint8_t * USBBULK::stringLangidDesc()
yamasho 0:e8c90969688d 75 {
yamasho 0:e8c90969688d 76 static uint8_t stringLangidDescriptor[] =
yamasho 0:e8c90969688d 77 {
yamasho 0:e8c90969688d 78 0x04, /*bLength*/
yamasho 0:e8c90969688d 79 0x03, /*bDescriptorType 0x03*/
yamasho 0:e8c90969688d 80 0x09,
yamasho 0:e8c90969688d 81 0x04 /*bString Lang ID - 0x409 */
yamasho 0:e8c90969688d 82 };
yamasho 0:e8c90969688d 83 return stringLangidDescriptor;
yamasho 0:e8c90969688d 84 }
yamasho 0:e8c90969688d 85
yamasho 0:e8c90969688d 86 uint8_t * USBBULK::stringImanufacturerDesc()
yamasho 0:e8c90969688d 87 {
yamasho 0:e8c90969688d 88 static uint8_t stringImanufacturerDescriptor[] = {
yamasho 0:e8c90969688d 89 00, /* Dummy Lenght */
yamasho 0:e8c90969688d 90 STRING_DESCRIPTOR, /*bDescriptorType 0x03*/
yamasho 0:e8c90969688d 91 'Y',0,
yamasho 0:e8c90969688d 92 'o',0,
yamasho 0:e8c90969688d 93 'u',0,
yamasho 0:e8c90969688d 94 'r',0,
yamasho 0:e8c90969688d 95 ' ',0,
yamasho 0:e8c90969688d 96 'C',0,
yamasho 0:e8c90969688d 97 'o',0,
yamasho 0:e8c90969688d 98 'm',0,
yamasho 0:e8c90969688d 99 'p',0,
yamasho 0:e8c90969688d 100 'a',0,
yamasho 0:e8c90969688d 101 'n',0,
yamasho 0:e8c90969688d 102 'y',0,
yamasho 0:e8c90969688d 103 ' ',0,
yamasho 0:e8c90969688d 104 'N',0,
yamasho 0:e8c90969688d 105 'a',0,
yamasho 0:e8c90969688d 106 'm',0,
yamasho 0:e8c90969688d 107 'e',0,
yamasho 0:e8c90969688d 108 0 ,0
yamasho 0:e8c90969688d 109 };
yamasho 0:e8c90969688d 110 stringImanufacturerDescriptor[0] = sizeof(stringImanufacturerDescriptor-2);
yamasho 0:e8c90969688d 111 return stringImanufacturerDescriptor;
yamasho 0:e8c90969688d 112 }
yamasho 0:e8c90969688d 113
yamasho 0:e8c90969688d 114 uint8_t * USBBULK::stringIserialDesc()
yamasho 0:e8c90969688d 115 {
yamasho 0:e8c90969688d 116 static uint8_t stringIserialDescriptor[] = {
yamasho 0:e8c90969688d 117 00, /* Dummy Lenght */
yamasho 0:e8c90969688d 118 STRING_DESCRIPTOR, /*bDescriptorType 0x03*/
yamasho 0:e8c90969688d 119 '0',0,
yamasho 0:e8c90969688d 120 '1',0,
yamasho 0:e8c90969688d 121 '2',0,
yamasho 0:e8c90969688d 122 '3',0,
yamasho 0:e8c90969688d 123 '4',0,
yamasho 0:e8c90969688d 124 '5',0,
yamasho 0:e8c90969688d 125 '6',0,
yamasho 0:e8c90969688d 126 '7',0,
yamasho 0:e8c90969688d 127 '8',0,
yamasho 0:e8c90969688d 128 '9',0,
yamasho 0:e8c90969688d 129 0,0
yamasho 0:e8c90969688d 130 };
yamasho 0:e8c90969688d 131 stringIserialDescriptor[0] = sizeof(stringIserialDescriptor)-2; // bLength
yamasho 0:e8c90969688d 132 return stringIserialDescriptor;
yamasho 0:e8c90969688d 133 }
yamasho 0:e8c90969688d 134
yamasho 0:e8c90969688d 135
yamasho 0:e8c90969688d 136 uint8_t * USBBULK::stringIproductDesc()
yamasho 0:e8c90969688d 137 {
yamasho 0:e8c90969688d 138 static uint8_t stringIproductlDescriptor[] = {
yamasho 0:e8c90969688d 139 00, /* Dummy Lenght */
yamasho 0:e8c90969688d 140 STRING_DESCRIPTOR, /*bDescriptorType 0x03*/
yamasho 0:e8c90969688d 141 'U',0,
yamasho 0:e8c90969688d 142 's',0,
yamasho 0:e8c90969688d 143 'b',0,
yamasho 0:e8c90969688d 144 ' ',0,
yamasho 0:e8c90969688d 145 'B',0,
yamasho 0:e8c90969688d 146 'u',0,
yamasho 0:e8c90969688d 147 'l',0,
yamasho 0:e8c90969688d 148 'k',0,
yamasho 0:e8c90969688d 149 ' ',0,
yamasho 0:e8c90969688d 150 'P',0,
yamasho 0:e8c90969688d 151 'r',0,
yamasho 0:e8c90969688d 152 'o',0,
yamasho 0:e8c90969688d 153 'd',0,
yamasho 0:e8c90969688d 154 'u',0,
yamasho 0:e8c90969688d 155 'c',0,
yamasho 0:e8c90969688d 156 't',0,
yamasho 0:e8c90969688d 157 0,0
yamasho 0:e8c90969688d 158 };
yamasho 0:e8c90969688d 159 stringIproductlDescriptor[0] = sizeof(stringIproductlDescriptor)-2; // bLength
yamasho 0:e8c90969688d 160 return stringIproductlDescriptor;
yamasho 0:e8c90969688d 161 }
yamasho 0:e8c90969688d 162
yamasho 0:e8c90969688d 163 uint8_t * USBBULK::stringIConfigurationDesc()
yamasho 0:e8c90969688d 164 {
yamasho 0:e8c90969688d 165 static uint8_t stringIconfigurationDescriptor[] = {
yamasho 0:e8c90969688d 166 00, //bLength
yamasho 0:e8c90969688d 167 STRING_DESCRIPTOR, /*bDescriptorType 0x03*/
yamasho 0:e8c90969688d 168 '0',0,'1',0 /*bString iConfiguration - 01*/
yamasho 0:e8c90969688d 169 };
yamasho 0:e8c90969688d 170 stringIconfigurationDescriptor[0] = sizeof(stringIconfigurationDescriptor)-2;
yamasho 0:e8c90969688d 171 return stringIconfigurationDescriptor;
yamasho 0:e8c90969688d 172 }
yamasho 0:e8c90969688d 173
yamasho 0:e8c90969688d 174
yamasho 0:e8c90969688d 175 uint8_t * USBBULK::stringIinterfaceDesc() {
yamasho 0:e8c90969688d 176 static uint8_t stringIinterfaceDescriptor[] = {
yamasho 0:e8c90969688d 177 0, //bLength
yamasho 0:e8c90969688d 178 STRING_DESCRIPTOR, //bDescriptorType 0x03
yamasho 0:e8c90969688d 179 'U',0,
yamasho 0:e8c90969688d 180 's',0,
yamasho 0:e8c90969688d 181 'b',0,
yamasho 0:e8c90969688d 182 ' ',0,
yamasho 0:e8c90969688d 183 'B',0,
yamasho 0:e8c90969688d 184 'u',0,
yamasho 0:e8c90969688d 185 'l',0,
yamasho 0:e8c90969688d 186 'k',0,
yamasho 0:e8c90969688d 187 ' ',0,
yamasho 0:e8c90969688d 188 'I',0,
yamasho 0:e8c90969688d 189 'n',0,
yamasho 0:e8c90969688d 190 't',0,
yamasho 0:e8c90969688d 191 'e',0,
yamasho 0:e8c90969688d 192 'r',0,
yamasho 0:e8c90969688d 193 'F',0,
yamasho 0:e8c90969688d 194 'a',0,
yamasho 0:e8c90969688d 195 'c',0,
yamasho 0:e8c90969688d 196 'e',0,
yamasho 0:e8c90969688d 197 0,0
yamasho 0:e8c90969688d 198 };
yamasho 0:e8c90969688d 199 stringIinterfaceDescriptor[0] = sizeof(stringIinterfaceDescriptor)-2; //bLength
yamasho 0:e8c90969688d 200 return stringIinterfaceDescriptor;
yamasho 0:e8c90969688d 201 }
yamasho 0:e8c90969688d 202
yamasho 0:e8c90969688d 203 #define DEFAULT_CONFIGURATION (1)
yamasho 0:e8c90969688d 204
yamasho 0:e8c90969688d 205 uint8_t * USBBULK::configurationDesc() {
yamasho 0:e8c90969688d 206
yamasho 0:e8c90969688d 207 static uint8_t configurationDescriptor[] = {
yamasho 0:e8c90969688d 208 /* *****Configuration Descriptor ******** */
yamasho 0:e8c90969688d 209 CONFIGURATION_DESCRIPTOR_LENGTH,// bLength (#9)
yamasho 0:e8c90969688d 210 CONFIGURATION_DESCRIPTOR, // bDescriptorType (#2)
yamasho 0:e8c90969688d 211 LSB(MAX_BULK_SIZE), // wTotalLength (LSB)
yamasho 0:e8c90969688d 212 MSB(MAX_BULK_SIZE), // wTotalLength (MSB)
yamasho 0:e8c90969688d 213 0x01, // bNumInterfaces
yamasho 0:e8c90969688d 214 DEFAULT_CONFIGURATION, // bConfigurationValue
yamasho 0:e8c90969688d 215 0x00, // iConfiguration
yamasho 0:e8c90969688d 216 C_RESERVED | C_SELF_POWERED, // bmAttributes
yamasho 0:e8c90969688d 217 C_POWER(250), // bMaxPower 250mA
yamasho 0:e8c90969688d 218 /* ****** Interface Descriptor ******** */
yamasho 0:e8c90969688d 219 INTERFACE_DESCRIPTOR_LENGTH, // bLength (#9)
yamasho 0:e8c90969688d 220 INTERFACE_DESCRIPTOR, // bDescriptorType (#4)
yamasho 0:e8c90969688d 221 0x00, // bInterfaceNumber: Number of Interface
yamasho 0:e8c90969688d 222 0x00, // bAlternateSetting: Alternate setting
yamasho 0:e8c90969688d 223 0x02, // bNumEndpoints: One endpoints used
yamasho 0:e8c90969688d 224 VENDER_SPECIFIC_CLASS, // bInterfaceClass: Communication Interface Class
yamasho 0:e8c90969688d 225 0x00, // bInterfaceSubClass
yamasho 0:e8c90969688d 226 0x00, // bInterfaceProtocol
yamasho 0:e8c90969688d 227 0x00, // iInterface
yamasho 0:e8c90969688d 228 /* ****** EndPoint Descriptor ******** */
yamasho 0:e8c90969688d 229 ENDPOINT_DESCRIPTOR_LENGTH, // bLength (#7)
yamasho 0:e8c90969688d 230 ENDPOINT_DESCRIPTOR, // bDescriptorType (#5)
yamasho 0:e8c90969688d 231 PHY_TO_DESC(EPBULK_IN), // bEndpointAddress (#81)
yamasho 0:e8c90969688d 232 E_BULK, // bmAttributes (#02)
yamasho 0:e8c90969688d 233 LSB(MAX_PACKET_SIZE_EPINT), // wMaxPacketSize (LSB)
yamasho 0:e8c90969688d 234 MSB(MAX_PACKET_SIZE_EPINT), // wMaxPacketSize (MSB)
yamasho 0:e8c90969688d 235 0, // bInterval (milliseconds 0:none..)
yamasho 0:e8c90969688d 236
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_OUT ), // bEndpointAddress (#02)
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 return configurationDescriptor;
yamasho 0:e8c90969688d 246 }