Index: firmware/App/Controllers/PermeateTank.c =================================================================== diff -u -r8d27c30384b9bce99420fc0751d359c4b3871ea4 -r336f6c49e05f515ca1250e0fd9ea97e5f5b5f11c --- firmware/App/Controllers/PermeateTank.c (.../PermeateTank.c) (revision 8d27c30384b9bce99420fc0751d359c4b3871ea4) +++ firmware/App/Controllers/PermeateTank.c (.../PermeateTank.c) (revision 336f6c49e05f515ca1250e0fd9ea97e5f5b5f11c) @@ -7,8 +7,8 @@ * * @file PermeateTank.c * -* @author (last) “rkallala” -* @date (last) 27-Jan-2026 +* @author (last) Michael Garthwaite +* @date (last) 17-Apr-2026 * * @author (original) Michael Garthwaite * @date (original) 08-Sep-2025 @@ -160,42 +160,48 @@ void execPermeateTankController( void ) { PERMEATE_TANK_STATE_T prevState = permeateTankControllerState; + FP_OP_MODE_T opMode = getCurrentFPOperationMode(); + // If we have faulted, close valve and go to manual control - if ( FP_MODE_FAUL == getCurrentFPOperationMode() ) + if ( FP_MODE_FAUL == opMode ) { endPermeateTankControl(); } - // Execute air trap state machine - switch( permeateTankControllerState ) + // do not execute state machine if in defeatured modes. + // BETA's will still have featured HW installed. + if ( FALSE == isFPDefeatured() ) { - case PERMEATE_TANK_INIT_STATE: - permeateTankControllerState = PERMEATE_TANK_MANUAL_CONTROL_STATE; - break; + // Execute permeate tank state machine + switch( permeateTankControllerState ) + { + case PERMEATE_TANK_INIT_STATE: + permeateTankControllerState = PERMEATE_TANK_MANUAL_CONTROL_STATE; + break; - case PERMEATE_TANK_MANUAL_CONTROL_STATE: - permeateTankControllerState = handlePermeateTankManualControlState(); - break; + case PERMEATE_TANK_MANUAL_CONTROL_STATE: + permeateTankControllerState = handlePermeateTankManualControlState(); + break; - case PERMEATE_TANK_FILL_STATE: - permeateTankControllerState = handlePermeateTankFillState(); - break; + case PERMEATE_TANK_FILL_STATE: + permeateTankControllerState = handlePermeateTankFillState(); + break; - case PERMEATE_TANK_FULL_STATE: - permeateTankControllerState = handlePermeateTankFullState(); - break; + case PERMEATE_TANK_FULL_STATE: + permeateTankControllerState = handlePermeateTankFullState(); + break; - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, (U32)FP_FAULT_ID_FP_INVALID_PERMEATE_TANK_STATE, (U32)permeateTankControllerState ) - permeateTankControllerState = PERMEATE_TANK_INIT_STATE; - break; - } + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, (U32)FP_FAULT_ID_FP_INVALID_PERMEATE_TANK_STATE, (U32)permeateTankControllerState ) + permeateTankControllerState = PERMEATE_TANK_INIT_STATE; + break; + } - if ( prevState != permeateTankControllerState ) - { - setPermeateTankTransition( permeateTankControllerState ); + if ( prevState != permeateTankControllerState ) + { + setPermeateTankTransition( permeateTankControllerState ); + } } - // Publish permeate tank data if due publishPermeateTankData(); } @@ -309,11 +315,21 @@ case PERMEATE_TANK_FULL_STATE: setValveState( M4_VALV, VALVE_STATE_CLOSED ); setValveState( M12_VALV, VALVE_STATE_OPEN ); - setValveState( P6_VALV, VALVE_STATE_OPEN ); setValveState( P11_VALV, VALVE_STATE_OPEN ); setValveState( P39_VALV, VALVE_STATE_CLOSED ); // set P33, P34 and P37 per recovery configuration setRecoveryValvesConfig(); + // No recirculation for no recovery setting. + if ( getRecoveryStatesConfig() != NO_RECOVERY ) + { + setValveState( P6_VALV, VALVE_STATE_OPEN ); + setValveState( P39_VALV, VALVE_STATE_CLOSED ); + } + else + { + setValveState( P6_VALV, VALVE_STATE_CLOSED ); + setValveState( P39_VALV, VALVE_STATE_OPEN ); + } break; default: