第 8 章 特定のチップ セットの拡張サポート
9.4 WinDriver でコントロール転送を行う
iii. 入力パイプ (データをデバイスからホストに転送) の場合、[Listen to Pipe] を選択します。
HID 以外のデバイスでこの操作を正しく行うには、まずデバイスがデータをホストに送る かどうかを確認する必要があります。データが送信されない場合、しばらく listening をし たあとに「Transfer Failed」と表示されます。
iv. 読み込みを中止する場合は、[Stop Listen to Pipe] をクリックします。
図 5.14: パイプの確認
v. 出力パイプ (データをホストからデバイスに転送) の場合、[Write to Pipe] を選択します。
新しいダイアログ ボックス (図 5.9 を参照) が表示され、書き込みデータを入力します。
DriverWizard はこの操作の結果を記録します。
図 5.15: パイプへの書き込み
vi. 選択したパイプで [Reset Pipe] をクリックして、入力パイプと出力パイプをリセットできま す。
6. 雛型となるドライバコードを生成します。
① [Project] メニューから [Generate Code] を選択、または [Generate Code] ツールバー アイコン を選択してコードを生成します。
② [Select Code Generation Options] ダイアログボックスが表示されます。生成されるコードの言
語と開発環境を選択し、[Next] を選択してコードを生成します。
図 5.16: コード生成のオプション
③ PCI カードの場合、[Next] を選択して、Plug-and-Play イベントおよびパワーマネージメント イ
ベントを処理するか選択し、また、 KernelPlugIn コードを生成するか選択します。
図 5.17: ドライバ オプションの選択
注意: Kernel PlugIn を使用する場合、Kernel PlugIn コードを生成する前に適切な WDK
(Windows Driver Kit) をインストールする必要があります。
④ プロジェクトを保存します。[OK] を押して生成したドライバの開発環境を開きます。
⑤ DriverWizard を終了します。
7. 生成されたコードをコンパイルし、実行します。
○ このコードをデバイスドライバの雛形として使用します。ドライバの特有の機能を実行する場 合には、必要に応じて修正します。
○ DriverWizard が生成したソース コードは 32 ビット コンパイラでコンパイル可能で、コードの修
正をせずに対応するすべてのプラットフォームで動作します。
5.2.1 WinDriver API 呼び出しのログ
DriverWizard には、API 呼び出しの入力および出力パラメータを含む、すべての WinDriver API 呼び出し のログを採取するオプションがあります。[Tools] メニューの [Log API calls] オプションを選択するか、
DriverWizard のツールバーの [Log API calls] アイコンをクリックしてこのオプションを選択します。
5.2.2 DriverWizard のログ
新しいプロジェクトを開く際に、[Device Resources] ダイアログと一緒に表示される空の ウィンドウに DriverWizard のログが記録されます。ログは、診断中に行ったすべての入出力を記録するため、あとからデ バイスのパフォーマンスを解析できます。あとで参照できるようにログを保存できます。プロジェクトを保存す ると、このログも保存されます。ログはプロジェクトごとに作成されます。
5.2.3 自動コード生成
デバイスの診断が終了し、デバイスが仕様どおりに動作することを確認したら、ドライバのコードを生成しま す。
5.2.3.1 コードを生成する
DriverWizard の [Generate Code] ツールバー アイコンまたは [Project] メニューから [Generate Code] のいず れかを選択してコードを生成します。DriverWizard はドライバのソース コードを生成し、プロジェクト ファイル (xxx.wdp、xxx はプロジェクト名) と同じディレクトリに作成します。DriverWizard が生成するディレクトリに [Generate Code] ダイアログ ボックスで選択した開発環境とオペレーティング システム用にファイルを保存し ます。
5.2.3.2 PCI / PCMCIA / ISA 用の C コードを生成する
DriverWizard により作成された API 用の型の定義および関数の宣言が含まれた xxxlib.h ファイル、および
生成されたデバイスを特定した API が適応された xxx_lib.c ソース ファイルがソース コード ディレクトリ に新規に作成されます。
さらに、main() 関数を含む xxx_diag.c ソースファイルも作成されます。この関数はデバイスと通信す
るために DriverWizard で生成された API を利用するサンプル診断アプリケーションを実行します。
DriverWizard が生成するコードには、次のものが含まれます (“xxx” は DriverWizard のプロジェクト名を表 します)。
z カードのリソースにアクセスするためのライブラリ関数 (メモリ範囲、I/O 範囲、レジスタ、割り込み)。
xxx_lib.c - WinDriver Card (WDC) API を利用して、xxx_lib.h の中にあるハードウェア特
有の API の実行します。
xxx_lib.h - xxx_lib.c ソースファイルで実装される API 用の型の定義および関数の宣言を 含んでいます。DriverWizard によって生成される API を使用するために、このファイルをソース ファイルに含める必要があります。
z xxx_lib.h で宣言される DriverWizard で生成された API がデバイスと通信するため使用される 診断プログラム
xxx_diag.c - 生成された診断コンソールアプリケーションのソースコード。この診断プログラム をデバイスドライバの雛形として使用してください。
z 作成されたすべてのファイルのリストは xxx_files.txt に作成されます。
コードの生成が終了したら選択したコンパイラを使ってコンパイルしてください。
main() 関数を変更してドライバに必要な機能を追加できます。
5.2.3.3 USB 用の C コードを生成する
ソースコードディレクトリに xxx_diag.c ソースファイルが新規に作成されます (xxx は DriverWizard プロ ジェクトで選択した名前です)。このファイルは、USB デバイスの場所を見つけて通信を行う WinDriver の
USB API の使用方法を示す USB アプリケーション診断を実行します。この診断には、Plug-and-Play イベン
ト (デバイスの挿入や取り外しなど) の検出、パイプの読み書き転送の実行、パイプのリセット、デバイスの動 的な代替設定の変更が含まれています。
生成されたアプリケーションは複数の同一 USB デバイスの処理をサポートします。
5.2.3.4 Visual Basic または Delphi コードの作成
DriverWizard が生成する Visual Basic および Delphi コードは、セクション 5.2.3 で説明した C コードに似た 機能を提供します。
生成される Delphi コードは (C コードのように) コンソールアプリケーションを実装し、Visual Basic コードは GUI アプリケーションを実装します。
5.2.3.5 C# または Visual Basic コードの作成
DriverWizard が生成する C# および Visual Basic .NET コードは、セクション 5.3.5.2 で説明した C コードに 似た機能を、GUI .NET プログラムから提供します。
5.2.4 生成されたコードをコンパイルする
5.2.4.1 Windows と Windows CE のコンパイル
上記で説明したとおり、Windows では、サポートされている IDE (統合開発環境) のプロジェクト、ワークス ペース/ソリューション ファイルを生成します。サポートされている IDE は、MSDEV / Visual C++ 5 / 6 /、
MSDEV .NET 2003 / 2005 / 2008、Borland C++ Builder、Visual Basic 6.0、Borland Delphi、MS eMbedded Visual C++、MS Platform Builder です。選択した IDE がウィザードから自動的に起動し、すぐにコードを コンパイルおよび実行できます。
また、他の IDE で生成されたコードを、生成されたコード言語でビルドすることもできます。選択した IDE 用 の新しいプロジェクトファイルを作成し、生成されたソースファイルをプロジェクトに追加して、コードをコンパ イルおよび実行します。
注意:
z Windows 2000 / XP / Server 2003 / Server 2008 / Vista / 7 では、生成された IDE ファイルは、
x86 ディレクトリ (32 ビット プロジェクトの場合) または amd64 ディレクトリ (64 ビット プロジェクトの場合) に保存されます。
z Windows CE では、生成された Windows Mobile のコードは、Windows Mobile 5.0 / 6.0 ARMV4I SDK をターゲットとします。
5.2.4.2 Linux の場合
DriverWizard が作成した makfile を使用して、任意のコンパイラ (GCC を推奨) で生成されたコードをビルド します。
5.2.5 Bus Analyzer の統合 - Ellisys Visual USB
DriverWizard は、Windows XP 以降 (32 ビットのみ) で Ellisys Explorer 200 USB Analyzer をネイティブにサ ポートしています。これにより、次のことが実現可能です。
z DriverWizard から直接 USB トラフィックの収集を開始
z 離散コントロール転送の収集
USB トラフィックの収集:
1. [Tools] - [Start USB Analyzer Capture] を選択して、USB データの収集を開始します。
2. データ収集を終了するには、[Tools] - [Stop USB Analyzer Capture] を選択します。DriverWizard により 収集結果が保存された場所を示すダイアログ ボックスが表示されます。[Yes] をクリックして、収集した データで Ellisys Visual Analyzer を実行します。
離散コントロール転送を収集するには、コントロール転送のダイアログボックスで [Trace USB transaction in
Ellisys Visual USB] チェックボックスをオンにします。
図 5.18: Ellisys Visual USB の統合
第 6 章
ドライバの作成
この章では、WinDriver を使用した開発サイクルを紹介します。
注意: デバイスが WinDriver が拡張サポートする次のチップセット (PLX 6466、9030、9050、9052、9054、 9056、9080 および 9656、Altera pci_dev_kit、Xilinx VirtexII および Virtex 5、AMCC S5933、Cypress EZ-USB ファミリ、Microchip PIC18F4550、Philips PDIUSBD12、Texas Instruments TUSB3410、
TUSB3210、TUSB2136、TUSB5052、Agere USS2828、Silicon Laboratories C8051F320) を使用している場 合、まず次の概要を参照してください。次に第 8 章をお読みください。
6.1 WinDriver でデバイス ドライバを開発するには
z DriverWizard を使ってカードの診断を行います。カードがサポートする IO、メモリ範囲、レジスタ
および USB デバイスのパイプを読み書き、PCI 設定レジスタ情報の表示、カードのレジスタのおよ
びレジスタの読み書きの定義、割り込みを確認します。デバイスが期待通りの動作をするかどうか を確認します。
z DriverWizard を使ってデバイスドライバの雛形となるコードを C、C#、Visual Basic .NET、Delphi または Visual Basic で作成します。DriverWizard についての詳細は、第 5 章の「DriverWizard」 を参照してください。
z サポートしているチップセット (PLX 6466、9030、9050、9052、9054、9056、9080 および 9656、
Altera pci_dev_kit、Xilinx VirtexII および Virtex 5、AMCC S5933、Cypress EZ-USB ファミリ、
Microchip PIC18F4550、Philips PDIUSBD12、Texas Instruments TUSB3410、TUSB3210、
TUSB2136、TUSB5052、Agere USS2828、Silicon Laboratories C8051F320) を USB チップセットま たは PCI チップセットに使用する場合は、使用するチップの特定のサンプル コードをドライバ コー ドの雛形として使用することを推奨します。WinDriver がサポートする特定の PCI および USB チッ プセットに関する詳細は、 第 8 章 の「特定 PCI チップ セット サポート」を参照してください。
z C / .NET / Delphi / Visual Basic コンパイラ (MSDEV、Visual C/C++、MSDEV .NET、Borland C++
Builder、Borland Delphi、Visual Basic 6.0、MS eMbedded Visual C++、MS Platform Builder C++、 GCC など) で必要な雛型ドライバをコンパイルします。
z Linux の場合、GCC を使用してコードをビルドします。
z これでユーザーモードドライバの作成は完了です。作成したドライバのパフォーマンスを向上させ るには、第 10 章の「パフォーマンスの向上」を参照してください。
WinDriver の PCI / ISA / CardBus API および USB API に関する詳細は付録、DriverWizard を自動に処理 しない方法、転送のコントロールの実装方法については第 9 章を参照してください。