USB インターフェイス設定の選択方法 (UWP アプリ)

この記事では、USB インターフェイス内の設定を変更する方法について説明します。 UsbInterfaceSetting オブジェクトを使用して現在の設定を取得し、インターフェイスで設定を設定します。

開始する前に

  • デバイスを開き、UsbDevice オブジェクトを取得している必要があります。 「USB デバイスへの接続方法 (UWP アプリ)」を参照してください。
  • コード例は、CustomUSBDevice サンプルに基づいています。 完全なサンプルは、このコード ギャラリー ページからダウンロードできます。

USB インターフェイスの設定について

各 USB インターフェイスは、インターフェイス設定でグループ化された 1 つ以上のエンドポイントを公開します。 これらの設定はデバイス定義であり、設定インデックスと呼ばれる番号で識別されます。 各インターフェイスには、アクティブな設定が 1 つだけ必要です。 複数のインターフェイス デバイスの場合、各インターフェイスにアクティブな設定が必要です。 設定がアクティブな場合は、エンドポイントとの間でデータを転送できます。 非アクティブ設定のエンドポイントは、データ転送では無効になります。

設定は、デバイスで選択された後にアクティブになると言われます。 既定のアクティブな設定は、インターフェイスの最初の設定です。

各設定は、UsbInterfaceSetting オブジェクトによって表されます。 オブジェクトを使用すると、UWP アプリで次の操作を実行できます。

  • インターフェイス内のすべての設定を列挙するときに、特定の設定がアクティブかどうかを判断します。
  • 設定を選択する要求を開始します。

USB インターフェイスの設定については、「USB デバイスのレイアウト」に関するページを参照してください。

USB インターフェイスのアクティブな設定を取得する

  1. 前に取得した UsbDevice オブジェクトから UsbInterface オブジェクトを取得します。 このコード例では、USB 構成の最初のインターフェイスを取得します。 複数インターフェイス デバイスの場合は、すべてのインターフェイスを列挙することで、使用する UsbInterface オブジェクトを取得できます。 その配列は、UsbConfiguration.UsbInterfaces プロパティ値を使用して取得できます。
  2. UsbInterface.InterfaceSettings プロパティ値を取得して、インターフェイスで定義されているすべての設定を UsbInterfaceSetting オブジェクトの配列として取得します。
  3. UsbInterfaceSetting.Selected プロパティをチェックして、配列を列挙し、各反復操作で設定がアクティブかどうかをチェックします。

このコード例では、既定のインターフェイスで定義されているすべての設定の設定番号を取得する方法を示します。

void GetInterfaceSetting (UsbDevice device)
{
        auto interfaceSettings = device.InterfaceSettings;

        for each(UsbInterfaceSetting interfaceSetting in interfaceSettings)
        {
            if (interfaceSetting->Selected)
            {
                uint8 interfaceSettingNumber = interfaceSetting.InterfaceDescriptor.AlternateSettingNumber;

                // Use the interface setting number. Not shown.

                break;
            }
        }
}

USB インターフェイスの設定を設定する

現在アクティブではない設定を選択するには、UsbInterfaceSetting.SelectSettingAsync メソッドを呼び出して非同期操作を選択し、開始する設定の UsbInterfaceSetting オブジェクトを見つける必要があります。 この操作では値は返されません。

private async void SetInterfaceSetting(UsbDevice device, Byte settingNumber)
{
    var interfaceSetting = device.DefaultInterface.InterfaceSettings[settingNumber];

    await interfaceSetting.SelectSettingAsync();

    MainPage.Current.NotifyUser("Interface Setting is set to " + settingNumber, NotifyType.StatusMessage);
}

参照