8.1 KiB
Changelog
This changelog summarizes release and development history. Entries are listed
newest first. Historical dates follow the commit author dates. v1.0 is the
existing Git tag; subsequent changes are listed as unreleased.
Unreleased
2026-10-07
Added
- Added regression coverage for signed bit-length boundaries, deterministic Intel/Motorola extraction, lookup failures, runtime validation, PGN, comments, file formatting, metadata copying/lifetime, and TypeFactory behavior.
- Added direct-handler and resolver tests for unsupported comments and ambiguous
VAL_references in manually constructed databases. - Documented GCC/gcov/LCOV instrumentation, Qt Creator setup, and HTML reports. Coverage after the added tests: 98.4% of lines and 71.4% of branches with GCC 14.2 and Qt 6.8.2, including the standalone tree test.
- Added a reusable post-build coverage report script and step-by-step Qt Creator
configurations for model tests, strict warning checks, coverage, core-only,
standalone tree tests, and the demo. Machine-specific
.usersettings stay outside version control. - Basic
M/mNmultiplexing metadata in parsed, tree, and runtime definitions. - Deferred selector and overlap validation with source locations: one unsigned selector, representable branch values, and overlaps only between exclusive branches.
- Selector-first decoding using exact raw values, preserving definition order and unconditional signals. Explicit statuses distinguish inactive branches, missing selector data, insufficient payloads, and malformed runtime metadata.
- Registered
SG_MUL_VAL_rejection through TypeFactory; extended and nested multiplexing remain unsupported. Added parser/decoder regression coverage and documented supported syntax and consumer behavior.
Changed
- Qt-dependent targets now require the installed Qt 6.8.2 through a shared qmake version check; removed Qt 5 compatibility instructions. Core remains Qt-free.
- Used explicit local types in the additional coverage and model tests. Functions retain explicit return types, and runtime handler selection uses TypeFactory without lambdas or extra factory layers for concrete objects.
- Coverage documentation now describes the selected open GCC/LCOV toolchain.
- Overlapping unconditional signals are now rejected during parsing.
Fixed
- Linked QtGui only in the optional model tests and used QGuiApplication with an offscreen default, resolving the QAbstractItemModelTester invalid QPixmap metatype warning without adding QtGui to the adapter library.
- Accepted tabs after
CM_by using the comment parser's keyword extraction instead of requiring a literal-space prefix. - Removed test compiler warnings by using
QVERIFY_THROWS_EXCEPTIONand explicitly discardingnodiscardreturn values in exception checks. - Reject duplicate frames by normalized CAN ID and frame type, including equivalent extended ID encodings, and duplicate signal names within a frame. Errors report the file path and line of the repeated definition. Standard and extended frames may share a numeric ID; separate frames may reuse signal names. Added regression coverage and updated parser documentation.
2026-10-06
Added
-
Added non-owning TreeNode parent navigation and stable sibling positions; disabled node moves to preserve links while retaining unique_ptr ownership.
-
Added optional read-only Qt Core DbcTreeModel with documented columns and metadata roles, exact VAL_ entries, exclusive tree ownership, and reset-based reload/clear support. Core remains independent of Qt.
-
Added QAbstractItemModelTester coverage, navigation/metadata/reset tests, a standalone Qt-free tree test, and adapter build and usage documentation.
-
Added
VAL_signal value descriptions through the statement dispatcher and factory, with complete syntax validation, exact signed/unsigned 64-bit keys, deferred reference resolution, duplicate detection, and source error locations. Distinct keys from multiple statements merge; standard and extended frames remain distinct under existing CAN ID normalization. -
Preserved descriptions in parsed metadata, runtime decode definitions, and UI tree metadata. Added
DecodedSignalValue::GetValueDescription()andFindValueDescription()for raw integer lookup before physical scaling. Unknown values retain normal numeric decoding. -
Added regression coverage for syntax, quoting, whitespace, integer boundaries, declaration order, invalid references, duplicates, scaling, and both builders; documented syntax, lookup behavior, and limitations in README.
2026-10-05
Changed
- Split the qmake project into a reusable static library in
core/, a demo inexamples/, and a combined regression test executable intests/. Added shared.prifiles and updated build instructions. (f17ddb6, #11) - Added
.clang-formatand applied consistent formatting to the source code and tests. (b91cf4a, #7) - Replaced lambdas with explicit functions and simpler code in statement
handlers, the decoder, the demo, and regression tests. (
03dc8f2)
Fixed
- Added complete validation of
SG_signal statements, including syntax, receivers, numeric fields, lengths of 1–64 bits, physical ranges, and signal bounds within the declared frame payload for Intel and Motorola bit order. Invalid definitions report the file path and line number. Multiplexing markers are explicitly rejected. Added regression tests and documentation. (8d82b13, #6)
Documentation and maintenance
- Regenerated Doxygen documentation after code changes and the project
restructuring. (
6cd9976,0067cb4,f17ddb6) - Removed the temporary signal-validation issue document. (
1163277)
2026-10-01
Changed
- Moved DBC statement parsing into
TypeFactory-registered handlers forBO_,SG_, andCM_, with a shared parse context and keyword dispatcher. Added tests for dispatch and handler replacement, and documented how to register additional handlers. (88b5883, #4) - API change:
DecodedSignalValue::rawValuenow usesstd::variant<std::int64_t, std::uint64_t>instead ofint64_t. Consumers must handle the appropriate variant alternative. Physical values remaindoubleand may lose precision for large integers. (69074e3, #2)
Fixed
- Corrected Motorola signal extraction within bytes and across byte
boundaries using DBC sawtooth bit numbering. Added decoder regression
tests and build instructions; introduced the
TypeFactoryutility. (2c057b6) - Preserved the full unsigned 64-bit raw-value range, including values above
INT64_MAX, and updated physical conversion and demo output. Added tests for signed and unsigned boundaries and numeric output. (69074e3, #2) - Validated
BO_frame syntax, CAN identifiers, payload lengths, numeric overflow, and unexpected trailing fields. Parsing errors now include the file path and physical line number. Added parser regression tests. (3bd9339, #3)
v1.0 — 2026-06-14
Tag v1.0 points to 38ce043 and includes the initial implementation below.
Documentation
- Added source-file headers with author information and MIT license
references. (
e2ffa97) - Added and subsequently simplified the Doxygen configuration.
(
e2c07dd,4c8af9f) - Generated API documentation and refreshed the generated documentation.
(
dfec39d,38ce043)
Initial implementation — 2026-03-13
Added
- Initialized the repository with a README and MIT license. (
4270459) - Added the DBC parser, frame and signal metadata, a tree representation and
builder, a demonstration program, and a qmake project. (
2a90b2d) - Added runtime decoding through
DbcDecodeBuilder,DecodeDatabase, andDbcDecoder, including CAN-frame lookup, Intel and Motorola extraction, signed and unsigned signals, and factor/offset conversion. Updated parser metadata and the demo to support decoding. (a53a5df)
Documentation and maintenance
- Added
.gitignoreand expanded the README with architecture, data structures, parsing behavior, decoding examples, and usage documentation. (efc57d6,f2aa10c,cb20f5f,f0e7065)