3

我已经有一段时间拥有这个旧游戏手柄了,GameStop 高级控制器(它实际上是一家名为 DragonRise inc. 的公司大规模生产的通用设备之一),它带有隆隆声/触觉功能。不幸的是,它不适用于 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 插件(但不需要更改任何其他行为),这不是正确的方法吗?

4

1 回答 1

0

这是旧的 Logitech Force Feedback 作为其 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>

我认为您只需要关注 Force Feedback 捆绑包(这就是 Logitech Kext:只有 info.plist 和 Force Feedback 捆绑包)。

Mac XBox 360 驱动程序有一个力反馈驱动程序。您可以以此为起点。

于 2013-09-23T18:21:51.420 回答