Windows.Devices.SerialCommunication Espacio de nombres

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_COMPORTs, 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 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.
<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 de GUID_DEVINTERFACE_COMPORT esté establecida FALSEen , no se puede acceder a los dispositivos internos. Algunos controladores, especialmente en las SKU de IoT, pueden establecer esta propiedad FALSEen .
    • Si tiene acceso a un controlador serie basado enSerCx o SerCx2 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 habilitando RhProxy.
  • 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 .

Consulte también