WindowsCE上のUSBデバイスドライバについてつらつらと書いてみたり。 適用と結果はおまかせします。

232usb - USB Serial Driver

04-5-25版を公開しました。上ページに置いてあります。

3001k - AirH"AH-K3001V ステーション

京ぽん用のステーションです。ファイルやブックマーク等の転送が行えます。
ホームページの指定にも対応しました。
04-6-22版(ソース込)。 旧版
要232usb(04-5-25版以降)。 Sig3はデフォルトではFOMAドライバが使われるため使用できません。

3001key - AirH"AH-K3001V キーボード

注) あなたの京ぽんに回復不可能な障害を与える可能性があります。
04-9-22版。ファーム1.4に対応。

FeliCaで遊ぶ

Suicaの残高を読むという デモプログラム(ソースなしよ)。 要232usb(04-5-25版以降)。

USBカメラで遊ぶ

Che-ez!SPYZ(STB0680B)ドライバ

NPD-20JWLのバグ

NPD-20JWL、USBホスト付だし画面に余分なキーないし無線LAN付だし、 なーんていう遊びをするのにもってこい。 これが2万円で売ってるんだから買いでしょう。
が、232usbの動作を見ているとどうもおかしい。 15バイトのバルク出力をすると、8バイト目以降が化ける。 ohci.dllのコードベースはCE4.1で、 このCPhysMemまわりのバグかと思って追ってみたらMediaQ MQ1132のバグっぽい。 NPDにはフラッシュROMの書き換えユーティリティーがある (日立にSDKを申し込むとついてきます) ので、 nk.binを改造して調べてみると、 どうやら送出パケット長が8以上でTDのBufferEndがxxxEになっていると、 最後の7バイトを直前のキャッシュ値(16バイト前の内容)にしてしまう模様。
というわけでそれなりにバグを回避するnk.bin[Ver1111.d]へのパッチ新版。
D4A310 12 08 54 0F 01 00 00 00 E0 D8 90 0C A0 2A 00 20
D4A320 31 50 10 ...
FBF7E0 F9 FF EB 00 00 50 E3 8C FF FF 0A 0C 00 98 E5 00
FBF7F0 10 96 E5 80 00 10 E3 24 20 98 05 54 00 98 E5 01
FBF800 30 02 02 34 10 91 E5 03 00 80 00 00 10 81 E0 58
FBF810 10 88 E5 09 00 00 1A 28 10 98 E5 54 00 88 E5 ...
FBFAD0 F9 FF EB 58 00 98 E5 2C 10 98 E5 00 00 51 E1 0B
FBFAE0 00 00 0A 00 10 96 E5 06 00 A0 E1 20 20 91 E5 0F
FBFAF0 E0 A0 E1 12 FF 2F E1 54 10 88 E2 06 00 91 E8 01
FBFB00 10 C1 E3 01 20 C2 E3 ...
通常バッファ開始位置はxxx0ですが、 総サイズが奇数の場合にバッファ開始位置をxxx1にしています。 それでもMaxPacketSizeが奇数での複数パケット送出、および MaxPacketSizeが4の倍数でないときに総サイズが奇数の複数パケット送出を行うとバグりますが通常のUSBデバイスではまず発生しないでしょう。

なお232usb(04-5-25版以降)にはバグ回避機能があるのでパッチは不要です。

USBドライバの開発

PlatformBuilder4.1Jで遊ぶの後半部分を参照。 以下微妙な項目のメモ。

EzUSBで行こう

汎用入出力をつなぐならEzUSBでしょう。 CEにつなぐ前にいまさらPC上で遊んだのでメモ。