如何选择 USB 接口设置(UWP 应用)
本文演示如何更改 USB 接口中的设置。 使用 UsbInterfaceSetting 对象获取当前设置并在接口中设置设置。
准备工作
- 必须已打开设备并获取 UsbDevice 对象。 阅读 如何 (UWP 应用) 连接到 USB 设备 。
- 代码示例基于 CustomUSBDevice 示例。 可以从此代码库页下载完整示例。
关于 USB 接口设置
每个 USB 接口公开一个或多个在 接口设置中分组的终结点。 这些设置由设备定义,并使用名为 设置索引的数字进行标识。 每个接口 必须只有一个 活动设置。 对于多接口设备,每个接口必须具有活动设置。 如果设置处于活动状态,则可以将数据传输到其终结点或从其终结点传输数据。 禁用非活动设置中的终结点进行数据传输。
在设备上选择某个设置后,据说该设置处于活动状态。 默认活动设置是接口的第一个设置。
每个设置都由 一个 UsbInterfaceSetting 对象表示。 通过使用 对象,UWP 应用可以执行以下操作:
- 在枚举接口中的所有设置时,确定特定设置是否处于活动状态。
- 启动选择设置的请求。
有关 USB 接口设置的信息,请参阅 USB 设备布局。
获取 USB 接口的活动设置
- 从之前获取的 UsbDevice 对象中获取 UsbInterface 对象。 此代码示例获取 USB 配置中的第一个接口。 对于多接口设备,可以通过枚举所有接口来获取要使用的 UsbInterface 对象。 可以通过 UsbConfiguration.UsbInterfaces 属性值获取该数组。
- 通过获取 UsbInterface.InterfaceSettings 属性值,获取接口中定义为 UsbInterfaceSetting 对象数组的所有设置。
- 枚举 数组,并在每次迭代中检查通过检查 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);
}