diff --git a/flight/libraries/alarms.c b/flight/libraries/alarms.c
index be8e6ec86..1b3bca517 100644
--- a/flight/libraries/alarms.c
+++ b/flight/libraries/alarms.c
@@ -75,8 +75,12 @@ int32_t AlarmsSet(SystemAlarmsAlarmElem alarm, SystemAlarmsAlarmOptions severity
// Read alarm and update its severity only if it was changed
SystemAlarmsGet(&alarms);
- if (cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[alarm] != severity) {
+ uint32_t flightTime = xTaskGetTickCount() * portTICK_RATE_MS;
+ if ((flightTime - cast_struct_to_array(alarms.LastChange, alarms.LastChange.Actuator)[alarm] > 1000 &&
+ cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[alarm] != severity)
+ || cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[alarm] < severity) {
cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[alarm] = severity;
+ cast_struct_to_array(alarms.LastChange, alarms.LastChange.Actuator)[alarm] = flightTime;
SystemAlarmsSet(&alarms);
}
@@ -110,10 +114,14 @@ int32_t ExtendedAlarmsSet(SystemAlarmsAlarmElem alarm,
// Read alarm and update its severity only if it was changed
SystemAlarmsGet(&alarms);
- if (cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[alarm] != severity) {
+ uint32_t flightTime = xTaskGetTickCount() * portTICK_RATE_MS;
+ if ((flightTime - cast_struct_to_array(alarms.LastChange, alarms.LastChange.Actuator)[alarm] > 1000 &&
+ cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[alarm] != severity)
+ || cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[alarm] < severity) {
cast_struct_to_array(alarms.ExtendedAlarmStatus, alarms.ExtendedAlarmStatus.BootFault)[alarm] = status;
cast_struct_to_array(alarms.ExtendedAlarmSubStatus, alarms.ExtendedAlarmStatus.BootFault)[alarm] = subStatus;
cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[alarm] = severity;
+ cast_struct_to_array(alarms.LastChange, alarms.LastChange.Actuator)[alarm] = flightTime;
SystemAlarmsSet(&alarms);
}
diff --git a/shared/uavobjectdefinition/systemalarms.xml b/shared/uavobjectdefinition/systemalarms.xml
index 401f36530..1f7fb0c72 100644
--- a/shared/uavobjectdefinition/systemalarms.xml
+++ b/shared/uavobjectdefinition/systemalarms.xml
@@ -26,6 +26,31 @@
Power
+
+
+ SystemConfiguration
+ BootFault
+ OutOfMemory
+ StackOverflow
+ CPUOverload
+ EventSystem
+ Telemetry
+ Receiver
+ ManualControl
+ Actuator
+ Attitude
+ Sensors
+ Airspeed
+ Stabilization
+ Guidance
+ PathPlan
+ Battery
+ FlightTime
+ I2C
+ GPS
+ Power
+
+
SystemConfiguration
@@ -45,7 +70,7 @@
-
+