Compartilhar via


Como personalizar a E/S para seu dispositivo usando o Plug-in de Ação de E/S Simples do WDTF

Para obter o maior benefício dos testes e testes do Device Fundamental que você pode ter escrito usando os modelos de teste do Visual Studio, seu dispositivo deve ter suporte por um plug-in de E/S Simples. Para ver se o tipo de dispositivo tem suporte e determinar se há requisitos específicos para teste, consulte Plug-ins de E/S simples do WDTF fornecidos. Se o dispositivo não tiver suporte, você poderá criar um plug-in no Microsoft Visual Studio usando o modelo de Plug-in de Ação de E/S Simples do WDTF .

Pré-requisitos

Instruções

Etapa 1: Criar um projeto para um plug-in de Ação de E/S Simples do WDTF

  1. No menu Arquivo , clique em Novo > Projeto.
  2. Na lista de modelos instalados na caixa de diálogo Novo Projeto , selecione Visual C++ > Windows Driver > Tests > WDTF Simple I/O Action Plug-in.
  3. Forneça um nome para seu projeto de E/S simples e um local (ou use os padrões).
  4. O modelo de projeto gera uma solução do Visual Studio. A Solução contém todos os arquivos necessários para criar um plug-in de E/S simples para seu dispositivo. Os nomes dos arquivos assumem o formatoprojeto>WDTF<SimpleIoAction*. O nome padrão para o projeto de E/S simples é DeviceType.
  5. O modelo cria uma interface de Ação de E/S Simples do WDTF para seu projeto. A interface atua em uma instância da interface IWDTFTarget2.
  6. Crie sua solução de plug-in de E/S simples do WDTF para verificar se todos os arquivos necessários estão presentes.
  7. Implemente um método para definir o destino e implementar as Ações simples de E/S (Open, Close e RunIO), adicionando código no arquivo de implementação. O nome do arquivo usa o formulário cwdtfprojetoSimpleIoActionImpl.cpp arquivo.

Etapa 2: Implementar o método SetTarget para seu dispositivo

  • Abra o arquivo de implementação do projeto, por exemplo, CWDTFmyDeviceTypeSimpleIoActionImpl.cpp e localize a instância do método IAction::SetTarget SetTarget. Esse método tem uma seção marcada com comentários e TODO: que indica onde você deve implementar o código que verifica a compatibilidade com seu dispositivo.

    O método SetTarget é chamado uma vez pelo WDTF para cada instância. Ele tem duas finalidades main:

    • Para que o WDTF possa determinar se o objeto dá suporte ao destino do dispositivo, pMainTarget
    • Para que a instância SimpleIoActionImpl doprojeto>CWDTF<possa obter as informações necessárias do destino para realizar as chamadas de método Open() , Close() , RunIO() posteriores.

    A implementação desse método deve retornar E_NOINTERFACE para indicar que o destino não tem suporte. O método deverá retornar S_OK se houver suporte para o destino. Se ocorrer qualquer outra falha, o método deverá retornar HRESULT para indicar o erro.

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

Etapa 3: Implementar SimpleIoAction para abrir a interface

Em seguida, você precisa abrir o ITarget para teste implementando o método Open() fornecido.

Esse método Open deve tentar abrir o dispositivo de destino. Se o método não puder fazer isso, o método deverá retornar um HRESULT indicando a falha. Esse método deverá falhar se a interface SimpleIO já estiver aberta (inicializada). A forma como você implementa esse método depende do tipo ITarget e do que faz mais sentido em sua situação. Talvez isso signifique que você deve abrir um identificador para ele com CreateFile(). Talvez isso signifique que você inicialize uma estrutura de contexto para que possa acompanhar um caso de teste em andamento. No caso de um erro, o método deve usar idealmente COMReportError () e deve fornecer uma descrição do erro e quaisquer informações ou etapas que possam ajudar a evitar ocorrências futuras.

Nota Esse método deverá falhar se ISimpleIO_Action já estiver aberto.

  • Abra o arquivo de implementação do projeto, por exemplo, CWDTFmyDeviceTypeSimpleIoActionImpl.cpp e localize a instância do método Open . Esse método tem uma seção marcada com comentários e 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");
       //
    

Etapa 4: Implementar o método SimpleIoAction para fechar a interface

Esse método deve fechar o contexto de teste aberto anteriormente. Você deve limpar seu contexto mesmo se precisar relatar um HRESULT com falha. Há apenas alguns casos em que um erro que acontece quando você fecha realmente faz sentido. Nesse método, você deve reverter qualquer operação executada em Open(). Talvez isso signifique que você deve fechar seu identificador aberto anteriormente com CloseHandle(). No caso de um erro, forneça uma descrição acionável para ele.

Nota Esse método deverá falhar se o ISimpleIO_Action já estiver fechado ou nunca tiver sido aberto.

  • Abra o arquivo de implementação do projeto, por exemplo, CWDTFmyDeviceTypeSimpleIoActionImpl.cpp e localize a instância do método Close . Esse método tem uma seção marcada com comentários e 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");
       //
    
       //
    

Etapa 5: Implementar o método SimpleIoAction para executar operações simples de E/S

Esse método deve executar um pequeno número de operações de entrada e saída no destino. Em seguida, o método deve verificar se as operações de E/S foram concluídas corretamente. Em seguida, cada teste pode controlar por quanto tempo ele executa E/S em um dispositivo. Cada chamada para o método RunIo() deve executar apenas uma pequena quantidade de E/S . O WDTF chamará RunIo() repetidamente em um loop para executar mais E/S. Em geral, tente manter uma única chamada de método RunIo() para alguns segundos.

Nota Esse método deverá falhar se ISimpleIO_Action estiver fechado no momento.

  • Abra o arquivo de implementação do projeto, por exemplo, CWDTFmyDeviceTypeSimpleIoActionImpl.cpp e localize a instância do método RunIO. Esse método tem uma seção marcada com comentários e 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");
       //
    
       //
    

Etapa 6: Criar e instalar o Plug-in de Ação de E/S Simples

Se você ainda não fez isso, precisará configurar um computador para teste. Para obter mais informações, consulte Provisionar um computador para implantação e teste de driver (WDK 8.1) ou Provisionar um computador para implantação e teste de driver (WDK 8).

  1. Compile a solução.

    Quando você cria o plug-in Ação de E/S Simples, dois testes são criados. Esses testes instalam e desinstalam o plug-in no computador de teste. Por padrão, os arquivos de plug-in de Ação de E/S Simples aparecem no Grupo de Testes Explorer, na categoria de teste Minha Categoria de Teste.

  2. Para instalar o Plug-in de Ação de E/S Simples, execute o teste chamado Registrar projeto WDTF<>SimpleIOAction.DLL no computador de teste. Para obter informações sobre como selecionar e executar testes, consulte Como testar um driver em runtime usando o Visual Studio.

  3. Para verificar se o Plug-in de Ação de E/S Simples está instalado, execute os Dispositivos de exibição que têm teste de Plug-ins de E/S Simples do WDTF no computador de teste. O plug-in e o dispositivo devem aparecer nos resultados. Para obter mais informações, consulte Como determinar se um plug-in de Ação de E/S Simples do WDTF personalizado é necessário para seu dispositivo.

  4. Para desinstalar o Plug-in de Ação de E/S Simples, execute o teste chamado Desmarque o projeto>WDTF<SimpleIOAction.DLL no computador de teste. Você pode verificar se desinstalou o plug-in executando os dispositivos de exibição que têm teste de plug-ins de E/S Simples do WDTF .

Estrutura de execução e criação de testes (TAEF)
Como determinar se um plug-in de Ação de E/S simples do WDTF personalizado é necessário para seu dispositivo
Como testar um driver em runtime usando o Visual Studio