Index: firmware/App/Modes/FPModes/FPModeFault.c =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Modes/FPModes/FPModeFault.c (.../FPModeFault.c) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/FPModes/FPModeFault.c (.../FPModeFault.c) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -307,4 +307,66 @@ } } + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testValidateFaultChangeReq function validate whether + * requested sub mode change is legal or not. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode. + * @return TRUE if request is legal, FALSE if not. + *************************************************************************/ +BOOL testValidateFaultChangeReq( U32 newSubMode ) +{ + BOOL result = FALSE; + + if ( newSubMode < NUM_OF_FP_FAULT_STATES ) + { + switch ( newSubMode ) + { + case FP_FAULT_STATE_START: + case FP_FAULT_DEENERGIZED_STATE: + case FP_FAULT_ENERGIZED_STATE: + default: + result = TRUE; + break; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSignalNewFaultSubMode function requests transition + * to a new fault sub mode. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode. + * @return none + *************************************************************************/ +void testSignalNewFaultSubMode( U32 newSubMode ) +{ + if ( newSubMode < NUM_OF_FP_FAULT_STATES ) + { + faultState = (FP_FAULT_STATE_T)newSubMode; + // handle the prerequisite if any + switch ( newSubMode ) + { + // Any of these state require no special handling + case FP_FAULT_STATE_START: + case FP_FAULT_DEENERGIZED_STATE: + case FP_FAULT_ENERGIZED_STATE: + default: + break; + } + } +} + /**@}*/ Index: firmware/App/Modes/FPModes/FPModeFault.h =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Modes/FPModes/FPModeFault.h (.../FPModeFault.h) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/FPModes/FPModeFault.h (.../FPModeFault.h) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -36,9 +36,12 @@ U32 transitionToFPFaultMode( void ); // Prepares for transition to fault mode U32 execFPFaultMode( void ); // Execute the fault mode state machine (call from OperationModes) -FP_FAULT_STATE_T getCurrentFPFaultState( void ); // get the current state of the fault mode. -void deEnergizeFPActuators( BOOL isDrainEnabled ); +FP_FAULT_STATE_T getCurrentFPFaultState( void ); // Get the current state of the fault mode. +void deEnergizeFPActuators( BOOL isDrainEnabled ); // Rest actuators to de-energized state +BOOL testValidateFaultChangeReq( U32 newSubMode ); // Validate the requested fault sub mode transition is possible or not +void testSignalNewFaultSubMode( U32 newSubMode ); // Signal transition to a new fault sub mode + /**@}*/ #endif Index: firmware/App/Modes/FPModes/FPModeStandby.c =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Modes/FPModes/FPModeStandby.c (.../FPModeStandby.c) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/FPModes/FPModeStandby.c (.../FPModeStandby.c) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -146,4 +146,56 @@ *************************************************************************/ +/*********************************************************************//** + * @brief + * The testValidateStandbyChangeReq function validate whether + * requested sub mode change is legal or not. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode. + * @return TRUE if request is legal, FALSE if not. + *************************************************************************/ +BOOL testValidateStandbyChangeReq( U32 newSubMode ) +{ + BOOL result = FALSE; + + if ( newSubMode < NUM_OF_FP_STANDBY_MODE_STATES ) + { + switch ( newSubMode ) + { + case FP_STANDBY_MODE_STATE_IDLE: + default: + result = TRUE; + break; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSignalNewStandbySubMode function requests transition + * to a new standby sub mode. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode. + * @return none + *************************************************************************/ +void testSignalNewStandbySubMode( U32 newSubMode ) +{ + if ( newSubMode < NUM_OF_FP_STANDBY_MODE_STATES ) + { + standbyState = (FP_STANDBY_MODE_STATE_T)newSubMode; + // handle the prerequisite if any + switch ( newSubMode ) + { + // Any of these state require no special handling + case FP_STANDBY_MODE_STATE_IDLE: + default: + break; + } + } +} + /**@}*/ Index: firmware/App/Modes/FPModes/FPModeStandby.h =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Modes/FPModes/FPModeStandby.h (.../FPModeStandby.h) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/FPModes/FPModeStandby.h (.../FPModeStandby.h) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -41,7 +41,8 @@ FP_STANDBY_MODE_STATE_T getCurrentFPStandbyState( void ); // get the current state of the standby mode. -BOOL testFPstartGenPermeateOverride( MESSAGE_T *message ); // Overide start gen permeate mode +BOOL testValidateStandbyChangeReq( U32 newSubMode ); // Validate the requested standby sub mode transition is possible or not +void testSignalNewStandbySubMode( U32 newSubMode ); // Signal transition to new standby sub mode /**@}*/ Index: firmware/App/Modes/FPModes/FPOperationModes.c =================================================================== diff -u -rd210786d6c7d75bb0b4d9e18efc40a01d85123fe -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Modes/FPModes/FPOperationModes.c (.../FPOperationModes.c) (revision d210786d6c7d75bb0b4d9e18efc40a01d85123fe) +++ firmware/App/Modes/FPModes/FPOperationModes.c (.../FPOperationModes.c) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -49,6 +49,8 @@ static U32 current4thLevelState; ///< current 4th level state. static BOOL isDeviceDefeatured; ///< bool to determine defeatured status static BOOL isBoostInstalled; ///< bool to determine boost pump status +static U32 testRequestedSubMode; ///< Requested operation sub mode from dialin. +static BOOL testChangeSubMode; ///< Flag to determine change operation sub mode request status. /// Interval (in task intervals) at which to publish operation mode data to CAN bus. static OVERRIDE_U32_T opModePublishInterval = { BROADCAST_TD_OP_MODE_INTERVAL, BROADCAST_TD_OP_MODE_INTERVAL, BROADCAST_TD_OP_MODE_INTERVAL, 0 }; @@ -70,6 +72,8 @@ static FP_OP_MODE_T arbitrateModeRequest( void ); static void transitionToNewOperationMode( FP_OP_MODE_T newMode ); static void broadcastOperationMode( void ); +static void testRequestNewFPOperationSubMode( void ); +static BOOL testValidateSubModeChangeRequest( FP_OP_MODE_T reqMode, U32 reqSubMode ); /*********************************************************************//** * @brief @@ -97,6 +101,8 @@ broadcastModeIntervalCtr = DATA_PUBLISH_COUNTER_START_COUNT; isDeviceDefeatured = FALSE; isBoostInstalled = FALSE; + testRequestedSubMode = 0; + testChangeSubMode = FALSE; transitionToNewOperationMode( FP_MODE_INIT ); @@ -126,10 +132,15 @@ // Any new mode requests? newMode = arbitrateModeRequest(); // Will return current mode if no pending requests - newMode = MODE_TRANSITION_TABLE[ currentMode ][ newMode ]; + if ( isTestingActivated() != TRUE ) + { + // if the test configuration is not enabled check for the legality of the transition request + newMode = MODE_TRANSITION_TABLE[ currentMode ][ newMode ]; + } + // Is requested new mode valid and legal at this time? - if ( ( newMode >= FP_MODE_NLEG ) && ( isTestingActivated() != TRUE ) ) + if ( newMode >= FP_MODE_NLEG ) { SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, FP_FAULT_ID_OP_MODES_ILLEGAL_MODE_TRANSITION_REQUESTED, newMode ) newMode = currentMode; @@ -144,6 +155,12 @@ currentMode = newMode; // sendOperationStatusEvent(); } + // Is sub mode change request active? + if ( TRUE == testChangeSubMode ) + { + testChangeSubMode = FALSE; + testRequestNewFPOperationSubMode(); + } // Mode specific processing to be done continuously switch ( currentMode ) @@ -597,4 +614,151 @@ return result; } +/*********************************************************************//** + * @brief + * The testSetFPOperationSubMode function will transition to a given + * sub mode if the transition is legal. + * @details \b Inputs: none + * @details \b Outputs: request new sub mode function called for current Op mode + * @param message message from Dialin which includes the sub mode to + * transition to. + * @return TRUE if request successful, FALSE if not + *************************************************************************/ +BOOL testSetFPOperationSubMode( MESSAGE_T *message ) +{ + OP_MODE_PAYLOAD_T payload; + BOOL result = FALSE; + + // Verify message payload length is valid + if ( sizeof( OP_MODE_PAYLOAD_T ) == message->hdr.payloadLen ) + { + FP_OP_MODE_T reqMode; + U32 reqSubMode; + + memcpy( (U08*)(&payload), message->payload, sizeof( OP_MODE_PAYLOAD_T ) ); + + reqMode = (FP_OP_MODE_T)payload.opMode; + reqSubMode = payload.subMode; + + if ( reqMode < NUM_OF_FP_MODES ) + { + // verify if the requested submode transition is possible + result = testValidateSubModeChangeRequest( reqMode, reqSubMode ); + + // send the sub mode change request only if the requested transition is valid + if ( TRUE == result ) + { + // request new operation mode and sub mode if the requested operation mode is not current mode + if ( currentMode != reqMode ) + { + requestNewFPOperationMode( reqMode ); + testRequestedSubMode = reqSubMode; + testChangeSubMode = TRUE; + } + // request submode change only as the requested operation mode is current mode and requested sub mode is not current sub mode + else if ( currentSubMode != reqSubMode ) + { + testRequestedSubMode = reqSubMode; + testChangeSubMode = TRUE; + } + } + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testValidateSubModeChangeRequest function requests transition to a new + * operation sub mode. + * @details \b Inputs: none + * @details \b Outputs: none + * @param reqMode FP operation mode enumeration + * @param reqSubMode operation sub mode requested + * @return TRUE if request is legal, FALSE if not. + *************************************************************************/ +static BOOL testValidateSubModeChangeRequest( FP_OP_MODE_T reqMode, U32 reqSubMode ) +{ + BOOL result = FALSE; + + switch ( reqMode ) + { + case FP_MODE_PGEN: + result = testValidatePreGenPChangeReq( reqSubMode ); + break; + + case FP_MODE_GENP: + result = testValidateGenPermeateChangeReq( reqSubMode ); + break; + + case FP_MODE_DPGP: + result = testValidatePreGenPDefeaturedChangeReq( reqSubMode ); + break; + + case FP_MODE_DEGP: + result = testValidateGenPDefeaturedChangeReq( reqSubMode ); + break; + + case FP_MODE_FAUL: + result = testValidateFaultChangeReq( reqSubMode ); + break; + + case FP_MODE_STAN: + result = testValidateStandbyChangeReq( reqSubMode ); + break; + + // No need to validate the request for the following modes as it is not supported + case FP_MODE_SERV: + case FP_MODE_INIT: + default: + break; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testRequestNewFPOperationSubMode function requests transition to a new + * operation sub mode. + * @details \b Inputs: currentMode, testRequestedSubMode + * @details \b Outputs: none + * @return none + *************************************************************************/ +static void testRequestNewFPOperationSubMode( void ) +{ + switch ( currentMode ) + { + case FP_MODE_PGEN: + testSignalNewPreGenPSubMode( testRequestedSubMode ); + break; + + case FP_MODE_GENP: + testSignalNewGenPermeateSubMode( testRequestedSubMode ); + break; + + case FP_MODE_DPGP: + testSignalNewPreGenPDefeaturedSubMode( testRequestedSubMode ); + break; + + case FP_MODE_DEGP: + testSignalNewGenPDefeaturedSubMode( testRequestedSubMode ); + break; + + case FP_MODE_FAUL: + testSignalNewFaultSubMode( testRequestedSubMode ); + break; + + case FP_MODE_STAN: + testSignalNewStandbySubMode( testRequestedSubMode ); + break; + + case FP_MODE_SERV: + case FP_MODE_INIT: + default: + break; + } +} + /**@}*/ Index: firmware/App/Modes/FPModes/FPOperationModes.h =================================================================== diff -u -rd18ed8a1064006f220e75096c723077dda62b500 -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Modes/FPModes/FPOperationModes.h (.../FPOperationModes.h) (revision d18ed8a1064006f220e75096c723077dda62b500) +++ firmware/App/Modes/FPModes/FPOperationModes.h (.../FPOperationModes.h) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -52,7 +52,7 @@ // ********** public function prototypes ********** void initFPOperationModes( void ); // Initialize this unit -void execFPOperationModes( void ); +void execFPOperationModes( void ); // Execute the FP operation mode state machine (scheduled periodic call) void requestNewFPOperationMode( FP_OP_MODE_T newMode ); // Request a transition to a new operation mode FP_OP_MODE_T getCurrentFPOperationMode( void ); // Get the current operation mode @@ -69,6 +69,7 @@ BOOL testSetFPOpModePublishIntervalOverride( MESSAGE_T *message ); // Set operation mode publish interval override BOOL testSetGeneratePermeateSignal( MESSAGE_T *message ); // Set start stop generate permeate. BOOL testGetFPDefeaturedStatus( MESSAGE_T *message ); // Send a response message with FP defeatured status payload +BOOL testSetFPOperationSubMode( MESSAGE_T *message ); // Set operation sub mode override /**@}*/ Index: firmware/App/Modes/FPModes/ModeGenPermeate.c =================================================================== diff -u -r973f790125e70115662d979f5f5631bb9df081f0 -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Modes/FPModes/ModeGenPermeate.c (.../ModeGenPermeate.c) (revision 973f790125e70115662d979f5f5631bb9df081f0) +++ firmware/App/Modes/FPModes/ModeGenPermeate.c (.../ModeGenPermeate.c) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -512,4 +512,59 @@ return result; } +/*********************************************************************//** + * @brief + * The testValidateGenPermeateChangeReq function validate whether requested + * sub mode change is legal or not. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode. + * @return TRUE if request is legal, FALSE if not. + *************************************************************************/ +BOOL testValidateGenPermeateChangeReq( U32 newSubMode ) +{ + BOOL result = FALSE; + + if ( newSubMode < NUM_OF_FP_GENP_MODE_STATES ) + { + switch ( newSubMode ) + { + case FP_GENP_TANK_FILL_STATE: + case FP_GENP_TANK_FULL_STATE: + default: + result = TRUE; + break; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSignalNewGenPermeateSubMode function requests transition to + * a new Gen Permeate sub mode. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode. + * @return none + *************************************************************************/ +void testSignalNewGenPermeateSubMode( U32 newSubMode ) +{ + if ( newSubMode < NUM_OF_FP_GENP_MODE_STATES ) + { + genPermeateState = (FP_GENP_MODE_STATE_T)newSubMode; + // handle the prerequisite if any + switch ( newSubMode ) + { + // Any of these state require no special handling + case FP_GENP_TANK_FILL_STATE: + case FP_GENP_TANK_FULL_STATE: + default: + break; + } + setModeGenPTransition( genPermeateState ); + } +} + /**@}*/ Index: firmware/App/Modes/FPModes/ModeGenPermeate.h =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Modes/FPModes/ModeGenPermeate.h (.../ModeGenPermeate.h) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/FPModes/ModeGenPermeate.h (.../ModeGenPermeate.h) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -46,10 +46,11 @@ U32 execGenPermeateMode( void ); // Execute the gen permeate mode state machine (call from OperationModes) BOOL requestGenWaterStart( void ); // Request to start gen water and transition modes BOOL requestGenWaterStop( void ); // Request to stop gen water and transition. - FP_GENP_MODE_STATE_T getCurrentGenPermeateState( void ); // Get the current state of the gen water mode BOOL testGenPermeateDataPublishIntervalOverride( MESSAGE_T *message ); // override broadcast interval for gen permeate +BOOL testValidateGenPermeateChangeReq( U32 newSubMode ); // Validate the requested gen permeate sub mode transition is possible or not +void testSignalNewGenPermeateSubMode( U32 newSubMode ); // Signal transition to a new operation sub mode /**@}*/ Index: firmware/App/Modes/FPModes/ModeGenPermeateDefeatured.c =================================================================== diff -u -r47a7b0fce13cf38919932a8662c378f4f6a8b9f3 -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Modes/FPModes/ModeGenPermeateDefeatured.c (.../ModeGenPermeateDefeatured.c) (revision 47a7b0fce13cf38919932a8662c378f4f6a8b9f3) +++ firmware/App/Modes/FPModes/ModeGenPermeateDefeatured.c (.../ModeGenPermeateDefeatured.c) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -333,4 +333,62 @@ return result; } +/*********************************************************************//** + * @brief + * The testValidateGenPDefeaturedChangeReq function validate whether + * requested sub mode change is legal or not. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode. + * @return TRUE if request is legal, FALSE if not. + *************************************************************************/ +BOOL testValidateGenPDefeaturedChangeReq( U32 newSubMode ) +{ + BOOL result = FALSE; + + if ( newSubMode < NUM_OF_FP_GENP_DEF_MODE_STATES ) + { + switch ( newSubMode ) + { + case FP_GENP_DEF_SUPPLY_WATER: + result = TRUE; + break; + + // TODO update once pause state is implemented + case FP_GENP_DEF_PAUSED: + default: + break; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSignalNewGenPDefeaturedSubMode function requests transition + * to a new defeatured Gen Permeate sub mode. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode. + * @return none + *************************************************************************/ +void testSignalNewGenPDefeaturedSubMode( U32 newSubMode ) +{ + if ( newSubMode < NUM_OF_FP_GENP_DEF_MODE_STATES ) + { + genPermeateDefState = (FP_GENP_DEF_MODE_STATE_T)newSubMode; + // handle the prerequisite if any + switch ( newSubMode ) + { + // Any of these state require no special handling + case FP_GENP_DEF_SUPPLY_WATER: + case FP_GENP_DEF_PAUSED: + default: + break; + } + setModeGenPDefTransition( genPermeateDefState ); + } +} + /**@}*/ Index: firmware/App/Modes/FPModes/ModeGenPermeateDefeatured.h =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Modes/FPModes/ModeGenPermeateDefeatured.h (.../ModeGenPermeateDefeatured.h) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/FPModes/ModeGenPermeateDefeatured.h (.../ModeGenPermeateDefeatured.h) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -50,6 +50,8 @@ FP_GENP_DEF_MODE_STATE_T getCurrentGenPermeateDefState( void ); // Get the current state of the gen water mode BOOL testGenPermeateDefDataPublishIntervalOverride( MESSAGE_T *message ); // override broadcast interval for defeatued gen permeate +BOOL testValidateGenPDefeaturedChangeReq( U32 newSubMode ); // Validate the requested defeatured gen permeate sub mode transition is possible or not +void testSignalNewGenPDefeaturedSubMode( U32 newSubMode ); // Signal transition to a new defeatured gen permeate sub mode /**@}*/ Index: firmware/App/Modes/FPModes/ModePreGenPermeate.c =================================================================== diff -u -rb569bc796c56acd5d94d468386f5f42c350cad65 -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Modes/FPModes/ModePreGenPermeate.c (.../ModePreGenPermeate.c) (revision b569bc796c56acd5d94d468386f5f42c350cad65) +++ firmware/App/Modes/FPModes/ModePreGenPermeate.c (.../ModePreGenPermeate.c) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -18,6 +18,7 @@ #include "BoostPump.h" #include "FPModeStandby.h" #include "FPOperationModes.h" +#include "Level.h" #include "MessageSupport.h" #include "Messaging.h" #include "ModeGenPermeate.h" @@ -550,4 +551,89 @@ return result; } +/*********************************************************************//** + * @brief + * The testValidatePreGenPChangeReq function validate whether requested + * sub mode change is legal or not. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode. + * @return TRUE if request is legal, FALSE if not. + *************************************************************************/ +BOOL testValidatePreGenPChangeReq( U32 newSubMode ) +{ + BOOL result = FALSE; + LEVEL_STATE_T level = getLevelStatus( P25_LEVL ); + + if ( newSubMode < NUM_OF_FP_PRE_GENW_MODE_STATES ) + { + switch ( newSubMode ) + { + case FP_PRE_GENP_CONCENTRATE_FLUSH: + result = (( LEVEL_STATE_HIGH == level ) ? TRUE : FALSE); + break; + + case FP_PRE_GENP_INLET_PRESSURE_CHECK: + case FP_PRE_GENP_FILTER_FLUSH: + case FP_PRE_GENP_PERMEATE_FLUSH: + case FP_PRE_GENP_VERIFY_WATER: + result = TRUE; + break; + + // TODO change once pause state is implemented + case FP_PRE_GENP_PAUSED: + default: + break; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSignalNewPreGenPSubMode function requests transition to a new + * PreGen Permeate sub mode. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode. + * @return none + *************************************************************************/ +void testSignalNewPreGenPSubMode( U32 newSubMode ) +{ + if ( newSubMode < NUM_OF_FP_PRE_GENW_MODE_STATES ) + { + preGenPState = (FP_PRE_GENP_MODE_STATE_T)newSubMode; + // handle the prerequisite if any + switch ( newSubMode ) + { + // Require no special handling for now (update the comment if required in future) + case FP_PRE_GENP_INLET_PRESSURE_CHECK: + resetInletPressureCheckSignals(); + break; + + case FP_PRE_GENP_FILTER_FLUSH: + resetFilterFlushSignals(); + signalStartFilterFlush(); + break; + + case FP_PRE_GENP_PERMEATE_FLUSH: + resetPermeateFlushSignals(); + signalStartPermeateFlush(); + break; + + case FP_PRE_GENP_CONCENTRATE_FLUSH: + resetConcentrateFlushSignals(); + signalStartConcentrateFlush(); + break; + + case FP_PRE_GENP_VERIFY_WATER: + case FP_PRE_GENP_PAUSED: + default: + break; + } + setModePreGenPTransition( preGenPState ); + } +} + /**@}*/ Index: firmware/App/Modes/FPModes/ModePreGenPermeate.h =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Modes/FPModes/ModePreGenPermeate.h (.../ModePreGenPermeate.h) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/FPModes/ModePreGenPermeate.h (.../ModePreGenPermeate.h) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -40,15 +40,17 @@ // ********** public function prototypes ********** -void initPreGenPMode( void ); // Initialize this pre gen Permeate mode unit -U32 transitionToPreGenPMode( void ); // Transition to pre gen Permeate mode -U32 execPreGenPMode( void ); // Execute the pre gen Permeate mode state machine (call from OperationModes) -BOOL requestPreGenStart( void ); -BOOL requestPreGenStop( void ); -BOOL getPreGenRequest( void ); -FP_PRE_GENP_MODE_STATE_T getCurrentPreGenPState( void ); // Get the current state of the pre gen Permeate mode +void initPreGenPMode( void ); // Initialize this pre gen Permeate mode unit +U32 transitionToPreGenPMode( void ); // Transition to pre gen Permeate mode +U32 execPreGenPMode( void ); // Execute the pre gen Permeate mode state machine (call from OperationModes) +BOOL requestPreGenStart( void ); // Start pre gen permeate request +BOOL requestPreGenStop( void ); // Stop pre gen permeate request +BOOL getPreGenRequest( void ); // Get the pre gen permeate request status +FP_PRE_GENP_MODE_STATE_T getCurrentPreGenPState( void ); // Get the current state of the pre gen Permeate mode -BOOL testPreGenDataPublishIntervalOverride( MESSAGE_T *message ); +BOOL testPreGenDataPublishIntervalOverride( MESSAGE_T *message ); // Override broadcast interval for pre gen permeate +BOOL testValidatePreGenPChangeReq( U32 newSubMode ); // Validate the requested pre gen permeate sub mode transition is possible or not +void testSignalNewPreGenPSubMode( U32 newSubMode ); // Signal transition to a new pre gen permeate sub mode /**@}*/ Index: firmware/App/Modes/FPModes/ModePreGenPermeateDefeatured.c =================================================================== diff -u -r70a0840cbf7c2455cb6b814cba1241c253f0e9e3 -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Modes/FPModes/ModePreGenPermeateDefeatured.c (.../ModePreGenPermeateDefeatured.c) (revision 70a0840cbf7c2455cb6b814cba1241c253f0e9e3) +++ firmware/App/Modes/FPModes/ModePreGenPermeateDefeatured.c (.../ModePreGenPermeateDefeatured.c) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -377,4 +377,71 @@ return result; } +/*********************************************************************//** + * @brief + * The testValidatePreGenPDefeaturedChangeReq function validate whether + * requested sub mode change is legal or not. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode. + * @return TRUE if request is legal, FALSE if not. + *************************************************************************/ +BOOL testValidatePreGenPDefeaturedChangeReq( U32 newSubMode ) +{ + BOOL result = FALSE; + + if ( newSubMode < NUM_OF_FP_PRE_GENP_DEF_MODE_STATES ) + { + switch ( newSubMode ) + { + case FP_PRE_GENP_DEF_INLET_PRESSURE_CHECK: + case FP_PRE_GENP_DEF_FLUSH: + result = TRUE; + break; + + // TODO change once pause state is implemented + case FP_PRE_GENP_DEF_PAUSED: + default: + break; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSignalNewPreGenPDefeaturedSubMode function requests transition + * to a new defeatured PreGen Permeate sub mode. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode. + * @return none + *************************************************************************/ +void testSignalNewPreGenPDefeaturedSubMode( U32 newSubMode ) +{ + if ( newSubMode < NUM_OF_FP_PRE_GENP_DEF_MODE_STATES ) + { + preGenPermeateDefState = (FP_PRE_GENP_DEF_MODE_STATE_T)newSubMode; + // handle the prerequisite if any + switch ( newSubMode ) + { + // Any of these state require no special handling + case FP_PRE_GENP_DEF_INLET_PRESSURE_CHECK: + resetInletPressureCheckSignals(); + break; + + case FP_PRE_GENP_DEF_FLUSH: + resetFilterFlushDefSignals(); + signalStartDefFilterFlush(); + break; + + case FP_PRE_GENP_DEF_PAUSED: + default: + break; + } + setModePreGenPDefTransition( preGenPermeateDefState ); + } +} + /**@}*/ Index: firmware/App/Modes/FPModes/ModePreGenPermeateDefeatured.h =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Modes/FPModes/ModePreGenPermeateDefeatured.h (.../ModePreGenPermeateDefeatured.h) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/FPModes/ModePreGenPermeateDefeatured.h (.../ModePreGenPermeateDefeatured.h) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -49,7 +49,9 @@ FP_PRE_GENP_DEF_MODE_STATE_T getCurrentPreGenPermeateDefState( void ); // Get the current state of the Pre gen water mode -BOOL testPreGenPermeateDefDataPublishIntervalOverride( MESSAGE_T *message ); // override broadcast interval for Pre gen permeate +BOOL testPreGenPermeateDefDataPublishIntervalOverride( MESSAGE_T *message ); // Override broadcast interval for Pre gen permeate +BOOL testValidatePreGenPDefeaturedChangeReq( U32 newSubMode ); // Validate the requested defeatured pre gen permeate sub mode transition is possible or not +void testSignalNewPreGenPDefeaturedSubMode( U32 newSubMode ); // Signal transition to a new defeatured pre gen permeate sub mode /**@}*/ Index: firmware/App/Modes/FPModes/StateInletPressureCheck.c =================================================================== diff -u -r70a0840cbf7c2455cb6b814cba1241c253f0e9e3 -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Modes/FPModes/StateInletPressureCheck.c (.../StateInletPressureCheck.c) (revision 70a0840cbf7c2455cb6b814cba1241c253f0e9e3) +++ firmware/App/Modes/FPModes/StateInletPressureCheck.c (.../StateInletPressureCheck.c) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -158,6 +158,19 @@ /*********************************************************************//** * @brief + * The resetInletPressureCheckSignals function resets the signal values for + * FP inlet pressure checks. + * @details \b Inputs: none + * @details \b Outputs: isPressureCheckComplete + * @return none + *************************************************************************/ +void resetInletPressureCheckSignals( void ) +{ + isPressureCheckComplete = FALSE; +} + +/*********************************************************************//** + * @brief * The handleInletPressureCheckProgressState handles the in progress * state of inlet pressure check * @details \b Inputs: none Index: firmware/App/Modes/FPModes/StateInletPressureCheck.h =================================================================== diff -u -r70a0840cbf7c2455cb6b814cba1241c253f0e9e3 -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Modes/FPModes/StateInletPressureCheck.h (.../StateInletPressureCheck.h) (revision 70a0840cbf7c2455cb6b814cba1241c253f0e9e3) +++ firmware/App/Modes/FPModes/StateInletPressureCheck.h (.../StateInletPressureCheck.h) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -43,7 +43,8 @@ void initInletPressureCheck( void ); // Initialize Inlet Pressure Check U32 transitionToInletPressureCheck( void ); // Transition to Inlet Pressure Check void execInletPressureCheck( void ); // Execute the Inlet Pressure Checks state machine -BOOL isInletPressureCheckCompleted( void ); // returns if Inlet Pressure Check is complete +BOOL isInletPressureCheckCompleted( void ); // Returns if Inlet Pressure Check is complete +void resetInletPressureCheckSignals( void ); // Reset signal for Inlet Pressure Check FP_INLET_PRES_CHECK_STATE_T getCurrentInletPressureCheckState( void ); // Get the current state of the Inlet Pressure Check BOOL testInletPressureCheckDataPublishIntervalOverride( MESSAGE_T *message ); Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r48558494898419baa0697009318fb543fe0b8a46 -r940437fb1298c036eeffbbfc8db1d43195e04927 --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 48558494898419baa0697009318fb543fe0b8a46) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 940437fb1298c036eeffbbfc8db1d43195e04927) @@ -284,6 +284,7 @@ { MSG_ID_FP_DEF_PRE_GEN_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPreGenPermeateDefDataPublishIntervalOverride}, { MSG_ID_FP_DEF_GEN_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testGenPermeateDefDataPublishIntervalOverride}, { MSG_ID_FP_DEF_STATUS_REQUEST, &testGetFPDefeaturedStatus }, + { MSG_ID_FP_SET_OPERATION_SUB_MODE_REQUEST, &testSetFPOperationSubMode }, }; /// Calculation for number of entries in the incoming message function handler look-up table.