3

この古いゲームパッド、GameStop Advanced Controller (実際には、DragonRise inc. と呼ばれる会社から大量生産された汎用デバイスの 1 つです) を使用しており、振動/触覚機能が付属しています。残念ながら、OSX では動作しません。これは、OSX および USB HID デバイス全般でのドライバー開発について詳しく学ぶのに最適なプロジェクトだと思いました。現在、ゲームパッド自体は、ハプティクス/フォース フィードバックを除いて、標準の HID デバイスとして正常に動作します。私の目標は、ゲームパッド用の単純な ForceFeedback プラグインを作成することです。

私がこれまで行ってきたことは、IOUSBHIDDevice から継承し、基本的にスーパー クラスが単調な作業のほとんどを実行できるようにする、非常に単純な IOKit ドライバーを作成することです。私の理由は、機能を追加したいだけです。そのようなことはうまくいきました。私の問題は、ドライバーがレジストリ内のデバイスへの新しいインターフェイスとして追加されていることです。一致していますが、使用されていません。理想的には、汎用 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 パーソナリティの 1 つとして持っているもののサンプルです。

<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 に答える