# 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
  ...
```
