flatudp: vector rows as channels or as a waveform, a re-openable source, probes for both

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Martino FerrariandClaude Opus 4.6 committed 2026-11-02 01:18:43 +01:00
1 parent a523bc2bd9
commit e3bc1f72f3
10 files changed
+446 -100

No files matched your search

+4 -2
View File
@@ -7,7 +7,9 @@ One datagram is one cycle: the signals concatenated in declaration order, no pad
chosen byte order. Packet i carries, for the signal of index k (from 0) and its element e,
the value (i * (k + 1) + e) % 100, so consecutive datagrams are predictable.
--signals name:type[count],... default Trigger:uint8,Ia:float32,Cnt:uint64,Wave:int16[4]
--signals name:type[count][w],... default Trigger:uint8,Ia:float32,Cnt:uint64,Wave:int16[4]
(the datagram is the same with or without the app's trailing w, which only says
how the app shows a vector: one channel per element, or one waveform channel)
--rate cycles per second
--big-endian pack big endian (default little)
--gap S,D send nothing from S to S+D seconds after the start (a sender that stops)
@@ -32,7 +34,7 @@ def parse_signals(text):
count = 1
if "[" in ty:
ty, _, n = ty.partition("[")
count = int(n.rstrip("]"))
count = int(n.strip().rstrip("w").rstrip().rstrip("]")) # a trailing w (waveform) is the app's
out.append((name.strip(), CODES[ty.strip()], count))
return out