如何使用 WDTF 简单 I/O 操作插件为设备自定义 I/O
若要充分利用你可能使用 Visual Studio 测试模板编写的设备基础测试和测试,你的设备应受简单 I/O 插件支持。 若要查看设备类型是否受支持,并确定测试是否有特定要求,请参阅 提供的 WDTF 简单 I/O 插件。如果设备不受支持,可以使用 WDTF 简单 I/O 操作 插件模板在 Microsoft Visual Studio 中创建插件。
先决条件
- 受测设备安装在测试计算机上。
- 在测试计算机上进行了测试签名并安装的驱动程序包。 若要验证是否已正确安装驱动程序,请参阅 如何测试驱动程序包。
- 测试针对部署配置和预配的计算机。 请参阅 使用 Visual Studio 在运行时测试驱动程序
Instructions
步骤 1:为 WDTF 简单 I/O 操作插件创建项目
- 从“文件” 菜单中,单击“新建”>“项目” 。
- 从“ 新建项目 ”对话框中已安装的模板列表中,选择“ Visual C++ > Windows 驱动程序 > 测试 > WDTF 简单 I/O 操作插件”。
- 提供简单 I/O 项目的名称和位置 (或使用默认值) 。
- 项目模板生成 Visual Studio 解决方案。 该解决方案包含为设备创建简单 I/O 插件所需的所有文件。 文件名采用 WDTF<项目>SimpleIoAction*格式。 简单 I/O 项目的默认名称为 DeviceType。
- 该模板为项目创建 WDTF 简单 I/O 操作接口。 接口作用于 IWDTFTarget2 接口的实例。
- 生成 WDTF 简单 I/O 插件解决方案,以验证是否存在所有必需的文件。
- 通过在实现文件中添加代码,实现方法以设置目标并实现简单 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) 。
生成解决方案。
生成简单 I/O 操作插件时,将创建两个测试。 这些测试在测试计算机上安装和卸载插件。 默认情况下,简单 I/O 操作插件文件显示在 测试组资源管理器的测试类别 “我的测试类别”中。
若要安装简单 I/O 操作插件,请在测试计算机上运行名为 Register WDTF<Project>SimpleIOAction.DLL 的测试。 有关选择和运行测试的信息,请参阅 如何使用 Visual Studio 在运行时测试驱动程序。
若要验证是否已安装简单 I/O 操作插件,请在测试计算机上运行 具有 WDTF 简单 I/O 插件的显示设备 测试。 你的插件和设备应显示在结果中。 有关详细信息,请参阅 如何确定设备是否需要自定义 WDTF 简单 I/O 操作插件。
若要卸载简单 I/O 操作插件,请在测试计算机上运行名为 Un-register WDTF<Project>SimpleIOAction.DLL 的测试。 可以通过运行 具有 WDTF 简单 I/O 插件的显示设备 测试来验证是否已卸载该插件。
相关主题
测试创作和执行框架 (TAEF)
如何确定设备是否需要自定义 WDTF 简单 I/O 操作插件
如何在运行时使用 Visual Studio 测试驱动程序