我现在已经有了这个旧游戏手柄,GameStop高级控制器(它实际上是一家名为DragonRise公司的大规模生产的通用设备之一),它带有隆隆/触觉功能。不幸的是,它不适用于OSX。我认为这将是一个很好的项目,可以了解OSX和USB HID设备上的驱动程序开发。现在,游戏手柄本身作为标准HID设备正常工作,除了触觉/力反馈的东西。我的目标是为游戏手柄编写一个简单的ForceFeedback插件。
到目前为止,我所做的是创建一个非常简单的IOKit驱动程序,该驱动程序继承自IOUSBHIDDevice,基本上让超类可以完成大部分繁琐的工作;我的推理是,它现在工作正常,我只想添加功能。这样的工作;我现在的问题是驱动程序被添加为注册表中设备的新接口。它是匹配的,但没有使用。理想情况下,我想完全将通用IOUSBHIDDevice类替换为该特定游戏手柄的IOClass,但我不确定如何。
另一方面,也许我会以错误的方式解决这个问题,而且我不需要创建一个新的驱动程序来为该游戏手柄添加一个ForceFeedback插件;这只是我在阅读文档后提出的解决方案。
这是我的驱动程序项目中的Info.plist(无论如何重要的部分):
<key>IOKitPersonalities</key>
<dict>
<key>IODragonRiseGenericUSB</key>
<dict>
<key>IOMatchCategory</key>
<string>name_npp_driver_IODragonRiseGenericUSB</string>
<key>IOProviderClass</key>
<string>IOUSBDevice</string>
<key>IOKitDebug</key>
<integer>65535</integer>
<key>IOClass</key>
<string>name_npp_driver_IODragonRiseGenericUSB</string>
<key>CFBundleIdentifier</key>
<string>name.npp.driver.${PRODUCT_NAME:rfc1034identifier}</string>
<key>IOCFPlugInTypes</key>
<dict>
<key>F4545CE5-BF5B-11D6-A4BB-0003933E3E3E</key>
<string>IODragonRiseGenericUSB.kext/Contents/PlugIns/ForceFeedback.plugin</string>
</dict>
<key>idProduct</key>
<integer>6</integer>
<key>idVendor</key>
<integer>121</integer>
<key>HIDDefaultBehavior</key>
<string></string>
<key>bInterfaceClass</key>
<integer>3</integer>
<key>bInterfaceProtocol</key>
<integer>1</integer>
<key>bInterfaceSubClass</key>
<integer>1</integer>
</dict>
</dict>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2013 npepinpe. All rights reserved.</string>
<key>OSBundleLibraries</key>
<dict>
<key>com.apple.iokit.IOHIDFamily</key>
<string>1.7.1</string>
<key>com.apple.iokit.IOUSBFamily</key>
<string>5.1</string>
<key>com.apple.iokit.IOUSBHIDDriver</key>
<string>5.0</string>
<key>com.apple.kpi.iokit</key>
<string>11.4.2</string>
<key>com.apple.kpi.libkern</key>
<string>11.4.2</string>
</dict>
需要注意的是,我尝试将IOProviderClass更改为USBInterface(就像IOUSBHIDDevice那样),但是我的设备完全没有匹配,所以我不确定我在那里做错了什么。
所以我的问题是,如何用我的自定义驱动程序替换我的特定游戏手柄匹配的默认IOUSBHIDDriver?或者,如果我只是想添加一个ForceFeedback插件(但不需要改变任何其他行为),这不是正确的方法吗?
答案 0 :(得分:0)
这是旧罗技力反馈作为其IOKit个性之一的样本:
<key>Logitech Cordless RumblePad</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.iokit.IOUSBHIDDriver</string>
<key>IOCFPlugInTypes</key>
<dict>
<key>F4545CE5-BF5B-11D6-A4BB-0003933E3E3E</key>
<string>LogitechForceFeedback.kext/Contents/PlugIns/WMJoyFrc.plugin</string>
</dict>
<key>IOClass</key>
<string>IOUSBHIDDriver</string>
<key>IOProviderClass</key>
<string>IOUSBInterface</string>
<key>bConfigurationValue</key>
<integer>1</integer>
<key>bInterfaceNumber</key>
<integer>0</integer>
<key>idProduct</key>
<integer>49681</integer>
<key>idVendor</key>
<integer>1133</integer>
</dict>
我认为你只需要关注力反馈包(罗技Kext是什么:只是info.plist和Force Feedback包)。
Mac XBox 360驱动程序有一个力反馈驱动程序。您可以将其作为起点。