Simple USBHost MSD(USB flash drive) for EA LPC4088 QSB test program
Dependencies: LPC4088-USBHost mbed
EA LPC4088をUSBホストにしてUSBフラッシュメモリ(USB flash drive)を読み書きするテストプログラムです。
https://bitbucket.org/va009039/lpc4088_usbhost
Diff: LPC4088-USBHost/USBHost/BaseUsbHostCtlEp.cpp
- Revision:
- 1:26a4baad1736
- Parent:
- 0:11152e69fc05
--- a/LPC4088-USBHost/USBHost/BaseUsbHostCtlEp.cpp Tue Apr 22 10:54:52 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -// BaseUsbHostCtlEp.cpp 2014/4/21 -#include "USBHost.h" -#define USB_DEBUG -#include "BaseUsbHostDebug.h" -#define TEST -#include "BaseUsbHostTest.h" - -static uint8_t device_addr = 1; -ControlEp::ControlEp(int lowSpeed):USBEndpoint(0, 0, 8, lowSpeed) { - setType(CONTROL_ENDPOINT); - USB_TYPE r = open(device_addr); - if (r == USB_TYPE_OK) { - device_addr++; - } -} - -USB_TYPE ControlEp::SetAddress(int addr) -{ - return controlSend(0x00, 5, addr); -} - -USB_TYPE ControlEp::GetDescriptor(int descType, int descIndex, uint8_t* data, int length) -{ - return controlReceive(0x80, 6, (descType<<8)|descIndex, 0, data, length); -} - -USB_TYPE ControlEp::SetConfiguration(int config) -{ - return controlSend(0x00, 9, config); -} - -USB_TYPE ControlEp::GetConfiguration(int *config) -{ - uint8_t buf[1]; - USB_TYPE rc = controlReceive(0x80, 8, 0, 0, buf, 1); - *config = buf[0]; - return rc; -} - -USB_TYPE ControlEp::SetInterfaceAlternate(int interface, int alternate) -{ - return controlSend(USB_HOST_TO_DEVICE | USB_RECIPIENT_INTERFACE, - SET_INTERFACE, alternate, interface, NULL, 0); -} - -USB_TYPE ControlEp::GetInterface(int interface, int *alternate) -{ - uint8_t buf[1]; - USB_TYPE rc = controlReceive(0x81, 10, 0, interface, buf, 1); - *alternate = buf[0]; - return rc; -} - -USB_TYPE ControlEp::GetStringDescriptor(char* s, int index) -{ - uint8_t buf[128]; - USB_TYPE r = GetDescriptor(USB_DESCRIPTOR_TYPE_STRING, index, buf, sizeof(buf)); - if (r != USB_TYPE_OK) { - return r; - } - DBG_HEX(buf, sizeof(buf)); - StringDescriptor* desc = reinterpret_cast<StringDescriptor*>(buf); - if (desc->bLength <= 2 || desc->bDescriptorType != 3) { - return USB_TYPE_ERROR; - } - for(int i = 0; i < desc->bLength-2; i += 2) { - *s++ = desc->bString[i]; - } - *s = '\0'; - return USB_TYPE_OK; -} - -USB_TYPE ControlEp::open(int addr) -{ - TEST_ASSERT(addr >= 1 && addr <= 127); - uint8_t buf[8]; - USB_TYPE r = GetDescriptor(1, 0, buf, 8); - if (r != USB_TYPE_OK) { - return r; - } - TEST_ASSERT(buf[0] == 0x12); - TEST_ASSERT(buf[1] == 0x01); - TEST_ASSERT(buf[7] >= 8); - update_MaxPacketSize(buf[7]); - r = SetAddress(addr); - TEST_ASSERT(r == USB_TYPE_OK); - if (r != USB_TYPE_OK) { - return r; - } - wait_ms(2); - update_FunctionAddress(addr); - return USB_TYPE_OK; -} - -USB_TYPE ControlEp::controlReceive(uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, - uint8_t* data, int length) -{ - return host->controlRead(this, bmRequestType, bRequest, wValue, wIndex, data, length); -} - -USB_TYPE ControlEp::controlSend(uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, - const uint8_t* data, int length) -{ - return host->controlWrite(this, bmRequestType, bRequest, wValue, wIndex, (uint8_t*)data, length); -} - -