2010年02月26日

WinUSB を使おう10~番外SetupAPI編~

なんでいきなり番外編かというと
ここでも実は難関が待ち構えているのです。

バイブル「WinUsb_howto.docx」の「Obtain a Handle to the Device and Initialize WinUSB」にもあるんですが

「infファイルで設定したDeviceinterfaceGUIDをつかってね」
ってな感じです。

いったいどうやるんだよって話で「SetupAPI」が出てきます。
Deviceは接続した時点でPnP Manegerが認識しています。
PnP ManegerからGUIDでお目当てのDevice情報を引っ張ってくる役目なのがこの「SetupAPI」ぽいですね。
そんなことが書いてあるのがこちら

ちなみDriverなしでもUSBの状態は「USBView.exe」で見れたりします。「WINDDK\BuildNumber\Debuggers」
使い方はこちらにかいてあるので参照ください。

手順的にはこうなります
(1)Setupapi.libをリンク
「WINDDK\BuildNumber\lib\OS別
(2)Setupapi.hをインクルード
「WINDDK\BuildNumber\inc\api」
(BuildNumberはDDKのVersionのことです)
この記事記載時は7600.16385.0です。


これで「DevicePath」が得られるわけです。

まっこれはバイブルのSampleコードかあるいはDDKのSampleコードを参考に作りましょう。

必ず必要ならいワンコールでOKなAPIを作ってほしいですよね。。。。(ぶつぶつ)なんだか面倒ですよこれ。
WDM時代からの負の遺産なのかな。

この「DevicePath」を「CreateFile」に渡してやっと「Device Object Handle」ができます!!!

ここの話はWindows Device Driver 共通の話ですね。




ayuthky_m at 14:48|PermalinkComments(0)TrackBack(0)driver | WinUSB

WinUSB を使おう9~API編(2)~

これでやっとWinUSBのAPIが使えるようになる準備完了

APIのリファレンスは
WinUSB User-Mode Client Support Routines
をきちんと読んで使いましょう。

ここではカテゴリ別に概要だけ

[初期化関数]
WinUsb_Initialize

[終了関数]
WinUsb_Free

[初期化後 WinUSBと連携してるDevice情報を取得する関数]
WinUsb_QueryDeviceInformation(Speedを取得)
WinUsb_QueryInterfaceSettings(interface descriptorsを取得)
WinUsb_QueryPipe(Endpointの情報を取得)

[bulk / interrupt pipe 読み書き関数]
WinUsb_ReadPipe
WinUsb_WritePipe

[control endpoint 制御関数]
WinUsb_ControlTransfer

[bulk / interrupt pipe 設定参照関数]
WinUsb_AbortPipe
WinUsb_FlushPipe
WinUsb_ResetPipe
WinUsb_GetPipePolicy
WinUsb_SetPipePolicy

[電源系の 設定参照関数]
WinUsb_SetPowerPolicy
WinUsb_GetPowerPolicy

<Deviceの戻りを非同期で待つ関数>
[Overlapped関数]
WinUsb_GetOverlappedResult

<Deviceに複数Interface だけ使うんじゃないかと思われる関数>
[Interface Descriptorの要素の設定参照関数]
WinUsb_SetCurrentAlternateSetting
WinUsb_GetCurrentAlternateSetting

[Deviceに複数Interface ある場合に明示的に参照する関数]
WinUsb_GetAssociatedInterface
[DeviceのDescriptorを明示的に参照する関数]
WinUsb_GetDescriptor

ここの記載はリファレンスをよんで自分的にカテゴリわけしたので
保障はしませんのでごめんなさい。



ayuthky_m at 14:48|PermalinkComments(0)TrackBack(0)driver | WinUSB

WinUSB を使おう8~API編(1)~

やっとWinUSBのインストールから開放された!
これからUSER.DLLを作成する準備です。

構成編で説明したように

実はまだWinUSB Driverは使えないのです。

WinUsb.lib(.dll)というUSER-MODE Driverを取り入れないといけません。

基本的にはバイブル「WinUsb_howto.docx」の「How to Use the WinUSB API」のパクリです。

では必要な手順
(1)WinUsb.libをリンク
XPは「WINDDK/BuildNumber/lib/wxp/i386」
Vista以降「WINDDK/BuildNumberl/ib/wlh」

(2)WinUsb.hをインクルード
「WINDDK/BuildNumber/inc/ddk」

(3)Usb100.hをインクルード
「WINDDK/BuildNumber/inc/ddk」
(BuildNumberはDDKのVersionのことです)
この記事記載時は7600.16385.0です。

とりあえずこれをおさえておけばWinUSBのAPIが使えるようになるはずです。


ayuthky_m at 14:42|PermalinkComments(0)TrackBack(0)WinUSB | driver