1+ #ifndef INC_SP140_SIMPLE_MONITOR_H_
2+ #define INC_SP140_SIMPLE_MONITOR_H_
3+
4+ #include < Arduino.h>
5+ #include < vector>
6+ #include " sp140/structs.h"
7+ #include " sp140/globals.h"
8+
9+ // Forward declarations
10+ class ILogger ;
11+ class IMonitor ;
12+
13+ // Sensor categories for organization
14+ enum class SensorCategory {
15+ ESC,
16+ BMS,
17+ ALTIMETER,
18+ INTERNAL
19+ };
20+
21+ // Alert levels
22+ enum class AlertLevel {
23+ OK = 0 ,
24+ WARN_LOW = 1 ,
25+ WARN_HIGH = 2 ,
26+ CRIT_LOW = 3 ,
27+ CRIT_HIGH = 4 ,
28+ INFO = 5
29+ };
30+
31+ // Sensor ID enumeration
32+ enum class SensorID {
33+ // ESC Temperature sensors
34+ ESC_MOS_Temp,
35+ ESC_MCU_Temp,
36+ ESC_CAP_Temp,
37+ Motor_Temp,
38+
39+ // ESC Running Errors (Critical)
40+ ESC_OverCurrent_Error,
41+ ESC_LockedRotor_Error,
42+ ESC_OverTemp_Error,
43+ ESC_OverVolt_Error,
44+ ESC_VoltageDrop_Error,
45+
46+ // ESC Running Warnings
47+ ESC_ThrottleSat_Warning,
48+
49+ // ESC Self-Check Errors
50+ ESC_MotorCurrentOut_Error,
51+ ESC_TotalCurrentOut_Error,
52+ ESC_MotorVoltageOut_Error,
53+ ESC_CapNTC_Error,
54+ ESC_MosNTC_Error,
55+ ESC_BusVoltRange_Error,
56+ ESC_BusVoltSample_Error,
57+ ESC_MotorZLow_Error,
58+ ESC_MotorZHigh_Error,
59+ ESC_MotorVDet1_Error,
60+ ESC_MotorVDet2_Error,
61+ ESC_MotorIDet2_Error,
62+ ESC_SwHwIncompat_Error,
63+ ESC_BootloaderBad_Error,
64+
65+ // BMS sensors
66+ BMS_MOS_Temp,
67+ BMS_Balance_Temp,
68+ BMS_T1_Temp,
69+ BMS_T2_Temp,
70+ BMS_T3_Temp,
71+ BMS_T4_Temp,
72+ BMS_High_Cell_Voltage,
73+ BMS_Low_Cell_Voltage,
74+ BMS_SOC,
75+ BMS_Total_Voltage,
76+ BMS_Voltage_Differential,
77+ BMS_Charge_MOS,
78+ BMS_Discharge_MOS,
79+
80+ // Altimeter
81+ Baro_Temp,
82+
83+ // Internal
84+ CPU_Temp
85+ };
86+
87+ // Logger interface
88+ class ILogger {
89+ public:
90+ virtual ~ILogger () = default ;
91+ virtual void log (SensorID id, AlertLevel level, float value) = 0;
92+ virtual void log (SensorID id, AlertLevel level, bool value) = 0;
93+ };
94+
95+ // Multi-logger that dispatches to multiple sinks
96+ class MultiLogger : public ILogger {
97+ private:
98+ std::vector<ILogger*> sinks;
99+
100+ public:
101+ void addSink (ILogger* sink);
102+ void log (SensorID id, AlertLevel level, float value) override ;
103+ void log (SensorID id, AlertLevel level, bool value) override ;
104+ };
105+
106+ // Serial logger implementation
107+ class SerialLogger : public ILogger {
108+ public:
109+ void log (SensorID id, AlertLevel level, float value) override ;
110+ void log (SensorID id, AlertLevel level, bool value) override ;
111+ };
112+
113+ // UI logger for alert events
114+ class AlertUILogger : public ILogger {
115+ public:
116+ void log (SensorID id, AlertLevel level, float value) override ;
117+ void log (SensorID id, AlertLevel level, bool value) override ;
118+ };
119+
120+ // Monitor interface
121+ class IMonitor {
122+ public:
123+ virtual ~IMonitor () = default ;
124+ virtual void check () = 0;
125+ virtual SensorID getSensorID () const = 0;
126+ virtual SensorCategory getCategory () const = 0;
127+ virtual void resetState () = 0;
128+ };
129+
130+ // Global instances
131+ extern MultiLogger multiLogger;
132+ extern std::vector<IMonitor*> monitors;
133+ extern SerialLogger serialLogger;
134+ extern bool monitoringEnabled;
135+
136+ // Thread-safe copies for monitoring
137+ extern STR_ESC_TELEMETRY_140 monitoringEscData;
138+ extern STR_BMS_TELEMETRY_140 monitoringBmsData;
139+
140+ // Core functions
141+ void initSimpleMonitor ();
142+ void checkAllSensors ();
143+ void checkAllSensorsWithData (const STR_ESC_TELEMETRY_140& escData,
144+ const STR_BMS_TELEMETRY_140& bmsData);
145+ void enableMonitoring ();
146+ void sendAlertEvent (SensorID id, AlertLevel level);
147+
148+ // Utility functions
149+ const char * sensorIDToString (SensorID id);
150+ const char * sensorIDToAbbreviation (SensorID id);
151+ const char * sensorIDToAbbreviationWithLevel (SensorID id, AlertLevel level);
152+
153+ // Monitor registration functions (to be implemented)
154+ void addESCMonitors ();
155+ void addBMSMonitors ();
156+ void addAltimeterMonitors ();
157+ void addInternalMonitors ();
158+
159+ #endif // INC_SP140_SIMPLE_MONITOR_H_
0 commit comments