14 KiB
PT2 Lamp And Panel Output Selector Map
This note tracks bench-visible lamp/readout effects from CCU-to-RCP selector writes.
Current Model
The panel lamps and seven-segment displays are driven by selector-table state, not by one monolithic "connected" flag. Command 0 writes into the primary/current tables, and several selectors immediately affect visible panel outputs while CONNECT: OK is alive.
Known active-state foundation:
E000[0x0000] = 0x8080wakes/holdsCONNECT: OK.E000[0x008F]drives shutterEVS/OFFstyle display state and iris AUTO side effects.E000[0x0093]drives at least white-balance and black/flare lamp state.
Bench Observations 2026-05-26
lamp-0093-lowbyte-sweep
Result: no new visible behavior beyond the already-known 0x0093 family.
Interpretation:
- The earlier
0x0093mapping still stands. - Individual low-byte probes inside a streamed
0x90xxcontext did not reveal a new lamp in this run. - Keep
0x9020as a useful manual/baseline context and0x90FF/0xFFFFas black/flare AUTO positive controls.
lamp-known-button-selector-probe
Visible result:
- CAM button/lamp flashed on/off.
- CALL lamp flashed on/off.
- BARS and MASTER lamps flashed on/off.
- Camera tally changed red, then later green.
- Each visible output illuminated by itself, not as a broad all-lamps blast.
Serial result:
- The run stayed in normal
CONNECT: OKresponse cadence. - Each command-0 write produced an immediate
04 ...readback-style frame and repeated02 00 02 00 00 5Aactive responses.
Candidate mapping:
| Selector/value pair | Current meaning |
|---|---|
0x0007 = 0x8000/0x0000 |
CAM POWER lamp blink confirmed by isolated run |
0x0015 = 0x8000/0x0000 |
CALL lamp blink confirmed; red tally also blinked in the same phase |
0x0012, 0x0013, 0x0016, 0x0017, 0x0018, 0x001A |
ordered candidates for SLAVE, green tally, BARS, MASTER, and neighboring lamp states |
Follow-up lamp-isolate-cam-call result:
- First phase blinked CAM POWER.
- Second phase blinked CALL and red tally.
Follow-up lamp-isolate-known-neighbors result:
- Visible order was SLAVE, then green tally, then BARS.
- The pattern repeated, and at one point SLAVE and BARS were visible together.
- Treat the ordered mapping as likely but not final until a fresh-boot single-selector run separates latch/persistence effects from the selector under test.
Follow-up lamp-isolate-neighbor-single-boot result:
| Fresh-boot candidate | Visible result |
|---|---|
0x0012 = 0x8000/0x0000 |
no visible change reported |
0x0013 = 0x8000/0x0000 |
SLAVE lamp |
0x0016 = 0x8000/0x0000 |
camera tally green |
0x0017 = 0x8000/0x0000 |
BARS lamp |
0x0018 = 0x8000/0x0000 |
no visible result reported yet |
0x001A = 0x8000/0x0000 |
no visible result reported yet |
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, and0x0014high-nibble/selected-bit sweeps did not produce a clean STANDARD or MASTER lamp trigger. The0x0013=0x8000SLAVE positive control still worked.0x0010,0x0011,0x0015,0x0016,0x0017,0x0018,0x0019, and0x001Ahigh-nibble sweeps did not produce a clean STANDARD or MASTER lamp trigger.0x0008through0x000Fhigh-nibble sweeps did not produce a clean STANDARD or MASTER lamp trigger.0x0017=0x4000lit the same far-right bottom BARS lamp/latch as the known0x0017=0x8000family. Later0x0018rows 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]isH'E826.- Selector
0x0013dispatches toH'2E06. H'E826.15sets/clearsF791.6andF713.4, matching SLAVE.H'E826.14sets/clearsF791.5andF716.7, matchingIRIS/M.BLACK LINK.- Local handler
H'200Ecan also toggleH'E826.14from panel inputF006.7/F6DB.7when its session gate allows it.
Interpretation:
0x0082is the cleanest direct readout lane found so far: set values update the IRIS display and0x0000blanks it.0x0083appears to be a combined status/display lane rather than only the MASTER GAIN display. Its0x8000state also brings up SHUTTEROFFand IRIS AUTO, and the clear write did not visually clear it at 0.5 s.0x0093selects white-balance mode. In this run,0x2000and0x0000both 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:
- KNEE AUTO lamp flashed a few times.
- No other new visible result was reported.
- Follow-up isolation saw KNEE AUTO toward the end of the run, then blinking.
Candidate selectors in that run:
0x0003, 0x0040, 0x0081, 0x0092, 0x00A7, 0x00B7, 0x00B9, 0x0110
Interpretation:
- KNEE AUTO is likely in this broader status cluster.
- Because the visible change happened toward the end, strongest next candidates are
0x00A7,0x00B7,0x00B9, and0x0110, with0x0092kept as a guard candidate. - Exact selector/value still needs isolation because the broad sweep changed several selectors in sequence.
Follow-up lamp-isolate-knee-tail-single-boot result:
| Fresh-boot candidate | Visible result |
|---|---|
0x0092 |
iris AUTO/OFF behavior |
0x00A7 |
no visible result reported |
0x00B7 |
no visible result reported |
0x00B9 |
KNEE AUTO |
0x0110 |
KNEE AUTO |
Interpretation:
0x00B9and0x0110are real KNEE-related selectors, but a ROM trace now shows they are not a simple OR-held lamp pair.loc_1795is the local KNEE/panel-input handler. It is reached fromF104 -> F692 -> F6F0.1, then readsE000[0x00B9]andE000[0x0110].- The ROM gate for the live KNEE value/report branch is
0x00B9.13, not0x00B9.15. 0x0110.15forces a timed KNEE page/display override. That fits the observed "lights, then clears" behavior.0x00B9.15still matters on the timed KNEE LCD page: it selects thePRESETlabel when0x0110.15is clear. With both clear, the same page labels KNEE asAUTO.- When
0x00B9.13is set and0x0110.15is clear, the ROM computesF692 - F6B2and reports/updates selector0x00BC. That is now the strongest candidate for the KNEE control value lane.
Follow-up lamp-knee-or-precedence result:
- Case 1 (
0x00B9.15set, then0x0110.15set, then0x00B9cleared) kept KNEE AUTO on until near the end, when0x0110was cleared. - Case 2 (
0x0110.15set, then0x00B9.15set, then0x0110cleared) turned KNEE AUTO off well before the end, even though0x00B9had been set. - This argues against a simple OR model. Current best interpretation:
0x0110.15is the stronger live display/control source for KNEE AUTO;0x00B9.15is related, but may be a transient, secondary status source, or only meaningful with another gate active.
Follow-up lamp-knee-sustain-compare result:
- Repeated
0x00B9.15refresh never lit KNEE AUTO. - Repeated
0x0110.15refresh lit KNEE AUTO, but it turned off again around the middle of the repeated-refresh window. - This makes
0x00B9.15look like a context-sensitive or stale interpretation rather than a maintained lamp source. 0x0110.15remains the best KNEE AUTO source, but it is not sufficient by itself to hold the lamp. It likely needs a surrounding CCU status refresh, or another selector periodically clears/rebuilds the visible lamp bank.
Follow-up lamp-knee-context-hold result:
- Pairing
0x00B9.15with the known0x0093=0x9020active refresh did not light KNEE AUTO. - Pairing
0x0110.15with0x0093=0x9020did light KNEE AUTO, but it still turned off around the middle of the run. - The serial log stayed clean: repeated table readbacks and
02 00 02 00 00 5Aactive responses continued, with no resync or NOT ACT-style serial collapse. - Current best hypothesis:
0x0110.15behaves more like an edge/pulse or consumed display request than a pure level-held lamp bit. Repeating the same high value may not retrigger it after the display task has consumed the state.
ROM follow-up:
- Detailed notes:
docs/pt2-knee-rom-trace.md. - The timed path sets
F732=0x1C03,FB02=0x14, callsloc_48FA, and later restores the previous page throughloc_48EF. F732=0x1C03dispatches to a KNEE LCD page. Its second line isDLwhen0x0110.15is set,PRESETwhen0x0110.15is clear and0x00B9.15is set, otherwiseAUTO.knee-rom-gate-and-value-probeproduced a new bench LCD state withDTLon the left andKNEEon the right. This matches the ROM page-0x1C neighborhood: KNEE entry at0x95CE, DETAIL entry at0x97C8.- The panel physically has DETAIL and KNEE buttons near the LCD, so this is likely a local menu/button context. Pressing those buttons during the prepared gate window may supply the
F104transition that the ROM needs before it callsloc_1795. - Follow-up isolation lit KNEE AUTO in the later KNEE cases/windows but did not change the LCD. Treat the KNEE AUTO lamp and the DETAIL/KNEE LCD page as related but separate paths:
0x0110.15remains the strongest lamp/status source, while LCD movement likely needs an additional local menu/display gate. - Next bench retest should include
0x00B9.13(00 01 39 20 00 42) and the0x00BCreport/read lane, not only the older0x00B9.15/0x0110.15pair.
Follow-Up Isolation Scenarios
Run these with the console visible and record the exact label shown when each lamp changes:
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-isolate-cam-call.json --parity E --log captures\lamp-isolate-cam-call.txt --result-json captures\lamp-isolate-cam-call-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-isolate-known-neighbors.json --parity E --log captures\lamp-isolate-known-neighbors.txt --result-json captures\lamp-isolate-known-neighbors-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-isolate-knee-status-selectors.json --parity E --log captures\lamp-isolate-knee-status-selectors.txt --result-json captures\lamp-isolate-knee-status-selectors-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-isolate-neighbor-single-boot.json --parity E --log captures\lamp-isolate-neighbor-single-boot.txt --result-json captures\lamp-isolate-neighbor-single-boot-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-isolate-knee-tail-single-boot.json --parity E --log captures\lamp-isolate-knee-tail-single-boot.txt --result-json captures\lamp-isolate-knee-tail-single-boot-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-isolate-knee-bit-scan.json --parity E --log captures\lamp-isolate-knee-bit-scan.txt --result-json captures\lamp-isolate-knee-bit-scan-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-knee-or-precedence.json --parity E --log captures\lamp-knee-or-precedence.txt --result-json captures\lamp-knee-or-precedence-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-knee-sustain-compare.json --parity E --log captures\lamp-knee-sustain-compare.txt --result-json captures\lamp-knee-sustain-compare-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-knee-context-hold.json --parity E --log captures\lamp-knee-context-hold.txt --result-json captures\lamp-knee-context-hold-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-knee-edge-refresh.json --parity E --log captures\lamp-knee-edge-refresh.txt --result-json captures\lamp-knee-edge-refresh-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\knee-rom-gate-and-value-probe.json --parity E --log captures\knee-rom-gate-and-value-probe.txt --result-json captures\knee-rom-gate-and-value-probe-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\knee-rom-dtl-knee-isolation.json --parity E --log captures\knee-rom-dtl-knee-isolation.txt --result-json captures\knee-rom-dtl-knee-isolation-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\knee-detail-physical-button-watch.json --parity E --log captures\knee-detail-physical-button-watch.txt --result-json captures\knee-detail-physical-button-watch-result.json
Method notes:
- Record visible changes immediately during each labeled hold. Later
CONNECT: NOT ACTcleanup is not selector evidence. - If a selector causes a latch or unexpected mode, stop and keep the log instead of continuing the whole sweep.
- Prefer exact notes like
selector_0018_high -> tally red, because the logs already preserve send timestamps and readback frames. - For the single-boot follow-ups, each candidate gets a fresh power cycle. That is deliberate: it tests whether a lamp is truly driven by that selector rather than retained from a previous write.