Index: firmware/App/Controllers/SyringePump.c =================================================================== diff -u -rcbaa57803fa8359407a799fca0cde6ae2c486bd7 -rcb832b3a86cc2a3147e8447f33fc99f34a2b0011 --- firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision cbaa57803fa8359407a799fca0cde6ae2c486bd7) +++ firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision cb832b3a86cc2a3147e8447f33fc99f34a2b0011) @@ -500,7 +500,7 @@ { heparinDeliveryState = HEPARIN_STATE_STOPPED; } - if ( ( SYRINGE_PUMP_OFF_STATE == syringePumpState ) && ( heparinDeliveryState != HEPARIN_STATE_OFF ) ) + if ( ( isSyringePumpHome() != TRUE ) && ( SYRINGE_PUMP_OFF_STATE == syringePumpState ) && ( heparinDeliveryState != HEPARIN_STATE_OFF ) ) { { heparinDeliveryState = HEPARIN_STATE_STOPPED; Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r9bf209fc5813b7e806f51f408ece77174a336c9b -rcb832b3a86cc2a3147e8447f33fc99f34a2b0011 --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 9bf209fc5813b7e806f51f408ece77174a336c9b) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision cb832b3a86cc2a3147e8447f33fc99f34a2b0011) @@ -306,9 +306,12 @@ BOOL result = FALSE; if ( valve < NUM_OF_VALVES ) - { - valvesStatus[ valve ].hasHomingBeenRequested = TRUE; - result = TRUE; + { // If haven't already homed the valves, home the valves + if ( valvesStatus[ valve ].hasValveBeenHomed != TRUE ) + { + valvesStatus[ valve ].hasHomingBeenRequested = TRUE; + result = TRUE; + } } else { Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -rcbaa57803fa8359407a799fca0cde6ae2c486bd7 -rcb832b3a86cc2a3147e8447f33fc99f34a2b0011 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision cbaa57803fa8359407a799fca0cde6ae2c486bd7) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision cb832b3a86cc2a3147e8447f33fc99f34a2b0011) @@ -30,10 +30,13 @@ #include "ModeTreatment.h" #include "ModeTreatmentParams.h" #include "OperationModes.h" +#include "Switches.h" +#include "SyringePump.h" #include "SystemComm.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "Timers.h" +#include "Valves.h" #ifdef EMC_TEST_BUILD // TODO - test code #include "FPGA.h" #endif @@ -64,6 +67,7 @@ // ********** private function prototypes ********** +static HD_STANDBY_STATE_T handleStandbyModeStartState( void ); static HD_STANDBY_STATE_T handleStandbyModeWaitForTreatmentState( void ); static HD_STANDBY_STATE_T handleStandbyModeWaitForDisinfectState( void ); @@ -160,7 +164,7 @@ switch ( currentStandbyState ) { case STANDBY_START_STATE: - currentStandbyState = STANDBY_WAIT_FOR_TREATMENT_STATE; + currentStandbyState = handleStandbyModeStartState();; break; case STANDBY_WAIT_FOR_TREATMENT_STATE: @@ -510,6 +514,46 @@ /*********************************************************************//** * @brief + * The handleStandbyModeStartState function handles the standby start state. + * This state waits for the door to be closed and then initiates homing of + * pumps and valves and transitions to the wait for treatment state. + * @details Inputs: + * @details Outputs: + * @return next state of the standby mode state machine + *************************************************************************/ +static HD_STANDBY_STATE_T handleStandbyModeStartState( void ) +{ + HD_STANDBY_STATE_T state = STANDBY_START_STATE; + + // Wait for door to be closed so we can home actuators + if ( STATE_CLOSED == getSwitchStatus( FRONT_DOOR ) ) + { + VALVE_T valve; + + // Home pumps and valves + for ( valve = VDI; valve < NUM_OF_VALVES; ++valve ) + { + homeValve( valve ); + } + homeBloodPump(); + homeDialInPump(); + homeDialOutPump(); + retractSyringePump(); + + // Go to wait for treatment state + state = STANDBY_WAIT_FOR_TREATMENT_STATE; + } + else + { + // Trigger door open alarm to prompt user to close the door + activateAlarmNoData( ALARM_ID_CARTRIDGE_DOOR_OPENED ); + } + + return state; +} + +/*********************************************************************//** + * @brief * The handleStandbyModeWaitForTreatmentState function handles wait for * treatment state. * @details Inputs: treatStartReqReceived Index: firmware/App/Modes/ModeTreatmentParams.c =================================================================== diff -u -r19a8bf98a7154e24c35da25225d4b55bf70ddd09 -rcb832b3a86cc2a3147e8447f33fc99f34a2b0011 --- firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision 19a8bf98a7154e24c35da25225d4b55bf70ddd09) +++ firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision cb832b3a86cc2a3147e8447f33fc99f34a2b0011) @@ -66,7 +66,7 @@ { CRITICAL_DATA_TYPE_U32, {.uInt=0}, {.uInt=60}, {.uInt=30} }, // TREATMENT_PARAM_BP_MEAS_INTERVAL { CRITICAL_DATA_TYPE_U32, {.uInt=50}, {.uInt=150}, {.uInt=75} }, // TREATMENT_PARAM_RINSEBACK_FLOW_RATE { CRITICAL_DATA_TYPE_S32, {.sInt=-300}, {.sInt=70}, {.sInt=-300} }, // TREATMENT_PARAM_ART_PRESSURE_LOW_LIMIT - { CRITICAL_DATA_TYPE_S32, {.sInt=-270}, {.sInt=0}, {.sInt=0} }, // TREATMENT_PARAM_ART_PRESSURE_HIGH_LIMIT + { CRITICAL_DATA_TYPE_S32, {.sInt=-270}, {.sInt=100}, {.sInt=100} }, // TREATMENT_PARAM_ART_PRESSURE_HIGH_LIMIT { CRITICAL_DATA_TYPE_S32, {.sInt=20}, {.sInt=570}, {.sInt=20} }, // TREATMENT_PARAM_VEN_PRESSURE_LOW_LIMIT { CRITICAL_DATA_TYPE_S32, {.sInt=50}, {.sInt=600}, {.sInt=400} }, // TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT { CRITICAL_DATA_TYPE_F32, {.sFlt=0.0}, {.sFlt=1.0}, {.sFlt=0.0} }, // TREATMENT_PARAM_HEPARIN_DISPENSE_RATE Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r9bf209fc5813b7e806f51f408ece77174a336c9b -rcb832b3a86cc2a3147e8447f33fc99f34a2b0011 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 9bf209fc5813b7e806f51f408ece77174a336c9b) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision cb832b3a86cc2a3147e8447f33fc99f34a2b0011) @@ -725,7 +725,7 @@ if ( TRUE == useHeparin ) { - if ( TRUE == isSyringePumpStopped() ) + if ( ( isSyringePumpHome() != TRUE ) && ( TRUE == isSyringePumpStopped() ) ) { retractSyringePump(); }