Releases: thebhef/cannet
Releases · thebhef/cannet
Release list
cannet v0.10.0
Opening a capture
- Fixed: a BLF written relative to capture start no longer draws
negative times. - Fixed: an import now keeps every frame inside the range you asked
for.- Previously it stopped at the first out-of-range frame and never
resumed. - On the measured file that lost 90 of 121 frames, including the two
earliest.
- Previously it stopped at the first out-of-range frame and never
- Fixed: a capture is anchored at its true earliest timestamp, not
at whatever arrived first. - Fixed: the import dialog shows a file's real earliest and latest
times, not the first and last objects in file order. - Fixed: a BLF whose writer crashed now opens. One missing trailing
byte used to discard the whole file.- 16,387 frames recovered from the measured fixture; the file itself
is never modified. - A system message says what was recovered, and that the absolute wall
clock was lost.
- 16,387 frames recovered from the measured fixture; the file itself
- New: loading shows real progress — bytes scanned, then frames
imported, then frames decoded. - New: a Cancel button sits beside the progress bar and works during
both load phases. - Fixed: cancelling a large MDF import now actually stops. It used
to keep building caches for the capture you discarded. - Fixed: a signals-only MDF (signal data, no CAN frames) now plots.
It used to import fine and draw nothing. - Fixed: clearing and re-importing the same file updates the view.
It used to leave the trace stuck showing raw epoch seconds. - New: the channel-map dialog takes the keyboard — Enter accepts
the defaults, Escape cancels, Tab stays inside it. - New: an example set at
examples/time-origins/shows how each
kind of time origin behaves.
Saving a capture
- Changed: the toolbar button reads Export and sits beside
Import, wearing the mirror of its icon. - Fixed: a capture interrupted mid-write now leaves a visible file
where you asked for it, and a BLF one still opens. - Fixed: Save Capture no longer rewrites out-of-order timestamps. A
saved BLF now matches what was captured.- The measured error was 500 ms of invented delay on one frame.
- Fixed: a saved BLF's header now states the capture's true end
time, rather than its last-appended object. - Fixed: MDF event blocks now carry the ASAM-correct marker type.
Files already written stay mislabelled. - Changed: an event's colour now fills a BLF marker's label instead
of colouring its text.- Other tools will draw a solid coloured block where they drew thin
coloured glyphs.
- Other tools will draw a solid coloured block where they drew thin
Databases and decoding
- Fixed: a signal's enum labels now come from the database that
actually decodes it. - Fixed: a trace row and a plot no longer disagree about the same
signal's value. - New: a database assigned to no bus decodes nothing anywhere,
instead of silently decoding every bus. - New: unchecking a bus parks that database's caches; assigning it
back brings the samples straight back. - New: where two databases define one signal, you can pick which one
wins. The pick is saved in the project. - New: one pick also re-points every reference to a signal that was
renamed in a newer DBC. - Fixed: the Database panel no longer claims an unassigned database
"applies to all buses". - New: two databases defining the same id now warn on the losing
row, naming which one wins. - Fixed: a database edited on disk now reaches the plot, the
filtered trace and the by-id view. - Fixed: renaming a
VAL_label updates the pickers and the plot
without reopening the view. - Fixed: the ingest verifier no longer borrows a counter or CRC
designation from a database that does not supply the message. - New: a plot series from a project older than per-bus binding is
flagged as undecoded and can be re-pointed. - New: the Database panel groups a multiplexed message's signals by
mux arm, named from the selector's own labels.- Dragging an arm plots that arm's signals in one gesture; search
finds arms and reaches into them. - Single-signal arms stay flat; extended multiplexing stays a flat
list with a note.
- Dragging an arm plots that arm's signals in one gesture; search
The signal mapping panel
- New: a View Signals panel lists every signal your open views
reference, and what currently decodes each one. - New: its toolbar badge counts the signals needing attention, live,
whether or not the panel is open. - New: filter by status or by bus, wash rows by status, and sort by
bus. - New: an RBS signals grid shows every field's encoder status, so an
override the encoder dropped is visible. - New: a drifted row — scale changed, or gone stale — carries a
one-click Accept that adopts the database's current definition
across every referencing view. - New: RBS values clamp to the signal's physical range on entry,
with out-of-range entries highlighted. - Fixed: a hex value typed into the RBS panel goes out as raw bits,
not as a decimal physical value.
Plots
- Fixed: a signal on a shared axis renders at its real amplitude —
the −200 A drawn as −1.5 is gone.- Changed:
unifiedmode no longer stretches each unit group to
fill the canvas. Useper-unitorindividual.
- Changed:
- Fixed: enum y-axis ticks are bare numbers now; the quoted label
beside every tick is gone. - Fixed: a 300-value enum no longer draws 300 ticks. The count
follows the axis's height. - Fixed: a long enum label on a lane tile is ellipsized and drawn.
It used to be omitted entirely. - Fixed: a plot on a stopped capture re-reads after a database
change, instead of holding the old decode. - New: set a plot's visible range from the palette — two numbers for
min and max, one for a width. - Fixed: measurement statistics over a span no longer drop a sample
when two samples share a timestamp. - Fixed: a long event label wraps to two lines and ellipsizes
instead of running over its neighbours; the highlighted marker draws
on top instead of under them.
Long names
- Fixed: long signal, message and enum names render correctly on
sixteen surfaces instead of overflowing or being cut.- Names ellipsize in the middle, so two names sharing a prefix stay
distinguishable. - The full name is a tooltip everywhere it is shortened.
- One pathological name can no longer reflow a whole panel.
- Names ellipsize in the middle, so two names sharing a prefix stay
- New: the shipped example databases carry long names and
44-character enum labels.
The trace and the grid views
- Fixed: clicking a signal inside an expanded row selects it instead
of collapsing the message you were reading. - New: disclosed signals are real rows — arrow keys, Shift+click
ranges and drag-select all work inside them. - Fixed: a timeline event now lands on the right trace row on an
ordinary multi-bus capture.- The anchoring search assumed sorted timestamps; real captures dip
several times a minute. - A marker could land on the wrong row, or be dropped with nothing
said.
- The anchoring search assumed sorted timestamps; real captures dip
- Fixed: arrow-key navigation no longer rings the whole grid
viewport with a browser focus outline. - New: Space on an event row jumps to it; F2 renames it inline, in
both the events view and the trace. - Fixed: finishing an event rename hands the keyboard back to the
grid. The arrow keys used to go dead. - Fixed: an invalid palette prompt shows an inline error and stays
open, instead of closing silently. - New: jump the whole session to a time with
Mod+T; go-to-event
gainsMod+E.
Events
- New: an event can say what it is about — signals, messages, or
other events, mixed in one event. - New: event rows carry subject chips naming the message or signal
the event points at. - New: Shift+click a plot area with signals selected to create an
event about exactly those signals. - New: right-click a trace frame row to create an event about that
message, at that frame's time. - New: hovering or selecting an event lights up what it points at
and fades everything else. - New: link two events, and the pair draws its extent as a coloured
wash while either end is hovered. - New: events have kinds, and every view has a per-kind checklist to
show or hide each one. - New: each event carries an editable description and a tag; the
events view filters on both. - New: subjects, links, tags and descriptions survive a save and
reopen, in both BLF and MDF. - Fixed: a BLF full of another tool's comments now survives a
re-save. cannet used to drop every one. - Fixed: deleting an event removes every other event's reference to
it, so no chip points at nothing.
Transmit and RBS
- New: Space sends a one-shot transmit row, or starts and stops a
periodic one. - Fixed: Space in the RBS panel enables or disables the row. It used
to scroll the panel instead. - New: the RBS signals list is a real grid — visible cursor,
click-to-focus, arrow keys and Space. - Fixed: opening a project can no longer put frames on a bus. RBS
Run is no longer saved with the project. - Removed: the kill switch. There is now one answer to "how do I
stop transmitting". - New: an RBS message row says whether it will transmit, and reads
Muted when it cannot. - Fixed: a counter or CRC declared in a DBC now populates the fields
editor. The controls used to be empty. - New: each populated field says whether it came from the DBC or
from an override in this project. - Fixed: a malformed
CannetCounterattribute now names the text it
choked on. - Fixed: unassigning or reloading a database stops the RBS elements
and periodics it was driving. - Fixed: a transmit row's Start is no longer disabled by a
disconnected bus, so it matches what Space...
cannet v0.9.0
Remote CAN servers
- New
cannet-server: run a CAN interface on another machine and connect the GUI to it over the network — every RPC relays verbatim to the upstream interface. Replay and virtual-bus tooling moved behind adebugsubcommand. - LAN discovery via mDNS (
_cannet._tcp): the GUI browses , holds the live server list host-side, and shows advertised host names. - Servers panel: per-server rows with connect/forget/token affordances, a dedicated row for a server the host is still waiting on, and the session clock offset shown per server. The app's own sidecar never appears as a row.
- The client tracks the peer's clock across the whole session and reconciles clocks across multiple servers with the client's clock for coherent message timing.
cannet-serverships inside every GUI bundle; standalone server archives are packaged per release platform (including a Linux-only leg).- Added command palette action to add
cannet-serverlocation to path - When server started with routable address, enables TLS and presents durable token a client can use to authenticate. Client is presented with server signature for trust verification.
MDF (MF4) support
- Import MDF captures: channel scan, an import dialog with a checkbox per content, and embedded DBCs that load with the capture.
- Signal-only (frameless) MF4 files import directly as signal files; DBC-decoded groups arrive as file-backed signals with provenance tracked in the signal cache.
- Coded channels keep their value tables — imported enums label their values just like DBC enums.
- Export: captures can write back out including marker/event annotations
Plotting
- Multi-select signal rows in plot panels: bulk hide/show/remove/recolor/add.
- Collapsible plot areas (persisted, with per-axis collapse); drag plot areas between plot panels.
- Selected series bolded; "hide others" for a series; hidden signal rows compact to swatch + name.
- Manual Y-range works under the normalized scale; plots recover cleanly after a DBC reload.
- Honest rendering of sparse and stale data: extrapolated stretches draw dashed and clamped to the sample grid, stale lane tiles are hatched, markers land only where a real sample exists, and a one-sample series draws as a horizontal line.
- Enum/categorical lanes: labels drawn in theme-legible ink over backing boxes, hover markers on every area (lanes included), and categorical data served by runs all the way to the live edge.
- Follow-live window width comes from the user (no self-widening), and follow-live no longer predicts past the newest frame.
Signals & filtering
- Generators: project-level regex rules derive signal attributes from names (stable colors).
- Solo filter redesigned: capture-group paging (All→1…N), checkable group subsets, captureless patterns filter flat per area, unmatched areas untouched; persists with the project.
- Undo/redo covers view edits — signals, plot areas, filters, renames, colors, columns; one gesture = one step. Actions that could impact the running system are not part of undo/redo (i.e. RBS value changes)
Capture & project workflow
- Trace-open: persistent busy feedback, cooperatively cancellable imports, and one trace-open at a time.
- Recent captures follow the project (both directions) and are reachable from the command palette.
- Added project directory concern - when a cannet project exists in a directory along with a .cannet dir, that becomes the project directory. The scratch is stored in .cannet, along with window state. In this mode, the project can be autosaved.
- Faster startup when restoring a saved capture; a forced cold pyramid rebuild announces itself and offers a way out.
- Unsaved project view state is no longer restored on next launch
UI & usability
- The DBC panel is now the Database panel; its value column covers file-backed rows.
- Theme menu: light / lighthk / dark.
- Ctrl+F focuses the current panel's find/filter box.
- Gridview: Escape leaves cell edit (and returns from row content to the grid), Shift+Up/Down extends selection, first-drive fixes.
- Assorted polish: keyboard/screen-reader affordances on trace rows, hit-target and alignment fixes, singleton-panel tab titles.
Performance & stability
- 100M+-frame BLF imports ingest, decode, and plot more smoothly, though still with some brief periods of interactivity
- Smarter signal cache: per-signal caches which should be dependent on message + scaling details to avoid expensive signal cache rebuilds which occasionally happened
- Fixes: multiplexed-signal decode, sidecar readiness race on connect, PCAN debug-logging throughput, plus many small stability and performance improvements throughout.
cannet v0.8.1
- introduce themes, including light, default remains dark
- additional logging and status messages for python sidecar, including its own log file
- add connection status indicator to logical bus in project panel
- extract base gridview control
- used for:
- trace (by-id and historical)
- transmit
- signals
- dbc
- rbs
- commonizes scroll behaviors, keyboard nav, and multiselection for these views (actually fixes historical trace scroll-while-message-expanded bug)
- used for:
cannet v0.7.0
- set window title - project + mesasge source
- more fixes on scrolling in trace view. chronological should now handle expanded state correctly
- plot - add configurable max/min and log scale in new y-axis right click context menu
- add ability to add arbitrary sections to signal view
- rename palette command now prompts for a new name and applies it
- enum combobox selection now applied when selection is made
- enum combobox now shows all items when expanded with down arrow keypress
- plot - areas which have only constant signals now present a range based on the constant signal values, and dissimilar signals no longer overlap at 50% of the plot height.
- allow collapsing project panel sections
- add CannetDisplay dbc extension which currently only accepts 'hex' to indicate a signal should be rendered as hex
- made exponential notation consistently happen at 5 decimal places for floats
- improve display of fixed-precision values based on DBC config
- plot - fixed issue where signal trace color didn't change until the plot panel was closed/reopened
cannet v0.6.0
- attempts to reduce idle work, especially driven by plot
- mitigate long load times for plot signals when loading from cache/adding new plots/switching to previously unfocused plots
- overhaul settings system, improved settings UI
- add workspace concept per project. user can now create cannet project dir with .cannet_prj and .cannet dir. .cannet dir will hold data cache
- unity scaled CAN signals now rendered as hex
- units now in separate column from value in signals view
- plot scale changes
- hidden enums no longer take up vertical space
- hidden other signals no longer contribute to scale sizing
- scale of constant-valued signals now contributes to the overall plot scaling; previously they'd sit smack in the middle of the plot area
- add ability to drag entire plot areas
- ensure scrolling shows up on project panel, trace (L/R), transmit, system messages
- ensure trace panel scroll bounds are updated when mesage signals are expanded
- allow editing selection filters in signal and plot panels
- attempt to mitigate unresponsiveness from adding many traces at once to an existing plot
- mouseover time in trace view now shows local time for the message timestamp
- free cursor in plot view now shows the time on the x axis
- rename python sidecar exe
cannet v0.5.0
Fixes discrepancy between plotted enum lanes and displayed values in the plot panel
cannet v0.4.0
Improves smoothness of plot follow-live
cannet v0.3.0
- improve appearance of collapsed plot areas
- add ecu name to message path in plot areas
- ensure drag resize works on collapsed plot areas (the bottom edge drag works, and only the bottom when 2+adjacent areas are collapsed)
- enable cursor and mousewheel when over collapsed plot area
- set y gutter size the same on all plots in a plot panel so that all plots are the same x-width
cannet v0.2.0
Changes from previous rev:
Plot performance and usability improvements:
- scroll + cursor work on more of the plot area
- plot leading edge is smoother
- plot no longer resizes on connect
- plot no longer clears follow live on connect
- zooming + follow live:
- zooming on trailing half of plot (towards t=0) no longer disables follow live
- zooming in on leading half of plot no longer disables follow live.
- zooming out on leading half of plot disables follow live
- cursor labels render on top of enum name overay
- enum name overlay outline and text is more stable
- plot area does not resize constantly while following live