updates
This commit is contained in:
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