Usb Bulk Tranceport driver Made by Shoichi Yamasuge. LoadLibray USBDEViCE. moive http://youtu.be/uGPH3AwrFpU USB バルク通信用のドライバーです 使用時には、USBDEVICEライブラリの追加必要。 動画は下記 http://youtu.be/uGPH3AwrFpU
USBBULK.cpp@0:e8c90969688d, 2013-11-30 (annotated)
- 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?
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 | 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 | } |