BaseUsbHost example program
Dependencies: BaseUsbHost FATFileSystem mbed mbed-rtos
Diff: UsbFlashDrive/UsbFlashDrive.cpp
- Revision:
- 1:80205a2de336
- Parent:
- 0:2a9734a95d55
- Child:
- 3:6ae9a03a6145
--- a/UsbFlashDrive/UsbFlashDrive.cpp Tue Dec 04 13:39:57 2012 +0000 +++ b/UsbFlashDrive/UsbFlashDrive.cpp Wed Dec 05 13:25:18 2012 +0000 @@ -1,4 +1,4 @@ -// UsbFlashDrive.cpp 2012/12/4 +// UsbFlashDrive.cpp 2012/12/5 #include "mbed.h" #include "rtos.h" #include "BaseUsbHost.h" @@ -42,10 +42,8 @@ if (ctlEp == NULL) { // root hub DBG_OHCI(LPC_USB->HcRhPortStatus1); TEST_ASSERT_FALSE(LPC_USB->HcRhPortStatus1 & 0x200); - m_ctlEp = new ControlEp(); - TEST_ASSERT_TRUE(m_ctlEp); - } else { - m_ctlEp = ctlEp; + ctlEp = new ControlEp(); + TEST_ASSERT_TRUE(ctlEp); } TEST_ASSERT(sizeof(CBW) == 31); @@ -58,11 +56,30 @@ m_pEpBulkIn = NULL; m_pEpBulkOut = NULL; - ParseConfiguration(); - int rc = m_ctlEp->SetConfiguration(1); + ParseConfiguration(ctlEp); + int rc = ctlEp->SetConfiguration(1); TEST_ASSERT_EQUAL(rc, USB_OK); - GetMaxLUN(); - setup(); + GetMaxLUN(ctlEp); + setup(ctlEp); +} + +bool UsbFlashDrive::check(ControlEp* ctlEp) +{ + if (ctlEp == NULL) { + return false; + } + uint8_t buf[8]; + int rc = ctlEp->GetDescriptor(USB_DESCRIPTOR_TYPE_CONFIGURATION, 0, buf, sizeof(buf)); + if (rc != USB_OK) { + return false; + } + DBG_BYTES("ConfigDescriptor 8bytes", buf, sizeof(buf)); + TEST_ASSERT(buf[0] == 9); + TEST_ASSERT(buf[1] == 0x02); + if (buf[4] != 0x01) { + return false; + } + return true; } int UsbFlashDrive::disk_initialize() @@ -114,7 +131,7 @@ return m_numBlocks; } -int UsbFlashDrive::setup(int timeout) +int UsbFlashDrive::setup(ControlEp* ctlEp, int timeout) { int retry = 0; @@ -146,13 +163,13 @@ return 0; } -int UsbFlashDrive::ParseConfiguration() +int UsbFlashDrive::ParseConfiguration(ControlEp* ctlEp) { + TEST_ASSERT(ctlEp); int rc; uint8_t ConfigDesc[9]; int index = 0; - TEST_ASSERT(m_ctlEp); - rc = m_ctlEp->GetDescriptor(USB_DESCRIPTOR_TYPE_CONFIGURATION, index, ConfigDesc, sizeof(ConfigDesc)); + rc = ctlEp->GetDescriptor(USB_DESCRIPTOR_TYPE_CONFIGURATION, index, ConfigDesc, sizeof(ConfigDesc)); TEST_ASSERT(rc == USB_OK); DBG_BYTES("ConfigDescriptor 9bytes", ConfigDesc, sizeof(ConfigDesc)); TEST_ASSERT(ConfigDesc[0] == 9); @@ -166,7 +183,7 @@ uint8_t* buf = new uint8_t[wTotalLength]; TEST_ASSERT(buf); - rc = m_ctlEp->GetDescriptor(USB_DESCRIPTOR_TYPE_CONFIGURATION, index, buf, wTotalLength); + rc = ctlEp->GetDescriptor(USB_DESCRIPTOR_TYPE_CONFIGURATION, index, buf, wTotalLength); TEST_ASSERT(rc == USB_OK); TEST_ASSERT(ConfigDesc[1] == 0x02); for (int pos = 0; pos < wTotalLength; pos += buf[pos]) { @@ -192,7 +209,7 @@ DBG("EndpointAddress: %02X\n", ep); DBG("Attribute: %02X\n", att); DBG("MaxPacketSize: %d\n", size); - BulkEp* pEp = new BulkEp(m_ctlEp->GetAddr(), ep, size); + BulkEp* pEp = new BulkEp(ctlEp->GetAddr(), ep, size); TEST_ASSERT(pEp); if (dir) { m_pEpBulkIn = pEp; @@ -208,20 +225,20 @@ return 0; } -int UsbFlashDrive::BulkOnlyMassStorageReset() +int UsbFlashDrive::BulkOnlyMassStorageReset(ControlEp* ctlEp) { - TEST_ASSERT(m_ctlEp); - int rc = m_ctlEp->controlReceive(0x21, 0xff, 0x0000, m_interface, NULL, 0); + TEST_ASSERT(ctlEp); + int rc = ctlEp->controlReceive(0x21, 0xff, 0x0000, m_interface, NULL, 0); TEST_ASSERT(rc == USB_OK); return rc; } -int UsbFlashDrive::GetMaxLUN() +int UsbFlashDrive::GetMaxLUN(ControlEp* ctlEp) { + TEST_ASSERT(ctlEp); TEST_ASSERT(m_interface == 0); uint8_t temp[1]; - TEST_ASSERT(m_ctlEp); - int rc = m_ctlEp->controlReceive(0xa1, 0xfe, 0x0000, m_interface, temp, sizeof(temp)); + int rc = ctlEp->controlReceive(0xa1, 0xfe, 0x0000, m_interface, temp, sizeof(temp)); TEST_ASSERT(rc == USB_OK); DBG_BYTES("GetMaxLUN", temp, sizeof(temp)); m_MaxLUN = temp[0]; @@ -376,13 +393,13 @@ int UsbFlashDrive::_bulkRecv(uint8_t* buf, int size) { TEST_ASSERT(m_pEpBulkIn); - int ret = m_pEpBulkIn->read(buf, size); + int ret = m_pEpBulkIn->bulkReceive(buf, size); return ret; } int UsbFlashDrive::_bulkSend(const uint8_t* buf, int size) { TEST_ASSERT(m_pEpBulkOut); - int ret = m_pEpBulkOut->write(buf, size); + int ret = m_pEpBulkOut->bulkSend(buf, size); return ret; }