Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of USBHostC270_example by
BaseUvc.cpp
00001 // BaseUvc.cpp 00002 #include "USBHostConf.h" 00003 #include "USBHost.h" 00004 #include "USBIsochronous.h" 00005 #include "BaseUvc.h" 00006 00007 void BaseUvc::poll(int millisec) 00008 { 00009 HCITD* itd = m_isoEp->isochronousReceive(millisec); 00010 if (itd) { 00011 uint8_t cc = itd->ConditionCode(); 00012 report_cc_count[cc]++; 00013 if (cc == 0) { 00014 uint16_t frame = itd->StartingFrame(); 00015 int fc = itd->FrameCount(); 00016 uint8_t* buf = const_cast<uint8_t*>(itd->buf); 00017 int mps = m_isoEp->m_PacketSize; 00018 for(int i = 0; i < fc; i++) { 00019 uint16_t psw = itd->OffsetPSW[i]; 00020 cc = psw>>12; 00021 if (cc == 0 || cc == 9) { 00022 int len = psw & 0x7ff; 00023 onResult(frame, buf, len); 00024 } 00025 report_ps_cc_count[cc]++; 00026 buf += mps; 00027 frame++; 00028 } 00029 } 00030 delete itd; 00031 } 00032 } 00033 00034 USB_TYPE BaseUvc::Control(int req, int cs, int index, uint8_t* buf, int size) 00035 { 00036 if (req == SET_CUR) { 00037 return host->controlWrite(dev, 00038 USB_HOST_TO_DEVICE | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_INTERFACE, 00039 req, cs<<8, index, buf, size); 00040 } 00041 return host->controlRead(dev, 00042 USB_DEVICE_TO_HOST | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_INTERFACE, 00043 req, cs<<8, index, buf, size); 00044 } 00045 00046 USB_TYPE BaseUvc::setInterfaceAlternate(uint8_t intf, uint8_t alt) 00047 { 00048 return host->controlWrite(dev, USB_HOST_TO_DEVICE | USB_RECIPIENT_INTERFACE, 00049 SET_INTERFACE, alt, intf, NULL, 0); 00050 } 00051 00052 void BaseUvc::onResult(uint16_t frame, uint8_t* buf, int len) 00053 { 00054 if(m_pCbItem && m_pCbMeth) 00055 (m_pCbItem->*m_pCbMeth)(frame, buf, len); 00056 else if(m_pCb) 00057 m_pCb(frame, buf, len); 00058 } 00059 00060 void BaseUvc::setOnResult( void (*pMethod)(uint16_t, uint8_t*, int) ) 00061 { 00062 m_pCb = pMethod; 00063 m_pCbItem = NULL; 00064 m_pCbMeth = NULL; 00065 } 00066 00067 void BaseUvc::clearOnResult() 00068 { 00069 m_pCb = NULL; 00070 m_pCbItem = NULL; 00071 m_pCbMeth = NULL; 00072 } 00073 00074
Generated on Mon Jul 18 2022 19:52:39 by
1.7.2
