/************************************************************************** * * Copyright (c) 2019-2020 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 Rinseback.c * * @author (last) Sean Nash * @date (last) 14-Jan-2021 * * @author (original) Sean * @date (original) 14-Jan-2021 * ***************************************************************************/ #include "AirTrap.h" #include "BloodFlow.h" #include "Buttons.h" #include "DGInterface.h" #include "DialInFlow.h" #include "DialOutFlow.h" #include "ModeTreatment.h" #include "OperationModes.h" #include "Rinseback.h" #include "Valves.h" /** * @addtogroup Rinseback * @{ */ // ********** private data ********** static RINSEBACK_STATE_T rinsebackState; ///< Current state of the rinseback sub-mode. // ********** private function prototypes ********** static RINSEBACK_STATE_T handleRinsebackStopInitState( void ); static RINSEBACK_STATE_T handleRinsebackRunState( void ); static RINSEBACK_STATE_T handleRinsebackPausedState( void ); static RINSEBACK_STATE_T handleRinsebackStoppedState( void ); static RINSEBACK_STATE_T handleRinsebackRunAdditionalState( void ); /*********************************************************************//** * @brief * The initRinseback function initializes the Rinseback sub-mode module. * @details Inputs: none * @details Outputs: Rinseback sub-mode module initialized. * @return none *************************************************************************/ void initRinseback( void ) { rinsebackState = RINSEBACK_STOP_INIT_STATE; } /*********************************************************************//** * @brief * The transitionToRinseback function prepares for transition to Rinseback * sub-mode. * @details Inputs: none * @details Outputs: none * @return none *************************************************************************/ void transitionToRinseback( void ) { initRinseback(); // Set user alarm recovery actions allowed in this sub-mode setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, FALSE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, FALSE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_END_TREATMENT, FALSE ); // Set valves to safe state setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); setValvePosition( VBA, VALVE_POSITION_B_OPEN ); setValvePosition( VBV, VALVE_POSITION_B_OPEN ); // Ensure all pumps except DPi stopped signalBloodPumpHardStop(); signalDialOutPumpHardStop(); // TODO - stop Heparin pump // Re-circulate dialysate side of dialyzer w/ heating to maintain temperature setDialInPumpTargetFlowRate( DIALYSATE_FLOW_RATE_FOR_RECIRC, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); cmdStartDGTrimmerHeater(); } /*********************************************************************//** * @brief * The execRinseback function executes the Rinseback sub-mode state machine. * @details Inputs: none * @details Outputs: none * @return none *************************************************************************/ void execRinseback( void ) { switch ( rinsebackState ) { case RINSEBACK_STOP_INIT_STATE: rinsebackState = handleRinsebackStopInitState(); //setBloodIsPrimed( FALSE ); TODO - call in handler when transition to RB run break; case RINSEBACK_RUN_STATE: rinsebackState = handleRinsebackRunState(); //setRinsebackIsCompleted( TRUE ); TODO - call in handler when rinseback is done break; case RINSEBACK_PAUSED_STATE: rinsebackState = handleRinsebackPausedState(); break; case RINSEBACK_STOP_STATE: rinsebackState = handleRinsebackStoppedState(); break; case RINSEBACK_RUN_ADDITIONAL_STATE: rinsebackState = handleRinsebackRunAdditionalState(); break; default: // TODO - s/w fault break; } } static RINSEBACK_STATE_T handleRinsebackStopInitState( void ) { RINSEBACK_STATE_T result = RINSEBACK_STOP_INIT_STATE; return result; } static RINSEBACK_STATE_T handleRinsebackRunState( void ) { RINSEBACK_STATE_T result = RINSEBACK_RUN_STATE; return result; } static RINSEBACK_STATE_T handleRinsebackPausedState( void ) { RINSEBACK_STATE_T result = RINSEBACK_PAUSED_STATE; return result; } static RINSEBACK_STATE_T handleRinsebackStoppedState( void ) { RINSEBACK_STATE_T result = RINSEBACK_STOP_STATE; return result; } static RINSEBACK_STATE_T handleRinsebackRunAdditionalState( void ) { RINSEBACK_STATE_T result = RINSEBACK_RUN_ADDITIONAL_STATE; return result; } /*********************************************************************//** * @brief * The signalStopRinseback function signals the rinseback sub-mode * to stop per an active alarm. * @details Inputs: none * @details Outputs: none * @return none *************************************************************************/ void signalStopRinseback( void ) { } /*********************************************************************//** * @brief * The getCurrentRinsebackState function returns the current state of the * rinseback sub-mode. * @details Inputs: rinsebackState * @details Outputs: none * @return rinsebackState *************************************************************************/ RINSEBACK_STATE_T getCurrentRinsebackState( void ) { return rinsebackState; } /**@}*/