summaryrefslogtreecommitdiff
path: root/examples/host
AgeCommit message (Collapse)Author
32 hoursexamples: write the host cdc console over RTT when that is the consolehathach
console_write() forwards what the attached CDC device sent back to the board's console, and reached for board_uart_write() directly to stay non-blocking. On a board whose console is the debug probe there is no UART: board_uart_write() is a stub returning -1, so everything the device echoed was dropped, and the do/while loop retried a write that could never make progress and spun until more data arrived. Send it through SEGGER_RTT_Write() on LOGGER_RTT builds -- already non-blocking in the default NO_BLOCK_SKIP mode, which is what the UART path wanted board_uart_write() for. The retry is also bounded now. board_uart_write() is only documented to return the number of bytes sent, and the stubs disagree on how they say "no console here" -- lpc40 returns -1, apm32f0xx returns 0 -- so the loop cannot decide from the return value alone when to stop. It gives up after 10 ms without progress instead, which no draining console ever hits, and keeps the negative return as a fast path so a stub UART does not cost that wait on every read. The RTT header include lives in board_api.h so any example can reach it; the include path only exists when LOGGER=rtt defines LOGGER_RTT. host/cdc_msc_hid now passes on ea4088_quickstart, whose probe (LPC-Link2) has no VCOM: the CDC echo round-trips through a CH340 with TX-RX shorted.
2026-08-21examples: keep CFG_TUH_VENDOR 0 in tusb_config.hhathach
Removing the obsolete host vendor driver also dropped the `#define CFG_TUH_VENDOR 0` line from the six example configs that carried it. Put it back: host vendor is coming, and the configs are where a reader looks for the set of host classes an example can turn on. Restored byte-identical to the pre-removal state, each file keeping its own column alignment. The define is inert today - nothing under src/, hw/ or tools/ reads CFG_TUH_VENDOR - and it is 0 everywhere, so ci_select still reads the vendor class as enabled by no example and a change to it still selects nothing. Note the option's default in src/tusb_option.h is still gone; implementing the driver will need that back alongside the usbh driver-table entry.
2026-08-21examples: restore host builds on samd2x_l2xhathach
Nine examples/host/*/only.txt gate on family:samd21, but 2a8811ebb merged the samd2x and saml2x BSPs into hw/bsp/samd2x_l2x. skip_example takes `family:` from the directory name, so since that rename every one of these examples has been skipped on every board of the family, under make as well as cmake - although hw/bsp/samd2x_l2x/family.cmake wires src/portable/microchip/samd/hcd_samd.c. 107 host firmware images were being compiled nowhere. The merged family is wider than the old samd21 one, so three boards need an explicit skip rather than the rename alone: atsaml21_xpro, saml22_feather, sensorwatch_m0 - not samd21, so hcd_samd.c is not compiled for them (previous commit); SAML22 has no host controller at all curiosity_nano - SAMD21 with 16 KB RAM; msc_file_explorer_freertos overflows it by 3688 bytes (ram 122.51%). Only that one example; the other eight fit. Verified across the whole family: cmake 11 boards x 9/9 examples + curiosity_nano 8/9, three boards skipped, 0 failures; make 98 OK / 0 failed (was 98/9 before). Device examples on saml21 and saml22 are unaffected.
2026-08-21vendor: remove the obsolete host vendor driverhathach
vendor_host.c/.h implemented a CFG_TUH_VENDOR class driver that no example, board or test ever enabled: usbh's driver table entry was compiled out everywhere, and the six tusb_config.h files that mentioned the macro all set it to 0. Maintainer call - dead code, not a shrinking of supported classes. Removes the sources, the usbh driver-table entry, the CFG_TUH_VENDOR default in tusb_option.h, the tusb.h include, both build-system source lists, the rp2040 family.cmake entry and the IAR project template rows.
2026-07-17migrate NXP Kinetis khci to chipidea ci_fs driver (device + host)hathach
Complete the khci -> chipidea ci_fs migration that was started for device (commit d70403f1f "host is not yet"): - device: switch kinetis_k/kl/k32l (Makefiles + k32l CMake) to dcd_ci_fs.c - host: add hcd_ci_fs.c (port of hcd_khci.c onto ci_fs_regs_t) and switch all Kinetis families to it; remove src/portable/nxp/khci entirely - enable host examples (device_info, cdc_msc_hid) for mcu:KINETIS_K - README: merge the KL and K32L2 rows into a single "KL, K32L" ci_fs row hcd_ci_fs.c also fixes two pre-existing host bugs found via HIL on frdm_k64f (present in the old hcd_khci.c too): - data toggle was flipped on a NAK in suspend_transfer; a NAK transfers no data so the toggle must be preserved, else the retried bulk packet is silently discarded by the device (MSC CBW/CSW hang). See comment in file. - prepare_packets asserted and dropped a transfer when the single shared BDT was still owned by an in-flight transfer under concurrent activity; now it returns busy and resume_transfer defers/retries on the next SOF. HIL verified on frdm_k64f: device 13/13, host cdc_msc_hid (CDC mount + echo + MSC mount, through a hub). Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01ExGPLP5eU43LR7o6yYLpNi
2026-06-29docs: address Copilot review on the example READMEshathach
- Order CFG_TUH_DEVICE_MAX before CFG_TUH_HID in the host config snippets (cdc_msc_hid, hid_controller) so the documented snippet has no forward macro reference when copied into tusb_config.h. - Fix stale `examples.rst` references: the generator now writes per-group `docs/examples/<group>/index.rst` pages, so update the conf.py comment and the build-doc SKILL.md accordingly. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-29docs: add build-doc tooling and a README for every examplehathach
Documentation tooling: - Add the `build-doc` skill and `tools/build_doc.py` wrapper for local Sphinx builds (clean / -W / open). - Enable Markdown (MyST) in conf.py and auto-collect examples/{device,host,dual}/*/README.md into a 3-level Examples nav (Examples > Device/Host/Dual > example), noting each page's source location and normalizing headings to a single H1. - Remove the stale `.claude/commands/build-doc.md`; point the AGENTS.md Documentation section at the skill. Example docs: - Add a README.md for every device/host/dual example: what it does, USB interface table, notable tusb_config.h settings, generic CMake + Make build steps, and how to try it. - Fold each *_freertos variant into its base README, noting the FreeRTOS source path and any RTOS-specific behavior. Generated docs/examples/ output is git-ignored. Builds clean with `sphinx-build -W`. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-11Merge remote-tracking branch 'origin/master' into stm32c5hathach
# Conflicts: # README.rst
2026-05-30midi2_host: silence IAR Pe550 for midi2_idxhathach
The variable is set in mount/umount callbacks but not read elsewhere in the example (rx_cb already receives idx as a parameter). IAR treats Pe550 as an error under --warnings_are_errors. Tag it TU_ATTR_UNUSED so the example still shows the pattern of tracking the device index without erroring on unused-set. Co-Authored-By: Claude Opus 4.7 <[email protected]>
2026-05-30midi2_host: drop unreachable return 0 for IAR Pe111hathach
Same fix as midi2_device — IAR rejects the unreachable statement after the while(1) superloop. Let int main fall off the end. Co-Authored-By: Claude Opus 4.7 <[email protected]>
2026-05-30ci: fix IAR Pe111 and stm32h7s3 flash overflowhathach
- examples/device/midi2_device/src/main.c: drop the unreachable `return 0;` after the `while(1)` superloop. IAR with --warnings_are_errors rejects Pe111 (statement is unreachable); C99 lets `int main` fall off the end, matching midi_test. - examples/host/msc_file_explorer_freertos/skip.txt: skip stm32h7s3nucleo. The board has only 64 KB on-chip FLASH and the FreeRTOS + FatFS host MSC explorer now overflows by ~248 bytes after the async control queue refactor. Co-Authored-By: Claude Opus 4.7 <[email protected]>
2026-05-29Merge branch 'master' into usbh-add-control-queuehathach
2026-05-28remove sync() in tinyusb callback since it cause issue with RTOS when usbh ↵hathach
task is blocking
2026-05-26Fix typo in CDC stack size constant here tooPhozer
2026-05-24Merge remote-tracking branch 'tinyusb/master' into stm32c5HiFiPhile
Signed-off-by: HiFiPhile <[email protected]>
2026-05-17bsp: fix tcpp0203 lto uninit errorHiFiPhile
Signed-off-by: HiFiPhile <[email protected]>
2026-05-16midi2: skip.txt commentsSaulo Veríssimo
2026-05-16midi2: skip 3 more boards with same tcpp0203 BSP bugSaulo Veríssimo
stm32h573i_dk, stm32n657nucleo and stm32n6570dk have the same pre-existing uninitialized io_ctx.GetTick in their board.h that we already skip on stm32h7s3nucleo. Trips with Make+LTO; CMake passes.
2026-05-16midi2: add sources to TINYUSB_SRC_C, skip familySaulo Veríssimo
Make build was missing midi2_device.c/midi2_host.c from src/tinyusb.mk. Skip stm32h7s3nucleo board which exposes a pre-existing uninitialized warning in its board.h (board_init2) under Make+LTO.
2026-05-16midi2: fix CI matrix with only.txt and skip.txtSaulo Veríssimo
Restrict midi2_host build to MCUs with USB host support (cloned from midi_rx) and skip SAMD11 from midi2_device (ROM overflow on link).
2026-05-16midi2: host example - simplify and rename to midi2_hostSaulo Veríssimo
Drop Feather-specific scaffolding (SSD1306 display, font, PIO-USB pin override) and rename the directory to midi2_host. The example is now a single main.c + tusb_config.h pair following the midi_rx pattern, with a printf-only UMP decoder for Channel Voice messages. Build-tested on adafruit_feather_rp2040_usb_host, daisyseed (stm32h7), mimxrt1010_evk, stm32f407disco, raspberry_pi_pico2, b_u585i_iot2a, portenta_c33, stm32h503nucleo, stlinkv3mini, feather_stm32f405. Ref #3571
2026-05-12refactor: replace midi2_host (Waveshare) with midi2_host_featherSaulo Veríssimo
Remove the Waveshare RP2350-USB-A host example and board definition. The Feather RP2040 USB Host is the TinyUSB reference board for PIO-USB host and does not require the CFG_TUSB_DEBUG workaround needed by the Waveshare (R13 pull-up issue). One host example is sufficient for the PR. The Feather variant has an improved display with splash, spinner, and 6-line live view.
2026-05-12fix: skip midi2_host_feather build on non-RP2040 platformsSaulo Veríssimo
The Makefile was missing the FAMILY=rp2040 guard, causing CI failures on stm32h7rs and other non-RP2040 targets. Matches the approach used by midi2_host.
2026-05-12example: add MIDI 2.0 Host example for Adafruit Feather RP2040 USB HostSaulo Veríssimo
Board-specific variant of midi2_host targeting the Adafruit Feather RP2040 with USB Type A Host (product 5723). Hardware differences from the Waveshare RP2350-USB-A example: - PIO-USB on GP16/GP17 (vs GP12/GP13) - I2C1 via STEMMA QT on GP2/GP3 (vs I2C0 GP4/GP5) - USB Host 5V power enable on GP18 Display uses three phases: splash screen, spinner while waiting for a device, then live scrolling UMP message view with 6 visible lines. Tested board-to-board: RP2040 Pico (Device) to Feather RP2040 (Host), SSD1306 128x64 OLED showing decoded MIDI 2.0 messages in real time.
2026-05-12fix: CI build failures on non-RP2040 platformsSaulo Veríssimo
- Use UINT32_C(1) instead of 1u for bit shifts >= 16 in midi2_device.c to avoid shift-count-overflow on 16-bit platforms (MSP430) - Add Makefiles for midi2_device and midi2_host examples with family guard (skip if FAMILY != rp2040). These examples require Pico SDK and board-specific hardware - Restrict midi2_device CMakeLists.txt to rp2040 family (matching midi2_host)
2026-05-12fix: address PR review feedback for MIDI 2.0 driversSaulo Veríssimo
Host driver (midi2_host.c): - midih2_open() now returns actual parsed length instead of max_len, preventing composite device interface conflicts - Parsers (alt0/alt1) refactored to return const uint8_t* end pointer following midi_host.c switch/case pattern - Alt 1 CS Endpoint now parses MIDI 2.0 layout (bNumGrpTrmBlk at offset 3 with MIDI_CS_ENDPOINT_GENERAL_2_0 subtype check) instead of reusing MIDI 1.0 struct (bNumEmbMIDIJack) - midih2_set_config() now issues SET_INTERFACE control request via tuh_interface_set() before completing configuration. Falls back to alt 0 if SET_INTERFACE fails - Extracted midih2_set_config_complete() and midih2_set_interface_cb() for async SET_INTERFACE handling Device driver (midi2_device.c): - midi2d_open() skip loop now checks bInterfaceNumber, stopping at interfaces that belong to other functions in composite devices - SET_INTERFACE handler now rejects alt > 1 (returns false/stall) - Named constants for GTB descriptor types and MIDI protocol values Descriptor macros (usbd.h): - TUD_MIDI2_DESC_ALT1_HEAD: iInterface set to 0 (consistent with Alt 0), wTotalLength now uses TUD_MIDI2_DESC_ALT1_CS_LEN to cover all Alt 1 class-specific descriptors - TUD_MIDI2_DESC_ALT1_EP: now accepts GTB ID list via variadic args, emitting complete CS endpoint descriptor Host example: - CMakeLists.txt restricted to rp2040 family (display.c requires Pico SDK headers) - display.c: null terminator after strncpy in log scroll Documentation: - class_drivers.rst updated to reflect SET_INTERFACE behavior and auto-select with fallback Addresses: Codex P1 (#1, #2, #3), Copilot (#4-#9)
2026-05-12example: add MIDI 2.0 Host example with display (midi2_host)Saulo Veríssimo
Add Host example that receives UMP from a MIDI 2.0 Device via PIO-USB and displays received messages on a SSD1306 OLED (I2C, 128x64). Features: - Boot checklist on display (PWR, TinyUSB, USB bus, Device, Descriptor, Alt Setting UMP, Mount, Receiving) - Decode and display all MIDI 2.0 Channel Voice messages - PIO-USB Host on rhport 1 (GP12/GP13 for Waveshare RP2350-USB-A) - SSD1306 display via I2C0 (GP4=SDA, GP5=SCL) Also add board definition for Waveshare RP2350-USB-A. Tested: Waveshare RP2350-USB-A (Host) receiving UMP from Raspberry Pi Pico (Device) via USB cable, notes displayed on SSD1306 OLED
2026-05-11Merge remote-tracking branch 'tinyusb/master' into stm32c5HiFiPhile
2026-05-10add stm32c5 supportHiFiPHile
Signed-off-by: HiFiPHile <[email protected]>
2026-05-05Apply suggestions from code reviewZixun LI
Co-authored-by: Copilot Autofix powered by AI <[email protected]>
2026-05-03add msc_file_explorer_freertos exampleHiFiPhile
Co-authored-by: Copilot <[email protected]> Signed-off-by: HiFiPhile <[email protected]>
2026-04-14fix cihathach
2026-04-14refactor rp2040 family.cmake to use family_configure_example() and apply ↵hathach
WARN_FLAGS to tinyusb sources and examples sources only (skip 3rd party library and mcu vendor)
2026-04-14get freertos working with rp2040hathach
2026-04-06remove IAR toolchain support from make build systemhathach
IAR is only supported with CMake. Remove all IAR-specific references from the Make build system including toolchain files, SRC_S_IAR, LD_FILE_IAR variables, and IAR toolchain detection. Also fix GET_SECTOR_COUNT truncation in msc_file_explorer and broken formatting in stm32f7 board_uart_write. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
2026-04-05Merge pull request #3581 from non-bin/masterHa Thach
Update FatFS to R0.16
2026-04-03fix issue with exmaplehathach
2026-04-03fix hil host cdc echo test with imxrt and other fast mcuhathach
2026-04-02update FatFS to R0.16 via abbrev/fatfs dependencyhathach
- Add lib/fatfs to deps_mandatory in get_deps.py, pinned to R0.16 (commit 30ca13c6) from github.com/abbrev/fatfs mirror - Move TinyUSB custom ffconf.h to examples/host/msc_file_explorer/src/ with project-specific settings: FF_CODE_PAGE=437, FF_USE_LFN=1, FF_FS_RPATH=2, FF_VOLUMES=4, FF_FS_NORTC=1 - get_deps.py removes stock ffconf.h after clone to avoid conflict - Remove vendored fatfs source files from git tracking FatFS R0.16 includes important fixes since R0.15: - Fixed FAT32 FsInfo regression (forced full FAT scan on f_getfree) - Fixed f_readdir infinite loop (from R0.15b) - f_getcwd/.. now works on exFAT - Added FF_FS_CRTIME support
2026-04-01reduce code size, use state to replace active + pendinghathach
2026-03-23add rp2040 sof + stop_trans on nak. increase nak_poll fs/ls delay to 300 us ↵hathach
to prevent xfer is ack while stopping.
2026-03-23update host msc hil testhathach
2026-03-20Add dd command to MSC file explorer for sector read and speed reporting, ↵hathach
adjust CLI configuration and HIL tests
2026-03-17add hil test for host msc and cdchathach
2026-03-13actual build make/cmake for ft9xxhathach
2026-03-13add support for CH32F20X MCU and update board configurationhathach
2026-03-06fix CIHiFiPhile
Signed-off-by: HiFiPhile <[email protected]>
2026-03-06Merge remote-tracking branch 'tinyusb/master' into hcd_ip3516HiFiPhile
Signed-off-by: HiFiPhile <[email protected]>
2026-03-05add IAR warning flags to cmake build and fix themhathach
2026-02-28replace board_millis() with tusb_time_millis_api()hathach