Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -red962b050e6b9714318a0b9034742efc2ccb9e4f -rd3afa76096a5835e791b1e1b380065c4db3d81a1 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision ed962b050e6b9714318a0b9034742efc2ccb9e4f) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision d3afa76096a5835e791b1e1b380065c4db3d81a1) @@ -84,7 +84,8 @@ static BOOL noCartSelfTestsResult; ///< Result of no cartridge self-tests. static NO_CART_SELF_TESTS_STATE_T currentNoCartSelfTestsState; ///< Current state of the no cartridge self-tests state machine. static U32 runPumpStartTime; ///< Beginning time when pumps start running -static BOOL hasPumpsStarted; ///< Flag indicates if pumps have started running for self-test. +static BOOL hasPumpsStarted; ///< Flag indicates pumps have started running for self-test. +static BOOL areValvesAndPumpsHomed; ///< Flag indicates valves and pumps have been homed. static BOOL drySelfTestsResult; ///< Result of dry self-tests. static DRY_SELF_TESTS_STATE_T currentDrySelfTestsState; ///< Current state of the dry self-tests state machine. @@ -111,8 +112,8 @@ static void handleNoCartSelfTestsStopRequest( void ); static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestsWaitForClosedDoor( void ); static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestPumpsState( void ); -static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestHomeValvesAndPumpState( void ); static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestLeakDetectorsState( SELF_TEST_STATUS_T *result ); +static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestHomeValvesAndPumpState( void ); static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestStoppedState( void ); static void handleDrySelfTestsStopRequest( void ); @@ -201,6 +202,7 @@ currentNoCartSelfTestsState = NO_CART_SELF_TESTS_START_STATE; runPumpStartTime = 0; hasPumpsStarted = FALSE; + areValvesAndPumpsHomed = FALSE; resetSelfTestsFlags(); } @@ -281,13 +283,6 @@ currentNoCartSelfTestsState = handleNoCartSelfTestHomeValvesAndPumpState(); break; - case NO_CART_SELF_TESTS_HOME_IDLE_STATE: - if ( ( FALSE == isDialInPumpRunning() ) && ( FALSE == isDialOutPumpRunning() ) && ( FALSE == isBloodPumpRunning() ) ) - { - currentNoCartSelfTestsState = NO_CART_SELF_TESTS_COMPLETE_STATE; - } - break; - case NO_CART_SELF_TESTS_STOPPED_STATE: currentNoCartSelfTestsState = handleNoCartSelfTestStoppedState(); break; @@ -649,48 +644,60 @@ /*********************************************************************//** * @brief - * The handleNoCartSelfTestHomeValvesAndPumpState function homes all valves - * and pumps. + * The handleNoCartSelfTestLeakDetectorsState function verify leak detectors status. * @details Inputs: none * @details Outputs: none + * @param result self-test result * @return the next state of no cartridge self-tests state machine *************************************************************************/ -static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestHomeValvesAndPumpState( void ) +static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestLeakDetectorsState( SELF_TEST_STATUS_T *result ) { - VALVE_T valve; + NO_CART_SELF_TESTS_STATE_T state = NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE; - for ( valve = VDI; valve < NUM_OF_VALVES; ++valve ) + if ( TRUE == getFPGABloodLeakDetectorStatus() ) { - homeValve( valve ); + setFPGASensorTest( BLOOD_LEAK_NORMAL_OPERATION ); + state = NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE; } + else + { + *result = SELF_TEST_STATUS_FAILED; + } - homeBloodPump(); - homeDialInPump(); - homeDialOutPump(); - - return NO_CART_SELF_TESTS_HOME_IDLE_STATE; + return state; } /*********************************************************************//** * @brief - * The handleNoCartSelfTestLeakDetectorsState function verify leak detectors status. + * The handleNoCartSelfTestHomeValvesAndPumpState function homes all valves + * and pumps. * @details Inputs: none * @details Outputs: none - * @param result self-test result * @return the next state of no cartridge self-tests state machine *************************************************************************/ -static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestLeakDetectorsState( SELF_TEST_STATUS_T *result ) +static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestHomeValvesAndPumpState( void ) { - NO_CART_SELF_TESTS_STATE_T state = NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE; + NO_CART_SELF_TESTS_STATE_T state = NO_CART_SELF_TESTS_HOME_VALVES_AND_PUMPS_STATE; - if ( TRUE == getFPGABloodLeakDetectorStatus() ) + if ( FALSE == areValvesAndPumpsHomed ) { - setFPGASensorTest( BLOOD_LEAK_NORMAL_OPERATION ); - state = NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE; + VALVE_T valve; + + for ( valve = VDI; valve < NUM_OF_VALVES; ++valve ) + { + homeValve( valve ); + } + + homeBloodPump(); + homeDialInPump(); + homeDialOutPump(); + + areValvesAndPumpsHomed = TRUE; } - else + + if ( ( FALSE == isDialInPumpRunning() ) && ( FALSE == isDialOutPumpRunning() ) && ( FALSE == isBloodPumpRunning() ) ) { - *result = SELF_TEST_STATUS_FAILED; + state = NO_CART_SELF_TESTS_COMPLETE_STATE; } return state;