Simple USBHost MSD(USB flash drive) for EA LPC4088 QSB test program

Dependencies:   LPC4088-USBHost mbed

EA LPC4088をUSBホストにしてUSBフラッシュメモリ(USB flash drive)を読み書きするテストプログラムです。
/media/uploads/va009039/lpc4088-msd-1.jpg
/media/uploads/va009039/lpc4088-msd-2.png

https://bitbucket.org/va009039/lpc4088_usbhost

Revision:
1:26a4baad1736
Parent:
0:11152e69fc05
--- a/LPC4088-USBHost/USBHost/USBHost.h	Tue Apr 22 10:54:52 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,269 +0,0 @@
-/* mbed USBHost Library
- * Copyright (c) 2006-2013 ARM Limited
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#pragma once
-#include "mbed.h"
-#include "USBHALHost.h"
-#include "USBDeviceConnected.h"
-#include "IUSBEnumerator.h"
-#include "USBHostConf.h"
-#include "dbg.h"
-#include "myvector.h"
-
-// USB STANDARD REQUEST DEFINITIONS
-#define  USB_DESCRIPTOR_TYPE_STRING         3
-#define  USB_DESCRIPTOR_TYPE_HUB         0x29
-
-#pragma pack(push,1)
-struct StringDescriptor {// offset
-    uint8_t bLength;          // +0
-    uint8_t bDescriptorType;  // +1
-    char bString[0];          // +2
-}; 
-#pragma pack(pop)
-
-/**
-* USBHost class
-*   This class is a singleton. All drivers have a reference on the static USBHost instance
-*/
-class USBHost : public USBHALHost {
-public:
-    /**
-    * Static method to create or retrieve the single USBHost instance
-    */    
-    static USBHost* getHostInst();
-
-    /**
-    * Control read: setup stage, data stage and status stage
-    *
-    * @param dev the control read will be done for this device
-    * @param requestType request type
-    * @param request request
-    * @param value value
-    * @param index index
-    * @param buf pointer on a buffer where will be store the data received
-    * @param len length of the transfer
-    *
-    * @returns status of the control read
-    */
-    USB_TYPE controlRead(USBDeviceConnected * dev, uint8_t requestType, uint8_t request, uint32_t value, uint32_t index, uint8_t * buf, uint32_t len);
-
-    /**
-    * Control write: setup stage, data stage and status stage
-    *
-    * @param dev the control write will be done for this device
-    * @param requestType request type
-    * @param request request
-    * @param value value
-    * @param index index
-    * @param buf pointer on a buffer which will be written
-    * @param len length of the transfer
-    *
-    * @returns status of the control write
-    */
-    USB_TYPE controlWrite(USBDeviceConnected * dev, uint8_t requestType, uint8_t request, uint32_t value, uint32_t index, uint8_t * buf, uint32_t len);
-
-    /**
-    * Bulk read
-    *
-    * @param dev the bulk transfer will be done for this device
-    * @param ep USBEndpoint which will be used to read a packet
-    * @param buf pointer on a buffer where will be store the data received
-    * @param len length of the transfer
-    * @param blocking if true, the read is blocking (wait for completion)
-    *
-    * @returns status of the bulk read
-    */
-    USB_TYPE bulkRead(USBDeviceConnected * dev, USBEndpoint * ep, uint8_t * buf, uint32_t len, bool blocking = true);
-
-    /**
-    * Bulk write
-    *
-    * @param dev the bulk transfer will be done for this device
-    * @param ep USBEndpoint which will be used to write a packet
-    * @param buf pointer on a buffer which will be written
-    * @param len length of the transfer
-    * @param blocking if true, the write is blocking (wait for completion)
-    *
-    * @returns status of the bulk write
-    */
-    USB_TYPE bulkWrite(USBDeviceConnected * dev, USBEndpoint * ep, uint8_t * buf, uint32_t len, bool blocking = true);
-
-    /**
-    * Interrupt read
-    *
-    * @param dev the interrupt transfer will be done for this device
-    * @param ep USBEndpoint which will be used to write a packet
-    * @param buf pointer on a buffer which will be written
-    * @param len length of the transfer
-    * @param blocking if true, the read is blocking (wait for completion)
-    *
-    * @returns status of the interrupt read
-    */
-    USB_TYPE interruptRead(USBDeviceConnected * dev, USBEndpoint * ep, uint8_t * buf, uint32_t len, bool blocking = true);
-
-    /**
-    * Interrupt write
-    *
-    * @param dev the interrupt transfer will be done for this device
-    * @param ep USBEndpoint which will be used to write a packet
-    * @param buf pointer on a buffer which will be written
-    * @param len length of the transfer
-    * @param blocking if true, the write is blocking (wait for completion)
-    *
-    * @returns status of the interrupt write
-    */
-    USB_TYPE interruptWrite(USBDeviceConnected * dev, USBEndpoint * ep, uint8_t * buf, uint32_t len, bool blocking = true);
-
-    /**
-    * Enumerate a device.
-    *
-    * @param dev device which will be enumerated
-    *
-    * @returns status of the enumeration
-    */
-    USB_TYPE enumerate(USBDeviceConnected * dev, IUSBEnumerator* pEnumerator);
-
-    /**
-    * Get a device
-    *
-    * @param index index of the device which will be returned
-    *
-    * @returns pointer on the "index" device
-    */
-    USBDeviceConnected * getDevice(uint8_t index) {
-        return index < DeviceLists.size() ? DeviceLists[index] : NULL;
-    }
-
-    /**
-     *  register a driver into the host associated with a callback function called when the device is disconnected
-     *
-     *  @param dev device
-     *  @param intf interface number
-     *  @param tptr pointer to the object to call the member function on
-     *  @param mptr pointer to the member function to be called
-     */
-    template<typename T>
-    void registerDriver(USBDeviceConnected * dev, uint8_t intf, T* tptr, void (T::*mptr)(void)) {
-    }
-
-    // LPC4088-USBHost extensions
-    USB_TYPE controlRead(USBEndpoint* ep, uint8_t requestType, uint8_t request, uint32_t value, uint32_t index, uint8_t* buf, uint32_t len);
-    USB_TYPE controlWrite(USBEndpoint* ep, uint8_t requestType, uint8_t request, uint32_t value, uint32_t index, uint8_t* buf, uint32_t len);
-    static void poll();
-
-private:
-    USBHost();
-    static USBHost* inst;
-    virtual bool addDevice(USBDeviceConnected* parent, int port, bool lowSpeed);
-    void root_enumeration(USBDeviceConnected* dev);
-    void parseConfDescr(USBDeviceConnected* dev, uint8_t* conf_descr, uint32_t len, IUSBEnumerator* pEnumerator);
-    myvector<USBDeviceConnected*>DeviceLists;
-
-    void task();
-    EndpointQueue ep_queue;
-
-    // USB HUB
-    bool Hub(USBDeviceConnected* dev);
-    int SetPortPower(USBDeviceConnected* dev, int port);
-    int ClearPortPower(USBDeviceConnected* dev, int port);
-    int PortReset(USBDeviceConnected* dev, int port);
-    int SetPortFeature(USBDeviceConnected* dev, int feature, int index);
-    int ClearPortFeature(USBDeviceConnected* dev, int feature, int index);
-    int SetPortReset(USBDeviceConnected* dev, int port);
-    int GetPortStatus(USBDeviceConnected* dev, int port, uint32_t* status);
-};
-
-// --- HUB --------------------------------------------------
-class UsbHub {
-public:
-    UsbHub(ControlEp* ctlEp = NULL);
-    static bool check(ControlEp* ctlEp);
-    USB_TYPE SetPortPower(int port);
-    USB_TYPE ClearPortPower(int port);
-    myvector<ControlEp*> PortEp;
-    template<class T> ControlEp* search(int skip = 0) {
-        for(int i = 0; i < PortEp.size(); i++) {
-            if (T::check(PortEp[i])) {
-                if (skip-- <= 0) {
-                    return PortEp[i];
-                }
-            }
-        }
-        return NULL;   
-    }
-    template<class T> ControlEp* assign(int port) {
-        if (port >= 0 && port < PortEp.size()) {
-            return PortEp[port];
-        }
-        return NULL;
-    }
-private:
-    USB_TYPE PortReset(int port);
-    USB_TYPE SetPortFeature(int feature, int index);
-    USB_TYPE ClearPortFeature(int feature, int index);
-    USB_TYPE SetPortReset(int port);
-    USB_TYPE GetPortStatus(int port, uint32_t* status);
-    ControlEp* m_ctlEp;
-};
-
-// --- UVC --------------------------------------------------
-#define _30FPS  333333
-#define _25FPS  400000
-#define _20FPS  500000
-#define _15FPS  666666
-#define _10FPS 1000000
-#define _5FPS  2000000
-#define _1FPS 10000000
-
-#define SET_CUR  0x01
-#define GET_CUR  0x81
-#define GET_MIN  0x82
-#define GET_MAX  0x83
-#define GET_RES  0x84
-#define GET_LEN  0x85
-#define GET_INFO 0x86
-#define GET_DEF  0x87
-
-#define VS_PROBE_CONTROL  0x01
-#define VS_COMMIT_CONTROL 0x02
-
-class BaseUvc {
-public:
-    BaseUvc(){clearOnResult();}
-    void poll(int millisec=osWaitForever);
-    USB_TYPE Control(int req, int cs, int index, uint8_t* buf, int size);
-    ControlEp* m_ctlEp;
-    IsochronousEp* m_isoEp;
-    uint32_t report_cc_count[16];  // ConditionCode
-    uint32_t report_ps_cc_count[16]; // Packt Status ConditionCode
-    // callback
-    void onResult(uint16_t frame, uint8_t* buf, int len);
-    void setOnResult( void (*pMethod)(uint16_t, uint8_t*, int) );
-    class CDummy;
-    template<class T> 
-    void setOnResult( T* pItem, void (T::*pMethod)(uint16_t, uint8_t*, int) )
-    {
-        m_pCb = NULL;
-        m_pCbItem = (CDummy*) pItem;
-        m_pCbMeth = (void (CDummy::*)(uint16_t, uint8_t*, int)) pMethod;
-    }
-    void clearOnResult();
-    CDummy* m_pCbItem;
-    void (CDummy::*m_pCbMeth)(uint16_t, uint8_t*, int);
-    void (*m_pCb)(uint16_t, uint8_t*, int);
-};
-