Windows.Devices.SerialCommunication Namespace

Der Windows.Devices.SerialCommunication Namespace definiert Windows-Runtime Klassen, die eine UWP-App für die Kommunikation mit einem Gerät verwenden kann, das einen seriellen Port oder eine Abstraktion eines seriellen Ports verfügbar macht. Die Klassen bieten Funktionen zum Ermitteln solcher serieller Geräte, zum Lesen und Schreiben von Daten und zum Steuern serieller Eigenschaften für die Flusssteuerung, z. B. Festlegen der Baudrate und signalisierter Zustände.

Geräteunterstützung

Ein serielles Gerät macht sich durch die -Eigenschaft DEVPKEY_Device_ClassGuid = {4d36e978-e325-11ce-bfc1-08002be10318} für das System verfügbar und erstellt eine DeviceInterface mit = DEVPKEY_DeviceInterface_ClassGuid{86e0d1e0-8089-11d0-9ce4-08003e301f73} ().GUID_DEVINTERFACE_COMPORT

Windows unterstützt nativ Ports, die von Serial-to-USB-Adaptern verfügbar gemacht werden, die zur USB-CDC-Geräteklasse gehören, indem der Posteingangstreiber usbser.sys verwendet wird (z. B. solche, die in Arduino Uno R3s verwendet werden). USB-CDC-kompatible IDs sind:

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

Andere Serial-to-USB-Adapter (z. B. FTDI/Prolific/Silicon-Labs), die s verfügbar machen GUID_DEVINTERFACE_COMPORT, werden ebenfalls unterstützt, erfordern jedoch zusätzliche herstellerspezifische Treiber.

Serielle Ports, die als intern für den Computer (DEVPKEY_Device_InLocalMachineContainer == TRUE) gekennzeichnet sind, sind nur zugänglich, wenn der Anbietertreiber explizit als uneingeschränkt (DEVPKEY_DeviceInterface_Restricted == TRUE) gekennzeichnet ist. Geräte, die über die meisten PCI-COM-Porterweiterungskarten verbunden werden, sind daher nicht zugänglich.

Auf nicht zugegriffene serielle Ports werden möglicherweise weiterhin von DeviceInformation.FindAllAsync() aufgezählt, können aber nicht mit SerialDevice.FromIdAsync() geöffnet werden. Wenn Sie ein solches Gerät öffnen, wird entweder eine Ausnahme ausgelöst oder NULL zurückgegeben. Apps sollten diesen Fall behandeln, indem sie solche seriellen Ports aus der Ansicht des Benutzers filtern, sodass der Benutzer nicht mit einem solchen nicht unterstützten seriellen Port interagieren kann.

Es ist möglich, dass die von DeviceInformation.FindAllAsync() zurückgegebene DeviceInformation-Auflistung über ein serielles Gerät verfügt, dessen DeviceInformation.Name -Eigenschaft auf den Computernamen festgelegt ist. Dies ist beabsichtigt und kann beim Aufzählen eines integrierten seriellen Ports auftreten. Apps sollten diesen Fall wie folgt behandeln:

  • Filtern solcher serieller Ports aus der Benutzeransicht, sodass der Benutzer überhaupt nicht mit einem solchen nicht unterstützten seriellen Port interagieren kann.
  • Wenn die App beschließt, den Benutzer mit einem solchen seriellen Port interagieren zu lassen, beachten Sie, dass, wenn die App die Funktion DeviceAccessInformation.CreateFromId() aufruft, eine Ausnahme mit der Meldung "Das System kann die angegebene Datei nicht finden. (Ausnahme von HRESULT: 0x80070002)" wird ausgelöst. Die App sollte eine solche Ausnahme behandeln und den Benutzer darüber informieren, dass der Port nicht unterstützt wird.

Zugriffs-/Funktionsrichtlinie kann immer überschrieben werden, indem ein benutzerdefinierter Treiber und eine entsprechende Hardwareunterstützungs-App geschrieben wird.

Funktionen für serielle Geräte

Ihre UWP-App muss bestimmte Gerätefunktionen im App-Paketmanifest enthalten. Die Funktionen identifizieren das Gerät und seinen Zweck. Hier sind die erforderlichen Elemente in hierarchischer Reihenfolge:

Seit Windows 10, Version 1809 (Update oktober 2018)

Seit 1809 müssen vidpid und function-type nicht mehr angegeben werden und werden auf diesen Systemen ignoriert. Wenn Systeme vor 1809 als Ziel verwendet werden, lesen Sie unten.

<DeviceCapability Name="serialcommunication"/>

Vor Windows 10, Version 1809 (Update oktober 2018)

  • <DeviceCapability>: Das Name-Attribut muss sein serialcommunication.

    • <Gerät>: Das Id-Attribut muss den Gerätebezeichner angeben. Wenn Sie einen Serial-to-USB-Adapter verwenden, muss id Hersteller-/Produktbezeichner angeben oder kann "beliebige" sein, um den Zugriff auf jedes Gerät zu ermöglichen, das dem Funktionstyp entspricht.

      • <Funktion>: Das Type-Attribut gibt die Gerätefunktion an. Bei seriellen Geräten muss dies sein serialPort.
<DeviceCapability Name="serialcommunication">
    <Device Id="vidpid:xxxx xxxx">
      <Function Type="name:serialPort"/>
    </Device>
</DeviceCapability>

Beispiel für die Funktion serieller Geräte

Im Folgenden finden Sie ein Beispiel für die Definition von Funktionen für serielle Geräte. Es ermöglicht der App, über einen Serial-to-USB-Adapter auf den seriellen Port zuzugreifen.

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

Problembehandlung

  • Überprüfen Sie, ob sich die serielle Funktion (serialcommunication) im Anwendungsmanifest befindet.
  • Vergewissern Sie sich, dass der Benutzer der Anwendung die Berechtigung zur Verwendung serieller Geräte erteilt hat.
  • Auf computerinterne Geräte (DEVPKEY_Device_InLocalMachineContainer == TRUE) kann im Allgemeinen nicht zugegriffen werden. (z. B. PCI-COM-Porterweiterungskarten)
    • Es sei denn, die Geräteschnittstelleneigenschaft DEVPKEY_DeviceInterface_Restricted für GUID_DEVINTERFACE_COMPORT ist auf FALSEfestgelegt, sind interne Geräte nicht zugänglich. Bestimmte Treiber, insbesondere für IoT-SKUs, können diese Eigenschaft auf FALSEfestlegen.
    • Wenn Sie auf einen seriellen Controller zugreifen, der auf SerCx oder SerCx2 dann Windows 10 1903 (Mai 2019 Update) basiert, kann das Gerät über den Benutzermodus oder durch Aktivieren RhProxydirekt darauf zugreifen.
  • Diese Einschränkungen können beim Erstellen eines benutzerdefinierten Geräts umgangen werden, indem sie mit dem Treiberentwickler eine Hardwaresupport-App erstellen.

Klassen

ErrorReceivedEventArgs

Stellt das Objekt dar, das als Parameter an den Ereignishandler übergeben wird, der aufgerufen wird, wenn ein Fehler am seriellen Port auftritt.

PinChangedEventArgs

Stellt das -Objekt dar, das als Parameter an den Ereignishandler übergeben wird, der aufgerufen wird, wenn sich der Zustand einer Signallinie am seriellen Port ändert.

SerialDevice

Stellt einen seriellen Port dar. Das -Objekt stellt Methoden und Eigenschaften bereit, die eine App zum Suchen und Interagieren mit seriellen Ports im System verwenden kann.

Enumerationen

SerialError

Definiert Werte für Fehlerbedingungen, die am seriellen Port auftreten können.

SerialHandshake

Definiert Werte für Hardware- und Softwareflusssteuerungsprotokolle, die in der seriellen Kommunikation verwendet werden. Die Werte werden von der Handshake-Eigenschaft für das SerialDevice-Objekt verwendet.

SerialParity

Definiert Werte für das Paritätsbit für die serielle Datenübertragung. Die Werte werden von der Parity-Eigenschaft für das SerialDevice-Objekt verwendet.

SerialPinChange

Definiert Werte für Typen von Signalzustandsänderungen am seriellen Port.

SerialStopBitCount

Definiert Werte, die die Anzahl der in einer Übertragung verwendeten Stoppbits angeben. Die Werte werden von der StopBits-Eigenschaft für das SerialDevice-Objekt verwendet.

Weitere Informationen