1
0
This commit is contained in:
Aiden
2026-05-27 11:50:10 +10:00
parent 0d099235c5
commit c0304c575c
55 changed files with 26035 additions and 16 deletions

View File

@@ -0,0 +1,208 @@
{
"name": "button-report-broad-gates-press",
"notes": [
"One-button candidate test with broad secondary E400 gates enabled for ROM-observed report selectors.",
"Run this only after the common-gate press test fails to produce a clear extra selector.",
"If a button only emits here, it probably needs a selector-specific feature/report gate rather than only the common queue-service gate."
],
"steps": [
{
"action": "prompt",
"message": "Broad-gate run: pick one physical button. When the NOTE banner appears, press it once. Press Enter to start."
},
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_connect_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.40
},
{
"action": "send",
"label": "secondary_gate_0007",
"frame": "06 00 07 FF FF 5B",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_0013",
"frame": "06 00 13 FF FF 4F",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_0015",
"frame": "06 00 15 FF FF 49",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_0017",
"frame": "06 00 17 FF FF 4B",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_0018",
"frame": "06 00 18 FF FF 44",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_001a",
"frame": "06 00 1A FF FF 46",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_006b",
"frame": "06 01 6B FF FF 36",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_0083",
"frame": "06 01 03 FF FF 5E",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_008f",
"frame": "06 01 0F FF FF 52",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_0093",
"frame": "06 01 13 FF FF 4E",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_0096",
"frame": "06 01 16 FF FF 4B",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_0097",
"frame": "06 01 17 FF FF 4A",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_009a",
"frame": "06 01 1A FF FF 47",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_00b7",
"frame": "06 01 37 FF FF 6A",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_00b9",
"frame": "06 01 39 FF FF 64",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_00c4",
"frame": "06 02 44 FF FF 1A",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_00c6",
"frame": "06 02 46 FF FF 18",
"listen": 0.04
},
{
"action": "send",
"label": "secondary_gate_00f8",
"frame": "06 02 78 FF FF 26",
"listen": 0.04
},
{
"action": "send",
"label": "cmd5_latch_clear_0096",
"frame": "05 01 16 00 00 48",
"listen": 0.05
},
{
"action": "listen_ack",
"seconds": 3.20,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 48,
"abort_on_limit": false
},
{
"action": "send",
"label": "recover_connect_ok_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.45
},
{
"action": "listen_ack",
"seconds": 1.20,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 32,
"abort_on_limit": false
},
{
"action": "note",
"message": "PRESS THE ONE TEST BUTTON NOW; broad secondary gates are enabled.",
"banner": true
},
{
"action": "listen_ack",
"seconds": 16.00,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 96,
"abort_on_limit": false
},
{
"action": "send",
"label": "repeat_last_for_hidden_report_check",
"frame": "07 00 00 00 00 5D",
"listen": 0.80
},
{
"action": "listen",
"seconds": 1.50
}
]
}

View File

@@ -0,0 +1,100 @@
{
"name": "button-report-common-gate-baseline",
"notes": [
"No-button baseline for queued local-control report tests.",
"Do not press or turn controls during the NOTE window. Compare this result JSON against one-button candidate runs.",
"This uses the same common queue-service gate that exposed SHUTTER ON/OFF as selector 0x010F."
],
"steps": [
{
"action": "prompt",
"message": "Baseline run: do not touch the panel during the NOTE window. Press Enter to start."
},
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_connect_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "cmd5_latch_clear_0096",
"frame": "05 01 16 00 00 48",
"listen": 0.05
},
{
"action": "listen_ack",
"seconds": 3.20,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 48,
"abort_on_limit": false
},
{
"action": "send",
"label": "recover_connect_ok_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.45
},
{
"action": "listen_ack",
"seconds": 1.20,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 32,
"abort_on_limit": false
},
{
"action": "note",
"message": "NO BUTTONS NOW; baseline queued-report ACK window is running.",
"banner": true
},
{
"action": "listen_ack",
"seconds": 16.00,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 96,
"abort_on_limit": false
},
{
"action": "send",
"label": "repeat_last_for_hidden_report_check",
"frame": "07 00 00 00 00 5D",
"listen": 0.80
},
{
"action": "listen",
"seconds": 1.50
}
]
}

View File

@@ -0,0 +1,100 @@
{
"name": "button-report-common-gate-press",
"notes": [
"One-button candidate test for queued local-control reports.",
"Run the common-gate baseline first, then run this once per physical button candidate and compare result JSON files.",
"If a button produces an extra selector here, it probably shares the same common queue-service gate as SHUTTER ON/OFF."
],
"steps": [
{
"action": "prompt",
"message": "Pick one physical button for this run. When the NOTE banner appears, press it once. Press Enter to start."
},
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_connect_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "cmd5_latch_clear_0096",
"frame": "05 01 16 00 00 48",
"listen": 0.05
},
{
"action": "listen_ack",
"seconds": 3.20,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 48,
"abort_on_limit": false
},
{
"action": "send",
"label": "recover_connect_ok_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.45
},
{
"action": "listen_ack",
"seconds": 1.20,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 32,
"abort_on_limit": false
},
{
"action": "note",
"message": "PRESS THE ONE TEST BUTTON NOW; live queued-report ACK window is running.",
"banner": true
},
{
"action": "listen_ack",
"seconds": 16.00,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 96,
"abort_on_limit": false
},
{
"action": "send",
"label": "repeat_last_for_hidden_report_check",
"frame": "07 00 00 00 00 5D",
"listen": 0.80
},
{
"action": "listen",
"seconds": 1.50
}
]
}

View File

@@ -0,0 +1,47 @@
{
"name": "copy-family00-006d-006c-1000ms",
"notes": [
"Recover to CONNECT OK, send family-00 selector 0x006D, then family-00 selector 0x006C 1 second later.",
"Gives the LCD time to visibly enter COPY IN PROGRESS if family-00 0x006D drives the same queue path as command 5."
],
"steps": [
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"timeout": 10.0,
"heartbeats": 2,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "ok_baseline_1",
"frame": "04 00 00 80 00 DE",
"listen": 0.7
},
{
"action": "send",
"label": "ok_baseline_2",
"frame": "04 00 00 80 00 DE",
"listen": 1.0
},
{
"action": "send",
"label": "family00_copy_start_006d",
"frame": "00 00 6D 00 00 37",
"listen": 1.0
},
{
"action": "send",
"label": "family00_copy_complete_candidate_006c",
"frame": "00 00 6C 00 00 36",
"listen": 10.0
}
]
}

View File

@@ -0,0 +1,47 @@
{
"name": "copy-family00-006d-006c-250ms",
"notes": [
"Recover to CONNECT OK, send family-00 selector 0x006D, then family-00 selector 0x006C 250 ms later.",
"Compares family-00 set/queue behavior against the known command-5 COPY start/complete pair."
],
"steps": [
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"timeout": 10.0,
"heartbeats": 2,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "ok_baseline_1",
"frame": "04 00 00 80 00 DE",
"listen": 0.7
},
{
"action": "send",
"label": "ok_baseline_2",
"frame": "04 00 00 80 00 DE",
"listen": 1.0
},
{
"action": "send",
"label": "family00_copy_start_006d",
"frame": "00 00 6D 00 00 37",
"listen": 0.25
},
{
"action": "send",
"label": "family00_copy_complete_candidate_006c",
"frame": "00 00 6C 00 00 36",
"listen": 10.0
}
]
}

View File

@@ -0,0 +1,124 @@
{
"name": "others-menu-gated-baseline",
"notes": [
"No-button baseline for OTHERS/menu testing.",
"Seeds the known OTHERS-adjacent state: E000[0x008F]=0x1800 and E400[0x0015]=0x0001.",
"Compare this against others-menu-gated-press before assigning any OTHERS button meaning."
],
"steps": [
{
"action": "prompt",
"message": "OTHERS gated baseline: do not touch the panel during the NOTE window. Press Enter to start."
},
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_connect_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.45
},
{
"action": "send",
"label": "others_root_008f_bits_11_12",
"frame": "00 01 0F 18 00 4C",
"listen": 0.30
},
{
"action": "send",
"label": "others_secondary_gate_0015_low",
"frame": "06 00 15 00 01 48",
"listen": 0.10
},
{
"action": "send",
"label": "cmd5_latch_clear_0096",
"frame": "05 01 16 00 00 48",
"listen": 0.05
},
{
"action": "listen_ack",
"seconds": 3.20,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 64,
"abort_on_limit": false
},
{
"action": "send",
"label": "recover_connect_ok_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.35
},
{
"action": "send",
"label": "refresh_others_root_008f_bits_11_12",
"frame": "00 01 0F 18 00 4C",
"listen": 0.15
},
{
"action": "send",
"label": "refresh_others_secondary_gate_0015_low",
"frame": "06 00 15 00 01 48",
"listen": 0.05
},
{
"action": "listen_ack",
"seconds": 1.20,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 32,
"abort_on_limit": false
},
{
"action": "note",
"message": "NO BUTTONS NOW; OTHERS-gated queued-report ACK window is running.",
"banner": true
},
{
"action": "listen_ack",
"seconds": 16.00,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 128,
"abort_on_limit": false
},
{
"action": "send",
"label": "repeat_last_for_hidden_report_check",
"frame": "07 00 00 00 00 5D",
"listen": 0.80
},
{
"action": "listen",
"seconds": 1.50
}
]
}

View File

@@ -0,0 +1,124 @@
{
"name": "others-menu-gated-press",
"notes": [
"Press-run for OTHERS/menu testing.",
"Seeds the known OTHERS-adjacent state: E000[0x008F]=0x1800 and E400[0x0015]=0x0001.",
"Press the OTHERS button once at the NOTE banner, then compare against others-menu-gated-baseline."
],
"steps": [
{
"action": "prompt",
"message": "OTHERS gated press run: when the NOTE banner appears, press OTHERS once. Press Enter to start."
},
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_connect_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.45
},
{
"action": "send",
"label": "others_root_008f_bits_11_12",
"frame": "00 01 0F 18 00 4C",
"listen": 0.30
},
{
"action": "send",
"label": "others_secondary_gate_0015_low",
"frame": "06 00 15 00 01 48",
"listen": 0.10
},
{
"action": "send",
"label": "cmd5_latch_clear_0096",
"frame": "05 01 16 00 00 48",
"listen": 0.05
},
{
"action": "listen_ack",
"seconds": 3.20,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 64,
"abort_on_limit": false
},
{
"action": "send",
"label": "recover_connect_ok_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.35
},
{
"action": "send",
"label": "refresh_others_root_008f_bits_11_12",
"frame": "00 01 0F 18 00 4C",
"listen": 0.15
},
{
"action": "send",
"label": "refresh_others_secondary_gate_0015_low",
"frame": "06 00 15 00 01 48",
"listen": 0.05
},
{
"action": "listen_ack",
"seconds": 1.20,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 32,
"abort_on_limit": false
},
{
"action": "note",
"message": "PRESS OTHERS NOW; OTHERS-gated queued-report ACK window is running.",
"banner": true
},
{
"action": "listen_ack",
"seconds": 16.00,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 128,
"abort_on_limit": false
},
{
"action": "send",
"label": "repeat_last_for_hidden_report_check",
"frame": "07 00 00 00 00 5D",
"listen": 0.80
},
{
"action": "listen",
"seconds": 1.50
}
]
}

View File

@@ -0,0 +1,116 @@
{
"name": "shutter-onoff-report-ack-c0-recover-ok-0096-prompt",
"notes": [
"Second-pass SHUTTER ON/OFF report test based on the latest captures.",
"Bench evidence: after command-5 selector 0x0096, the RCP emits repeated 01 00 02 00 00 59 frames. This scenario ACKs that stream before trying to recover CONNECT OK.",
"When prompted, press SHUTTER ON/OFF during the active refresh/ACK loop. Desired report candidates are 00 01 0F 80 00 D4 or 00 01 0F 20 00 74."
],
"steps": [
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_connect_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "cmd5_latch_clear_0096",
"frame": "05 01 16 00 00 48",
"listen": 0.05
},
{
"action": "listen_ack",
"seconds": 1.80,
"frames": [
"01 00 02 00 00 59",
"02 00 02 00 00 5A"
],
"ack_frame": "05 00 02 00 00 5D",
"ack_guard": 0.015,
"post_ack_read": 0.120,
"poll_interval": 0.005,
"max_acks": 8,
"abort_on_limit": false
},
{
"action": "drain",
"seconds": 0.10
},
{
"action": "send",
"label": "recover_connect_ok_seed_1",
"frame": "00 00 00 80 00 DA",
"listen": 0.70
},
{
"action": "send",
"label": "recover_connect_ok_seed_2",
"frame": "00 00 00 80 00 DA",
"listen": 0.70
},
{
"action": "send",
"label": "quiet_active_refresh_0093_9020",
"frame": "00 01 13 90 20 F8",
"listen": 0.35
},
{
"action": "prompt",
"message": "Press Enter, then press SHUTTER ON/OFF during the next refresh/ACK loop. Note LCD state and time."
},
{
"action": "drain",
"seconds": 0.05
},
{
"action": "repeat",
"count": 12,
"steps": [
{
"action": "send",
"label": "maintain_ok_0093_9020",
"frame": "00 01 13 90 20 F8",
"listen": 0.15
},
{
"action": "listen_ack",
"seconds": 0.30,
"frames": [
"01 00 02 00 00 59",
"02 00 02 00 00 5A"
],
"ack_frame": "05 00 02 00 00 5D",
"ack_guard": 0.010,
"post_ack_read": 0.060,
"poll_interval": 0.005,
"max_acks": 1,
"abort_on_limit": false
}
]
},
{
"action": "send",
"label": "repeat_last_for_hidden_report_check",
"frame": "07 00 00 00 00 5D",
"listen": 0.80
},
{
"action": "listen",
"seconds": 1.50
}
]
}

View File

@@ -0,0 +1,105 @@
{
"name": "shutter-onoff-report-dynamic-queue-ack-0096-prompt",
"notes": [
"Third-pass SHUTTER ON/OFF report test. The prior capture proved the first ACK advanced 01 00 02 to a repeated 02 00 04 stream.",
"This scenario dynamically ACKs queued report selectors with command 5, so 02 00 04 gets ACKed as 05 00 04 00 00 5B, 02 00 12 as 05 00 12 00 00 4D, and so on.",
"Do not treat CONNECT OK as required here. The target is a clean 0x008F local-control report: 00 01 0F 80 00 D4 or 00 01 0F 20 00 74.",
"The only blocking prompt is before power cycle. The in-window SHUTTER cue is a non-blocking note so RX/TX traffic does not pause and drop the panel out of CONNECT OK."
],
"steps": [
{
"action": "prompt",
"message": "Get ready. After the queue drain the script will print NOTE PRESS SHUTTER ON/OFF NOW; press the button once immediately. Press Enter to start."
},
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_connect_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "cmd5_latch_clear_0096",
"frame": "05 01 16 00 00 48",
"listen": 0.05
},
{
"action": "listen_ack",
"seconds": 3.20,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.090,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 32,
"abort_on_limit": false
},
{
"action": "drain",
"seconds": 0.15
},
{
"action": "send",
"label": "recover_connect_ok_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.45
},
{
"action": "listen_ack",
"seconds": 1.20,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 24,
"abort_on_limit": false
},
{
"action": "note",
"message": "PRESS SHUTTER ON/OFF NOW; live queued-report ACK window continues without pausing.",
"banner": true
},
{
"action": "listen_ack",
"seconds": 8.00,
"target_mode": "queued_reports",
"ack_mode": "cmd5_selector",
"ack_guard": 0.010,
"post_ack_read": 0.070,
"poll_interval": 0.004,
"once_per_frame": false,
"limit_scope": "local",
"max_acks": 48,
"abort_on_limit": false
},
{
"action": "send",
"label": "repeat_last_for_hidden_report_check",
"frame": "07 00 00 00 00 5D",
"listen": 0.80
},
{
"action": "listen",
"seconds": 1.50
}
]
}

View File

@@ -0,0 +1,58 @@
{
"name": "shutter-onoff-report-latch-open-0096-prompt",
"notes": [
"This is the cleaner emulator-derived SHUTTER ON/OFF report test.",
"Important: the emulator expects CONNECT OK to fall back to CONNECT NOT ACT just as the report gate opens.",
"After the prompt, press SHUTTER ON/OFF during the listen window even if the LCD says CONNECT NOT ACT."
],
"steps": [
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_connect_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "cmd5_latch_clear_0096",
"frame": "05 01 16 00 00 48",
"listen": 1.30
},
{
"action": "prompt",
"message": "Press Enter, then press SHUTTER ON/OFF once or twice during the next 6 seconds, even if the LCD is CONNECT NOT ACT."
},
{
"action": "drain",
"seconds": 0.05
},
{
"action": "listen",
"seconds": 6.0
},
{
"action": "send",
"label": "repeat_last_for_hidden_report_check",
"frame": "07 00 00 00 00 5D",
"listen": 0.80
},
{
"action": "listen",
"seconds": 1.50
}
]
}

View File

@@ -0,0 +1,78 @@
{
"name": "shutter-onoff-report-recover-ok-after-clear-0096-prompt",
"notes": [
"Friendlier visual test: clear the SHUTTER report gate, then re-light CONNECT OK before the manual button window.",
"This is noisier than the latch-open test because the OK refresh stream can queue other active reports ahead of the button report.",
"After the prompt, press SHUTTER ON/OFF while CONNECT OK is visible or during the following refresh window."
],
"steps": [
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_connect_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "cmd5_latch_clear_0096",
"frame": "05 01 16 00 00 48",
"listen": 1.25
},
{
"action": "send",
"label": "recover_connect_ok_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.35
},
{
"action": "send",
"label": "quiet_active_refresh_0093_9020",
"frame": "00 01 13 90 20 F8",
"listen": 0.35
},
{
"action": "prompt",
"message": "Press Enter, then press SHUTTER ON/OFF during the refresh loop. Watch for 00 01 0F 80 00 D4 or 00 01 0F 20 00 74."
},
{
"action": "drain",
"seconds": 0.05
},
{
"action": "repeat",
"count": 16,
"steps": [
{
"action": "send",
"label": "maintain_ok_0093_9020",
"frame": "00 01 13 90 20 F8",
"listen": 0.45
}
]
},
{
"action": "send",
"label": "repeat_last_for_hidden_report_check",
"frame": "07 00 00 00 00 5D",
"listen": 0.80
},
{
"action": "listen",
"seconds": 1.50
}
]
}

View File

@@ -0,0 +1,50 @@
{
"name": "shutter-onoff-report-unlock-0096-watch",
"notes": [
"Bench check for the SHUTTER ON/OFF-style report path found in the emulator.",
"Emulator model: selector-zero OK seed, command-5 selector 0x0096, wait for the F731 latch to clear, then F6D0.7 emits 00 01 0F 80 00 D4 and F6D0.6 emits 00 01 0F 20 00 74.",
"When the final listen window starts, press SHUTTER ON/OFF once or twice and note the time/LCD state."
],
"steps": [
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_connect_ok_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "cmd5_latch_clear_0096",
"frame": "05 01 16 00 00 48",
"listen": 1.60
},
{
"action": "listen",
"seconds": 8.0
},
{
"action": "send",
"label": "repeat_last_for_hidden_report_check",
"frame": "07 00 00 00 00 5D",
"listen": 0.80
},
{
"action": "listen",
"seconds": 1.50
}
]
}

View File

@@ -0,0 +1,50 @@
{
"name": "shutter-onoff-report-unlock-00f8-watch",
"notes": [
"Sibling latch-clear bench check for the SHUTTER ON/OFF-style report path.",
"Emulator model: selector-zero OK seed, command-5 selector 0x00F8, wait for the F731 latch to clear, then F6D0.7 can emit 00 01 0F 80 00 D4.",
"When the final listen window starts, press SHUTTER ON/OFF once or twice and note the time/LCD state."
],
"steps": [
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_connect_ok_seed",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "cmd5_latch_clear_00f8",
"frame": "05 01 78 00 00 26",
"listen": 1.60
},
{
"action": "listen",
"seconds": 8.0
},
{
"action": "send",
"label": "repeat_last_for_hidden_report_check",
"frame": "07 00 00 00 00 5D",
"listen": 0.80
},
{
"action": "listen",
"seconds": 1.50
}
]
}