Windows.Devices.SerialCommunication Spazio dei nomi

Lo Windows.Devices.SerialCommunication spazio dei nomi definisce Windows Runtime classi che un'app UWP può usare per comunicare con un dispositivo che espone una porta seriale o un'astrazione di una porta seriale. Le classi forniscono funzionalità per individuare tali dispositivi seriali, leggere e scrivere dati e controllare proprietà specifiche della serie per il controllo del flusso, ad esempio l'impostazione della frequenza baud, gli stati del segnale.

Supporto dei dispositivi

Un dispositivo seriale si espone al sistema dalla proprietà DEVPKEY_Device_ClassGuid = {4d36e978-e325-11ce-bfc1-08002be10318} e crea un oggetto DeviceInterface con = DEVPKEY_DeviceInterface_ClassGuid{86e0d1e0-8089-11d0-9ce4-08003e301f73} ().GUID_DEVINTERFACE_COMPORT

Windows supporta in modo nativo le porte esposte da adattatori seriali a USB che appartengono alla classe di dispositivo USB-CDC usando il driver posta in arrivo usbser.sys (ad esempio quelli usati in Arduino Uno R3s). Gli ID compatibili con USB-CDC sono:

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

Sono supportati anche altri adattatori da seriale a USB (ad esempio FTDI/Prolific/Silicon-Labs) che espongono GUID_DEVINTERFACE_COMPORT, ma richiedono driver aggiuntivi specifici del fornitore.

Le porte seriali contrassegnate come interne al computer (DEVPKEY_Device_InLocalMachineContainer == TRUE) non sono accessibili a meno che non vengano contrassegnate esplicitamente dal driver del fornitore come senza restrizioni (DEVPKEY_DeviceInterface_Restricted == TRUE). I dispositivi si connettono tramite la maggior parte delle schede di espansione delle porte COM PCI non sono quindi accessibili.

Le porte seriali inaccessibili possono comunque essere enumerate da DeviceInformation.FindAllAsync(), ma non possono essere aperte da SerialDevice.FromIdAsync(). L'attemping per aprire tale dispositivo genererà un'eccezione o restituirà Null. Le app devono gestire questo caso filtrando tali porte seriali dalla visualizzazione dell'utente, in modo che l'utente non sarà in grado di interagire con tale porta seriale non supportata.

È possibile che l'insieme DeviceInformation restituito da DeviceInformation.FindAllAsync() abbia un dispositivo seriale la cui proprietà DeviceInformation.Name è impostata sul nome del computer. Questo avviene per impostazione predefinita e può verificarsi durante l'enumerazione di una porta seriale di onboarding. Le app devono gestire questo caso in uno dei due casi:

  • Filtro di tali porte seriali dalla visualizzazione dell'utente, in modo che l'utente non sarà in grado di interagire con tale porta seriale non supportata.
  • Se l'app decide di consentire all'utente di interagire con tale porta seriale, si noti che quando l'app chiama la funzione DeviceAccessInformation.CreateFromId(), un'eccezione con il messaggio: "Il sistema non riesce a trovare il file specificato. (Eccezione da HRESULT: 0x80070002)" verrà generata. L'app deve gestire tale eccezione e informare l'utente che la porta non è supportata.

È sempre possibile eseguire l'override dei criteri di accessibilità o funzionalità scrivendo un driver personalizzato e un'app di supporto hardware corrispondente

Funzionalità del dispositivo seriale

L'app UWP deve includere determinate funzionalità del dispositivo nel manifesto del pacchetto dell'app. Le funzionalità identificano il dispositivo e il relativo scopo. Ecco gli elementi obbligatori in ordine gerarchico:

Dal Windows 10, versione 1809 (aggiornamento di ottobre 2018)

Dal 1809, il vidpid e il tipo di funzione non devono più essere specificati e verranno ignorati in questi sistemi. Se la destinazione dei sistemi è precedente alla versione 1809, vedere di seguito.

<DeviceCapability Name="serialcommunication"/>

Prima Windows 10, versione 1809 (aggiornamento di ottobre 2018)

  • <DeviceCapability>: l'attributo Name deve essere serialcommunication.

    • <Dispositivo>: l'attributo Id deve specificare l'identificatore del dispositivo. Se si usa una scheda da seriale a USB, l'ID deve specificare identificatori fornitore/prodotto o può essere "qualsiasi" per consentire l'accesso a qualsiasi dispositivo corrispondente al tipo di funzione.

      • <Funzione>: l'attributo Type specifica la funzione device. Per i dispositivi seriali deve essere serialPort.
<DeviceCapability Name="serialcommunication">
    <Device Id="vidpid:xxxx xxxx">
      <Function Type="name:serialPort"/>
    </Device>
</DeviceCapability>

Esempio di funzionalità del dispositivo seriale

Di seguito è riportato un esempio per la definizione delle funzionalità del dispositivo seriale. Consente all'app di accedere alla porta seriale tramite una scheda da seriale a USB.

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

Risoluzione dei problemi

  • Verificare che la funzionalità seriale (serialcommunication) sia presente nel manifesto dell'applicazione.
  • Verificare che all'utente sia stata concessa l'autorizzazione per l'utilizzo dei dispositivi seriali da parte dell'applicazione.
  • I dispositivi interni del computer (DEVPKEY_Device_InLocalMachineContainer == TRUE) in genere non sono accessibili. ad esempio schede di espansione delle porte PCI COM
    • A meno che la proprietà DEVPKEY_DeviceInterface_Restricted dell'interfaccia del dispositivo per GUID_DEVINTERFACE_COMPORT non sia impostata su FALSE, i dispositivi interni non sono accessibili. Alcuni driver, in particolare per gli SKU IoT, possono impostare questa proprietà su FALSE.
    • Se si accede a un controller seriale basato su SerCx o SerCx2 quindi a partire da Windows 10 1903 (aggiornamento di maggio 2019), il dispositivo può acconsentire esplicitamente per essere accessibile direttamente dalla modalità utente o abilitando RhProxy.
  • Queste restrizioni possono essere ignorate quando si crea un dispositivo personalizzato usando il driver-sviluppatore per creare un'app di supporto hardware

Classi

ErrorReceivedEventArgs

Rappresenta l'oggetto passato come parametro al gestore eventi richiamato quando si verifica un errore sulla porta seriale.

PinChangedEventArgs

Rappresenta l'oggetto passato come parametro al gestore eventi richiamato quando lo stato di una linea di segnale cambia sulla porta seriale.

SerialDevice

Rappresenta una porta seriale. L'oggetto fornisce metodi e proprietà che un'app può usare per trovare e interagire con le porte seriali nel sistema.

Enumerazioni

SerialError

Definisce i valori per le condizioni di errore che possono verificarsi sulla porta seriale.

SerialHandshake

Definisce i valori per i protocolli di controllo del flusso hardware e software usati nella comunicazione seriale. I valori vengono utilizzati dalla proprietà Handshake nell'oggetto SerialDevice .

SerialParity

Definisce i valori per il bit di parità per la trasmissione dei dati seriali. I valori vengono utilizzati dalla proprietà Parity nell'oggetto SerialDevice .

SerialPinChange

Definisce i valori per i tipi di modifiche dello stato del segnale sulla porta seriale.

SerialStopBitCount

Definisce i valori che indicano il numero di bit di arresto utilizzati in una trasmissione. I valori vengono utilizzati dalla proprietà StopBits nell'oggetto SerialDevice .

Vedi anche