cmvr-es/cmvr-es/manager/safety_manager/include/device_safety_endpoint.h

40 lines
1.1 KiB
C++

#pragma once
#include <functional>
#include <memory>
#include "manager/safety_manager/include/safety_types.h"
namespace cmvr::safety {
using SafetySnapshotPublisher =
std::function<bool(DeviceSafetySnapshot)>;
class DeviceSafetyEndpoint {
public:
virtual ~DeviceSafetyEndpoint() = default;
virtual DeviceSafetyDescriptor descriptor() const = 0;
virtual void bindPublisher(SafetySnapshotPublisher publisher) = 0;
virtual void requestSafetyRefresh() noexcept = 0;
// Called after a backend/session restart. Implementations must publish
// subsequent samples with this generation or remain fail-closed.
virtual void onDeviceGenerationChanged(
std::uint64_t generation) noexcept
{
(void)generation;
}
virtual HardwareCheckResult validateBeforeDispatch(
const AdmissionPermit& permit) = 0;
virtual RecoveryCheckResult reconcileAdmissionState(
const RecoveryContext& context) = 0;
};
class DeviceSafetyEndpointProvider {
public:
virtual ~DeviceSafetyEndpointProvider() = default;
virtual std::shared_ptr<DeviceSafetyEndpoint> safetyEndpoint() = 0;
};
} // namespace cmvr::safety