1
0
Files
h8-536-decoder/scenarios/iris-mblack-link-mirror-state-machine.json
2026-05-27 21:37:50 +10:00

228 lines
6.2 KiB
JSON

{
"name": "iris-mblack-link-mirror-state-machine",
"notes": [
"IRIS/M.BLACK LINK closed-loop state-machine probe.",
"The RCP reports local button intent as selector 0x0013. This scenario ACKs the report and mirrors the reported selector value back as a command-0 CCU table update.",
"Expected cycle if the CCU owns the latched state: press 1 emits 00 00 13 40 00 09, mirror active, press 2 emits 00 00 13 00 00 49, mirror clear, press 3 emits active again.",
"If every press still emits active, the local handler is not seeing the mirrored E800/F791 state or the physical input path is level-style rather than toggle-style."
],
"steps": [
{
"action": "prompt",
"message": "Prepare to test the closed-loop IRIS/M.BLACK LINK state machine. 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": "force_selector_0013_clear_baseline",
"frame": "00 00 13 00 00 49",
"listen": 0.40
},
{
"action": "send",
"label": "recover_connect_ok_seed_before_press_1",
"frame": "00 00 00 80 00 DA",
"listen": 0.20
},
{
"action": "note",
"message": "PRESS IRIS/M.BLACK LINK ONCE NOW. The script will mirror selector 0x0013 back to the RCP when it sees the report.",
"banner": true
},
{
"action": "listen_ack",
"seconds": 9.00,
"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": 80,
"abort_on_limit": false,
"respond_on": [
{
"frames": [
"00 00 13 40 00 09",
"01 00 13 40 00 08",
"02 00 13 40 00 0B"
],
"send": "00 00 13 40 00 09",
"label": "mirror_selector_0013_active_from_button",
"delay": 0.050,
"listen": 0.20,
"once": true
},
{
"frames": [
"00 00 13 00 00 49",
"01 00 13 00 00 48",
"02 00 13 00 00 4B"
],
"send": "00 00 13 00 00 49",
"label": "mirror_selector_0013_clear_from_button",
"delay": 0.050,
"listen": 0.20,
"once": true
}
]
},
{
"action": "send",
"label": "readback_selector_0013_after_press_1",
"frame": "01 00 13 00 00 48",
"listen": 0.60
},
{
"action": "note",
"message": "PRESS IRIS/M.BLACK LINK A SECOND TIME NOW. If the mirror completed the latch, this should report clear.",
"banner": true
},
{
"action": "listen_ack",
"seconds": 9.00,
"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": 80,
"abort_on_limit": false,
"respond_on": [
{
"frames": [
"00 00 13 40 00 09",
"01 00 13 40 00 08",
"02 00 13 40 00 0B"
],
"send": "00 00 13 40 00 09",
"label": "mirror_selector_0013_active_from_button",
"delay": 0.050,
"listen": 0.20,
"once": true
},
{
"frames": [
"00 00 13 00 00 49",
"01 00 13 00 00 48",
"02 00 13 00 00 4B"
],
"send": "00 00 13 00 00 49",
"label": "mirror_selector_0013_clear_from_button",
"delay": 0.050,
"listen": 0.20,
"once": true
}
]
},
{
"action": "send",
"label": "readback_selector_0013_after_press_2",
"frame": "01 00 13 00 00 48",
"listen": 0.60
},
{
"action": "note",
"message": "PRESS IRIS/M.BLACK LINK A THIRD TIME NOW to check that active returns after a mirrored clear.",
"banner": true
},
{
"action": "listen_ack",
"seconds": 9.00,
"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": 80,
"abort_on_limit": false,
"respond_on": [
{
"frames": [
"00 00 13 40 00 09",
"01 00 13 40 00 08",
"02 00 13 40 00 0B"
],
"send": "00 00 13 40 00 09",
"label": "mirror_selector_0013_active_from_button",
"delay": 0.050,
"listen": 0.20,
"once": true
},
{
"frames": [
"00 00 13 00 00 49",
"01 00 13 00 00 48",
"02 00 13 00 00 4B"
],
"send": "00 00 13 00 00 49",
"label": "mirror_selector_0013_clear_from_button",
"delay": 0.050,
"listen": 0.20,
"once": true
}
]
},
{
"action": "send",
"label": "readback_selector_0013_after_press_3",
"frame": "01 00 13 00 00 48",
"listen": 0.60
},
{
"action": "send",
"label": "repeat_last_for_hidden_report_check",
"frame": "07 00 00 00 00 5D",
"listen": 0.60
},
{
"action": "listen",
"seconds": 1.00
}
]
}