手順非開示のUSBデバイスのドライバを自作する…準備.

どうやってアクセスすればよいのか不明な,Windows用しかドライバが無いUSBデバイスが,ある.これをWindows以外で使いたい.

ぶっちゃけ,リバースエンジニアリングですね.バイナリを逆汗するわけではないので,ドライバやファームの使用許諾で云々言われる筋合いは無い,と.


隠す必要も無いので,何を使いたかったのか,言ってしまおう.タカラインデックスラボが取り扱っている D-Touch ペン.
写真集に使われたりして,その筋のマニアには知られているという噂もあるけれど,その目的ではないので念のため.

Double Moon‐ダブルムーン―堀井美月写真集

Double Moon‐ダブルムーン―堀井美月写真集

このペン,中身は台湾のSonix社で,使われている石も判明している.筐体をばらさずとも,USBのVID/PIDを見れば一目瞭然.
実はSonixのエンジニアにつてが無いでもなく,公式/非公式なルートを経由して情報を得られなくもなかったりするのだけれど,NDAとか細かい話になるのも面倒なので,どれくらい面倒なデバイスなのかを事前に知っておきたかった.


とりあえず,Darwin版のlibusbを使ってコードを読めるようにする,というのがマイルストン.


判ったこと.

  • WinXP + SnoopyPro サイコー.
  • OSXは,USB prober を使うことになるが,APIレベルのログどまりで,USBスニファにはならない.
  • Darwin版libusbは,なかなか安定してきたように思える.(2003年以来使っていなかった)


マイベストソリューションは,VMware 上のWinXPで SnoopyProを実行し,得られたパケットダンプを元に,Darwin上でプログラミングする.途中で詰まったら,もう一度VMwareにデバイスをアタッチしSnoopyPro実行.Intel Mac環境万歳.


肝心の解析結果.Vendor-specificなデバイスで,コントロールだけでパケットをやり取りしている.パケットの種類は,ステータスを示す1byte,デバイスから送られてくる,IDを含むデータ4byts,デバイスへ送る,コンフィギュレーション用途と思しき6byts.がのだけれど,
4bytesに関しては,先頭バイトが…のとき,下位20bitsがデータだが…その上の4bitsが…でなければエラーで…などおぼろげに理解できるところもある.しかし,完全には理解できていない.
6バイトでパックされているデータの中身は,さらに判らない.内蔵されている赤外線LEDのon/offの方法がよく判らない.点灯する契機となる6バイトの並びは発見したのだけれど,その各バイト(もしくはビット)の意味は推測不可能.少なくとも私には.
1bytesは,0のとき,ACK?,1のとき,ERR?,2のとき取得IDあり? …たぶん.


そんなわけで,一応,ID値は取って来れるようになったのだけれど…これ以上やる必要があるなら,SonixとNDAなり結んだ方が早そう.