Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -ra2bc96881a5fc3d8f779246b2abebf15a8de9384 -rccfd15568f1e3d304320c2babb2fd4bcf0413304 --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision a2bc96881a5fc3d8f779246b2abebf15a8de9384) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision ccfd15568f1e3d304320c2babb2fd4bcf0413304) @@ -1,27 +1,31 @@ /************************************************************************** * -* Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +* Copyright (c) 2019-2021 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) Quang Nguyen +* @date (last) 29-Jun-2021 * -* @author (original) Dara Navaei -* @date (original) 05-Nov-2019 +* @author (original) Dara Navaei +* @date (original) 05-Nov-2019 * ***************************************************************************/ #include "AlarmLamp.h" #include "BloodFlow.h" #include "Buttons.h" +#include "DGInterface.h" #include "DialInFlow.h" #include "DialOutFlow.h" #include "ModeFault.h" +#include "ModePostTreat.h" #include "OperationModes.h" +#include "SyringePump.h" +#include "SystemCommMessages.h" #include "Valves.h" /** @@ -42,7 +46,7 @@ *************************************************************************/ void initFaultMode( void ) { - // TODO - anything to do here? + // Nothing to do here } /*********************************************************************//** @@ -54,10 +58,25 @@ *************************************************************************/ void transitionToFaultMode( void ) { + HD_OP_MODE_T previousOpMode = getPreviousOperationMode(); + // 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(); + // Publish POST failure status to UI if fault triggered in Init/POST mode + if ( MODE_INIT == previousOpMode ) + { + sendPOSTFinalResult( FALSE ); + } + + if ( ( MODE_PRET == previousOpMode ) || ( MODE_TREA == previousOpMode ) ) + { + collectTreatmentLogData(); + sendTreatmentLogDataToUI(); + } } /*********************************************************************//** @@ -76,6 +95,7 @@ signalBloodPumpHardStop(); signalDialInPumpHardStop(); signalDialOutPumpHardStop(); + stopSyringePump(); // Ensure all valves are in safe position setValveAirTrap( STATE_CLOSED ); setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); @@ -91,35 +111,32 @@ { if ( stop != button_state ) { - toggle = INC_WRAP( toggle, 0, 3 ); + toggle = INC_WRAP( toggle, 0, 2 ); switch ( toggle ) { 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 ); + setDialOutPumpTargetRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); setValvePosition( VBA, VALVE_POSITION_C_CLOSE ); setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); break; - case 1: // Pumps on, valves off + case 1: // Pumps off, valves in pos A + setValvePosition( VDI, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( VDO, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( VBA, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( VBV, VALVE_POSITION_A_INSERT_EJECT ); + break; + + 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 ); setDialOutPumpTargetRate( 500, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); break; - case 2: // Pumps on, valves on - setValvePosition( VDI, VALVE_POSITION_B_OPEN ); - setValvePosition( VDO, VALVE_POSITION_B_OPEN ); - setValvePosition( VBA, VALVE_POSITION_B_OPEN ); - setValvePosition( VBV, VALVE_POSITION_B_OPEN ); - break; - - case 3: // Pumps off, valves on - setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - setDialInPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - setDialOutPumpTargetRate( 0, 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 ); @@ -136,7 +153,7 @@ button_state = stop; #endif - return 0; // TODO - return current state + return 0; // Fault mode has no sub-modes } /*********************************************************************//**