Feat/handheld UI
Merged
PR
2mo ago+7172+7172+0123456789012345678901234567890123456789-49332-49332-01234567890123456789012345678901234567890123456789
What does this change?
- Adds a controller-first library with search, favorites, artwork, settings, Xbox/Nintendo button layouts, and sign out.
- Requests streams for the device display and letterboxes games that return 16:9.
- Adds H700 hardware decoding on ROCKNIX through V4L2 Request and bundled Cedrus modules loaded only while GreenOvercast is running.
- Moves product logic to Zig where it does not require a codec, kernel, or library C boundary.
- Consolidates dependency builds and PortMaster packaging in
build.zig. - Fixes the Xbox quit flow, certificate discovery across firmware, and persistent credential storage.
How did you test it?
tools/zig.sh buildtools/zig.sh build testtools/zig.sh build fmt-checkPORTMASTER_NEW=/path/to/PortMaster-New tools/zig.sh build package- PortMaster installation, frontend launch, hardware-decoded playback, controls, and clean shutdown on:
- RG35XX-H — muOS 2508.4
- RG40XX-H — Knulli (Batocera 42)
- RG40XX-H — ROCKNIX 20260801
- Miyoo Flip — SpruceOS 4.2.0
- RK3326 MPP playback was also verified on an R36S running AmberELEC 20250515_1801.
Summary by cubic
Migrates the runtime from C to Zig and adds a controller-first handheld UI alongside ROCKNIX H700 support via a new V4L2 Request decoder. Streams now match the device display resolution instead of requesting fixed 720p.
New Features
- Adds library search, favorites, per-title Xbox or Nintendo face button layout (defaulting to the firmware's system mapping with corrected button labels), cached game artwork, and sign-out from settings.
- Adds a V4L2 Request decoder that loads bundled ROCKNIX H700 kernel modules only on the matching firmware and unloads them on exit.
- Fixes the Xbox quit flow, certificate discovery across firmware, and makes Knulli credentials persist across reboots.
Build and dependencies
- Replaces the separate C build and packaging scripts with a single
build.zigbuild using pinned dependency commits and hash checks; ROCKNIX module builds now stop when patches fail and are covered by a regression test. - Upgrades FFmpeg from 4.4.8 to 9.0, removes the vendored SDL2 and FFmpeg headers, and adds AmberELEC (R36S) validation.