Simple test

Print basic information about all connected USB devices, including basic info about the first available configuration.

examples/usb_host_descriptors_simpletest.py
 1# SPDX-FileCopyrightText: 2017 Scott Shawcroft, written for Adafruit Industries
 2# SPDX-FileCopyrightText: Copyright (c) 2023 Scott Shawcroft for Adafruit Industries
 3#
 4# SPDX-License-Identifier: Unlicense
 5
 6import time
 7import usb.core
 8
 9import adafruit_usb_host_descriptors
10
11DIR_IN = 0x80
12
13while True:
14    print("searching for devices")
15    for device in usb.core.find(find_all=True):
16        print("pid", hex(device.idProduct))
17        print("vid", hex(device.idVendor))
18        print("man", device.manufacturer)
19        print("product", device.product)
20        print("serial", device.serial_number)
21        print("config[0]:")
22        config_descriptor = adafruit_usb_host_descriptors.get_configuration_descriptor(
23            device, 0
24        )
25
26        i = 0
27        while i < len(config_descriptor):
28            descriptor_len = config_descriptor[i]
29            descriptor_type = config_descriptor[i + 1]
30            if descriptor_type == adafruit_usb_host_descriptors.DESC_CONFIGURATION:
31                config_value = config_descriptor[i + 5]
32                print(f" value {config_value:d}")
33            elif descriptor_type == adafruit_usb_host_descriptors.DESC_INTERFACE:
34                interface_number = config_descriptor[i + 2]
35                interface_class = config_descriptor[i + 5]
36                interface_subclass = config_descriptor[i + 6]
37                print(f" interface[{interface_number:d}]")
38                print(
39                    f"  class {interface_class:02x} subclass {interface_subclass:02x}"
40                )
41            elif descriptor_type == adafruit_usb_host_descriptors.DESC_ENDPOINT:
42                endpoint_address = config_descriptor[i + 2]
43                if endpoint_address & DIR_IN:
44                    print(f"  IN {endpoint_address:02x}")
45                else:
46                    print(f"  OUT {endpoint_address:02x}")
47            i += descriptor_len
48        print()
49    time.sleep(5)