Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -rde5a0d43bdef611d963d11855bc958a8d8899a09 -r8fdca8ef380555c6c93e30b517258988333ffd89 --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision de5a0d43bdef611d963d11855bc958a8d8899a09) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 8fdca8ef380555c6c93e30b517258988333ffd89) @@ -21,6 +21,7 @@ #include "Buttons.h" #include "DialInFlow.h" #include "DialOutFlow.h" +#include "FPGA.h" #endif #include "OperationModes.h" #include "ModeFault.h" @@ -58,6 +59,9 @@ *************************************************************************/ void transitionToFaultMode( void ) { +#ifdef EMC_TEST_BUILD // TODO - test code + enableValvesPIDControl(0); // enable valves +#endif } /************************************************************************* @@ -72,27 +76,54 @@ U32 execFaultMode( void ) { #ifdef EMC_TEST_BUILD // TODO - test code - static BOOL toggle = FALSE; + static U32 toggle = 0; static BOOL button_state = FALSE; BOOL stop = isStopButtonPressed(); if ( TRUE == stop ) { if ( stop != button_state ) { - toggle = ( toggle == TRUE ? FALSE : TRUE ); - if ( TRUE == toggle ) + toggle = INC_WRAP( toggle, 0, 3 ); + switch ( toggle ) { - 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 ); + case 0: // pumps and valves off + setDialyzerInletValvePosition( 0 ); + setDialyzerOutletValvePosition( 0 ); + setVenousBloodValvePosition( 0 ); + setArterialBloodValvePosition( 0 ); + break; + + case 1: // pumps on, valves off + 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 + setDialyzerInletValvePosition( 12000 ); + setDialyzerOutletValvePosition( 12000 ); + setVenousBloodValvePosition( 12000 ); + setArterialBloodValvePosition( 12000 ); + 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: // shouldn't 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 ); + setDialOutPumpTargetRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialyzerInletValvePosition( 0 ); + setDialyzerOutletValvePosition( 0 ); + setVenousBloodValvePosition( 0 ); + setArterialBloodValvePosition( 0 ); + break; } - else - { - 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 ); - } } } button_state = stop;