几天来,我一直在寻找如何在Mac上做游戏手柄和操纵杆支持的工作,而我发现的所有资源似乎都暗示了预装驱动程序以及使用Apple的HID API的效果。

这种方法的缺点是每个操纵杆和游戏手柄都需要加载另一个内核扩展,因此它可以被HID管理器识别,或者至少是一个不含Info.plist的代码,它表示它符合早期安装的驱动程序。例如,当我在家中装有360 Xbox驱动程序KEXT时,Microsoft的Xbox Controller 可以工作,而Logitech的Xbox Controller 不能工作(我尝试使用F710)。

正如苹果公司所建议的那样,使用游戏手柄或操纵杆的应用程序应该能够在用户空间中发挥自己的作用,而无需引入任何KEXT东西。有办法吗?

我想到的是类似在插入设备时使用IORegistry或IOUSB API来获取设备的方法(USB Prober至少会显示该设备)。然后以某种方式获取设备的描述,然后使用该描述将设备注册为HID。然后可以使用整个HID管理器。

我在正确的轨道上吗?还是有其他方法可以做到这一点?

因为IOKit API实际上提供了诸如kHIDUsage_GD_Joystick之类的关键字,并且有一个ForceFeedback.h库,所以我想苹果公司在设计HID API时就考虑了操纵杆和强制反馈。那是我抱有希望这可能行得通的渺茫希望。

一些引用文档和开源项目:

  • Colin Munro's 360 driver
  • HID API Documents
  • DDHID Project
  • 最佳答案

    再次讨论之后,我发现该解决方案可以直接在设备的文件描述符上运行。 libusb是一个出色的库,它极大地简化了您的工作,并且它们都支持Mac。

    xboxdrv link是一个很好的示例,说明了如何使用libusb在文件套接字上进行操作。

    在伪代码中,它应如下所示:

  • 枚举设备
  • 检测内核驱动程序,并在可能的情况下将其分离
  • 打开设备
  • 首次传输时关闭
  • 文件
  • 等待回调函数来处理消息和错误
  • 启动运行循环或在fd上选择以调用libusb_event_handle

  • 检查libusb以获取更多信息link

    关于macos - 用户空间中Mac OS X上的游戏 handle 和操纵杆支持,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12829307/

    10-12 22:36