Поделиться через


Настройка ввода-вывода для устройства с помощью подключаемого модуля простого действия ввода-вывода WDTF

Чтобы получить максимальную пользу от тестов и тестов Device Fundamental, которые вы могли написать с помощью шаблонов тестов Visual Studio, устройство должно поддерживаться подключаемым модулем простого ввода-вывода. Чтобы узнать, поддерживается ли тип устройства, и определить, существуют ли определенные требования для тестирования, см. статью Предоставленные подключаемые модули простого ввода-вывода WDTF. Если устройство не поддерживается, вы можете создать подключаемый модуль в Microsoft Visual Studio с помощью шаблона WDTF Simple I/O Action Plug-in .

Предварительные требования

Instructions

Шаг 1. Создание проекта для подключаемого модуля простого действия ввода-вывода WDTF

  1. В меню Файл выберите пункт Создать > проект.
  2. В списке установленных шаблонов в диалоговом окне Новый проект выберите Visual C++ > Тесты > драйвера > Windows WDTF Простой подключаемый модуль ввода-вывода.
  3. Укажите имя для простого проекта ввода-вывода и расположение (или используйте значения по умолчанию).
  4. Шаблон проекта создает решение Visual Studio. Решение содержит все файлы, необходимые для создания простого подключаемого модуля ввода-вывода для устройства. Имена файлов принимают видпроекта>WDTF<SimpleIoAction*. Имя по умолчанию для простого проекта ввода-вывода — DeviceType.
  5. Шаблон создает интерфейс простого действия ввода-вывода WDTF для проекта. Интерфейс действует на экземпляр интерфейса IWDTFTarget2.
  6. Создайте решение простого подключаемого модуля ввода-вывода WDTF, чтобы убедиться, что все необходимые файлы присутствуют.
  7. Реализуйте метод для задания целевого объекта и реализации простых действий ввода-вывода (открыть, закрыть и RunIO), добавив код в файл реализации. Имя файла принимает видпроектаCWDTF SimpleIoActionImpl.cpp файл.

Шаг 2. Реализация метода SetTarget для устройства

  • Откройте файл реализации проекта, например CWDTFmyDeviceTypeSimpleIoActionImpl.cpp, и найдите экземпляр метода SetTarget IAction::SetTarget . В этом методе есть раздел, помеченный комментариями и разделом TODO: который указывает, где следует реализовать код, проверяющий совместимость с устройством.

    Метод SetTarget вызывается WDTF один раз для каждого экземпляра. Он имеет две 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 для открытия интерфейса

Затем необходимо открыть ITarget для тестирования, реализовав предоставленный метод Open().

Этот метод 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 для выполнения простых операций ввода-вывода

Этот метод должен выполнять небольшое количество операций ввода и вывода в целевом объекте. Затем метод должен проверить правильность выполнения операций ввода-вывода. Затем каждый тест может контролировать, как долго он выполняет операции ввода-вывода на устройстве. Каждый вызов метода RunIo() должен выполнять только небольшое количество операций ввода-вывода. WDTF будет повторно вызывать RunIo() в цикле для выполнения дополнительных операций ввода-вывода. Как правило, попробуйте сохранить один вызов метода 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. Сборка и установка подключаемого модуля простого действия ввода-вывода

Если вы еще не сделали этого, необходимо настроить компьютер для тестирования. Дополнительные сведения см. в разделах Подготовка компьютера для развертывания и тестирования драйвера (WDK 8.1) или Подготовка компьютера для развертывания и тестирования драйвера (WDK 8).

  1. Создайте решение.

    При сборке подключаемого модуля простого действия ввода-вывода создаются два теста. Эти тесты устанавливают и удаляют подключаемый модуль на тестовом компьютере. По умолчанию файлы подключаемого модуля действия простого ввода-вывода отображаются в группе тестов Обозреватель в категории Тестовые категории Моя категория теста.

  2. Чтобы установить подключаемый модуль действия простого ввода-вывода, запустите тест с именем Register WDTF<Project>SimpleIOAction.DLL на тестовом компьютере. Сведения о выборе и выполнении тестов см. в статье Тестирование драйвера во время выполнения с помощью Visual Studio.

  3. Чтобы убедиться, что подключаемый модуль действия простого ввода-вывода установлен, на тестовом компьютере запустите тест Отображение устройств с подключаемыми модулями простого ввода-вывода WDTF . В результатах должны появиться подключаемый модуль и устройство. Дополнительные сведения см. в разделе Практическое руководство. Определение необходимости пользовательского подключаемого модуля простого ввода-вывода WDTF для вашего устройства.

  4. Чтобы удалить подключаемый модуль действия простого ввода-вывода, запустите тест с именем Un-register WDTF<Project>SimpleIOAction.DLL на тестовом компьютере. Вы можете убедиться, что вы удалили подключаемый модуль, запустив тест Устройства отображения с подключаемыми модулями простого ввода-вывода WDTF .

Платформа тестирования разработки и выполнения (TAEF)
Практическое руководство. Определение необходимости пользовательского подключаемого модуля простого действия ввода-вывода WDTF для вашего устройства
Практическое руководство. Тестирование драйвера во время выполнения с помощью Visual Studio