GRS Mesh Device - USB-C Power Guide
Charging your device, reverse charging another device, and the 3-second flip.
Charging Your Device
Plug any USB-C charger into the device's USB-C port. The device will:
- Detect the power source automatically (no interaction needed)
- Display an Apple-style charging animation on the screen
- Show the battery percentage and a lightning bolt () icon in the status bar at the top of every screen
The device charges at whatever rate the USB-C charger supports (up to the board's rated input current).
Charging Another Device From Your GRS Device (Reverse / OTG Charging)
Supported on: LilyGo T4-S3 and T-Display-S3 (verified). T-Deck and CYPHER-M8K may also support - assume it may work.
- Connect your phone or any USB-C accessory to the device using a USB-C cable
- The GRS device will detect the connected accessory and switch to host mode
- Your phone or accessory will begin charging from the GRS device's battery
- The status bar will show a icon to indicate reverse charging is active
Safety limit: The device will not enter reverse charging mode if its battery is below 20%. This prevents accidentally draining the device completely in the field.
The 3-Second Flip - Switching Charging Direction
The fastest way to switch between "device charges phone" and "phone charges device" is the 3-second re-plug mechanic:
- Unplug the USB-C cable from either end
- Re-plug it within 3 seconds
- The device detects the quick re-plug and flips the charging direction
| Situation | Before unplug | After 3-second re-plug |
|---|---|---|
| Normal charging | Charger → GRS device | GRS device → phone/accessory |
| Reverse charging | GRS device → phone | Charger → GRS device (or phone → GRS device) |
You can repeat the 3-second re-plug to flip back at any time.
If you wait longer than 3 seconds after unplugging, the next plug-in will default back to normal charging mode.
The device will display a brief notification on screen each time the direction changes.
Status Bar Indicators
The always-on status bar (top 12 px of every screen) shows:
| Icon / Symbol | Meaning |
|---|---|
| 78% + battery outline | Current battery level |
| next to battery | Charging (external power → device) |
| icon | Reverse OTG charging active (device → external) |
| icon | Screen capture active via USB |
Frequently Asked Questions
Q: My phone isn't charging when I plug it into the GRS device.
Check:
- The GRS device battery is ≥ 20% (required for reverse charging)
- Your board supports USB OTG (T4-S3, T-Display-S3, CYPHER-M8K only)
- The cable supports data + power (not a charge-only cable)
- Try the 3-second re-plug if the device is currently in device-charging mode
Q: Can I charge the GRS device and my phone at the same time from one cable?
No - a single USB-C cable is either sourcing or sinking power on the VBUS line, not both simultaneously. You can charge the device via USB-C while the device's internal radio and display run, but you cannot charge an external device at the same time through the same port.
Q: The 3-second re-plug isn't working.
Make sure:
- You're re-plugging the same end of the cable within 3 seconds
- The device had fully detected the previous disconnect (wait for the screen to acknowledge)
- The device battery is ≥ 20% (required for reverse charging activation)
Q: Which devices support reverse charging?
| Device | Reverse Charging |
|---|---|
| LilyGo T4-S3 | (ESP32-S3 OTG) |
| LilyGo T-Display-S3 | (ESP32-S3 OTG) |
| T-Deck CYPHER-M8K (Rokland) | May support - assume it may work; firmware config not yet added |
| LilyGo T-Deck (base) | May support - assume it may work |
| T-Beam | No OTG |
| Heltec V3 | No OTG |
Q: Will this damage my phone?
No. USB OTG reverse charging is a standard USB specification. The GRS device sources 5V at USB-standard current (up to ~500 mA for USB 2.0 OTG). This is the same as any power bank. The 20% battery minimum guard prevents full discharge.
Reference
- Firmware source:
grs_usb_power.c/grs_usb_power.h - Board config:
GRS_HAS_USB_OTG,GRS_VBUS_GPIO,GRS_USB_VBUS_EN_GPIOingrs_mesh_config.h - Status bar:
grs_status_bar.c/grs_status_bar.h