# Dynamic Switch Example > **Example source:** `examples/dual/dynamic_switch` 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 ... ```