Index: firmware/App/Modes/ModeGenIdle.c =================================================================== diff -u -r5c0c125cf0096613af3475388c970b5e16cc6b0e -r6499ea25921fcf67826fa0c35bb03caf411ba542 --- firmware/App/Modes/ModeGenIdle.c (.../ModeGenIdle.c) (revision 5c0c125cf0096613af3475388c970b5e16cc6b0e) +++ firmware/App/Modes/ModeGenIdle.c (.../ModeGenIdle.c) (revision 6499ea25921fcf67826fa0c35bb03caf411ba542) @@ -1,15 +1,15 @@ /************************************************************************** * -* Copyright (c) 2021-2022 Diality Inc. - All Rights Reserved. +* Copyright (c) 2021-2023 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 ModeGenIdle.c * * @author (last) Dara Navaei -* @date (last) 15-Aug-2022 +* @date (last) 02-Jan-2023 * * @author (original) Quang Nguyen * @date (original) 06-Aug-2021 @@ -54,16 +54,17 @@ // ********** private data ********** +static U32 dataPublishCounter; ///< Used to schedule gen idle data publication to CAN bus. static DG_GEN_IDLE_MODE_STATE_T genIdleState; ///< Currently active generation idle state. // NOTE: the bad fill state must be initialized here and not in the transition function since in case of a bad fill, the transition function is called // several times to drain and fill and handle a bad fill. static DG_GEN_IDLE_MODE_BAD_FILL_STATE_T badFillState = DG_HANDLE_BAD_FILL_STATE_START; ///< Initialize bad fill sub-state. static U32 hdLostCommStartTime_ms; ///< Lost communication with HD start time in ms. static U32 targetFillVolumeML; ///< Save the target fill volume before calling startFillCmd(). static BOOL handleBadFillFlag; ///< Internal signal flag to handle bad fill. -static OVERRIDE_U32_T badFillSubstatesPublishInterval = { BAD_FILL_SUBSTATES_PUB_INTERVAL, - BAD_FILL_SUBSTATES_PUB_INTERVAL, - 0, 0 }; ///< Interval (in ms) at which to publish bad fill sub-states to CAN bus. +static OVERRIDE_U32_T genIdleDataPublicationInterval = { BAD_FILL_SUBSTATES_PUB_INTERVAL, + BAD_FILL_SUBSTATES_PUB_INTERVAL, + 0, 0 }; ///< Interval (in ms) at which to publish bad fill sub-states to CAN bus. // ********** private function prototypes ********** @@ -115,8 +116,8 @@ setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); signalDrainPumpHardStop(); - requestConcentratePumpOff( CONCENTRATEPUMPS_CP1_ACID ); - requestConcentratePumpOff( CONCENTRATEPUMPS_CP2_BICARB ); + requestConcentratePumpOff( CONCENTRATEPUMPS_CP1_ACID, NO_PARK_CONC_PUMPS ); + requestConcentratePumpOff( CONCENTRATEPUMPS_CP2_BICARB, NO_PARK_CONC_PUMPS ); // UV reactors on turnOnUVReactor( INLET_UV_REACTOR ); @@ -415,30 +416,35 @@ return state; } - /*********************************************************************//** * @brief * The publishGenIdleSubstates function publishes gen idle * sub-states at the set interval. - * @details Inputs: none - * @details Outputs: none - * @param none + * @details Inputs: handleBadFillFlag, badFillState, targetFillVolumeML, + * dataPublishCounter + * @details Outputs: dataPublishCounter * @return none *************************************************************************/ -static void publishGenIdleSubstates() +static void publishGenIdleSubstates( void ) { - DG_GEN_IDLE_DATA_T data; + // publish Gen Idle pump data on interval + if ( ++dataPublishCounter >= getU32OverrideValue( &genIdleDataPublicationInterval ) ) + { + DG_GEN_IDLE_DATA_T data; - data.badFillSignal = (U32)handleBadFillFlag; - data.badFillState = (U32)badFillState; - data.genIdleState = (U32)getCurrentGenIdleState(); - data.targetFillVolumemL = targetFillVolumeML; + // Populate the data structure for publication + data.badFillSignal = (U32)handleBadFillFlag; + data.badFillState = (U32)badFillState; + data.genIdleState = (U32)getCurrentGenIdleState(); + data.targetFillVolumemL = targetFillVolumeML; - broadcastData( MSG_ID_DG_GEN_IDLE_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( DG_GEN_IDLE_DATA_T ) ); + broadcastData( MSG_ID_DG_GEN_IDLE_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( DG_GEN_IDLE_DATA_T ) ); + + dataPublishCounter = 0; + } } - /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ @@ -453,15 +459,15 @@ * @param: value override bad fill sub-states publish interval with (in ms) * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testSetBadFillSubstatesPublishIntervalOverride( U32 value ) +BOOL testSetGenIdleSubstatesPublishIntervalOverride( U32 value ) { BOOL result = FALSE; if ( TRUE == isTestingActivated() ) { U32 intvl = value / TASK_GENERAL_INTERVAL; - badFillSubstatesPublishInterval.ovData = intvl; - badFillSubstatesPublishInterval.override = OVERRIDE_KEY; + genIdleDataPublicationInterval.ovData = intvl; + genIdleDataPublicationInterval.override = OVERRIDE_KEY; result = TRUE; } @@ -476,14 +482,14 @@ * @details Outputs: badFillSubstatesPublishInterval * @return TRUE if override reset successful, FALSE if not *************************************************************************/ -BOOL testResetBadFillSubstatesPublishIntervalOverride( void ) +BOOL testResetGenIdleSubstatesPublishIntervalOverride( void ) { BOOL result = FALSE; if ( TRUE == isTestingActivated() ) { - badFillSubstatesPublishInterval.override = OVERRIDE_RESET; - badFillSubstatesPublishInterval.ovData = badFillSubstatesPublishInterval.ovInitData; + genIdleDataPublicationInterval.override = OVERRIDE_RESET; + genIdleDataPublicationInterval.ovData = genIdleDataPublicationInterval.ovInitData; result = TRUE; }