Index: firmware/App/Modes/StateTxPaused.c =================================================================== diff -u -r1abc0349c736a70fb56db6895947abfbba0eee22 -r6b9b882169f108f9a5072dc60cdabbc1687aafcc --- firmware/App/Modes/StateTxPaused.c (.../StateTxPaused.c) (revision 1abc0349c736a70fb56db6895947abfbba0eee22) +++ firmware/App/Modes/StateTxPaused.c (.../StateTxPaused.c) (revision 6b9b882169f108f9a5072dc60cdabbc1687aafcc) @@ -51,7 +51,6 @@ static OVERRIDE_U32_T treatmentPausedPublishInterval; ///< Interval (in task intervals) at which to publish treatment paused state data to CAN bus. static TREATMENT_PAUSED_STATE_T pauseBolusResumeState; ///< Treatment pause sub-state prior to bolus. static BOOL fluidBolusRequested; ///< Flag indicating fluid bolus has been requested by user. -static BOOL bolusStarted; ///< Flag indicating fluid bolus start signal has been sent. // ********** private function prototypes ********** @@ -85,7 +84,6 @@ treatmentPausedPublishInterval.override = OVERRIDE_RESET; fluidBolusRequested = FALSE; - bolusStarted = FALSE; } /*********************************************************************//** @@ -137,9 +135,6 @@ // coming back to stop state via non-alarm path, so no audio - just want alarm for its options signalAlarmSilence( ALARM_SILENCE_CMD_CANCEL ); } - - // Set if bolus is permitted or not. - setBolusPermitted( isBolusAllowedByActiveAlarms() ); } /*********************************************************************//** @@ -155,13 +150,6 @@ { TREATMENT_PAUSED_STATE_T priorSubState = currentTxPausedState; - if ( TRUE == fluidBolusRequested ) - { - fluidBolusRequested = FALSE; - pauseBolusResumeState = currentTxPausedState; - currentTxPausedState = TREATMENT_PAUSED_FLUID_BOLUS_STATE; - } - switch ( currentTxPausedState ) { case TREATMENT_PAUSED_RECIRC_STATE: @@ -315,54 +303,48 @@ * the user requests a new bolus from the paused state. * Monitors the permitted alarm set every tick — aborts the bolus if a * non-permitted alarm becomes active. - * @details \b Inputs: bolusStarted - * @details \b Outputs: currentTxPausedState, bolusStarted + * @details \b Inputs: none + * @details \b Outputs: currentTxPausedState * @return next treatment paused state. *************************************************************************/ static TREATMENT_PAUSED_STATE_T handleTreatmentPausedFluidBolusState( void ) { - TREATMENT_PAUSED_STATE_T state = TREATMENT_PAUSED_FLUID_BOLUS_STATE; + TREATMENT_PAUSED_STATE_T result = TREATMENT_PAUSED_FLUID_BOLUS_STATE; - // Start fluid bolus if not started - if ( FALSE == bolusStarted ) + // Monitor permitted alarms every tick + if ( ( TRUE == isFluidBolusActive() ) && ( FALSE == isBolusAllowedByActiveAlarms() ) ) { - bolusStarted = signalStartFluidBolus( getTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW ) ); + signalAbortFluidBolus(); + setBolusPermitted( FALSE ); } - else - { - // Monitor permitted alarms every tick - if ( ( TRUE == isFluidBolusActive() ) && ( FALSE == isBolusAllowedByActiveAlarms() ) ) - { - signalAbortFluidBolus(); - setBolusPermitted( FALSE ); - } - // Return to pre-bolus sub-state upon bolus complete or abort - if ( FALSE == isFluidBolusActive() ) - { - bolusStarted = FALSE; - state = pauseBolusResumeState; - transitionToTxPausedState( state ); - } + // Return to pre-bolus sub-state upon bolus complete or abort + if ( FALSE == isFluidBolusActive() ) + { + result = handleTreatmentPausedAlarmsAndSignals( pauseBolusResumeState ); } - return state; + return result; } /*********************************************************************//** * @brief * The signalPauseFluidBolusRequest function handles a fluid bolus request - * while in the Treatment Paused state. - * @details \b Inputs: none + * while in the Treatment Paused state. Bolus request is rejected while in + * Recover blood detect state. + * @details \b Inputs: currentTxPausedState * @details \b Outputs: fluidBolusRequested * @return TRUE if request is accepted, FALSE if rejected. *************************************************************************/ BOOL signalPauseTreatFluidBolusRequest( void ) { BOOL result = FALSE; - fluidBolusRequested = TRUE; - result = TRUE; + if ( TREATMENT_PAUSED_RECOVER_BLOOD_DETECT_STATE != currentTxPausedState ) + { + fluidBolusRequested = TRUE; + result = TRUE; + } return result; } @@ -429,8 +411,18 @@ } else { + // Handle fluid bolus request from any paused sub-state + if ( TRUE == fluidBolusRequested ) + { + fluidBolusRequested = FALSE; + // State prior to bolus + pauseBolusResumeState = state; + // Start fluid bolus if not started + signalStartFluidBolus( getTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW ) ); + result = TREATMENT_PAUSED_FLUID_BOLUS_STATE; + } // Both unblocked and not in recirculate both state - if ( ( TREATMENT_PAUSED_NO_RECIRC_STATE != state ) && ( FALSE == dialysateRecircBlocked ) && ( FALSE == bloodRecircBlocked ) ) + else if ( ( TREATMENT_PAUSED_NO_RECIRC_STATE != state ) && ( FALSE == dialysateRecircBlocked ) && ( FALSE == bloodRecircBlocked ) ) { result = TREATMENT_PAUSED_RECIRC_STATE; transitionToTxPausedState( result );