{ "name": "iris-mblack-link-report-after-quiet-press", "notes": [ "Second-pass IRIS/M.BLACK LINK button report test.", "This drains the startup/current-state report queue until it goes quiet before asking for a physical press, so a fresh selector-0013 report is easier to separate from boot backlog.", "Expected fresh report shapes are 00/01/02 00 13 40 00 for active, or 00/01/02 00 13 00 00 for clear. Page-1 selector 01 13 is not this button; it is selector 0x0093." ], "steps": [ { "action": "prompt", "message": "Prepare to test IRIS/M.BLACK LINK after the report queue drains. Press Enter to power-cycle and start." }, { "action": "power_cycle", "off_seconds": 1.5 }, { "action": "wait_ready", "heartbeats": 2, "timeout": 10.0, "require": true }, { "action": "drain", "seconds": 0.20 }, { "action": "send", "label": "selector_zero_connect_seed", "frame": "00 00 00 80 00 DA", "listen": 0.20 }, { "action": "send", "label": "cmd5_latch_clear_0096", "frame": "05 01 16 00 00 48", "listen": 0.02 }, { "action": "listen_ack_until_quiet", "seconds": 28.00, "quiet_seconds": 0.90, "target_mode": "queued_reports", "ack_mode": "cmd5_selector", "ack_guard": 0.005, "post_ack_read": 0.035, "poll_interval": 0.003, "once_per_frame": false, "limit_scope": "local", "max_acks": 180, "abort_on_limit": false }, { "action": "send", "label": "recover_connect_ok_seed_before_press", "frame": "00 00 00 80 00 DA", "listen": 0.20 }, { "action": "note", "message": "QUEUE IS QUIET. PRESS IRIS/M.BLACK LINK ONCE NOW; fresh-report ACK window is running.", "banner": true }, { "action": "listen_ack_until_quiet", "seconds": 14.00, "quiet_seconds": 1.20, "target_mode": "queued_reports", "ack_mode": "cmd5_selector", "ack_guard": 0.005, "post_ack_read": 0.035, "poll_interval": 0.003, "once_per_frame": false, "limit_scope": "local", "max_acks": 64, "abort_on_limit": false }, { "action": "send", "label": "recover_connect_ok_seed_before_second_press", "frame": "00 00 00 80 00 DA", "listen": 0.20 }, { "action": "note", "message": "PRESS IRIS/M.BLACK LINK A SECOND TIME NOW to test the opposite toggle state.", "banner": true }, { "action": "listen_ack_until_quiet", "seconds": 14.00, "quiet_seconds": 1.20, "target_mode": "queued_reports", "ack_mode": "cmd5_selector", "ack_guard": 0.005, "post_ack_read": 0.035, "poll_interval": 0.003, "once_per_frame": false, "limit_scope": "local", "max_acks": 64, "abort_on_limit": false }, { "action": "send", "label": "repeat_last_for_hidden_report_check", "frame": "07 00 00 00 00 5D", "listen": 0.60 }, { "action": "listen", "seconds": 1.00 } ] }