使用 Libusb 1.0 发送中断传输会返回LIBUSB_ERROR_IO,但在接收时不会
Sending a interrupt transfer using Libusb 1.0 returns an LIBUSB_ERROR_IO but not when receiving
我正在为一些自定义固件设置一个测试框架(谷歌测试框架)。我正在使用带有 Libusb 1.0 库的 USB 来接收固件的输出,但我还需要模拟固件的输入。我可以正常接收到主机的输出,但无法从主机发送传输。
USB 描述符表示到主机的中断传输包含 3/4 条数据,我使用此数据结构捕获这些数据:
typedef struct
{
uint8_t reportId;
uint8_t axis[NUM_AXIS];
uint8_t button;
}usb_report_t;
使用来自 libusb 的此调用可以正常工作
transfer_error = libusb_interrupt_transfer(dev_handle, 0x81, (unsigned char*)&report, sizeof(report), &transfer_length, 200);
我的第二个任务是发送我使用此结构设置的中断传输
typedef struct
{
uint8_t reportId;
uint8_t thumper;
}usb_out_report_t;
我使用此调用发送中断传输
transfer_error = libusb_interrupt_transfer(dev_handle, 0x01, (unsigned char*)&out_report, sizeof(out_report), &length, 200);
此调用返回一个 -1,这是一个LIBUSB_ERROR_IO。
当我试图解决这个问题时,我发现了一个解决方法。 如果我从 USB 描述符中删除报告 ID,从而将两个结构转换为
typedef struct
{
//uint8_t reportId;
uint8_t axis[NUM_AXIS];
uint8_t button;
}usb_report_t;
typedef struct
{
//uint8_t reportId;
uint8_t thumper;
}usb_out_report_t;
然后中断转入和转出工作正常。这可以作为临时解决方法,但不是理想的长期解决方案。
有没有办法保留报告 ID 字段,但同时对 IN 和 OUT 端点进行传输工作?
有一位同事帮我弄清楚这个问题。 因此,显然在libusb源代码中,hid_open()函数解析USB描述符并使用这些功能。NumberOutputValueCaps,用于确定编写输出报告是否需要报表 ID。我的自定义固件中的 USB 描述符被解析为此功能。数字输出值上限 = 0。这意味着 api 调用不需要使用报告 ID。
为了解决这个问题,我们只是为 NumberOutputValueCaps 硬编码了一个特定的值,并重新编译了 libusb 库。这让我们有一个固件生产版本的工作测试框架。
相关文章:
- "error: no matching function for call to"构造函数错误
- Seg Fault Issue C++ (file IO / getline)
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- 为什么在读取文件大小时文件IO速度会发生变化
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- C++错误:"error: int aaa::bbb is protected within this context"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- C++ "error: invalid use of void expression"
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 如何修复"error: ‘_1’ was not declared in this scope"?
- Agora.io 虚幻引擎插件构建错误
- 从不同目录执行时"symbol lookup error:",否则从构建目录执行时按预期工作
- 对象声明中的模板"error: expected expression"
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- OpenCV 3.4.1 error readNetFromTensorflow 无法在 cv::d nn::ReadProtoFromBinaryFile 中打开 .pb
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"