]> sigrok.org Git - libsigrok.git/commit
output/vcd: support analog data, more channels, minor cleanup
authorGerhard Sittig <redacted>
Sat, 15 Apr 2017 11:06:20 +0000 (13:06 +0200)
committerGerhard Sittig <redacted>
Fri, 24 Jul 2020 07:10:27 +0000 (09:10 +0200)
commit8c5bd3d9c7c0b307da9ddc03f1066f513a9968b6
tree21a8fb75441755d1e7b588d24d48bc807b155368
parent0ab36d2f5448c90b73492ce69b43358d6e6cd973
output/vcd: support analog data, more channels, minor cleanup

Extend and rephrase the VCD output module, to support mixed signal data,
support higher channel counts, and address other minor issues.

Increase the number of VCD identifiers which can get generated. Bump the
limit from 94 to 18346 channels. Prefer single letter names for backwards
compatibility for the first channels. Use two or three letter identifiers
as needed for higher channel counts.

Add support for analog channels, and carefully organize a queue such
that timestamps and their data only get written after input data for
_all_ channels was received from the session feed. Provide IEEE754
double precision values for maximum compatibility with other VCD aware
software, although sigrok internally passes analog data with single
precision. This makes potential later adjustment transparent to external
software.

Factor out and rephrase code while we are here. This implementation
avoids glib calls where they'd hurt performance. A local pool reduces
malloc() pressure to increase throughput. String manipulation is tuned
for simplicity and reduced cost. Special code paths were added to tune
the use cases where mixed signals are not involved (immediate write to
the output text, bypassing the output module's local queue).

An srzip input implementation detail still makes the VCD output consume
lots of memory during merge sort of channels' data. See bug #1566.

Other nits got addressed in bypassing: Adjust data types. Separate the
gathering of detail information and the construction of the VCD header
text to simplify review and future maintenance. Skip VCD identifiers for
disabled channels. Emit a final timestamp to flush the last sample, and
communicate the total capture length.

Update comments. Update the copyright for recent non-trivial changes.
src/output/vcd.c