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 @@ - +