v0.12.1 (Host↔FPGA Time Sync)
View this release on GitHub → Release Date: June 08, 2026
This release introduces host↔FPGA time synchronization, making per-frame timestamps trustworthy for sensor fusion.
Interface contract:
carbon-interfacev1.3.3 — exact interface contract version matches are now required for the register/RAM access that time sync depends on. Firmware compatibility:v5.0.Xandv5.1.X(max frame rate 20 fps; bandwidth selection in the SDL section).Note: v0.12.0 was withdrawn shortly after release due to a frame-timestamp parsing bug; v0.12.1 fixes it and supersedes it.
New Features
Host↔FPGA time synchronization — consistent sub-100 µs clock sync
The client now disciplines the FPGA’s system clock to the host clock in the background, enabled by default. A custom Voyant time protocol — built entirely on register reads/writes, with no PTP grandmaster or NTP server required — holds the host↔FPGA offset consistently under 100 µs. This makes per-frame timestamps trustworthy for fusing Carbon data with other time-stamped sensors.
A new client.time_sync_state() call reports sync health (offset, jitter, round-trip, and a SyncQuality band: Excellent ≤ 1 µs, Good ≤ 100 µs, Fair ≤ 1 ms, Poor beyond). A time_sync_monitor CLI tool watches it live.
Behavior Changes
Frame timestamps now come from the FPGA clock by default
Because the FPGA clock is now disciplined to the host, frames are stamped with the FPGA timestamp by default rather than host-on-receipt time — giving every frame a host-aligned hardware timestamp closer to acquisition and free of host-side receive jitter. To restore the old behavior, set use_msg_timestamp = false.
Bug Fixes
- Frame timestamp parsing — the FPGA’s packed 96-bit timestamp is now decoded correctly. The earlier interpretation produced wildly wrong frame times and is why
v0.12.0was pulled.
Other Changes
- Ubuntu 26.04 support confirmed — the Debian package install is now verified in CI on Ubuntu 22.04, 24.04, and 26.04.
- Signed register / RAM read & write — register-I/O fix that correctly handles signed values. This is what unlocked the time-sync protocol (writing the residual clock offset back to the FPGA), and is why this release requires
carbon-interfacev1.3.3. - Wire-protocol types are now fully code-generated from the
carbon-interfacecontract — message structs, payload parsing, and register/RAM address constants produced at build time, keeping the SDK in lockstep with each interface update.
Documentation
For comprehensive documentation, examples, and installation instructions, visit our documentation site.
Feedback
We value your feedback! If you encounter issues or have suggestions for improvements, please see our troubleshooting guide for the best options for getting in touch with us.