Files
SirHumza--orbisRPC/HANDOFF.md
T
CyberMask367andSirHumza e35c47b3f5 upto 13.52 firmware and other fixes and changes
changed game detection logic, resolving retro games and homebrew, new rpc style, custom options in config.json, installer is not fixed yet

Co-Authored-By: SirHumza <204067870+SirHumza@users.noreply.github.com>
2026-10-06 03:06:28 +01:00

4.1 KiB
Raw Blame History

HANDOFF — OrbisRPC PS4 Rich Presence

Date: 2026-09-24. Branch: main (pushed). Console: PS4 9.00, GoldHEN 2.4, 192.168.1.136 (FTP :2121 anon, klog :3232, BinLoader one-shot :9020).

Folder layout (repo root)

  • orbisrpc/ — all daemon sources. Key files: daemon.c (loop/sessions), discord.c (presence serialize), detect.c (game finding), tmdb.c + art_table.h (Sony metadata), art.c (mp: proxy resolve), tls.c + ws.c (transport), updater.c + manifest.c + health.c (updates), timesync.c (SNTP), lock.c, cfg.c, log.c, jsonlite.c.
  • scripts/build_sdk.sh — builds the daemon payload with ps4-payload-sdk (build-sdk/orbisrpc_sdk.elf). Toolchain: ~/ps4-payload-sdk, shim in ~/llvmshim. NEVER link libkernel.so (instant death in spawn context; gate in CI + tests/e2e_consumer.py).
  • tests/ — host unit tests + e2e contracts. make test, make asan.
  • scripts/build_art_table.py + titles.txt — regenerates art table/icons.
  • docs/injecting.md — how payloads get onto the console (one-shot rule!).
  • findings/ — hardware research archive (loaders, TLS PSA, IME, linkage).
  • scripts/ps4_watch.py — one-shot console state diff (repo copy may be absent; logic: FTP file sizes + ports + newest screenshot).

Existing issues (ranked, all reproduced)

  1. Cover art tile — shows "?" instead of game art. mp: proxy renders (proven live), uploaded asset stuck private, external URLs drop the whole activity. Daemon resolves mp: per session (art: resolved mp in log). Needs: propagation wait or per-title asset strategy (below).
  2. Stale title on fresh launches — save-mtimes get bulk-touched by cloud sync (all 28 titles shared one mtime!); app.pkg atime added as sharper signal; eboot-set change fast-path added. Unproven live.
  3. Game crashes (CE-34878-0) on some titles with daemon on — no mechanism found after full audit; console has prior crash history. Needs clean-boot test (reboot, no payload, launch).
  4. IME keyboard never opens (0x80BC0010 through six fixes). Token is pre-seeded via FTP; do not block on this.
  5. Rest Mode — wake/resume coded, never tested through a real cycle.
  6. Updater drill — staged-update path never tested live.
  7. Plugin path — PRX can't deploy via FTP (console converts SELF→ELF); must ship inside PKG. Untested live.
  8. main vs WIP branches — main = proven runtime line; WIP = old 1.0 product line (installer/app/docs). Do not merge blindly.

What could be better (next agent: pick these up)

  • Rest Mode field test + home-screen presence proof.
  • Updater live drill (stage → reboot → rollback check).
  • IME: needs on-console iteration with return-code logging (already instrumented in pkg/app_main.c on the WIP line).
  • Plugin live test via PKG delivery.
  • e2e/CI: .github/workflows/ci.yml exists; extend coverage for new modules (lock, timesync, art, session persistence).
  • Playtime ledger reader (totals per title; data already banked).
  • Media-type table: only Netflix/YouTube mapped; add IDs as found.

Auto icons from Sony CDN (no manual adding) — the design

Goal: never hand-add a title again. Three layers, in order:

  1. Live TMDB-over-TLS (tmdb_https_get() in tmdb.c, already coded): queries tmdb.np.dl.playstation.net:443 for any title ID at resolve time. Port 80 is blocked on-console; 443 was never proven — first job is running probe_tmdb443.elf on hardware. If green, every current and future game resolves fully automatically.
  2. Self-growing table fallback: daemon already logs unknown title IDs implicitly (raw-ID sessions). Add a CI job: parse titles.txt + any new IDs seen, run build_art_table.py, commit regenerated art_table.h + icons. Table then grows itself with zero hand edits.
  3. mp: proxy at post time (art.c, proven rendering): whatever URL layers 1–2 produce gets proxied per session; cache expires per game switch so mappings never go stale.

Rule: hands touch art ZERO times — new game installs resolve through layer 1, or land in the table via layer 2's automation.