68013API函数说明

写数据的步骤:


1、打开设备:USBDevice->Open(DeviceIndex);
2、获得USB批量传输的断点:OutEndpt = USBDevice->EndPoints;


3、确定设备打开则创建线程函数:AfxBeginThread(XferLoopw, this);


4、打开事件对象:outOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_OUT"); 
5、开启异步传输并完成数据的传输:BeginDataXfer(data,outlen,&outOvLap);


                                                          WaitForXfer(&outOvLap,500);        


                                                           FinishDataXfer(data, outlen, &outOvLap,outContext);


6、关闭设备:


CloseHandle(outOvLap.hEvent); 
delete [] data;


     


7、注释开始传输的几句语句:


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); 
//关闭句柄,释放资源


8、


OVERLAPPED结构是什么意思

OVERLAPPED结构类型声明如下:

  typedef struct _OVERLAPPED {
  ULONG_PTR Internal; //操作系统保留,指出一个和系统相关的状态
  ULONG_PTR InternalHigh; //指出发送或接收的数据长度
  union {
  struct {
  DWORD Offset; //文件传送的开始位置
  DWORD OffsetHigh; //文件传送的字节偏移量的高位字
  };
  PVOID Pointer; //指针,指向文件传送位置
  };
  HANDLE hEvent; //指定一个I/O操作完成后触发的事件
  } OVERLAPPED, *LPOVERLAPPED;




刚看到了一个关于overlapped的解释,很经典,就放这了。


OVERLAPPED结构主要在一些重叠IO等异步操作中起作用。 
即:你需要操作系统传递一批数据,于是填了一个overlapped的订单,订单上写着从哪里(数据的偏移位置)开始传输,于是你去干别的事去了。系统完成传输就打个电话(激活hEvent)叫你验收,你看到overlapped订单上系统写着的传输的数据数量验收接收的数据

你可能感兴趣的:(api,struct,null,delete,存储,电话)