Index: firmware/App/Controllers/FluidLeak.c =================================================================== diff -u -r21af15686138a30ab982980ff8a641804964f1de -r7d4711edd7b40cd3e29f43e766f79a8a09586fe9 --- firmware/App/Controllers/FluidLeak.c (.../FluidLeak.c) (revision 21af15686138a30ab982980ff8a641804964f1de) +++ firmware/App/Controllers/FluidLeak.c (.../FluidLeak.c) (revision 7d4711edd7b40cd3e29f43e766f79a8a09586fe9) @@ -1,24 +1,26 @@ /************************************************************************** * -* Copyright (c) 2019-2021 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 +* @file FluidLeak.c * -* @author (last) Peman Montazemi -* @date (last) 09-Mar-2021 +* @author (last) Sean Nash +* @date (last) 22-Sep-2023 * -* @author (original) Peman Montazemi -* @date (original) 09-Mar-2021 +* @author (original) Peman Montazemi +* @date (original) 09-Mar-2021 * ***************************************************************************/ #include "AlarmMgmt.h" #include "FluidLeak.h" #include "FPGA.h" +#include "MessageSupport.h" #include "OperationModes.h" +#include "PersistentAlarm.h" #include "SystemCommMessages.h" #include "TaskPriority.h" #include "Timers.h" @@ -30,11 +32,13 @@ // ********** private definitions ********** -#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 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 80 ///< Data publish counter start count. +#define FLUID_LEAK_ALARM_TIMEOUT_MS 250 ///< Fluid leak alarm persistent timeout in milliseconds. // ********** private data ********** -static U32 fluidLeakStatePublicationTimerCounter = 0; ///< Timer counter used to schedule fluid leak publication to CAN bus. +static U32 fluidLeakStatePublicationTimerCounter; ///< Timer counter used to schedule fluid leak publication to CAN bus. /// Interval (in ms) at which to publish fluid leak data to CAN bus. static OVERRIDE_U32_T fluidLeakStatePublishInterval = { FLUID_LEAK_PUB_INTERVAL, FLUID_LEAK_PUB_INTERVAL, 0, 0 }; @@ -43,7 +47,6 @@ // ********** private function prototypes ********** static void publishFluidLeakState( void ); -static U32 getPublishFluidLeakStateInterval( void ); /*********************************************************************//** * @brief @@ -54,10 +57,13 @@ *************************************************************************/ void initFluidLeak( void ) { - fluidLeakState.data = FLUID_LEAK_STATE_DRY; - fluidLeakState.ovData = FLUID_LEAK_STATE_DRY; - fluidLeakState.ovInitData = FLUID_LEAK_STATE_DRY; - fluidLeakState.override = OVERRIDE_RESET; + fluidLeakState.data = FLUID_LEAK_STATE_DRY; + fluidLeakState.ovData = FLUID_LEAK_STATE_DRY; + fluidLeakState.ovInitData = FLUID_LEAK_STATE_DRY; + fluidLeakState.override = OVERRIDE_RESET; + fluidLeakStatePublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + + initPersistentAlarm( ALARM_ID_DG_FLUID_LEAK_DETECTED, 0, FLUID_LEAK_ALARM_TIMEOUT_MS ); } /*********************************************************************//** @@ -71,7 +77,6 @@ { BOOL noFluidLeakDetected = noFPGAFluidLeakDetected(); - if ( getCurrentOperationMode() != DG_MODE_INIT ) { // Get latest state reading @@ -85,13 +90,16 @@ } // Check state reading and act upon - if ( FLUID_LEAK_STATE_WET == getFluidLeakState() ) + if ( FLUID_LEAK_STATE_DRY == getFluidLeakState() ) { - activateAlarmNoData( ALARM_ID_DG_FLUID_LEAK_DETECTED ); + clearAlarmCondition( ALARM_ID_DG_FLUID_LEAK_DETECTED ); } - else // FLUID_LEAK_STATE_DRY == getFluidLeakState() + else { - clearAlarmCondition( ALARM_ID_DG_FLUID_LEAK_DETECTED ); + if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_DG_FLUID_LEAK_DETECTED, TRUE ) ) + { + activateAlarmNoData( ALARM_ID_DG_FLUID_LEAK_DETECTED ); + } } } @@ -105,7 +113,6 @@ * leak detector. * @details Inputs: fluidLeakState * @details Outputs: none - * @param none * @return the current fluid leak state. *************************************************************************/ FLUID_LEAK_STATES_T getFluidLeakState( void ) @@ -122,26 +129,6 @@ /*********************************************************************//** * @brief - * The getPublishFluidLeakStateInterval function gets the fluid leak state - * publication interval. - * @details Inputs: fluidLeakStatePublishInterval - * @details Outputs: none - * @return the current fluid leak state publication interval (in task intervals). - *************************************************************************/ -static U32 getPublishFluidLeakStateInterval( void ) -{ - U32 result = fluidLeakStatePublishInterval.data; - - if ( OVERRIDE_KEY == fluidLeakStatePublishInterval.override ) - { - result = fluidLeakStatePublishInterval.ovData; - } - - return result; -} - -/*********************************************************************//** - * @brief * The publishFluidLeakState function publishes fluid leak state at the set interval. * @details Inputs: fluidLeakState * @details Outputs: if broadcast is due, send fluid leak state @@ -150,11 +137,13 @@ static void publishFluidLeakState( void ) { // Publish fluid leak state on interval - if ( ++fluidLeakStatePublicationTimerCounter >= getPublishFluidLeakStateInterval() ) + if ( ++fluidLeakStatePublicationTimerCounter >= getU32OverrideValue( &fluidLeakStatePublishInterval ) ) { - FLUID_LEAK_STATES_T state = getFluidLeakState(); + FLUID_LEAK_DATA_T data; - broadcastFluidLeakState( state ); + data.fluidLeakState = (U32)getFluidLeakState(); + + broadcastData( MSG_ID_DG_FLUID_LEAK_STATE_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( FLUID_LEAK_DATA_T ) ); fluidLeakStatePublicationTimerCounter = 0; } } @@ -218,7 +207,6 @@ * of the fluid leak detector. * @details Inputs: none * @details Outputs: fluidLeakState - * @param none * @param state override fluid leak detector with this * @return TRUE if override successful, FALSE if not *************************************************************************/ @@ -245,7 +233,6 @@ * fluid leak detector. * @details Inputs: none * @details Outputs: fluidLeakState - * @param none * @return TRUE if reset successful, FALSE if not *************************************************************************/ BOOL testResetFluidLeakStateOverride( void )