Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r89c8709e3b27648926fbb20f25c9a67cbeb99adc -r7e2325379e4c4f7f891776646fbbcd4aa9c6eaca --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 89c8709e3b27648926fbb20f25c9a67cbeb99adc) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 7e2325379e4c4f7f891776646fbbcd4aa9c6eaca) @@ -7,8 +7,8 @@ * * @file Valves.c * -* @author (last) “rkallala” -* @date (last) 28-Jan-2026 +* @author (last) Arpita Srivastava +* @date (last) 09-Feb-2026 * * @author (original) Vinayakam Mani * @date (original) 26-Aug-2024 @@ -525,6 +525,66 @@ /*********************************************************************//** * @brief + * The setHydValvesStatetoClosedState function sets all Hydraulics / DD + * valves to close state except balancing chamber, UF and Inlet water control. + * @details \b Inputs: none + * @details \b Outputs: valve states + * @return none. + *************************************************************************/ +void setHydValvesStatetoClosedState( void ) +{ + DD_VALVES_T valve; + + // Set all Hydraulics valves to closed state + for ( valve = FIRST_HYD_VALVE; valve <= LAST_HYD_VALVE; valve++ ) + { + setValveState( valve, VALVE_STATE_CLOSED ); + } +} + +/*********************************************************************//** + * @brief + * The setRecoveryValvesConfig function sets all recovery valves per + * recovery configuration from institutional record. + * @details \b Inputs: none + * @details \b Outputs: P33, P34 and P37 recovery valve states + * @return none. + *************************************************************************/ +void setRecoveryValvesConfig( void ) +{ + // TODO define hdInstitutionalRecord and get the NVData when it's ready +// RECOVERY_STATE_T recoveryState = (RECOVERY_STATE_T)hdInstitutionalRecord.recoveryConfig; + RECOVERY_STATE_T recoveryState = MAX_RECOVERY; + + // Set all P33, P34 and P37 valves per recovery configuration + switch( recoveryState ) + { + case NO_RECOVERY: + setValveState( P33_VALV, VALVE_STATE_CLOSED ); + setValveState( P34_VALV, VALVE_STATE_CLOSED ); + setValveState( P37_VALV, VALVE_STATE_CLOSED ); + break; + + case MEDIUM_RECOVERY: + setValveState( P33_VALV, VALVE_STATE_OPEN ); + setValveState( P34_VALV, VALVE_STATE_CLOSED ); + setValveState( P37_VALV, VALVE_STATE_OPEN ); + break; + + case MAX_RECOVERY: + setValveState( P33_VALV, VALVE_STATE_OPEN ); + setValveState( P34_VALV, VALVE_STATE_CLOSED ); + setValveState( P37_VALV, VALVE_STATE_CLOSED ); + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, FP_FAULT_ID_FP_INVALID_RECOVERY_VALVE_STATE, recoveryState ) + break; + } +} + +/*********************************************************************//** + * @brief * The publishValvesStates function publishes DD valves states at the set interval. * @details \b Inputs: valvesStatesPublicationTimerCounter * @details \b Outputs: valvesStatesPublicationTimerCounter @@ -634,15 +694,35 @@ { DD_BC_VALVE_OVERRIDE_PAYLOAD_T payload; DD_VALVES_T valve; - BOOL result = FALSE; + U32 mask; + VALVE_STATE_NAMES_T pos; + OVERRIDE_TYPE_T ovType = OVERRIDE_INVALID; + BOOL result = FALSE; memcpy( (U08*)(&payload), message->payload, sizeof( DD_BC_VALVE_OVERRIDE_PAYLOAD_T ) ); - for ( valve = FIRST_BC_VALVE; valve <= LAST_BC_VALVE; valve++ ) + ovType = ( TRUE == payload.reset ? OVERRIDE_RESET_OVERRIDE : OVERRIDE_OVERRIDE ); + + // Verify tester has logged in with f/w and override type is valid + if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) { - U32 mask = 0x1 << (valve - FIRST_BC_VALVE); - VALVE_STATE_NAMES_T pos = ( ( ( payload.valveStatesBits & mask ) != 0 ) ? VALVE_STATE_OPEN : VALVE_STATE_CLOSED ); + for ( valve = FIRST_BC_VALVE; valve <= LAST_BC_VALVE; valve++ ) + { + mask = ( 0x1 << ( valve - FIRST_BC_VALVE ) ); + pos = ( ( ( payload.valveStatesBits & mask ) != 0 ) ? VALVE_STATE_OPEN : VALVE_STATE_CLOSED); - result = setValveState( valve, pos ); + if ( OVERRIDE_OVERRIDE == ovType ) + { + result = TRUE; + valveStates[ valve ].ovData = convertValveStateNameToValveState( pos ); + valveStates[ valve ].override = OVERRIDE_KEY; + } + else + { + result = TRUE; + valveStates[ valve ].override = OVERRIDE_RESET; + valveStates[ valve ].ovData = valveStates[ valve ].ovInitData; + } + } } return result; Index: firmware/App/DDCommon.h =================================================================== diff -u -rf7f6305f054732569330f6001568777857e20442 -r7e2325379e4c4f7f891776646fbbcd4aa9c6eaca --- firmware/App/DDCommon.h (.../DDCommon.h) (revision f7f6305f054732569330f6001568777857e20442) +++ firmware/App/DDCommon.h (.../DDCommon.h) (revision 7e2325379e4c4f7f891776646fbbcd4aa9c6eaca) @@ -25,7 +25,7 @@ #define DD_VERSION_MAJOR 0 #define DD_VERSION_MINOR 0 #define DD_VERSION_MICRO 0 -#define DD_VERSION_BUILD 40 +#define DD_VERSION_BUILD 42 // ********** development build switches ********** Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r89c8709e3b27648926fbb20f25c9a67cbeb99adc -r7e2325379e4c4f7f891776646fbbcd4aa9c6eaca --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 89c8709e3b27648926fbb20f25c9a67cbeb99adc) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 7e2325379e4c4f7f891776646fbbcd4aa9c6eaca) @@ -7,8 +7,8 @@ * * @file ModeStandby.c * -* @author (last) “rkallala” -* @date (last) 09-Dec-2025 +* @author (last) “Raghu +* @date (last) 04-Feb-2026 * * @author (original) Vinayakam Mani * @date (original) 07-Aug-2024 @@ -18,6 +18,7 @@ #include "BalancingChamber.h" #include "ConcentratePumps.h" #include "ConductivitySensors.h" +#include "FPOperationModes.h" #include "Heaters.h" #include "ModeFault.h" #include "ModeStandby.h" @@ -157,6 +158,7 @@ static DD_STANDBY_MODE_STATE_T handleStandbyIdleState( void ) { DD_STANDBY_MODE_STATE_T state = DD_STANDBY_MODE_STATE_IDLE; + FP_OP_MODE_T fpMode = getCurrentFPOperationMode(); //TODO:remove later if standby mode doesnt need inlet water control hydChamberWaterInletControl(); @@ -168,8 +170,17 @@ // } if ( TRUE == pendingStartDDPreGenRequest ) { - pendingStartDDPreGenRequest = FALSE; - requestNewOperationMode( DD_MODE_PREG ); + // wait for IOFP GENP mode and when IOFP manual control is not set + if ( ( FP_MODE_GENP == fpMode ) && ( getTestConfigStatus( TEST_CONFIG_DD_RUN_SOLO ) == FALSE ) ) + { + pendingStartDDPreGenRequest = FALSE; + requestNewOperationMode( DD_MODE_PREG ); + } + else if ( getTestConfigStatus( TEST_CONFIG_DD_RUN_SOLO ) == TRUE ) + { + pendingStartDDPreGenRequest = FALSE; + requestNewOperationMode( DD_MODE_PREG ); + } } //Test request to handle only balancing chamber switching else if ( TRUE == pendingBalanceChamberSwOnlyRequest ) Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -r89c8709e3b27648926fbb20f25c9a67cbeb99adc -r7e2325379e4c4f7f891776646fbbcd4aa9c6eaca --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 89c8709e3b27648926fbb20f25c9a67cbeb99adc) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 7e2325379e4c4f7f891776646fbbcd4aa9c6eaca) @@ -7,8 +7,8 @@ * * @file AlarmMgmtSWFaults.h * -* @author (last) Michael Garthwaite -* @date (last) 27-Jan-2026 +* @author (last) “Raghu +* @date (last) 03-Feb-2026 * * @author (original) Vinayakam Mani * @date (original) 07-Aug-2024 @@ -283,6 +283,7 @@ FP_FAULT_ID_FP_INVALD_GENP_DEF_STATE = 122, FP_FAULT_ID_FP_INVALID_PERMEATE_TANK_STATE = 123, FP_FAULT_ID_FP_INVALID_INLET_PRESSURE_CHECK_STATE = 124, + FP_FAULT_ID_FP_INVALID_RECOVERY_VALVE_STATE = 125, NUM_OF_FP_FAULT_IDS } FP_SW_FAULT_ID_T;