syntax = "proto3"; package cmvr.api; import "cmvr/api/common.proto"; enum SafetyTriState { SAFETY_TRI_STATE_UNKNOWN = 0; SAFETY_TRI_STATE_FALSE = 1; SAFETY_TRI_STATE_TRUE = 2; } enum SafetyCondition { SAFETY_CONDITION_UNKNOWN = 0; SAFETY_CONDITION_NOMINAL = 1; SAFETY_CONDITION_RESTRICTED = 2; SAFETY_CONDITION_UNSAFE = 3; } enum SystemAdmissionState { SYSTEM_ADMISSION_STATE_UNSPECIFIED = 0; SYSTEM_ADMISSION_STATE_STARTING = 1; SYSTEM_ADMISSION_STATE_OPEN = 2; SYSTEM_ADMISSION_STATE_STOPPING = 3; SYSTEM_ADMISSION_STATE_LATCHED = 4; SYSTEM_ADMISSION_STATE_RECOVERING = 5; SYSTEM_ADMISSION_STATE_SHUTTING_DOWN = 6; } enum DeviceAdmissionState { DEVICE_ADMISSION_STATE_UNSPECIFIED = 0; DEVICE_ADMISSION_STATE_OBSERVING = 1; DEVICE_ADMISSION_STATE_OPEN = 2; DEVICE_ADMISSION_STATE_BLOCKED = 3; DEVICE_ADMISSION_STATE_QUARANTINED = 4; DEVICE_ADMISSION_STATE_RECOVERING = 5; DEVICE_ADMISSION_STATE_REMOVED = 6; } enum SafetyBlockerScope { SAFETY_BLOCKER_SCOPE_UNSPECIFIED = 0; SAFETY_BLOCKER_SCOPE_DEVICE = 1; SAFETY_BLOCKER_SCOPE_SYSTEM = 2; } enum SafetyRecoveryRequirement { SAFETY_RECOVERY_REQUIREMENT_UNSPECIFIED = 0; SAFETY_RECOVERY_REQUIREMENT_REFRESH_ONLY = 1; SAFETY_RECOVERY_REQUIREMENT_CLEAR_SOFTWARE_LATCH = 2; SAFETY_RECOVERY_REQUIREMENT_HARDWARE_RELEASE_REQUIRED = 3; SAFETY_RECOVERY_REQUIREMENT_MANUAL_INSPECTION_REQUIRED = 4; } enum SafetyOperationResult { SAFETY_OPERATION_RESULT_UNSPECIFIED = 0; SAFETY_OPERATION_RESULT_SUCCEEDED = 1; SAFETY_OPERATION_RESULT_RECOVERED = 2; SAFETY_OPERATION_RESULT_VERIFIED_BUT_STILL_BLOCKED = 3; SAFETY_OPERATION_RESULT_BLOCKER_REMAINS = 4; SAFETY_OPERATION_RESULT_EPOCH_MISMATCH = 5; SAFETY_OPERATION_RESULT_NOTHING_TO_RECOVER = 6; SAFETY_OPERATION_RESULT_TIMED_OUT = 7; SAFETY_OPERATION_RESULT_FAILED = 8; } message DeviceIdList { repeated string device_ids = 1; } message SafetyScope { oneof target { bool all_devices = 1; DeviceIdList devices = 2; } } message SafetyBlockerInfo { CommandReasonCode reason_code = 1; SafetyBlockerScope scope = 2; SafetyRecoveryRequirement recovery_requirement = 3; string source_id = 4; string operation_id = 5; uint64 first_observed_at_unix_ms = 6; uint64 last_observed_at_unix_ms = 7; } message DeviceSafetyStateInfo { string device_id = 1; string device_kind = 2; string policy_family = 3; string lifecycle_state = 4; string health_state = 5; DeviceAdmissionState admission_state = 6; SafetyCondition condition = 7; bool has_sample = 8; bool snapshot_fresh = 9; uint64 sample_age_ms = 10; uint64 sample_sequence = 11; uint64 observed_at_unix_ms = 12; uint64 device_generation = 13; SafetyTriState connected = 14; SafetyTriState operational_ready = 15; SafetyTriState quiescent = 16; SafetyTriState motion_active = 17; SafetyTriState actuator_enabled = 18; SafetyTriState emergency_stop_active = 19; SafetyTriState protective_stop_active = 20; SafetyTriState fault_active = 21; repeated SafetyBlockerInfo blockers = 22; } message SafetyOperationTargetResult { string target_id = 1; SafetyOperationResult result = 2; CommandReasonCode reason_code = 3; string detail = 4; DeviceAdmissionState before_state = 5; DeviceAdmissionState after_state = 6; } message SafetyParticipantResultInfo { bool recorded = 1; bool success = 2; CommandReasonCode reason_code = 3; string detail = 4; } message SafetyParticipantStateInfo { string participant_id = 1; string phase = 2; bool required = 3; bool registered = 4; bool barrier_active = 5; bool barrier_retained = 6; string operation_id = 7; uint64 safety_epoch = 8; SafetyParticipantResultInfo last_request = 9; SafetyParticipantResultInfo last_verify = 10; SafetyParticipantResultInfo last_release = 11; } message GetSafetyStateCommand { message Request { SafetyScope scope = 1; } message Feedback { CommandHeader.Feedback header = 1; SystemAdmissionState system_state = 2; uint64 safety_epoch = 3; string control_service_instance_id = 4; string enforcement_mode = 5; repeated DeviceSafetyStateInfo devices = 6; string active_operation_id = 7; string active_operation_phase = 8; uint64 sampled_at_unix_ms = 9; repeated SafetyParticipantStateInfo participants = 10; } } message RecoverSafetyStateCommand { enum Mode { MODE_UNSPECIFIED = 0; VERIFY_ONLY = 1; CLEAR_SOFTWARE_LATCH = 2; } message Request { string recovery_id = 1; SafetyScope scope = 2; uint64 expected_safety_epoch = 3; Mode mode = 4; string reason = 5; uint32 timeout_ms = 6; } message Feedback { CommandHeader.Feedback header = 1; SafetyOperationResult result = 2; uint64 previous_safety_epoch = 3; uint64 current_safety_epoch = 4; SystemAdmissionState system_state = 5; repeated SafetyOperationTargetResult targets = 6; string recovery_id = 7; } } message RestoreOperationalStateCommand { message Request { string recovery_id = 1; string reason = 2; uint32 timeout_ms = 3; } message Feedback { CommandHeader.Feedback header = 1; SafetyOperationResult result = 2; uint64 previous_safety_epoch = 3; uint64 current_safety_epoch = 4; SystemAdmissionState system_state = 5; repeated SafetyOperationTargetResult targets = 6; string recovery_id = 7; } }