blob: 94b161480915ac26b6f7fabef5efd7c036a9c10b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# 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
...
```
|