Información general sobre el desarrollo de aplicaciones windows para dispositivos USB
Resumen:
- Directrices para elegir el modelo de programación adecuado
- Experiencia para desarrolladores de aplicaciones para UWP y aplicaciones de escritorio
API importantes:
En este artículo se proporcionan instrucciones para decidir si debe escribir una aplicación para UWP o una aplicación de escritorio de Windows para comunicarse con un dispositivo USB.
Windows proporciona conjuntos de API que puede usar para escribir aplicaciones que se comuniquen con dispositivos USB personalizados. La API realiza tareas comunes relacionadas con USB, como buscar el dispositivo, transferencias de datos.
El dispositivo personalizado en este contexto significa que un dispositivo para el que Microsoft no proporciona un controlador de clase integrada. En su lugar, puede instalar WinUSB (Winusb.sys) como controlador de dispositivo.
Elección de un modelo de programación
Si instala Winusb.sys, estas son las opciones del modelo de programación:
Aplicación para UWP para un dispositivo USB
Windows 8.1 proporciona el espacio de nombres Windows.Devices.Usb, que no se puede usar en versiones anteriores de Windows. Para otros recursos de Microsoft Store, consulta la documentación de Plataforma universal de Windows.
Aplicación de escritorio de Windows para un dispositivo USB
Antes de Windows 8.1, las aplicaciones que se comunicaban a través de Winusb.sys, eran aplicaciones de escritorio escritas mediante funciones de WinUSB. En Windows 8.1, se extendió el conjunto de API. Para obtener más información sobre el desarrollo de aplicaciones de Windows, consulte Desarrollo para Windows.
La estrategia para elegir el mejor modelo de programación depende de varios factores.
¿La aplicación se comunicará con un dispositivo USB interno?
Las API están diseñadas principalmente para acceder a dispositivos periféricos. La API también puede acceder a dispositivos USB internos de PC. Sin embargo, el acceso a dispositivos USB internos de PC desde una aplicación para UWP se limita a una aplicación con privilegios declarada explícitamente en los metadatos del dispositivo por el OEM para ese equipo.
¿La aplicación se comunicará con puntos de conexión isócronos USB?
Si la aplicación transmite datos a o desde puntos de conexión isócronos del dispositivo, debe escribir una aplicación de escritorio de Windows. En Windows 8.1, se han agregado nuevas funciones de WinUSB al conjunto de API que permite que una aplicación de escritorio envíe datos y reciba datos de puntos de conexión isócronos.
¿La aplicación es un tipo de aplicación "panel de control"?
Las aplicaciones para UWP son aplicaciones por usuario y no tienen la capacidad de realizar cambios fuera del ámbito de cada aplicación. Para estos tipos de aplicaciones, debes escribir una aplicación de escritorio de Windows.
¿Las aplicaciones para UWP admiten clases de clase de dispositivo USB?
Escriba una aplicación para UWP si el dispositivo pertenece a una de estas clases 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 * *
Nota:
Si el dispositivo pertenece a la clase DeviceFirmwareUpdate, la aplicación debe ser una aplicación con privilegios.
Si el dispositivo no pertenece a una de las clases de dispositivo anteriores, escriba una aplicación de escritorio de Windows.
Requisito del controlador
Requisito del controlador | Aplicación para UWP | Aplicación de escritorio de Windows |
---|---|---|
Controlador de función | Winusb.sys proporcionados por Microsoft (controlador en modo kernel). | Winusb.sys proporcionados por Microsoft (controlador en modo kernel). |
Controlador de filtro | Si los controladores de filtro están presentes, el acceso se limita a las aplicaciones con privilegios. El OEM declara la aplicación como aplicaciones con privilegios en los metadatos del dispositivo. | El controlador de filtro puede estar presente en la pila de dispositivos en modo kernel, siempre y cuando no bloquee el acceso aWinusb.sys. |
Ejemplos de código
Muestra | Aplicación para UWP | Aplicación de escritorio de Windows |
---|---|---|
Introducción a estos ejemplos |
|
Herramientas de desarrollo
Herramientas de desarrollo | Aplicación para UWP | Aplicación de escritorio de Windows |
---|---|---|
Entorno del desarrollador | Microsoft Visual Studio 2013 Kit de desarrollo de software (SDK) de Microsoft Windows para Windows 8.1 |
Use la plantilla aplicación WinUSB incluida con Visual Studio (Ultimate o Professional) y Windows Driver Kit (WDK) 8 o posterior. Para transferencias isócrónicas, Visual Studio 2013 con Windows Driver Kit (WDK) 8.1 o posterior. |
Lenguajes de programación | C#, VB.NET, C++, JavaScript | C/C++ |
Implementación de características
Escenario clave | Aplicación para UWP | Aplicación de escritorio de Windows |
---|---|---|
Detección de dispositivos | Use el espacio de nombres Windows.Devices.Enumeration para obtener un dispositivo UsbDevice. | Use SetupAPI y WinUsb_Initialize para obtener un WINUSB_INTERFACE_HANDLE. |
Transferencia de control USB | UsbSetupPacket UsbControlRequestType UsbDevice.SendControlInTransferAsync UsbDevice.SendControlOutTransferAsync |
WINUSB_SETUP_PACKET WinUsb_ControlTransfer |
Obtención de descriptores USB | UsbDevice.DeviceDescriptor UsbConfiguration.Descriptors UsbInterface.Descriptors UsbEndpointDescriptor |
WinUsb_GetDescriptor |
Envío de transferencia masiva USB | UsbBulkInPipe UsbBulkOutPipe |
WinUsb_ReadPipe WinUsb_WritePipe |
Envío de transferencia de interrupciones USB | UsbInterruptInPipe UsbInterruptOutPipe |
WinUsb_ReadPipe WinUsb_WritePipe |
Envío de transferencia isócrónica USB | No compatible. | WinUsb_ReadIsochPipe WinUsb_ReadIsochPipeAsap WinUsb_WriteIsochPipe WinUsb_WriteIsochPipeAsap |
Cerrar el dispositivo | UsbDevice.Close | WinUsb_Free |
Documentación
Documentación | Aplicación para UWP | Aplicación de escritorio de Windows |
---|---|---|
Guía de programación | Hablar con dispositivos USB, empezar a finalizar | Cómo acceder a un dispositivo USB mediante funciones winUSB |
referencia de API | Windows.Devices.Usb | Funciones winUSB |