Overview
System Layout is a standalone desktop application that reads a project's streams.json and draws its devices and their interactions graphically, at runtime, against a live CoreEngine instance. It shows data flow, rates, and errors in and out of every device as they happen.
1. Layout & Grouping
System Layout converts the flat stream definitions in streams.json into a diagram automatically — no manual layout is required:
- CoreEngine is placed at the center of the diagram.
- Streams that share the same driver and IP address (
remoteIP/IP) are grouped into one Device box, arranged clockwise around CoreEngine. - Streams with no IP address (e.g. local/file/serial drivers) each get their own dedicated Device box.
- Within a Device box, each stream appears as its own node, connected back to CoreEngine.
2. Data Flow Visualization
A connecting line runs between CoreEngine and every stream node, direction depending on the stream's block direction:
- A block with direction
outflows CoreEngine → stream. - A block with direction
inflows stream → CoreEngine. - A stream with no declared blocks is treated as bidirectional.
Each line animates live from the block's message counter in shared memory, so you can see traffic actually moving, not just a static diagram:
- Green arrow — data is flowing normally; the animation speed reflects the live message rate.
- Red arrow — the block's error counter has incremented since the last update.
3. Interacting with the Layout
Right-click any node in the diagram for a context menu:
- Activate — activate that state/stream.
- Show Properties — opens the Stream Monitor window for that stream.
- Move — relocate the node within its device group.
Right-clicking a Device box shows Show Properties for the device's state controller.
A Device box has its own context menu, separate from the per-stream one above:
- Delete — remove the Device box from the layout.
- Move — drag one or more of its interfaces onto another Device box, merging several interfaces into a single device when you want a different grouping than the automatic driver/IP grouping.
4. Stream Monitor Window
Opening Show Properties on a stream shows everything about that connection in one place:
| Section | Shows |
|---|---|
| Driver | The driver name and its full configuration, flattened out field by field (matches the driver's entry in streams.json). |
| Blocks | Every block on the stream, with its direction (in/out), live message count, and error count. |
| Rate | A live rate readout in the window title (e.g. "50 Hz · 20 ms"), updated as messages arrive. |
5. Toolbar & Diagnostics
The toolbar includes a SimEng picker to attach to a running CoreEngine (local or reflected), plus three buttons that open the same shared diagnostic windows used by DIPanel:
- Status — Core States: health of the CoreEngine's Models and Drivers.
- Profiler — component performance metrics (current/min/max/average).
- State report — States Status: color-coded state controller activity.