USB プロジェクト - 懲りずにWinUSBに手を出す [USB]
Windows Vistaには、WinUSBという仕掛けがあるらしい。 Windows XPでも使えるらしいので、手を出してみるか。
WinUSBのサンプル・プロジェクトを取り寄せる
奇特な方がいて、サンプル・プロジェクトを作ってくれています。 このサイトにVisual BASICとVisual C#で 記述したサンプルが置いてあります。 最初は、Visual BASICで試してみます。
コンパイルは、できました
Visual C++ のサンプルと違い、このサンプルはExpress Edition でもコンパイルができました。 おぉ、なかなか有望ではないか。 ここで、初めて"readme.doc"という取扱説明書を読みました。
まず、infディレクトリにある記述を使用するUSBデバイスに合わせて変更する必要があります。 「\USB\VID_何たら\PID_かんたら」 この記述は、以前UUSBDをかじったときに悩んだ形式ですね。 HIDデバイスの場合には、「\HID\VID_何たら\PID_かんたら」になってしまい、 結局HIDデバイスをUUSBDから操作することは出来なかったのでした。 今回も、同じ目に遭いそうな予感。
INFファイルのGUIDとアプリケーションのGUIDを合わせるとのこと。 これは、サンプルINFファイルのままを使うことにしました。
あとは、デバイス・ドライバのインストールで、WDKのファイルが必要だそうです。 何だ、結局、WDKは必要なのね。
HIDは、認識してくれない
INFファイルを書き換えて、デバイスもインストールして、 「さあ、デバイスを認識しろ」と"Find My Device"ボタンをクリックしましたが、音沙汰無し。 INFファイルをUSBからHIDに書き換えましたが、これも効果なし。 しかたがないので、インターフェース・デスクリプタのクラス・コードを0xFF(ベンダ独自インターフェース)に変更して、マイコンのプログラムを書き換えました。 すると、今度は認識は出来ました。
でも、通信プロトコルは全く合っていないので、通信そのものは成り立ちませんでした。 このサンプル・プログラムでは、通信プロトコルの低レベルな部分まで記述されているので、もしかしたら、デバイス・ドライバ並みのアプリケーションが必要になるのかもしれません。 それでは、本末転倒でしょう。
思わぬ収穫?
WinUSBサンプル・プログラムを見ていて、"SetupDiGetClassDevs"などのどこかで見たような関数の宣言が並んでいることに気がつきました。 前回、Visual C++ではどうしても解決できなかった、あのプログラムで使用されていた関数です。 どうやら、Windowsでプログラムを書くときには、Visual BASICの方が適しているようです。 さすがは、ビル。 何処まで行ってもBASICの呪縛からは逃れられないのですね。
これらの関数宣言を使えば、Visual C++のサンプルプログラムをVisual BASICで書き直して使うことが出来るかも知れません。 そうすると、HIDデバイスのまま、インターフェースが出来るかな?
おまけ
http://www.lvr.com のページを探っていて、「Visual BASIC 2005 Express Edition」で作成したHIDデバイスを扱うプログラムがあることに気がつきました。 これを使ってみるのもいいかな。
とにかく、色々と目移りしそうなサンプル・プログラムが沢山あることに気がつきました。 どれもこれもMicro$oftのサイトでは無いというところが、いかにもMicro$oftらしいではありませんか。
参考文献
USBハード&ソフト開発のすべて―USBコントローラの使い方からWindows/Linuxドライバの作成まで (TECHI―Bus Interface)
- 作者: インターフェース編集部
- 出版社/メーカー: CQ出版
- 発売日: 2006/07
- メディア: 単行本
USBターゲット機器開発のすべて―各種USBコントローラの使い方と基本ソフトウェアの作成法 (TECHI―Bus Interface)
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2005/08
- メディア: 単行本
件のサイトは
http://www.amazon.co.jp/USB-2-0%E3%81%A8USB-Go%E3%82%92%E5%90%AB%E3%82%80%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0USB%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E9%96%8B%E7%99%BA%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6-USB%E3%82%B3%E3%83%B3%E3%83%97%E3%83%AA%E3%83%BC%E3%83%88-%E7%AC%AC3%E7%89%88/dp/4434084607/ref=sr_1_1?ie=UTF8&s=books&qid=1204934949&sr=1-1
の作者のサイトですね。
と言う訳で、昨日あまぞんに注文してしまいました。
by hamayan (2008-03-08 09:11)
何だ、有名人だったのですね。
色々と調べた結果、Micro$oft Window$ のプログラムは、BASICが一番ふさわしいのではないかと思っています。
本日、二番目の実験もすでに完了。今からレポートを書きます。
by noritan (2008-03-08 10:59)
hamayanさんは、日本語版を注文されたのですね。
だったら、私は原著を買おうかな?
URLは、どこだぁ?
by noritan (2008-03-08 11:05)
> hamayanさんは、日本語版を注文されたのですね。
そうです。私に英語を理解しろとは、無茶な話です。
もっとも日本語訳にケチ付けられているので、いやはやなんとも。
by hamayan (2008-03-08 11:11)
> 前回、Visual C++ではどうしても解決できなかった
「USBプロジェクト - サンプル・ソフトへの長すぎた道のり (挫折編) [USB]」
の方にもコメント書かせてもらいましたがCLRはネイティブなC++では有りません。
VB.NETとC#とC++/CLRはほぼ同じ階層ですので、CLRでネイティブAPIを呼び出す場合は、直接呼出しではなくDllImport等を使う必要があります。
ネイティブC++の流儀でマネージC++を使っても動くわけはありませんし、そんなことをしながら「Windowsでプログラムを書くときには、Visual BASICの方が適している」と繰り返し宣言するのはちょっとどうかと思います。
.NET言語は基本的にVB.NETとC#が2大勢力(?)ですが、VB.NETがVBユーザを取り込むための言語であるのに対し、C#はC++をベースに.NET用に開発された言語です。
仮にWindowsでは今後.NETが主流になるとしても、VB.NETが最適などとは口が裂けてもいえない状況かと。
MSが素晴らしいなどというつもりは有りませんが、調査不足によってユーザ取り込み政策のど真ん中を流れされながら「所詮MSはBASICから離れられないのだ」等とのたまうのはどーかと思います。
by とおりすがり (2011-08-24 08:27)