Index: firmware/App/Controllers/FluidLeak.c =================================================================== diff -u -r84cc99fd5cd997d0a1e024a4e23d0d3880142ffb -rcd5be724d5a3ba7457e761191d82f278654d7f5c --- firmware/App/Controllers/FluidLeak.c (.../FluidLeak.c) (revision 84cc99fd5cd997d0a1e024a4e23d0d3880142ffb) +++ firmware/App/Controllers/FluidLeak.c (.../FluidLeak.c) (revision cd5be724d5a3ba7457e761191d82f278654d7f5c) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2021-2022 Diality Inc. - All Rights Reserved. +* Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file FluidLeak.c * * @author (last) Sean Nash -* @date (last) 12-Nov-2021 +* @date (last) 29-Mar-2023 * * @author (original) Peman Montazemi * @date (original) 09-Mar-2021 @@ -19,6 +19,7 @@ #include "FluidLeak.h" #include "FPGA.h" #include "OperationModes.h" +#include "PersistentAlarm.h" #include "SystemCommMessages.h" #include "TaskPriority.h" #include "Timers.h" @@ -33,6 +34,9 @@ #define FLUID_LEAK_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the fluid leak data is published on the CAN bus. #define DATA_PUBLISH_COUNTER_START_COUNT 50 ///< Data publish counter start count. +/// Persist time (in ms) for fluid leak error condition. +static const U32 FLUID_LEAK_ERROR_PERSIST_MS = 250; + // ********** private data ********** static U32 fluidLeakStatePublicationTimerCounter; ///< Timer counter used to schedule fluid leak publication to CAN bus. @@ -59,6 +63,8 @@ fluidLeakState.ovData = FLUID_LEAK_STATE_DRY; fluidLeakState.override = OVERRIDE_RESET; fluidLeakStatePublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + + initPersistentAlarm( ALARM_ID_HD_FLUID_LEAK_DETECTED, 0, FLUID_LEAK_ERROR_PERSIST_MS ); } /*********************************************************************//** @@ -87,10 +93,14 @@ // Check state reading and act upon if ( FLUID_LEAK_STATE_WET == getFluidLeakState() ) { - activateAlarmNoData( ALARM_ID_HD_FLUID_LEAK_DETECTED ); + if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_FLUID_LEAK_DETECTED, TRUE ) ) + { + activateAlarmNoData( ALARM_ID_HD_FLUID_LEAK_DETECTED ); + } } else // FLUID_LEAK_STATE_DRY == getFluidLeakState() { + isPersistentAlarmTriggered( ALARM_ID_HD_FLUID_LEAK_DETECTED, FALSE ); clearAlarmCondition( ALARM_ID_HD_FLUID_LEAK_DETECTED ); } } @@ -132,9 +142,11 @@ // Publish fluid leak state on interval if ( ++fluidLeakStatePublicationTimerCounter >= getU32OverrideValue( &fluidLeakStatePublishInterval ) ) { - U32 state = (U32)getFluidLeakState(); + FLUID_LEAK_DATA_T data; - broadcastData( MSG_ID_HD_FLUID_LEAK_STATE, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&state, sizeof( U32 ) ); + data.fluidLeakState = (U32)getFluidLeakState(); + + broadcastData( MSG_ID_HD_FLUID_LEAK_STATE_DATA, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&data, sizeof( FLUID_LEAK_DATA_T ) ); fluidLeakStatePublicationTimerCounter = 0; } }