40 lines
1.1 KiB
C++
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
|