Technology

The desktop application and the command line use the same measurement engine, written in Rust. This page describes the architecture, the data flow of a measurement, performance figures and the main vehicle network terms.

Architecture

Measuring, decoding, simulating and logging happen in the engine. The user interface receives batched data at a fixed maximum rate, so it cannot slow down the measurement.

Solid border: part of Arnodiqa. Dashed border: via the manufacturer's driver.

System architecture Layers from top to bottom: the desktop app (Tauri and React) with Trace, Write, Data, Graphics, Interactive Generator, diagnostics and test windows, and the headless CLI; the IPC boundary; the bf-engine measurement runtime with I/O, analysis, logging and pump threads; the crates bf-hw, bf-db, bf-log, bf-project, the script VM, bf-diag (UDS, DoIP, flashing), bf-j1939 and bf-test; the shared bf-core types; and the hardware backends: virtual bus and log files (available), SocketCAN, PCAN-Basic, Vector XL, Kvaser, SLCAN and gs_usb (via the manufacturer's driver). DESKTOP APP · TAURI 2 + REACT/TS Trace Write Data Graphics IG Diag Test Shelldock · palette HEADLESS Arnodiqa CLI run · test · capl check · hw JSON + exit codes → CI IPC · commands (JSON) · event stream (binary batches, 30-60 Hz, drop-oldest) BF-ENGINE · MEASUREMENT RUNTIME (RUST) · SESSION FACADE I/O threadchannels · replay · sim nodes (IL)reorder window · clockoffline: merge + pacing Analysis threadstatistics · sysvarssetup graph (DAG):filter → trigger → log/view Logging threadsone per logging blocktrigger · rolloverBLF / ASC writer Pump threadsone per subscriptionencode batches 16-33 ms UI never blocks the engine CRATES bf-hwdrivers · vbusbit timing bf-dbDBC · LDF · ARXMLFIBEX · codec bf-logBLF · ASC · MF4PCAPNG · export bf-projectYAML · schemavalidation script VMcompiler · VMbuiltins bf-diagUDS · DoIP · flash+ bf-j1939 bf-testtest unitsJUnit · HTML bf-core · CAN / CAN FD frames · Timestamp (ns) · channels · bus events · error frames · chip state HARDWARE / SOURCES Virtual busin-process, multi-ch. Log filesBLF · ASC (offline) SocketCANLinux kernel PCAN-BasicPEAK Vector XL · Kvaserdynamically loaded SLCAN · gs_usbserial · candleLight One BusDriver trait · vendor DLL/SO loaded at runtime (libloading), never bundled

Rust

Rust has no garbage collector, so there are no collection pauses at high frame rates. The engine is multithreaded.

Tauri 2 + React

A native window with a small installation. Docking, virtualised tables and canvas rendering handle large data volumes.

YAML + JSON Schema

Projects are text files that you can diff and merge in git. The schema provides autocompletion and validation in the editor.

Logs and support

Every binary writes a rotating log file; a crash produces a local crash report. The support bundle (zip) contains logs, version, system and hardware information, with user names, host name and serial numbers anonymised. Keys, bus data and CAPL sources are never included. Nothing is uploaded.

Data flow of a measurement

Data flow of a measurement Frames from the bus or log files enter the I/O thread, are sorted across channels and put in batches of up to 8192 events on a bounded main queue. The analysis thread updates statistics and runs the measurement setup graph: filter, then trigger, then logging blocks that write BLF or ASC files in their own threads, and view blocks that feed UI subscriptions through pump threads at 30 to 60 Hz. The CLI prints the report and exit code at the end. Bus / logCAN · CAN FD I/O threadsort · timestamp main queue≤ 8192 / batch Analysis statisticsfilter → trigger(setup graph) Loggingown thread/queue .blf / .ascfield codes Pumpbatch · 16-33 ms Trace / UIdrop-oldest Report → CLI / JSON / exit code at stop: events, lost, files, statistics
  1. Frames come from an interface, the virtual bus or a log file. Each event receives a timestamp in nanoseconds since the start of the measurement.
  2. The I/O thread sorts events from several channels by time (reorder window) and groups them into batches.
  3. The batches go into a bounded queue. In real time the measurement never waits: under overload, batches are dropped, counted and reported. In "as fast as possible" mode the producer waits and nothing is lost.
  4. The analysis thread updates the statistics and runs the measurement setup graph: filters, triggers with pre- and post-trigger time, and branches to logging and windows.
  5. Each logging block writes in parallel in its own thread. The UI receives at most 30 to 60 batches per second; when it falls behind, it drops the oldest events and counts them.

Performance

Live Trace20,000 frames/s at 60 fps display, including with a filter or in fixed-position mode
BLF read> 6 million frames/s; memory use independent of file size
BLF write0.7 to 1 million frames/s (zlib level 6)
DBC decoding< 1 µs per message with 20 signals
Virtual bus1 Mbit/s in real time without frame loss

Typical values on a current Windows workstation; actual figures depend on hardware and configuration.

Glossary

A vehicle contains dozens of electronic control units (ECUs) that exchange messages over bus systems. These are the terms used most often on this site.

ECU
Electronic Control Unit: a controller such as engine, brake or battery management. A car has 30 to more than 100 of them.
CAN
Controller Area Network: the most widely used vehicle bus, in use since the 1980s. Two wires, messages with an 11- or 29-bit ID and up to 8 data bytes. Typically 500 kbit/s.
CAN FD / CAN XL
Faster successors. CAN FD carries up to 64 bytes with a faster data phase (e.g. 2 Mbit/s); CAN XL carries up to 2048 bytes at about 10 to 20 Mbit/s.
Arbitration
When two ECUs transmit at the same time, the message with the lowest ID wins and nothing is lost. The ID is therefore also the priority.
Error frame, bus-off
When an ECU detects an error, it destroys the frame with an error frame. A node that causes too many errors becomes "error passive" and eventually "bus-off", which means it disconnects itself.
Message and signal
A message (frame) contains several signals, e.g. EngineData with EngineSpeed (rpm) and CoolantTemp (°C), at fixed bit positions with a factor and an offset.
DBC
The de facto file format that describes which messages and signals exist on a CAN network. Without a DBC you see hex bytes; with one you see readable values.
LDF, ARXML, FIBEX
Description files for LIN, AUTOSAR networks (XML, all buses) and FlexRay/Ethernet respectively.
LIN, FlexRay, Automotive Ethernet
Other vehicle buses. LIN is low-cost and slow (windows, seats), FlexRay is deterministic (chassis), Ethernet is fast (cameras, central computers) and uses SOME/IP as middleware.
J1939
A standard on top of CAN for trucks, buses, agricultural and construction machinery, built on parameter groups (PGNs). Nodes claim their address with a 64-bit NAME; messages longer than 8 bytes use transport protocols (BAM, CMDT); DM1 reports active fault codes.
Trace
The main window: a live list of every frame on the bus, with time, channel, ID, name, data and decoded signals.
Measurement Setup
A graph of blocks that decides what happens with the data: filtering, triggering ("log 50 ms before and 200 ms after 800 rpm"), logging to a file and display in windows.
Rest-bus simulation
You test one real ECU while software emulates the rest of the bus (all other ECUs), so the ECU behaves as if it were installed in a complete vehicle.
Interaction Layer (IL), NM
The IL sends messages according to the rules in the database (cyclic, on change, counters, checksums). Network management (NM) coordinates ECUs going to sleep and waking up together.
CAPL
An event-driven, C-like scripting language by Vector Informatik (on message, on timer …), widely used on test benches. The Arnodiqa script VM runs existing CAPL programs.
UDS, ISO-TP, DoIP
Diagnostics. UDS (ISO 14229) is the protocol used to query an ECU (fault codes, sessions, flashing). ISO-TP splits long messages for CAN; DoIP does the same over Ethernet.
BLF, ASC, MF4
Log file formats. BLF is binary and compact (Vector), ASC is readable text, MF4/MDF is the ASAM standard for measurement data.
XCP
Protocol to measure and calibrate an ECU's internal variables while driving.
SIL / HIL
Software-in-the-loop (everything virtual, well suited to CI) and hardware-in-the-loop (a real ECU on a test bench with a simulated environment).
E2E, SecOC
AUTOSAR mechanisms that protect messages. E2E adds a counter and a CRC against corrupted or lost messages; SecOC adds freshness and a MAC against forgery and replay. In a rest-bus simulation both must be calculated correctly, otherwise the ECU rejects the messages.
Flashing
Loading new software into an ECU, usually via UDS: switch session, security access, erase memory, download data, verify and reset. Firmware comes as Intel HEX, S-record, binary file or ODX-F.
Air-gapped
A network physically cut off from the internet, for example in test, defence or security labs. Software there must work fully offline, including installation, licensing, updates and AI. See Air-gapped operation.
CI
Continuous integration: tests run automatically on a server on every code change. This needs a tool that works without a GUI and without internet access.