Index: firmware/App/Modes/ModePreGenDialysate.c =================================================================== diff -u -r67731d57db9a620418b3b848d8f75ff204902c36 -r6d4aa77e6b85aa7621a234660f631e725fb1d441 --- firmware/App/Modes/ModePreGenDialysate.c (.../ModePreGenDialysate.c) (revision 67731d57db9a620418b3b848d8f75ff204902c36) +++ firmware/App/Modes/ModePreGenDialysate.c (.../ModePreGenDialysate.c) (revision 6d4aa77e6b85aa7621a234660f631e725fb1d441) @@ -1,22 +1,24 @@ /************************************************************************** * -* Copyright (c) 2025-2025 Diality Inc. - All Rights Reserved. +* Copyright (c) 2025-2026 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 ModePreGenDialysate.c * -* @author (last) Vinayakam Mani -* @date (last) 17-Apr-2025 +* @author (last) Raghu Kallala +* @date (last) 22-Apr-2026 * * @author (original) Vinayakam Mani -* @date (original) 17-Apr-2025 +* @date (original) 18-Apr-2025 * ***************************************************************************/ +#include "BalancingChamber.h" #include "ConcentratePumps.h" #include "DialysatePumps.h" +#include "DryBiCart.h" #include "Heaters.h" #include "ModePreGenDialysate.h" #include "ModeGenDialysate.h" @@ -57,14 +59,14 @@ static void publishPreGenDialysateState( void ); static DD_PRE_GEN_DIALYSATE_STATE_T handlePreGenDialysateFillCompleteCheckState( void ); static DD_PRE_GEN_DIALYSATE_STATE_T handlePreGenWetSelfTestState( void ); +static DD_PRE_GEN_DIALYSATE_STATE_T handleDryBicartInitialFillState( void ); //Wet Self test static void setModePreGenWetSelfStateTransition( DD_WET_SELF_TEST_STATE_T state ); static void execWetSelfTest( void ); static DD_WET_SELF_TEST_STATE_T handleNegativeDeaerationPressureCheckState( void ); static DD_WET_SELF_TEST_STATE_T handlePositiveDeaerationPressureCheckState( void ); - /*********************************************************************//** * @brief * The initPreGenDialysateMode function initializes the Pre-Generation @@ -99,6 +101,8 @@ { initPreGenDialysateMode(); deenergizeActuators( PARK_CONC_PUMPS ); + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); setCurrentSubState( NO_SUB_STATE ); @@ -145,6 +149,10 @@ preGenDialysateState = handlePreGenWetSelfTestState(); break; + case DD_PRE_GEN_DRY_BICART_INITIAL_FILL: + preGenDialysateState = handleDryBicartInitialFillState(); + break; + case DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND: // TODO : handle wait for Gen dialysate break; @@ -242,15 +250,52 @@ static DD_PRE_GEN_DIALYSATE_STATE_T handlePreGenWetSelfTestState( void ) { //TODO: Change to wet self test state later - DD_PRE_GEN_DIALYSATE_STATE_T state = DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND; + DD_PRE_GEN_DIALYSATE_STATE_T state = DD_PRE_GEN_DRY_BICART_INITIAL_FILL; + // TODO: testing drybicart fill in pre-gen + if ( getTestConfigStatus( TEST_CONFIG_DD_DRY_BICART_TEST ) == TRUE ) + { + setBicartFillRequested(); + } + //execWetSelfTest(); return state; } /*********************************************************************//** * @brief + * The handleDryBicartInitialFillState function executes intial dry bicart fill request + * @details \b Inputs: none + * @details \b Outputs: none + * @return current state of PreGenDialysate mode + *************************************************************************/ +static DD_PRE_GEN_DIALYSATE_STATE_T handleDryBicartInitialFillState( void ) +{ + //TODO: Change to wet self test state later + DD_PRE_GEN_DIALYSATE_STATE_T state = DD_PRE_GEN_DRY_BICART_INITIAL_FILL; + + // TODO: testing drybicart fill in pre-gen + if ( getTestConfigStatus( TEST_CONFIG_DD_DRY_BICART_TEST ) == TRUE ) + { + // stay in this state till bicart fill complete. + if ( getCurrentDryBiCartFillExecState() == DRY_BICART_FILL_COMPLETE_STATE ) + { + state = DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND; + } + // TODO: Alarm if it is not completed within 1.5 minutes + } + else + { + // not bicart fill, move to next state + state = DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND; + } + + return state; +} + +/*********************************************************************//** + * @brief * The setModePreGenWetSelfStateTransition function sets the actuators and variables * for the state transition in pre-gen WetSlef test mode. * @details Inputs: Valve states, Pump speed @@ -268,9 +313,6 @@ break; case DD_WET_SELF_TEST_NEGATIVE_DEAERATION_PRES_CHECK: - //Make sure Water Inlet Valve is open - setValveState( DD_M4_VALV, VALVE_STATE_OPEN ); - // Start timer for hyd chamber negative pressure check state hydChamberPressureCheckStartTimeMS = getMSTimerCount(); // Start D12/Degassing pump - closed loop control @@ -471,4 +513,67 @@ return result; } +/*********************************************************************//** + * @brief + * The testValidateDDPreGenDialysateChangeReq function validate whether request + * operation sub mode 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 testValidateDDPreGenDialysateChangeReq( U32 newSubMode ) +{ + BOOL result = FALSE; + + if ( newSubMode < NUM_OF_DD_PRE_GEN_DIALYSATE_STATES ) + { + switch ( newSubMode ) + { + // TODO add validate condition after checking with Vinay + case DD_PRE_GEN_DIALYSATE_HYD_CHAMBER_FILL_CHECK: + case DD_PRE_GEN_WET_SELF_TEST: + case DD_PRE_GEN_DRY_BICART_INITIAL_FILL: + case DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND: + result = TRUE; + break; + + default: + break; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSignalNewDDPreGenDialysateSubMode function request transition + * to a new operation sub mode. + * @details \b Inputs: none + * @details \b Outputs: preGenDialysateState + * @param newSubMode the enumerated sub state of the mode + * @return none + *************************************************************************/ +void testSignalNewDDPreGenDialysateSubMode( U32 newSubMode ) +{ + if ( newSubMode < NUM_OF_DD_PRE_GEN_DIALYSATE_STATES ) + { + preGenDialysateState = (DD_PRE_GEN_DIALYSATE_STATE_T)newSubMode; + + switch ( newSubMode ) + { + // TODO add logic after checking with Vinay + // Any of these state require no special handling + case DD_PRE_GEN_DIALYSATE_HYD_CHAMBER_FILL_CHECK: + case DD_PRE_GEN_WET_SELF_TEST: + case DD_PRE_GEN_DRY_BICART_INITIAL_FILL: + case DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND: + default: + break; + } + // TODO should setState handled separately for wet self state? + } +} + /**@}*/