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

USBBULK.cpp

Committer:
yamasho
Date:
2014-04-28
Revision:
3:a71b7d2b97ef
Parent:
2:2dc4682d7c0f

File content as of revision 3:a71b7d2b97ef:

#include "stdint.h"
#include "USBHAL.h"
#include "USBBULK.h"

/* Made By Shoichi Yamasuge     */
/* Operatration Movie           */
/* http://youtu.be/uGPH3AwrFpU  */

USBBULK::USBBULK( uint16_t vendor_id, uint16_t product_id, uint16_t product_release ):USBDevice( vendor_id, product_id, product_release)
{
    VendorId      = vendor_id;
    ProductId     = product_id;
    ProductReleas = product_release;
}


bool USBBULK::Write( uint8_t *Data )
{
    return write(EPBULK_IN, Data, MAX_BULK_SIZE, MAX_BULK_SIZE);
}

bool USBBULK::WriteNB( uint8_t *Data )
{
    return writeNB(EPBULK_IN, Data, MAX_BULK_SIZE, MAX_BULK_SIZE);
}

bool USBBULK::read( uint8_t *Data )
{
    uint32_t bytesRead = 0;
    bool result;
    result = USBDevice::readEP(EPBULK_OUT, Data, &bytesRead, MAX_BULK_SIZE );
#if defined(TARGET_LPC11UXX)
    wait_us(100);                //Counter Mesure USB Bank Wait!?
#endif
     if(!readStart(EPBULK_OUT, MAX_BULK_SIZE ))
    {
        return false;
    }
 
    return result;
     
}

bool USBBULK::readNB( uint8_t *Data )
{
    uint32_t bytesRead = 0;
    bool result;
    result = USBDevice::readEP_NB(EPBULK_OUT, Data, &bytesRead, MAX_BULK_SIZE );
#if defined(TARGET_LPC11UXX)
    wait_us(100);                //Counter Mesure USB Bank Wait !?
#endif
    if(!readStart(EPBULK_OUT, MAX_BULK_SIZE ))
    {
        return false;
    }

    return result;
}


//
//  Route callbacks from lower layers to class(es)
//

#define DEFAULT_CONFIGURATION (1)


bool USBBULK::USBCallback_setConfiguration(uint8_t configuration)
{
    if (configuration != DEFAULT_CONFIGURATION)
    {
        return false;
    }

    addEndpoint(EPBULK_IN, MAX_PACKET_SIZE_EPINT);
    addEndpoint(EPBULK_OUT, MAX_PACKET_SIZE_EPINT);

    readStart(EPBULK_OUT, MAX_PACKET_SIZE_EPINT);
    return true;
}

uint8_t * USBBULK::stringLangidDesc() 
{
    static uint8_t stringLangidDescriptor[] =
    {
        0x04,               /*bLength*/
        0x03,               /*bDescriptorType 0x03*/
        0x09,
        0x04                /*bString Lang ID - 0x409 */
    };
    return stringLangidDescriptor;
}

uint8_t * USBBULK::stringImanufacturerDesc()
{
    static uint8_t stringImanufacturerDescriptor[] = {
        00,                                      /* Dummy Lenght */
        STRING_DESCRIPTOR,                        /*bDescriptorType 0x03*/
        'Y',0,
        'o',0,
        'u',0,
        'r',0,
        ' ',0,
        'C',0,
        'o',0,
        'm',0,
        'p',0,
        'a',0,
        'n',0,
        'y',0,
        ' ',0,
        'N',0,
        'a',0,
        'm',0,
        'e',0,
         0 ,0
    };
    stringImanufacturerDescriptor[0] = sizeof(stringImanufacturerDescriptor-2);
    return stringImanufacturerDescriptor;
}

uint8_t * USBBULK::stringIserialDesc()
{
    static uint8_t stringIserialDescriptor[] = {
        00,                                      /* Dummy Lenght */
        STRING_DESCRIPTOR,                                              /*bDescriptorType 0x03*/
        '0',0,
        '1',0,
        '2',0,
        '3',0,
        '4',0,
        '5',0,
        '6',0,
        '7',0,
        '8',0,
        '9',0,
         0,0
    };
    stringIserialDescriptor[0] = sizeof(stringIserialDescriptor)-2;                              // bLength
    return stringIserialDescriptor;
}


uint8_t * USBBULK::stringIproductDesc()
{
    static uint8_t stringIproductlDescriptor[] = {
        00,                                      /* Dummy Lenght */
        STRING_DESCRIPTOR,                                              /*bDescriptorType 0x03*/
        'U',0,
        's',0,
        'b',0,
        ' ',0,
        'B',0,
        'u',0,
        'l',0,
        'k',0,
        ' ',0,
        'P',0,
        'r',0,
        'o',0,
        'd',0,
        'u',0,
        'c',0,
        't',0,
         0,0
    };
    stringIproductlDescriptor[0] =   sizeof(stringIproductlDescriptor)-2;                          // bLength
    return stringIproductlDescriptor;
}
    
uint8_t * USBBULK::stringIConfigurationDesc()
{
    static uint8_t stringIconfigurationDescriptor[] = {
        00,                        //bLength
        STRING_DESCRIPTOR,  /*bDescriptorType 0x03*/
        '0',0,'1',0        /*bString iConfiguration - 01*/
    };
    stringIconfigurationDescriptor[0] = sizeof(stringIconfigurationDescriptor)-2;
    return stringIconfigurationDescriptor;
}


uint8_t * USBBULK::stringIinterfaceDesc() {
    static uint8_t stringIinterfaceDescriptor[] = {
        0,                        //bLength
        STRING_DESCRIPTOR,  //bDescriptorType 0x03
        'U',0,
        's',0,
        'b',0,
        ' ',0,
        'B',0,
        'u',0,
        'l',0,
        'k',0,
        ' ',0,
        'I',0,
        'n',0,
        't',0,
        'e',0,
        'r',0,
        'F',0,
        'a',0,
        'c',0,
        'e',0,
         0,0
    };
    stringIinterfaceDescriptor[0]  = sizeof(stringIinterfaceDescriptor)-2;                        //bLength
    return stringIinterfaceDescriptor;
}

#define DEFAULT_CONFIGURATION (1)

uint8_t * USBBULK::configurationDesc() {

    static uint8_t configurationDescriptor[] = {
/* *****Configuration Descriptor  ******** */
        CONFIGURATION_DESCRIPTOR_LENGTH,// bLength          (#9)
        CONFIGURATION_DESCRIPTOR,       // bDescriptorType  (#2)
        LSB(CONFIGURATION_DESCRIPTOR_LENGTH+INTERFACE_DESCRIPTOR_LENGTH+ENDPOINT_DESCRIPTOR_LENGTH*2),             // wTotalLength (LSB)
        MSB(CONFIGURATION_DESCRIPTOR_LENGTH+INTERFACE_DESCRIPTOR_LENGTH+ENDPOINT_DESCRIPTOR_LENGTH*2),             // wTotalLength (MSB)
        0x01,                           // bNumInterfaces
        DEFAULT_CONFIGURATION,          // bConfigurationValue
        0x00,                           // iConfiguration
        C_RESERVED | C_SELF_POWERED,    // bmAttributes
        C_POWER(250),                   // bMaxPower 250mA
/* ****** Interface Descriptor  ******** */
        INTERFACE_DESCRIPTOR_LENGTH,    // bLength          (#9)
        INTERFACE_DESCRIPTOR,           // bDescriptorType  (#4)
        0x00,                           // bInterfaceNumber: Number of Interface
        0x00,                           // bAlternateSetting: Alternate setting
        0x02,                           // bNumEndpoints: One endpoints used 
        VENDER_SPECIFIC_CLASS,          // bInterfaceClass: Communication Interface Class
        0x00,                           // bInterfaceSubClass
        0x00,                           // bInterfaceProtocol
        0x00,                           // iInterface
/* ****** EndPoint Descriptor   ******** */
        ENDPOINT_DESCRIPTOR_LENGTH,     // bLength          (#7)
        ENDPOINT_DESCRIPTOR,            // bDescriptorType  (#5)
        PHY_TO_DESC(EPBULK_IN),            // bEndpointAddress (#81)
        E_BULK,                         // bmAttributes     (#02)
        LSB(MAX_PACKET_SIZE_EPINT),     // wMaxPacketSize (LSB)
        MSB(MAX_PACKET_SIZE_EPINT),     // wMaxPacketSize (MSB)
        0,                              // bInterval (milliseconds 0:none..)

        ENDPOINT_DESCRIPTOR_LENGTH,     // bLength          (#7)
        ENDPOINT_DESCRIPTOR,            // bDescriptorType  (#5)
        PHY_TO_DESC(EPBULK_OUT ),       // bEndpointAddress (#02)
        E_BULK,                         // bmAttributes     (#02)
        LSB(MAX_PACKET_SIZE_EPINT),     // wMaxPacketSize (LSB)
        MSB(MAX_PACKET_SIZE_EPINT),     // wMaxPacketSize (MSB)
        0,                              // bInterval (milliseconds 0:none..)
    };
    return configurationDescriptor;
}