From 5b4179d341312bde0fa0f7c7070099a72e44f1e8 Mon Sep 17 00:00:00 2001 From: Aiden <68633820+awils27@users.noreply.github.com> Date: Wed, 13 May 2026 15:15:09 +1000 Subject: [PATCH] run 1 --- captures/rcp-context-selector-00-a0-b8-bc.txt | 20 +++++ captures/rcp-context-selector-9f-a0.txt | 7 ++ captures/rcp-context-selector-af-b0.txt | 8 ++ captures/rcp-context-selector-b7-b8.txt | 8 ++ captures/rcp-context-selector-bb-bc.txt | 8 ++ captures/rcp-context-seq-90-9f-a0.txt | 10 +++ captures/rcp-context-single-a0.txt | 5 ++ captures/rcp-context-single-b8.txt | 5 ++ captures/rcp-context-single-bc.txt | 5 ++ docs/discovery-notes.md | 85 +++++++++++++++++++ 10 files changed, 161 insertions(+) create mode 100644 captures/rcp-context-selector-00-a0-b8-bc.txt create mode 100644 captures/rcp-context-selector-9f-a0.txt create mode 100644 captures/rcp-context-selector-af-b0.txt create mode 100644 captures/rcp-context-selector-b7-b8.txt create mode 100644 captures/rcp-context-selector-bb-bc.txt create mode 100644 captures/rcp-context-seq-90-9f-a0.txt create mode 100644 captures/rcp-context-single-a0.txt create mode 100644 captures/rcp-context-single-b8.txt create mode 100644 captures/rcp-context-single-bc.txt diff --git a/captures/rcp-context-selector-00-a0-b8-bc.txt b/captures/rcp-context-selector-00-a0-b8-bc.txt new file mode 100644 index 0000000..c4abba8 --- /dev/null +++ b/captures/rcp-context-selector-00-a0-b8-bc.txt @@ -0,0 +1,20 @@ +Primer/candidate sweep: primer 00 00 00 00 80 DA, 3 candidates on COM5 at 38400 8N1 +CANDIDATE 0xA0 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:07:49.552 TX primer frame 006 00 00 00 00 80 DA +15:07:50.163 TX candidate 0xA0 frame 006 00 00 A0 00 80 7A +15:07:50.163 CANDIDATE 0xA0 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00 +15:07:50.163 CANDIDATE 0xA0 raw 07 80 E8 40 30 45 07 80 E8 40 30 45 07 80 E8 40 30 45 07 80 E8 40 30 45 07 80 E8 40 30 45 07 80 E8 40 30 45 07 80 E8 40 30 45 +Completed candidate 1/3 +CANDIDATE 0xB8 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:08:02.305 TX primer frame 006 00 00 00 00 80 DA +15:08:02.918 TX candidate 0xB8 frame 006 00 00 B8 00 80 62 +15:08:02.918 CANDIDATE 0xB8 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00 +15:08:02.918 CANDIDATE 0xB8 raw 07 80 6E 40 30 C3 07 80 6E 40 30 C3 07 80 6E 40 30 C3 07 80 6E 40 30 C3 07 80 6E 40 30 C3 07 80 6E 40 30 C3 07 80 6E 40 30 C3 +Completed candidate 2/3 +CANDIDATE 0xBC BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:08:15.181 TX primer frame 006 00 00 00 00 80 DA +15:08:15.789 TX candidate 0xBC frame 006 00 00 BC 00 80 66 +15:08:15.789 CANDIDATE 0xBC ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00 +15:08:15.789 CANDIDATE 0xBC raw 07 80 6F 40 30 C2 07 80 6F 40 30 C2 07 80 6F 40 30 C2 07 80 6F 40 30 C2 07 80 6F 40 30 C2 07 80 6F 40 30 C2 07 80 6F 40 30 C2 +Completed candidate 3/3 +Anomalies: 3 diff --git a/captures/rcp-context-selector-9f-a0.txt b/captures/rcp-context-selector-9f-a0.txt new file mode 100644 index 0000000..72e7ccd --- /dev/null +++ b/captures/rcp-context-selector-9f-a0.txt @@ -0,0 +1,7 @@ +Primer/candidate sweep: primer 00 00 9F 00 80 45, 1 candidates on COM5 at 38400 8N1 +CANDIDATE 0xA0 BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:08:49.396 TX primer frame 006 00 00 9F 00 80 45 +15:08:50.008 TX candidate 0xA0 frame 006 00 00 A0 00 80 7A +15:08:50.008 CANDIDATE 0xA0 heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +Completed candidate 1/1 +Anomalies: 0 diff --git a/captures/rcp-context-selector-af-b0.txt b/captures/rcp-context-selector-af-b0.txt new file mode 100644 index 0000000..92eb6c7 --- /dev/null +++ b/captures/rcp-context-selector-af-b0.txt @@ -0,0 +1,8 @@ +Primer/candidate sweep: primer 00 00 AF 00 80 75, 1 candidates on COM5 at 38400 8N1 +CANDIDATE 0xB0 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:10:09.167 TX primer frame 006 00 00 AF 00 80 75 +15:10:09.777 TX candidate 0xB0 frame 006 00 00 B0 00 80 6A +15:10:09.777 CANDIDATE 0xB0 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00 +15:10:09.777 CANDIDATE 0xB0 raw 07 80 6C 40 30 C1 07 80 6C 40 30 C1 07 80 6C 40 30 C1 07 80 6C 40 30 C1 07 80 6C 40 30 C1 07 80 6C 40 30 C1 07 80 6C 40 30 C1 +Completed candidate 1/1 +Anomalies: 1 diff --git a/captures/rcp-context-selector-b7-b8.txt b/captures/rcp-context-selector-b7-b8.txt new file mode 100644 index 0000000..dfa528a --- /dev/null +++ b/captures/rcp-context-selector-b7-b8.txt @@ -0,0 +1,8 @@ +Primer/candidate sweep: primer 00 00 B7 00 80 6D, 1 candidates on COM5 at 38400 8N1 +CANDIDATE 0xB8 BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:09:15.729 TX primer frame 006 00 00 B7 00 80 6D +15:09:16.340 TX candidate 0xB8 frame 006 00 00 B8 00 80 62 +15:09:16.340 CANDIDATE 0xB8 ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00 +15:09:16.340 CANDIDATE 0xB8 raw 07 80 6E 40 30 C3 07 80 6E 40 30 C3 07 80 6E 40 30 C3 07 80 6E 40 30 C3 07 80 6E 40 30 C3 07 80 6E 40 30 C3 07 80 6E 40 30 C3 +Completed candidate 1/1 +Anomalies: 1 diff --git a/captures/rcp-context-selector-bb-bc.txt b/captures/rcp-context-selector-bb-bc.txt new file mode 100644 index 0000000..5dc4c32 --- /dev/null +++ b/captures/rcp-context-selector-bb-bc.txt @@ -0,0 +1,8 @@ +Primer/candidate sweep: primer 00 00 BB 00 80 61, 1 candidates on COM5 at 38400 8N1 +CANDIDATE 0xBC BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:09:47.430 TX primer frame 006 00 00 BB 00 80 61 +15:09:48.040 TX candidate 0xBC frame 006 00 00 BC 00 80 66 +15:09:48.040 CANDIDATE 0xBC ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00 +15:09:48.040 CANDIDATE 0xBC raw 07 80 6F 40 30 C2 07 80 6F 40 30 C2 07 80 6F 40 30 C2 07 80 6F 40 30 C2 07 80 6F 40 30 C2 07 80 6F 40 30 C2 07 80 6F 40 30 C2 +Completed candidate 1/1 +Anomalies: 1 diff --git a/captures/rcp-context-seq-90-9f-a0.txt b/captures/rcp-context-seq-90-9f-a0.txt new file mode 100644 index 0000000..5e825c4 --- /dev/null +++ b/captures/rcp-context-seq-90-9f-a0.txt @@ -0,0 +1,10 @@ +Direct response sweep: 3 frames x 1 cycles (3 total) on COM5 at 38400 8N1 +BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:10:35.107 TX cycle=1 p1=0x00 p2=0x00 cmd=0x90 state=0x00 value=0x80 frame 006 00 00 90 00 80 4A +15:10:35.932 TX cycle=1 p1=0x00 p2=0x00 cmd=0x9F state=0x00 value=0x80 frame 006 00 00 9F 00 80 45 +15:10:36.756 TX cycle=1 p1=0x00 p2=0x00 cmd=0xA0 state=0x00 value=0x80 frame 006 00 00 A0 00 80 7A +15:10:36.756 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00 +15:10:36.756 RX raw 07 80 68 40 30 C5 07 80 68 40 30 C5 07 80 68 40 30 C5 07 80 68 40 30 C5 +FINAL ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 0 expected 00 +FINAL raw 07 80 68 40 30 C5 07 80 68 40 30 C5 07 80 68 40 30 C5 07 80 68 40 30 C5 07 80 68 40 30 C5 00 00 00 00 80 DA 00 00 00 00 80 DA +Anomalies: 1 diff --git a/captures/rcp-context-single-a0.txt b/captures/rcp-context-single-a0.txt new file mode 100644 index 0000000..3b4fd9c --- /dev/null +++ b/captures/rcp-context-single-a0.txt @@ -0,0 +1,5 @@ +Direct response sweep: 1 frames x 1 cycles (1 total) on COM5 at 38400 8N1 +BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes +15:11:06.315 TX cycle=1 p1=0x00 p2=0x00 cmd=0xA0 state=0x00 value=0x80 frame 006 00 00 A0 00 80 7A +FINAL heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +Anomalies: 0 diff --git a/captures/rcp-context-single-b8.txt b/captures/rcp-context-single-b8.txt new file mode 100644 index 0000000..a232e95 --- /dev/null +++ b/captures/rcp-context-single-b8.txt @@ -0,0 +1,5 @@ +Direct response sweep: 1 frames x 1 cycles (1 total) on COM5 at 38400 8N1 +BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:11:25.737 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB8 state=0x00 value=0x80 frame 006 00 00 B8 00 80 62 +FINAL heartbeat-compatible RX: 18 bytes, offset 0, 3 frames + 0 bytes +Anomalies: 0 diff --git a/captures/rcp-context-single-bc.txt b/captures/rcp-context-single-bc.txt new file mode 100644 index 0000000..ed66128 --- /dev/null +++ b/captures/rcp-context-single-bc.txt @@ -0,0 +1,5 @@ +Direct response sweep: 1 frames x 1 cycles (1 total) on COM5 at 38400 8N1 +BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +15:11:45.976 TX cycle=1 p1=0x00 p2=0x00 cmd=0xBC state=0x00 value=0x80 frame 006 00 00 BC 00 80 66 +FINAL heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes +Anomalies: 0 diff --git a/docs/discovery-notes.md b/docs/discovery-notes.md index 23aeaa6..3f9868c 100644 --- a/docs/discovery-notes.md +++ b/docs/discovery-notes.md @@ -2253,3 +2253,88 @@ python scripts/serial_direct_response_sweep.py --port COM5 --commands 0xBC --sta ``` Power-cycle before each single-frame control. + +### 2026-05-13 Context Selector Dataset Results + +New captures: + +- `captures/rcp-context-selector-00-a0-b8-bc.txt` +- `captures/rcp-context-selector-9f-a0.txt` +- `captures/rcp-context-selector-b7-b8.txt` +- `captures/rcp-context-selector-bb-bc.txt` +- `captures/rcp-context-selector-af-b0.txt` +- `captures/rcp-context-seq-90-9f-a0.txt` +- `captures/rcp-context-single-a0.txt` +- `captures/rcp-context-single-b8.txt` +- `captures/rcp-context-single-bc.txt` + +Observed results: + +| Test | Sequence | Observed response | +| --- | --- | --- | +| CS1 | `00 -> A0` | `07 80 E8 40 30 45` | +| CS1 | `00 -> B8` | `07 80 6E 40 30 C3` | +| CS1 | `00 -> BC` | `07 80 6F 40 30 C2` | +| CS2 | `9F -> A0` | heartbeat only | +| CS2 | `B7 -> B8` | `07 80 6E 40 30 C3` | +| CS2 | `BB -> BC` | `07 80 6F 40 30 C2` | +| CS2 | `AF -> B0` | `07 80 6C 40 30 C1` | +| CS3 | `90 -> 9F -> A0` | `07 80 68 40 30 C5` | +| Single-frame control | `A0` | heartbeat only | +| Single-frame control | `B8` | heartbeat only | +| Single-frame control | `BC` | heartbeat only | + +Important comparison against earlier sweeps: + +| Selected query | Earlier primer sweep response | New `00 -> query` response | +| ---: | --- | --- | +| `A0` | `07 80 68 40 30 C5` | `07 80 E8 40 30 45` | +| `B8` | `07 80 EE 40 30 43` | `07 80 6E 40 30 C3` | +| `BC` | `07 80 EF 40 30 42` | `07 80 6F 40 30 C2` | + +Interpretation: + +- Single `A0`, `B8`, and `BC` frames after boot produced heartbeat only, so + these responses require prior host traffic. +- The response is not determined only by the selected query command. The same + selected query can produce different response blocks in different setup + contexts. +- `B7 -> B8` and `BB -> BC` reproduced the alternate `B8`/`BC` responses seen + in the paused direct sweep. +- `90 -> 9F -> A0` reproduced the earlier `A0` response + `07 80 68 40 30 C5`, while `9F -> A0` alone produced no response. +- `00 -> A0` now produced the alternate `A0` response + `07 80 E8 40 30 45`, so the `00` first frame is not always a simple + deterministic "generic primer" in the current bench state. +- The evidence now favors a stateful/page-sensitive discovery model rather than + a single fixed primer model. + +Working model after these datasets: + +```text +Host sends one or more setup/selector frames. +RCP arms one readable response. +The next selected query returns a block from the currently selected page/state. +After that response, the RCP latches until power cycle or an unknown reset/state +advance command. +``` + +Recommended next confirmation: + +1. Repeat `00 -> A0`, `00 -> B8`, and `00 -> BC` once more after clean power + cycles to see whether the alternate page is now stable. +2. Repeat `90 -> 9F -> A0` once more to confirm the earlier page can be selected + reliably. +3. Test whether `90 -> A0` alone selects the earlier page, or whether `9F` is + also required. +4. Test whether `00 -> 9F -> A0` behaves like `90 -> 9F -> A0`, which would + suggest `9F` is the real selector and `90` is only a setup/arming frame. + +Suggested commands: + +```powershell +python scripts/serial_primer_candidate_sweep.py --port COM5 --primer-command 0x00 --candidates "0xA0 0xB8 0xBC" --prompt-power-cycle --log captures/rcp-context-repeat-00-a0-b8-bc.txt +python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x90 0x9F 0xA0" --states 0x00 --values 0x80 --settle 3 --after-each 0.8 --after 3 --log captures/rcp-context-repeat-90-9f-a0.txt +python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x90 0xA0" --states 0x00 --values 0x80 --settle 3 --after-each 0.8 --after 3 --log captures/rcp-context-seq-90-a0.txt +python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0x9F 0xA0" --states 0x00 --values 0x80 --settle 3 --after-each 0.8 --after 3 --log captures/rcp-context-seq-00-9f-a0.txt +```