打印
[数据传输]

XferData()返回false

[复制链接]
1986|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dwindy|  楼主 | 2016-7-7 16:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
已经通过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。

相关帖子

沙发
gs850997871| | 2016-7-22 17:47 | 只看该作者
楼主的问题是不是在传输失败一次后  后面就永远是false?遇到同样的问题  不知楼主有没有找到哪儿的问题啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

9

帖子

0

粉丝