USB host library, support isochronous,bulk,interrupt and control.
Dependents: BaseUsbHost_example BaseJpegDecode_example SimpleJpegDecode_example
Import programBaseUsbHost_example
BaseUsbHost example program
BaseUsbHostIntEp.cpp
- Committer:
- va009039
- Date:
- 2012-12-05
- Revision:
- 1:3b7bc4f87a61
- Parent:
- 0:b7d6879637a8
- Child:
- 2:fe1e62051d88
File content as of revision 1:3b7bc4f87a61:
// BaseUsbHostIntEp.cpp 2012/12/5 #include "mbed.h" #include "rtos.h" #include "BaseUsbHost.h" #define DEBUG #include "BaseUsbHostDebug.h" #define TEST #include "BaseUsbHostTest.h" InterruptEp::InterruptEp(int addr, uint8_t ep, uint16_t size, int lowSpeed) :BaseEp(addr, ep, size, lowSpeed) { HCTD* td = new_HCTD(); TEST_ASSERT(td); m_pED->TailTd = td; m_pED->HeadTd = td; HCCA* pHcca = reinterpret_cast<HCCA*>(LPC_USB->HcHCCA); TEST_ASSERT(pHcca); int n = 0; m_pED->Next = pHcca->InterruptTable[n]; pHcca->InterruptTable[n] = reinterpret_cast<uint32_t>(m_pED); LPC_USB->HcControl |= OR_CONTROL_PLE; } int InterruptEp::interruptReceive(uint8_t* buf, int len, int millisec) { if (m_td_queue_count == 0) { HCTD* data_td = m_pED->TailTd; TEST_ASSERT(data_td); 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); data_td->Next = reinterpret_cast<uint32_t>(blank_td); m_pED->TailTd = blank_td; m_td_queue_count++; DBG_ED(m_pED); LPC_USB->HcControl |= OR_CONTROL_PLE; // Enable Periodic } 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_TIMEOUT; }