Simple test¶
Print basic information about all connected USB devices, including basic info about the first available configuration.
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)