BeginDataXfer是非阻塞式的传输,也就是调用以后马上返回。
只到WaitForXfer得到传输完成信号后,FinishDataXfer才真正的开始写数据。
非阻塞式的传输的好处是不用阻塞其他操作的运行,在这里BeginDataXfer(inbuf,bc,&inOvLap);
开始读取bc个数据到inbuf里,当调用FinishDataXfer(inbuf,bc,&inOvLap,inContext); 时,数据才真正被写到inbuf里,同样对于outbuf也是一样的。
代码的流程就是
UCHAR *inContext = USBDevice->BulkInEndPt->BeginDataXfer(inbuf,bc,&inOvLap);
//开始接收数据到
UCHAR *outContext = USBDevice->BulkOutEndPt->BeginDataXfer
(outbuf,bc,&outOvLap);
//开始发送数据到
USBDevice->BulkOutEndPt->WaitForXfer(&outOvLap,100);
//等待发送完成
USBDevice->BulkInEndPt->WaitForXfer(&inOvLap,100);
//等待接收完成
Success = USBDevice->BulkOutEndPt->FinishDataXfer(outbuf,bc,&outOvLap,outContext);
//这里才真正将outbuf里的数据发送出
Success = USBDevice->BulkInEndPt->FinishDataXfer(inbuf,bc,&inOvLap,inContext);
//这里才真正将接收到的数据存储到inbuf里
CloseHandle(outOvLap.hEvent);
CloseHandle(inOvLap.hEvent);
//关闭句柄,释放资源
估计这个程序是测试发送的数据是否能够正常接收吧。