Windows.Devices.SerialCommunication 名前空間

名前空間はWindows.Devices.SerialCommunication、シリアル ポートまたはシリアル ポートの抽象化を公開するデバイスとの通信に UWP アプリが使用できるクラスWindows ランタイム定義します。 クラスは、このようなシリアル デバイスの検出、データの読み取りと書き込み、ボー レート、信号状態の設定など、フロー制御のシリアル固有のプロパティを制御する機能を提供します。

デバイスのサポート

シリアル デバイスは、 プロパティDEVPKEY_Device_ClassGuid{4d36e978-e325-11ce-bfc1-08002be10318} = によって自身をシステムに公開し、 (GUID_DEVINTERFACE_COMPORT) を使用DEVPKEY_DeviceInterface_ClassGuid = {86e0d1e0-8089-11d0-9ce4-08003e301f73}して DeviceInterface を作成します。

Windows では、受信トレイ usbser.sys ドライバー (Arduino Uno R3s で使用されているものなど) を使用して、USB-CDC デバイス クラスに属するシリアルから USB アダプターによって公開されるポートがネイティブにサポートされます。 USB-CDC 互換 ID は次のとおりです。

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

を公開 GUID_DEVINTERFACE_COMPORTするその他のシリアル USB アダプター (FTDI/Prolific/Silicon-Labs など) もサポートされていますが、ベンダー固有のドライバーを追加する必要があります。

マシン () の内部としてマークされたシリアル ポートは、ベンダー ドライバーによって制限なし (DEVPKEY_Device_InLocalMachineContainer == TRUEDEVPKEY_DeviceInterface_Restricted == TRUE) として明示的にマークされていない限り、アクセスできません。 そのため、デバイスはほとんどの PCI COM ポート拡張カードを介して接続されるため、アクセス できません

アクセスできないシリアル ポートは、引き続き DeviceInformation.FindAllAsync()によって列挙される可能性がありますが、 SerialDevice.FromIdAsync()では開くことができません。 このようなデバイスを開くと、例外がスローされるか、null が返されます。 アプリでは、このようなシリアル ポートをユーザーのビューからフィルター処理することでこのケースを処理する必要があります。これにより、ユーザーはサポートされていないシリアル ポートと対話できなくなります。

DeviceInformation.FindAllAsync() によって返される DeviceInformation コレクションに、DeviceInformation.Name プロパティがコンピューター名に設定されているシリアル デバイスがある可能性があります。 これは仕様であり、オンボードシリアルポートを列挙するときに発生する可能性があります。 アプリでは、次のいずれかの方法でこのケースを処理する必要があります。

  • このようなシリアル ポートをユーザーのビューからフィルター処理して、サポートされていないシリアル ポートをユーザーが操作できないようにします。
  • アプリでユーザーがこのようなシリアル ポートを操作できるようにする場合は、アプリが DeviceAccessInformation.CreateFromId() 関数を呼び出すときに、"システムで指定されたファイルが見つかりません。 (HRESULT からの例外: 0x80070002)" がスローされます。 アプリはこのような例外を処理し、ポートがサポートされていないことをユーザーに知らせる必要があります。

Accessbility/capability ポリシーは、カスタム ドライバーを記述し、ハードウェア サポート アプリに一致させることで常にオーバーライドできます

シリアル デバイスの機能

UWP アプリは、アプリ パッケージ マニフェストに特定のデバイス機能を含める必要があります。 機能は、デバイスとその目的を識別します。 階層的な順序で必要な要素を次に示します。

Windows 10 Version 1809以降 (2018 年 10 月の更新プログラム)

1809 年以降、vidpid と関数型は指定する必要がなくなり、これらのシステムでは無視されます。 1809 より前のシステムを対象とする場合は、以下を参照してください。

  • <DeviceCapability>: Name 属性は である serialcommunication必要があります。
<DeviceCapability Name="serialcommunication"/>

Windows 10 Version 1809より前 (2018 年 10 月の更新プログラム)

  • <DeviceCapability>: Name 属性は である serialcommunication必要があります。

    • <デバイス>: Id 属性は、デバイス識別子を指定する必要があります。 シリアル USB アダプターを使用している場合、 ID はベンダー/製品識別子を指定する必要があります。関数の種類に一致する任意のデバイスへのアクセスを許可するには、"any" にすることができます。

      • <関数>: 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 ポート拡張カード)
    • のデバイス インターフェイス プロパティDEVPKEY_DeviceInterface_RestrictedGUID_DEVINTERFACE_COMPORTが にFALSE設定されていない限り、内部デバイスにはアクセスできません。 特定のドライバー (特に IoT SKU の場合) は、このプロパティを に FALSE設定できます。
    • 1903 (2019 年 5 月更新) Windows 10基SerCxづいてシリアル SerCx2 コントローラーにアクセスする場合、デバイスはユーザー モードから、または をRhProxy有効にして直接アクセスできるようにオプトインできます。
  • これらの制限は、ドライバー開発者と協力してハードウェア サポート アプリを作成することで、カスタム デバイスを作成するときにバイパスできます

クラス

ErrorReceivedEventArgs

シリアル ポートでエラーが発生したときに呼び出されるイベント ハンドラーにパラメーターとして渡されるオブジェクトを表します。

PinChangedEventArgs

シリアル ポートでシグナルラインの状態が変化したときに呼び出されるイベント ハンドラーにパラメーターとして渡されるオブジェクトを表します。

SerialDevice

シリアル ポートを表します。 オブジェクトには、システム上のシリアル ポートを検索して操作するためにアプリで使用できるメソッドとプロパティが用意されています。

列挙型

SerialError

シリアル ポートで発生する可能性があるエラー条件の値を定義します。

SerialHandshake

シリアル通信で使用されるハードウェアとソフトウェアのフロー制御プロトコルの値を定義します。 値は、SerialDevice オブジェクトの Handshake プロパティによって使用されます。

SerialParity

シリアル データ転送のパリティ ビットの値を定義します。 値は、SerialDevice オブジェクトの Parity プロパティによって使用されます。

SerialPinChange

シリアル ポートでのシグナル状態の変更の種類の値を定義します。

SerialStopBitCount

伝送で使用される停止ビットの数を示す値を定義します。 値は、SerialDevice オブジェクトの StopBits プロパティによって使用されます。

こちらもご覧ください