Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r9055124b17389e04131b44c00915c33c72db3ae6 -rb8d74fc5b07d0e62d841b4c5a786b2be4e593c63 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 9055124b17389e04131b44c00915c33c72db3ae6) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision b8d74fc5b07d0e62d841b4c5a786b2be4e593c63) @@ -121,15 +121,13 @@ static void resetSelfTestsFlags( void ); static void setupForSelfTestsStop( void ); -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( void ); static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestStartHomingState( void ); static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestHomeValvesAndPumpState( void ); static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestStoppedState( void ); -static void handleDrySelfTestsStopRequest( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestWaitForDoorCloseState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestUsedCartridgeCheckState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsSetupState( void ); @@ -138,7 +136,6 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestSyringePumpPrimeState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestStoppedState( void ); -static void handleWetSelfTestsStopRequest( void ); static WET_SELF_TESTS_STATE_T handleWetSelfTestStartState( void ); static WET_SELF_TESTS_STATE_T handleWetSelfTestSetupState( void ); static WET_SELF_TESTS_STATE_T handleWetSelfTestPrimeCheckState( SELF_TEST_STATUS_T *result ); @@ -201,6 +198,7 @@ signalBloodPumpHardStop(); signalDialInPumpHardStop(); signalDialOutPumpHardStop(); + stopSyringePump(); } /*********************************************************************//** @@ -296,9 +294,6 @@ break; } - // Transition to stopped state when alarm with stop property has been triggered - handleNoCartSelfTestsStopRequest(); - // Self-tests flags should be handled by now, reset if flags not handled with current state resetSelfTestsFlags(); @@ -422,9 +417,6 @@ break; } - // Transition to stopped state when alarm with stop property has been triggered - handleDrySelfTestsStopRequest(); - // Self-tests flags should be handled by now, reset if flags not handled with current state resetSelfTestsFlags(); @@ -541,9 +533,6 @@ break; } - // Transition to stopped state when alarm with stop property has been triggered - handleWetSelfTestsStopRequest(); - // Self-tests flags should be handled by now, reset if flags not handled with current state resetSelfTestsFlags(); @@ -567,24 +556,6 @@ /*********************************************************************//** * @brief - * The handleNoCartSelfTestsStopRequest function handles stop request from alarm - * and transition to stopped state. - * @details Inputs: none - * @details Outputs: none - * @return the next state of no cart self-tests state machine - *************************************************************************/ -static void handleNoCartSelfTestsStopRequest( void ) -{ - if ( TRUE == doesAlarmStatusIndicateStop() ) - { - currentNoCartSelfTestsState = NO_CART_SELF_TESTS_STOPPED_STATE; - - setupForSelfTestsStop(); - } -} - -/*********************************************************************//** - * @brief * The handleNoCartridgeWaitForClosedDoor function executes the wait for * door to be closed state of no cartridge self-tests state machine. * @details Inputs: none @@ -605,6 +576,12 @@ state = NO_CART_SELF_TESTS_OCCLUSION_SENSORS_STATE; } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + setupForSelfTestsStop(); + state = NO_CART_SELF_TESTS_STOPPED_STATE; + } + return state; } @@ -641,6 +618,12 @@ state = NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE; } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + setupForSelfTestsStop(); + state = NO_CART_SELF_TESTS_STOPPED_STATE; + } + return state; } @@ -669,6 +652,12 @@ SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_BLOOD_LEAK_SELF_TEST_FAILURE, (U32)bloodLeakDetector ); } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + setupForSelfTestsStop(); + state = NO_CART_SELF_TESTS_STOPPED_STATE; + } + return state; } @@ -682,6 +671,7 @@ *************************************************************************/ static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestStartHomingState( void ) { + NO_CART_SELF_TESTS_STATE_T state = NO_CART_SELF_TESTS_HOME_VALVES_AND_PUMPS_STATE; VALVE_T valve; for ( valve = VDI; valve < NUM_OF_VALVES; ++valve ) @@ -698,7 +688,13 @@ retractSyringePump(); } - return NO_CART_SELF_TESTS_HOME_VALVES_AND_PUMPS_STATE; + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + setupForSelfTestsStop(); + state = NO_CART_SELF_TESTS_STOPPED_STATE; + } + + return state; } /*********************************************************************//** @@ -725,6 +721,12 @@ state = NO_CART_SELF_TESTS_COMPLETE_STATE; } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + setupForSelfTestsStop(); + state = NO_CART_SELF_TESTS_STOPPED_STATE; + } + return state; } @@ -752,24 +754,6 @@ /*********************************************************************//** * @brief - * The handleDrySelfTestsStopRequest function handles stop request from alarm - * and transition to stopped state. - * @details Inputs: none - * @details Outputs: none - * @return the next state of dry self-tests state machine - *************************************************************************/ -static void handleDrySelfTestsStopRequest( void ) -{ - if ( TRUE == doesAlarmStatusIndicateStop() ) - { - setupForSelfTestsStop(); - - currentDrySelfTestsState = DRY_SELF_TESTS_STOPPED_STATE; - } -} - -/*********************************************************************//** - * @brief * The handleDrySelfTestWaitForDoorCloseState function makes sure door is * closed before starting self-tests. * @details Inputs: none @@ -786,6 +770,12 @@ state = DRY_SELF_TESTS_USED_CARTRIDGE_CHECK_STATE; } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = DRY_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + return state; } @@ -816,6 +806,12 @@ activateAlarmNoData( ALARM_ID_INSTALL_NEW_CARTRIDGE ); } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = DRY_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + return state; } @@ -829,18 +825,28 @@ *************************************************************************/ static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsSetupState( void ) { - previousNormalArterialPressure = getMeasuredArterialPressure(); - previousNormalVenousPressure = getMeasuredVenousPressure(); + DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_SENSORS_STATE; - setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); - setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); - setValvePosition( VBA, VALVE_POSITION_B_OPEN ); - setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); - setValveAirTrap( STATE_CLOSED ); - setBloodPumpTargetFlowRate( PUMP_SELF_TEST_FLOW_RATE_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - pressureSelfTestBloodPumpRunStartTime = getMSTimerCount(); + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = DRY_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + else + { + previousNormalArterialPressure = getMeasuredArterialPressure(); + previousNormalVenousPressure = getMeasuredVenousPressure(); - return DRY_SELF_TESTS_PRESSURE_SENSORS_STATE; + setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); + setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); + setValvePosition( VBA, VALVE_POSITION_B_OPEN ); + setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); + setValveAirTrap( STATE_CLOSED ); + setBloodPumpTargetFlowRate( PUMP_SELF_TEST_FLOW_RATE_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + pressureSelfTestBloodPumpRunStartTime = getMSTimerCount(); + } + + return state; } /*********************************************************************//** @@ -877,6 +883,12 @@ } } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = DRY_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + return state; } @@ -908,6 +920,12 @@ } } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = DRY_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + return state; } @@ -946,6 +964,12 @@ state = DRY_SELF_TESTS_COMPLETE_STATE; } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = DRY_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + return state; } @@ -972,24 +996,6 @@ /*********************************************************************//** * @brief - * The handleWetSelfTestsStopRequest function handles stop request from alarm - * and transition to stopped state. - * @details Inputs: none - * @details Outputs: none - * @return the next state of wet self-tests state machine - *************************************************************************/ -static void handleWetSelfTestsStopRequest( void ) -{ - if ( TRUE == doesAlarmStatusIndicateStop() ) - { - setupForSelfTestsStop(); - - currentWetSelfTestsState = WET_SELF_TESTS_STOPPED_STATE; - } -} - -/*********************************************************************//** - * @brief * The handleWetSelfTestStartState function handles setup state for wet * self-tests sub-mode. * @details Inputs: reservoir one weight @@ -1033,6 +1039,12 @@ } } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = WET_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + return state; } @@ -1056,6 +1068,12 @@ state = WET_SELF_TESTS_PRIME_CHECK_STATE; } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = WET_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + return state; } @@ -1086,6 +1104,12 @@ *result = SELF_TEST_STATUS_FAILED; } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = WET_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + return state; } @@ -1127,6 +1151,12 @@ } } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = WET_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + return state; } @@ -1153,6 +1183,12 @@ state = WET_SELF_TESTS_FIRST_DISPLACEMENT_VERIFY_STATE; } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = WET_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + return state; } @@ -1185,6 +1221,12 @@ } } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = WET_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + return state; } @@ -1226,6 +1268,12 @@ } } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = WET_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + return state; } @@ -1253,6 +1301,12 @@ state = WET_SELF_TESTS_SECOND_DISPLACEMENT_VERIFY_STATE; } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = WET_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + return state; } @@ -1285,6 +1339,12 @@ } } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = WET_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + return state; }