Every trigger opens disarmed. Dead-man expiry disarms locally and requires a new explicit arm with a different session ID within the open lifecycle. Emergency stop latches locally even if the transport stop attempt fails. These software gates do not replace device hardware limits or an independent emergency stop.
Usage
armTrigger(trigger, session_id, now_ns = NULL)
triggerHeartbeat(trigger, now_ns = NULL)
disarmTrigger(trigger, reason = "caller", now_ns = NULL)
emergencyStop(trigger, reason = "caller", now_ns = NULL)Examples
trigger <- loopbackTrigger(allowed_channels = "left", max_intensity = 20,
intensity_unit = "mA", max_duration_ms = 500,
refractory_ms = 0, deadman_ms = 1000)
triggerOpen(trigger)
armTrigger(trigger, "session-1", now_ns = 0)
triggerState(trigger)$arm$status
#> [1] "armed"