
[英]Translates the XInput calls to DirectInput calls on MAC OS X (Emulate x360 controller from PS3 one)
[英]Send data to a PS3 DualShock3 controller from a Mac (IOHIDDeviceSetReport)
我最近在带有PS3控制器的Mac上一直在研究IOKit的HID部分。 我设法查看了示例代码并连接到我的控制器,接收了数据流并对其进行了解析(所有内容,包括加速度计和陀螺仪)。
但是,今天我决定要开始在设备背面设置LED并触发隆隆声电机,但我无法使其正常工作!
尽管Apple提供了用于IOHID的示例代码,但是在HID设备上进行设置时只看到数据就看不到什么了。 从网上浏览(半天IOHIDDeviceSetReport()
),我得到了一个使用IOHIDDeviceSetReport()
的有效发送方法。 但是,我无法确定应该发送哪些数据。
我发现了几个列出数据示例的站点:
(我知道并非所有这些示例都是针对Mac和PS3控制器之间的)
很多人似乎在谈论甚至做到这一点(我拒绝相信没有人能做到这一点),但是我似乎找不到任何有关如何实际运行的信息!
我觉得这里缺少一个简单的步骤,因此,如果有人有任何想法,帮助或解决方案,请告诉我。
谢谢。
我尝试发送报告的示例代码 (返回成功):
CFIndex len = 64;
uint8_t report[64] = {0x0};
IOReturn tIOReturn = IOHIDDeviceSetReport(deviceRef,
kIOHIDReportTypeOutput,
reportID,
report,
len);
(从字面上看)这只是发送了很多东西,但这只是我正在使用的示例,以防万一它不正确。
另外:我也刚刚注意到,苹果的IOHIDDeviceSetReport
定义与给出的示例IOHIDDeviceSetReport
不同。
那里说report
应该是“报告缓冲区的地址”。 但...
那里说*report
(是指针)是“要发送到设备的报告字节”。
在以下位置有一个示例: http : //www.circuitsathome.com/mcu/ps3-and-wiimote-game-controllers-on-the-arduino-host-shield-part-2
带有描述LED和Rumble控件的代码, 网址为: https : //github.com/ribbotson/USB-Host/blob/master/ps3/PS3USB/ps3_usb.cpp#L187
您作为报告发送的字节似乎需要具有某种格式:
prog_char output_01_report[] PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x02, 0xff, 0x27, 0x10, 0x00, 0x32, 0xff,
0x27, 0x10, 0x00, 0x32, 0xff, 0x27, 0x10, 0x00,
0x32, 0xff, 0x27, 0x10, 0x00, 0x32, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
在LEDRumble函数中,将这些字节复制到buf中,然后覆盖buf [9]以设置LED状态,并且使用buf [1]至buf [4]中的字节来配置Rumble。 字节全部发送到控制器。
这里定义了一些常量: https : //github.com/ribbotson/USB-Host/blob/master/ps3/PS3USB/ps3_usb.h#L100
#define psLED1 0x01
#define psLED2 0x02
#define psLED3 0x04
#define psLED4 0x08
#define psRumbleHigh 0x10
#define psRumbleLow 0x20
这些常量作为参数传递给LEDRumble函数。
就我所读的而言,他们的例子似乎很好。 在这种情况下,当将uint8_t [64]变量或uint8_t *变量传递给IOHIDDeviceSetReport时,都将被解释为指向uint8_t的指针。
我现在处于受限制的网络中,因此我将无法再提供任何帮助。 但是我稍后会在家里尝试阅读更多有关此的内容,因为我也有一个相关的项目。 如果我发现有什么可以帮助我们的事情,我将回到这里讨论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.