Introduction ============ .. image:: https://readthedocs.org/projects/adafruit-circuitpython-usb-host-descriptors/badge/?version=latest :target: https://docs.circuitpython.org/projects/usb-host-descriptors/en/latest/ :alt: Documentation Status .. image:: https://raw.githubusercontent.com/adafruit/Adafruit_CircuitPython_Bundle/main/badges/adafruit_discord.svg :target: https://adafru.it/discord :alt: Discord .. image:: https://github.com/adafruit/Adafruit_CircuitPython_USB_Host_Descriptors/workflows/Build%20CI/badge.svg :target: https://github.com/adafruit/Adafruit_CircuitPython_USB_Host_Descriptors/actions :alt: Build Status .. image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json :target: https://github.com/astral-sh/ruff :alt: Code Style: Ruff Helpers for getting USB descriptors Dependencies ============= This driver depends on: * `Adafruit CircuitPython 9+ `_ Please ensure all dependencies are available on the CircuitPython filesystem. This is easily achieved by downloading `the Adafruit library and driver bundle `_ or individual libraries can be installed using `circup `_. Installing from PyPI ===================== On supported GNU/Linux systems like the Raspberry Pi, you can install the driver locally `from PyPI `_. To install for current user: .. code-block:: shell pip3 install adafruit-circuitpython-usb-host-descriptors To install system-wide (this may be required in some cases): .. code-block:: shell sudo pip3 install adafruit-circuitpython-usb-host-descriptors To install in a virtual environment in your current project: .. code-block:: shell mkdir project-name && cd project-name python3 -m venv .venv source .env/bin/activate pip3 install adafruit-circuitpython-usb-host-descriptors Installing to a Connected CircuitPython Device with Circup ========================================================== Make sure that you have ``circup`` installed in your Python environment. Install it with the following command if necessary: .. code-block:: shell pip3 install circup With ``circup`` installed and your CircuitPython device connected use the following command to install: .. code-block:: shell circup install adafruit_usb_host_descriptors Or the following command to update an existing version: .. code-block:: shell circup update Usage Example ============= Print basic information about a device and its first (and usually only) configuration. .. code-block:: python # SPDX-FileCopyrightText: 2017 Scott Shawcroft, written for Adafruit Industries # SPDX-FileCopyrightText: Copyright (c) 2023 Scott Shawcroft for Adafruit Industries # # SPDX-License-Identifier: Unlicense import time import usb.core import adafruit_usb_host_descriptors DIR_IN = 0x80 while True: print("searching for devices") for device in usb.core.find(find_all=True): print("pid", hex(device.idProduct)) print("vid", hex(device.idVendor)) print("man", device.manufacturer) print("product", device.product) print("serial", device.serial_number) print("config[0]:") config_descriptor = adafruit_usb_host_descriptors.get_configuration_descriptor( device, 0 ) i = 0 while i < len(config_descriptor): descriptor_len = config_descriptor[i] descriptor_type = config_descriptor[i + 1] if descriptor_type == adafruit_usb_host_descriptors.DESC_CONFIGURATION: config_value = config_descriptor[i + 5] print(f" value {config_value:d}") elif descriptor_type == adafruit_usb_host_descriptors.DESC_INTERFACE: interface_number = config_descriptor[i + 2] interface_class = config_descriptor[i + 5] interface_subclass = config_descriptor[i + 6] print(f" interface[{interface_number:d}]") print( f" class {interface_class:02x} subclass {interface_subclass:02x}" ) elif descriptor_type == adafruit_usb_host_descriptors.DESC_ENDPOINT: endpoint_address = config_descriptor[i + 2] if endpoint_address & DIR_IN: print(f" IN {endpoint_address:02x}") else: print(f" OUT {endpoint_address:02x}") i += descriptor_len print() time.sleep(5) Documentation ============= API documentation for this library can be found on `Read the Docs `_. For information on building library documentation, please check out `this guide `_. Contributing ============ Contributions are welcome! Please read our `Code of Conduct `_ before contributing to help this project stay welcoming.