Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r125a27d5a3a116e7b7473ff180daf247270d8e57 -rb8d74fc5b07d0e62d841b4c5a786b2be4e593c63 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 125a27d5a3a116e7b7473ff180daf247270d8e57) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision b8d74fc5b07d0e62d841b4c5a786b2be4e593c63) @@ -117,6 +117,7 @@ void initPreTreatmentMode( void ) { currentPreTreatmentState = HD_PRE_TREATMENT_START_STATE; + currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_START_STATE; setUFVolStatus = FALSE; patientConnectionConfirm = FALSE; fillReservoirOneStartRequested = FALSE; @@ -496,6 +497,8 @@ if ( SAMPLE_WATER_COMPLETE_STATE == getSampleWaterState() ) #endif { + cmdDGSampleWater( SAMPLE_WATER_CMD_END ); + if ( SELF_TEST_STATUS_PASSED == getSampleWaterResult() ) { if ( ( DG_MODE_STAN == dgOpMode ) && ( DG_STANDBY_MODE_STATE_IDLE == dgSubMode ) ) Index: firmware/App/Modes/Prime.c =================================================================== diff -u -r125a27d5a3a116e7b7473ff180daf247270d8e57 -rb8d74fc5b07d0e62d841b4c5a786b2be4e593c63 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision 125a27d5a3a116e7b7473ff180daf247270d8e57) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision b8d74fc5b07d0e62d841b4c5a786b2be4e593c63) @@ -88,7 +88,7 @@ // ********** private function prototypes ********** static void resetPrimeFlags(); -static void handlePrimePauseRequest( void ); +static void setupForPrimePause( void ); static void broadcastPrimingStatus( void ); static void purgeAirValvesBloodPumpControl( void ); @@ -212,9 +212,6 @@ // Prime flags should be handled by now resetPrimeFlags(); - // Handle prime pause request - handlePrimePauseRequest(); - // Broadcast priming data broadcastPrimingStatus(); } @@ -282,23 +279,19 @@ /*********************************************************************//** * @brief - * The handlePrimePauseRequest function handles prime pause request. + * The setupForPrimePause function stop pumps handles prime pause request. * @details Inputs: none * @details Outputs: stop all pumps, switch to prime pause state. * @return none *************************************************************************/ -static void handlePrimePauseRequest( void ) +static void setupForPrimePause( void ) { - if ( ( TRUE == doesAlarmStatusIndicateStop() ) && ( HD_PRIME_PAUSE != currentPrimeState ) ) - { - signalDialOutPumpHardStop(); - signalDialInPumpHardStop(); - signalBloodPumpHardStop(); + signalDialOutPumpHardStop(); + signalDialInPumpHardStop(); + signalBloodPumpHardStop(); - primePauseStartTime = getMSTimerCount(); - previousPrimeState = currentPrimeState; - currentPrimeState = HD_PRIME_PAUSE; - } + primePauseStartTime = getMSTimerCount(); + previousPrimeState = currentPrimeState; } /*********************************************************************//** @@ -384,10 +377,18 @@ *************************************************************************/ static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeSalineSetupState( void ) { + HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_SALINE_PURGE_AIR_STATE; + purgeAirValvesBloodPumpControl(); purgeAirTimeOutStartTime = getMSTimerCount(); - return HD_PRIME_SALINE_PURGE_AIR_STATE; + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + setupForPrimePause(); + state = HD_PRIME_PAUSE; + } + + return state; } /*********************************************************************//** @@ -420,6 +421,12 @@ state = HD_PRIME_SALINE_CIRC_BLOOD_CIRCUIT_STATE; } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + setupForPrimePause(); + state = HD_PRIME_PAUSE; + } + return state; } @@ -449,6 +456,12 @@ state = HD_PRIME_RESERVOIR_ONE_FILL_COMPLETE_STATE; } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + setupForPrimePause(); + state = HD_PRIME_PAUSE; + } + return state; } @@ -486,6 +499,12 @@ #endif } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + setupForPrimePause(); + state = HD_PRIME_PAUSE; + } + return state; } @@ -522,6 +541,12 @@ SET_ALARM_WITH_1_U32_DATA( ALARM_ID_PRIME_DIALYSATE_DIALYZER_TIME_OUT, PRIME_DIALYSATE_DIALYZER_TIME_LIMIT ); } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + setupForPrimePause(); + state = HD_PRIME_PAUSE; + } + return state; } @@ -554,6 +579,12 @@ state = HD_PRIME_DIALYSATE_BYPASS_STATE; } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + setupForPrimePause(); + state = HD_PRIME_PAUSE; + } + return state; } @@ -590,6 +621,12 @@ SET_ALARM_WITH_1_U32_DATA( ALARM_ID_PRIME_DIALYSATE_BYPASS_TIME_OUT, PRIME_DIALYSATE_BYPASS_TIME_LIMIT ); } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + setupForPrimePause(); + state = HD_PRIME_PAUSE; + } + return state; } @@ -619,6 +656,12 @@ state = HD_PRIME_COMPLETE; } + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + setupForPrimePause(); + state = HD_PRIME_PAUSE; + } + return state; } Index: firmware/App/Modes/SampleWater.c =================================================================== diff -u -rb70bf4c5a7cdb4218d812546b3bc5d7dad152700 -rb8d74fc5b07d0e62d841b4c5a786b2be4e593c63 --- firmware/App/Modes/SampleWater.c (.../SampleWater.c) (revision b70bf4c5a7cdb4218d812546b3bc5d7dad152700) +++ firmware/App/Modes/SampleWater.c (.../SampleWater.c) (revision b8d74fc5b07d0e62d841b4c5a786b2be4e593c63) @@ -235,7 +235,6 @@ { state = SAMPLE_WATER_COMPLETE_STATE; sampleWaterResultEntered = FALSE; - cmdDGSampleWater( SAMPLE_WATER_CMD_END ); } if ( TRUE == sampleWaterStartRequested ) 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; } Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r08aa1ee4a1cc79526979153fa4759e1df3892203 -rb8d74fc5b07d0e62d841b4c5a786b2be4e593c63 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 08aa1ee4a1cc79526979153fa4759e1df3892203) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision b8d74fc5b07d0e62d841b4c5a786b2be4e593c63) @@ -532,7 +532,7 @@ * active. * @details Inputs: alarmStatus * @details Outputs: none - * @return TRUE if given alarm is active, FALSE if not + * @return TRUE if any alarm is active, FALSE if not *************************************************************************/ BOOL isAnyAlarmActive( void ) { Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r9055124b17389e04131b44c00915c33c72db3ae6 -rb8d74fc5b07d0e62d841b4c5a786b2be4e593c63 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 9055124b17389e04131b44c00915c33c72db3ae6) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision b8d74fc5b07d0e62d841b4c5a786b2be4e593c63) @@ -208,7 +208,12 @@ * @return none *************************************************************************/ void checkInFromUI( void ) -{ +{ + if ( FALSE == uiDidCommunicate ) + { // Start DG check-in timer when UI first communicates + timeOfLastDGCheckIn = getMSTimerCount(); + } + uiIsCommunicating = TRUE; timeOfLastUICheckIn = getMSTimerCount(); uiDidCommunicate = TRUE; @@ -935,11 +940,12 @@ { activateAlarmNoData( ALARM_ID_UI_COMM_TIMEOUT ); } - } - if ( TRUE == didTimeout( timeOfLastDGCheckIn, DG_COMM_TIMEOUT_IN_MS ) ) - { - activateAlarmNoData( ALARM_ID_DG_COMM_TIMEOUT ); - dgIsCommunicating = FALSE; + + if ( TRUE == didTimeout( timeOfLastDGCheckIn, DG_COMM_TIMEOUT_IN_MS ) ) + { + activateAlarmNoData( ALARM_ID_DG_COMM_TIMEOUT ); + dgIsCommunicating = FALSE; + } } }