v0.13.0
v0.13.0
Interface contract:
carbon-interfacev1.3.3 (required — earlier versions lack signed register/RAM access).
Firmware compatibility: v5.1.X.
New Features
Background-noise calibration is now built into the client (Python + C++) — the external carbon_alpha_bringup script is gone. Two blocking operations configure the sensor's background-noise mask, with the box identified automatically from its heartbeat:
- Apply the compiled-in default mask for the connected box (fast, a few seconds; leaves the sensor untouched).
- Refine the mask from a covered-window capture (cover the window first; the client cycles the sensor and returns it to
Idle, ~10–20 s). - Helpers drive the sensor to
Idleand wait for the first heartbeat, which both operations require. The compiled default masks ship in a newcar-alpha-calsubmodule and are baked in at build time.
Peak dumps directly from the client (Python + C++) — dump the raw peak stream to a CSV file while the point cloud keeps streaming. The writer runs on its own thread, so starting a dump returns immediately; it can be bounded by a frame or peak count, or run until stopped, and always ends on a whole frame. This replaces the old multicast peak-mirroring mechanism.
Observer-only client mode — a new config toggle makes a client passively receive the point stream without sending anything to the sensor (no SDL, time-sync, or comms-health). This lets several clients share one sensor's multicast stream; exactly one primary (non-observer) client owns the FPGA.
Behavior Changes
Default multicast group address changed from 224.0.0.0 to 239.255.48.84 (the Carbon push group). It must match the FPGA's network.push_dest_ip; the primary client now points the sensor at its join group by writing push_dest_ip on connect. Update any pinned group_addr in saved configs.
Time synchronization is now always on for primary clients — the time_sync_enabled config key has been removed. A primary keeps the FPGA clock host-aligned, so observer-only clients can safely trust FPGA timestamps (use_msg_timestamp). Enabling use_msg_timestamp on an observer with no primary present is now flagged at config validation.
Removed config keys (configs are validated strictly, so loading a file containing these will now error):
mirror/mirror_peaks/mirror_group_addr/mirror_bind_addr— superseded by client peak dumps.time_sync_enabled— time-sync is unconditional for primaries (see above).carbon_alpha_bringup_dir— superseded by built-in background-noise calibration.
Other Changes
- FPGA comms socket consolidation (internal) — time-sync, comms-health, SDL, and the new calibration paths now share a single register-I/O socket through one serializing actor, eliminating a response-routing race when multiple consumers talked to the FPGA at once. This is the plumbing that unlocked in-client background-noise calibration.
- Visualizer sensor-config and health panels updated for the new client surface.