2007年7月9日月曜日

Info.plist

USB装置用にkextドライバを書くときに必ず問題となるのがInfo.plistに書き込む内容です。他のkextドライバのInfo.plistをコピーして場当たり的に修正しただけで、プログラムを書ける場合もあります。しかし、後で問題となる確率も高くなります。

Appleの資料
Appleの資料ではInfo.plistを書くにはUSBの規格書を読むようにと書かれていて、usb.orgのURLが書かれているだけです。しかし、usb2.0の資料は650ページもある膨大なもので、英語が外国語の人間には資料がないのと代わりありません(苦笑)

しかし、そこはPCの良いところで「比較的」簡単に検索ができます。具体的にはPreview.appのSearch欄に"Configuration Descriptor"と入れると、読むページをかなり限定できます。

USB Prober
この手の規格書には具体的な例が少なく分かりにくい事が多いのですが、USBの場合にはマウスやキーボードなどの具体例が目の前にゴロゴロしています。標準の開発パッケージに入っているUSBProber(/Developer/Applications/Utilities/USBProber.app)でUSB装置のDescriptorを見ながら読むことができます。

例えばAppleのマウスでは以下のように表示されます。



IORegistryExplorer
他にもIORegistryExplorer(/Developer/Applications/Utilities/IORegistryExplorer.app)があります。ServicePlanesでIOUSBを選択して、その右の欄にあるRootから順に追いかける事ができます。



USB規格書
USB規格書はなんと言っても基本ですが、いきなり電子回路とレジスタ(メモリ)そしてソフトウェアをつなぐ文章は初めてのひとには辛いと思います。電子回路の知識のある人にはUSBの予備知識として以下のNECのサイトをお勧めします。

http://www.necel.com/usb/ja/about_usb/index.html

さて、Previw.appでUSB規格書を検索してInfo.plistに関連する内容を抜き書きしてみました。

USB規格書に9.6 Standard USB Descriptor Definitionsという項目があり、この辺からinfo.plistに出てくる文字列が出てきます。

9.6.1 Deviceからdevicedescriptorに関する解説が始まります。Table 9-8. Standard DeviceDescriptorにそれらしき文字列が出てきます。ただし、Table 9-8の最初の4バイトはAppleのUSB Prober.appやIORegistryExplorer.appでは表示されません。また、他にも表示されなかったり、独自表記している部分があり注意が必要です。

9.6.3 ConfigurationからはUSB Prober.appと同じ"configuration descriptor"が、また9.6.5 Interfaceからは"interface descriptor"の詳細が記述されています。

USB Proberでは▼Configuration Descriptorの▼Length (and contents): の下に生のデータが16進数で表示されおり、その解釈が続きますが、その内容とUSB規格書の9.6.5 Interface以降の表とビット単位で対応させることができます。

なお、Interface Classなどソフトウェアに近い規格の定義に関しては別に定義されています。

USB.org Approved Device Class Document Download


例えばマウスなどのHID(Human Interface Devices)装置ではHID1_11.pdfがあります。HID Descriptorの詳細はこの資料の6.2.1 HID Descriptorに解説されています。リストの書き方がUSB規格書とは少々異なりますが、書いていることは同じです。USB ProberでAppleのマウスを見ると▼HID Descripterの下に記述されているCountry CodeはHID1_11.pdfではbCountryCodeと書かれていて6.2.1 HID Descriptorの次のページに国名のリストがあります。

さらに、USB ProberでAppleのマウスを見ると以下のような階層になっています。

▼Configuration Descriptor
  ▼Interface #0
    ▼HID Descripter
      ▼Descriptor 1
        ▼Length (and contents)
        ▼Parsed Report Descriptor

▼Length (and contents)が前述と同様に生のデータが16進数で表示されています。また、その解釈が▼Parsed Report Descriptorに記述されています。この内容とHID1_11.pdfの6.2.2 Report Descriptorの最後に掲載されているマウスのデータを比較すると対応関係がわかると思います。

0 件のコメント: