几天来,我一直在寻找如何在 Mac 上支持游戏手柄和操纵杆,我发现的所有资源似乎都建议使用预安装的驱动程序以及使用 Apple 的 HID API,它可以工作。
这种方法的缺点是每个操纵杆和游戏手柄都需要加载另一个内核扩展,因此它可以被 HID 管理器识别,或者至少没有代码Info.plist
说明它符合早期安装的驱动程序。例如,当我有一个 360 Xbox 驱动程序KEXT时,微软的 Xbox 控制器可以工作,但罗技的控制器不行(我试过 F710)。
正如 Apple 建议的那样,使用游戏手柄或操纵杆的应用程序应该能够在用户空间自行操作,而无需引入任何 KEXT 内容。有没有办法做到这一点?
我想到的是在插入设备时使用 IORegistry 或 IOUSB API 来获取设备(USB Prober 至少显示了它)。然后以某种方式获取设备的描述,然后使用该描述将设备注册为 HID 设备。然后可以使用整个 HID 管理器。
我在正确的轨道上吗?或者有没有其他方法可以做到这一点?
由于 IOKit API 实际上提供了 kHIDUsage_GD_Joystick 之类的关键字,并且有一个 ForceFeedback.h 库,我想 Apple 在设计 HID API 时考虑了操纵杆和力反馈。这是我希望这可能奏效的渺茫希望。
一些参考文档和开源项目: