Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -r30b1f6126c37f7b99cf699f63b4bcee9d1a1745f -rd3afa76096a5835e791b1e1b380065c4db3d81a1 --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 30b1f6126c37f7b99cf699f63b4bcee9d1a1745f) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision d3afa76096a5835e791b1e1b380065c4db3d81a1) @@ -78,7 +78,6 @@ #define BP_MAX_ROTOR_SPEED_ERROR_PERSIST ((1 * MS_PER_SECOND) / TASK_PRIORITY_INTERVAL) ///< Persist time (task intervals) blood pump rotor speed too fast error condition. #define BP_MAX_CURR_WHEN_STOPPED_MA 150.0 ///< Motor controller current should not exceed this when pump should be stopped -#define BP_MIN_CURR_WHEN_RUNNING_MA 150.0 ///< Motor controller current should always exceed this when pump should be running #define BP_MAX_CURR_WHEN_RUNNING_MA 2000.0 ///< Motor controller current should not exceed this when pump should be running #define BP_MAX_CURR_ERROR_DURATION_MS 2000 ///< Motor controller current errors persisting beyond this duration will trigger an alarm @@ -1208,7 +1207,7 @@ else { bpCurr = fabs( getMeasuredBloodPumpMCCurrent() ); - if ( ( bpCurr < BP_MIN_CURR_WHEN_RUNNING_MA ) || ( bpCurr > BP_MAX_CURR_WHEN_RUNNING_MA ) ) + if ( bpCurr > BP_MAX_CURR_WHEN_RUNNING_MA ) { bpCurrErrorDurationCtr += TASK_PRIORITY_INTERVAL; if ( bpCurrErrorDurationCtr > BP_MAX_CURR_ERROR_DURATION_MS ) Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -r30b1f6126c37f7b99cf699f63b4bcee9d1a1745f -rd3afa76096a5835e791b1e1b380065c4db3d81a1 --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 30b1f6126c37f7b99cf699f63b4bcee9d1a1745f) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision d3afa76096a5835e791b1e1b380065c4db3d81a1) @@ -73,7 +73,6 @@ #define DIP_MAX_CURR_WHEN_STOPPED_MA 150.0 ///< Motor controller current should not exceed this when pump should be stopped. -#define DIP_MIN_CURR_WHEN_RUNNING_MA 150.0 ///< Motor controller current should always exceed this when pump should be running. #define DIP_MAX_CURR_WHEN_RUNNING_MA 2000.0 ///< Motor controller current should not exceed this when pump should be running. #define DIP_MAX_CURR_ERROR_DURATION_MS 2000 ///< Motor controller current errors persisting beyond this duration will trigger an alarm. @@ -1165,7 +1164,7 @@ else { dipCurr = fabs( getMeasuredDialInPumpMCCurrent() ); - if ( ( dipCurr < DIP_MIN_CURR_WHEN_RUNNING_MA ) || ( dipCurr > DIP_MAX_CURR_WHEN_RUNNING_MA ) ) + if ( dipCurr > DIP_MAX_CURR_WHEN_RUNNING_MA ) { dipCurrErrorDurationCtr += TASK_PRIORITY_INTERVAL; if ( dipCurrErrorDurationCtr > DIP_MAX_CURR_ERROR_DURATION_MS ) Index: firmware/App/Controllers/DialOutFlow.c =================================================================== diff -u -rc282822f36836a8127f447c8ac5b8a50e851be63 -rd3afa76096a5835e791b1e1b380065c4db3d81a1 --- firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision c282822f36836a8127f447c8ac5b8a50e851be63) +++ firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision d3afa76096a5835e791b1e1b380065c4db3d81a1) @@ -72,7 +72,6 @@ #define DOP_DIRECTION_ERROR_PERSIST (250 / TASK_PRIORITY_INTERVAL) ///< Persist time (task intervals) pump direction error condition. #define DOP_MAX_CURR_WHEN_STOPPED_MA 150.0 ///< Motor controller current should not exceed this when pump should be stopped. -#define DOP_MIN_CURR_WHEN_RUNNING_MA 150.0 ///< Motor controller current should always exceed this when pump should be running. #define DOP_MAX_CURR_WHEN_RUNNING_MA 2000.0 ///< Motor controller current should not exceed this when pump should be running. #define DOP_MAX_CURR_ERROR_DURATION_MS 2000 ///< Motor controller current errors persisting beyond this duration will trigger an alarm. @@ -934,7 +933,7 @@ else { dopCurr = fabs( getMeasuredDialOutPumpMCCurrent() ); - if ( ( dopCurr < DOP_MIN_CURR_WHEN_RUNNING_MA ) || ( dopCurr > DOP_MAX_CURR_WHEN_RUNNING_MA ) ) + if ( dopCurr > DOP_MAX_CURR_WHEN_RUNNING_MA ) { dopCurrErrorDurationCtr += TASK_PRIORITY_INTERVAL; if ( dopCurrErrorDurationCtr > DOP_MAX_CURR_ERROR_DURATION_MS ) 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;