int HostIO_CyUSB::Read(unsigned char * lpvBuffer, int dwBuffSize, int * lpdwBytesRead) { int iStatus; m_log->Write(2, _T("Read buffer size: %d bytes"), dwBuffSize); iStatus = cyusb_bulk_transfer(h, 0x83, lpvBuffer, dwBuffSize, lpdwBytesRead, CyReadTimeout); m_log->Write(2, _T("Read Done %d bytes read, data: "), *lpdwBytesRead); m_log->WriteBuffer(2, lpvBuffer, dwBuffSize, *lpdwBytesRead, 256); return iStatus==0 ? ALL_OK : ERR_USB_ReadFailed; }
int HostIO_CyUSB::Write(unsigned char * lpvBuffer, int dwBuffSize, int * lpdwBytes) { int iStatus; m_log->Write(2, _T("Write %d bytes, Data:"), dwBuffSize); m_log->WriteBuffer(2, lpvBuffer, dwBuffSize, dwBuffSize, 256); iStatus = cyusb_bulk_transfer(h, 0x02, lpvBuffer, dwBuffSize, lpdwBytes, CyWriteTimeout); m_log->Write(2, _T("Write Done %d bytes written."), *lpdwBytes); return iStatus==0 ? ALL_OK : ERR_USB_WriteFailed; }
static void * writer(void *arg2) { int r, nbr; unsigned char buf[64]; int transferred = 0; memset(buf,'\0',64); while ( nbr = read(0,buf,64) ) { r = cyusb_bulk_transfer(h1, 0x02, buf, nbr, &transferred, timeout * 1000); if ( r == 0 ) { memset(buf,'\0',64); continue; } else { cyusb_error(r); cyusb_close(); return NULL; } } }
static void *reader(void *arg1) { int r; unsigned char buf[64]; int transferred = 0; memset(buf,'\0',64); while (1) { r = cyusb_bulk_transfer(h1, 0x86, buf, 64, &transferred, timeout * 1000); if ( r == 0 ) { printf("%s", buf); memset(buf,'\0',64); continue; } else { cyusb_error(r); cyusb_close(); return NULL; } } }
void bulk_reader(int num_bytes) { int rStatus, nbr; unsigned char *buf; int transferred = 0; buf = (unsigned char*)(malloc(num_bytes * 2)); if (buf == NULL){ printf ("Error in Memory allocation ... Try a smaller size\n"); return; } rStatus = cyusb_bulk_transfer(h1, gl_ep_in, buf, num_bytes, &transferred, 2000); if (rStatus == LIBUSB_ERROR_TIMEOUT){ printf ("\nRead only %d bytes \n", transferred); printf ("\nError: Timed out while reading %d bytes ..\n\n", (num_bytes - transferred)); cyusb_clear_halt (h1, gl_ep_in); free (buf); return; } else if (rStatus == LIBUSB_ERROR_OVERFLOW){ printf ("\nBuffer overflow occurred read only %d bytes \n\n", transferred); printf ("Clearing ep %d \n",gl_ep_in); cyusb_clear_halt (h1, gl_ep_in); free (buf); return; } else if (rStatus != LIBUSB_SUCCESS){ printf ("\nError in doing bulk read ..read %d bytes only %d \n", transferred, rStatus); cyusb_clear_halt (h1, gl_ep_in); free (buf); return; } printf ("\nSuccessfully read %d bytes \n\n", transferred); free (buf); }