Skip to content

v0.13.0

Choose a tag to compare

@kyle-the-voyant kyle-the-voyant released this 16 Jun 23:52
c7003bb

v0.13.0

Interface contract: carbon-interface v1.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 Idle and wait for the first heartbeat, which both operations require. The compiled default masks ship in a new car-alpha-cal submodule 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.