| # Dynamic Switch Example |
| |
| This example demonstrates TinyUSB's dual-role capability by allowing runtime switching between USB device and host modes. |
| |
| ## Features |
| |
| - **Button-triggered mode switching**: Press the board button to switch between device and host modes |
| - **Device Mode**: Acts as a USB CDC (Virtual Serial Port) that echoes all received data |
| - **Host Mode**: Enumerates connected USB devices and prints device information |
| - **Dynamic switching**: Deinitializes the current stack and reinitializes in the new mode |
| |
| ## Configuration |
| |
| Notable `tusb_config.h` settings: |
| |
| ```c |
| #define CFG_TUD_CDC 1 |
| #define CFG_TUH_HUB 1 |
| #define CFG_TUH_DEVICE_MAX (CFG_TUH_HUB ? 4 : 1) |
| #define CFG_TUH_ENUMERATION_BUFSIZE 256 |
| ``` |
| |
| ## Usage |
| |
| 1. **Build and flash** the example to your board |
| 2. **Default behavior**: The board starts in **Device mode** |
| 3. **Device mode**: |
| - Connect the board to a PC |
| - Open a serial terminal (e.g., `screen /dev/ttyACM0` or PuTTY) |
| - Type characters - they will be echoed back to you |
| 4. **Switch to Host mode**: |
| - Press the board button |
| - Connect a USB device to the board |
| - The board will enumerate the device and print its descriptors to the debug console |
| 5. **Switch back to Device mode**: Press the button again |
| |
| ## LED Patterns |
| |
| The onboard LED indicates the USB connection status: |
| |
| - **Fast blink (250ms)**: Not mounted/connected |
| - **Slow blink (1000ms)**: Successfully mounted/connected |
| - **Very slow blink (2500ms)**: Suspended (device mode only) |
| |
| ## Serial Output |
| |
| The example prints status messages to the debug UART: |
| |
| ``` |
| ====================================== |
| TinyUSB Dynamic Switch Example |
| Press button to switch between device and host modes |
| Starting in DEVICE mode... |
| ====================================== |
| |
| [DEVICE] Mounted |
| |
| --- Switching USB mode --- |
| Stopping DEVICE mode... |
| Starting HOST mode... |
| Mode switch complete! |
| |
| [HOST] Device attached, address = 1 |
| Device 1: ID 1234:5678 SN ABC123 |
| Device Descriptor: |
| bLength 18 |
| bDescriptorType 1 |
| bcdUSB 0200 |
| bDeviceClass 239 |
| ... |
| ``` |