我有一个暴露MaxFeatureReportSize = 263的设备。与设备通信的协议要求我发送长度恰好为263字节的功能报告。这在Windows上工作正常,但我在Mac上遇到了一个奇怪的问题 - OS X 10.11上的IOHIDDeviceSetReport
和10.12返回了我无法从IOKit头中推断出的神秘错误0xe0005000
,以及相应驱动程序的代码(IOUSBHostHIDDevice
)是closedsource。
进一步调查表明
IOUSBHIDDriver
代替0xe0005000
的OS X 10.10上,出现0xe000404f
错误。这是kIOUSBPipeStalled
,但每当我尝试发送超过64个字节时,我仍然会得到它。这是我得到的。我现在正在考虑下载OS X 10.8并调试IOUSBFamily,看看为什么它不能处理超过64字节的报告。令人遗憾的是,Apple选择从OS X 10.9及更高版本中删除IOUSBFamily资源。
答案 0 :(得分:1)
IOKit/usb/IOUSBHostFamily.h
(应该在Xcode.app中)将错误0xe0005000
定义为kUSBHostReturnPipeStalled
。
lists.apple.com
网站已关闭了几天,但USB列表中的某些人可能会提供帮助。您现在可以通过将主题或正文中的“帮助”通过电子邮件发送到Usb-request@lists.apple.com
答案 1 :(得分:0)
硬件协议分析器终于发现了Mac数据包的错误。所有Mac数据包都是263个字节长(正是我设置的那些),而一些Windows数据包被截断为64字节(由系统!)。一旦我在Mac上添加了一个hack来截断这些数据包,它就能完美运行。
我不知道为什么Windows决定截断它们 - 可能是因为特定的报告ID(描述符中的某些内容?),或者因为实际的数据包长度从未超过20个字节而其他所有内容都是填充。但这种奇怪的行为实际上是设备所期待的行为。