Touch UI - SP4T
The SP4T touch UI routes a common port (COM) to one of four throws
(RF0..RF3) from the front-panel touchscreen. It keeps the same chrome as the
SPDT screen — top bar, route summary, and status footer — and replaces
the two full-height port cards with a 2x2 grid so all four throws stay reachable
on the 960x376 display.
Main Screen

The active throw's card is green and reads ACTIVE; the other three are red and read STANDBY. The route summary at the top left reads COM TO RF0. Only one throw is closed at a time.
Each card is 456x112 px, well above the ~44 px minimum touch target, so the denser grid does not cost tap reliability.
Selecting a Throw

Tapping a standby card immediately requests a route change through the local
runtime API — there is no confirm step. The request goes to /api/sp4t on SP4T
hardware, so all four throws route; the card turns green optimistically while
the request is in flight and reverts if the runtime rejects it.
Network Settings
The Settings control opens the shared network overview, which is identical to the SPDT variant. See Network Configuration and the SPDT touch UI page for those screens.
Controls
| Control | Description |
|---|---|
| RF0 | Routes COM to RF0. |
| RF1 | Routes COM to RF1. |
| RF2 | Routes COM to RF2. |
| RF3 | Routes COM to RF3. |
| Settings | Opens the shared network configuration screens. |
| Status bar | Shows the latest runtime status or switching message. |
Hardware Type Gating
The touch UI bases its controls-enabled rule on the canonical hardware type
(hwtype) shared with the runtime, preferring the hardware_type field of
/api/system/status. SPDT, SP4T, and ATTEN render live controls; unset
and unknown hardware disable the tiles and show a
HARDWARE TYPE UNSET/UNKNOWN status instead of POSTing to a backend with no
RF route.
Reproducing These Renders
The screens above are captured from the LVGL X11 simulator against an x86 mock runtime:
# Run the simulator interactively
make run-touch-ui-sim-sp4t
# Recapture the screenshots on this page
python3 docs/screenshots/capture_touch_ui.py --set sp4t
The simulator target starts the runtime with the explicit SP4T variant: