====== The displays & cluster override ====== The dash has **4 physical panels**, but the i.MX6 drives only **2 video outputs**: ^ Logical display ^ Output ^ Physical panel ^ | ''[0]'' Integrated screen | LVDS (built-in) | **center infotainment** (the Android UI) | | ''[1]'' HDMI screen | HDMI (presentation) | **right small portrait panel** (cluster media area) | The **driver speed/SoC cluster** and the **left portrait panel** are **separate ECUs — not reachable** from this Android. The reachable right panel is only the **top-left crop** of the HDMI canvas (~264 × 464 px, portrait, with a slight keystone skew to allow for). ===== Painting above the OEM ===== The OEM paints the cluster from a very high window layer. A normal application window is drawn //under// it. **Because a system-signed app runs as uid.system, it can add a system-level overlay window bound to display [1]** that lands **above** the OEM layer, so our content wins. **Two gotchas that cost hours:** - ''screencap'' does **not** capture this overlay (hardware-overlay path) — **verify on the physical panel**, not a screenshot. - The overlay must be **fully opaque** when active; a partly-transparent fill lets the OEM show through. **Implemented:** a speed-limit sign + "SLOW DOWN" appears on the right panel when the over-speed rule fires, and is transparent otherwise. See [[speedwarning]].