Index: firmware/App/Modes/ModePreGenDialysate.c =================================================================== diff -u -r67731d57db9a620418b3b848d8f75ff204902c36 -r0452674a0f7a356ab65d147d8222b6efabfd0bf7 --- firmware/App/Modes/ModePreGenDialysate.c (.../ModePreGenDialysate.c) (revision 67731d57db9a620418b3b848d8f75ff204902c36) +++ firmware/App/Modes/ModePreGenDialysate.c (.../ModePreGenDialysate.c) (revision 0452674a0f7a356ab65d147d8222b6efabfd0bf7) @@ -1,30 +1,36 @@ /************************************************************************** * -* 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) Sameer Kalliadan Poyil +* @date (last) 10-Jul-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 "FPOperationModes.h" #include "Heaters.h" +#include "Level.h" #include "ModePreGenDialysate.h" #include "ModeGenDialysate.h" #include "ModeFault.h" #include "Messaging.h" #include "OperationModes.h" #include "Pressure.h" +#include "RinsePump.h" #include "TaskGeneral.h" +#include "TDInterface.h" #include "Timers.h" #include "Utilities.h" #include "Valves.h" @@ -37,9 +43,19 @@ // ********** private definitions ********** /// Interval (ms/task time) at which the pre-treatment state data is published on the CAN bus. -#define PRE_GEN_DIALYSATE_DATA_PUB_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the pre-gen dialysate mode data published. -#define HYD_CHAMBER_PRES_CHECK_TIME_OUT ( 30 * MS_PER_SECOND ) ///< Time out period when hydraulics chamber pressure check initiated -#define NEG_PRES_PERSISTENCE_TIME_MS ( 1 * MS_PER_SECOND ) ///< Persistence time for Hydraulics chamber negative degassing pressure check. +#define PRE_GEN_DIALYSATE_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the pre-gen dialysate mode data published. +#define HYD_CHAMBER_PRES_CHECK_TIME_OUT ( 30 * MS_PER_SECOND ) ///< Time out period when hydraulics chamber pressure check initiated +#define NEG_PRES_PERSISTENCE_TIME_MS ( 1 * MS_PER_SECOND ) ///< Persistence time for Hydraulics chamber negative degassing pressure check. +#define PRE_GEN_DEFAULT_TIME_OUT ( 60 * MS_PER_SECOND ) +#define PRE_GEN_FILL_HYDRO_CHAMBER_TIMEOUT ( 60 * MS_PER_SECOND ) +#define PRE_GEN_FILL_HYDRO_CHAMBER_STABILITY_TIMER ( 10 * MS_PER_SECOND ) +#define PRE_GEN_PRIME_CONCENTRATE_TIMEOUT ( 30 * MS_PER_SECOND ) +#define PRE_GEN_PRIME_CONCENTRATE_PUMP_SPEED 100.0F +#define PRE_GEN_PRIME_CONCENTRATE_VOLUME 0xFFFF +#define PRE_GEN_PRIME_BAL_CHAMBER_CONCENTRATE_PUMP_SPEED 60.0F +#define PRE_GEN_PRIME_D12_RPM 1600.0F +#define PRE_GEN_PRIME_D48_RPM 2000.0F +#define PRE_GEN_PRIME_DIALYZER_CONCENTRATE_PUMP_SPEED 30.0F // ********** private data ********** @@ -51,20 +67,29 @@ static BOOL pendingStopDDPreGenDialRequest; ///< Flag indicating TD has requested DD stop the pre generation dialysate. static U32 preGenDialysatePublishTimerCounter; ///< Pre-Gen Dialysate data broadcast timer counter used to schedule when to transmit data. static OVERRIDE_U32_T preGenDialysateModePublishInterval; ///< Interval (in task intervals) at which to publish pre-gen dialysate mode data to CAN bus. +static U32 preGenAcidPrimeTimer; +static U32 preGenBicarbPrimeTimer; +static U32 preGenfillChamberCTimer; +static BOOL currentHydroChamberStatus; +static U32 startPreGenHydroStabilityTimer; // ********** private function prototypes ********** 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 ); +static DD_PRE_GEN_DIALYSATE_STATE_T handleFillChamberF( void ); +static DD_PRE_GEN_DIALYSATE_STATE_T handlePrimeBicarbLine( void ); +static DD_PRE_GEN_DIALYSATE_STATE_T handlePrimeAcidLine( void ); +static DD_PRE_GEN_DIALYSATE_STATE_T handleWaitForFPState( void ); +static void setModePreGenDialysateTransition( DD_PRE_GEN_DIALYSATE_STATE_T state ); //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 @@ -75,7 +100,7 @@ *************************************************************************/ void initPreGenDialysateMode( void ) { - preGenDialysateState = DD_PRE_GEN_DIALYSATE_HYD_CHAMBER_FILL_CHECK; + preGenDialysateState = DD_PRE_GEN_WAIT_FOR_FP_GEN; wetSelfTestState = DD_WET_SELF_TEST_START; hydChamberPressureCheckStartTimeMS = 0; pressureCheckPersistanceStartTimeMS = 0; @@ -85,6 +110,11 @@ preGenDialysateModePublishInterval.ovData = PRE_GEN_DIALYSATE_DATA_PUB_INTERVAL; preGenDialysateModePublishInterval.ovInitData = 0; preGenDialysateModePublishInterval.override = OVERRIDE_RESET; + currentHydroChamberStatus = FALSE; + startPreGenHydroStabilityTimer = FALSE; + preGenAcidPrimeTimer = 0; + preGenBicarbPrimeTimer = 0; + preGenfillChamberCTimer = 0; } /*********************************************************************//** @@ -99,6 +129,8 @@ { initPreGenDialysateMode(); deenergizeActuators( PARK_CONC_PUMPS ); + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); setCurrentSubState( NO_SUB_STATE ); @@ -117,36 +149,66 @@ *************************************************************************/ U32 execPreGenDialysateMode( void ) { - //Manage Inlet water control - hydChamberWaterInletControl(); + DD_PRE_GEN_DIALYSATE_STATE_T prevState = preGenDialysateState; - //TODO: To be placed in correct states once states defined. - if ( TRUE == pendingStartDDGenDialRequest ) + + + if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_SKIP_PRE_GEN_PRIMING ) ) { - pendingStartDDGenDialRequest = FALSE; - requestNewOperationMode( DD_MODE_GEND ); + preGenDialysateState = DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND; } + + //Manage Inlet water control after hydro chamber fill + if( DD_PRE_GEN_DIALYSATE_HYD_CHAMBER_FILL_CHECK < preGenDialysateState ) + { + currentHydroChamberStatus = hydChamberWaterInletControl(); + } + //TODO: Transition to post gen dialysate if concentrate priming has been started - else if ( TRUE == pendingStopDDPreGenDialRequest ) + if ( TRUE == pendingStopDDPreGenDialRequest ) { pendingStopDDPreGenDialRequest = FALSE; requestNewOperationMode( DD_MODE_STAN ); } + else { // execute current pre-gen dialysate state switch ( preGenDialysateState ) { + case DD_PRE_GEN_WAIT_FOR_FP_GEN: + preGenDialysateState = handleWaitForFPState(); + break; + case DD_PRE_GEN_DIALYSATE_HYD_CHAMBER_FILL_CHECK: preGenDialysateState = handlePreGenDialysateFillCompleteCheckState(); break; - case DD_PRE_GEN_WET_SELF_TEST: - preGenDialysateState = handlePreGenWetSelfTestState(); + case DD_PRE_GEN_DRY_BICART_INITIAL_FILL: + preGenDialysateState = handleDryBicartInitialFillState(); break; + case DD_PRE_GEN_FILL_CHAMBER_F: + preGenDialysateState = handleFillChamberF(); + break; + + case DD_PRE_GEN_PRIME_BICARB_LINE: + preGenDialysateState = handlePrimeBicarbLine(); + break; + + case DD_PRE_GEN_PRIME_ACID_LINE: + preGenDialysateState = handlePrimeAcidLine(); + break; + case DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND: - // TODO : handle wait for Gen dialysate + + if ( TRUE == pendingStartDDGenDialRequest ) + { + pendingStartDDGenDialRequest = FALSE; + } + setTDDialyzerBypass( TRUE ); + requestNewOperationMode( DD_MODE_GEND ); + break; default: @@ -155,6 +217,12 @@ } } + if ( prevState != preGenDialysateState ) + { + setModePreGenDialysateTransition( preGenDialysateState ); + SEND_EVENT_WITH_2_U32_DATA( DD_EVENT_PRE_GEN_CHANGE, prevState, preGenDialysateState ) + } + publishPreGenDialysateState(); return preGenDialysateState; @@ -217,6 +285,34 @@ /*********************************************************************//** * @brief + * The handleWaitForFPState function checks the state of FP + * transition to next state. + * @details \b Inputs: state + * @details \b Outputs: none + * @return current state of PreGenDialysate mode + *************************************************************************/ +static DD_PRE_GEN_DIALYSATE_STATE_T handleWaitForFPState( void ) +{ + DD_PRE_GEN_DIALYSATE_STATE_T state = DD_PRE_GEN_WAIT_FOR_FP_GEN; + FP_OP_MODE_T fpMode = getCurrentFPOperationMode(); + + if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_RUN_SOLO ) ) + { + state = DD_PRE_GEN_DIALYSATE_HYD_CHAMBER_FILL_CHECK; + } + + else if ( ( FP_MODE_DEGP == fpMode ) || ( FP_MODE_GENP == fpMode ) ) + { + state = DD_PRE_GEN_DIALYSATE_HYD_CHAMBER_FILL_CHECK; + } + + //TODO: Should DD keep a timer and Alarm if FP never transitions? + + return state; +} + +/*********************************************************************//** + * @brief * The handlePreGenDialysateFillCompleteCheckState function checks the * hydrochamber fill and transition to next state. * @details \b Inputs: state @@ -225,32 +321,247 @@ *************************************************************************/ static DD_PRE_GEN_DIALYSATE_STATE_T handlePreGenDialysateFillCompleteCheckState( void ) { - //TODO: define hydroblock fill complete process - DD_PRE_GEN_DIALYSATE_STATE_T state = DD_PRE_GEN_WET_SELF_TEST; + DD_PRE_GEN_DIALYSATE_STATE_T state = DD_PRE_GEN_DIALYSATE_HYD_CHAMBER_FILL_CHECK; + if ( LVL_STATE_HIGH == getFloaterStatus( D6_LEVL ) ) + { + if ( FALSE == startPreGenHydroStabilityTimer ) + { + preGenfillChamberCTimer = getMSTimerCount(); + setDialysatePumpTargetRPM( D12_PUMP, PRE_GEN_PRIME_D12_RPM, TRUE ); + setValveState( D14_VALV, VALVE_STATE_OPEN ); + startPreGenHydroStabilityTimer = TRUE; + } + + if ( TRUE == didTimeout( preGenfillChamberCTimer, PRE_GEN_FILL_HYDRO_CHAMBER_STABILITY_TIMER ) ) + { + state = DD_PRE_GEN_DRY_BICART_INITIAL_FILL; + + //TODO: Rework disable dry bicarb config. Currently skipping + // all concentrate related priming + if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_DISABLE_DRY_BICARB ) ) + { + state = DD_PRE_GEN_PRIME_BICARB_LINE; + } + } + } + //TODO: Timeout alarm. 120s + return state; } /*********************************************************************//** * @brief - * The handlePreGenWetSelfTestState function executes the series of self - * tests with the conecentrates and dialysate. - * @details \b Inputs: state + * The handleDryBicartInitialFillState function executes initial 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 handlePreGenWetSelfTestState( void ) +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_DIALYSATE_WAIT_FOR_GEND; + DD_PRE_GEN_DIALYSATE_STATE_T state = DD_PRE_GEN_DRY_BICART_INITIAL_FILL; - //execWetSelfTest(); + if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_DISABLE_DRY_BICARB ) ) + { + state = DD_PRE_GEN_FILL_CHAMBER_F; + } + else + { + // stay in this state till bicart fill complete. + if ( getCurrentDryBiCartFillExecState() == DRY_BICART_FILL_COMPLETE_STATE ) + { + state = DD_PRE_GEN_FILL_CHAMBER_F; + } + // TODO: Alarm if it is not completed within 1.5 minutes + } + return state; } /*********************************************************************//** * @brief + * The handleFillChamberF function checks the + * chamber F fill and transition to next state. + * @details \b Inputs: state + * @details \b Outputs: none + * @return current state of PreGenDialysate mode + *************************************************************************/ +static DD_PRE_GEN_DIALYSATE_STATE_T handleFillChamberF( void ) +{ + DD_PRE_GEN_DIALYSATE_STATE_T state = DD_PRE_GEN_FILL_CHAMBER_F; + + if ( PRE_GEN_BICARB_SUPPLY_VENT_END_STATE == getCurrentDryBiCartPreGenFillExecState() ) + { + state = DD_PRE_GEN_PRIME_BICARB_LINE; + } + //TODO: Timeout alarm. 120s + + return state; +} + +/*********************************************************************//** + * @brief + * The handlePrimeBicarbLine function handles priming the bicarb line + * and transition to next state. + * @details \b Inputs: state + * @details \b Outputs: none + * @return current state of PreGenDialysate mode + *************************************************************************/ +static DD_PRE_GEN_DIALYSATE_STATE_T handlePrimeBicarbLine( void ) +{ + DD_PRE_GEN_DIALYSATE_STATE_T state = DD_PRE_GEN_PRIME_BICARB_LINE; + + if ( TRUE == didTimeout( preGenBicarbPrimeTimer, PRE_GEN_PRIME_CONCENTRATE_TIMEOUT ) ) + { + state = DD_PRE_GEN_PRIME_ACID_LINE; + } + + return state; +} + +static DD_PRE_GEN_DIALYSATE_STATE_T handlePrimeAcidLine( void ) +{ + DD_PRE_GEN_DIALYSATE_STATE_T state = DD_PRE_GEN_PRIME_ACID_LINE; + + if ( TRUE == didTimeout( preGenAcidPrimeTimer, PRE_GEN_PRIME_CONCENTRATE_TIMEOUT ) ) + { + state = DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND; + } + + return state; +} + +/*********************************************************************//** + * @brief + * The setModeGenPDefTransition function sets the actuators and variables + * for the state transition in generate permeate mode. + * @details Inputs: none + * @details Outputs: Actuate valves, pumps as desired. + * @param state gen permeate state enum + * @return none + *************************************************************************/ +static void setModePreGenDialysateTransition( DD_PRE_GEN_DIALYSATE_STATE_T state ) +{ + // Execute on running state + switch( state ) + { + case DD_PRE_GEN_WAIT_FOR_FP_GEN: + break; + + case DD_PRE_GEN_DIALYSATE_HYD_CHAMBER_FILL_CHECK: + startPreGenHydroStabilityTimer = FALSE; + preGenfillChamberCTimer = getMSTimerCount(); + setValveState( D14_VALV, VALVE_STATE_CLOSED ); + setValveState( D3_VALV, VALVE_STATE_OPEN ); + break; + + case DD_PRE_GEN_DRY_BICART_INITIAL_FILL: + + if ( FALSE == getTestConfigStatus( TEST_CONFIG_DD_DISABLE_DRY_BICARB ) ) + { + setBicartFillRequested(); + } + break; + + case DD_PRE_GEN_FILL_CHAMBER_F: + if ( FALSE == getTestConfigStatus( TEST_CONFIG_DD_DISABLE_DRY_BICARB ) ) + { + setBicartPreGenFillRequested(); + } + setDialysatePumpTargetRPM( D12_PUMP, PRE_GEN_PRIME_D12_RPM, TRUE ); + + break; + + case DD_PRE_GEN_PRIME_BICARB_LINE: + preGenBicarbPrimeTimer = getMSTimerCount(); + // dialyzer bypass + setValveState( D34_VALV, VALVE_STATE_OPEN ); + setValveState( D91_VALV, VALVE_STATE_CLOSED ); + setValveState( D35_VALV, VALVE_STATE_CLOSED ); + setValveState( D40_VALV, VALVE_STATE_CLOSED ); + // open BC fresh side + setValveState( D19_VALV, VALVE_STATE_OPEN ); + setValveState( D20_VALV, VALVE_STATE_OPEN ); + setValveState( D21_VALV, VALVE_STATE_OPEN ); + setValveState( D22_VALV, VALVE_STATE_OPEN ); + // close BC spent side + setValveState( D23_VALV, VALVE_STATE_CLOSED ); + setValveState( D24_VALV, VALVE_STATE_CLOSED ); + setValveState( D25_VALV, VALVE_STATE_CLOSED ); + setValveState( D26_VALV, VALVE_STATE_CLOSED ); + //vent air to chamber h + setValveState( D47_VALV, VALVE_STATE_OPEN ); + setValveState( D14_VALV, VALVE_STATE_CLOSED ); + setValveState( D80_VALV, VALVE_STATE_CLOSED ); + //set bicarb concentrate pump and rinse pump + setRinsePumpState( RINSE_PUMP_STATE_ON ); + setConcentratePumpTargetSpeed( D10_PUMP, PRE_GEN_PRIME_CONCENTRATE_PUMP_SPEED, PRE_GEN_PRIME_CONCENTRATE_VOLUME ); + requestConcentratePumpOn( D10_PUMP ); + break; + + case DD_PRE_GEN_PRIME_ACID_LINE: + requestConcentratePumpOff( D10_PUMP, FALSE ); + //TODO: Merge concentrate line priming to one state. + preGenAcidPrimeTimer = getMSTimerCount(); + // dialyzer bypass + setValveState( D34_VALV, VALVE_STATE_OPEN ); + setValveState( D91_VALV, VALVE_STATE_CLOSED ); + setValveState( D35_VALV, VALVE_STATE_CLOSED ); + setValveState( D40_VALV, VALVE_STATE_CLOSED ); + // open BC fresh side + setValveState( D19_VALV, VALVE_STATE_OPEN ); + setValveState( D20_VALV, VALVE_STATE_OPEN ); + setValveState( D21_VALV, VALVE_STATE_OPEN ); + setValveState( D22_VALV, VALVE_STATE_OPEN ); + // close BC spent side + setValveState( D23_VALV, VALVE_STATE_CLOSED ); + setValveState( D24_VALV, VALVE_STATE_CLOSED ); + setValveState( D25_VALV, VALVE_STATE_CLOSED ); + setValveState( D26_VALV, VALVE_STATE_CLOSED ); + //vent air to chamber h + setValveState( D47_VALV, VALVE_STATE_OPEN ); + setValveState( D14_VALV, VALVE_STATE_CLOSED ); + setValveState( D80_VALV, VALVE_STATE_CLOSED ); + //set acid concentrate pump and rinse pump + setRinsePumpState( RINSE_PUMP_STATE_ON ); + setConcentratePumpTargetSpeed( D11_PUMP, PRE_GEN_PRIME_CONCENTRATE_PUMP_SPEED, PRE_GEN_PRIME_CONCENTRATE_VOLUME ); + requestConcentratePumpOn( D11_PUMP ); + break; + + case DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND: + signalDialysatePumpHardStop( D12_PUMP ); + setValveState( D34_VALV, VALVE_STATE_OPEN ); + setValveState( D91_VALV, VALVE_STATE_CLOSED ); + setValveState( D35_VALV, VALVE_STATE_CLOSED ); + setValveState( D40_VALV, VALVE_STATE_CLOSED ); + // open BC fresh side + setValveState( D19_VALV, VALVE_STATE_CLOSED ); + setValveState( D20_VALV, VALVE_STATE_CLOSED ); + setValveState( D21_VALV, VALVE_STATE_CLOSED ); + setValveState( D22_VALV, VALVE_STATE_CLOSED ); + // close BC spent side + setValveState( D23_VALV, VALVE_STATE_CLOSED ); + setValveState( D24_VALV, VALVE_STATE_CLOSED ); + setValveState( D25_VALV, VALVE_STATE_CLOSED ); + setValveState( D26_VALV, VALVE_STATE_CLOSED ); + //vent air to chamber h + setValveState( D47_VALV, VALVE_STATE_CLOSED ); + setValveState( D14_VALV, VALVE_STATE_OPEN ); + //TODO: update to recirculation instead of off states. + requestConcentratePumpOff( D10_PUMP, FALSE ); + requestConcentratePumpOff( D11_PUMP, FALSE ); + setRinsePumpState( RINSE_PUMP_STATE_OFF ); + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, FP_FAULT_ID_FP_INVALID_GENP_STATE, state ) + break; + } +} +/*********************************************************************//** + * @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 +579,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 +779,71 @@ 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_DRY_BICART_INITIAL_FILL: + case DD_PRE_GEN_FILL_CHAMBER_F: + case DD_PRE_GEN_PRIME_BICARB_LINE: + case DD_PRE_GEN_PRIME_ACID_LINE: + 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_DRY_BICART_INITIAL_FILL: + case DD_PRE_GEN_FILL_CHAMBER_F: + case DD_PRE_GEN_PRIME_BICARB_LINE: + case DD_PRE_GEN_PRIME_ACID_LINE: + case DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND: + default: + break; + } + // TODO should setState handled separately for wet self state? + } +} + /**@}*/