Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -red3e4d4180a4c0f08af285426c247aadfc685847 -r08aa1ee4a1cc79526979153fa4759e1df3892203 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision ed3e4d4180a4c0f08af285426c247aadfc685847) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 08aa1ee4a1cc79526979153fa4759e1df3892203) @@ -46,7 +46,6 @@ static BOOL patientConnectionConfirm; ///< Flag indicates user has confirmed patient connection complete. static BOOL treatmentStartRequested = FALSE; ///< Flag indicates user requests treatment begin. -static BOOL alarmActionStopReceived = FALSE; ///< Flag indicates an alarm w/ stop property was triggered. static BOOL alarmActionResumeReceived = FALSE; ///< Flag indicates alarm action resume received. static HD_PRE_TREATMENT_MODE_STATE_T currentPreTreatmentState; ///< Current state of pre-treatment mode state machine. @@ -103,6 +102,7 @@ setAlarmUserActionEnabled( ALARM_USER_ACTION_END_TREATMENT, TRUE ); initPreTreatmentMode(); + cmdStopDGTrimmerHeater(); } /*********************************************************************//** @@ -292,15 +292,22 @@ switch( action ) { case ALARM_ACTION_STOP: - alarmActionStopReceived = TRUE; + // Stop signal actively polled by mode/sub-mode/state break; case ALARM_ACTION_RESUME: alarmActionResumeReceived = TRUE; break; case ALARM_ACTION_END_TREATMENT: - requestNewOperationMode( MODE_STAN ); + if ( HD_PRE_TREATMENT_PRIME_STATE > currentPreTreatmentState ) + { + requestNewOperationMode( MODE_STAN ); + } + else + { + requestNewOperationMode( MODE_POST ); + } break; case ALARM_ACTION_ACK: @@ -354,7 +361,6 @@ confirmInstallRequested = FALSE; continueToTreatmentRequested = FALSE; - alarmActionStopReceived = FALSE; alarmActionResumeReceived = FALSE; } @@ -392,9 +398,10 @@ patientConnectionConfirm = FALSE; treatmentStartRequested = FALSE; + cmdStartDGTrimmerHeater(); + signalBloodPumpHardStop(); signalDialOutPumpHardStop(); - setDialInPumpTargetFlowRate( DIP_PATIENT_CONNECTION_FLOW_RATE_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); } @@ -415,6 +422,8 @@ if ( TRUE == isSampleWaterPassed() ) { state = HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE; + cmdStartDG(); + cmdSetDGDialysateTargetTemps( 39.0, 37.0 ); transitionToNoCartSelfTests(); } @@ -439,14 +448,10 @@ if ( TRUE == alarmActionResumeReceived ) { + alarmActionResumeReceived = FALSE; signalResumeSelfTests(); } - if ( TRUE == alarmActionStopReceived ) - { - signalStopSelfTests(); - } - execNoCartSelfTests(); if ( TRUE == isNoCartSelfTestsPassed() ) @@ -497,14 +502,10 @@ if ( TRUE == alarmActionResumeReceived ) { + alarmActionResumeReceived = FALSE; signalResumeSelfTests(); } - if ( TRUE == alarmActionStopReceived ) - { - signalStopSelfTests(); - } - execDrySelfTests(); if ( TRUE == isDrySelfTestsPassed() ) @@ -534,14 +535,10 @@ if ( TRUE == alarmActionResumeReceived ) { + alarmActionResumeReceived = FALSE; signalResumePrime(); } - if ( TRUE == alarmActionStopReceived ) - { - signalStopPrime(); - } - execPrime(); if ( TRUE == isPrimeCompleted() ) @@ -573,14 +570,10 @@ if ( TRUE == alarmActionResumeReceived ) { + alarmActionResumeReceived = FALSE; signalResumePreTreatmentRecirc(); } - if ( TRUE == alarmActionStopReceived ) - { - signalStopPreTreatmentRecirc(); - } - execPreTreatmentRecirc(); if ( TRUE == continueToTreatmentRequested ) Index: firmware/App/Modes/ModePreTreat.h =================================================================== diff -u -red3e4d4180a4c0f08af285426c247aadfc685847 -r08aa1ee4a1cc79526979153fa4759e1df3892203 --- firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision ed3e4d4180a4c0f08af285426c247aadfc685847) +++ firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision 08aa1ee4a1cc79526979153fa4759e1df3892203) @@ -54,6 +54,7 @@ void setUserSetUFVolumeStatus( BOOL status ); // Set status that indicates UF volume setting has been set void signalUserConfirmPatientConnection( void ); // Signal that user confirms patient connection has been completed BOOL signalUserStartTreatment( void ); // Signal that user requests to start treatment + void signalAlarmActionToPreTreatmentMode( ALARM_ACTION_T action ); // Execute alarm action as appropriate for pre-treatment mode /**@}*/ Index: firmware/App/Modes/PreTreatmentRecirc.c =================================================================== diff -u -r4add377f60d45effbdc064b110a59c1b8afd0ab8 -r08aa1ee4a1cc79526979153fa4759e1df3892203 --- firmware/App/Modes/PreTreatmentRecirc.c (.../PreTreatmentRecirc.c) (revision 4add377f60d45effbdc064b110a59c1b8afd0ab8) +++ firmware/App/Modes/PreTreatmentRecirc.c (.../PreTreatmentRecirc.c) (revision 08aa1ee4a1cc79526979153fa4759e1df3892203) @@ -44,7 +44,6 @@ // ********** private data ********** static PRE_TREATMENT_RECIRC_STATE_T currentPreTreatmentRecircState; ///< Current state of the pre-treatment recirculate state machine. -static BOOL recircStopRequested; ///< Flag indicates alarm requesting to stop pre-treatment recirculate. static BOOL recircResumeRequested; ///< Flag indicates alarm requesting to resume pre-treatment recirculate. // ********** private function prototypes ********** @@ -130,19 +129,6 @@ /*********************************************************************//** * @brief - * The signalStopPreTreatmentRecirc function signals the pre-treatment - * recirculate sub-mode to stop when an alarm with stop property has been triggered. - * @details Inputs: none - * @details Outputs: recircStopRequested - * @return none - *************************************************************************/ -void signalStopPreTreatmentRecirc( void ) -{ - recircStopRequested = TRUE; -} - -/*********************************************************************//** - * @brief * The resetPreTreatmentRecircFlags function resets all pre-treatment recirculate * signal flags. * @details Inputs: none @@ -151,7 +137,6 @@ *************************************************************************/ static void resetPreTreatmentRecircFlags( void ) { - recircStopRequested = FALSE; recircResumeRequested = FALSE; } @@ -192,14 +177,13 @@ { PRE_TREATMENT_RECIRC_STATE_T state = PRE_TREATMENT_RECIRC_STATE; - if ( TRUE == recircStopRequested ) + if ( TRUE == doesAlarmStatusIndicateStop() ) { signalDialOutPumpHardStop(); signalDialInPumpHardStop(); signalBloodPumpHardStop(); cmdStopDGTrimmerHeater(); - recircStopRequested = FALSE; state = PRE_TREATMENT_RECIRC_STOPPED_STATE; } Index: firmware/App/Modes/PreTreatmentRecirc.h =================================================================== diff -u -r4add377f60d45effbdc064b110a59c1b8afd0ab8 -r08aa1ee4a1cc79526979153fa4759e1df3892203 --- firmware/App/Modes/PreTreatmentRecirc.h (.../PreTreatmentRecirc.h) (revision 4add377f60d45effbdc064b110a59c1b8afd0ab8) +++ firmware/App/Modes/PreTreatmentRecirc.h (.../PreTreatmentRecirc.h) (revision 08aa1ee4a1cc79526979153fa4759e1df3892203) @@ -39,7 +39,6 @@ void execPreTreatmentRecirc( void ); void signalResumePreTreatmentRecirc( void ); -void signalStopPreTreatmentRecirc( void ); /**@}*/ Index: firmware/App/Modes/Prime.c =================================================================== diff -u -rc0445144841904d5a6ea9d37af639e138e6a86b0 -r08aa1ee4a1cc79526979153fa4759e1df3892203 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision c0445144841904d5a6ea9d37af639e138e6a86b0) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision 08aa1ee4a1cc79526979153fa4759e1df3892203) @@ -85,7 +85,6 @@ static U32 primeStatusBroadcastTimerCounter; ///< Prime status data broadcast timer counter used to schedule when to transmit data. static BOOL primeStartRequested; ///< Flag indicates user requesting to start prime. -static BOOL primeStopRequested; ///< Flag indicates alarm requesting to stop prime. static BOOL primeResumeRequested; ///< Flag indicates user requesting prime resume. static BOOL reservoirFilledStatus[ NUM_OF_DG_RESERVOIRS ]; ///< Flag indicates a reservoir has been filled. @@ -169,8 +168,6 @@ switch ( currentPrimeState ) { case HD_PRIME_START_STATE: - cmdStartDG(); - cmdSetDGDialysateTargetTemps( 39.0, 37.0 ); cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); #ifdef SKIP_PRIMING currentPrimeState = HD_PRIME_RESERVOIR_ONE_FILL_COMPLETE_STATE; @@ -304,19 +301,6 @@ /*********************************************************************//** * @brief - * The signalStopPrime function signals the prime sub-mode to stop when an - * alarm with stop property has been triggered. - * @details Inputs: none - * @details Outputs: primeStopRequested - * @return none - *************************************************************************/ -void signalStopPrime( void ) -{ - primeStopRequested = TRUE; -} - -/*********************************************************************//** - * @brief * The resetPrimeFlags function resets all prime signal flags. * @details Inputs: none * @details Outputs: signal flags set to FALSE @@ -326,7 +310,6 @@ { primeStartRequested = FALSE; primeResumeRequested = FALSE; - primeStopRequested = FALSE; } /*********************************************************************//** @@ -338,13 +321,12 @@ *************************************************************************/ static void handlePrimePauseRequest( void ) { - if ( ( TRUE == primeStopRequested ) && ( HD_PRIME_PAUSE != currentPrimeState ) ) + if ( ( TRUE == doesAlarmStatusIndicateStop() ) && ( HD_PRIME_PAUSE != currentPrimeState ) ) { signalDialOutPumpHardStop(); signalDialInPumpHardStop(); signalBloodPumpHardStop(); - primeStopRequested = FALSE; primePauseStartTime = getMSTimerCount(); previousPrimeState = currentPrimeState; currentPrimeState = HD_PRIME_PAUSE; @@ -773,16 +755,11 @@ { HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_WET_SELF_TESTS_STATE; - if ( TRUE == primeStopRequested ) + if ( TRUE == primeResumeRequested ) { signalResumeSelfTests(); } - if ( TRUE == primeResumeRequested ) - { - signalStopSelfTests(); - } - execWetSelfTests(); if ( TRUE == isWetSelfTestsPassed() ) Index: firmware/App/Modes/Prime.h =================================================================== diff -u -rc0445144841904d5a6ea9d37af639e138e6a86b0 -r08aa1ee4a1cc79526979153fa4759e1df3892203 --- firmware/App/Modes/Prime.h (.../Prime.h) (revision c0445144841904d5a6ea9d37af639e138e6a86b0) +++ firmware/App/Modes/Prime.h (.../Prime.h) (revision 08aa1ee4a1cc79526979153fa4759e1df3892203) @@ -54,7 +54,6 @@ void signalStartPrime( void ); void signalResumePrime( void ); -void signalStopPrime( void ); /**@}*/ Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r4add377f60d45effbdc064b110a59c1b8afd0ab8 -r08aa1ee4a1cc79526979153fa4759e1df3892203 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 4add377f60d45effbdc064b110a59c1b8afd0ab8) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 08aa1ee4a1cc79526979153fa4759e1df3892203) @@ -137,7 +137,6 @@ 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 ********** @@ -198,19 +197,6 @@ /*********************************************************************//** * @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 @@ -219,7 +205,6 @@ static void resetSelfTestsFlags( void ) { selfTestsResumeRequested = FALSE; - selfTestsStopRequested = FALSE; } /*********************************************************************//** @@ -630,12 +615,11 @@ *************************************************************************/ static void handleNoCartSelfTestsStopRequest( void ) { - if ( TRUE == selfTestsStopRequested ) + if ( TRUE == doesAlarmStatusIndicateStop() ) { - setupForSelfTestsStop(); - currentNoCartSelfTestsState = NO_CART_SELF_TESTS_STOPPED_STATE; - selfTestsStopRequested = FALSE; + + setupForSelfTestsStop(); } } @@ -778,12 +762,11 @@ *************************************************************************/ static void handleDrySelfTestsStopRequest( void ) { - if ( TRUE == selfTestsStopRequested ) + if ( TRUE == doesAlarmStatusIndicateStop() ) { setupForSelfTestsStop(); currentDrySelfTestsState = DRY_SELF_TESTS_STOPPED_STATE; - selfTestsStopRequested = FALSE; } } @@ -975,12 +958,11 @@ *************************************************************************/ static void handleWetSelfTestsStopRequest( void ) { - if ( TRUE == selfTestsStopRequested ) + if ( TRUE == doesAlarmStatusIndicateStop() ) { setupForSelfTestsStop(); currentWetSelfTestsState = WET_SELF_TESTS_STOPPED_STATE; - selfTestsStopRequested = FALSE; } } Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r401c4027b0e59182771f0c620465b34579f203f5 -r08aa1ee4a1cc79526979153fa4759e1df3892203 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 401c4027b0e59182771f0c620465b34579f203f5) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 08aa1ee4a1cc79526979153fa4759e1df3892203) @@ -543,6 +543,19 @@ /*********************************************************************//** * @brief + * The doesAlarmStatusIndicateStop function determines whether any currently + * active alarm has stop property. + * @details Inputs: alarmStatus + * @details Outputs: none + * @return TRUE if any active alarm has stop property, FALSE if not + *************************************************************************/ +BOOL doesAlarmStatusIndicateStop( void ) +{ + return alarmStatus.stop; +} + +/*********************************************************************//** + * @brief * The getCurrentAlarmStatePriority function determines the current alarm * state priority (NONE, LOW, MEDIUM, or HIGH). * @details Inputs: alarmStatus Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r401c4027b0e59182771f0c620465b34579f203f5 -r08aa1ee4a1cc79526979153fa4759e1df3892203 --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 401c4027b0e59182771f0c620465b34579f203f5) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 08aa1ee4a1cc79526979153fa4759e1df3892203) @@ -263,6 +263,7 @@ void signalAlarmUserActionInitiated( ALARM_USER_ACTION_T action ); BOOL isAlarmActive( ALARM_ID_T alarm ); BOOL isAnyAlarmActive( void ); +BOOL doesAlarmStatusIndicateStop( void ); ALARM_PRIORITY_T getCurrentAlarmStatePriority( void ); BOOL isAlarmRecoverable( ALARM_ID_T alarm ); void setAlarmAudioVolume( U32 volumeLevel );