Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r07f2ffedebb65a5a2b76ed9833c654c24221ec37 -r28b6e281605c1a944c982d0ec7dcdb6f28aac82b --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 07f2ffedebb65a5a2b76ed9833c654c24221ec37) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 28b6e281605c1a944c982d0ec7dcdb6f28aac82b) @@ -30,7 +30,7 @@ // ********** private data ********** static RO_STANDBY_MODE_STATE_T standbyState; ///< Currently active standby state. -static U32 pendingStartRORequest; ///< Flag indicating DD has requested RO start the generate permeate (Overridable). +static U32 pendingStartPreGenRequest; ///< Flag indicating DD has requested RO start the generate permeate. // ********** private function prototypes ********** @@ -46,7 +46,7 @@ void initStandbyMode( void ) { standbyState = RO_STANDBY_MODE_STATE_IDLE; - pendingStartRORequest = FALSE; + pendingStartPreGenRequest = FALSE; } /*********************************************************************//** @@ -103,10 +103,10 @@ { RO_STANDBY_MODE_STATE_T state = RO_STANDBY_MODE_STATE_IDLE; - if ( TRUE == pendingStartRORequest ) + if ( TRUE == pendingStartPreGenRequest ) { - pendingStartRORequest = FALSE; - requestNewOperationMode( RO_MODE_GENP ); + pendingStartPreGenRequest = FALSE; + requestNewOperationMode( RO_MODE_PGEN ); } return state; @@ -126,19 +126,19 @@ /*********************************************************************//** * @brief - * The requestROStart function handles an DD request to start (go to gen permeate mode). + * The requestPreGenStart function handles an DD request to start (go to gen permeate mode). * @details \b Inputs: standbyState * @details \b Outputs: pendingStartRORequest * @return TRUE if request accepted, FALSE if not. *************************************************************************/ -BOOL requestROStart( void ) +BOOL requestPreGenStart( void ) { BOOL result = FALSE; if ( ( RO_MODE_STAN == getCurrentOperationMode() ) && ( RO_STANDBY_MODE_STATE_IDLE == standbyState ) ) { result = TRUE; - pendingStartRORequest = TRUE; + pendingStartPreGenRequest = TRUE; } return result; Index: firmware/App/Modes/ModeWaterGen.c =================================================================== diff -u -rd19f70066e9d3503c5d2d4fd26a43c7dfa00f873 -r28b6e281605c1a944c982d0ec7dcdb6f28aac82b --- firmware/App/Modes/ModeWaterGen.c (.../ModeWaterGen.c) (revision d19f70066e9d3503c5d2d4fd26a43c7dfa00f873) +++ firmware/App/Modes/ModeWaterGen.c (.../ModeWaterGen.c) (revision 28b6e281605c1a944c982d0ec7dcdb6f28aac82b) @@ -27,7 +27,7 @@ #include "Valves.h" /** - * @addtogroup GenWaterMode + * @addtogroup FPGenWaterMode * @{ */ @@ -117,7 +117,7 @@ break; default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_RO_INVALID_GENP_STATE, genWaterState ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_RO_INVALID_GENW_STATE, genWaterState ) break; } @@ -164,7 +164,7 @@ break; default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_RO_INVALID_GENP_STATE, state ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_RO_INVALID_GENW_STATE, state ) break; } } Index: firmware/App/Modes/ModeWaterPreGen.c =================================================================== diff -u -rd19f70066e9d3503c5d2d4fd26a43c7dfa00f873 -r28b6e281605c1a944c982d0ec7dcdb6f28aac82b --- firmware/App/Modes/ModeWaterPreGen.c (.../ModeWaterPreGen.c) (revision d19f70066e9d3503c5d2d4fd26a43c7dfa00f873) +++ firmware/App/Modes/ModeWaterPreGen.c (.../ModeWaterPreGen.c) (revision 28b6e281605c1a944c982d0ec7dcdb6f28aac82b) @@ -1,16 +1,272 @@ /************************************************************************** * -* Copyright (c) 2024-2025 Diality Inc. - All Rights Reserved. +* Copyright (c) 2020-2025 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 ModeWaterPreGen.h +* @file ModeWaterPreGen.c * * @author (last) Michael Garthwaite -* @date (last) 03-Mar-2025 +* @date (last) 28-Feb-2025 * * @author (original) Michael Garthwaite -* @date (original) 03-Mar-2025 +* @date (original) 28-Feb-2025 * ***************************************************************************/ + +#include "ModeWaterPreGen.h" +#include "DDInterface.h" +#include "ModeStandby.h" +#include "MessageSupport.h" +#include "Messaging.h" +#include "OperationModes.h" +#include "TaskGeneral.h" +#include "Timers.h" + +/** + * @addtogroup FPPreGenWaterMode + * @{ + */ + +// ********** private definitions ********** + +#define PRE_GENW_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the pre gen water mode data published. + +// ********** private data ********** + +static RO_PRE_GENW_MODE_STATE_T preGenWState; ///< Currently active pre generate water state. +static U32 preGenWDataPublicationTimerCounter; ///< Used to schedule pre generate water data publication to CAN bus. +static OVERRIDE_U32_T preGenWDataPublishInterval; ///< Pre Generate water mode data publish interval. +static U32 pendingStartGenRequest; ///< Flag indicating DD has requested RO start the generate permeate. + +// ********** private function prototypes ********** + +static void publishPreGenWModeData( void ); +static RO_PRE_GENW_MODE_STATE_T handlePreGenWStartState( void ); +static RO_PRE_GENW_MODE_STATE_T handlePreGenWCompleteState( void ); +static void setModePreGenWTransition( RO_PRE_GENW_MODE_STATE_T state ); + +/*********************************************************************//** + * @brief + * The initPreGenWMode function initializes the pre generate water mode unit. + * @details \b Inputs: none + * @details \b Outputs: pre gen water mode unit initialized + * @return none + *************************************************************************/ +void initPreGenWMode( void ) +{ + preGenWState = RO_PRE_GENW_STATE_START; + preGenWDataPublishInterval.data = PRE_GENW_DATA_PUBLISH_INTERVAL; + preGenWDataPublishInterval.ovData = PRE_GENW_DATA_PUBLISH_INTERVAL; + preGenWDataPublishInterval.ovInitData = 0; + preGenWDataPublishInterval.override = OVERRIDE_RESET; + preGenWDataPublicationTimerCounter = 0; +} + +/*********************************************************************//** + * @brief + * The transitionToPreGenWMode function prepares for transition to pre gen + * water mode. + * @details \b Inputs: none + * @details \b Outputs: none + * @return initial state + *************************************************************************/ +U32 transitionToPreGenWMode( void ) +{ + initPreGenWMode(); + setCurrentSubState( preGenWState ); + + return preGenWState; +} + +/*********************************************************************//** + * @brief + * The execPreGenWMode function executes the pre gen water mode state machine. + * @details \b Inputs: none + * @details \b Outputs: Pre Gen water mode state machine executed + * @details \b Alarm: ALARM_ID_RO_SOFTWARE_FAULT when wrong pre gen water state invoked. + * @return current state. + *************************************************************************/ +U32 execPreGenWMode( void ) +{ + + // execute current gen water state + switch ( preGenWState ) + { + case RO_PRE_GENW_STATE_START: + preGenWState = handlePreGenWStartState(); + break; + + case RO_PRE_GENW_STATE_COMPLETE: + preGenWState = handlePreGenWCompleteState(); + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_RO_INVALID_PGEN_STATE, preGenWState ) + break; + + } + //Publish pre Gen water mode data + publishPreGenWModeData(); + + return preGenWState; +} + +/*********************************************************************//** + * @brief + * The setModePreGenWTransition function sets the actuators and variables + * for the state transition in pre generate water mode. + * @details Inputs: Valve states, Pump speed + * @details Outputs: Actuate valves, pumps as desired. + * @param state pre gen water state enum + * @return none + *************************************************************************/ +static void setModePreGenWTransition( RO_PRE_GENW_MODE_STATE_T state ) +{ + // Execute on running state + switch( state ) + { + case RO_PRE_GENW_STATE_START: + // Do nothing + break; + + case RO_PRE_GENW_STATE_COMPLETE: + // Do nothing + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_RO_INVALID_PGEN_STATE, state ) + break; + } +} +/*********************************************************************//** + * @brief + * The handlePreGenWStartState handles the initial state of pre gen water. + * @details \b Inputs: none + * @details \b Outputs: none + * @return the next state of pre gen water mode + *************************************************************************/ +static RO_PRE_GENW_MODE_STATE_T handlePreGenWStartState( void ) +{ + RO_GENW_MODE_STATE_T state = RO_PRE_GENW_STATE_COMPLETE; + setModePreGenWTransition( RO_PRE_GENW_STATE_COMPLETE ); + + return state; +} + +/*********************************************************************//** + * @brief + * The handlePreGenWCompleteState handles the complete state ofpre gen water. + * @details \b Inputs: none + * @details \b Outputs: none + * @return the next state of pre gen water mode + *************************************************************************/ +static RO_PRE_GENW_MODE_STATE_T handlePreGenWCompleteState( void ) +{ + RO_PRE_GENW_MODE_STATE_T state = RO_PRE_GENW_STATE_COMPLETE; + + if ( TRUE == pendingStartGenRequest ) + { + requestNewOperationMode( RO_MODE_GENW ); + } + + return state; +} + +/** + * *******************************************************************//** + * @brief + * The getCurrentPreGenWState function returns the current state of the + * pre gen water mode. + * @details \b Inputs: preGenWState + * @details \b Outputs: preGenWState + * @return the current state of gen water mode + *************************************************************************/ +RO_PRE_GENW_MODE_STATE_T getCurrentPreGenWState( void ) +{ + return preGenWState; +} + +/*********************************************************************//** + * @brief + * The getPreGenWDataPublishInterval function gets the pre generate water + * mode data publish interval. + * @details \b Inputs: genWaterDataPublishInterval + * @details \b Outputs: none + * @return the interval at generate water mode data being published. + *************************************************************************/ +static U32 getPreGenWDataPublishInterval( void ) +{ + U32 result = getU32OverrideValue( &preGenWDataPublishInterval ); + + return result; +} +/*********************************************************************//** + * @brief + * The publishPreGenWModeData function broadcasts the pre generate water + * mode data at defined interval. + * @details \b Inputs: genDialysateDataPublicationTimerCounter + * @details \b Outputs: DD generate water data broadcast message sent + * @details \b Message \Sent: MSG_ID_RO_GEN_WATER_MODE_DATA to publish the + * generate water mode data. + * @return none + *************************************************************************/ +static void publishPreGenWModeData( void ) +{ + if ( ++preGenWDataPublicationTimerCounter >= getPreGenWDataPublishInterval() ) + { + PRE_GENW_MODE_DATA_T data; + + data.preGenWExecState = (U32)getCurrentPreGenWState(); + + broadcastData( MSG_ID_RO_PRE_GEN_WATER_MODE_DATA, COMM_BUFFER_OUT_CAN_RO_BROADCAST, (U08*)&data, sizeof( PRE_GENW_MODE_DATA_T ) ); + + preGenWDataPublicationTimerCounter = 0; + } +} + +/*********************************************************************//** + * @brief + * The requestPreGenStart function handles an DD request to start (go to gen permeate mode). + * @details \b Inputs: standbyState + * @details \b Outputs: pendingStartRORequest + * @return TRUE if request accepted, FALSE if not. + *************************************************************************/ +BOOL requestGenWaterStart( void ) +{ + BOOL result = FALSE; + + if ( RO_PRE_GENW_STATE_COMPLETE == preGenWState ) + { + result = TRUE; + pendingStartGenRequest = TRUE; + } + + return result; +} + + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testPreGenWaterDataPublishIntervalOverride function overrides the + * DD generate water mode data publish interval. + * @details \b Inputs: preGenWDataPublishInterval + * @details \b Outputs: preGenWDataPublishInterval + * @param Override message from Dialin which includes the interval + * (in ms) to override the RO generate water data publish interval to. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testPreGenWaterDataPublishIntervalOverride( MESSAGE_T *message ) +{ + BOOL result = u32BroadcastIntervalOverride( message, &preGenWDataPublishInterval, TASK_GENERAL_INTERVAL ); + + return result; +} + +/**@}*/ Index: firmware/App/Modes/ModeWaterPreGen.h =================================================================== diff -u -rd19f70066e9d3503c5d2d4fd26a43c7dfa00f873 -r28b6e281605c1a944c982d0ec7dcdb6f28aac82b --- firmware/App/Modes/ModeWaterPreGen.h (.../ModeWaterPreGen.h) (revision d19f70066e9d3503c5d2d4fd26a43c7dfa00f873) +++ firmware/App/Modes/ModeWaterPreGen.h (.../ModeWaterPreGen.h) (revision 28b6e281605c1a944c982d0ec7dcdb6f28aac82b) @@ -14,3 +14,39 @@ * @date (original) 03-Mar-2025 * ***************************************************************************/ + +#ifndef __MODE_WATER_PRE_GEN_H__ +#define __MODE_WATER_PRE_GEN_H__ + +#include "ROCommon.h" +#include "RODefs.h" + +/** + * @defgroup FPPreGenWaterMode FPPreGenWaterMode + * @brief Pre Generate Water unit. Manages pre checks water generation functions via a state machine. + * + * @addtogroup FPPreGenWaterMode + * @{ + */ + +// ********** public definitions ********** + +/// Pre Generate water mode data structure +typedef struct +{ + U32 preGenWExecState; ///< Pre Generate Water execution state +} PRE_GENW_MODE_DATA_T; + +// ********** public function prototypes ********** + +void initPreGenWMode( void ); // Initialize this pre gen water mode unit +U32 transitionToPreGenWMode( void ); // Transition to pre gen water mode +U32 execPreGenWMode( void ); // Execute the pre gen water mode state machine (call from OperationModes) +BOOL requestGenWaterStart( void ); + +RO_PRE_GENW_MODE_STATE_T getCurrentPreGenWState( void ); // Get the current state of the pre gen water mode + +/**@}*/ + + +#endif Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -rd19f70066e9d3503c5d2d4fd26a43c7dfa00f873 -r28b6e281605c1a944c982d0ec7dcdb6f28aac82b --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision d19f70066e9d3503c5d2d4fd26a43c7dfa00f873) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 28b6e281605c1a944c982d0ec7dcdb6f28aac82b) @@ -15,11 +15,13 @@ * ***************************************************************************/ -#include + #include "Messaging.h" #include "ModeInitPOST.h" #include "ModeFault.h" #include "ModeStandby.h" +#include "ModeWaterGen.h" +#include "ModeWaterPreGen.h" #include "OperationModes.h" #include "TaskGeneral.h" @@ -48,12 +50,13 @@ /// This matrix determines legal transitions from one mode to another static const RO_OP_MODE_T MODE_TRANSITION_TABLE[ NUM_OF_RO_MODES - 1 ][ NUM_OF_RO_MODES - 1 ] = { -// From to-> FAULT SERVICE INIT STANBY GENP -/* FAUL */{ RO_MODE_FAUL, RO_MODE_SERV, RO_MODE_NLEG, RO_MODE_NLEG, RO_MODE_NLEG }, -/* SERV */{ RO_MODE_FAUL, RO_MODE_SERV, RO_MODE_NLEG, RO_MODE_NLEG, RO_MODE_NLEG }, -/* INIT */{ RO_MODE_FAUL, RO_MODE_NLEG, RO_MODE_INIT, RO_MODE_STAN, RO_MODE_NLEG }, -/* STAN */{ RO_MODE_FAUL, RO_MODE_SERV, RO_MODE_NLEG, RO_MODE_STAN, RO_MODE_GENP }, -/* GENP */{ RO_MODE_FAUL, RO_MODE_NLEG, RO_MODE_NLEG, RO_MODE_STAN, RO_MODE_GENP } }; +// From to-> FAULT SERVICE INIT STANBY PGEN GENW +/* FAUL */{ RO_MODE_FAUL, RO_MODE_SERV, RO_MODE_NLEG, RO_MODE_NLEG, RO_MODE_NLEG, RO_MODE_NLEG }, +/* SERV */{ RO_MODE_FAUL, RO_MODE_SERV, RO_MODE_NLEG, RO_MODE_NLEG, RO_MODE_NLEG, RO_MODE_NLEG }, +/* INIT */{ RO_MODE_FAUL, RO_MODE_NLEG, RO_MODE_INIT, RO_MODE_STAN, RO_MODE_NLEG, RO_MODE_NLEG }, +/* STAN */{ RO_MODE_FAUL, RO_MODE_SERV, RO_MODE_NLEG, RO_MODE_STAN, RO_MODE_NLEG, RO_MODE_GENW }, +/* PGEN */{ RO_MODE_FAUL, RO_MODE_NLEG, RO_MODE_NLEG, RO_MODE_STAN, RO_MODE_PGEN, RO_MODE_GENW }, +/* GENW */{ RO_MODE_FAUL, RO_MODE_NLEG, RO_MODE_NLEG, RO_MODE_STAN, RO_MODE_NLEG, RO_MODE_GENW } }; // ********** private function prototypes ********** @@ -93,6 +96,7 @@ // initServiceMode(); initInitAndPOSTMode(); initStandbyMode(); + initPreGenWMode(); initGenWaterMode(); } @@ -116,7 +120,7 @@ newMode = MODE_TRANSITION_TABLE[ currentMode ][ newMode ]; // Is requested new mode valid and legal at this time? - if ( newMode >= RO_MODE_NLEG ) + if ( ( newMode >= RO_MODE_NLEG ) && ( isTestingActivated() != TRUE ) ) { SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_ILLEGAL_MODE_TRANSITION_REQUESTED, newMode ) newMode = currentMode; @@ -140,7 +144,7 @@ break; case RO_MODE_SERV: -// currentSubMode = execServiceMode(); +// currentSubMode = execServiceMode(); break; case RO_MODE_INIT: @@ -151,10 +155,14 @@ currentSubMode = execStandbyMode(); break; - case RO_MODE_GENP: - currentSubMode = execGenPermeateMode(); + case RO_MODE_PGEN: + currentSubMode = execPreGenWMode(); break; + case RO_MODE_GENW: + currentSubMode = execGenWaterMode(); + break; + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_STATE, currentMode ) currentMode = RO_MODE_FAUL; @@ -305,10 +313,14 @@ currentSubMode = transitionToStandbyMode(); break; - case RO_MODE_GENP: - currentSubMode = transitionToGenPermeateMode(); + case RO_MODE_PGEN: + currentSubMode = transitionToPreGenWMode(); break; + case RO_MODE_GENW: + currentSubMode = transitionToGenWaterMode(); + break; + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_TO_TRANSITION_TO, newMode ) break; Index: firmware/App/Services/AlarmMgmtRO.c =================================================================== diff -u -rd19f70066e9d3503c5d2d4fd26a43c7dfa00f873 -r28b6e281605c1a944c982d0ec7dcdb6f28aac82b --- firmware/App/Services/AlarmMgmtRO.c (.../AlarmMgmtRO.c) (revision d19f70066e9d3503c5d2d4fd26a43c7dfa00f873) +++ firmware/App/Services/AlarmMgmtRO.c (.../AlarmMgmtRO.c) (revision 28b6e281605c1a944c982d0ec7dcdb6f28aac82b) @@ -14,6 +14,7 @@ * @date (original) 30-Jul-2024 * ***************************************************************************/ +#define __ALARM_MGMT_RO_C__ #include "AlarmMgmtRO.h" #include "Messaging.h" Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -r709198d46039f3bd6e9fd62b291e6856e5ebd553 -r28b6e281605c1a944c982d0ec7dcdb6f28aac82b --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 709198d46039f3bd6e9fd62b291e6856e5ebd553) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 28b6e281605c1a944c982d0ec7dcdb6f28aac82b) @@ -126,7 +126,9 @@ SW_FAULT_ID_INVALID_TEMPERATURE_SENSOR_SELECTED1 = 109, SW_FAULT_ID_INVALID_TEMPERATURE_SENSOR_SELECTED2 = 110, SW_FAULT_ID_HEATER_INVALID_EXEC_STATE = 111, - SW_FAULT_ID_RO_INVALID_GENP_STATE = 112, + SW_FAULT_ID_RO_INVALID_GENW_STATE = 112, + SW_FAULT_ID_RO_INVALID_PGEN_STATE = 113, + SW_FAULT_ID_RO_INVALID_RO_CMD = 114, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/DDInterface.c =================================================================== diff -u -rd19f70066e9d3503c5d2d4fd26a43c7dfa00f873 -r28b6e281605c1a944c982d0ec7dcdb6f28aac82b --- firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision d19f70066e9d3503c5d2d4fd26a43c7dfa00f873) +++ firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision 28b6e281605c1a944c982d0ec7dcdb6f28aac82b) @@ -15,12 +15,14 @@ * ***************************************************************************/ -#include + #include "ROPump.h" #include "DDInterface.h" #include "Messaging.h" #include "MessagePayloads.h" #include "ModeStandby.h" +#include "ModeWaterGen.h" +#include "ModeWaterPreGen.h" #include "OperationModes.h" #include "PersistentAlarm.h" #include "SystemCommRO.h" @@ -42,8 +44,9 @@ // ********** private function prototypes ********** -static void setDDOpMode( U32 opMode, U32 subMode ); static void setDDPermeateFlowRate( F32 flowRate ); +static BOOL handlePreGenCmd( BOOL start, F32 roRate ); +static BOOL handleGenWaterCmd( BOOL start, F32 roRate ); /*********************************************************************//** * @brief @@ -127,48 +130,116 @@ /*********************************************************************//** * @brief - * The handleGeneratePermeateRequestMsg function handles a RO permeate + * The handleGenerateWaterRequestMsg function handles a RO permeate * request from DD and updates permeate flow rate. * @details Inputs: none * @details Outputs: message handled * @param message a pointer to the message to handle * @return TRUE if message is sucessfully parsed, FALSE if not. *************************************************************************/ -BOOL handleGeneratePermeateRequestMsg( MESSAGE_T *message ) +BOOL handleGenerateWaterRequestMsg( MESSAGE_T *message ) { BOOL result = FALSE; if ( message->hdr.payloadLen == sizeof( RO_WATER_REQ_PAYLOAD_T ) ) { - RO_WATER_REQ_PAYLOAD_T startRORequest; - RO_OP_MODE_T roMode = getCurrentOperationMode(); + RO_WATER_REQ_PAYLOAD_T cmd; - memcpy( &startRORequest, message->payload, sizeof( RO_WATER_REQ_PAYLOAD_T ) ); + memcpy( &cmd, message->payload, sizeof( RO_WATER_REQ_PAYLOAD_T ) ); - if ( ( RO_MODE_STAN == roMode ) && ( TRUE == startRORequest.start ) ) + switch ( cmd.cmdID ) { - setDDPermeateFlowRate( startRORequest.roRate ); - setBoostPumpPWMDutyCycle( P12_PUMP,startRORequest.roRate ); - result = requestROStart(); + case RO_PRE_GEN: + result = handlePreGenCmd( cmd.start, cmd.roRate ); + break; + case RO_GEN_WATER: + result = handleGenWaterCmd( cmd.start, cmd.roRate ); + break; + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_RO_INVALID_RO_CMD, cmd.cmdID ) + break; } - else if ( RO_MODE_GENP == roMode ) + + + } + + return result; +} + +/*********************************************************************//** + * @brief + * The handlePreGenCmd function handles a RO pre generate water + * request from DD and updates permeate flow rate. + * @details Inputs: none + * @details Outputs: message handled + * @param start the TRUE FALSE bool to determine start or stop + * @param roRate the flow rate from the dd to set the ro pump + * @return TRUE if message is sucessfully parsed, FALSE if not. + *************************************************************************/ +static BOOL handlePreGenCmd( BOOL start, F32 roRate ) +{ + BOOL result = FALSE; + RO_OP_MODE_T roMode = getCurrentOperationMode(); + + if ( ( RO_MODE_STAN == roMode ) && ( TRUE == start ) ) + { + setDDPermeateFlowRate( roRate ); + setBoostPumpPWMDutyCycle( P12_PUMP, roRate ); + result = requestPreGenStart(); + } + else if ( RO_MODE_PGEN == roMode ) + { + if ( FALSE == start ) { - if ( FALSE == startRORequest.start ) - { - // stop Permeate Generation by transitioning to standby mode - signalROPumpStop( P12_PUMP ); - requestNewOperationMode( RO_MODE_STAN ); - } - else - { - // Set flow rate and delivery. - setDDPermeateFlowRate( startRORequest.roRate ); - } - result = TRUE; + // stop Permeate Generation by transitioning to standby mode + signalROPumpStop( P12_PUMP ); + requestNewOperationMode( RO_MODE_STAN ); } + else + { + // Set flow rate and delivery. + setDDPermeateFlowRate( roRate ); + } + result = TRUE; } +} - return result; +/*********************************************************************//** + * @brief + * The handleGenWaterCmd function handles a generate water + * request from DD and updates permeate flow rate. + * @details Inputs: none + * @details Outputs: message handled + * @param start the TRUE FALSE bool to determine start or stop + * @param roRate the flow rate from the dd to set the ro pump + * @return TRUE if message is sucessfully parsed, FALSE if not. + *************************************************************************/ +static BOOL handleGenWaterCmd( BOOL start, F32 roRate ) +{ + BOOL result = FALSE; + RO_OP_MODE_T roMode = getCurrentOperationMode(); + + if ( ( RO_MODE_PGEN == roMode ) && ( TRUE == start ) ) + { + setDDPermeateFlowRate( roRate ); + setBoostPumpPWMDutyCycle( P12_PUMP,roRate ); + result = requestGenWaterStart(); + } + else if ( RO_MODE_GENW == roMode ) + { + if ( FALSE == start ) + { + // stop Permeate Generation by transitioning to standby mode + signalROPumpStop( P12_PUMP ); + requestNewOperationMode( RO_MODE_STAN ); + } + else + { + // Set flow rate and delivery. + setDDPermeateFlowRate( roRate ); + } + result = TRUE; + } } Index: firmware/App/Services/DDInterface.h =================================================================== diff -u -rbe33dd1fa4f538d9247075c893e0d0c2ef3f6a28 -r28b6e281605c1a944c982d0ec7dcdb6f28aac82b --- firmware/App/Services/DDInterface.h (.../DDInterface.h) (revision be33dd1fa4f538d9247075c893e0d0c2ef3f6a28) +++ firmware/App/Services/DDInterface.h (.../DDInterface.h) (revision 28b6e281605c1a944c982d0ec7dcdb6f28aac82b) @@ -41,7 +41,7 @@ F32 getDDPermeateFlowRate( void ); DD_OP_MODE_T getDDOpMode( void ); -BOOL handleGeneratePermeateRequestMsg( MESSAGE_T *message ); +BOOL handleGenerateWaterRequestMsg( MESSAGE_T *message ); /**@}*/ Index: firmware/App/Services/Messaging.c =================================================================== diff -u -rd19f70066e9d3503c5d2d4fd26a43c7dfa00f873 -r28b6e281605c1a944c982d0ec7dcdb6f28aac82b --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision d19f70066e9d3503c5d2d4fd26a43c7dfa00f873) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 28b6e281605c1a944c982d0ec7dcdb6f28aac82b) @@ -121,7 +121,7 @@ &testConductivitySensorReadCounterOverride, &testConductivitySensorErrorCounterOverride, &testMeasuredTemperatureOverride, - &handleGeneratePermeateRequestMsg //30 + &handleGenerateWaterRequestMsg //30 }; #define NUM_OF_FUNCTION_HANDLERS (sizeof(MSG_FUNCTION_HANDLERS) / sizeof(MsgFuncPtr))