run 18
This commit is contained in:
@@ -4293,3 +4293,461 @@ Next branch worth testing:
|
||||
- or combine heartbeat maintenance with the synthetic CALL path, to test
|
||||
whether "host present" plus an event-path trigger behaves differently than
|
||||
"host present" plus a plain table query
|
||||
|
||||
## Camera-Info-Stream Hypothesis Ladder
|
||||
|
||||
Goal:
|
||||
|
||||
- Test the idea that the panel wants more than a plain link heartbeat.
|
||||
- Treat one frame family as "host present" and another as possible
|
||||
camera-state/camera-info traffic.
|
||||
- Check whether the transient heartbeat-induced `0x40` / `0xC0` family is a
|
||||
different readable page or context, not just noise.
|
||||
|
||||
Working model:
|
||||
|
||||
1. host heartbeat says "I am here"
|
||||
2. a second family says "here is current camera state"
|
||||
3. only then does the panel become fully active
|
||||
|
||||
### CI1: Provoke `0x40` Family, Then Query `B0`
|
||||
|
||||
Use the same dense double-heartbeat pattern that previously provoked
|
||||
`07 80 40 40 30 ED`, then immediately ask for a known `B0` block.
|
||||
|
||||
```powershell
|
||||
python scripts/serial_sequence_probe.py --port COM5 --prompt --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --frame "00 00 B0 00 80 6A" --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --repeat 4 --frame-interval 0.10 --read-after-frame 0.25 --read-after-group 0.5 --log captures/rcp-camerainfo-40-then-b0.txt
|
||||
```
|
||||
|
||||
Question:
|
||||
|
||||
- Does the `0x40` family suppress `B0`, alter `B0`, or allow a different `B0`
|
||||
response family than the normal `07 80 6C 40 30 C1`?
|
||||
|
||||
### CI2: Provoke `0x40` Family, Then Query `B5`
|
||||
|
||||
Same idea, but use the strongest discovery-like block we have.
|
||||
|
||||
```powershell
|
||||
python scripts/serial_sequence_probe.py --port COM5 --prompt --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --frame "00 00 B5 00 80 6F" --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --repeat 4 --frame-interval 0.10 --read-after-frame 0.25 --read-after-group 0.5 --log captures/rcp-camerainfo-40-then-b5.txt
|
||||
```
|
||||
|
||||
Question:
|
||||
|
||||
- If `B5` is really a discovery/status block, does entering the heartbeat-driven
|
||||
`0x40` state make it return a different page, or consume it entirely?
|
||||
|
||||
### CI3: Probe Commands Aligned With The Heartbeat-Induced Family
|
||||
|
||||
Try a simple `00 -> 40` and `00 -> C0` query again, but now with a small
|
||||
heartbeat run-up first instead of a bare primer.
|
||||
|
||||
```powershell
|
||||
python scripts/serial_sequence_probe.py --port COM5 --prompt --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --frame "00 00 40 00 80 9A" --read-after-frame 0.4 --read-after-group 1.0 --log captures/rcp-camerainfo-preheart-40.txt
|
||||
python scripts/serial_sequence_probe.py --port COM5 --prompt --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --frame "00 00 C0 00 80 1A" --read-after-frame 0.4 --read-after-group 1.0 --log captures/rcp-camerainfo-preheart-c0.txt
|
||||
```
|
||||
|
||||
Question:
|
||||
|
||||
- Do these commands return something closer to the transient `0x40` / `0xC0`
|
||||
response families when the panel has just seen two host heartbeats?
|
||||
|
||||
### CI4: Sustained Mixed Stream, Status-Block Style
|
||||
|
||||
Instead of repeating one query, rotate through a small set of known readable
|
||||
blocks while keeping heartbeat in the stream.
|
||||
|
||||
```powershell
|
||||
python scripts/serial_sequence_probe.py --port COM5 --prompt --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --frame "00 00 00 00 80 DA" --frame "00 00 B0 00 80 6A" --frame "00 00 00 00 80 DA" --frame "00 00 B5 00 80 6F" --repeat 3 --frame-interval 0.20 --read-after-frame 0.25 --read-after-group 0.8 --log captures/rcp-camerainfo-mixed-a0-b0-b5.txt
|
||||
```
|
||||
|
||||
Question:
|
||||
|
||||
- Does a rotating "camera info block" stream behave differently from hammering a
|
||||
single one-shot query?
|
||||
|
||||
### CI5: Sustained Mixed Stream, Heartbeat-Driven Family
|
||||
|
||||
Rotate heartbeat around `0x40`-family and normal query candidates to see
|
||||
whether the panel prefers a page/state rhythm instead of a static query.
|
||||
|
||||
```powershell
|
||||
python scripts/serial_sequence_probe.py --port COM5 --prompt --frame "00 00 00 00 80 DA" --frame "00 00 40 00 80 9A" --frame "00 00 00 00 80 DA" --frame "00 00 B0 00 80 6A" --frame "00 00 00 00 80 DA" --frame "00 00 C0 00 80 1A" --repeat 3 --frame-interval 0.20 --read-after-frame 0.25 --read-after-group 0.8 --log captures/rcp-camerainfo-mixed-40-b0-c0.txt
|
||||
```
|
||||
|
||||
Question:
|
||||
|
||||
- Does mixing the heartbeat-aligned family with a known readable block expose a
|
||||
reusable page, a new response family, or any visible panel state change?
|
||||
|
||||
### CI6: Sparse Heartbeat Run-Up, Then `A0`
|
||||
|
||||
Try the same idea as the dense `0x40` trigger, but with slower heartbeat spacing
|
||||
that previously nudged the `0xC0` family.
|
||||
|
||||
```powershell
|
||||
python scripts/serial_sequence_probe.py --port COM5 --prompt --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --repeat 3 --frame-interval 1.50 --read-after-frame 0.45 --read-after-group 1.0 --log captures/rcp-camerainfo-c0-then-a0.txt
|
||||
```
|
||||
|
||||
Question:
|
||||
|
||||
- Does a slower heartbeat-derived state family behave differently from the dense
|
||||
`0x40` case?
|
||||
|
||||
What to watch for:
|
||||
|
||||
- the panel stays out of `CONNECT NOT ACT` for the whole run
|
||||
- a known readable block changes family or value fields
|
||||
- a later query responds where it previously would not
|
||||
- the transient `0x40` / `0xC0` family appears immediately before a different
|
||||
stable block
|
||||
- any lamp or display change beyond the usual timeout behavior
|
||||
|
||||
Recommended order:
|
||||
|
||||
1. `CI1`
|
||||
2. `CI2`
|
||||
3. `CI4`
|
||||
4. `CI5`
|
||||
5. `CI6`
|
||||
|
||||
### 2026-05-13 Camera-Info-Stream Result
|
||||
|
||||
Captures:
|
||||
|
||||
- `captures/rcp-camerainfo-40-then-b0.txt`
|
||||
- `captures/rcp-camerainfo-40-then-b5.txt`
|
||||
- `captures/rcp-camerainfo-preheart-40.txt`
|
||||
- `captures/rcp-camerainfo-preheart-c0.txt`
|
||||
- `captures/rcp-camerainfo-mixed-a0-b0-b5.txt`
|
||||
- `captures/rcp-camerainfo-mixed-40-b0-c0.txt`
|
||||
- `captures/rcp-camerainfo-c0-then-a0.txt`
|
||||
|
||||
User observation:
|
||||
|
||||
- In `CI6`, the panel appeared to enter `CONNECT NOT ACT` and then emit a
|
||||
single latch/readable response afterward.
|
||||
|
||||
#### CI1: Provoke `0x40`/`0xC0`, Then Query `B0`
|
||||
|
||||
Observed result:
|
||||
|
||||
- Group 1:
|
||||
- the second heartbeat produced `07 80 C0 40 30 6D`
|
||||
- the following `B0` query produced only heartbeat-compatible RX
|
||||
- Groups 2-4:
|
||||
- no structured `B0` response
|
||||
- all later frames stayed heartbeat-compatible
|
||||
|
||||
Read:
|
||||
|
||||
- The heartbeat-induced `0xC0` family did not open a new `B0` page.
|
||||
- It appears to consume or displace the normal one-shot response opportunity.
|
||||
|
||||
#### CI2: Provoke `0x40`, Then Query `B5`
|
||||
|
||||
Observed result:
|
||||
|
||||
- Group 1:
|
||||
- the second heartbeat produced `07 80 40 40 30 ED`
|
||||
- the following `B5` query produced only heartbeat-compatible RX
|
||||
- Groups 2-4:
|
||||
- `B5` remained heartbeat-compatible only
|
||||
|
||||
Read:
|
||||
|
||||
- Same story as `CI1`: the heartbeat-driven family does not seem to lead into a
|
||||
richer `B5` discovery page.
|
||||
- It suppresses or replaces it.
|
||||
|
||||
#### CI3: Probe Commands Aligned With The Heartbeat-Induced Family
|
||||
|
||||
Observed result:
|
||||
|
||||
| Sequence | Result |
|
||||
| --- | --- |
|
||||
| double heartbeat, then `00 -> 40` | heartbeat-induced `07 80 40 40 30 ED`, then `00 -> 40` gave heartbeat only |
|
||||
| double heartbeat, then `00 -> C0` | heartbeat-induced `07 80 40 40 30 ED`, then `00 -> C0` only drained more `07 80 40 40 30 ED` plus heartbeat |
|
||||
|
||||
Read:
|
||||
|
||||
- The pre-heartbeat `0x40` state does not make the explicit `40` or `C0`
|
||||
commands bloom into a clear new readable block.
|
||||
- The explicit commands mostly arrive after the transient state is already in
|
||||
progress.
|
||||
|
||||
#### CI4: Sustained Mixed Stream, Status-Block Style
|
||||
|
||||
Observed result:
|
||||
|
||||
- Group 1:
|
||||
- `A0` produced `07 80 68 40 30 C5`
|
||||
- later `B0` and `B5` in the same mixed stream were heartbeat only
|
||||
- Groups 2-3:
|
||||
- `A0`, `B0`, and `B5` were all heartbeat-compatible only
|
||||
|
||||
Read:
|
||||
|
||||
- A rotating "camera info block" stream did not keep opening new readable
|
||||
status pages.
|
||||
- The first successful block still wins, then the rest are suppressed.
|
||||
|
||||
#### CI5: Sustained Mixed Stream, Heartbeat-Driven Family
|
||||
|
||||
Observed result:
|
||||
|
||||
- Group 1:
|
||||
- `00 -> 40` produced `07 80 50 40 30 FD`
|
||||
- later `B0` and `C0` in the same stream were heartbeat only
|
||||
- Groups 2-3:
|
||||
- all later frames were heartbeat-compatible only
|
||||
|
||||
Read:
|
||||
|
||||
- This confirms `00 -> 40` is a stable explicit query family in its own right.
|
||||
- But, again, the first successful readable family suppresses later queries in
|
||||
the same stream.
|
||||
|
||||
#### CI6: Sparse Heartbeat Run-Up, Then `A0`
|
||||
|
||||
Observed result:
|
||||
|
||||
- Group 1:
|
||||
- two widely spaced heartbeat frames stayed heartbeat-compatible
|
||||
- the later `A0` produced a delayed `07 80 68 40 30 C5` burst
|
||||
- Groups 2-3:
|
||||
- the same pattern returned heartbeat-compatible RX only
|
||||
|
||||
Read:
|
||||
|
||||
- This matches the user's observation well: a slow run-up can leave the panel
|
||||
visibly in `CONNECT NOT ACT`, yet a later single readable/latch response can
|
||||
still occur afterward.
|
||||
- That suggests the visible display state and the one-shot readable window are
|
||||
related, but not identical.
|
||||
- A panel that has already fallen into `CONNECT NOT ACT` may still accept one
|
||||
later readable query under the right timing.
|
||||
|
||||
Overall interpretation:
|
||||
|
||||
- The "camera info stream" hypothesis is not wrong, but this particular test set
|
||||
did not show a sustained multi-block camera-state feed.
|
||||
- The heartbeat-induced `0x40` / `0xC0` family is real, but it mostly acts like
|
||||
a competing one-shot response family, not a gateway into a larger page.
|
||||
- Mixed streams still collapse into "first successful block wins."
|
||||
- The cleanest new points are:
|
||||
- `00 -> 40` is a real explicit readable family: `07 80 50 40 30 FD`
|
||||
- heartbeat cadence can provoke `0x40` / `0xC0` families without an explicit
|
||||
query
|
||||
- a visible `CONNECT NOT ACT` state does not completely forbid one later
|
||||
readable/latch response
|
||||
|
||||
Next branch worth testing:
|
||||
|
||||
- isolate the delayed-after-`CONNECT NOT ACT` case from `CI6` with a small
|
||||
timing ladder around the final `A0`
|
||||
- compare `A0`, `B0`, and `40` after a deliberate wait-until-`CONNECT NOT ACT`
|
||||
phase
|
||||
- test whether the `0x40` / `0xC0` families are better thought of as alternate
|
||||
readable pages rather than camera-info keepalives
|
||||
|
||||
## `CONNECT NOT ACT` vs Latch-State Decoupling Test
|
||||
|
||||
Goal:
|
||||
|
||||
- Prove that the visible `CONNECT NOT ACT` state and the one-shot readable/latch
|
||||
state are related, but not the same thing.
|
||||
- Show one case where the latch is spent even though the panel does **not**
|
||||
enter `CONNECT NOT ACT`.
|
||||
- Show another case where the panel **does** enter `CONNECT NOT ACT` and can
|
||||
still produce one later readable response.
|
||||
|
||||
Interpretation target:
|
||||
|
||||
- If both paths happen, the LCD state is not a direct indicator of whether the
|
||||
one-shot readable window is still available.
|
||||
|
||||
### DL1: Latch Spent While `CONNECT NOT ACT` Stays Away
|
||||
|
||||
This is the "no visible timeout, but latch already consumed" proof.
|
||||
|
||||
Watch the LCD throughout. The expected result is that the panel stays out of
|
||||
`CONNECT NOT ACT` while running.
|
||||
|
||||
```powershell
|
||||
python scripts/serial_sequence_probe.py --port COM5 --prompt --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --frame "00 00 00 00 80 DA" --repeat 3 --frame-interval 0.25 --read-after-frame 0.35 --read-after-group 0.5 --log captures/rcp-decouple-no-connectnotact-a0.txt
|
||||
```
|
||||
|
||||
What proves decoupling:
|
||||
|
||||
- group 1: `A0` responds
|
||||
- later groups: `A0` does not respond
|
||||
- LCD never enters `CONNECT NOT ACT` during the run
|
||||
|
||||
That shows the latch can be spent even while the display does not show the
|
||||
timeout/not-active state.
|
||||
|
||||
### DL2: Deliberate `CONNECT NOT ACT`, Then Late `A0`
|
||||
|
||||
This is the "visible timeout, but one late readable response still exists"
|
||||
proof.
|
||||
|
||||
Method:
|
||||
|
||||
- power-cycle
|
||||
- watch for the panel to show `CONNECT NOT ACT` between the first heartbeat and
|
||||
the later `A0`
|
||||
|
||||
```powershell
|
||||
python scripts/serial_sequence_probe.py --port COM5 --prompt --pre-read 1.0 --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --frame-interval 2.50 --read-after-frame 0.30 --read-after-group 1.0 --log captures/rcp-decouple-connectnotact-then-a0.txt
|
||||
```
|
||||
|
||||
What proves decoupling:
|
||||
|
||||
- the panel visibly enters `CONNECT NOT ACT`
|
||||
- the later `A0` still returns `07 80 68 40 30 C5`
|
||||
|
||||
That shows the visible `CONNECT NOT ACT` state does not automatically mean the
|
||||
readable/latch opportunity is gone.
|
||||
|
||||
### DL3: Deliberate `CONNECT NOT ACT`, Then Two Late `A0` Queries
|
||||
|
||||
This tightens `DL2` by checking whether the first late query can consume the
|
||||
remaining one-shot readable window while the LCD state stays the same.
|
||||
|
||||
```powershell
|
||||
python scripts/serial_sequence_probe.py --port COM5 --prompt --pre-read 1.0 --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --frame "00 00 A0 00 80 7A" --frame-interval 2.50 --read-after-frame 0.30 --read-after-group 1.0 --log captures/rcp-decouple-connectnotact-then-a0-a0.txt
|
||||
```
|
||||
|
||||
What proves decoupling:
|
||||
|
||||
- panel enters `CONNECT NOT ACT`
|
||||
- first late `A0` responds
|
||||
- second late `A0` does not
|
||||
- LCD remains in the same visible state
|
||||
|
||||
That shows the latch/readable state can change while the display state does not.
|
||||
|
||||
### DL4: Compare Late `A0`, `B0`, and `40` After `CONNECT NOT ACT`
|
||||
|
||||
This checks whether only some readable families survive the visible timeout
|
||||
state.
|
||||
|
||||
```powershell
|
||||
python scripts/serial_sequence_probe.py --port COM5 --prompt --pre-read 1.0 --frame "00 00 00 00 80 DA" --frame "00 00 B0 00 80 6A" --frame-interval 2.50 --read-after-frame 0.30 --read-after-group 1.0 --log captures/rcp-decouple-connectnotact-then-b0.txt
|
||||
python scripts/serial_sequence_probe.py --port COM5 --prompt --pre-read 1.0 --frame "00 00 00 00 80 DA" --frame "00 00 40 00 80 9A" --frame-interval 2.50 --read-after-frame 0.30 --read-after-group 1.0 --log captures/rcp-decouple-connectnotact-then-40.txt
|
||||
```
|
||||
|
||||
Useful outcomes:
|
||||
|
||||
- only `A0` responds late:
|
||||
the post-timeout window may be family-specific
|
||||
- `A0`, `B0`, and `40` all respond late:
|
||||
the timeout state is clearly not the same as the latch state
|
||||
- none respond late:
|
||||
the `CI6` late response was timing-sensitive and needs a tighter delay ladder
|
||||
|
||||
### DL5: Tight Delay Ladder Around Late `A0`
|
||||
|
||||
If `DL2` or `DL3` looks close but inconsistent, bracket the timeout edge.
|
||||
|
||||
```powershell
|
||||
python scripts/serial_sequence_probe.py --port COM5 --prompt --pre-read 1.0 --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --frame-interval 2.00 --read-after-frame 0.30 --read-after-group 1.0 --log captures/rcp-decouple-delay-2000ms-a0.txt
|
||||
python scripts/serial_sequence_probe.py --port COM5 --prompt --pre-read 1.0 --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --frame-interval 2.25 --read-after-frame 0.30 --read-after-group 1.0 --log captures/rcp-decouple-delay-2250ms-a0.txt
|
||||
python scripts/serial_sequence_probe.py --port COM5 --prompt --pre-read 1.0 --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --frame-interval 2.50 --read-after-frame 0.30 --read-after-group 1.0 --log captures/rcp-decouple-delay-2500ms-a0.txt
|
||||
python scripts/serial_sequence_probe.py --port COM5 --prompt --pre-read 1.0 --frame "00 00 00 00 80 DA" --frame "00 00 A0 00 80 7A" --frame-interval 2.75 --read-after-frame 0.30 --read-after-group 1.0 --log captures/rcp-decouple-delay-2750ms-a0.txt
|
||||
```
|
||||
|
||||
Recommended order:
|
||||
|
||||
1. `DL1`
|
||||
2. `DL2`
|
||||
3. `DL3`
|
||||
4. `DL4`
|
||||
5. `DL5` only if `DL2`/`DL3` are close but inconsistent
|
||||
|
||||
### 2026-05-13 `CONNECT NOT ACT` vs Latch-State Decoupling Result
|
||||
|
||||
Captures:
|
||||
|
||||
- `captures/rcp-decouple-no-connectnotact-a0.txt`
|
||||
- `captures/rcp-decouple-connectnotact-then-a0.txt`
|
||||
- `captures/rcp-decouple-connectnotact-then-a0-a0.txt`
|
||||
|
||||
User LCD observation:
|
||||
|
||||
- `DL1`: the panel never presented `CONNECT NOT ACT` while the script was
|
||||
running.
|
||||
- `DL2` and `DL3`: the panel presented `CONNECT NOT ACT` at the start of the
|
||||
script.
|
||||
|
||||
#### DL1: Latch Spent While `CONNECT NOT ACT` Stays Away
|
||||
|
||||
Observed result:
|
||||
|
||||
- Group 1:
|
||||
- `A0` produced a readable block, but this run returned
|
||||
`07 80 E8 40 30 45` rather than `07 80 68 40 30 C5`
|
||||
- Groups 2-3:
|
||||
- `A0` produced heartbeat-compatible RX only
|
||||
- LCD:
|
||||
- no `CONNECT NOT ACT` while the script was active
|
||||
|
||||
Read:
|
||||
|
||||
- This is strong evidence for decoupling in one direction:
|
||||
the readable/latch state can be consumed while the panel does **not** show
|
||||
`CONNECT NOT ACT`.
|
||||
- It also reinforces that the `A0` family can vary between at least `68` and
|
||||
`E8` forms depending on context/timing.
|
||||
|
||||
#### DL2: Deliberate `CONNECT NOT ACT`, Then Late `A0`
|
||||
|
||||
Observed result:
|
||||
|
||||
- The panel showed `CONNECT NOT ACT` early in the run.
|
||||
- The later `A0` query produced heartbeat-compatible RX only.
|
||||
- No delayed `A0` readable block appeared at this exact timing.
|
||||
|
||||
Read:
|
||||
|
||||
- At a `2.50 s` gap in this two-frame form, visible `CONNECT NOT ACT` did not
|
||||
guarantee a late readable response.
|
||||
- This weakens the simple "enter `CONNECT NOT ACT`, then `A0` always still
|
||||
works once" idea.
|
||||
|
||||
#### DL3: Deliberate `CONNECT NOT ACT`, Then Two Late `A0` Queries
|
||||
|
||||
Observed result:
|
||||
|
||||
- The panel showed `CONNECT NOT ACT` early in the run.
|
||||
- Both later `A0` queries produced heartbeat-compatible RX only.
|
||||
- No readable block appeared on either late `A0`.
|
||||
|
||||
Read:
|
||||
|
||||
- This does not provide the hoped-for second half of the decoupling proof.
|
||||
- Instead, it says that once the panel has visibly entered `CONNECT NOT ACT` in
|
||||
this specific timing pattern, the late `A0` opportunity may already be gone or
|
||||
may require narrower timing than `2.50 s`.
|
||||
|
||||
Overall interpretation:
|
||||
|
||||
- We now have solid evidence for one half of the claim:
|
||||
`CONNECT NOT ACT` is **not required** for the latch/readable state to be
|
||||
consumed.
|
||||
- We do **not** yet have equally solid evidence for the other half at this
|
||||
timing:
|
||||
a visible `CONNECT NOT ACT` state did not still yield a late `A0` response in
|
||||
`DL2` or `DL3`.
|
||||
- So the current safest statement is:
|
||||
the LCD state and the latch/readable state are not directly coupled, but the
|
||||
exact post-timeout behavior is more timing-sensitive than the earlier `CI6`
|
||||
observation first suggested.
|
||||
|
||||
Best next move:
|
||||
|
||||
- run `DL4` and then a tight `DL5` delay bracket
|
||||
- especially around `2.00 s`, `2.25 s`, `2.50 s`, and `2.75 s`
|
||||
- because the difference between the earlier `CI6` late hit and these no-hit
|
||||
decoupling runs is now most likely timing, framing shape, or both
|
||||
|
||||
Reference in New Issue
Block a user