Expand description
The dashboard feed seam: the minimal contract the hardware device-dashboard
renderer + the display-nudge loop need from the Home-dashboards capability,
inverted so this kernel crate has ZERO compile-time dependency on
ryu_dashboards.
§Why this exists
A hardware device (TRMNL model) renders a Home dashboard onto its e-ink / LCD
panel: the device polls Core, Core renders the device’s bound dashboard to a
panel image. That render reads dashboard widgets + rasterizes them — a
dashboards concern that had been welded into ryu_hardware::api as a direct
ryu_dashboards::DashboardEngine field. Dashboards is now a swappable,
out-of-process app; a kernel crate cannot hard-link it.
DashboardFeed is the inversion. It exposes ONLY what the renderer + nudge
loop need (render a device’s dashboard, read/write its config + binding,
subscribe to change events), in terms of plain owned types — never a
ryu_dashboards type. Core provides the impl:
- in-process (
InProcDashboardFeed) — wraps the in-process engine; - out-of-process (
dashboards_client::DashboardsClient) — proxies to theryu-dashboardssidecar over loopback (+ its SSE stream for change events).
The device auth (per-device Bearer verification against the registry) stays Core-side; only the render + data cross this seam.
Structs§
- Device
Binding - A device → dashboard binding (the nudge loop’s work list).
- Device
Manifest - The display-manifest facts for a device: the content revision (so the device can skip an unchanged re-download), its poll interval, and its panel geometry.
- Rendered
Image - A rendered device image plus the metadata the display endpoint returns.
- Screen
Profile - A device’s panel geometry echoed in the display manifest + config
screenobject. Computed by the feed impl from the device class + prefs (so the panel constants live with the renderer, not here), and carried back as plain data. - SetDevice
Result - The outcome of a device-dashboard write.
Traits§
- Dashboard
Feed - The dashboards capability, seen through the narrow hole the hardware surface needs. Implemented by Core (in-process or sidecar-backed).