Windows.Devices.SerialCommunication Namespace
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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>: Das Name-Attribut muss sein
serialcommunication
.
<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
.
- <Funktion>: Das Type-Attribut gibt die Gerätefunktion an. Bei seriellen Geräten muss dies sein
<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ürGUID_DEVINTERFACE_COMPORT
ist aufFALSE
festgelegt, sind interne Geräte nicht zugänglich. Bestimmte Treiber, insbesondere für IoT-SKUs, können diese Eigenschaft aufFALSE
festlegen. - Wenn Sie auf einen seriellen Controller zugreifen, der auf
SerCx
oderSerCx2
dann Windows 10 1903 (Mai 2019 Update) basiert, kann das Gerät über den Benutzermodus oder durch AktivierenRhProxy
direkt darauf zugreifen.
- Es sei denn, die Geräteschnittstelleneigenschaft
- 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. |