System services
The console’s own services: reading system facts, showing overlay dialogs, saving player data,
trophies, the content library and screen capture, installing packages, and firmware compatibility.
Everything here lives in SharpProspero.Platform.
| Page | What it covers |
|---|---|
| System information | The software version and console facts, user parameters, signed-in users, keep-awake, and stored settings. |
| Dialogs and overlays | Message and error dialogs, the on-screen keyboard, the web browser, the save picker, and toast notifications. |
| Save data | Enumerating, mounting, reading, writing, and deleting a player’s saves. |
| Trophies and events | Reading trophy progress and posting telemetry events. |
| Content and capture | The photo and video library, and capturing the finished screen. |
| Packages and devices | Installing titles, launching another title, USB and disc devices, and feature flags. |
| Firmware compatibility | Reading the running version and resolving services by name so one build runs across versions. |
The permission model
A service page will often say a call “depends on what the running module is permitted to do.” The
console runs a module inside a sandbox that grants a set of authorities. A service with an open step fails
there rather than on first use, so the shape to write is: try to open the service, handle the refusal, and
fall back. Notification.Show, BluetoothHid.Initialize, and AppLauncher.Launch return no handle to
guard, so they raise ProsperoException at the call itself — wrap the call. FeatureFlag.IsOn and
IsWaitingReboot return a bool and never signal a refusal, so a refused read looks the same as a
disabled feature.
Prefer the
Try...opener where a service offers one — it reports a refusal asfalseinstead of raising. Where only a throwingOpenexists, wrap it and catchProsperoException. Never assume a privileged service is reachable; the same build may run in different sandboxes.
DownloadService, which controls the transfers the system is already running (see
Networking), is one of the services that offers a Try... opener:
if (DownloadService.TryOpen(out DownloadService? transfers))
using (transfers) { /* use it */ }
else
/* not permitted here — carry on without it */;