USB host library, support isochronous,bulk,interrupt and control.
Dependents: BaseUsbHost_example BaseJpegDecode_example SimpleJpegDecode_example
BaseUsbHostUvc.cpp
00001 // BaseUsbHostUvc.cpp 2013/1/11 00002 #include "mbed.h" 00003 #include "rtos.h" 00004 #include "BaseUsbHost.h" 00005 #define DEBUG 00006 #include "BaseUsbHostDebug.h" 00007 #define TEST 00008 #include "BaseUsbHostTest.h" 00009 00010 void BaseUvc::poll(int millisec) 00011 { 00012 HCITD* itd = m_isoEp->isochronousReveive(millisec); 00013 if (itd) { 00014 uint8_t cc = itd->ConditionCode(); 00015 report_cc_count[cc]++; 00016 if (cc == 0) { 00017 uint16_t frame = itd->StartingFrame(); 00018 int fc = itd->FrameCount(); 00019 uint8_t* buf = const_cast<uint8_t*>(itd->buf); 00020 int mps = m_isoEp->m_PacketSize; 00021 for(int i = 0; i < fc; i++) { 00022 uint16_t psw = itd->OffsetPSW[i]; 00023 cc = psw>>12; 00024 if (cc == 0 || cc == 9) { 00025 int len = psw & 0x7ff; 00026 onResult(frame, buf, len); 00027 } 00028 report_ps_cc_count[cc]++; 00029 buf += mps; 00030 frame++; 00031 } 00032 } 00033 delete itd; 00034 } 00035 } 00036 00037 int BaseUvc::Control(int req, int cs, int index, uint8_t* buf, int size) 00038 { 00039 TEST_ASSERT(m_ctlEp); 00040 if (m_ctlEp == NULL) { 00041 return USB_ERROR; 00042 } 00043 int rc; 00044 if (req == SET_CUR) { 00045 rc = m_ctlEp->controlSend( 00046 USB_HOST_TO_DEVICE | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_INTERFACE, 00047 req, cs<<8, index, buf, size); 00048 return rc; 00049 } 00050 rc = m_ctlEp->controlReceive( 00051 USB_DEVICE_TO_HOST | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_INTERFACE, 00052 req, cs<<8, index, buf, size); 00053 return rc; 00054 } 00055 00056 void BaseUvc::onResult(uint16_t frame, uint8_t* buf, int len) 00057 { 00058 if(m_pCbItem && m_pCbMeth) 00059 (m_pCbItem->*m_pCbMeth)(frame, buf, len); 00060 else if(m_pCb) 00061 m_pCb(frame, buf, len); 00062 } 00063 00064 void BaseUvc::setOnResult( void (*pMethod)(uint16_t, uint8_t*, int) ) 00065 { 00066 m_pCb = pMethod; 00067 m_pCbItem = NULL; 00068 m_pCbMeth = NULL; 00069 } 00070 00071 void BaseUvc::clearOnResult() 00072 { 00073 m_pCb = NULL; 00074 m_pCbItem = NULL; 00075 m_pCbMeth = NULL; 00076 }
Generated on Fri Jul 15 2022 19:56:09 by 1.7.2