Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -rde5a0d43bdef611d963d11855bc958a8d8899a09 -ra1daba982e3117ce45437384e770b50cfda7b7a7 --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision de5a0d43bdef611d963d11855bc958a8d8899a09) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision a1daba982e3117ce45437384e770b50cfda7b7a7) @@ -21,78 +21,106 @@ #include "Buttons.h" #include "DialInFlow.h" #include "DialOutFlow.h" +#include "FPGA.h" #endif #include "OperationModes.h" #include "ModeFault.h" - /** - * @addtogroup HDFaultMode - * @{ - */ +/** + * @addtogroup HDFaultMode + * @{ + */ // ********** private data ********** // ********** private function prototypes ********** -/************************************************************************* - * @brief initFaultMode +/*********************************************************************//** + * @brief * The initFaultMode function initializes the Fault Mode module. * @details * Inputs : none * Outputs : Fault Mode module initialized. - * @param none * @return none *************************************************************************/ void initFaultMode( void ) { } -/************************************************************************* - * @brief transitionToFaultMode +/*********************************************************************//** + * @brief * The transitionToFaultMode function prepares for transition to fault mode. * @details * Inputs : none * Outputs : - * @param none * @return none *************************************************************************/ void transitionToFaultMode( void ) { +#ifdef EMC_TEST_BUILD // TODO - test code + enableValvesPIDControl(0); // enable valves +#endif } -/************************************************************************* - * @brief execFaultMode +/*********************************************************************//** + * @brief * The execFaultMode function executes the Fault Mode state machine. * @details * Inputs : none * Outputs : - * @param none * @return current state (sub-mode) *************************************************************************/ 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;