2010年7月7日水曜日

V-USBによるUSB2.0インタラプト転送デバイスの作成(5)

WDMでV-USBのドライバを作って、USBデバイスを動かそうとおもっていたのですが、
なんだか簡単に動作するものだけは出来ました。

ひょうしぬけしています・・・

簡単なことです。libusb-win32という汎用USBドライバを使ったのです。フリーで公開されています。
とりあえずサンプルを動かすことが大切や、と考えていろいろやってたら、コントロール転送デバイスができちゃいました。

あくまでも、サンプルが動いただけですっ!!

後日、写真や動画を撮影して公開しようと思っています。

今回作ったデバイスはDOS窓からコンソールアプリを実行すると、USBデバイスに接続したLEDが点灯したり消灯したりするものです。超基本です。

MCUとのシリアル通信で同じことをやったことがありますが、難度的にはこちらのほうが10倍ぐらい上でした。

手順概要は以下の通り。概要です。
【STEP1】
デジットが発売しているATmega168汎用基板を改造した。ブレッドボード上に回路を作成した。
【STEP2】
V-USBのソフト一式に付属しているサンプルの「custom-class」をAVR Studio 4とAVR-GCCを使ってビルドしてATmega168に書き込んだ。
【STEP3】
libusb-win32をダウンロードして、INFファイルを作成し、libusb0.dllとlibusb0.sysをPCにインストールした。
【STEP3】
V-USBの「custom-class」サンプルにあるコンソールアプリコードをCygwin上でビルドしてUSBデバイスにベンダーリクエストを投げるアプリを作成した。

で、自作USBデバイスはWindos XPにカスタムクラスデバイスと認識され、
アプリの操作でLEDのON・OFFとLEDのステータス取得ができるようになりました。
Cygwinコンソールで打つコマンドはこんな感じ

$> ./ledctrl on
$> ./ledctrl off
$> ./ledctrl status
LED is off

あっけなく終わってしまったので、Visual Studio 2010 Expressエディションのコンパイラを使って、Win32ネイティブなコンソールアプリを作成しました。「custom-class」サンプルのコマンドラインインターフェースのソースコードをWindowsに移植したことになるのかな?w

こちらも上のコマンド同様にUSBデバイスにリクエストを投げることができました。

バスアナライザを使ってパケット解析を行いました。正常に動作しているようです。
このサンプルはコントロール転送だけ行い、そこにLEDのON・OFF情報を乗せてデバイスを制御しています。

ということで、次は、ここまでの成果をまとめて、ネットで展開したいと思います。

USBデバイスとしては「Windows GUIで操作できるUSB扇風機」を題材に書いていこうかな?


その次は、コンフィグレーションとインターフェースとエンドポイントを使ってインタラプトIN,OUT転送を行うようにしたいと思います。


その次は、汎用デバイスドライバを使わずに、WDMを使って自作のデバイスドライバを開発してディープなところに潜入してみたいと思います。

これが肝なのよ!飯の種は自分でつくるのよっ!!!

Keep Starting!!!

0 件のコメント: