Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -rb569bc796c56acd5d94d468386f5f42c350cad65 -r17bfea4963b43699d23ae3730dcaf3bf349d915d --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision b569bc796c56acd5d94d468386f5f42c350cad65) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 17bfea4963b43699d23ae3730dcaf3bf349d915d) @@ -674,15 +674,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/Controllers/Valves.h =================================================================== diff -u -r9577444556a75d90a90331288eb8aeeedc4e12b1 -r17bfea4963b43699d23ae3730dcaf3bf349d915d --- firmware/App/Controllers/Valves.h (.../Valves.h) (revision 9577444556a75d90a90331288eb8aeeedc4e12b1) +++ firmware/App/Controllers/Valves.h (.../Valves.h) (revision 17bfea4963b43699d23ae3730dcaf3bf349d915d) @@ -8,7 +8,7 @@ * @file Valves.h * * @author (last) “Raghu -* @date (last) 16-Oct-2025 +* @date (last) 03-Feb-2026 * * @author (original) Vinayakam Mani * @date (original) 26-Aug-2024 @@ -37,6 +37,15 @@ NUM_OF_VALVE_STATES ///< number of valve states } VALVE_STATE_NAMES_T; +/// Enumerations for water recovery options +typedef enum recovery_States +{ + NO_RECOVERY = 0, ///< NO recovery + MEDIUM_RECOVERY, ///< Medium recovery + MAX_RECOVERY, ///< Maximum recovery + NUM_OF_RECOVERY_STATES ///< Number of recovery states +} RECOVERY_STATE_T; + #define NUM_OF_DD_VALVES ( ( LAST_DD_VALVE - FIRST_DD_VALVE ) + 1 ) #define NUM_OF_IOFP_VALVES ( ( LAST_FP_VALVE - FIRST_IO_VALVE ) + 1 ) #define NUM_OF_IO_VALVES ( ( LAST_IO_VALVE - FIRST_IO_VALVE ) + 1 ) @@ -77,6 +86,7 @@ BOOL setValveStateDelayed( DD_VALVES_T valve, VALVE_STATE_NAMES_T valveState, U32 delayMs ); VALVE_STATE_NAMES_T getValveStateName( DD_VALVES_T valveID ); void setHydValvesStatetoClosedState( void ); +void setRecoveryValvesConfig( void ); BOOL testValvesStatesPublishIntervalOverride( MESSAGE_T *message ); BOOL testValveStateOverride( MESSAGE_T *message );