Skip to content

feat: v2.7.0 — remaining endpoint types: LIN, CAN (incl. CAN XL), ISELED, MDIO, Wakeup Control - #44

Merged
SoundMatt merged 1 commit into
mainfrom
feat/v2.7.0-remaining-endpoint-types
Jul 28, 2026
Merged

SoundMatt merged 1 commit into
mainfrom
feat/v2.7.0-remaining-endpoint-types

Conversation

@SoundMatt

Copy link
Copy Markdown
Owner

Summary

Implements ROADMAP.md milestone 51 ("Remaining Endpoint Types — LIN, CAN
(incl. CAN XL), ISELED, MDIO, Wakeup Control", v2.7.0), the last endpoint-type
milestone before the already-decided v2.8.0 fragmentation no-go and Phase
14's power/watchdog rebuild.

  • include/rcp/lin.hpp (ep_type 0x06): LIN commander as a pure
    raw-byte-pusher — no checksum selection, PID generation, or schedule
    tables. Deliberately breaks with any frame-aware assumption the
    deprecated linbr.hpp bridge's era might imply; that file is untouched
    (DEPRECATE, not ADAPT, per the Satellite Package Disposition table).
  • include/rcp/can.hpp (ep_type 0x0B): Classical/FD/XL via an explicit
    FrameFormat sub-field, data frames only (no remote-frame shape at all),
    CAN XL payload bounded to a conservative single-AVTPDU ceiling
    (kMaxXlPayloadSingleAvtpdu, strictly below the spec's own 2054-byte
    kMaxXlPayloadSpec) consistent with milestone 52's already-decided
    fragmentation no-go, three independent per-phase bit-timing register sets
    (arbitration/FD-data/XL-data), CAN-XL-specific receive filters, and
    deliberately no TriggerRegistry — the one device-facing endpoint
    type in this codebase without a trigger-signal table, per the spec.
  • include/rcp/iseled.hpp (ep_type 0x0C): native ISELED daisy-chain
    Instruction/Address/Data request and Address/Data/optional-native-CRC
    response shape. The optional native CRC is layered on top of, and has no
    dependency on, rcp/e2e.hpp's general RCP-level E2E CRC from v2.6.0 —
    additional, not a replacement.
  • include/rcp/mdio.hpp (ep_type 0x0D): Clause-22/Clause-45-mode-selected
    register access. Built despite being omitted from the spec's own
    informative "ten interfaces" list, per the roadmap's explicit call.
  • include/rcp/wakeup.hpp (ep_type 0x01): the fixed SleepCMD (0xA5)
    opcode — decoded independently of rcp/sequencer.hpp's
    RequestTypeOpcode taxonomy — wake-source pin monitoring, and the
    repeating WakeUp message handshake milestone 53 (v2.9.0) depends on
    directly.
  • include/rcp/endpoint.hpp fills in the five previously-TBD ep_type id
    constants. DAC (0x0A) stays unallocated — explicitly out of scope per
    the roadmap (no functional-config chapter defined in v0.5.1_RC).
  • New tests: tests/test_lin.cpp, test_can.cpp, test_iseled.cpp,
    test_mdio.cpp, test_wakeup.cpp, traced in .fusa-reqs.json under
    REQ-LINEP-*/REQ-CANEP-*/REQ-ISELED-*/REQ-MDIO-*/REQ-WAKEUP-*.
    The LINEP/CANEP prefixes (rather than LIN/CAN) are deliberate:
    those shorter ids are already used by the untouched, deprecated
    linbr.hpp/canbr.hpp bridge stubs' own requirements, and this
    milestone's native endpoint types needed non-colliding ids of their own.
  • CMakeLists.txt/include/rcp/version.hpp bumped 2.6.0 → 2.7.0.
  • ROADMAP.md gets a Done (v2.7.0): paragraph under milestone 51.

Test plan

  • cmake -B build -DRELAY_BUILD_CLI=ON -G Ninja && cmake --build build --parallel — builds clean (pre-existing, unrelated rcp/sim.hpp build failure on this local toolchain reproduces identically on unmodified main; confirmed via git stash)
  • ctest --test-dir build --output-on-failure — 57/58 pass (the 1 "failure" is rcp_sim not building, same pre-existing issue)
  • New suites (rcp_lin, rcp_can, rcp_iseled, rcp_mdio, rcp_wakeup) all pass
  • cpfusa check — 0 errors
  • cpfusa lint — 0 errors (on a clean checkout matching CI's environment)
  • cpfusa cyber — 0 errors
  • cpfusa trace --req-coverage 100 — 464/464 requirements annotated and tested (100%)
  • cpfusa verify — 57/57 ctest tests pass, .fusa-evidence.json generated
  • relay conform --strict build/cpp-rcp — PASS (built from this repo's own RELAY sibling checkout)

…LED, MDIO, Wakeup Control

ROADMAP.md milestone 51. Adds five new endpoint-type headers built on the
rcp/endpoint.hpp scaffolding established in v2.3.0/v2.4.0:

- rcp/lin.hpp (ep_type 0x06): LIN commander as a raw-byte-pusher with no
  frame-level concepts (no checksum selection, PID generation, or schedule
  tables), deliberately distinct from any frame-aware assumption the
  deprecated linbr.hpp bridge might imply.
- rcp/can.hpp (ep_type 0x0B): Classical/FD/XL frame formats via an explicit
  FrameFormat sub-field, data frames only, CAN XL's payload bounded to a
  conservative single-AVTPDU ceiling consistent with milestone 52's
  fragmentation no-go, three independent per-phase bit-timing register
  sets, CAN-XL-specific receive filters, and no trigger-signal table (the
  one endpoint type in this codebase without one).
- rcp/iseled.hpp (ep_type 0x0C): native ISELED daisy-chain framing with an
  optional native CRC that is additional to, not a replacement for,
  rcp/e2e.hpp's general RCP-level E2E CRC.
- rcp/mdio.hpp (ep_type 0x0D): Clause-22/Clause-45-mode-selected register
  access, built despite the spec's own informative interface list omitting
  it.
- rcp/wakeup.hpp (ep_type 0x01): the fixed SleepCMD (0xA5) opcode, kept
  fully independent of rcp/sequencer.hpp's RequestTypeOpcode taxonomy,
  wake-source pin monitoring, and the repeating WakeUp handshake milestone
  53 depends on.

DAC (ep_type 0x0A) remains explicitly out of scope per the roadmap.
linbr.hpp/canbr.hpp are untouched (DEPRECATE, not ADAPT). New tests use
REQ-LINEP-*/REQ-CANEP-*/REQ-ISELED-*/REQ-MDIO-*/REQ-WAKEUP-* ids (LINEP/CANEP
rather than LIN/CAN to avoid colliding with the untouched legacy bridge
stubs' existing requirement ids), traced in .fusa-reqs.json.

Bumps CMakeLists.txt/include/rcp/version.hpp to 2.7.0.

Signed-off-by: Matt <47545907+SoundMatt@users.noreply.github.com>
@SoundMatt
SoundMatt merged commit 8c0386d into main Jul 28, 2026
20 checks passed
@SoundMatt
SoundMatt deleted the feat/v2.7.0-remaining-endpoint-types branch July 28, 2026 19:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant