【发布时间】:2013-10-23 22:32:15
【问题描述】:
我最近在我的带有 PS3 控制器的 Mac 上玩了 IOKit 的 HID 部分。我已经设法查看示例代码并连接到我的控制器,接收数据流并对其进行解析(一切,包括加速度计和陀螺仪)。
但是,今天我决定开始设置设备背面的 LED 并触发震动马达,但我无法让它工作!
虽然查看 Apple 为 IOHID 提供的示例代码,但我在 HID 设备上设置的东西并不多,只能接收数据。从网上看(几乎半天),我得到了我认为使用IOHIDDeviceSetReport() 的有效发送方法。但是,我不知道应该发送什么数据。
我找到了几个列出数据示例的网站:
- http://www.circuitsathome.com/mcu/ps3-and-wiimote-game-controllers-on-the-arduino-host-shield-part-2
- https://github.com/ribbotson/USB-Host/blob/master/ps3/PS3USB/ps3_usb.h
- http://wiibrew.org/wiki/Sixaxis
(我知道并非所有这些示例都适用于 Mac 和 PS3 控制器之间)
很多人似乎都在谈论这个,甚至在做(我拒绝相信没有人能做到这一点),但我似乎找不到任何关于如何做到这一点的东西!
我觉得我在这里缺少一个简单的步骤,所以如果有人有任何想法、帮助或解决方案,请告诉我。
谢谢。
示例代码说明我如何尝试发送报告(返回成功):
CFIndex len = 64;
uint8_t report[64] = {0x0};
IOReturn tIOReturn = IOHIDDeviceSetReport(deviceRef,
kIOHIDReportTypeOutput,
reportID,
report,
len);
这只是发送了很多什么都没有(字面意思),但这只是我正在使用的一个示例,以防万一它不正确。
补充:我也刚刚注意到 Apple 对 IOHIDDeviceSetReport 的定义与给出的示例不同。
那里说report 应该是“报告缓冲区的地址”。但是……
它说*report(作为一个指针)是“要发送到设备的报告字节。”。
【问题讨论】:
-
你有没有让这个工作达到可以改变 LED 和震动电机状态的地步?我有 IOKit 代码可以读取值,但遵循以下设置输出报告的建议不会更改任何 LED。
-
@TristanSeifert 遗憾的是没有。 Karsten 的答案很有用,但我发现以前有链接,但无法让它们工作。让我知道您将来是否有任何运气与隆隆声或 LED。
-
我已经把它缩小到 IOKit 给我一个关于写入停滞管道的错误,但是没有关于该错误的文档,我对 IOKit 不够熟悉来解决它,所以它可以假设数据永远不会到达设备。以后我会更多地研究它,并随时通知你! (如果我记得,那是……)
-
我问 Feral 为什么即使游戏有这个选项,PS3 控制器也不振动,他们告诉我苹果在 OS X 中包含的驱动程序不支持这个。在另一个关于这个的讨论中,有人说苹果已经从他们的驱动程序中删除了 ForceFeedback(不记得这是从哪个操作系统开始的)。 --> 因此,由于 HID 驱动程序不支持此功能,即使一切正常,它也只会失败。我认为这也意味着我们无法设置 LED。