已经通过bulkendpoint实现对usb的写入和读取。
现在情况是,usb那边每40微秒生成512bytes的数据。
上位机这边在一个while(ture){}循环内部一直调用BulkInEndPoint->xferdata(data[],len)来获取USB的数据。
- CCyUSBDevice *USBDevice = new CCyUSBDevice(NULL);
- CCyBulkEndPoint *bulkIn = NULL;
- bulkIn = (CCyBulkEndPoint *)USBDevice->EndPoints[3];
- bulkIn->TimeOut = 1000;
- unsigned char data2[512];
- LONG len =512;
- while(true)
- {
- while(!flag)
- {
- //当false之后重新执行xferdata。
- flag = bulkIn->XferData(data2,len);
- if(!flag)
- {
- std::cout<<std::endl;
- std::cout<<packetCounter;
- std::cout<<"failed code: "<<flag<<" error: ";
- std::cout<<bulkIn->LastError<<std::endl;;
- std::cout<<"close USBDevice and reStart";
- USBDevice->Close();
- USBDevice->Open(0);
- bulkIn = (CCyBulkEndPoint *)USBDevice->EndPoints[3];
- flag = bulkIn->XferData(data2,len);
- }
- else
- {
- flag = false;
- }
-
- }
- }
查到是xferdata()方法返回false。
这时while(!flag)判真,重新调用bulkInEndPoint->XferData(data[], len);
但自这之后xferdata一直就返回false了。
同事用抓包工具说,阻塞之后上位机没有发出SOF命令。
正常一次包的发送应该是SOF-In-DATA-ACK。
|