Host: Bare API¶
Example source:
examples/host/bare_api
A USB host example that drives the TinyUSB host stack through its low-level API directly, without the higher-level class-driver application layer.
What it does¶
Enumerates any attached device and, on mount, fetches and prints the full device descriptor (VID/PID, USB version, class, max packet size, etc.) over the debug UART.
Reads and prints the manufacturer, product, and serial-number string descriptors (UTF-16 to UTF-8).
Fetches and walks the configuration descriptor with a small hand-written parser.
For any HID interface found, opens its interrupt IN endpoint with the raw endpoint API (
tuh_edpt_open/tuh_edpt_xfer) and continuously prints the incoming HID reports as raw hex bytes.Blinks the board LED once per second.
Requirements¶
The board must support USB host mode (provide VBUS to the connected device); some boards need an external USB-A port / host adapter.
Configuration¶
Notable tusb_config.h settings:
#define CFG_TUH_ENABLED 1
#define CFG_TUH_HUB 1
#define CFG_TUH_DEVICE_MAX (3*CFG_TUH_HUB + 1)
#define CFG_TUH_ENUMERATION_BUFSIZE 256
#define CFG_TUH_API_EDPT_XFER 1
Building¶
CMake:
mkdir build && cd build
cmake -DBOARD=raspberry_pi_pico ..
cmake --build .
Make:
make BOARD=raspberry_pi_pico all
How to use¶
Plug any USB device (a HID keyboard/mouse works well) into the board’s USB host port. On attach you should see Device attached followed by the full device/string/configuration descriptor dump on the debug UART. If the device exposes a HID interface, its interrupt-IN reports are printed as hex as they arrive (e.g. when you press a key or move the mouse).