WDTF シンプル I/O アクション プラグインを使ってデバイスの I/O をカスタマイズする方法

Visual Studio テスト テンプレートを使用して記述した可能性がある デバイス基礎テストとテストから最大限のメリットを得るには、デバイスをシンプルなI/O プラグインでサポートする必要があります。 デバイスの種類がサポートされているかどうかを確認し、テストのための特定の要件があるかどうかを判断するには、「提供されている WDTF Simple I/O プラグイン」をご参照ください。デバイスがサポートされていない場合は、WDTF Simple I/O アクション プラグイン テンプレートを使用して、Microsoft Visual Studio でプラグインを作成できます。

前提条件

手順

手順 1: WDTF Simple I/O アクション プラグインのプロジェクトを作成します

  1. [ファイル] メニューの [新規>プロジェクト] をクリックします。
  2. [ 新規プロジェクト ] ダイアログ ボックスのインストール済みテンプレートの一覧から、[Visual C++> Windowsドライバー >テスト> WDTF Simple I/O アクション プラグイン] を選択します。
  3. シンプルな I/O プロジェクトの名前と場所を指定します (または既定を使用します。)
  4. プロジェクト テンプレートによって Visual Studio ソリューションが生成されます。 ソリューションには、デバイス用のシンプルな I/O プラグインを作成するために必要なすべてのファイルが含まれています。 ファイルの名前は、WDTF<プロジェクト>SimpleIoAction* という形式になります。 単純な I/O プロジェクトの既定の名前は DeviceType です。
  5. このテンプレートでは、プロジェクト用の WDTF Simple I/O アクション インターフェイスが作成されます。 インターフェイスは、IWDTFTarget2 インターフェイスのインスタンスに対して機能します。
  6. WDTF Simple I/O プラグイン ソリューションをビルドして、必要なすべてのファイルが存在することを確認します。
  7. 実装ファイルにコードを追加して、ターゲットを設定し、単純な I/O アクション (Open、Close、RunIO) を実装するメソッドを実装します。 ファイルの名前は、CWDTFプロジェクトSimpleIoActionImpl.cpp ファイルの形式になります。

手順 2:デバイスの SetTarget メソッドを実装します

  • プロジェクトの実装ファイル (CWDTFmyDeviceTypeSimpleIoActionImpl.cppなど) を開き、IAction::SetTarget SetTarget メソッドのインスタンスを見つけます。 このメソッドには、コメントと TODO でマークされたセクションがあります。これは、デバイスとの互換性のためにチェックするコードを実装する場所を示します。

    SetTarget メソッドは、各インスタンスの WDTF によって 1 回呼び出されます。 それには 2 つの主要な目的があります。

    • オブジェクトがデバイス ターゲット pMainTarget をサポートしているかどうかを WDTF が判断できるように
    • CWDTF<プロジェクト>SimpleIoActionImpl インスタンスがターゲットから必要な情報を取得して、後で Open() 、 Close() 、 RunIO() メソッド呼び出しを実行できるようにします。

    このメソッドの実装では、ターゲットがサポートされていないことを示す E_NOINTERFACE を返す必要があります。 ターゲットがサポートされている場合、メソッドは S_OK を返す必要があります。 その他のエラーが発生した場合、メソッドは HRESULT を返してエラーを示す必要があります。

    
        ////
        // TODO: 1)  Perform your checks to see if your implementation is compatible with the target.
        //       Use the ITarget::GetValue() & ITarget::Eval() method to get the necessary data , info 
        //       to determine that. 
        //       2)  Also get the necessary info and save it in a member variable 
        //       to accomplish the later Open() method call.
    

手順 3:SimpleIoAction を実装してインターフェイスを開きます

次に、提供された Open() メソッドを実装して、テスト用に ITarget を開く必要があります。

この Open メソッドは、ターゲット デバイスを開こうとします。 メソッドがこれを行うことができない場合、メソッドは失敗を示す HRESULT を返す必要があります。 SimpleIO インターフェイスが既に開いている (初期化されている) 場合、このメソッドは失敗します。 このメソッドを実装する方法は、ITarget の種類と、状況で最も意味のあるものによって異なります。 おそらくこれは、CreateFile() を使用してハンドルを開く必要があることを意味します。 おそらく、進行中のテスト ケースを追跡できるようにコンテキスト構造を初期化することを意味します。 エラーが発生した場合、メソッドは COMReportError () を理想的に使用し、エラーの説明と、今後発生するのを防ぐのに役立つ情報または手順を指定する必要があります。

注意 ISimpleIO_Action が既に開かれている場合、このメソッドは失敗します。

  • プロジェクトの実装ファイル (CWDTFmyDeviceTypeSimpleIoActionImpl.cppなど) を開き、Open メソッドのインスタンスを見つけます。 このメソッドには、コメントと TODO でマークされたセクションがあります。

    //
       //   TODO: Add code for your implementation of Open() here.
       //
       //
       //  To return failure use COMReportError(,,,).  For example the following 
       //  will return E_FAIL as the error code and "My Device error String"  as
       //  the error string.
       //
       //  COMReportError(WDTF, E_FAIL, "My Device error String");
       //
    

手順 4:インターフェイスを閉じる SimpleIoAction メソッドを実装します

このメソッドは、以前に開いたテスト コンテキストを閉じる必要があります。 失敗した HRESULT を報告する必要がある場合でも、コンテキストをクリアする必要があります。 閉じるときに発生するエラーが実際に意味を持つケースはごくわずかです。 このメソッドでは、Open() で実行した操作を元に戻す必要があります。 これは、以前に開いたハンドルを CloseHandle() で閉じる必要があることを意味している可能性があります。 エラーが発生した場合は、操作可能な説明を入力してください。

注意 ISimpleIO_Action が既に閉じているか、まだ開いていない場合、このメソッドは失敗します。

  • プロジェクトの実装ファイル (CWDTFmyDeviceTypeSimpleIoActionImpl.cppなど) を開き、Close メソッドのインスタンスを見つけます。 このメソッドには、コメントと TODO でマークされたセクションがあります。

    //
       //  //
       //   TODO: Add code for your implementation of Close() here.
       //
       // 
       //
       //  To return failure use COMReportError(,,,).  For example the following 
       //  will return E_FAIL as the error code and "My Device error String"  as
       //  the error string.
       //
       //  COMReportError(WDTF, E_FAIL, "My Device error String");
       //
    
       //
    

手順 5:SimpleIoAction メソッドを実装して単純な I/O 操作を実行します

このメソッドは、ターゲットに対して少数の入力操作と出力操作を実行する必要があります。 メソッドは、I/O 操作が正しく完了したことを確認する必要があります。 その後、各テストでデバイスに対して I/O を実行する時間を制御できます。 RunIo() メソッドの各呼び出しでは、少量の I/O のみを実行する必要があります。 WDTF は、ループ内で RunIo() を繰り返し呼び出して、より多くの I/O を実行します。 一般に、1 回の RunIo() メソッド呼び出しを数秒に抑えてみてください。

注意 ISimpleIO_Action が現在閉じている場合、このメソッドは失敗します。

  • プロジェクトの実装ファイル (CWDTFmyDeviceTypeSimpleIoActionImpl.cppなど) を開き、RunIO メソッドのインスタンスを見つけます。 このメソッドには、コメントと TODO でマークされたセクションがあります。

    //
       //  //
       //   TODO: Add code for your implmentaiton of RunIO() here.
       //
       // 
       //
       //  To return failure use COMReportError(,,,).  For example the following 
       //  will return E_FAIL as the error code and "My Device error String"  as
       //  the error string.
       //
       //  COMReportError(WDTF, E_FAIL, "My Device error String");
       //
    
       //
    

手順 6:シンプルな I/O アクション プラグインをビルドしてインストールします

まだ行っていない場合は、テスト用にコンピューターを構成する必要があります。 詳細については、「 ドライバーの展開とテスト用にコンピューターをプロビジョニングする (WDK 8.1) 」または 「ドライバーの展開とテスト用にコンピューターをプロビジョニングする (WDK 8)」を参照してください。

  1. ソリューションをビルドします。

    Simple I/O Action プラグインをビルドすると、2 つのテストが作成されます。 これらのテストは、テスト コンピューターにプラグインをインストールしてアンインストールします。 既定では、シンプルな I/O アクション プラグイン ファイルはテスト グループ エクスプローラーのテスト カテゴリ [マイ テスト カテゴリ] に表示されます。

  2. シンプルな I/O アクション プラグインをインストールするには、テスト コンピューターで 登録 WDTF<プロジェクト>SimpleIOAction.DLL という名前のテストを実行します。 テストの選択と実行については、「Visual Studio を使用して実行時にドライバーをテストする方法」をご参照ください。

  3. 簡易 I/O アクション プラグインがインストールされていることを確認するには、テスト コンピューターで WDTF Simple I/O プラグインを伴うディスプレイ デバイス テストを実行します。 プラグインとデバイスが結果に表示されます。 詳細については、ハウツー 「WDTF Simple I/O アクション プラグインがデバイスに必要かどうかを判断する方法」をご参照ください。

  4. シンプルな I/O アクション プラグインをアンインストールするには、テスト コンピューターで 登録解除 WDTF<プロジェクト>SimpleIOAction.DLL という名前のテストを実行します。 WDTF Simple I/O プラグインを伴うディスプレイ デバイス テスト実行して、プラグインがアンインストールされたことを確認できます。

Test Authoring and Execution Framework (TAEF)
ハウツー お使いのデバイスにカスタム WDTF シンプル I/O アクション プラグインが必要かどうかを判断する方法
Visual Studio を使って実行時にドライバーをテストする方法