fix(blastware_file, server): enhance logging and correct chunk handling for accurate data processing

This commit is contained in:
2026-04-26 16:03:07 -04:00
parent 2f084ed105
commit ae30a02898
2 changed files with 37 additions and 10 deletions
+9 -8
View File
@@ -885,21 +885,22 @@ def device_event_blastware_file(
def _do():
with _build_client(port, baud, host, tcp_port, timeout=120.0) as client:
info = client.connect()
# Use stop_after_metadata=True (full_waveform=False) with 1 extra
# chunk after "Project:". For any record time, the pre-metadata
# section of the 5A stream naturally carries proportionally more
# ADC data for longer events — so "1 extra chunk" produces the
# correct body length regardless of record time.
# Use stop_after_metadata=True (full_waveform=False) with 0 extra
# chunks after "Project:". Confirmed from 4-26-26 BW RS-232 capture
# of "copy event to file" on a 2-sec Continuous event (key=01110000):
# BW sends the termination frame IMMEDIATELY after the chunk that
# contains "Project:" — no extra chunk is downloaded first.
# extra_chunks_after_metadata=1 was WRONG: it downloaded one additional
# chunk (counter = last_data_counter + 0x0400) adding ~1053 spurious
# bytes to the body, causing Blastware to reject the file.
#
# full_waveform=True (natural end-of-stream) downloads ALL chunks
# including post-event silence (35+ chunks for a 9-sec event at
# 1024 sps) — this produces 24KB+ files that Blastware rejects.
# Confirmed from file size comparison: BW 1-sec=4400B, BW 3-sec=8114B,
# per-second delta 1857 bytes — matches pre-metadata frame scaling.
events = client.get_events(
full_waveform=False,
stop_after_index=index,
extra_chunks_after_metadata=1,
extra_chunks_after_metadata=0,
)
matching = [ev for ev in events if ev.index == index]
return matching[0] if matching else None, info