Skip to content

cymon-lib 0.2: C++20, interrupt-safe API, DSDL 0.1, UNIMOC-ready - #2

Merged
Tecnologic merged 2 commits into
mainfrom
claude/cyphal-admin-tool-arch-s6t403
Oct 22, 2026
Merged

Tecnologic merged 2 commits into
mainfrom
claude/cyphal-admin-tool-arch-s6t403

Conversation

@Tecnologic

Copy link
Copy Markdown
Owner

cymon-lib 0.2: C++20, interrupt-safe API, DSDL 0.1, UNIMOC-ready

  • C++20 baseline (was cxx_std_23 in CMake, C++17 in the README), CMake 3.20.
  • Variables are read through const float* instead of std::function: Tick()
    is allocation-free, lock-free and free of function pointers, so it can run
    in a zero-latency interrupt. No heap use left in the library.
  • Atomic capture state (Idle/Configured/Armed/Triggered/Complete) as the
    contract between Tick() and the Cyphal thread; RequestTrigger() and
    TakeTriggerEvent() for cross-node triggering.
  • Sample period rounded to a decimation of the tick period; the trigger is
    evaluated only after the pre-trigger part is recorded.
  • UNIMOC naming (PascalCase methods), .clang-format and .clang-tidy rules;
    clean under the UNIMOC warning set with -Werror.
  • DSDL 0.1 replaces 1.0 (the 1.0 files lacked @extent/@Sealed and did not
    compile); new CaptureState, Error and TriggerMode.IMMEDIATE.
  • scripts/check_dsdl.sh: pydsdl/Nunavut C generation plus a compile of the
    integration guide example; CI runs it with GCC and Clang builds, tests,
    clang-tidy and clang-format 22.1.1.
  • README rewritten; docs/integration.md describes the firmware side.

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01AKjxMYUjfvU5kDumYNNQY8

- C++20 baseline (was cxx_std_23 in CMake, C++17 in the README), CMake 3.20.
- Variables are read through const float* instead of std::function: Tick()
  is allocation-free, lock-free and free of function pointers, so it can run
  in a zero-latency interrupt. No heap use left in the library.
- Atomic capture state (Idle/Configured/Armed/Triggered/Complete) as the
  contract between Tick() and the Cyphal thread; RequestTrigger() and
  TakeTriggerEvent() for cross-node triggering.
- Sample period rounded to a decimation of the tick period; the trigger is
  evaluated only after the pre-trigger part is recorded.
- UNIMOC naming (PascalCase methods), .clang-format and .clang-tidy rules;
  clean under the UNIMOC warning set with -Werror.
- DSDL 0.1 replaces 1.0 (the 1.0 files lacked @extent/@Sealed and did not
  compile); new CaptureState, Error and TriggerMode.IMMEDIATE.
- scripts/check_dsdl.sh: pydsdl/Nunavut C generation plus a compile of the
  integration guide example; CI runs it with GCC and Clang builds, tests,
  clang-tidy and clang-format 22.1.1.
- README rewritten; docs/integration.md describes the firmware side.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKjxMYUjfvU5kDumYNNQY8
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKjxMYUjfvU5kDumYNNQY8
@Tecnologic
Tecnologic merged commit bcd2f1c into main Oct 22, 2026
3 checks passed
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.

2 participants