MVPen (Pegasus Mobile NoteTaker) の解析 (1)
※注意※ MVPen が故障する可能性があります
MVPen のレシーバのデバイス構造
MVPen のレシーバを PC に接続すると,下記のような構成になります。
つまり,
の2つからなる USB 複合デバイスであることがわかります。
前者の「HID 準拠デバイス」が,レシーバをコントロールする(レシーバに格納されているデータを問い合わせたりする)ためのインタフェースです。後者の「HID 準拠マウス」が,オンラインマウスモードでのインタフェースになります。後者の「HID 準拠デバイス」がおそらくオンラインノートモードでのインタフェースなのではないかと思われますこれは「HID 準拠スタイラスペン」のようです。詳しくは MVPen (Pegasus Mobile NoteTaker) の解析 (3) - daily dayflower を参照してください。。
USB ヒューマンインタフェースデバイス (HID) とは
キーボード入力,マウス入力などマンマシンインタフェースを司る機器につけられる USB クラスです。
USB クラスについては詳しくは Wikipedia の記事を参照してください。HID クラスのうち,キーボード,マウス,ゲームパッドのように既知のもの(規格上すでに決まっているもの)については,おのおの専用のドライバが OS によって組み込まれますが,既知でないものについても generic な HID 用ドライバが読み込まれアクセスすることができます。上図で「HID 準拠デバイス」となっているのは,「既定のものではないけど汎用 HID デバイス*1としてアクセスできるよ」という意味になります。
そう,MVPen が基本的に HID 準拠デバイスだったことは幸いでした。もし独自のデバイスクラスのものであれば各 OS 用にドライバを書く必要がありますが,HID デバイスであるためドライバは各 OS(Windows しかり MacOS X しかり Linux しかり)にもともと用意されています。デバイスの情報を取得するには,このドライバ経由でアクセスすればすむわけです。
実際,MVPen に限らず単純な入出力インタフェースが必要な USB デバイスは HID デバイスとして作られることも多いようです。特別なドライバを開発する必要がないため,開発工数が少なくなりますからね。
USB パケットを解析するには
USB に流れるパケットはブロードキャスト,だそうです。ですからそれを sniff したりブリッジとして挟んだりすることによってパケットを解析する(ハードウェア)USB Protocol Analyzer が存在します。
Windows の場合 USB の上位ドライバにフィルタドライバを挟み込むことで,純ソフトウェア的に sniff することができます。オープンソースウェアとして USB Sniffer for Windows(スクリーンショット例として USB sniffer for Windows 98, 98SE, 2000 and Windows XP とか)というものもありますし,商業製品もいくつかあるようです。
USB Sniffer for Windows を使ってもよかったのですが,今回は
という製品*2を使いました。USB Sniffer for Windows に比べてユーザフレンドリーなところ*3と,インストール後再起動の必要がないというお手軽なところが決め手でした*4。インストールして 15 日以内なら無償で試用できます。
実際の解析手順は,レシーバを PC に接続して USB Monitor を起動,あとは NoteTaker ソフトウェアを立ち上げてメモの取り込みなどをすれば USB Monitor 側にパケットの中身が表示されます。
HID の USB パケットをやりとりするには
Delphi 用に HID デバイスをあやつるための HIDKomponent というコンポーネントがあります。この配布の中にサンプルとして SimpleHIDWrite というソフトウェアが含まれており, HID パケットのやりとりを行うことができます。残念ながらビルド済みバイナリは配布物に含まれていませんが,http://www.lvr.com/hidpage.htm の Basics 節にある「SimpleHIDWrite」というリンクからバイナリをダウンロードすることができます。
アクティブな sniff はできない(と思う)のですが,接続してボタンを押したりしたときなどのパッシブな sniff はできます。また,後日紹介するパケット解析結果がわかっていれば,このソフトウェアだけで一通りためす(制御コードを送ったり,レポートを受信したり)ことができます。
参考文献
*1:「HID デバイス」と書くと馬から落馬なのですが,見やすくわかりやすいのであえてそう表現しています。
*2:日本語化されたものもあるのですが,今回は英語版を使いました。
*3:といいつつ知識がないとなかなかわかりにくいのですが。
*4:USB Sniffer for Windows も再起動は必要ありませんが,フィルタドライバをメニューからインストールする必要があります。HDD USB Monitor はバックグラウンドで自動的にそういうことをやってくれるのかな。