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

@@ -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
```