Windows.Devices.SerialCommunication 命名空間

Windows.Devices.SerialCommunication命名空間會定義 UWP app 可用來與公開序列埠或序列埠某些抽象概念的裝置通訊的Windows 執行階段類別。 類別提供功能來探索這類序列裝置、讀取和寫入資料,以及控制流程式控制制的特定序列屬性,例如設定傳輸速率、訊號狀態。

裝置支援

序列裝置會依 屬性 DEVPKEY_Device_ClassGuid = {4d36e978-e325-11ce-bfc1-08002be10318} 向系統公開本身,並建立具有 = DEVPKEY_DeviceInterface_ClassGuid{86e0d1e0-8089-11d0-9ce4-08003e301f73} (GUID_DEVINTERFACE_COMPORT) 的 DeviceInterface。

Windows 原生支援使用收件匣 usbser.sys 驅動程式的串列轉 USB 介面卡公開的埠,這些埠屬於 USB-CDC 裝置類別 (,例如 Arduino Uno R3s) 中使用的埠。 USB-CDC 相容識別碼如下:

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

也支援其他串列到 USB 介面卡 (,例如 FTDI/Prolific/Silicon-Labs) GUID_DEVINTERFACE_COMPORT ,但需要額外的廠商特定驅動程式。

除非廠商驅動程式明確標示為不受限制 () DEVPKEY_DeviceInterface_Restricted == TRUE ,否則無法存取標示為電腦內部 (DEVPKEY_Device_InLocalMachineContainer == TRUE) 的序列埠。 因此 ,無法 存取透過大部分 PCI COM 埠擴充卡連線的裝置。

DeviceInformation.FindAllAsync () 仍可能列舉無法存取的序列埠,但無法由SerialDevice.FromIdAsync () 開啟。 嘗試開啟這類裝置時,將會擲回例外狀況或傳回 Null。 應用程式應該藉由從使用者的檢視篩選這類序列埠來處理此案例,讓使用者無法與這類不支援的序列埠互動。

DeviceInformation.FindAllAsync () 傳回的DeviceInformation集合可能具有串列裝置,其 DeviceInformation.Name屬性設定為電腦名稱稱。 這是設計方式,而且可能會在列舉上線序列埠時發生。 應用程式應透過下列其中一項來處理此案例:

  • 從使用者的檢視篩選這類序列埠,讓使用者完全無法與這類不支援的序列埠互動。
  • 如果應用程式決定讓使用者與這類序列埠互動,請注意,當應用程式呼叫 DeviceAccessInformation.CreateFromId () 函式時,訊息為例外狀況:「系統找不到指定的檔案。 (HRESULT 的例外狀況:將會擲回0x80070002) 」。 應用程式應該處理這類例外狀況,並讓使用者知道埠不受支援。

撰寫自訂驅動程式和比對的硬體支援應用程式,一律可以覆寫存取性/功能原則

序列裝置功能

您的 UWP app 在其應用程式套件資訊清單中必須包含特定裝置功能。 這些功能會識別裝置及其用途。 以下是階層式順序的必要元素:

自 Windows 10 版本 1809 (2018 年 10 月更新)

自 1809 起,不再需要指定 viDPId 和函式類型,而且將會忽略這些系統上。 如果以 1809 之前的系統為目標,請參閱下方。

<DeviceCapability Name="serialcommunication"/>

2018 年 10 月更新) 之前Windows 10 版本 1809 (

  • < DeviceCapability >Name屬性必須是 serialcommunication

    • < 裝置 >Id屬性必須指定裝置識別碼。 如果您使用序列到 USB 介面卡, 識別碼 必須指定廠商/產品識別碼,或可以是「任何」,以允許存取符合函式類型的任何裝置。

      • < 函式 >Type屬性會指定裝置函式。 對於序列裝置,這必須是 serialPort
<DeviceCapability Name="serialcommunication">
    <Device Id="vidpid:xxxx xxxx">
      <Function Type="name:serialPort"/>
    </Device>
</DeviceCapability>

序列裝置功能範例

以下是定義序列裝置功能的範例。 它可讓應用程式透過序列到 USB 介面卡來存取序列埠。

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

疑難排解

  • 確認 () 位於應用程式資訊清單中的序列功能 serialcommunication
  • 確認使用者已授與應用程式使用序列裝置的許可權。
  • 機器內部裝置 (DEVPKEY_Device_InLocalMachineContainer == TRUE) 通常 無法 存取。 (例如 PCI COM 埠擴充卡)
    • 除非 的 GUID_DEVINTERFACE_COMPORT 裝置介面屬性 DEVPKEY_DeviceInterface_Restricted 設定 FALSE 為 ,否則無法存取內部裝置。 某些驅動程式,特別是在 IoT SKU 上,可能會將這個屬性設定為 FALSE
    • 如果根據SerCxSerCx2啟動 Windows 10 1903 (2019 年 5 月更新來存取序列控制器,) 裝置可以選擇直接從使用者模式或啟用 RhProxy 來存取 。
  • 使用驅動程式開發人員建立硬體支援應用程式,即可略過這些限制

類別

ErrorReceivedEventArgs

表示當序列埠發生錯誤時,做為參數傳遞至事件處理常式的物件。

PinChangedEventArgs

表示當訊號線的狀態在序列埠上變更時所叫用之事件處理常式的參數所傳遞的物件。

SerialDevice

表示序列埠。 物件提供方法與屬性,讓應用程式可用來尋找和與系統上的序列埠互動。

列舉

SerialError

定義可在序列埠上發生的錯誤狀況值。

SerialHandshake

定義串列通訊中使用的硬體和軟體流程式控制制通訊協定值。 SerialDevice物件上的Handshake屬性會使用這些值。

SerialParity

定義序列資料傳輸之同位的值。 SerialDevice物件上的Parity屬性會使用這些值。

SerialPinChange

定義序列埠上訊號狀態變更類型的值。

SerialStopBitCount

定義值,指出傳輸中使用的停止位數目。 這些值是由SerialDevice物件上的StopBits屬性使用。

另請參閱