Releases: xyntos-ch/CANoopEn
Release list
CANoopEn 3.1.10
Build: https://github.com/xyntos-ch/CANoopEnTest/actions/runs/31479564872
Added
- Linux (SocketCAN) samples (CO-21). The CANoopEnDemo
repository now carries four Linux samples: the CANopen master samples (CiA 401 and CiA 417)
return, and the CanOpenClient slave samples are available for Linux for the first time — so a
complete master/slave pair runs on a single Linux host with two connected CAN interfaces
(verified on a Raspberry Pi 4 with a dual-channel CAN HAT, master oncan0, slave oncan1).
All four use the pthread-based OS wrapper, the SocketCAN driver and the monotonic clock as
tick count source; each sample ships with a Makefile and a devcontainer.
Fixed
- SDO block transfer without size indication (CO-22). The receiving side of a block
transfer ignoredn, the number of padding bytes in the last segment announced in the block
end frame. Against peers that do not indicate the transfer size in the init phase, the padding
bytes ended up in the received data, the transfer end was not detected and the checksum was
calculated over the padded data. The last-segment flag of the frame now terminates the
transfer, the padding is removed pernand the checksum covers the data alone. Transfers
between two CANoopEn nodes were never affected — CANoopEn always announces the size.
Commits
Full changelog: 3.0.9...3.1.10
CANoopEn 3.0.9
Build: https://github.com/xyntos-ch/CANoopEnTest/actions/runs/31400915025
Added
-
Optional tick count source as time base (CO-7). The new interface
ICoTickCountSource
lets the application hand the millisecond counter of its platform to the stack — SysTick on a
microcontroller, a monotonic clock under an operating system. Register it with
CoTimestamp::SetTickCountSource()before the firstProceed();ClearTickCountSource()
returns to the internal counter.Until now every timeout was derived from a counter that
Proceed()advanced by a fixed
CoSettings::CoCycleTimeper call, so jitter in the call interval shifted the SDO timeout,
heartbeat production and monitoring, the EMCY inhibit time and the SYNC period alike. On a real
clock those timings are independent of the caller.
Changed
CoTimestamp::IncrementTimestamp()has no effect while a tick count source is registered, so
the two time bases can never run side by side.
Compatibility
- Fully backwards compatible. Without a registered tick count source the behaviour is exactly as
before; no application change is required. WhereProceed()runs on a jittery cadence,
registering a source is a few lines — see
Time base.