Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -rd3afa76096a5835e791b1e1b380065c4db3d81a1 -r27f3db92495948d4c1192421c1b0c20338c4a034 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision d3afa76096a5835e791b1e1b380065c4db3d81a1) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 27f3db92495948d4c1192421c1b0c20338c4a034) @@ -84,8 +84,7 @@ 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 pumps have started running for self-test. -static BOOL areValvesAndPumpsHomed; ///< Flag indicates valves and pumps have been homed. +static BOOL hasPumpsStarted; ///< Flag indicates if pumps have started running for self-test. static BOOL drySelfTestsResult; ///< Result of dry self-tests. static DRY_SELF_TESTS_STATE_T currentDrySelfTestsState; ///< Current state of the dry self-tests state machine. @@ -103,6 +102,7 @@ static BOOL isValvesSettingSent; ///< Flag indicates valve setting change has been send to DG. static BOOL selfTestsResumeRequested; ///< Flag indicates user requesting self-tests resume. +static BOOL selfTestsStopRequested; ///< Flag indicates alarm requesting to stop self-test. // ********** private function prototypes ********** @@ -112,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 handleNoCartSelfTestLeakDetectorsState( SELF_TEST_STATUS_T *result ); 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 handleNoCartSelfTestStoppedState( void ); static void handleDrySelfTestsStopRequest( void ); @@ -163,6 +163,19 @@ /*********************************************************************//** * @brief + * The signalStopPrime function signals self-tests to stop when an + * alarm with stop property has been triggered. + * @details Inputs: none + * @details Outputs: primeStopRequested + * @return none + *************************************************************************/ +void signalStopSelfTests( void ) +{ + selfTestsStopRequested = TRUE; +} + +/*********************************************************************//** + * @brief * The resetSelfTestsFlags function resets all self-tests signal flags. * @details Inputs: none * @details Outputs: signal flags set to FALSE @@ -171,6 +184,7 @@ static void resetSelfTestsFlags( void ) { selfTestsResumeRequested = FALSE; + selfTestsStopRequested = FALSE; } /*********************************************************************//** @@ -202,7 +216,6 @@ currentNoCartSelfTestsState = NO_CART_SELF_TESTS_START_STATE; runPumpStartTime = 0; hasPumpsStarted = FALSE; - areValvesAndPumpsHomed = FALSE; resetSelfTestsFlags(); } @@ -283,6 +296,13 @@ 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; @@ -311,19 +331,6 @@ /*********************************************************************//** * @brief - * The getNoCartSelfTestsState function returns the current state of no - * cartridge self-tests sub-mode. - * @details Inputs: currentNoCartSelfTestsState - * @details Outputs: none - * @return current no cartridge self-tests state - *************************************************************************/ -U32 getNoCartSelfTestsState( void ) -{ - return (U32)currentNoCartSelfTestsState; -} - -/*********************************************************************//** - * @brief * The isNoCartSelfTestsPassed function returns the status of no cartridge self-tests. * @details Inputs: none * @details Outputs: none @@ -434,19 +441,6 @@ /*********************************************************************//** * @brief - * The getDrySelfTestsState function returns the current state of dry self-tests sub-mode. - * @details Inputs: currentDrySelfTestsState - * @details Outputs: none - * @return current dry self-tests state - *************************************************************************/ -U32 getDrySelfTestsState( void ) -{ - return (U32)currentDrySelfTestsState; -} - - -/*********************************************************************//** - * @brief * The isDrySelfTestsPassed function returns the status of dry self-tests. * @details Inputs: none * @details Outputs: none @@ -575,11 +569,12 @@ *************************************************************************/ static void handleNoCartSelfTestsStopRequest( void ) { - if ( TRUE == doesAlarmStatusIndicateStop() ) + if ( TRUE == selfTestsStopRequested ) { - currentNoCartSelfTestsState = NO_CART_SELF_TESTS_STOPPED_STATE; - setupForSelfTestsStop(); + + currentNoCartSelfTestsState = NO_CART_SELF_TESTS_STOPPED_STATE; + selfTestsStopRequested = FALSE; } } @@ -644,60 +639,48 @@ /*********************************************************************//** * @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; + VALVE_T valve; - if ( TRUE == getFPGABloodLeakDetectorStatus() ) + for ( valve = VDI; valve < NUM_OF_VALVES; ++valve ) { - setFPGASensorTest( BLOOD_LEAK_NORMAL_OPERATION ); - state = NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE; + homeValve( valve ); } - else - { - *result = SELF_TEST_STATUS_FAILED; - } - return state; + homeBloodPump(); + homeDialInPump(); + homeDialOutPump(); + + return NO_CART_SELF_TESTS_HOME_IDLE_STATE; } /*********************************************************************//** * @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 ) { - NO_CART_SELF_TESTS_STATE_T state = NO_CART_SELF_TESTS_HOME_VALVES_AND_PUMPS_STATE; + NO_CART_SELF_TESTS_STATE_T state = NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE; - if ( FALSE == areValvesAndPumpsHomed ) + if ( TRUE == getFPGABloodLeakDetectorStatus() ) { - VALVE_T valve; - - for ( valve = VDI; valve < NUM_OF_VALVES; ++valve ) - { - homeValve( valve ); - } - - homeBloodPump(); - homeDialInPump(); - homeDialOutPump(); - - areValvesAndPumpsHomed = TRUE; + setFPGASensorTest( BLOOD_LEAK_NORMAL_OPERATION ); + state = NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE; } - - if ( ( FALSE == isDialInPumpRunning() ) && ( FALSE == isDialOutPumpRunning() ) && ( FALSE == isBloodPumpRunning() ) ) + else { - state = NO_CART_SELF_TESTS_COMPLETE_STATE; + *result = SELF_TEST_STATUS_FAILED; } return state; @@ -734,11 +717,12 @@ *************************************************************************/ static void handleDrySelfTestsStopRequest( void ) { - if ( TRUE == doesAlarmStatusIndicateStop() ) + if ( TRUE == selfTestsStopRequested ) { setupForSelfTestsStop(); currentDrySelfTestsState = DRY_SELF_TESTS_STOPPED_STATE; + selfTestsStopRequested = FALSE; } } @@ -930,11 +914,12 @@ *************************************************************************/ static void handleWetSelfTestsStopRequest( void ) { - if ( TRUE == doesAlarmStatusIndicateStop() ) + if ( TRUE == selfTestsStopRequested ) { setupForSelfTestsStop(); currentWetSelfTestsState = WET_SELF_TESTS_STOPPED_STATE; + selfTestsStopRequested = FALSE; } } @@ -985,7 +970,7 @@ } } -#ifdef SKIP_WET_SELF_TESTS +#ifdef SKIP_SELF_TESTS state = WET_SELF_TESTS_COMPLETE_STATE; #endif