BENCH 1 OF 1 REV B CAN FD · 100BASE-T1 · XCP · AI

Decode the bus.
Trust the frame.

Spyglass is an automotive network analysis bench — capture and simulate CAN and automotive Ethernet, calibrate over XCP, run diagnostics, script it all, and put an AI copilot on the bench that runs on your terms.

CH1 · CAN_H − CAN_L · differential · live
/01

Downloads

Signed builds, straight from CI. Current release v0.0.0 · Use is subject to the Spyglass license.

WINDOWS · x64 stable

Installer (.exe)

NSIS installer with bundled runtime. Vector XL and PCAN drivers detected at first launch.

  • Filespyglass-setup-x64.exe
  • Size— MB
  • Min OSWindows 10 21H2
SHA-256 0000…0000
Download for Windows
DEBIAN · amd64 stable

Package (.deb)

Native package targeting Debian 12 / Ubuntu 22.04+. SocketCAN out of the box; udev rules included.

  • Filespyglass_amd64.deb
  • Size— MB
  • Dependslibc6, libqt6core6
SHA-256 0000…0000
Download for Debian
$ sudo dpkg -i spyglass_amd64.deb && sudo usermod -aG dialout $USER
/02

Modules

Eight modules, one bench. Each module is a workflow — the capabilities inside it share a timeline, a scripting API, and a window layout. Select a module on the plan and its deck opens below.

WORKBENCH plotter · trace · logging · shell AI COPILOT BYOA · Spyglass LLM HINDSIGHT offline analysis CORE API CAN BENCH cap · sim · replay ×5 capabilities ETHERNET SOME/IP · DoIP ×4 capabilities XCP A2L · DAQ ×3 capabilities DIAG UDS · ISO-TP ×4 capabilities SCRIPT spy · sequence ×3 capabilities CAN FD · 500 kbit/s 120Ω ETH · 100BASE-T1 MDI BENCH PLAN · NTS · SHEET 1 OF 1 REV B
hover a module — click to inspect
01

CAN Bench

capture · decode · simulate · replay
active

Everything CAN and CAN FD in one deck: watch a live bus, decode it against your DBC, stand in for missing ECUs, and replay yesterday's drive onto today's bench.

01.1

Adapters & interfaces

One driver API, many backends — SocketCAN on Linux, Vector XL and PCAN-Basic on Windows, plus a virtual bus for driverless development. Hot-plug aware; hardware timestamps at the driver edge.

built as a C++ core with a C ABI boundary — backends ship as plugins.

SocketCANVector XLPCANvirtual bus
01.2

Tracing

Lossless capture pipeline — lock-free ring buffer, ID/mask filters applied before frames hit the UI, indexed history for instant time-travel scrubbing. A saturated bus doesn't drop frames.

single-producer multi-consumer queue; UI, logger, and scripting each get an independent cursor.

lock-freezero-copytime-travel
01.3

DBC decode

Raw frames become named, scaled signals in real time — multiplexed messages, extended IDs, value tables. Swap or edit a DBC mid-session and the whole trace re-decodes without restarting capture.

standalone parser library with a test corpus of real-world (messy) DBC files.

DBCmultiplexinglive re-decode
01.4

Simulation nodes

Stand in for ECUs that aren't on the bench yet. Periodic and one-shot transmit, signal sliders bound to DBC signals, and residual bus simulation generated straight from the database.

simulated nodes run on the same virtual-bus path as real traffic — scripts can't tell the difference.

interactive TXsignal slidersresidual bus
01.5

Replay

Play any log back onto a real or virtual bus with original timing — or scaled, for stress testing. Loop ranges, gate on triggers, remap channels on the way out.

timed replayspeed scalingchannel remap
02

Ethernet Simulation

SOME/IP · DoIP · PCAP
in progress

Automotive Ethernet beside CAN, on the same synchronized timeline — a signal crossing a gateway is one cursor-measure away.

02.1

SOME/IP decode

Service discovery tracked live; methods, events, and fields decode against ARXML/FIBEX definitions. Subscribe state shown per service, not buried in packet bytes.

SOME/IP-SDARXMLFIBEX
02.2

Service simulation

Offer simulated services for ECU bring-up — publish events, answer method calls with scripted responses, fault-inject malformed payloads on demand.

same spy-scripting hooks as CAN; a simulated service is a script with a service ID.

service offerscripted responsesfault injection
02.3

DoIP transport

Diagnostics over IP as a first-class transport — vehicle discovery, routing activation, and session handling feed straight into the Diagnostics module.

DoIPISO 13400
02.4

PCAP in, PCAP out

Import Wireshark captures for offline decode; export selections for anyone without a Spyglass seat. 100BASE-T1 links captured via media converters or tap hardware.

PCAP100BASE-T1offline decode
03

XCP & Calibration

A2L · DAQ · calibration pages
in progress

ASAM XCP master over CAN and Ethernet — browse the A2L, stream measurements at ECU rate, and tweak calibration values live with every write journaled.

03.1

A2L browser

Characteristics, measurements, and conversion methods in a searchable tree. Lazy-parses multi-hundred-MB A2L files — the browser opens before indexing finishes.

A2Llazy parsesearch
03.2

DAQ streaming

Dynamic DAQ list allocation, event-channel aware, timestamps from the slave clock when it provides one. Streams land in the same plotter as CAN signals.

DAQ/STIMevent channelsslave clock
03.3

Calibration with a safety rail

Every download and STIM write is journaled; one click restores the working page to its pre-session state. Diff two pages before committing anything to flash.

transport-agnostic XCP core — XCP-on-CAN and XCP-on-Ethernet are thin adapters on one state machine.

write journalpage diffrestore
04

Diagnostics

UDS · ISO-TP · DoIP
in progress

ISO 14229 client with request/response pairs rendered inline in the trace — diagnostics in context, not in a separate console.

04.1

UDS services

Read and clear DTCs, pull DIDs, run routines, manage sessions. Negative response codes decoded to plain language at the point of failure.

UDSDTCDIDsroutines
04.2

Transports

ISO-TP on CAN and DoIP on Ethernet under one service engine. Flow control, ST-min, and multi-frame reassembly handled in the transport layer — visible when you want them.

services are data, not code — new DIDs and routines are config, not releases.

ISO-TPDoIPflow control
04.3

DID decoding

Raw hex is always there, but with an ODX or diagnostic description loaded, DIDs decode to named, scaled values — same treatment signals get from a DBC.

ODXnamed values
04.4

Flashing & security access

Programming sessions with transfer progress in the trace. Seed/key algorithms plug in as small user libraries — no vendor DLL required for the common cases.

0x27 / 0x29seed/key pluginstransfer data
05

Scripting & Automation

spy scripts · sequences · remote API
active

The namesake. Small scripts that sit on the live bus and react — plus the machinery to run whole test suites headless, on the bench or in CI.

05.1

Spy scripting

Hook a message, a signal edge, or a diagnostic response, then react: log it, transform it, inject a reply. Event hooks — on_message, on_signal_change, on_timer, on_uds_response — mean scripts wake only when their trigger fires. Gateways, fault injection, and quick fixtures in a few lines.

embedded Python runtime, typed API, each spy isolated — one bad script can't stall the pipeline. Hot reload without dropping capture.

Python APIevent hooksframe injectionhot reload
05.2

Test sequencer

Declarative send/expect sequences — transmit, assert on the response, loop with timing tolerances — reported pass/fail with full trace context. A failed sequence saves its trace slice, so every red result reproduces offline.

send/expectJUnit XMLdeterministic replay
05.3

Automation server

Drive Spyglass from outside — capture control, signal reads, frame transmission, and sequencer runs over a remote API, so CI racks and HIL benches script the tool without touching the GUI. One client owns transmit at a time; observers attach read-only.

gRPC service over the same core the GUI uses — a passing sequence in CI is the same code path as the bench.

gRPCheadlessCI/HILsession leasing
06

Workbench

shared by every module above
active

The cross-cutting deck: plotting, trace views, logging, and the GUI shell serve every module — CAN signals, SOME/IP events, and XCP DAQ streams all land in the same windows.

06.1

Signal plotter

Real-time strip charts. Drag any signal — CAN, Ethernet, or DAQ — onto a plot, overlay freely, cursor-measure deltas between channels. Min/max envelope decimation keeps spikes visible when a million points collapse into one pixel column.

GPU-batched line rendering; redraw cost stays flat as channels are added.

realtimeenvelope decimationGPU batching
06.2

Trace view

Fixed and scrolling modes, per-column filters, and decoded payloads inline. Virtualized rows — a firehose of frames scrolls smoothly. Plot cursor, trace selection, and log playhead share one timeline.

virtualizedsynced cursorsinline decode
06.3

Logging & export

Record to BLF, ASC, candump, or PCAP. Format-faithful — logs round-trip through Vector tooling without timestamp drift.

reader/writer pairs behind one log interface; adding a format touches nothing else.

BLFASCcandumpPCAP
06.4

GUI shell

Dockable layout that saves per-project — a bench setup restores exactly, window for window. Dark mode is the default, not an afterthought.

thin shell over the core modules — the GUI owns pixels, never protocol state.

Qt 6dockinglayout-as-config
07

AI Copilot

your model or ours — never our cloud
in progress

An AI that reads the bus with you — explains anomalies, drafts spy scripts, and translates DTCs to plain language. You choose what powers it: bring your own model, or run the in-house one.

07.3

Trace explain

Select a window of frames and ask — why did bus load spike, what changed after this event, which node went quiet. The copilot answers with references back into the trace, not vague summaries.

anomaly Q&Atrace citations
07.4

Script copilot

Describe the fixture in plain language — "answer every VIN request with this value, drop every third frame from 0x321" — and get a runnable spy script draft, using your loaded DBC's real signal names.

NL to scriptDBC-aware
07.5

DTC explain

A DTC plus its freeze frame becomes a plain-language summary: what the code means, what the snapshot data suggests, what to probe next. Grounded in the loaded diagnostic description.

DTCfreeze framesnext steps
08

Hindsight

offline · post-capture · no hardware required
in progress

The look-back deck. Open yesterday's logs with no adapter plugged in and get the full bench — trace, plots, decode, scripting — pointed at recorded traffic instead of a live bus. Where drive files become answers.

08.1

Log workspace

Open BLF, ASC, candump, or PCAP files directly — no hardware, no capture session. Everything the live bench offers works on the file: filtering, plotting, DBC decode, spy scripts running against recorded frames at any playback speed.

a log file is just another frame source behind the Trace Engine cursor — the rest of the app can't tell.

no-hardwareBLF/ASC/PCAPscripts on logs
08.2

Retro re-decode

Today's DBC against last month's capture. Databases evolve — apply a new DBC, ARXML, or ODX to any old log and the whole file re-decodes, so a fixed signal definition pays off retroactively across your archive.

new DBC, old logbatch decode
08.3

Trace compare

Two drives, side by side. Align captures on a trigger event, then diff signal behavior between them — before/after a firmware flash, good unit vs bad unit. Divergences get flagged on a shared timeline.

alignment is event-based, not wall-clock — two logs recorded weeks apart still line up.

A/B diffevent alignmentregression hunting
08.4

Search & bookmarks

Query hours of traffic by condition — "battery voltage below 300 V while vehicle speed above 20 kph" — and jump between hits. Bookmark moments with notes; annotations save with the log for whoever opens it next.

condition searchbookmarksshared annotations
/03

Bench telemetry

Numbers from the current release cycle.

0 modules on deck
0 capabilities inside them
0 % bus load, zero drops
0 bytes of your traffic leaving the lab
/04

About

Spyglass is an internal automotive network analysis toolkit. This page hosts release artifacts and documents the architecture module by module. Use is governed by the Spyglass license. Questions, bugs, feature asks — write to the bench.