Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -ra31707ccbf01a1b40f8500bc491dc9c616e7a163 -rd28280f1054fc9ddf9304a11373dc9ee963425e3 --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision a31707ccbf01a1b40f8500bc491dc9c616e7a163) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision d28280f1054fc9ddf9304a11373dc9ee963425e3) @@ -1,17 +1,17 @@ /************************************************************************** * -* Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +* Copyright (c) 2019-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 ModeFault.c +* @file ModeFault.c * -* @author (last) Sean Nash -* @date (last) 24-Sep-2020 +* @author (last) Sean Nash +* @date (last) 13-Jul-2022 * -* @author (original) Dara Navaei -* @date (original) 05-Nov-2019 +* @author (original) Dara Navaei +* @date (original) 05-Nov-2019 * ***************************************************************************/ @@ -35,6 +35,9 @@ // ********** private data ********** +// TODO expand this later +static HD_FAULT_STATE_T faultState = HD_FAULT_STATE_START; ///< Currently active fault state. + // ********** private function prototypes ********** /*********************************************************************//** @@ -54,18 +57,27 @@ * The transitionToFaultMode function prepares for transition to fault mode. * @details Inputs: none * @details Outputs: - * @return none + * @return initial state *************************************************************************/ -void transitionToFaultMode( void ) +U32 transitionToFaultMode( void ) { HD_OP_MODE_T previousOpMode = getPreviousOperationMode(); + DG_OP_MODE_T dgOperationMode = getDGOpMode(); + doorClosedRequired( FALSE, FALSE ); + syringeDetectionRequired( FALSE ); + // Set user alarm recovery actions allowed in this mode setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, FALSE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, FALSE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_END_TREATMENT, FALSE ); // Stop trimmer heater cmdStopDGTrimmerHeater(); + // If DG filling, abort it + if ( DG_MODE_FILL == dgOperationMode ) + { + cmdStopDGFill(); + } // Publish POST failure status to UI if fault triggered in Init/POST mode if ( MODE_INIT == previousOpMode ) { @@ -78,7 +90,7 @@ sendTreatmentLogDataToUI(); } - SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_MODE_CHANGE, 0, 0 ) + return faultState; } /*********************************************************************//** @@ -91,21 +103,27 @@ U32 execFaultMode( void ) { BOOL stop = isStopButtonPressed(); + DG_OP_MODE_T dgOperationMode = getDGOpMode(); #ifndef EMC_TEST_BUILD // Ensure all pumps are stopped signalBloodPumpHardStop(); signalDialInPumpHardStop(); signalDialOutPumpHardStop(); stopSyringePump(); - // Request trimmer heater turned off - cmdStopDGTrimmerHeater(); + // Ensure all valves are in safe position setValveAirTrap( STATE_CLOSED ); setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); setValvePosition( VBA, VALVE_POSITION_C_CLOSE ); setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); + + // If DG not stopped, stop it + if ( DG_MODE_GENE == dgOperationMode ) + { + cmdStopDG(); + } #else // TODO - EMC test code - remove later static U32 toggle = 0; @@ -120,7 +138,7 @@ { case 0: // Pumps and valves off setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - setDialInPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialInPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP, 0.0F ); setDialOutPumpTargetRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); @@ -137,14 +155,14 @@ case 2: // Pumps on, valves in pos A setBloodPumpTargetFlowRate( 500, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - setDialInPumpTargetFlowRate( 500, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialInPumpTargetFlowRate( 500, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP, 0.0F ); setDialOutPumpTargetRate( 500, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); break; default: // Should not get here, reset if we do toggle = 0; setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - setDialInPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialInPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP, 0.0F ); setDialOutPumpTargetRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); @@ -157,7 +175,7 @@ button_state = stop; #endif - return 0; // Fault mode has no sub-modes + return faultState; // TODO expand the states later } /*********************************************************************//**