Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -rba15d3e6250e8cd3cd3ef39cb64a93f91c3caba2 -r065601bf5b0fc1b31b10ab54c2711875923c369a --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision ba15d3e6250e8cd3cd3ef39cb64a93f91c3caba2) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 065601bf5b0fc1b31b10ab54c2711875923c369a) @@ -24,6 +24,7 @@ #include "ModeFault.h" #include "OperationModes.h" #include "SyringePump.h" +#include "SystemCommMessages.h" #include "Valves.h" /** @@ -60,6 +61,13 @@ 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 == getPreviousOperationMode() ) + { + sendPOSTFinalResult( FALSE ); + } } /*********************************************************************//** @@ -79,8 +87,6 @@ signalDialInPumpHardStop(); signalDialOutPumpHardStop(); stopSyringePump(); - // Stop trimmer heater - cmdStopDGTrimmerHeater(); // Ensure all valves are in safe position setValveAirTrap( STATE_CLOSED ); setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); @@ -96,35 +102,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 );