[数据传输] XferData()返回false

[复制链接]
 楼主| dwindy 发表于 2016-7-7 16:13 | 显示全部楼层 |阅读模式
已经通过bulkendpoint实现对usb的写入和读取。
现在情况是,usb那边每40微秒生成512bytes的数据。
上位机这边在一个while(ture){}循环内部一直调用BulkInEndPoint->xferdata(data[],len)来获取USB的数据。
  1. CCyUSBDevice *USBDevice = new CCyUSBDevice(NULL);
  2. CCyBulkEndPoint *bulkIn = NULL;
  3. bulkIn = (CCyBulkEndPoint *)USBDevice->EndPoints[3];
  4. bulkIn->TimeOut = 1000;
  5. unsigned char data2[512];
  6. LONG len =512;
  7.     while(true)
  8.     {
  9.         while(!flag)
  10.         {
  11.             //当false之后重新执行xferdata。
  12.             flag = bulkIn->XferData(data2,len);
  13.             if(!flag)
  14.             {
  15.                 std::cout<<std::endl;
  16.                 std::cout<<packetCounter;
  17.                 std::cout<<"failed code: "<<flag<<" error: ";
  18.                 std::cout<<bulkIn->LastError<<std::endl;;
  19.                 std::cout<<"close USBDevice and reStart";
  20.                 USBDevice->Close();
  21.                 USBDevice->Open(0);
  22.                 bulkIn = (CCyBulkEndPoint *)USBDevice->EndPoints[3];
  23.                 flag = bulkIn->XferData(data2,len);
  24.             }
  25.             else
  26.             {
  27.                 flag = false;
  28.             }

  29.         }
  30.     }


查到是xferdata()方法返回false。
这时while(!flag)判真,重新调用bulkInEndPoint->XferData(data[], len);
但自这之后xferdata一直就返回false了。

同事用抓包工具说,阻塞之后上位机没有发出SOF命令。
正常一次包的发送应该是SOF-In-DATA-ACK。
gs850997871 发表于 2016-7-22 17:47 | 显示全部楼层
楼主的问题是不是在传输失败一次后  后面就永远是false?遇到同样的问题  不知楼主有没有找到哪儿的问题啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

9

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

4

主题

9

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部