BaseUsbHost example program

Dependencies:   BaseUsbHost FATFileSystem mbed mbed-rtos

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;
 }