kukudeYSB 2025-03-12 14:53 采纳率: 0%
浏览 14

libusb测速时返回值为0,actual_length为0。传输时间过短,是否是传输失败

libusb测试USB设备传输过程中。使用libusb_bulk_transfer进行传输时,返回值是0,但是actual_length的值也是0。是不是就是证明没有传输成功。该如何解决以上问题。

        unsigned char *buff = new unsigned char[m_nCurrentBlockSize];
    LARGE_INTEGER startTime, endTime;
    int actual_length = 0;
    QueryPerformanceCounter(&startTime);
    
    int nResult = libusb_bulk_transfer(m_pTestHandle, m_OutEndpoint, buff, m_nCurrentBlockSize, &actual_length, 5000);

    QueryPerformanceCounter(&endTime);    

还有个问题就是libusb的libusb_bulk_transfer,传输大小是多少,如果有限制,我该如何修改限制

  • 写回答

4条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-03-12 14:53
    关注
    让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
    如果答案让您满意,请采纳、关注,非常感谢!
    当libusb_bulk_transfer返回值为0但actual_length值为0时,表示传输成功但没有接收到数据。这可能是因为USB设备未准备好数据或发生了其他错误。要解决这个问题,可以尝试以下几种方法:
    1. 确保USB设备已经准备好了要传输的数据。
    2. 检查USB设备是否正常工作,例如插入正确的设备、驱动程序是否正确安装等。
    3. 检查传输数据的逻辑是否正确,确保正确设置了端点、传输方向等参数。 关于限制传输大小的问题,libusb_bulk_transfer函数的第四个参数size是指要发送或接收的数据大小,没有固定的限制。如果需要更大的数据量传输,可以根据需要增加size的大小。但是需要注意USB传输的可靠性和性能,过大的传输数据量可能会造成传输失败或性能下降。 以下是对原始代码的修改建议:
    unsigned char *buff = new unsigned char[m_nCurrentBlockSize]; 
    LARGE_INTEGER startTime, endTime; 
    int actual_length = 0; 
    QueryPerformanceCounter(&startTime);
    int nResult = libusb_bulk_transfer(m_pTestHandle, m_OutEndpoint, buff, m_nCurrentBlockSize, &actual_length, 5000); 
    QueryPerformanceCounter(&endTime);
    

    希望能帮到您解决问题。如果有其他问题,欢迎继续提问。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月12日