/************************************************************************** * * Copyright (c) 2024-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 FilterFlush.c * * @author (last) Michael Garthwaite * @date (last) 28-Feb-2025 * * @author (original) Michael Garthwaite * @date (original) 28-Feb-2025 * ***************************************************************************/ #include "FilterFlush.h" #include "MessageSupport.h" #include "Messaging.h" #include "OperationModes.h" #include "TaskGeneral.h" #include "Timers.h" /** * @addtogroup FPFilterFlush * @{ */ // ********** private definitions ********** #define FILTER_FLUSH_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the gen water mode data published. // ********** private data ********** static FP_FILTER_FLUSH_STATE_T filterFlushState; ///< Currently active generate water state. static U32 filterFlushDataPublicationTimerCounter; ///< Used to schedule generate water data publication to CAN bus. static OVERRIDE_U32_T filterFlushDataPublishInterval; ///< Generate water mode data publish interval. // ********** private function prototypes ********** static void publishFilterFlushData( void ); static FP_FILTER_FLUSH_STATE_T handleFilterFlushProgressState( void ); static FP_FILTER_FLUSH_STATE_T handleFilterFlushPausedState( void ); static void setModeGenWTransition( FP_FILTER_FLUSH_STATE_T state ); /*********************************************************************//** * @brief * The initFilterFlush function initializes the filter flush unit. * @details \b Inputs: none * @details \b Outputs: filter flush unit initialized * @return none *************************************************************************/ void initFilterFlush( void ) { filterFlushState = FILTER_FLUSH_PAUSED; filterFlushDataPublishInterval.data = FILTER_FLUSH_DATA_PUBLISH_INTERVAL; filterFlushDataPublishInterval.ovData = FILTER_FLUSH_DATA_PUBLISH_INTERVAL; filterFlushDataPublishInterval.ovInitData = 0; filterFlushDataPublishInterval.override = OVERRIDE_RESET; filterFlushDataPublicationTimerCounter = 0; } /*********************************************************************//** * @brief * The getCurrentFilterFlushState function returns the current state of * filter flush. * @details \b Inputs: filterFlushState * @details \b Outputs: filterFlushState * @return the current state of filter flush *************************************************************************/ FP_FILTER_FLUSH_STATE_T getCurrentFilterFlushState( void ) { return filterFlushState; } /*********************************************************************//** * @brief * The getFilterFlushPublishInterval function gets the filter flush * mode data publish interval. * @details \b Inputs: filterFlushDataPublishInterval * @details \b Outputs: none * @return the interval at filter flush mode data being published. *************************************************************************/ static U32 getFilterFlushPublishInterval( void ) { U32 result = getU32OverrideValue( &filterFlushDataPublishInterval ); return result; } /*********************************************************************//** * @brief * The publishGenWModeData function broadcasts the filter flush * mode data at defined interval. * @details \b Inputs: filterFlushDataPublicationTimerCounter * @details \b Outputs: fp filter flush data broadcast message sent * @details \b Message \Sent: MSG_ID_RO_GEN_WATER_MODE_DATA to publish the * filter flush mode data. * @return none *************************************************************************/ static void publishFilterFlushData( void ) { if ( ++filterFlushDataPublicationTimerCounter >= getFilterFlushPublishInterval() ) { FILTER_FLUSH_DATA_T data; data.filterFlushExecState = (U32)getCurrentGenWaterState(); broadcastData( MSG_ID_FP_GEN_WATER_MODE_DATA, COMM_BUFFER_OUT_CAN_RO_BROADCAST, (U08*)&data, sizeof( FILTER_FLUSH_DATA_T ) ); filterFlushDataPublicationTimerCounter = 0; } } /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ /*********************************************************************//** * @brief * The testFilterFlushDataPublishIntervalOverride function overrides the * FP filter flush mode data publish interval. * @details \b Inputs: filterFlushDataPublishInterval * @details \b Outputs: filterFlushDataPublishInterval * @param Override message from Dialin which includes the interval * (in ms) to override the FP filter flush data publish interval to. * @return TRUE if override successful, FALSE if not *************************************************************************/ BOOL testFilterFlushDataPublishIntervalOverride( MESSAGE_T *message ) { BOOL result = u32BroadcastIntervalOverride( message, &filterFlushDataPublishInterval, TASK_GENERAL_INTERVAL ); return result; } /**@}*/