// blocking call starts a rx or tx transaction static DWORD SendRecvData( UINT32 epNum, DWORD dir, UINT8 *pData, UINT32 cbDataLen, DWORD flags ) { DWORD dwStartSec, dwSec; DWORD dwRet; EPTransfer* pTransfer = &m_epTransfers[epNum]; USBDBGMSG(USBDBG_ZONE_FUNC, (L"usbdbg:+SendRecvData. ep%d\r\n", epNum)); dwStartSec = OEMKitlGetSecs(); // start rx or tx transfer StartTransfer(epNum, dir, pData, cbDataLen, flags); // loop until all data sent while(pTransfer->status & USBDBG_TRANSFER_STATUS_INPROGRESS) { UsbRndis_EventHandler(); dwSec = OEMKitlGetSecs(); // timed out sending data? if ((INT32)(dwSec - dwStartSec) > SEND_RECV_TIME_OUT) { USBDBGMSG(USBDBG_ZONE_ERROR, ( L"ERROR!UsbDbg: ep%d dir=%d timed out tx/rx data." L"dwSec=%d, dwStartSec=%d\r\n", epNum, dir, dwSec, dwStartSec)); dwRet = ERROR_TIMEOUT; AbortTransfer(epNum, dir); goto clean; } } if (pTransfer->status & USBDBG_TRANSFER_STATUS_COMPLETE) { dwRet = ERROR_SUCCESS; } else { dwRet = ERROR_IO_INCOMPLETE; } clean: USBDBGMSG(USBDBG_ZONE_FUNC, (L"usbdbg:-SendRecvData. ep%d\r\n", epNum)); return dwRet; }
UINT32 OALGetTickCount() { return OEMKitlGetSecs () * 1000; }