plan: task 7 carries the real rx ring and the unit measurement

This commit is contained in:
opencode.energia.arti.ee committed 2026-10-31 00:31:12 +00:00
1 parent 53b1580abd
commit 7eb7b61234
1 file changed
+42 -14
@@ -365,34 +365,62 @@ git commit -m "feat(stream): paced sender and terminal status frames"
---
### Task 7: Unit run and measurement
### Task 7: Real RX ring, then the unit measurement
**Files:**
- Modify: `harness/udpstream/vidstream.c` (RX ring), `harness/mame/vidstream.lua`
- Create: `harness/udpstream/test-stream.sh`
- Modify: `harness/mame/NETWORK_REPORT.md` (new section: scheme A on the unit)
- [ ] **Step 1: Write `test-stream.sh`**
**Interfaces:**
- Consumes: `fp_parse`, `blit_row`, the marker page (R12), the status frame (Task 6).
- Produces: a payload that receives real Ethernet through its own LANCE RX ring and paints it;
`test-stream.sh <iface> <mac> [rows] [stretch]` driving 300 frames and reporting fps/bytes/drops.
Same shape as `bench-sweep.sh`: `sudo ./test-stream.sh <iface> <mac> [rows] [stretch]`, driving `vidsend.py` at 30 fps for 300 frames and recording fps, delivery %, drops, CSR0 error bits.
**Ruling R16:** ruling R11 deferred the *DMA* path to this task. The payload's RX is currently a
debugger-injected buffer; this task replaces it with the ring the unit needs, and closes the two
Important findings from Task 4: (a) clamp `len` to `SLOT_BYTES` before `fp_parse`; (b) replace the
level-triggered `RX_READY` flag with a consume counter (or mask RX while consuming), because a real
ISR owns that cell. The unit run itself needs the physical terminal (R4) and is recorded as
human-assisted.
- [ ] **Step 2: Run it on the unit**
- [ ] **Step 1: Write the failing MAME check**
Run: `sudo ./test-stream.sh enp197s0f3u1 08:00:2b:16:4b:5a 80 12`
Expected: a CSV row per 30 frames, no `MISS`, and a measurable fps.
Add `VT1200_MODE=ring` to `vidstream.lua`: assert the payload arms 16 descriptors with OWN set for
slot A, that a completion moves the write pointer to slot B, and that a descriptor marked with a
frame larger than `SLOT_BYTES` is rejected without a blit (`RX_BAD` increments, `RX_OK` does not).
- [ ] **Step 3: Measure `B,XY` versus `L,XY`**
- [ ] **Step 2: Run it to verify it fails**
Run the same test with the helper forced to `vram_blit_` (L,XY) via `--blit=l`, and record both fps values. This is the number the tile plan needs.
Run: `VT1200_MODE=ring harness/mame/run-vidstream.sh`
Expected: FAIL — the ring words are zero (no RX ring exists yet).
- [ ] **Step 4: 3.5-minute soak**
- [ ] **Step 3: Implement the RX ring**
Run 6,300 frames continuously; assert the terminal still answers and the picture is still updating (status frames keep arriving).
16 descriptors × 1526 bytes at `RX_SLOT_A`; arm all 16 for the active slot at frame start; on
completion sum the delivered lengths, clamp to `SLOT_BYTES`, `fp_parse`, paint, then arm the other
slot. Count `drops` when a completion arrives while the previous slot is still being painted.
- [ ] **Step 5: Commit the numbers**
- [ ] **Step 4: Run the ring check to verify it passes**
Run: `VT1200_MODE=ring harness/mame/run-vidstream.sh`
Expected: PASS, with the descriptor/OWN transition and the oversize rejection both evidenced.
- [ ] **Step 5: Write `test-stream.sh`**
Same shape as `bench-sweep.sh`: `sudo ./test-stream.sh <iface> <mac> [rows] [stretch]`, 300 frames
at 30 fps through `vidsend.py`, one CSV row per 30 frames (fps, delivery %, drops, CSR0 bits).
- [ ] **Step 6: Unit run (human-assisted)**
Run: `sudo ./test-stream.sh <iface> 08:00:2b:16:4b:5a 128 8`, then the same with the blit forced to
`L,XY`, then a 6,300-frame soak. Record fps for both, and whether the OS interfered (`OS_TOUCH`).
This step cannot be executed without the terminal; it stays open until the operator runs it.
- [ ] **Step 7: Commit**
```bash
git add harness/udpstream/test-stream.sh harness/mame/NETWORK_REPORT.md
git commit -m "test(stream): scheme A measured on the unit (B,XY vs L,XY, 3.5 min soak)"
git add harness/udpstream/vidstream.c harness/mame/vidstream.lua harness/udpstream/test-stream.sh
git commit -m "feat(stream): real rx ring over chained descriptors; unit measurement script"
```
---