如何选择 USB 接口设置(UWP 应用)

本文演示如何更改 USB 接口中的设置。 使用 UsbInterfaceSetting 对象获取当前设置并在接口中设置设置。

准备工作

关于 USB 接口设置

每个 USB 接口公开一个或多个在 接口设置中分组的终结点。 这些设置由设备定义,并使用名为 设置索引的数字进行标识。 每个接口 必须只有一个 活动设置。 对于多接口设备,每个接口必须具有活动设置。 如果设置处于活动状态,则可以将数据传输到其终结点或从其终结点传输数据。 禁用非活动设置中的终结点进行数据传输。

在设备上选择某个设置后,据说该设置处于活动状态。 默认活动设置是接口的第一个设置。

每个设置都由 一个 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 对象,然后通过调用 UsbInterfaceSetting.SelectSettingAsync 方法启动异步操作。 操作不返回值。

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);
}

另请参阅