How CANsole fits together.
A portable C++ core, platform adapters, and control surfaces. Same runtime on the desktop, on the touchscreen, and in the wire.
A shared core, three platform shapes.
Studio, Touch and ECUconnect are not three separate codebases. They are the same runtime running on different hosts, with different platform adapters and different control surfaces on top.
Six rules that hold the platform together.
Portable core
The ECU model, bus model, diagnostic protocols, transport stack and service state machines live in a portable C++ core with no platform dependencies.
Platform code in adapters
Desktop, ESP-IDF, ECUconnect, CAN backends, logging, storage, timers, networking — everything platform-specific lives in clearly bounded adapter layers.
UIs are control surfaces
The GUI is not the runtime. Studio, the Touch UI and any remote client are coequal control surfaces over the same headless runtime.
Remote control by default
Remote control is a foundational concept, not a late addition. Every node can be driven by another node.
Standalone matters
Touch and ECUconnect can run without a host. Standalone operation is a real first-class mode — but it doesn’t replace the remote architecture.
Visible, loggable TX
Anything that can transmit on a real bus must be explicit, visible and loggable. No silent or hidden transmissions, anywhere in the stack.
Built on years of CAN and ECU work.
CANsole isn’t a from-scratch effort. It pulls together threads from several existing projects, each contributing a different slice of competence.
ESPenlaub
The C++/ESP32 base library — hardware abstractions, FreeRTOS helpers, TCP console, diagnostic commands, TWAI and MCP251XFD bindings.
CAN Cockpit
Touch and display-oriented CAN monitoring, patterns, status overlays and quick bench workflows.
ECUconnect / ECOS
Adapter firmware and remote-control concept for CAN/diagnostic interfaces, TCP-based control and headless nodes.
ECUmulator
ECU simulation, OBD/UDS/KWP logic, virtual CAN buses, TCP/UDP services and the preset/bundle runtime model.