All notable changes to cpp-LIN are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
virtual::Bus::publish()(and the defaultIBus::publish()entry point) now forces the classic checksum for diagnostic frame IDs 0x3C/0x3D regardless of the caller's requested checksum type, matching LIN 2.2A §2.3.1.5 and RELAY §15.3, and matchingvalidate_frame()'s existing rejection of enhanced-checksum diagnostic frames.- RELAY adapter
LinAdapter::send()now honours the bridged message'slin.checksum_type(and forces classic for 0x3C/0x3D), routing topublish_classic()instead of unconditionally upgrading every bridged frame to the enhanced checksum viapublish(). master::Node::run()now returns success (a no-op) for an empty schedule table instead oflin::Errc::invalid_frame, matching RELAY §8.3 ("an empty table is valid and disables scheduled transmission").- LDF parser now clamps
Signal::bit_widthto[0, 64]at parse time, soDB::decode()'s bit-extraction loop can no longer be driven into a shift-by->=64 (undefined behaviour) by a malformed/adversarial LDF file combined with an oversized payload.
- CI:
ilammy/msvc-dev-cmdandsoftprops/action-gh-releasepinned to commit SHA instead of a floating major-version tag. - CI:
cpfusa init/cpfusa hara initsteps no longer swallow failures with|| true— a failed init step now hard-fails the job instead of letting every downstream FuSa/HARA step silently run against a missing/stale config.
verify_checksum(): validates a received checksum byte against the locally-computed value (ISO 17987 frame reception).lin::Errc::no_response, a distinct "no slave answered" sentinel that compares equivalent to a relay timeout, replacing the previous generic timeout return fromsend_header.CHANGELOG.md(this file).
- Declared RELAY spec version bumped 1.11 → 2.0 across headers, CLI JSON, README, HARA, and requirements.
master::Node::set_schedulenow accepts an empty schedule (disables scheduled transmission), matching the virtual bus and the spec.Chan::send_drop_oldestreports whether it evicted an item so DropOldest back-pressure now increments the drop counter instead of the delivery counter on eviction.Frame::checksum_typenow defaults to Classic (the enum's zero value), matching the canonical default used by the other language bindings.capabilitiesno longer duplicatesvirtualbetweenfeaturesandtransports.- E2E
Receiver::unwrapno longer advances its sequence counter on a rejected (out-of-order) frame, so a persistent shifted stream keeps being flagged instead of resyncing after a single error.
from_messagenow rejects an unrecognizedlin.checksum_typeinstead of silently coercing it to Classic.testdata/relay-vectors/lin-frame.jsonnow encodeslin.checksum_typeas"enhanced"instead of the numeral"1".- HARA SG-03 status corrected from "Implemented" to "Partial" pending a verified-checksum code path in a real (non-virtual) bus backend.
- Corrected the Safety Goal cross-references on three
.fusa-reqs.jsonrequirement rationales (SG-02/SG-01 instead of SG-05) and added the previously-undefinedREQ-CLI-001..006/REQ-SEC-013requirement entries for existingfusa:reqtrace tags. - HARA citation for error handling corrected from spec §15 to §5.
- RELAY ecosystem audit fixes.
- RELAY spec v1.11 conformance (see ROADMAP.md for detail).
- Full safety and cyber pack: TARA, FMEA, SAS, boundary diagram, Safety Manual, IEC 62443 artifacts (see ROADMAP.md for detail).
- Initial C++ LIN bus port: core frame types, PID/checksum, virtual bus, master/slave nodes, E2E safety layer, LDF parser, and RELAY adapter/CLI.