USB host library, support isochronous,bulk,interrupt and control.

Dependents:   BaseUsbHost_example BaseJpegDecode_example SimpleJpegDecode_example

Import programBaseUsbHost_example

BaseUsbHost example program

Revision:
3:ae77d63a1eda
Parent:
2:fe1e62051d88
Child:
4:d931d24c2f81
--- a/BaseUsbHostBlkEp.cpp	Tue Dec 11 15:26:54 2012 +0000
+++ b/BaseUsbHostBlkEp.cpp	Sun Jan 06 11:45:18 2013 +0000
@@ -1,8 +1,8 @@
-// BaseUsbHostBlkEp.cpp 2012/12/11
+// BaseUsbHostBlkEp.cpp 2012/12/24
 #include "mbed.h"
 #include "rtos.h"
 #include "BaseUsbHost.h"
-//#define DEBUG
+#define DEBUG
 #include "BaseUsbHostDebug.h"
 #define TEST
 #include "BaseUsbHostTest.h"
@@ -18,85 +18,23 @@
     }
     m_pED->Next = LPC_USB->HcBulkHeadED;
     LPC_USB->HcBulkHeadED = reinterpret_cast<uint32_t>(m_pED);
-    
+  
     DBG_OHCI(LPC_USB->HcBulkHeadED);
     DBG_ED(m_pED);
+}
 
+void BulkEp::enable()
+{
     LPC_USB->HcCommandStatus |= OR_CMD_STATUS_BLF;
     LPC_USB->HcControl |= OR_CONTROL_BLE;
 }
 
 int BulkEp::bulkReceive(uint8_t* buf, int len, int millisec)
 {
-    if (m_td_queue_count == 0) {
-        HCTD* data_td = m_pED->TailTd;
-        TEST_ASSERT(data_td);
-        if (data_td == NULL) {
-            return USB_ERROR;
-        }
-        data_td->Control |= TD_IN;
-        data_td->CurrBufPtr = buf;
-        data_td->BufEnd = const_cast<uint8_t*>(buf)+len-1;
-        HCTD* blank_td = new_HCTD();
-        TEST_ASSERT(blank_td);
-        if (blank_td == NULL) {
-            return USB_ERROR_MEMORY;
-        }
-        data_td->Next = reinterpret_cast<uint32_t>(blank_td);
-        m_pED->TailTd = blank_td;
-        m_td_queue_count++;
-        DBG_ED(m_pED);
-        LPC_USB->HcCommandStatus |= OR_CMD_STATUS_BLF;
-        LPC_USB->HcControl |= OR_CONTROL_BLE;
-    }
-    
-    HCTD* td = get_queue_HCTD(millisec);
-    if (td == NULL) {
-        return USB_PROCESSING;
-    }
-    DBG_TD(td);
-    int ret = len;
-    if (td->CurrBufPtr) {
-        ret = td->CurrBufPtr - buf;
-    }
-    delete_HCTD(td); 
-    m_td_queue_count--;
-    return ret;
+    return send_receive(buf, len, millisec);
 }
 
 int BulkEp::bulkSend(const uint8_t* buf, int len, int millisec)
 {
-    HCTD* data_td = m_pED->TailTd;
-    TEST_ASSERT(data_td);
-    if (data_td == NULL) {
-        return USB_ERROR;
-    }
-    data_td->Control |= TD_OUT;
-    data_td->CurrBufPtr = const_cast<uint8_t*>(buf);
-    data_td->BufEnd = const_cast<uint8_t*>(buf)+len-1;
-    HCTD* blank_td = new_HCTD();
-    TEST_ASSERT(blank_td);
-    if (blank_td == NULL) {
-        return USB_ERROR_MEMORY;
-    }
-    data_td->Next = reinterpret_cast<uint32_t>(blank_td);
-    m_pED->TailTd = blank_td;
-    m_td_queue_count++;
-    DBG_ED(m_pED);
-    
-    LPC_USB->HcCommandStatus |= OR_CMD_STATUS_BLF;
-    LPC_USB->HcControl |= OR_CONTROL_BLE;
- 
-    HCTD* td = get_queue_HCTD(millisec);
-    if (td) {
-        DBG_TD(td);
-        int ret = len;
-        if (td->CurrBufPtr) {
-            ret = td->CurrBufPtr - buf;
-        }
-        delete_HCTD(td); 
-        m_td_queue_count--;
-        return ret;
-    }
-    return USB_ERROR;
+    return send_receive(const_cast<uint8_t*>(buf), len, millisec);
 }