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:
Aplicativo UWP para um dispositivo USB
Windows 8.1 fornece o namespace Windows.Devices.Usb, que não pode ser usado em versões anteriores do Windows. Para outros recursos da Microsoft Store, consulte a documentação do Plataforma Universal do Windows.
Aplicativo da área de trabalho do Windows para um dispositivo USB
Antes de Windows 8.1, os aplicativos que estavam se comunicando por meio deWinusb.sys, eram aplicativos da área de trabalho escritos usando o WinUSB Functions. Em Windows 8.1, o conjunto de API foi estendido. Para obter mais informações sobre o desenvolvimento de aplicativos do Windows, consulte Desenvolver para Windows.
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 |