ver. 0.9 by inADA
注意:ここで入力する項目はマウスの機種を指定したUSB デバイスドライバとして必要な最小限の項目です。また、Mac OS Xのバージョンによって必要項目が変わることもあります。製品を開発するときには、USBやPCIカードなどターゲット装置に応じて最新情報を入手するようにして下さい。
Fig 3. Info Plist
Xcodeの[Navigate]メニューから[Reveal in Project Navigator]を選択します。画面の左欄の[mDriver > mDriver > Supporting Files]から[mDriver-Info.plist]を選択すると左にmDriver-Info.plistファイルの編集画面が表示されます。ここに以下のように各項目を追加します。なお、この項目の実体はXMLファイルです。
[Key]欄の各項目の上にポインタを置くと項目名の右に⊕⊖ボタンが表示されますので、⊕ボタンをクリックして新しい項目を追加します。また、[Type]欄はポップアップ メニューになっており、[Dictionaly]や[String]、[Number]などを設定します。
[IOKitPersonalities]の右に表示される⊕ボタンをクリックし、生成されたKeyを[mDriverClass]、Typeを[Dictionaly]に設定します。
さらに、「mDriverClass」の右に表示されている⊕ボタンをクリックして、Keyを「CFBundleIdentifier」、Typeを「文字列」に設定します。以後「mDriverClass」辞書に以下のプロパティを追加します。
| CFBundleIdentifier | 文字列 | com.inADAinc.driver.mDriver |
| IOClass | 文字列 | com_inADAinc_driver_mDriverClass |
| IOProviderClass | 文字列 | IOUSBInterface |
| bConfigurationValue | 数値 | 1* |
| bInterfaceNumber | 数値 | 0* |
| bcdDevice | 数値 | 0* |
| idProduct | 数値 | 125* |
| idVendor | 数値 | 1118* |
ここでは、「CFBundleIdentifier」を再度指定します。また、「IOClass」としてプログラム内への入り口となるClass名も指定します。この場合に「CFBundleIdentifier」の「.」は使用できませんので、「_」を代用します。この変更は、この後に記述する「ソースコード編集」を見て頂ければおわかり頂けます。「IOProviderClass」は上位のClassを指定しています。FireWireなど他のターゲットでは装置に合わせて変更して下さい。
* 印の項目はUSB Prober.appというツールでターゲットを調べて入力します。USB Prober.appはXcode 4.2以前は/Developer/Applications/にあります。Xcode 4.3以降はXcodeメニューの[Open Developer Tool > More Developer Tools...]でAppleのサイトから入手できます。各項目の意味はUSBの規格書を参照して下さい。USBの規格書はUSBのサイトからたどると入手できます。
USBの技術資料はこの資料の執筆時点でUSBのサイト内のDevelopertタブのDocumentsにあります。また、ここにはUSBの規格や機器ごとの規格もあります。
ここでは米Microsoft社のMobile Optical Mouseのデータを例としています。USB Prober.appを起動して[Bus Probe]タブからUSBの規格に沿ってブラウズするとそれぞれの数値が得られます。
| Device Vendor ID: | idVendor | 0x045E: 1118 |
| Product ID: | idProduct | 0x007d: 125 |
| Device Version Number: | bcdDevice | 0x0000: 0 |
他のマウスでもidPeoductとidVendor、bcdDeviceを変更するだけで動作するはずです。
注意:このエディタが表示する数値クラスの値は十進数です。USB Proberの表示は十六進数です。エディタで「0x0045E」などと入力すると十進数に変換します。
[OSBundleLibraries]に入力する値はAppleのサイトにある解説Determine Kext Dependenciesを元にkextlibsというTerminalのツールを使って探します。
上記でBuildしたkextドライバをkextlibsの引数にして必要なライブラリを探します。kextドライバの場所は左欄の[mDriver > mDriver > Products]から[mDriver.kext]を副ボタンでクリックし、ポップアップ メニューから[Show in Finder]を選択すると表示されます。この時に-xmlのスイッチを付けるとXML形式で出力されますので、XMLの部分をmDriver-Info.plistに貼り付けます。
$ kextlibs -xml /Users/.../Build/Products/Debug/mDriver.kext
<key>OSBundleLibraries</key>
<dict>
<key>com.apple.iokit.IOHIDFamily</key>
<string>1.7.1</string>
<key>com.apple.iokit.IOUSBFamily</key>
<string>4.5.8</string>
<key>com.apple.kpi.iokit</key>
<string>11.3</string>
<key>com.apple.kpi.libkern</key>
<string>11.3</string>
<key>com.apple.kpi.mach</key>
<string>11.3</string>
</dict>
mDriver-Info.plistに貼り付ける時に、左欄のmDriver-Info.plistを副ボタンでクリックし、ポップアップ メニューから[Open As > Source Code]を選択してペーストします。
[kextlibs]の詳細はTerminalのツール[man]を参照してください。
以下は「Info.plistのエントリ」の例です。この内容はmDriver.pbprojプロジェクト・バンドル内にあるmDrive-Info.plistファイルの内容を書き出したものです。なお、このファイルはXMLの書式になっています。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.
apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>com.inADAinc.driver.${PRODUCT_NAME:rfc1034identifier}
</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>KEXT</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>IOKitPersonalities</key>
<dict>
<key>mDriverClass</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.inADAinc.driver.mDriver</string>
<key>IOClass</key>
<string>com_inADAinc_driver_mDriverClass</string>
<key>IOProviderClass</key>
<string>IOUSBInterface</string>
<key>bConfigurationValue</key>
<integer>1</integer>
<key>bInterfaceNumber</key>
<integer>0</integer>
<key>bcdDevice</key>
<integer>0</integer>
<key>idProduct</key>
<integer>125</integer>
<key>idVendor</key>
<integer>1118</integer>
</dict>
</dict>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2012 inADA. 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>4.5.8</string>
<key>com.apple.kpi.iokit</key>
<string>11.3</string>
<key>com.apple.kpi.libkern</key>
<string>11.3</string>
<key>com.apple.kpi.mach</key>
<string>11.3</string>
</dict>
</dict>
</plist>