从 USB 获取描述符和端点

usb 类包含多个子类,这些子类用于访问 USB 设备的接口、描述符和端点。其中包含的子类包括:

USB 描述符报告设备的所有属性。端点是特定类型的描述符,用于描述主机和设备之间的通信流的终点。

InterfaceList 类会迭代 USB 设备中的每个 Interface。然后,每个 Interface 包含:

  • DescriptorListGetDescriptorList()
  • EndpointListGetEndpointList()

这些方法允许访问接口的所有描述符和端点。

这些子类的层次结构如图 1 所示。

USB 类层次结构示意图

图 1

示例

从 USB 接收描述符

这些示例会遍历 USB 设备中的所有描述符。该示例会遍历所有 USB 接口,然后遍历每个接口中的所有描述符。

基于范围的 for 循环

std::optional<InterfaceList> interface_list;

status = InterfaceList::Create(my_client, true, &interface_list);

if (status != ZX_OK) {
    ...
}

for (auto& interface : *interface_list) {

    for (auto& descriptor : interface.GetDescriptorList()) {
        ...
    }
}

手动 for 循环

std::optional<InterfaceList> interface_list;

status = InterfaceList::Create(my_client, true, &interface_list);

if (status != ZX_OK) {
    ...
}

for (auto& interface : *interface_list) {

    auto dList_itr = interface.GetDescriptorList().begin(); // or cbegin().

    do {
        ...
    } while (++dList_itr != interface.GetDescriptorList().end());
}