Visão geral do desenvolvimento de aplicativos do Windows para dispositivos USB

Resumo:

  • Diretrizes para escolher o modelo de programação certo
  • Experiência de desenvolvedor de aplicativos UWP e aplicativos da área de trabalho

APIs importantes:

Este artigo fornece diretrizes para decidir se você deve escrever um aplicativo UWP ou um aplicativo da área de trabalho do Windows para se comunicar com um dispositivo USB.

O Windows fornece conjuntos de API que você pode usar para escrever aplicativos que se comunicam com dispositivos USB personalizados. A API executa tarefas comuns relacionadas a USB, como, localizar o dispositivo, transferências de dados.

O dispositivo personalizado nesse contexto significa um dispositivo para o qual a Microsoft não fornece um driver de classe in-box. Em vez disso, você pode instalar o WinUSB (Winusb.sys) como o driver do dispositivo.

Escolhendo um modelo de programação

Se você instalar Winusb.sys, aqui estão as opções de modelo de programação:

A estratégia para escolher o melhor modelo de programação depende de vários fatores.

  • Seu aplicativo se comunicará com um dispositivo USB interno?

    As APIs são projetadas principalmente para acessar dispositivos periféricos. A API também pode acessar dispositivos USB internos do computador. No entanto, o acesso a dispositivos USB internos do computador de um aplicativo UWP é limitado a um aplicativo privilegiado declarado explicitamente nos metadados do dispositivo pelo OEM para esse computador.

  • Seu aplicativo se comunicará com pontos de extremidade isócronos USB?

    Se o aplicativo transmitir dados de ou para pontos de extremidade isócronos do dispositivo, você deverá escrever um aplicativo da área de trabalho do Windows. Em Windows 8.1, novas funções WinUSB foram adicionadas ao conjunto de APIs que permite que um aplicativo da área de trabalho envie dados para e receba dados de pontos de extremidade isócronos.

  • Seu aplicativo é um tipo de aplicativo "painel de controle"?

    Os aplicativos UWP são aplicativos por usuário e não têm a capacidade de fazer alterações fora do escopo de cada aplicativo. Para esses tipos de aplicativos, você deve escrever um aplicativo da área de trabalho do Windows.

  • A classe de dispositivo USB é compatível com classes de aplicativos UWP?

    Escreva um aplicativo UWP se o dispositivo pertencer a uma dessas classes de dispositivo.

    • name:cdcControl, classId:02 * *
    • name:physical, classId:05 * *
    • name:personalHealthcare, classId:0f 00 00
    • name:activeSync, classId:ef 01 01
    • name:palmSync, classId:ef 01 02
    • name:deviceFirmwareUpdate, classId:fe 01 01
    • name:irda, classId:fe 02 00
    • name:measurement, classId:fe 03 *
    • name:vendorSpecific, classId:ff * *

    Observação

    Se o dispositivo pertencer à classe DeviceFirmwareUpdate, seu aplicativo deverá ser um aplicativo privilegiado.

Se o dispositivo não pertencer a uma das classes de dispositivo anteriores, escreva um aplicativo da área de trabalho do Windows.

Requisito de driver

Requisito de driver Aplicativo UWP Aplicativo da área de trabalho do Windows
Driver de função Winusb.sys fornecidos pela Microsoft (driver no modo kernel). Winusb.sys fornecidos pela Microsoft (driver no modo kernel).
Driver de filtro Se os drivers de filtro estiverem presentes, o acesso será limitado a aplicativos privilegiados. O aplicativo é declarado como aplicativos privilegiados nos metadados do dispositivo pelo OEM. O driver de filtro pode estar presente na pilha de dispositivos no modo kernel, desde que não bloqueie o acesso ao Winusb.sys.

Exemplos de código

Amostra Aplicativo UWP Aplicativo da área de trabalho do Windows
Introdução a esses exemplos

Ferramentas de desenvolvimento

Ferramentas de desenvolvimento Aplicativo UWP Aplicativo da área de trabalho do Windows
Ambiente do Desenvolvedor Microsoft Visual Studio 2013

Microsoft Windows Software Development Kit (SDK) para Windows 8.1
Use o modelo de aplicativo WinUSB incluído no Visual Studio (Ultimate ou Professional) e no WDK (Windows Driver Kit) 8 ou posterior.

Para transferências isócronas, Visual Studio 2013 com o WDK (Kit de Driver do Windows) 8.1 ou posterior.
Linguagens de programação C#, VB.NET, C++, JavaScript C/C++

Implementação de recursos

Cenário-chave Aplicativo UWP Aplicativo da área de trabalho do Windows
Descoberta de dispositivo Use o namespace Windows.Devices.Enumeration para obter um UsbDevice. Use SetupAPI e WinUsb_Initialize para obter um WINUSB_INTERFACE_HANDLE.
Transferência de controle USB UsbSetupPacket
UsbControlRequestType
UsbDevice.SendControlInTransferAsync
UsbDevice.SendControlOutTransferAsync
WINUSB_SETUP_PACKET
WinUsb_ControlTransfer
Obtendo descritores USB UsbDevice.DeviceDescriptor
UsbConfiguration.Descriptors
UsbInterface.Descriptors
UsbEndpointDescriptor
WinUsb_GetDescriptor
Enviando transferência em massa usb UsbBulkInPipe
UsbBulkOutPipe
WinUsb_ReadPipe
WinUsb_WritePipe
Enviando transferência de interrupção USB UsbInterruptInPipe
UsbInterruptOutPipe
WinUsb_ReadPipe
WinUsb_WritePipe
Enviando transferência isócrona USB Não há suporte. WinUsb_ReadIsochPipe
WinUsb_ReadIsochPipeAsap
WinUsb_WriteIsochPipe
WinUsb_WriteIsochPipeAsap
Fechando o dispositivo UsbDevice.Close WinUsb_Free

Documentação

Documentação Aplicativo UWP Aplicativo da área de trabalho do Windows
Guia de programação Conversando com dispositivos USB, comece a concluir Como acessar um dispositivo USB usando funções WinUSB
Referência de API Windows.Devices.Usb Funções do WinUSB