Feat/handheld UI

Merged
PR
2mo ago
+7172-49332

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 build
  • tools/zig.sh build test
  • tools/zig.sh build fmt-check
  • PORTMASTER_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.zig build 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.