Compartir a través de


Personalización de E/S para el dispositivo mediante el complemento de acción de E/S simple de WDTF

Para obtener la mayor ventaja de las pruebas y pruebas fundamentales del dispositivo que podría haber escrito con las plantillas de prueba de Visual Studio, el dispositivo debe ser compatible con un complemento de E/S simple. Para ver si se admite el tipo de dispositivo y determinar si hay requisitos específicos para las pruebas, consulte Complementos de E/S simples WDTF proporcionados. Si el dispositivo no es compatible, puede crear un complemento en Microsoft Visual Studio mediante la plantilla complemento de acción de E/S simple de WDTF .

Requisitos previos

Instrucciones

Paso 1: Crear un proyecto para un complemento de acción de E/S simple de WDTF

  1. En el menú Archivo , haga clic en Nuevo > proyecto.
  2. En la lista de plantillas instaladas en el cuadro de diálogo Nuevo proyecto , seleccione Visual C++ > Windows Driver > Tests > WDTF Simple I/O Action Plug-in.
  3. Proporcione un nombre para el proyecto de E/S simple y una ubicación (o use los valores predeterminados).
  4. La plantilla de proyecto genera una solución de Visual Studio. La solución contiene todos los archivos que necesita para crear un complemento de E/S simple para el dispositivo. Los nombres de los archivos toman el formatode proyecto>WDTF<SimpleIoAction*. El nombre predeterminado del proyecto de E/S simple es DeviceType.
  5. La plantilla crea una interfaz de acción de E/S simple de WDTF para el proyecto. La interfaz actúa sobre una instancia de la interfaz IWDTFTarget2.
  6. Compile la solución de complemento de E/S simple de WDTF para comprobar que todos los archivos necesarios están presentes.
  7. Implemente un método para establecer el destino e implementar las acciones de E/S simples (Abrir, Cerrar y EjecutarIO), agregando código en el archivo de implementación. El nombre del archivo toma el formato CWDTFSimpleIoActionImpl.cpparchivo.

Paso 2: Implementar el método SetTarget para el dispositivo

  • Abra el archivo de implementación del proyecto, por ejemplo, CWDTFmyDeviceTypeSimpleIoActionImpl.cpp y busque la instancia del método IAction::SetTarget SetTarget . Este método tiene una sección marcada con comentarios y TODO: que indica dónde debe implementar código que comprueba la compatibilidad con el dispositivo.

    WDTF llama una vez al método SetTarget para cada instancia. Tiene dos propósitos principales:

    • Para que WDTF pueda determinar si el objeto admite el destino del dispositivo, pMainTarget
    • Para que la instancia simpleIoActionImpl delproyecto>CWDTF<pueda obtener la información necesaria del destino para realizar las llamadas al método Open(), Close() , Close() y RunIO().

    La implementación de este método debe devolver E_NOINTERFACE para indicar que no se admite el destino. El método debe devolver S_OK si se admite el destino. Si se produce cualquier otro error, el método debe devolver HRESULT para indicar el error.

    
        ////
        // 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.
    

Paso 3: Implementar SimpleIoAction para abrir la interfaz

A continuación, debe abrir ITarget para realizar pruebas mediante la implementación del método Open() proporcionado.

Este método Open debe intentar abrir el dispositivo de destino. Si el método no puede hacerlo, el método debe devolver un VALOR HRESULT que indica el error. Este método debe producir un error si la interfaz SimpleIO ya está abierta (inicializada). La forma en que implementa este método depende del tipo ITarget y de lo que tenga más sentido en su situación. Quizás esto significa que debe abrir un identificador con CreateFile(). Quizás significa que inicializa una estructura de contexto para que pueda realizar un seguimiento de un caso de prueba en curso. En caso de error, el método debe usar comReportError () y debe proporcionar una descripción del error y cualquier información o paso que pueda ayudar a evitar futuras apariciones.

Nota Este método debe producir un error si ISimpleIO_Action ya está abierto.

  • Abra el archivo de implementación del proyecto, por ejemplo, CWDTFmyDeviceTypeSimpleIoActionImpl.cpp y busque la instancia del método Open . Este método tiene una sección marcada con comentarios y 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");
       //
    

Paso 4: Implementar el método SimpleIoAction para cerrar la interfaz

Este método debe cerrar el contexto de prueba abierto anteriormente. Debe borrar el contexto incluso si debe informar de un HRESULT con errores. Solo hay algunos casos en los que un error que se produce cuando se cierra realmente tiene sentido. En este método, debe revertir cualquier operación que haya realizado en Open(). Quizás esto significa que debe cerrar el identificador abierto previamente con CloseHandle(). En caso de error, proporcione una descripción procesable.

Nota Este método debe producir un error si el ISimpleIO_Action ya está cerrado o nunca se ha abierto.

  • Abra el archivo de implementación del proyecto, por ejemplo, CWDTFmyDeviceTypeSimpleIoActionImpl.cpp y busque la instancia del método Close . Este método tiene una sección marcada con comentarios y 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");
       //
    
       //
    

Paso 5: Implementar el método SimpleIoAction para realizar operaciones de E/S sencillas

Este método debe realizar un pequeño número de operaciones de entrada y salida en el destino. A continuación, el método debe comprobar que las operaciones de E/S se han completado correctamente. A continuación, cada prueba puede controlar cuánto tiempo realiza la E/S en un dispositivo. Cada llamada al método RunIo() solo debe realizar una pequeña cantidad de E/S . WDTF llamará a RunIo() repetidamente en un bucle para realizar más E/S. En general, intente mantener una sola llamada de método RunIo() a unos segundos.

Nota Este método debe producir un error si ISimpleIO_Action está cerrado actualmente.

  • Abra el archivo de implementación del proyecto, por ejemplo, CWDTFmyDeviceTypeSimpleIoActionImpl.cpp y busque la instancia del método RunIO. Este método tiene una sección marcada con comentarios y 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");
       //
    
       //
    

Paso 6: Compilar e instalar el complemento de acción de E/S simple

Si aún no lo ha hecho, deberá configurar un equipo para realizar pruebas. Para obtener más información, consulte Aprovisionamiento de un equipo para la implementación y pruebas de controladores (WDK 8.1) o Aprovisionamiento de un equipo para la implementación y pruebas de controladores (WDK 8) .

  1. Compile la solución.

    Al compilar el complemento Acción de E/S simple, se crean dos pruebas. Estas pruebas instalan y desinstalan el complemento en el equipo de prueba. De forma predeterminada, los archivos de complemento acción de E/S simples aparecen en el Explorador de grupos de pruebas, en la categoría de prueba Mi categoría de prueba.

  2. Para instalar el complemento de acción de E/S simple, ejecute la prueba denominada Register WDTFProject>SimpleIOAction.DLL(Registrar proyecto WDTF<) en el equipo de prueba. Para obtener información sobre cómo seleccionar y ejecutar pruebas, consulte Cómo probar un controlador en tiempo de ejecución mediante Visual Studio.

  3. Para comprobar que está instalado el complemento de acción de E/S simple, ejecute los dispositivos de visualización que tienen pruebas de E/S simples de WDTF en el equipo de prueba. El complemento y el dispositivo deben aparecer en los resultados. Para obtener más información, consulte How to determine if a custom WDTF Simple I/O Action Plug-in is required for your device.how to determine if a custom WDTF Simple I/O Action Plug-in is required for your device.

  4. Para desinstalar el complemento de acción de E/S simple, ejecute la prueba denominada Un-register WDTF<Project>SimpleIOAction.DLL en el equipo de prueba. Para comprobar que ha desinstalado el complemento, ejecute los dispositivos display que tienen pruebas de E/S simple de WDTF .

Marco de creación y ejecución de pruebas (TAEF)
Cómo determinar si se requiere un complemento de acción de E/S simple WDTF personalizado para el dispositivo
Cómo probar un controlador en tiempo de ejecución mediante Visual Studio