如何使用 WDTF 简单 I/O 操作插件为设备自定义 I/O

若要充分利用你可能使用 Visual Studio 测试模板编写的设备基础测试和测试,你的设备应受简单 I/O 插件支持。 若要查看设备类型是否受支持,并确定测试是否有特定要求,请参阅 提供的 WDTF 简单 I/O 插件。如果设备不受支持,可以使用 WDTF 简单 I/O 操作 插件模板在 Microsoft Visual Studio 中创建插件。

先决条件

Instructions

步骤 1:为 WDTF 简单 I/O 操作插件创建项目

  1. 从“文件” 菜单中,单击“新建”>“项目” 。
  2. 从“ 新建项目 ”对话框中已安装的模板列表中,选择“ Visual C++ > Windows 驱动程序 > 测试 > WDTF 简单 I/O 操作插件”。
  3. 提供简单 I/O 项目的名称和位置 (或使用默认值) 。
  4. 项目模板生成 Visual Studio 解决方案。 该解决方案包含为设备创建简单 I/O 插件所需的所有文件。 文件名采用 WDTF<项目>SimpleIoAction*格式。 简单 I/O 项目的默认名称为 DeviceType。
  5. 该模板为项目创建 WDTF 简单 I/O 操作接口。 接口作用于 IWDTFTarget2 接口的实例。
  6. 生成 WDTF 简单 I/O 插件解决方案,以验证是否存在所有必需的文件。
  7. 通过在实现文件中添加代码,实现方法以设置目标并实现简单 I/O 操作 (Open、Close 和 RunIO ) 。 文件的名称采用 CWDTF项目SimpleIoActionImpl.cpp文件的形式。

步骤 2:为设备实现 SetTarget 方法

  • 打开项目的实现文件(例如,CWDTFmyDeviceTypeSimpleIoActionImpl.cpp),并找到 IAction::SetTarget SetTarget 方法的实例。 此方法有一个标有注释和 TODO 的部分:指示应在何处实现检查与设备兼容性的代码。

    WDTF 为每个实例调用 一次 SetTarget 方法。 它有两个main目的:

    • 以便 WDTF 可以确定对象是否支持设备目标 pMainTarget
    • 以便 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。 通常,尝试将单个 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. 生成解决方案。

    生成简单 I/O 操作插件时,将创建两个测试。 这些测试在测试计算机上安装和卸载插件。 默认情况下,简单 I/O 操作插件文件显示在 测试组资源管理器的测试类别 “我的测试类别”中。

  2. 若要安装简单 I/O 操作插件,请在测试计算机上运行名为 Register WDTF<Project>SimpleIOAction.DLL 的测试。 有关选择和运行测试的信息,请参阅 如何使用 Visual Studio 在运行时测试驱动程序

  3. 若要验证是否已安装简单 I/O 操作插件,请在测试计算机上运行 具有 WDTF 简单 I/O 插件的显示设备 测试。 你的插件和设备应显示在结果中。 有关详细信息,请参阅 如何确定设备是否需要自定义 WDTF 简单 I/O 操作插件

  4. 若要卸载简单 I/O 操作插件,请在测试计算机上运行名为 Un-register WDTF<Project>SimpleIOAction.DLL 的测试。 可以通过运行 具有 WDTF 简单 I/O 插件的显示设备 测试来验证是否已卸载该插件。

测试创作和执行框架 (TAEF)
如何确定设备是否需要自定义 WDTF 简单 I/O 操作插件
如何在运行时使用 Visual Studio 测试驱动程序