Query response, one way,

This commit is contained in:
Aiden
2026-05-13 13:38:49 +10:00
parent b2d6c9c1f3
commit 5e736bf395
18 changed files with 429 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
13:13:50.027 TX cycle=1 p1=0x00 p2=0x00 cmd=0xAF state=0x00 value=0x80 frame 006 00 00 AF 00 80 75
13:13:50.638 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB0 state=0x00 value=0x80 frame 006 00 00 B0 00 80 6A
13:13:50.638 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
13:13:50.638 RX raw 07 80 6C 60 30 E1 07 80 6C 60 30 E1 07 80 6C 60 30 E1 07 80 6C 60 30 E1
Stopping after anomaly.
FINAL ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
FINAL raw 07 80 6C 60 30 E1 07 80 6C 60 30 E1 07 80 6C 60 30 E1 07 80 6C 60 30 E1 07 80 6C 60 30 E1 00 00 00 00 80 DA
Anomalies: 1

View File

@@ -0,0 +1,10 @@
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
13:27:04.056 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB0 state=0x00 value=0x80 frame 006 00 00 B0 00 80 6A
13:27:04.666 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB2 state=0x00 value=0x80 frame 006 00 00 B2 00 80 68
13:27:04.666 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
13:27:04.666 RX raw 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7
Stopping after anomaly.
FINAL ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
FINAL raw 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 00 00 00 00 80 DA
Anomalies: 1

View File

@@ -0,0 +1,10 @@
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
13:27:21.105 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB1 state=0x00 value=0x80 frame 006 00 00 B1 00 80 6B
13:27:21.715 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB0 state=0x00 value=0x80 frame 006 00 00 B0 00 80 6A
13:27:21.715 ANOMALY 18 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
13:27:21.715 RX raw 07 80 6C 40 30 C1 07 80 6C 40 30 C1 07 80 6C 40 30 C1
Stopping after anomaly.
FINAL ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
FINAL 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 00 00 00 00 80 DA
Anomalies: 1

View File

@@ -0,0 +1,10 @@
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
13:13:03.625 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB1 state=0x00 value=0x80 frame 006 00 00 B1 00 80 6B
13:13:04.234 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB2 state=0x00 value=0x80 frame 006 00 00 B2 00 80 68
13:13:04.234 ANOMALY 18 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
13:13:04.234 RX raw 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7
Stopping after anomaly.
FINAL ANOMALY 37 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
FINAL raw 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 00
Anomalies: 1

View File

@@ -0,0 +1,10 @@
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
13:13:29.815 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB2 state=0x00 value=0x80 frame 006 00 00 B2 00 80 68
13:13:30.427 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB3 state=0x00 value=0x80 frame 006 00 00 B3 00 80 69
13:13:30.427 ANOMALY 18 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
13:13:30.427 RX raw 07 80 36 10 2C D7 07 80 36 10 2C D7 07 80 36 10 2C D7
Stopping after anomaly.
FINAL ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
FINAL raw 07 80 36 10 2C D7 07 80 36 10 2C D7 07 80 36 10 2C D7 07 80 36 10 2C D7 07 80 36 10 2C D7 07 80 36 10 2C D7 00 00 00 00 80 DA
Anomalies: 1

View File

@@ -0,0 +1,10 @@
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
13:26:30.130 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB3 state=0x00 value=0x80 frame 006 00 00 B3 00 80 69
13:26:30.740 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB4 state=0x00 value=0x80 frame 006 00 00 B4 00 80 6E
13:26:30.740 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
13:26:30.740 RX raw 07 80 6D 40 30 C0 07 80 6D 40 30 C0 07 80 6D 40 30 C0 07 80 6D 40 30 C0
Stopping after anomaly.
FINAL ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
FINAL raw 07 80 6D 40 30 C0 07 80 6D 40 30 C0 07 80 6D 40 30 C0 07 80 6D 40 30 C0 07 80 6D 40 30 C0 00 00 00 00 80 DA
Anomalies: 1

View File

@@ -0,0 +1,10 @@
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
BASELINE heartbeat-compatible RX: 30 bytes, offset 0, 5 frames + 0 bytes
13:26:47.180 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB4 state=0x00 value=0x80 frame 006 00 00 B4 00 80 6E
13:26:47.790 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
13:26:47.790 ANOMALY 18 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
13:26:47.790 RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
Stopping after anomaly.
FINAL ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
FINAL raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 00 00 00 00 80 DA
Anomalies: 1

View File

@@ -0,0 +1,10 @@
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
13:30:46.629 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
13:30:47.240 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB6 state=0x00 value=0x80 frame 006 00 00 B6 00 80 6C
13:30:47.240 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
13:30:47.240 RX raw 07 80 1B 08 C6 08 07 80 1B 08 C6 08 07 80 1B 08 C6 08 07 80 1B 08 C6 08
Stopping after anomaly.
FINAL ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
FINAL raw 07 80 1B 08 C6 08 07 80 1B 08 C6 08 07 80 1B 08 C6 08 07 80 1B 08 C6 08 07 80 1B 08 C6 08 00 00 00 00 80 DA
Anomalies: 1

View File

@@ -0,0 +1,10 @@
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
13:31:00.604 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB6 state=0x00 value=0x80 frame 006 00 00 B6 00 80 6C
13:31:01.211 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB7 state=0x00 value=0x80 frame 006 00 00 B7 00 80 6D
13:31:01.211 ANOMALY 18 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
13:31:01.211 RX raw 07 80 1B 08 D6 18 07 80 1B 08 D6 18 07 80 1B 08 D6 18
Stopping after anomaly.
FINAL ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
FINAL raw 07 80 1B 08 D6 18 07 80 1B 08 D6 18 07 80 1B 08 D6 18 07 80 1B 08 D6 18 07 80 1B 08 D6 18 07 80 1B 08 D6 18 00 00 00 00 80 DA
Anomalies: 1

View File

@@ -0,0 +1,10 @@
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
BASELINE heartbeat-compatible RX: 29 bytes, offset 1, 4 frames + 5 bytes
13:30:09.489 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
13:30:10.100 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB0 state=0x00 value=0x80 frame 006 00 00 B0 00 80 6A
13:30:10.100 ANOMALY 18 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
13:30:10.100 RX raw 07 80 6C 40 30 C1 07 80 6C 40 30 C1 07 80 6C 40 30 C1
Stopping after anomaly.
FINAL ANOMALY 42 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
FINAL 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 00 00 00 00 80 DA
Anomalies: 1

View File

@@ -0,0 +1,10 @@
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
13:30:28.281 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
13:30:28.891 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB2 state=0x00 value=0x80 frame 006 00 00 B2 00 80 68
13:30:28.891 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
13:30:28.891 RX raw 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7
Stopping after anomaly.
FINAL ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
FINAL raw 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 07 80 36 10 0C F7 00 00 00 00 80 DA
Anomalies: 1

View File

@@ -0,0 +1,10 @@
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
13:33:39.847 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
13:33:40.459 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB3 state=0x00 value=0x80 frame 006 00 00 B3 00 80 69
13:33:40.459 ANOMALY 18 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
13:33:40.459 RX raw 07 80 36 10 2C D7 07 80 36 10 2C D7 07 80 36 10 2C D7
Stopping after anomaly.
FINAL ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
FINAL raw 07 80 36 10 2C D7 07 80 36 10 2C D7 07 80 36 10 2C D7 07 80 36 10 2C D7 07 80 36 10 2C D7 00 00 00 00 80 DA
Anomalies: 1

View File

@@ -0,0 +1,9 @@
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
BASELINE heartbeat-compatible RX: 25 bytes, offset 0, 4 frames + 1 bytes
13:33:54.954 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
13:33:55.562 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB4 state=0x00 value=0x80 frame 006 00 00 B4 00 80 6E
13:33:55.562 ANOMALY 6 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
13:33:55.562 RX raw 07 80 6D 40 30 C0
Stopping after anomaly.
FINAL heartbeat-compatible RX: 42 bytes, offset 0, 7 frames + 0 bytes
Anomalies: 1

View File

@@ -0,0 +1,22 @@
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
13:34:11.314 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
13:34:11.920 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
13:34:11.920 ANOMALY 24 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
13:34:11.920 RX raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48
Stopping after anomaly.
FINAL ANOMALY 36 RX bytes; first mismatch at byte 0: got 07, heartbeat offset 3 expected 00
FINAL raw 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 07 80 6D 20 D8 48 00 00 00 00 80 DA
Anomalies: 1
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
13:34:19.726 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
13:34:20.336 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
FINAL heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes
Anomalies: 0
Direct response sweep: 2 frames x 1 cycles (2 total) on COM5 at 38400 8N1
BASELINE heartbeat-compatible RX: 24 bytes, offset 0, 4 frames + 0 bytes
13:34:29.566 TX cycle=1 p1=0x00 p2=0x00 cmd=0x00 state=0x00 value=0x80 frame 006 00 00 00 00 80 DA
13:34:30.176 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB5 state=0x00 value=0x80 frame 006 00 00 B5 00 80 6F
FINAL heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes
Anomalies: 0

View File

@@ -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
13:32:44.468 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB2 state=0x00 value=0x80 frame 006 00 00 B2 00 80 68
FINAL heartbeat-compatible RX: 42 bytes, offset 0, 7 frames + 0 bytes
Anomalies: 0

View File

@@ -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
13:33:06.033 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB6 state=0x00 value=0x80 frame 006 00 00 B6 00 80 6C
FINAL heartbeat-compatible RX: 36 bytes, offset 0, 6 frames + 0 bytes
Anomalies: 0

View File

@@ -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
13:33:23.324 TX cycle=1 p1=0x00 p2=0x00 cmd=0xB7 state=0x00 value=0x80 frame 006 00 00 B7 00 80 6D
FINAL heartbeat-compatible RX: 42 bytes, offset 0, 7 frames + 0 bytes
Anomalies: 0

View File

@@ -1150,3 +1150,266 @@ python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB1-0xB2
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB2-0xB3" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-pair-b2-b3.txt
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xAF-0xB0" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-pair-af-b0.txt
```
### 2026-05-13 Nearby Pair Results
Captures:
- `captures/rcp-powercycle-pair-af-b0.txt`
- `captures/rcp-powercycle-pair-b1-b2.txt`
- `captures/rcp-powercycle-pair-b2-b3.txt`
Each test was run after a panel power cycle.
| Host pair | Second frame window | RCP response |
| --- | --- | --- |
| `AF -> B0` | `00 00 B0 00 80 6A` | `07 80 6C 60 30 E1` repeated |
| `B1 -> B2` | `00 00 B2 00 80 68` | `07 80 36 10 0C F7` repeated |
| `B2 -> B3` | `00 00 B3 00 80 69` | `07 80 36 10 2C D7` repeated |
Previously confirmed:
| Host pair | Second frame window | RCP response |
| --- | --- | --- |
| `B0 -> B1` | `00 00 B1 00 80 6B` | `07 80 6C 20 D8 49` repeated |
Checksum checks:
- `07 80 6C 60 30 E1`: checksum valid.
- `07 80 36 10 0C F7`: checksum valid.
- `07 80 36 10 2C D7`: checksum valid.
Interpretation:
- The RCP responds to multiple adjacent two-frame host sequences in the
`AF-B3` region, not only `B0 -> B1`.
- The response appears in the read window after the second frame of each pair.
- The response payload changes by pair, which suggests these are real command
queries or status reads rather than a generic link-present acknowledgement.
- The repeated response pattern still returns to the normal heartbeat afterward.
Emerging map:
| Host sequence | RCP response fields |
| --- | --- |
| `AF -> B0` | `p1=07 p2=80 cmd=6C state=60 value=30 checksum=E1` |
| `B0 -> B1` | `p1=07 p2=80 cmd=6C state=20 value=D8 checksum=49` |
| `B1 -> B2` | `p1=07 p2=80 cmd=36 state=10 value=0C checksum=F7` |
| `B2 -> B3` | `p1=07 p2=80 cmd=36 state=10 value=2C checksum=D7` |
Recommended next tests:
Power-cycle between each. First continue the adjacent-pair map:
```powershell
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB3-0xB4" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-pair-b3-b4.txt
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB4-0xB5" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-pair-b4-b5.txt
```
Then test whether adjacency and order matter:
```powershell
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB0 0xB2" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-pair-b0-b2-skip.txt
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB1 0xB0" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-pair-b1-b0-reverse.txt
```
### 2026-05-13 Additional Pair/Control Results
User observation:
- All tests still showed `CONNECT NOT ACT` on the RCP/CCU screen, with no other
visible state change.
Serial captures:
- `captures/rcp-powercycle-pair-b3-b4.txt`
- `captures/rcp-powercycle-pair-b4-b5.txt`
- `captures/rcp-powercycle-pair-b0-b2-skip.txt`
- `captures/rcp-powercycle-pair-b1-b0-reverse.txt`
Each test was run after a panel power cycle.
| Host pair | Second frame window | RCP response |
| --- | --- | --- |
| `B3 -> B4` | `00 00 B4 00 80 6E` | `07 80 6D 40 30 C0` repeated |
| `B4 -> B5` | `00 00 B5 00 80 6F` | `07 80 6D 20 D8 48` repeated |
| `B0 -> B2` | `00 00 B2 00 80 68` | `07 80 36 10 0C F7` repeated |
| `B1 -> B0` | `00 00 B0 00 80 6A` | `07 80 6C 40 30 C1` repeated |
Interpretation:
- The screen state remains `CONNECT NOT ACT`, but pin 4 responses are changing
in a structured, checksum-valid way.
- The skip test `B0 -> B2` produced the same response as `B1 -> B2`, so the
second command may be the main selector once any valid priming frame is sent.
- The reverse test `B1 -> B0` also produced a valid response, so strict
ascending adjacency is not required.
- Current model: a first host frame primes/enters a response mode, and the
second host frame selects a status/query response.
Expanded observed response map:
| Second host command | Observed response(s) |
| ---: | --- |
| `B0` | `07 80 6C 60 30 E1` after `AF -> B0`; `07 80 6C 40 30 C1` after `B1 -> B0` |
| `B1` | `07 80 6C 20 D8 49` after `B0 -> B1` |
| `B2` | `07 80 36 10 0C F7` after `B1 -> B2` and `B0 -> B2` |
| `B3` | `07 80 36 10 2C D7` after `B2 -> B3` |
| `B4` | `07 80 6D 40 30 C0` after `B3 -> B4` |
| `B5` | `07 80 6D 20 D8 48` after `B4 -> B5` |
Recommended next tests:
Power-cycle between each. Test whether a generic primer plus selected second
command is enough:
```powershell
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB0" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-primer-00-b0.txt
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB2" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-primer-00-b2.txt
```
Then map the next selected second commands:
```powershell
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB5-0xB6" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-pair-b5-b6.txt
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0xB6-0xB7" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-pair-b6-b7.txt
```
### 2026-05-13 Generic Primer and B6-B7 Results
Captures:
- `captures/rcp-powercycle-primer-00-b0.txt`
- `captures/rcp-powercycle-primer-00-b2.txt`
- `captures/rcp-powercycle-pair-b5-b6.txt`
- `captures/rcp-powercycle-pair-b6-b7.txt`
Each test was run after a panel power cycle.
| Host pair | Second frame window | RCP response |
| --- | --- | --- |
| `00 -> B0` | `00 00 B0 00 80 6A` | `07 80 6C 40 30 C1` repeated |
| `00 -> B2` | `00 00 B2 00 80 68` | `07 80 36 10 0C F7` repeated |
| `B5 -> B6` | `00 00 B6 00 80 6C` | `07 80 1B 08 C6 08` repeated |
| `B6 -> B7` | `00 00 B7 00 80 6D` | `07 80 1B 08 D6 18` repeated |
Checksum checks:
- `07 80 6C 40 30 C1`: checksum valid.
- `07 80 36 10 0C F7`: checksum valid.
- `07 80 1B 08 C6 08`: checksum valid.
- `07 80 1B 08 D6 18`: checksum valid.
Interpretation:
- `00 -> B0` produced the same response as `B1 -> B0`.
- `00 -> B2` produced the same response as `B0 -> B2` and `B1 -> B2`.
- This supports the model that the first frame can be a generic valid primer,
and the second frame selects the response.
- The `B6` and `B7` selected responses introduce another response command class
(`cmd=0x1B`) with changing value bytes.
Updated selected-command map:
| Selected second command | Observed response |
| ---: | --- |
| `B0` | `07 80 6C 40 30 C1` after `00 -> B0` and `B1 -> B0`; `07 80 6C 60 30 E1` after `AF -> B0` |
| `B1` | `07 80 6C 20 D8 49` after `B0 -> B1` |
| `B2` | `07 80 36 10 0C F7` after `00 -> B2`, `B0 -> B2`, and `B1 -> B2` |
| `B3` | `07 80 36 10 2C D7` after `B2 -> B3` |
| `B4` | `07 80 6D 40 30 C0` after `B3 -> B4` |
| `B5` | `07 80 6D 20 D8 48` after `B4 -> B5` |
| `B6` | `07 80 1B 08 C6 08` after `B5 -> B6` |
| `B7` | `07 80 1B 08 D6 18` after `B6 -> B7` |
Recommended next controls:
Power-cycle between each. First prove whether `B2`, `B6`, and `B7` need a
primer, or whether they can respond as single frames from cold boot:
```powershell
python scripts/serial_direct_response_sweep.py --port COM5 --commands 0xB2 --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-single-b2.txt
python scripts/serial_direct_response_sweep.py --port COM5 --commands 0xB6 --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-single-b6.txt
python scripts/serial_direct_response_sweep.py --port COM5 --commands 0xB7 --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-single-b7.txt
```
Then continue the selected-command map using `00` as the primer:
```powershell
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB3" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-primer-00-b3.txt
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB4" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-primer-00-b4.txt
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB5" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-primer-00-b5.txt
```
### 2026-05-13 Single-Frame and One-Shot Primer Results
Captures:
- `captures/rcp-powercycle-single-b2.txt`
- `captures/rcp-powercycle-single-b6.txt`
- `captures/rcp-powercycle-single-b7.txt`
- `captures/rcp-powercycle-primer-00-b3.txt`
- `captures/rcp-powercycle-primer-00-b4.txt`
- `captures/rcp-powercycle-primer-00-b5.txt`
Single-frame controls, each after a panel power cycle:
| Test | Pin 4 result |
| --- | --- |
| `B2` alone | heartbeat only, `Anomalies: 0` |
| `B6` alone | heartbeat only, `Anomalies: 0` |
| `B7` alone | heartbeat only, `Anomalies: 0` |
Generic-primer map, each first run after a panel power cycle:
| Host pair | Second frame window | RCP response |
| --- | --- | --- |
| `00 -> B3` | `00 00 B3 00 80 69` | `07 80 36 10 2C D7` repeated |
| `00 -> B4` | `00 00 B4 00 80 6E` | `07 80 6D 40 30 C0` |
| `00 -> B5` | `00 00 B5 00 80 6F` | `07 80 6D 20 D8 48` repeated |
Repeated `00 -> B5` without power-cycling:
| Attempt | Power cycle before attempt? | Result |
| ---: | --- | --- |
| 1 | yes | `07 80 6D 20 D8 48` repeated |
| 2 | no | heartbeat only, `Anomalies: 0` |
| 3 | no | heartbeat only, `Anomalies: 0` |
Interpretation:
- A single selected command is not enough; the panel requires a preceding valid
primer frame.
- `00` works as a primer for `B0`, `B2`, `B3`, `B4`, and `B5`.
- The same primed query may be one-shot after power-up. After `00 -> B5`
returns its response, repeating `00 -> B5` without power-cycling does not
produce another non-heartbeat response.
- Future mapping should power-cycle before each selected-command test unless
intentionally studying latch/repeat behavior.
Current generic-primer selected-command map:
| Host query | RCP response |
| --- | --- |
| `00 -> B0` | `07 80 6C 40 30 C1` |
| `00 -> B2` | `07 80 36 10 0C F7` |
| `00 -> B3` | `07 80 36 10 2C D7` |
| `00 -> B4` | `07 80 6D 40 30 C0` |
| `00 -> B5` | `07 80 6D 20 D8 48` |
Recommended next tests:
Power-cycle before each query. Fill the missing `00 -> B1` entry and continue
the `00 -> selected` map:
```powershell
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB1" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-primer-00-b1.txt
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB6" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-primer-00-b6.txt
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB7" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --stop-on-anomaly --log captures/rcp-powercycle-primer-00-b7.txt
```
Optional latch test, without power-cycling after the first run:
```powershell
python scripts/serial_direct_response_sweep.py --port COM5 --commands "0x00 0xB5" --states 0x00 --values 0x80 --settle 3 --after-each 0.6 --cycles 3 --cycle-pause 2 --log captures/rcp-latch-primer-00-b5-cycles.txt
```