Windows.Devices.SerialCommunication Espace de noms

L’espace Windows.Devices.SerialCommunication de noms définit Windows Runtime classes qu’une application UWP peut utiliser pour communiquer avec un appareil qui expose un port série ou une abstraction d’un port série. Les classes fournissent des fonctionnalités permettant de découvrir ces périphériques série, de lire et d’écrire des données, et de contrôler les propriétés spécifiques à la série pour le contrôle de flux, telles que la définition du débit en bauds et des états de signal.

Prise en charge des appareils

Un appareil série s’expose au système par la propriété DEVPKEY_Device_ClassGuid = {4d36e978-e325-11ce-bfc1-08002be10318} et crée un DeviceInterface avec = DEVPKEY_DeviceInterface_ClassGuid{86e0d1e0-8089-11d0-9ce4-08003e301f73} ().GUID_DEVINTERFACE_COMPORT

Windows prend en charge en mode natif les ports exposés par les adaptateurs série-USB qui appartiennent à la classe de périphérique USB-CDC à l’aide du pilote de boîte de réception usbser.sys (tels que ceux utilisés dans Arduino Uno R3s). Les ID compatibles USB-CDC sont les suivants :

  • USB\Class_02&SubClass_02&Prot_01
  • USB\Class_02&SubClass_02

D’autres adaptateurs série-USB (tels que FTDI/Prolific/Silicon-Labs) qui exposent GUID_DEVINTERFACE_COMPORTdes s sont également pris en charge, mais nécessitent des pilotes supplémentaires spécifiques au fournisseur.

Les ports série marqués comme internes à la machine (DEVPKEY_Device_InLocalMachineContainer == TRUE) ne sont pas accessibles, sauf s’ils sont explicitement marqués par le pilote du fournisseur comme non restreints (DEVPKEY_DeviceInterface_Restricted == TRUE). Les appareils se connectent par le biais de la plupart des cartes d’extension de port COM PCI ne sont donc pas accessibles.

Les ports série inaccessibles peuvent toujours être énumérés par DeviceInformation.FindAllAsync(), mais ne peuvent pas être ouverts par SerialDevice.FromIdAsync(). Le fait de tenter d’ouvrir un tel appareil lève une exception ou retourne la valeur Null. Les applications doivent gérer ce cas en filtrant ces ports série de l’affichage de l’utilisateur, afin que l’utilisateur ne puisse pas interagir avec un port série non pris en charge.

Il est possible que la collection DeviceInformation retournée par DeviceInformation.FindAllAsync() ait un appareil série dont la propriété DeviceInformation.Name est définie sur le nom de l’ordinateur. Cela est dû à la conception et peut se produire lors de l’énumération d’un port série intégré. Les applications doivent gérer ce cas en procédant comme suit :

  • Filtrage de ces ports série à partir de l’affichage de l’utilisateur, afin que l’utilisateur ne puisse pas interagir avec un tel port série non pris en charge.
  • Si l’application décide de laisser l’utilisateur interagir avec un tel port série, notez que lorsque l’application appelle la fonction DeviceAccessInformation.CreateFromId(), une exception avec le message : « Le système ne trouve pas le fichier spécifié. (Exception de HRESULT : 0x80070002) » est levée. L’application doit gérer une telle exception et informer l’utilisateur que le port n’est pas pris en charge.

La stratégie d’accessibilité/fonctionnalité peut toujours être remplacée par l’écriture d’un pilote personnalisé et d’une application de prise en charge matérielle correspondante

Fonctionnalités d’appareil série

Votre application UWP doit inclure certaines fonctionnalités d’appareil dans son manifeste de package d’application. Les fonctionnalités identifient l’appareil et son objectif. Voici les éléments requis dans l’ordre hiérarchique :

Depuis Windows 10, version 1809 (mise à jour d’octobre 2018)

Depuis 1809, le vidpid et le type de fonction n’ont plus besoin d’être spécifiés et seront ignorés sur ces systèmes. Si vous ciblez des systèmes avant 1809, consultez ci-dessous.

<DeviceCapability Name="serialcommunication"/>

Avant Windows 10, version 1809 (mise à jour d’octobre 2018)

  • <DeviceCapability> : l’attribut Name doit être serialcommunication.

    • <Appareil> : l’attribut Id doit spécifier l’identificateur de l’appareil. Si vous utilisez un adaptateur série-à-USB, l’ID doit spécifier les identificateurs fournisseur/produit ou peut être « n’importe quel » pour autoriser l’accès à n’importe quel appareil qui correspond au type de fonction.

      • <Fonction> : l’attribut Type spécifie la fonction d’appareil. Pour les appareils série, il doit s’agir de serialPort.
<DeviceCapability Name="serialcommunication">
    <Device Id="vidpid:xxxx xxxx">
      <Function Type="name:serialPort"/>
    </Device>
</DeviceCapability>

Exemple de fonctionnalité d’appareil série

Voici un exemple de définition des fonctionnalités d’appareil série. Il permet à l’application d’accéder au port série via un adaptateur série vers USB.

<DeviceCapability Name="serialcommunication">
  <Device Id="vidpid:045E 0610">
    <Function Type="name:serialPort"/>
  </Device>
</DeviceCapability>

Résolution des problèmes

  • Vérifiez que la fonctionnalité série (serialcommunication) se trouve dans le manifeste de l’application.
  • Vérifiez que l’utilisateur a accordé l’autorisation à l’application d’utiliser des appareils série.
  • Les appareils internes à l’ordinateur (DEVPKEY_Device_InLocalMachineContainer == TRUE) ne sont généralement pas accessibles. (par exemple, cartes d’extension de port COM PCI)
    • Sauf si la propriété DEVPKEY_DeviceInterface_Restricted d’interface d’appareil pour GUID_DEVINTERFACE_COMPORT est définie sur FALSE, les appareils internes ne sont pas accessibles. Certains pilotes, en particulier sur les références SKU IoT, peuvent définir cette propriété sur FALSE.
    • Si vous accédez à un contrôleur série basé sur SerCx ou SerCx2 à partir de Windows 10 1903 (mise à jour de mai 2019), l’appareil peut choisir d’être directement accessible à partir du mode utilisateur ou en activant RhProxy.
  • Ces restrictions peuvent être contournées lors de la création d’un appareil personnalisé en travaillant avec le pilote-développeur pour créer une application de support matériel

Classes

ErrorReceivedEventArgs

Représente l’objet passé en tant que paramètre au gestionnaire d’événements appelé lorsque l’erreur se produit sur le port série.

PinChangedEventArgs

Représente l’objet passé en tant que paramètre au gestionnaire d’événements appelé lorsque l’état d’une ligne de signal change sur le port série.

SerialDevice

Représente un port série. L’objet fournit des méthodes et des propriétés qu’une application peut utiliser pour rechercher et interagir avec les ports série sur le système.

Énumérations

SerialError

Définit des valeurs pour les conditions d’erreur qui peuvent se produire sur le port série.

SerialHandshake

Définit des valeurs pour les protocoles de contrôle de flux matériels et logiciels utilisés dans la communication en série. Les valeurs sont utilisées par la propriété Handshake sur l’objet SerialDevice .

SerialParity

Définit des valeurs pour le bit de parité pour la transmission de données série. Les valeurs sont utilisées par la propriété Parity sur l’objet SerialDevice .

SerialPinChange

Définit des valeurs pour les types de modifications d’état du signal sur le port série.

SerialStopBitCount

Définit des valeurs qui indiquent le nombre de bits d’arrêt utilisés dans une transmission. Les valeurs sont utilisées par la propriété StopBits sur l’objet SerialDevice .

Voir aussi