updates
This commit is contained in:
78
docs/pt2-iris-mblack-link-rom-trace.md
Normal file
78
docs/pt2-iris-mblack-link-rom-trace.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# PT2 IRIS/M.BLACK LINK ROM Trace
|
||||
|
||||
This note records the ROM evidence for the bench-visible
|
||||
`IRIS/M.BLACK LINK` lamp.
|
||||
|
||||
## Confirmed Host Trigger
|
||||
|
||||
The isolated bench trigger is:
|
||||
|
||||
```text
|
||||
00 00 13 40 00 09 ; command 0, selector 0x0013, value 0x4000
|
||||
```
|
||||
|
||||
Command 0 mirrors nonzero selector writes into both `E000[selector]` and
|
||||
`E800[selector]`, then queues the selector for internal processing. For this
|
||||
frame that means:
|
||||
|
||||
```text
|
||||
E000[0x0013] = 0x4000
|
||||
E800[0x0013] = 0x4000
|
||||
```
|
||||
|
||||
The current-table word is `E800 + 2 * 0x0013 = H'E826`.
|
||||
|
||||
## Selector Handler
|
||||
|
||||
The selector dispatch table maps selector `0x0013` to `H'2E06`.
|
||||
|
||||
Focused linear decode:
|
||||
|
||||
```text
|
||||
H'2E06 BTST.W #15, @H'E826
|
||||
set/clear F791.6 and F713.4
|
||||
|
||||
H'2E1E BTST.W #14, @H'E826
|
||||
set/clear F791.5 and F716.7
|
||||
```
|
||||
|
||||
Bench labels:
|
||||
|
||||
| Selector value | ROM latch bits | Visible result |
|
||||
| --- | --- | --- |
|
||||
| `0x8000` | `F791.6`, `F713.4` | far-right `SLAVE` lamp |
|
||||
| `0x4000` | `F791.5`, `F716.7` | `IRIS/M.BLACK LINK` lamp |
|
||||
| `0x0000` | clears both bit groups through `H'2E06` | both latch groups clear |
|
||||
|
||||
## Other Trigger Path
|
||||
|
||||
There is also a local panel-input path:
|
||||
|
||||
```text
|
||||
F006.7 / F6DB.7 -> H'200E -> H'E826 bit14 -> loc_3E54 queues selector 0x0013
|
||||
```
|
||||
|
||||
At `H'200E`, the ROM checks `F6DB.7` and requires `F731 <= 3`. It then uses
|
||||
`F791.5` as a current-state toggle:
|
||||
|
||||
- if `F791.5` is clear, it sets `H'E826.14`,
|
||||
- if `F791.5` is set, it clears `H'E826.14`,
|
||||
- in both cases it calls `loc_3E54` with selector `0x0013`.
|
||||
|
||||
This is not a separate lamp driver. It feeds the same `E800[0x0013].14`
|
||||
state consumed by the selector handler.
|
||||
|
||||
## Practical Meaning
|
||||
|
||||
The strongest current model is:
|
||||
|
||||
- CCU/host can drive the lamp directly by sending selector `0x0013` value
|
||||
`0x4000` through command 0.
|
||||
- The panel can also toggle/report the same state through a local input lane,
|
||||
but only when the relevant session/page gate is open.
|
||||
- No other decoded selector currently appears to directly set the same
|
||||
`F791.5` plus `F716.7` latch pair.
|
||||
|
||||
Generated semantics now label selector `0x0013`, `E800[0x0013]`, and the
|
||||
`IRIS/M.BLACK LINK` / `SLAVE` bit meanings so pseudo-code output does not leave
|
||||
this as a generic table write.
|
||||
193
docs/pt2-iris-mblack-link-state-machine.md
Normal file
193
docs/pt2-iris-mblack-link-state-machine.md
Normal file
@@ -0,0 +1,193 @@
|
||||
# PT2 IRIS/M.BLACK LINK State Machine
|
||||
|
||||
Date: 2026-05-27
|
||||
|
||||
This note records the bench-proven closed loop for the `IRIS/M.BLACK LINK`
|
||||
button/lamp path.
|
||||
|
||||
## Short Answer
|
||||
|
||||
There is no current evidence that the CCU first sends a separate
|
||||
"this function exists" capability command for `IRIS/M.BLACK LINK`.
|
||||
|
||||
The stronger model is:
|
||||
|
||||
1. The CCU/RCP session must be awake/active.
|
||||
2. The CCU must service the RCP report queue.
|
||||
3. The CCU is the authoritative owner of selector state.
|
||||
4. When the RCP reports a local button intent, the CCU ACKs the report and
|
||||
mirrors the resulting selector value back to the RCP.
|
||||
|
||||
For this control, selector `0x0013` bit `0x4000` is the
|
||||
`IRIS/M.BLACK LINK` state.
|
||||
|
||||
## Proven Frames
|
||||
|
||||
Selector value frames:
|
||||
|
||||
```text
|
||||
00 00 13 40 00 09 ; command 0, selector 0x0013, value 0x4000, active
|
||||
00 00 13 00 00 49 ; command 0, selector 0x0013, value 0x0000, clear
|
||||
```
|
||||
|
||||
Report ACK:
|
||||
|
||||
```text
|
||||
05 00 13 00 00 4C ; command 5 ACK/continuation for selector 0x0013
|
||||
```
|
||||
|
||||
Readback request:
|
||||
|
||||
```text
|
||||
01 00 13 00 00 48 ; command 1 read selector 0x0013
|
||||
```
|
||||
|
||||
Observed readback shapes:
|
||||
|
||||
```text
|
||||
04 00 13 40 00 0D ; command-0 write response, selector 0x0013 active
|
||||
04 00 13 00 00 4D ; command-0 write response, selector 0x0013 clear
|
||||
04 13 00 40 00 0D ; command-1 readback response, selector 0x0013 active
|
||||
04 13 00 00 00 4D ; command-1 readback response, selector 0x0013 clear
|
||||
```
|
||||
|
||||
## Successful Closed Loop
|
||||
|
||||
Capture:
|
||||
|
||||
```text
|
||||
captures/iris-mblack-link-mirror-state-machine.txt
|
||||
captures/iris-mblack-link-mirror-state-machine-result.json
|
||||
```
|
||||
|
||||
Scenario:
|
||||
|
||||
```text
|
||||
scenarios/iris-mblack-link-mirror-state-machine.json
|
||||
```
|
||||
|
||||
The visible panel behavior was:
|
||||
|
||||
```text
|
||||
press 1: lamp on
|
||||
press 2: lamp off
|
||||
press 3: lamp on
|
||||
```
|
||||
|
||||
The serial behavior matched that cycle.
|
||||
|
||||
### Baseline Clear
|
||||
|
||||
```text
|
||||
TX 00 00 13 00 00 49
|
||||
RX 04 00 13 00 00 4D
|
||||
```
|
||||
|
||||
### Press 1: Active
|
||||
|
||||
```text
|
||||
RX 00 00 13 40 00 09
|
||||
TX 05 00 13 00 00 4C ; ACK report
|
||||
TX 00 00 13 40 00 09 ; mirror active back
|
||||
RX 04 00 13 40 00 0D
|
||||
TX 01 00 13 00 00 48 ; readback
|
||||
RX 04 13 00 40 00 0D
|
||||
```
|
||||
|
||||
### Press 2: Clear
|
||||
|
||||
```text
|
||||
RX 00 00 13 00 00 49
|
||||
TX 05 00 13 00 00 4C ; ACK report
|
||||
TX 00 00 13 00 00 49 ; mirror clear back
|
||||
RX 04 00 13 00 00 4D
|
||||
TX 01 00 13 00 00 48 ; readback
|
||||
RX 04 13 00 00 00 4D
|
||||
```
|
||||
|
||||
### Press 3: Active Again
|
||||
|
||||
```text
|
||||
RX 00 00 13 40 00 09
|
||||
TX 05 00 13 00 00 4C
|
||||
TX 00 00 13 40 00 09
|
||||
RX 04 00 13 40 00 0D
|
||||
TX 01 00 13 00 00 48
|
||||
RX 04 13 00 40 00 0D
|
||||
```
|
||||
|
||||
## Interpretation
|
||||
|
||||
The RCP does not appear to treat the local button press as final local state.
|
||||
It reports local intent to the CCU.
|
||||
|
||||
The CCU then:
|
||||
|
||||
1. ACKs the selector report with command `5`.
|
||||
2. Applies the chosen state back to the RCP with command `0`.
|
||||
|
||||
The RCP uses the mirrored/current selector state to decide the next toggle
|
||||
direction. This explains the earlier failed/incomplete behavior:
|
||||
|
||||
- Without mirroring `0x0013=0x4000` back, repeated presses could keep reporting
|
||||
active because the RCP still believed the selector was clear.
|
||||
- Once the CCU mirrored active back, the next press reported clear.
|
||||
- Once the CCU mirrored clear back, the next press reported active again.
|
||||
|
||||
## Wakeup Versus Capability
|
||||
|
||||
The successful test also had active session traffic:
|
||||
|
||||
```text
|
||||
00 00 00 80 80 5A ; active selector-zero keepalive/report
|
||||
05 00 00 00 00 5F ; ACK for selector zero
|
||||
```
|
||||
|
||||
That traffic looks like general session/connected behavior, not a
|
||||
per-function enable for `IRIS/M.BLACK LINK`.
|
||||
|
||||
So the current working model is:
|
||||
|
||||
- `CONNECT: OK` / active rhythm opens the report path and keeps the panel from
|
||||
falling back to `CONNECT: NOT ACT`.
|
||||
- Selector `0x0013` state tells the RCP the current value of this specific
|
||||
control/lamp.
|
||||
- There may still be feature-specific gates for other controls, but this test
|
||||
did not require a distinct `IRIS/M.BLACK LINK exists` command.
|
||||
|
||||
## ROM Correlation
|
||||
|
||||
The ROM trace in `docs/pt2-iris-mblack-link-rom-trace.md` matches the bench
|
||||
behavior:
|
||||
|
||||
```text
|
||||
F006.7 / F6DB.7 -> H'200E -> H'E826 bit14 -> loc_3E54 queues selector 0x0013
|
||||
```
|
||||
|
||||
At `H'200E`, the ROM reads `F791.5` as the current `IRIS/M.BLACK LINK` state:
|
||||
|
||||
- if `F791.5` is clear, the local press queues/set reports `0x0013=0x4000`;
|
||||
- if `F791.5` is set, the local press queues/clear reports `0x0013=0x0000`.
|
||||
|
||||
The selector handler for `0x0013` updates `F791.5` from `E800[0x0013].14`.
|
||||
That is why mirroring command-0 selector state back to the RCP completes the
|
||||
toggle loop.
|
||||
|
||||
## Implications
|
||||
|
||||
For a CCU emulator:
|
||||
|
||||
- Maintain an authoritative selector table.
|
||||
- Treat RCP button reports as requested state changes, not just notifications.
|
||||
- ACK each report with command `5`.
|
||||
- Write the accepted selector value back with command `0`.
|
||||
- Keep the selector-zero/session rhythm alive separately.
|
||||
|
||||
For other latched buttons:
|
||||
|
||||
- The same pattern is likely: RCP emits a selector report, then expects the CCU
|
||||
to mirror the accepted state back.
|
||||
- A button that only reports "active" repeatedly may not be broken; it may be
|
||||
waiting for the CCU to update the selector state that controls its next
|
||||
toggle direction.
|
||||
|
||||
@@ -71,6 +71,69 @@ Follow-up `lamp-isolate-neighbor-single-boot` result:
|
||||
|
||||
This confirms that the host/CCU can directly drive panel lamps through selector-table writes. It also validates using the ROM dispatch-neighbor list around `0x0007` and `0x0015` as a high-value lamp map.
|
||||
|
||||
Follow-up `panel-atlas-standard-master-*` webcam runs:
|
||||
|
||||
- `0x0012`, `0x0013`, and `0x0014` high-nibble/selected-bit sweeps did not
|
||||
produce a clean STANDARD or MASTER lamp trigger. The `0x0013=0x8000` SLAVE
|
||||
positive control still worked.
|
||||
- `0x0010`, `0x0011`, `0x0015`, `0x0016`, `0x0017`, `0x0018`, `0x0019`, and
|
||||
`0x001A` high-nibble sweeps did not produce a clean STANDARD or MASTER lamp
|
||||
trigger.
|
||||
- `0x0008` through `0x000F` high-nibble sweeps did not produce a clean
|
||||
STANDARD or MASTER lamp trigger.
|
||||
- `0x0017=0x4000` lit the same far-right bottom BARS lamp/latch as the known
|
||||
`0x0017=0x8000` family. Later `0x0018` rows in that run were latch-contaminated
|
||||
and need fresh-boot isolation before assigning a separate meaning.
|
||||
|
||||
Current implication: STANDARD and MASTER are probably not simple direct
|
||||
command-0 high-nibble writes in the `0x0008`-`0x001A` pocket, despite the older
|
||||
broad run that made MASTER flash. Treat that older observation as a real
|
||||
bench-visible event but not yet an isolated selector mapping.
|
||||
|
||||
### `panel-atlas-big-visual-sweep-0001-017f-highbits`
|
||||
|
||||
The broad webcam sweep and fresh-boot isolation pass produced these confirmed
|
||||
or near-confirmed panel-output mappings:
|
||||
|
||||
| Selector/value | Current meaning |
|
||||
| --- | --- |
|
||||
| `0x0013 = 0x4000` | `IRIS/M.BLACK LINK` lamp |
|
||||
| `0x0024 = 0x8000` | LCD selector-button lamp |
|
||||
| `0x0024 = 0x0000` | LCD selector-button lamp remained visible at 0.5 s; not a simple clear in this timing window |
|
||||
| `0x0082 = 0x8000` | IRIS readout `OP` |
|
||||
| `0x0082 = 0x4000` | IRIS readout `1.4` |
|
||||
| `0x0082 = 0x0000` | IRIS readout blank |
|
||||
| `0x0083 = 0x8000` | MASTER GAIN `-3`, SHUTTER `OFF`, and IRIS AUTO |
|
||||
| `0x0083 = 0x0000` | same visible state remained at 0.5 s; likely latched/copied elsewhere |
|
||||
| `0x0093 = 0x8000` | BLACK/FLARE MANUAL plus white-balance PRESET |
|
||||
| `0x0093 = 0x4000` | BLACK/FLARE MANUAL plus white-balance AUTO |
|
||||
| `0x0093 = 0x2000` | BLACK/FLARE MANUAL plus white-balance MANUAL |
|
||||
| `0x0093 = 0x0000` | BLACK/FLARE MANUAL plus white-balance MANUAL |
|
||||
|
||||
Run health was good: no resync events, no dropped bytes, and command-4
|
||||
readbacks appeared for the listed writes.
|
||||
|
||||
ROM trace now confirms the `0x0013` bit split:
|
||||
|
||||
- `E800[0x0013]` is `H'E826`.
|
||||
- Selector `0x0013` dispatches to `H'2E06`.
|
||||
- `H'E826.15` sets/clears `F791.6` and `F713.4`, matching SLAVE.
|
||||
- `H'E826.14` sets/clears `F791.5` and `F716.7`, matching
|
||||
`IRIS/M.BLACK LINK`.
|
||||
- Local handler `H'200E` can also toggle `H'E826.14` from panel input
|
||||
`F006.7/F6DB.7` when its session gate allows it.
|
||||
|
||||
Interpretation:
|
||||
|
||||
- `0x0082` is the cleanest direct readout lane found so far: set values update
|
||||
the IRIS display and `0x0000` blanks it.
|
||||
- `0x0083` appears to be a combined status/display lane rather than only the
|
||||
MASTER GAIN display. Its `0x8000` state also brings up SHUTTER `OFF` and IRIS
|
||||
AUTO, and the clear write did not visually clear it at 0.5 s.
|
||||
- `0x0093` selects white-balance mode. In this run, `0x2000` and `0x0000` both
|
||||
presented white-balance MANUAL, so bit 13 may be redundant in this context or
|
||||
may need another gate to show a distinct state.
|
||||
|
||||
### `lamp-broad-status-selector-sweep`
|
||||
|
||||
Visible result:
|
||||
|
||||
285
docs/pt2-panel-atlas.md
Normal file
285
docs/pt2-panel-atlas.md
Normal file
@@ -0,0 +1,285 @@
|
||||
# PT2 Panel Atlas
|
||||
|
||||
This note tracks bench tests that intentionally drive visible panel outputs from
|
||||
PT2/command-0 table writes.
|
||||
|
||||
## Scenario Files
|
||||
|
||||
Current compact atlas scenarios:
|
||||
|
||||
```text
|
||||
scenarios/panel-atlas-operator-lamps-v1.json
|
||||
scenarios/panel-atlas-readout-status-v1.json
|
||||
scenarios/panel-atlas-right-stack-isolation-v1.json
|
||||
scenarios/panel-atlas-right-stack-fresh-latch-v1.json
|
||||
scenarios/panel-atlas-standard-master-bit-sweep-v1.json
|
||||
scenarios/panel-atlas-standard-master-neighbor-sweep-v2.json
|
||||
scenarios/panel-atlas-standard-master-lower-neighbor-sweep-v3.json
|
||||
```
|
||||
|
||||
Both are designed for webcam capture with the calibrated bench settings:
|
||||
|
||||
```text
|
||||
--parity E --camera-index 4 --snapshot-delays 0.5
|
||||
```
|
||||
|
||||
## Run: 2026-05-27
|
||||
|
||||
Logs:
|
||||
|
||||
```text
|
||||
captures/panel-atlas-operator-lamps-v1-webcam.txt
|
||||
captures/panel-atlas-readout-status-v1-webcam.txt
|
||||
captures/panel-atlas-right-stack-isolation-v1-webcam.txt
|
||||
captures/panel-atlas-right-stack-fresh-latch-v1-webcam.txt
|
||||
captures/panel-atlas-standard-master-bit-sweep-v1-webcam.txt
|
||||
captures/panel-atlas-standard-master-neighbor-sweep-v2-webcam.txt
|
||||
captures/panel-atlas-standard-master-lower-neighbor-sweep-v3-webcam.txt
|
||||
```
|
||||
|
||||
Snapshots:
|
||||
|
||||
```text
|
||||
captures/panel-atlas-operator-lamps-v1-webcam-shots/
|
||||
captures/panel-atlas-readout-status-v1-webcam-shots/
|
||||
captures/panel-atlas-right-stack-isolation-v1-webcam-shots/
|
||||
captures/panel-atlas-right-stack-fresh-latch-v1-webcam-shots/
|
||||
captures/panel-atlas-standard-master-bit-sweep-v1-webcam-shots/
|
||||
captures/panel-atlas-standard-master-neighbor-sweep-v2-webcam-shots/
|
||||
captures/panel-atlas-standard-master-lower-neighbor-sweep-v3-webcam-shots/
|
||||
```
|
||||
|
||||
Serial health:
|
||||
|
||||
| Run | RX frames | TX frames | Resync | Dropped bytes |
|
||||
| --- | ---: | ---: | ---: | ---: |
|
||||
| operator lamps | 82 | 19 | 0 | 0 |
|
||||
| readout/status | 76 | 16 | 0 | 0 |
|
||||
| right-stack isolation | 115 | 26 | 0 | 0 |
|
||||
| right-stack fresh latch | 20 | 12 | 0 | 0 |
|
||||
| standard/master bit sweep v1 | 144 | 34 | 0 | 0 |
|
||||
| standard/master neighbor sweep v2 | 188 | 47 | 0 | 0 |
|
||||
| standard/master lower-neighbor sweep v3 | 188 | 47 | 0 | 0 |
|
||||
|
||||
The compact and isolation runs stayed in the expected table-readback plus
|
||||
`02 00 02 00 00 5A` CONNECT-OK response rhythm.
|
||||
|
||||
The fresh-latch run ended with one trailing unframed byte after the final send.
|
||||
There were no resync events or dropped bytes; this is consistent with the run
|
||||
ending while the next response frame was just beginning.
|
||||
|
||||
## Confirmed Visible Effects
|
||||
|
||||
## Far-Right Stack Reference
|
||||
|
||||
The physical far-right stack, top to bottom, is:
|
||||
|
||||
```text
|
||||
TALLY light, with camera number
|
||||
STANDARD
|
||||
MASTER
|
||||
SLAVE
|
||||
CAM POWER
|
||||
BARS
|
||||
```
|
||||
|
||||
Use these names instead of generic "right-side status" labels when reviewing
|
||||
webcam crops.
|
||||
|
||||
Readout/status run:
|
||||
|
||||
| Frame | Selector/value | Visible effect |
|
||||
| --- | --- | --- |
|
||||
| `00 01 0F 08 00 5C` | `E000[0x008F]=0x0800` | SHUTTER display shows `EUS`/likely `EVS`; iris AUTO lamp is lit |
|
||||
| `00 01 0F 10 00 44` | `E000[0x008F]=0x1000` | SHUTTER display shows `OFF`; iris AUTO lamp remains lit |
|
||||
| `00 01 13 80 00 C8` | `E000[0x0093]=0x8000` | white-balance / black-flare lamp cluster changes, consistent with prior preset/manual observation |
|
||||
| `00 01 13 90 20 F8` | `E000[0x0093]=0x9020` | black-flare manual-context candidate remains visible |
|
||||
| `00 01 13 90 FF 27` | `E000[0x0093]=0x90FF` | black-flare auto-context candidate remains visible |
|
||||
| `00 01 90 80 00 4B` | `E000[0x0110]=0x8000` | KNEE AUTO lamp lights |
|
||||
|
||||
The `0x00B9` gate writes in this compact run did not light KNEE AUTO by
|
||||
themselves at the 0.5 s snapshot point. That matches the ROM model where
|
||||
`0x00B9.13` is more of a report-path gate, while `0x0110.15` is the stronger
|
||||
visible KNEE AUTO source.
|
||||
|
||||
Operator-lamp run:
|
||||
|
||||
| Frame | Selector/value | Visible effect |
|
||||
| --- | --- | --- |
|
||||
| `00 00 13 80 00 C9` | `E000[0x0013]=0x8000` | far-right SLAVE lamp lights, based on stack order and crop position |
|
||||
| `00 00 17 80 00 CD` | `E000[0x0017]=0x8000` | far-right bottom white BARS lamp lights |
|
||||
| `00 00 1A 80 00 C0` | `E000[0x001A]=0x8000` | lower right white lamp appeared lit in the compact run, later refined as likely `0x0017` carryover |
|
||||
|
||||
Right-stack isolation/fresh-latch refinement:
|
||||
|
||||
| Frame | Selector/value | Visible effect |
|
||||
| --- | --- | --- |
|
||||
| `00 00 15 80 00 CF` | `E000[0x0015]=0x8000` | CALL lamp lights |
|
||||
| `00 00 15 00 00 4F` | `E000[0x0015]=0x0000` | CALL lamp clears |
|
||||
| `00 00 13 80 00 C9` | `E000[0x0013]=0x8000` | far-right SLAVE lamp lights |
|
||||
| `00 00 13 00 00 49` | `E000[0x0013]=0x0000` | SLAVE lamp clears |
|
||||
| `00 00 17 80 00 CD` | `E000[0x0017]=0x8000` | far-right bottom white BARS lamp lights |
|
||||
| `00 00 17 00 00 4D` | `E000[0x0017]=0x0000` | lamp remains lit; low write does not clear it |
|
||||
| `00 00 1A 80 00 C0` | `E000[0x001A]=0x8000` | no independent BARS-lamp effect from fresh boot |
|
||||
| `00 00 07 80 00 DD` / `00 00 07 00 00 5D` | `E000[0x0007]` high/low | no clear visible delta from CONNECT-OK baseline |
|
||||
|
||||
So `0x0017` is currently the strongest BARS lamp-on/latch selector.
|
||||
`0x001A` should not be labeled as the same lamp source from the prior compact
|
||||
run; that was likely carryover after `0x0017` had latched the white lamp on.
|
||||
`0x0007` is still protocol-relevant because the real panel emits the matching
|
||||
CAM POWER event frame, but the host-write visible lamp mapping is not separated
|
||||
from the CONNECT-OK baseline yet.
|
||||
|
||||
ROM trace refinement: selector `0x0013` dispatches to `H'2E06`, reads current
|
||||
table word `E800[0x0013]` at `H'E826`, and maps bit 15 to SLAVE while bit 14
|
||||
maps to `IRIS/M.BLACK LINK`. See `docs/pt2-iris-mblack-link-rom-trace.md`.
|
||||
|
||||
STANDARD/MASTER hunt:
|
||||
|
||||
| Run | Tested selector/value pocket | Result |
|
||||
| --- | --- | --- |
|
||||
| `panel-atlas-standard-master-bit-sweep-v1` | `0x0012`, `0x0013`, `0x0014` with high-bit/high-nibble candidates | no clean STANDARD or MASTER lamp trigger; positive SLAVE control worked |
|
||||
| `panel-atlas-standard-master-neighbor-sweep-v2` | `0x0010`, `0x0011`, `0x0015`, `0x0016`, `0x0017`, `0x0018`, `0x0019`, `0x001A` high-nibble candidates | no clean STANDARD or MASTER trigger |
|
||||
| `panel-atlas-standard-master-lower-neighbor-sweep-v3` | `0x0008` through `0x000F` high-nibble candidates | no clean STANDARD or MASTER trigger |
|
||||
|
||||
The `v2` sweep did show the far-right bottom BARS lamp/latch from the
|
||||
`0x0017` family when using non-`0x8000` high-nibble values. The clearest
|
||||
transition is `00 00 17 40 00 0D` (`E000[0x0017]=0x4000`) lighting the same
|
||||
bottom white BARS lamp that `0x0017=0x8000` can light. The lamp persisted after
|
||||
`0x0017=0x0000`, matching the existing BARS latch behavior. Later `0x0018`
|
||||
rows are contaminated by that latch and need a fresh-boot isolation run before
|
||||
labeling `0x0018` as a separate BARS source.
|
||||
|
||||
## Next Atlas Step
|
||||
|
||||
The next useful run is still a clear/ack/state-transition probe for the
|
||||
`0x0017` BARS latch, now including `0x0017=0x4000`:
|
||||
|
||||
- test likely sibling selectors around `0x0016`, `0x0018`, `0x0019`, and `0x001A`
|
||||
from a fresh boot after `0x0017` has latched on,
|
||||
- try command-7 repeat/ack and selector-zero refreshes to see whether the lamp
|
||||
clears through a state-machine transition rather than a simple low write,
|
||||
- test `0x0007` with an alternate baseline, because CONNECT OK already lights
|
||||
CAM POWER and masks any host-write lamp delta.
|
||||
- do not re-run `0x0008` through `0x0014` high-nibble values for
|
||||
STANDARD/MASTER unless the ROM trace points back there; the webcam sweeps did
|
||||
not show those lamps in that pocket.
|
||||
|
||||
## ROM-Derived Button Output Sweep
|
||||
|
||||
To skip the physical RCP button-press side and directly test likely "on" states
|
||||
from ROM handlers, use:
|
||||
|
||||
```powershell
|
||||
.\.venv\Scripts\python.exe scripts\build_rom_button_output_sweep.py
|
||||
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\panel-atlas-rom-button-output-candidates-v1.json --parity E --quiet-console --log captures\panel-atlas-rom-button-output-candidates-v1-webcam.txt --result-json captures\panel-atlas-rom-button-output-candidates-v1-webcam-result.json --snapshot-dir captures\panel-atlas-rom-button-output-candidates-v1-webcam-shots --camera-index 4 --snapshot-delays 0.5
|
||||
```
|
||||
|
||||
This scenario power-cycles before every candidate, seeds `CONNECT: OK`, sends
|
||||
one command-0 selector/value from the ROM-derived candidate list, and captures a
|
||||
single webcam image 0.5 s later. It is intentionally slower than a continuous
|
||||
sweep but should avoid most latch/carryover ambiguity.
|
||||
|
||||
## Broad Visual Sweep Workflow
|
||||
|
||||
For exploratory lamp/readout mining, use the generated big sweep rather than
|
||||
hand-writing thousands of frames:
|
||||
|
||||
```powershell
|
||||
.\.venv\Scripts\python.exe scripts\build_panel_visual_sweep.py scenarios\panel-atlas-big-visual-sweep-0001-017f-highbits.json --start 0x0001 --end 0x017F --values 0x8000,0x4000,0x2000,0x1000,0x0800 --power-cycle-every 32 --ok-every 8 --listen 0.65 --clear-listen 0.15 --ok-listen 0.30
|
||||
```
|
||||
|
||||
Run the generated scenario with webcam snapshots:
|
||||
|
||||
```powershell
|
||||
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\panel-atlas-big-visual-sweep-0001-017f-highbits.json --parity E --quiet-console --log captures\panel-atlas-big-visual-sweep-0001-017f-highbits-webcam.txt --result-json captures\panel-atlas-big-visual-sweep-0001-017f-highbits-webcam-result.json --snapshot-dir captures\panel-atlas-big-visual-sweep-0001-017f-highbits-webcam-shots --camera-index 4 --snapshot-delays 0.5
|
||||
```
|
||||
|
||||
The generated high-bit sweep covers selectors `0x0001` through `0x017F` with
|
||||
five candidate values per selector, for 1,915 candidate snapshots. It power
|
||||
cycles every 32 selectors to reduce latch contamination. Selector zero is
|
||||
omitted because it controls the CONNECT OK baseline.
|
||||
|
||||
After the run, create labeled review sheets:
|
||||
|
||||
```powershell
|
||||
.\.venv\Scripts\python.exe scripts\make_panel_sweep_contact_sheets.py captures\panel-atlas-big-visual-sweep-0001-017f-highbits-webcam-shots --output-dir captures\panel-atlas-big-visual-sweep-0001-017f-highbits-sheets --only-candidates --crop panel --cols 4 --rows 5 --thumb-width 360
|
||||
```
|
||||
|
||||
If a sheet shows a visible change, the image label has the exact trigger form:
|
||||
`candidate_XXXX_YYYY` means command-0 wrote `E000[0xXXXX]=0xYYYY`. Use that
|
||||
selector/value in a smaller fresh-boot isolation scenario.
|
||||
|
||||
## Broad Sweep Findings
|
||||
|
||||
Run:
|
||||
|
||||
```text
|
||||
captures/panel-atlas-big-visual-sweep-0001-017f-highbits-webcam.txt
|
||||
captures/panel-atlas-big-visual-sweep-0001-017f-highbits-webcam-result.json
|
||||
captures/panel-atlas-big-visual-sweep-0001-017f-highbits-webcam-shots/
|
||||
```
|
||||
|
||||
Serial health:
|
||||
|
||||
| RX frames | TX frames | Resync | Dropped bytes | Snapshots |
|
||||
| ---: | ---: | ---: | ---: | ---: |
|
||||
| 706 | 2372 | 0 | 0 | 1916 |
|
||||
|
||||
User-reviewed new visible hits from the broad sweep:
|
||||
|
||||
| Candidate label | Frame | Selector/value | Reported visible effect |
|
||||
| --- | --- | --- | --- |
|
||||
| `candidate_0013_4000` | `00 00 13 40 00 09` | `E000[0x0013]=0x4000` | `IRIS/M.BLACK LINK` area/lamp |
|
||||
| `candidate_0024_8000` | `00 00 24 80 00 FE` | `E000[0x0024]=0x8000` | LCD selector button/lamp |
|
||||
| `candidate_0082_8000` | `00 01 02 80 00 D9` | `E000[0x0082]=0x8000` | IRIS readout shows `OP` |
|
||||
| `candidate_0082_4000` | `00 01 02 40 00 19` | `E000[0x0082]=0x4000` | IRIS readout shows `1.4` |
|
||||
| `candidate_0083_8000` | `00 01 03 80 00 D8` | `E000[0x0083]=0x8000` | MASTER GAIN readout shows `-3` |
|
||||
| `candidate_0093_8000` | `00 01 13 80 00 C8` | `E000[0x0093]=0x8000` | white-balance PRESET lamp |
|
||||
| `candidate_0093_4000` | `00 01 13 40 00 08` | `E000[0x0093]=0x4000` | white-balance AUTO lamp |
|
||||
| `candidate_0093_2000` | `00 01 13 20 00 68` | `E000[0x0093]=0x2000` | white-balance MANUAL lamp |
|
||||
|
||||
The serial log shows immediate command-4 table readback frames for these writes,
|
||||
so the RCP accepted the selector updates.
|
||||
|
||||
Fresh-boot isolation scenario:
|
||||
|
||||
```powershell
|
||||
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\panel-atlas-big-hits-isolation-v1.json --parity E --quiet-console --log captures\panel-atlas-big-hits-isolation-v1-webcam.txt --result-json captures\panel-atlas-big-hits-isolation-v1-webcam-result.json --snapshot-dir captures\panel-atlas-big-hits-isolation-v1-webcam-shots --camera-index 4 --snapshot-delays 0.5
|
||||
```
|
||||
|
||||
Create review sheets for that isolation run:
|
||||
|
||||
```powershell
|
||||
.\.venv\Scripts\python.exe scripts\make_panel_sweep_contact_sheets.py captures\panel-atlas-big-hits-isolation-v1-webcam-shots --output-dir captures\panel-atlas-big-hits-isolation-v1-sheets --crop panel --cols 3 --rows 4 --thumb-width 420
|
||||
```
|
||||
|
||||
Fresh-boot isolation results:
|
||||
|
||||
| Frame | Selector/value | Confirmed visible effect |
|
||||
| --- | --- | --- |
|
||||
| `00 00 13 40 00 09` | `E000[0x0013]=0x4000` | `IRIS/M.BLACK LINK` lamp |
|
||||
| `00 00 24 80 00 FE` | `E000[0x0024]=0x8000` | LCD selector-button lamp |
|
||||
| `00 00 24 00 00 7E` | `E000[0x0024]=0x0000` | same LCD selector-button lamp remained visible at 0.5 s |
|
||||
| `00 01 02 80 00 D9` | `E000[0x0082]=0x8000` | IRIS readout `OP` |
|
||||
| `00 01 02 40 00 19` | `E000[0x0082]=0x4000` | IRIS readout `1.4` |
|
||||
| `00 01 02 00 00 59` | `E000[0x0082]=0x0000` | IRIS readout blank |
|
||||
| `00 01 03 80 00 D8` | `E000[0x0083]=0x8000` | IRIS AUTO lamp, SHUTTER `OFF`, MASTER GAIN `-3` |
|
||||
| `00 01 03 00 00 58` | `E000[0x0083]=0x0000` | same IRIS AUTO / SHUTTER `OFF` / MASTER GAIN `-3` state remained visible at 0.5 s |
|
||||
| `00 01 13 80 00 C8` | `E000[0x0093]=0x8000` | BLACK/FLARE MANUAL plus white-balance PRESET |
|
||||
| `00 01 13 40 00 08` | `E000[0x0093]=0x4000` | BLACK/FLARE MANUAL plus white-balance AUTO |
|
||||
| `00 01 13 20 00 68` | `E000[0x0093]=0x2000` | BLACK/FLARE MANUAL plus white-balance MANUAL |
|
||||
| `00 01 13 00 00 48` | `E000[0x0093]=0x0000` | BLACK/FLARE MANUAL plus white-balance MANUAL |
|
||||
|
||||
Interpretation:
|
||||
|
||||
- `0x0082` is a direct IRIS display/status selector. Clearing it blanks the IRIS
|
||||
readout, so this one behaves like a simple display source.
|
||||
- `0x0083=0x8000` drives a combined state: MASTER GAIN `-3`, SHUTTER `OFF`, and
|
||||
IRIS AUTO. Clearing the selector did not visibly clear that state in the
|
||||
isolation run, so it may be latched or copied into another display bank.
|
||||
- `0x0093` is now a confirmed white-balance mode selector with
|
||||
`0x8000=PRESET`, `0x4000=AUTO`, and `0x0000/0x2000=MANUAL` under this test
|
||||
context. BLACK/FLARE MANUAL was also present for all tested `0x0093` states.
|
||||
- `0x0024=0x8000` lights an LCD selector-button lamp, but `0x0024=0x0000` did
|
||||
not clear it in this timing window.
|
||||
Reference in New Issue
Block a user