From 9e7e0bce2a39bb56564f816557752b7e8a05a202 Mon Sep 17 00:00:00 2001 From: Brian Harrison Date: Thu, 23 Apr 2026 16:43:59 -0400 Subject: [PATCH] fix(protocol): adjust full_waveform setting for event downloads to end when it should. --- sfm/server.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sfm/server.py b/sfm/server.py index de42a51..8241d17 100644 --- a/sfm/server.py +++ b/sfm/server.py @@ -885,13 +885,13 @@ def device_event_blastware_file( def _do(): with _build_client(port, baud, host, tcp_port, timeout=120.0) as client: info = client.connect() - # Use full_waveform=True (stop_after_metadata=False) — downloads until - # the device signals natural end-of-stream. For simple Continuous / - # Single-Shot events this gives byte-identical content to BW. - # NOTE: Histogram+Continuous mode produces extra embedded STRT records - # (session data from preceding histogram intervals bleeds into the 5A - # stream) — handle that mode separately once basic waveform is correct. - events = client.get_events(full_waveform=True, stop_after_index=index) + # Use full_waveform=False (stop_after_metadata=True) — stops when + # "Project:" is found in the 5A stream. Content is byte-identical to + # BW for Continuous/Single-Shot events; our file is slightly shorter + # (~286 bytes of extra ADC signal BW includes past the metadata). + # full_waveform=True corrupts the body: silence chunks past the event + # contain device-internal pointers that embed extra STRT records. + events = client.get_events(full_waveform=False, stop_after_index=index) matching = [ev for ev in events if ev.index == index] return matching[0] if matching else None, info ev, info = _run_with_retry(_do, is_tcp=_is_tcp(host))