# B14 — aurora-ui: 128x128 modem status screen (Cage + SDL2/Wayland) ``` DRM/KMS card0 (SPI-1, ST7735S) ← Cage (wlroots 0.20, Pixman) ← aurora-ui (SDL2 2.32.10, video driver wayland, GL renderer = Mesa llvmpipe via EGL/wl_shm, no GPU) ``` - `src/aurora-ui.c` — ~350 lines of C, software-drawn 128x128 ARGB frame (8x16 cp437 font from Linux `lib/fonts/font_8x16.c`, GPL-2.0), uploaded once per second or on change. Worker thread: modem controller state files every 2 s, `mmcli` + `iw` every 5 s (timeout 3 s). Main thread: sysfs/procfs every 1 s (wwan0 counters → throughput, default route, B10 LBC supervisor state + VADC VBAT, USB online, pm8916-thermal). Missing sources show `--`; no SOC is invented (no fuel gauge) — only VBAT. - `src/Makefile` — build on the board: `apk add build-base sdl2-dev && make && make install` (→ /usr/local/bin/aurora-ui). - `config/aurora-ui.conf` → /etc/aurora/aurora-ui.conf: `TZ` for the clock, `LIBGL_ALWAYS_SOFTWARE=1`. - `run/ui-up.sh [--stop-gui]`, `run/ui-stop.sh`, `run/ui-status.sh` → /usr/local/lib/b14/run/. wayvnc: reuse `b13/run/wayvnc-up.sh` (write the socket name to /run/b13/wayland-display first; 172.16.42.1:5900, TLS + password). - `run/aurora-ui.openrc` → /etc/init.d/aurora-ui (not enabled). `run/soak.sh` — read-only 1/min observer. Runtime packages (Alpine 3.24): sdl2, wayland-libs-egl (SDL dlopens libwayland-egl; without it SDL2 segfaults in Wayland_CreateWindow), mesa (libEGL/libgallium llvmpipe), cage, seatd. Build only: build-base, sdl2-dev.