Skip to main content

entrenar/monitor/inference/safety_andon/
sil.rs

1//! Safety Integrity Level (IEC 61508)
2
3use serde::{Deserialize, Serialize};
4
5/// Safety Integrity Level (IEC 61508)
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
7pub enum SafetyIntegrityLevel {
8    /// QM: No safety requirements (games, entertainment)
9    /// - Ring buffer traces
10    /// - Best-effort logging
11    QM,
12
13    /// SIL 1: Low safety requirements
14    /// - Persistent traces
15    /// - Hash verification
16    SIL1,
17
18    /// SIL 2: Medium safety requirements
19    /// - Hash chain
20    /// - Redundant storage
21    SIL2,
22
23    /// SIL 3: High safety requirements (automotive ASIL C)
24    /// - Hash chain with signatures
25    /// - Triple redundant storage
26    /// - Hardware security module
27    SIL3,
28
29    /// SIL 4: Highest safety requirements (automotive ASIL D)
30    /// - All SIL 3 requirements
31    /// - Formal verification of trace system
32    /// - Independent safety monitor
33    SIL4,
34}
35
36impl SafetyIntegrityLevel {
37    /// Get string representation
38    pub fn as_str(&self) -> &'static str {
39        match self {
40            SafetyIntegrityLevel::QM => "QM",
41            SafetyIntegrityLevel::SIL1 => "SIL1",
42            SafetyIntegrityLevel::SIL2 => "SIL2",
43            SafetyIntegrityLevel::SIL3 => "SIL3",
44            SafetyIntegrityLevel::SIL4 => "SIL4",
45        }
46    }
47
48    /// Get minimum confidence threshold for this level
49    pub fn min_confidence(&self) -> f32 {
50        match self {
51            SafetyIntegrityLevel::QM => 0.0, // No requirement
52            SafetyIntegrityLevel::SIL1 => 0.5,
53            SafetyIntegrityLevel::SIL2 => 0.7,
54            SafetyIntegrityLevel::SIL3 => 0.8,
55            SafetyIntegrityLevel::SIL4 => 0.9,
56        }
57    }
58
59    /// Get maximum allowed latency in nanoseconds
60    pub fn max_latency_ns(&self) -> u64 {
61        match self {
62            SafetyIntegrityLevel::QM => u64::MAX,      // No requirement
63            SafetyIntegrityLevel::SIL1 => 100_000_000, // 100ms
64            SafetyIntegrityLevel::SIL2 => 50_000_000,  // 50ms
65            SafetyIntegrityLevel::SIL3 => 10_000_000,  // 10ms
66            SafetyIntegrityLevel::SIL4 => 1_000_000,   // 1ms
67        }
68    }
69}