Index: firmware/App/Modes/PreTreatmentRecirc.c =================================================================== diff -u -r19fc8f015489be63932eed969d28329d123332e0 -rb20421d84b9049977c04f4752f4fc5697425f25c --- firmware/App/Modes/PreTreatmentRecirc.c (.../PreTreatmentRecirc.c) (revision 19fc8f015489be63932eed969d28329d123332e0) +++ firmware/App/Modes/PreTreatmentRecirc.c (.../PreTreatmentRecirc.c) (revision b20421d84b9049977c04f4752f4fc5697425f25c) @@ -1,25 +1,27 @@ /************************************************************************** * -* Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +* Copyright (c) 2021-2022 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 PreTreatmentRecirc.c +* @file PreTreatmentRecirc.c * -* @author (last) Quang Nguyen -* @date (last) 08-Feb-2021 +* @author (last) Sean Nash +* @date (last) 13-Jul-2022 * -* @author (original) Quang Nguyen -* @date (original) 08-Feb-2021 +* @author (original) Quang Nguyen +* @date (original) 08-Feb-2021 * ***************************************************************************/ +#include "AirTrap.h" #include "DialInFlow.h" #include "DialOutFlow.h" #include "BloodFlow.h" #include "DGInterface.h" #include "PreTreatmentRecirc.h" +#include "Switches.h" #include "Valves.h" /** @@ -29,31 +31,22 @@ // ********** private definitions ********** -#define BLOOD_PUMP_RECIRC_FLOW_RATE 100 ///< Blood pump flow rate during recirculation in mL/min. -#define DIALYSATE_PUMP_RECIRC_FLOW_RATE 100 ///< Dialysate pump flow rate during recirculation in mL/min. +#define BLOOD_PUMP_RECIRC_FLOW_RATE 100 ///< Blood pump flow rate during recirculation in mL/min. +#define DIALYSATE_PUMP_RECIRC_FLOW_RATE 100 ///< Dialysate pump flow rate during recirculation in mL/min. -/// Wet self-tests state machine. -typedef enum Pre_Treatment_Recirc_State -{ - PRE_TREATMENT_RECIRC_START_STATE = 0, ///< Pre-treatment recirculate start state. - PRE_TREATMENT_RECIRC_STATE, ///< Pre-treatment recirculate state. - PRE_TREATMENT_RECIRC_STOPPED_STATE, ///< Pre-treatment recirculate stopped state. - NUM_OF_PRE_TREATMENT_RECIRC_STATES ///< Number of pre-treatment recirculate states. -} PRE_TREATMENT_RECIRC_STATE_T; - // ********** private data ********** -static PRE_TREATMENT_RECIRC_STATE_T currentPreTreatmentRecircState; ///< Current state of the pre-treatment recirculate state machine. -static BOOL recircStopRequested; ///< Flag indicates alarm requesting to stop pre-treatment recirculate. +static HD_PRE_TREATMENT_RECIRC_STATE_T currentPreTreatmentRecircState; ///< Current state of the pre-treatment recirculate state machine. static BOOL recircResumeRequested; ///< Flag indicates alarm requesting to resume pre-treatment recirculate. // ********** private function prototypes ********** static void resetPreTreatmentRecircFlags( void ); -static PRE_TREATMENT_RECIRC_STATE_T handlePreTreatmentRecirculateStartState( void ); -static PRE_TREATMENT_RECIRC_STATE_T handlePreTreatmentRecirculateState( void ); -static PRE_TREATMENT_RECIRC_STATE_T handlePreTreatmentRecirculateStoppedState( void ); +static void setupPreTreatmentRecirculate( void ); +static HD_PRE_TREATMENT_RECIRC_STATE_T handlePreTreatmentRecirculateState( void ); +static HD_PRE_TREATMENT_RECIRC_STATE_T handlePreTreatmentRecirculateStoppedState( void ); + /*********************************************************************//** * @brief * The initPreTreatmentRecirc function initializes the PreTreatmentRecirc module. @@ -63,7 +56,7 @@ *************************************************************************/ void initPreTreatmentRecirc( void ) { - currentPreTreatmentRecircState = PRE_TREATMENT_RECIRC_START_STATE; + currentPreTreatmentRecircState = PRE_TREATMENT_RECIRC_STATE; resetPreTreatmentRecircFlags(); } @@ -79,6 +72,7 @@ void transitionToPreTreatmentRecirc( void ) { initPreTreatmentRecirc(); + setupPreTreatmentRecirculate(); } /*********************************************************************//** @@ -93,10 +87,6 @@ // execute pre-treatment recirculate state machine switch ( currentPreTreatmentRecircState ) { - case PRE_TREATMENT_RECIRC_START_STATE: - currentPreTreatmentRecircState = handlePreTreatmentRecirculateStartState(); - break; - case PRE_TREATMENT_RECIRC_STATE: currentPreTreatmentRecircState = handlePreTreatmentRecirculateState(); break; @@ -106,8 +96,7 @@ break; default: - currentPreTreatmentRecircState = PRE_TREATMENT_RECIRC_START_STATE; - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_HD_INVALID_PRE_TREATMENT_RECIRC_STATE, (U32)currentPreTreatmentRecircState ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_HD_INVALID_PRE_TREATMENT_RECIRC_STATE, currentPreTreatmentRecircState ); break; } @@ -117,45 +106,32 @@ /*********************************************************************//** * @brief - * The signalResumePreTreatmentRecirc function signals the pre-treatment - * recirculate sub-mode to resume. - * @details Inputs: none - * @details Outputs: recircResumepRequested - * @return none + * The getPreTreatmentRecircState function returns the current state of + * pre-treatment re-circulate sub-mode. + * @details Inputs: currentPreTreatmentRecircState + * @details Outputs: none + * @return current pre-treatment re-circ state *************************************************************************/ -void signalResumePreTreatmentRecirc( void ) +U32 getPreTreatmentRecircState( void ) { - recircResumeRequested = TRUE; + return currentPreTreatmentRecircState; } /*********************************************************************//** * @brief - * The signalStopPreTreatmentRecirc function signals the pre-treatment - * recirculate sub-mode to stop when an alarm with stop property has been triggered. + * The signalResumePreTreatmentRecirc function signals the pre-treatment + * recirculate sub-mode to resume. * @details Inputs: none - * @details Outputs: recircStopRequested + * @details Outputs: recircResumepRequested * @return none *************************************************************************/ -void signalStopPreTreatmentRecirc( void ) +void signalResumePreTreatmentRecirc( void ) { - recircStopRequested = TRUE; + recircResumeRequested = TRUE; } /*********************************************************************//** * @brief - * The isPatientConnectionRequested function returns the status of patient connection request. - * @details Inputs: none - * @details Outputs: none - * @return TRUE if patient connection requested, otherwise FALSE - *************************************************************************/ -BOOL isPatientConnectionRequested( void ) -{ - // TODO Add handler to UI interaction - return TRUE; -} - -/*********************************************************************//** - * @brief * The resetPreTreatmentRecircFlags function resets all pre-treatment recirculate * signal flags. * @details Inputs: none @@ -164,33 +140,33 @@ *************************************************************************/ static void resetPreTreatmentRecircFlags( void ) { - recircStopRequested = FALSE; recircResumeRequested = FALSE; } /*********************************************************************//** * @brief - * The handlePreTreatmentRecirculateStartState function changes valves and + * The setupPreTreatmentRecirculate function setups valves and * heater settings for pre-treatment recirculate sub-mode. * @details Inputs: none * @details Outputs: controlled valves and pumps - * @return current state (sub-mode) + * @return none *************************************************************************/ -static PRE_TREATMENT_RECIRC_STATE_T handlePreTreatmentRecirculateStartState( void ) +static void setupPreTreatmentRecirculate( void ) { + doorClosedRequired( TRUE, TRUE ); + setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); setValvePosition( VBA, VALVE_POSITION_B_OPEN ); setValvePosition( VBV, VALVE_POSITION_B_OPEN ); setValveAirTrap( STATE_CLOSED ); cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); cmdStartDGTrimmerHeater(); + startAirTrapControl(); setBloodPumpTargetFlowRate( BLOOD_PUMP_RECIRC_FLOW_RATE, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); setDialInPumpTargetFlowRate( DIALYSATE_PUMP_RECIRC_FLOW_RATE, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); signalDialOutPumpHardStop(); - - return PRE_TREATMENT_RECIRC_STATE; } /*********************************************************************//** @@ -201,18 +177,18 @@ * @details Outputs: controlled valves and pumps * @return current state (sub-mode) *************************************************************************/ -static PRE_TREATMENT_RECIRC_STATE_T handlePreTreatmentRecirculateState( void ) +static HD_PRE_TREATMENT_RECIRC_STATE_T handlePreTreatmentRecirculateState( void ) { - PRE_TREATMENT_RECIRC_STATE_T state = PRE_TREATMENT_RECIRC_STATE; + HD_PRE_TREATMENT_RECIRC_STATE_T state = PRE_TREATMENT_RECIRC_STATE; - if ( TRUE == recircStopRequested ) + if ( TRUE == doesAlarmStatusIndicateStop() ) { signalDialOutPumpHardStop(); signalDialInPumpHardStop(); signalBloodPumpHardStop(); cmdStopDGTrimmerHeater(); + endAirTrapControl(); - recircStopRequested = FALSE; state = PRE_TREATMENT_RECIRC_STOPPED_STATE; } @@ -227,14 +203,15 @@ * @details Outputs: resume re-circulation * @return current state (sub-mode) *************************************************************************/ -static PRE_TREATMENT_RECIRC_STATE_T handlePreTreatmentRecirculateStoppedState( void ) +static HD_PRE_TREATMENT_RECIRC_STATE_T handlePreTreatmentRecirculateStoppedState( void ) { - PRE_TREATMENT_RECIRC_STATE_T state = PRE_TREATMENT_RECIRC_STOPPED_STATE; + HD_PRE_TREATMENT_RECIRC_STATE_T state = PRE_TREATMENT_RECIRC_STOPPED_STATE; if ( TRUE == recircResumeRequested ) { recircResumeRequested = FALSE; - state = PRE_TREATMENT_RECIRC_START_STATE; + state = PRE_TREATMENT_RECIRC_STATE; + setupPreTreatmentRecirculate(); } return state;