mirror of
https://github.com/SirHumza/orbisRPC.git
synced 2026-10-06 10:00:36 +02:00
4.1 KiB
4.1 KiB
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 linklibkernel.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)
- 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 mpin log). Needs: propagation wait or per-title asset strategy (below). - 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.
- 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).
- IME keyboard never opens (0x80BC0010 through six fixes). Token is pre-seeded via FTP; do not block on this.
- Rest Mode — wake/resume coded, never tested through a real cycle.
- Updater drill — staged-update path never tested live.
- Plugin path — PRX can't deploy via FTP (console converts SELF→ELF); must ship inside PKG. Untested live.
mainvsWIPbranches — 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.con the WIP line). - Plugin live test via PKG delivery.
- e2e/CI:
.github/workflows/ci.ymlexists; 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:
- Live TMDB-over-TLS (
tmdb_https_get()intmdb.c, already coded): queriestmdb.np.dl.playstation.net:443for any title ID at resolve time. Port 80 is blocked on-console; 443 was never proven — first job is runningprobe_tmdb443.elfon hardware. If green, every current and future game resolves fully automatically. - 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, runbuild_art_table.py, commit regeneratedart_table.h+ icons. Table then grows itself with zero hand edits. - 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.