Mac 环境下的 USBHIDManager HID、getReport() 和 setReport()
我们正在尝试与 USB HIDDevice 进行通信。该设备在 Windows 中运行良好,我们可以使用 WriteFile()
和 ReadFile()
发送报告并获取报告。
在 Mac 上,我们尝试使用 setReoprt()
和 getReport()
与设备进行交互。但是 getReport() 没有返回任何数据,而是返回一个错误。
申请中有什么错误?
We are trying to communicate with a USB HIDDevice. This device is working fine in windows, where we can send a report and get a report back using WriteFile()
and ReadFile()
.
On the Mac, we are trying to interface with the device using setReoprt()
and getReport()
. But getReport()
is not returning any data, but an error.
What is the wrong in the application?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
为了使用异步行为,必须将使用 getAsyncEventSource 获取的事件源添加到运行循环中。
以上注释是 setReport 注释的一部分。你可能需要先了解Mac OS中Runloop的runloop机制。
因为这里无法解释其机制。当您熟悉RunLoop后,以下函数和命令可能会对您的编码有所帮助。(尝试在google中搜索“CFRunLoop”)
CFRunLoopGetCurrent();
CFRunLoopRun();
CFRunLoopAddSource(CFRunLoopRef rl, CFRunLoopSourceRef 源, CFStringRef 模式);
CFRunLoopStop(CFRunLoopRef rl);(我通常在回调方法中调用这个函数)
In order to make use of asynchronous behavior, the event source obtained using getAsyncEventSource must be added to a run loop.
The above note is part of the comment of setReport. U might need to learn the runloop mechanism of Runloop in Mac OS first.
Since it's impossible to explain the mechanism here. The following functions and orders might help u coding when u get familiar with RunLoop.(Try to search "CFRunLoop" in google)
CFRunLoopGetCurrent();
CFRunLoopRun();
CFRunLoopAddSource(CFRunLoopRef rl, CFRunLoopSourceRef source, CFStringRef mode);
CFRunLoopStop(CFRunLoopRef rl);(i usually call this function in the callback method)