A digital instrument cluster for an automotive IVI system. Renders live CAN data received over WebSocket from a separate gateway process.
This is the frontend of a two-repo project. The backend — simulated ECUs, DBC, CAN gateway, and record/replay tools — lives in:
Cohort15-cmd/automotive-ivi-simulator
A QML-based instrument cluster with:
| Component | Purpose |
|---|---|
Main.qml |
Top-level cluster window, WebSocket client, layout |
Speedometer.qml |
Reusable circular gauge (used for RPM and speed) |
CenterPanel.qml |
Gear indicator + fuel + coolant + odometer + trip |
StatusBar.qml |
Time, ambient temp, range, drive mode, turn signals |
AdasPanel.qml |
Cruise, lane keep, distance, speed limit |
TelltalePanel.qml |
Warning lights row (ABS, ESP, OIL, BAT, ENG, etc.) |
WarningLight.qml |
Reusable telltale light component |
ArcGauge.qml |
Generic arc gauge primitive |
EqsDial.qml |
Mercedes EQS-style dial concept |
LinearGauge.qml |
Reusable horizontal bar gauge |
Plus a flashing collision-warning banner overlay and a hands-on-wheel warning that activate based on ADAS messages from the bus.
The cluster connects to ws://localhost:5555 and expects JSON messages with
keys matching DBC signal names. Example:
{
"EngineRPM": 3000,
"VehicleSpeed": 88.5,
"CruiseActive": 1,
"CruiseSetSpeed": 120,
"TurnLeft": 0,
"CollisionWarning": 1,
"DistanceToLead": 46
}The full signal set comes from vehicle.dbc in the backend repo. Adding a
new signal to the DBC makes it available in the JSON stream automatically —
the cluster just needs to bind a property to it.
A "CAN LIVE / NO CAN" badge tracks the WebSocket connection state. Manual sliders at the bottom of the cluster auto-disable while live data is flowing and re-enable when the bus drops. This pattern matches the failover behavior expected of real automotive HMIs in test rigs.
- Qt 6.5+ with the WebSockets module installed
- CMake 3.16+
- A C++ compiler (MinGW 64-bit on Windows, gcc/clang on Linux)
- File → Open File or Project
- Select
CMakeLists.txtin this folder - Configure with your Qt 6.5+ kit
- ▶ Run
mkdir build && cd build
cmake ..
cmake --build .
./appivi_hello # binary name comes from CMakeLists.txtThe cluster will start and immediately try to connect to the gateway. If the gateway isn't running, the badge will read "NO CAN" and the manual sliders will be enabled — you can drive the cluster by hand to verify the visuals.
| Language | QML, JavaScript, minimal C++ in main.cpp |
| Qt version | 6.5.3 |
| Modules | QtQuick, QtQuick.Controls, QtWebSockets |
| Build system | CMake |
| Tested on | Windows 11, MinGW 64-bit |
Youssef El Khaldouni
MIT