从 USB 获取描述符和端点

usb 类包含多个子类,这些子类提供了对接口、描述符和 USB 设备的端点和端点。包含的子类包括:

USB 描述符会报告设备的所有属性。端点是一种特定类型的描述符 ,它描述了主机与设备之间通信流的终点。

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

  • DescriptorListGetDescriptorList()
  • EndpointListGetEndpointList()

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

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

USB 类层次结构示意图

图 1

示例

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