Windows.Devices.SerialCommunication Espacio de nombres
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
El Windows.Devices.SerialCommunication
espacio de nombres define Windows Runtime clases que una aplicación para UWP puede usar para comunicarse con un dispositivo que expone un puerto serie o alguna abstracción de un puerto serie. Las clases proporcionan funcionalidad para detectar estos dispositivos serie, leer y escribir datos, y controlar las propiedades específicas de serie para el control de flujo, como establecer velocidad en baudios, estados de señal.
Compatibilidad con dispositivos
Un dispositivo serie se expondrá al sistema mediante la propiedad DEVPKEY_Device_ClassGuid
= {4d36e978-e325-11ce-bfc1-08002be10318}
y creará un DeviceInterface con DEVPKEY_DeviceInterface_ClassGuid
= {86e0d1e0-8089-11d0-9ce4-08003e301f73}
(GUID_DEVINTERFACE_COMPORT
).
Windows admite de forma nativa los puertos expuestos por adaptadores serie a USB que pertenecen a la clase de dispositivo USB-CDC mediante el controlador de bandeja de entrada usbser.sys
(como los usados en Arduino Uno R3s). Los identificadores compatibles con USB-CDC son:
USB\Class_02&SubClass_02&Prot_01
USB\Class_02&SubClass_02
También se admiten otros adaptadores serie a USB (como FTDI/Prolífico/Silicon-Labs) que exponen GUID_DEVINTERFACE_COMPORT
s, pero requieren controladores específicos del proveedor adicionales.
Los puertos serie marcados como internos para la máquina (DEVPKEY_Device_InLocalMachineContainer == TRUE
) no son accesibles a menos que el controlador del proveedor se marque explícitamente como sin restricciones (DEVPKEY_DeviceInterface_Restricted == TRUE
). Los dispositivos se conectan a través de la mayoría de las tarjetas de expansión de puertos PCI COM, por lo tanto , no son accesibles.
Los puertos serie inaccesibles todavía se pueden enumerar mediante DeviceInformation.FindAllAsync(), pero no se pueden abrir mediante SerialDevice.FromIdAsync(). Al abrir este tipo de dispositivo, se producirá una excepción o se devolverá null. Las aplicaciones deben controlar este caso filtrando estos puertos serie desde la vista del usuario, de modo que el usuario no pueda interactuar con este puerto serie no admitido.
Es posible que la colección DeviceInformation devuelta por DeviceInformation.FindAllAsync() tenga un dispositivo serie cuya propiedad DeviceInformation.Name esté establecida en el nombre del equipo. Esto es así por diseño y puede producirse al enumerar un puerto serie incorporado. Las aplicaciones deben controlar este caso mediante:
- Filtrar estos puertos serie desde la vista del usuario, de modo que el usuario no pueda interactuar con este puerto serie no admitido.
- Si la aplicación decide permitir que el usuario interactúe con este puerto serie, tenga en cuenta que cuando la aplicación llama a la función DeviceAccessInformation.CreateFromId(), una excepción con el mensaje: "El sistema no encuentra el archivo especificado. (Excepción de HRESULT: 0x80070002)" se producirá. La aplicación debe controlar este tipo de excepción y informar al usuario de que el puerto no es compatible.
La directiva de acceso y funcionalidad siempre se puede invalidar escribiendo un controlador personalizado y la aplicación de soporte técnico de hardware coincidente.
Funcionalidades del dispositivo serie
La aplicación para UWP debe incluir ciertas funcionalidades del dispositivo en su manifiesto del paquete de aplicación. Las funcionalidades identifican el dispositivo y su propósito. Estos son los elementos necesarios en orden jerárquico:
Desde Windows 10, versión 1809 (actualización de octubre de 2018)
Desde 1809, el vidpid y el tipo de función ya no necesitan especificarse y se omitirán en estos sistemas. Si el destino de los sistemas es anterior a 1809, consulte a continuación.
- <DeviceCapability>: el atributo Name debe ser
serialcommunication
.
<DeviceCapability Name="serialcommunication"/>
Antes de Windows 10, versión 1809 (actualización de octubre de 2018)
<DeviceCapability>: el atributo Name debe ser
serialcommunication
.<Dispositivo>: el atributo Id debe especificar el identificador del dispositivo. Si usa un adaptador serie a USB, el identificador debe especificar identificadores de proveedor o producto o puede ser "cualquiera" para permitir el acceso a cualquier dispositivo que coincida con el tipo de función.
- <Función>: el atributo Type especifica la función del dispositivo. Para los dispositivos serie, debe ser
serialPort
.
- <Función>: el atributo Type especifica la función del dispositivo. Para los dispositivos serie, debe ser
<DeviceCapability Name="serialcommunication">
<Device Id="vidpid:xxxx xxxx">
<Function Type="name:serialPort"/>
</Device>
</DeviceCapability>
Ejemplo de funcionalidad del dispositivo serie
Este es un ejemplo para definir funcionalidades de dispositivo serie. Permite que la aplicación acceda al puerto serie a través de un adaptador serie a USB.
<DeviceCapability Name="serialcommunication">
<Device Id="vidpid:045E 0610">
<Function Type="name:serialPort"/>
</Device>
</DeviceCapability>
Solución de problemas
- Compruebe que la funcionalidad serie (
serialcommunication
) está en el manifiesto de aplicación. - Compruebe que el usuario ha concedido permiso para que la aplicación use dispositivos serie.
- Los dispositivos internos de la máquina (
DEVPKEY_Device_InLocalMachineContainer == TRUE
) no suelen ser accesibles. (por ejemplo, tarjetas de expansión de puertos PCI COM)- A menos que la propiedad
DEVPKEY_DeviceInterface_Restricted
de interfaz de dispositivo deGUID_DEVINTERFACE_COMPORT
esté establecidaFALSE
en , no se puede acceder a los dispositivos internos. Algunos controladores, especialmente en las SKU de IoT, pueden establecer esta propiedadFALSE
en . - Si tiene acceso a un controlador serie basado en
SerCx
oSerCx2
después a partir de Windows 10 1903 (actualización de mayo de 2019), el dispositivo puede optar por ser accesible directamente desde el modo de usuario o habilitandoRhProxy
.
- A menos que la propiedad
- Estas restricciones se pueden omitir al realizar un dispositivo personalizado trabajando con el desarrollador de controladores para crear una aplicación de soporte técnico de hardware.
Clases
ErrorReceivedEventArgs |
Representa el objeto que se pasa como parámetro al controlador de eventos que se invoca cuando se produce un error en el puerto serie. |
PinChangedEventArgs |
Representa el objeto que se pasa como parámetro al controlador de eventos que se invoca cuando el estado de una línea de señal cambia en el puerto serie. |
SerialDevice |
Representa un puerto serie. El objeto proporciona métodos y propiedades que una aplicación puede usar para buscar e interactuar con puertos serie en el sistema. |
Enumeraciones
SerialError |
Define los valores de las condiciones de error que se pueden producir en el puerto serie. |
SerialHandshake |
Define los valores de los protocolos de control de flujo de hardware y software usados en la comunicación en serie. La propiedad Handshake usa los valores en el objeto SerialDevice . |
SerialParity |
Define valores para el bit de paridad para la transmisión de datos serie. La propiedad Parity usa los valores en el objeto SerialDevice . |
SerialPinChange |
Define valores para los tipos de cambios de estado de señal en el puerto serie. |
SerialStopBitCount |
Define valores que indican el número de bits de detención usados en una transmisión. La propiedad StopBits usa los valores del objeto SerialDevice . |