Under active development. Breaking changes expected. APIs, installers, and UI may shift between releases.
A screen and four buttons.
Usable today. Early access — some pieces run behind a feature flag and APIs may shift between releases.
STATUS SCREENS
Five screens. Auto-cycle every five seconds.
A short press freezes on one screen. The OLED uses a 0.96 inch SSD1306 or a 1.3 inch SH1106 over I2C. The buttons need no external resistors.
Link
RSSI, bitrate, FEC repaired, FEC lost, channel.
Drone
Device id, flight mode, battery percent, GPS satellite count.
GCS
Connected client list, HDMI kiosk status, IP addresses.
Net
Access point SSID and IP, tether IP, current uplink and status.
System
CPU, RAM, temperature, uptime, agent version.
- Panel
- SSD1306 / SH1106
- Interface
- I2C
- Address
- 0x3C
- Resolution
- 128 x 64
- Buttons
- 4 tactile
- Button GPIO
- 5, 6, 13, 19
BUTTONS
Four buttons. Two layers.
A short press navigates. A long press (two seconds minimum) fires a layer-two action. Destructive actions require a visible confirm on the OLED before they run.
Short press
Cycle status screens up. Menu up.
Long press
Toggle recording to local storage.
Short press
Cycle status screens down. Menu down.
Long press
Toggle the WiFi access point on or off.
Short press
Select, enter a submenu, confirm.
Long press
Rotate the WFB-ng session key, open a 60s mesh pairing window.
Short press
Back, leave a submenu, cancel.
Long press
Factory reset, a 10 second hold with an on-screen confirm.
MENU TREE
Flat on purpose.
Enter the menu with the select button from any status screen. Every item is reachable in three presses or fewer.
Main ├─ Pair with drone ├─ Mesh │ ├─ Role: direct | relay | receiver │ ├─ Accept relay (60s window) [receiver] │ ├─ Join mesh [unconfigured or direct] │ ├─ Auto-accept: ON | OFF [receiver] │ ├─ Neighbors (list + remove) [relay or receiver] │ ├─ Leave mesh [relay or receiver] │ └─ Mesh id (view-only) ├─ Network │ ├─ WiFi access point on/off │ ├─ WiFi client scan/join │ ├─ Cellular modem status │ └─ Uplink priority ├─ Radio │ ├─ Channel │ └─ Bitrate (fixed to the FEC profile) ├─ Display │ ├─ HDMI resolution │ └─ OLED brightness ├─ System │ ├─ Version │ ├─ Reboot │ └─ Factory reset └─ Back to status
FIELD TAP-TO-PAIR
The magic moment.
Two nodes, no laptop, under two minutes. The OLED and four buttons are the entire provisioning surface. A Curve25519 key exchange runs over the air and the invite bundle is sealed with ChaCha20-Poly1305, scoped to the mesh.
┌─────────────────────┐ │ [receiver] │ │ │ │ Accepting relay │ │ 60s remaining │ │ │ │ Pending: 1 │ │ Accepted: 0 │ │ │ │ B1 accept B4 deny │ └─────────────────────┘
┌─────────────────────┐ │ [relay joining] │ │ │ │ Scanning for mesh.. │ │ │ │ Found: │ │ ados-gs-a4b2 -52 │ │ ados-gs-1f0c -78 │ │ │ │ B1 join B4 cancel │ └─────────────────────┘
On the receiver, long-press to open the window. On the incoming relay, enter Mesh and pick Join mesh. The relay filters for receivers with an open window and shows them with link quality. Tap to request, tap on the receiver to accept, and the mesh comes up. The wall-clock target is under 120 seconds.
Distributed receiveBURN-IN MITIGATION
OLEDs wear. The agent works around it.
Field units run for long sessions. The OLED driver rotates pixel state and dims the display to stretch panel life.
Auto-dim
Drops to 20 percent brightness after 60 seconds with no button activity.
Pixel invert
Flips every pixel every 10 minutes, invisible during status cycling.
Screensaver
A bouncing logo after 5 minutes idle. Status returns on any button.
GRACEFUL DEGRADATION
Missing hardware is not an error.
If the OLED or the buttons are absent, the agent does not complain. Every menu function is also reachable from the setup webapp or the Mission Control Hardware tab.
No OLED
Status is served over HTTP at the setup webapp, and menu actions are available in the Hardware tab. No boot error, no service crash.
No buttons
Status screens still cycle every five seconds. Menu entry is disabled. Use the setup webapp or the Hardware tab to change config.
A screen and four buttons. Enough for the field.
The full screen reference, menu walkthrough, and button reassignment live in the public docs.
Physical UI docs