Index: firmware/App/Modes/StateTxDialysis.c =================================================================== diff -u -r6b9b882169f108f9a5072dc60cdabbc1687aafcc -r83163b27c604072469c28623ba0e4ed9786e294a --- firmware/App/Modes/StateTxDialysis.c (.../StateTxDialysis.c) (revision 6b9b882169f108f9a5072dc60cdabbc1687aafcc) +++ firmware/App/Modes/StateTxDialysis.c (.../StateTxDialysis.c) (revision 83163b27c604072469c28623ba0e4ed9786e294a) @@ -440,8 +440,8 @@ * @brief * The handleDialysisUltrafiltrationPausedState function handles the * ultrafiltration paused state of the Dialysis state machine. - * @details \b Inputs: ufResumeRequested - * @details \b Outputs: ufResumeRequested + * @details \b Inputs: ufResumeRequested, fluidBolusRequested + * @details \b Outputs: ufResumeRequested, fluidBolusRequested * @return next Dialysis state. *************************************************************************/ static DIALYSIS_STATE_T handleDialysisUltrafiltrationPausedState( void ) @@ -454,6 +454,17 @@ transitionToDialysisState( DIALYSIS_UF_STATE ); result = DIALYSIS_UF_STATE; } + // When UI requests fluid bolus + else if ( TRUE == fluidBolusRequested ) + { + fluidBolusRequested = FALSE; + transitionToDialysisState( DIALYSIS_UF_FLUID_BOLUS_STATE ); + result = DIALYSIS_UF_FLUID_BOLUS_STATE; + } + else + { + // No action required. + } return result; } @@ -501,20 +512,17 @@ * @brief * The signalDialysisFluidBolusRequest function signals a fluid bolus * request to the Dialysis sub-mode. - * @details \b Inputs: currentDialysisState + * @details \b Inputs: none * @details \b Outputs: fluidBolusRequested * @return TRUE if request is accepted, FALSE if rejected. *************************************************************************/ BOOL signalDialysisFluidBolusRequest( void ) { BOOL result = FALSE; - // Only allow from UF state - if ( DIALYSIS_UF_STATE == currentDialysisState ) - { - fluidBolusRequested = TRUE; - result = TRUE; - } + // Only allow from both UF & UF pause states + fluidBolusRequested = TRUE; + result = TRUE; return result; } Index: firmware/App/Modes/StateTxPaused.c =================================================================== diff -u -r6b9b882169f108f9a5072dc60cdabbc1687aafcc -r83163b27c604072469c28623ba0e4ed9786e294a --- firmware/App/Modes/StateTxPaused.c (.../StateTxPaused.c) (revision 6b9b882169f108f9a5072dc60cdabbc1687aafcc) +++ firmware/App/Modes/StateTxPaused.c (.../StateTxPaused.c) (revision 83163b27c604072469c28623ba0e4ed9786e294a) @@ -398,8 +398,8 @@ TREATMENT_PAUSED_STATE_T result = state; BOOL bloodRecircBlocked = isBloodRecircBlocked(); BOOL dialysateRecircBlocked = isDialysateRecircBlocked(); - BOOL bldAlarmsStatus = FALSE; //( ( TRUE == isAlarmActive( ALARM_ID_HD_BLOOD_LEAK_RECOVERING_PLEASE_WAIT ) ) && - // ( FALSE == isAlarmActive( ALARM_ID_HD_BLOOD_LEAK_DETECTED ) ? TRUE : FALSE ) ); // TODO un-comment when BLD is coming up + BOOL bldAlarmsStatus = ( ( TRUE == isAlarmActive( ALARM_ID_DD_BLOOD_LEAK_RECOVERING_PLEASE_WAIT ) ) && + ( FALSE == isAlarmActive( ALARM_ID_DD_BLOOD_LEAK_DETECTED ) ? TRUE : FALSE ) ); if ( TRUE == bldAlarmsStatus ) { @@ -422,27 +422,29 @@ result = TREATMENT_PAUSED_FLUID_BOLUS_STATE; } // Both unblocked and not in recirculate both state - else if ( ( TREATMENT_PAUSED_NO_RECIRC_STATE != state ) && ( FALSE == dialysateRecircBlocked ) && ( FALSE == bloodRecircBlocked ) ) + else if ( ( TREATMENT_PAUSED_NO_RECIRC_STATE != state ) && ( FALSE == dialysateRecircBlocked ) && + ( FALSE == bloodRecircBlocked ) && ( FALSE == isFluidBolusActive() ) ) { result = TREATMENT_PAUSED_RECIRC_STATE; transitionToTxPausedState( result ); } // Both blocked and not in stopped state - else if ( ( TREATMENT_PAUSED_NO_RECIRC_STATE != state ) && ( TRUE == dialysateRecircBlocked ) && ( TRUE == bloodRecircBlocked ) ) + else if ( ( TREATMENT_PAUSED_NO_RECIRC_STATE != state ) && ( TRUE == dialysateRecircBlocked ) && + ( TRUE == bloodRecircBlocked ) && ( FALSE == isFluidBolusActive() ) ) { result = TREATMENT_PAUSED_NO_RECIRC_STATE; transitionToTxPausedState( result ); } // Dialysate recirculation blocked and not in blood recirc state else if ( ( TREATMENT_PAUSED_RECIRC_BLOOD_ONLY_STATE != state ) && ( TRUE == dialysateRecircBlocked ) && - ( FALSE == bloodRecircBlocked ) ) + ( FALSE == bloodRecircBlocked ) && ( FALSE == isFluidBolusActive() ) ) { result = TREATMENT_PAUSED_RECIRC_BLOOD_ONLY_STATE; transitionToTxPausedState( result ); } // Blood recirculation blocked and not in dialysate recirc state else if ( ( TREATMENT_PAUSED_RECIRC_DIALYSATE_ONLY_STATE != state ) && ( TRUE == bloodRecircBlocked ) && - ( FALSE == dialysateRecircBlocked ) ) + ( FALSE == dialysateRecircBlocked ) && ( FALSE == isFluidBolusActive() ) ) { result = TREATMENT_PAUSED_RECIRC_DIALYSATE_ONLY_STATE; transitionToTxPausedState( result ); Index: firmware/App/Services/FluidBolus.c =================================================================== diff -u -r6b9b882169f108f9a5072dc60cdabbc1687aafcc -r83163b27c604072469c28623ba0e4ed9786e294a --- firmware/App/Services/FluidBolus.c (.../FluidBolus.c) (revision 6b9b882169f108f9a5072dc60cdabbc1687aafcc) +++ firmware/App/Services/FluidBolus.c (.../FluidBolus.c) (revision 83163b27c604072469c28623ba0e4ed9786e294a) @@ -268,7 +268,7 @@ data.bolFluidVolumeMl = bolusFluidVolumeDelivered_mL; data.cumFluidVolumeMl = totalFluidVolumeDelivered_mL; data.fluidBolusState = currentFluidBolusState; - data.bolusPermitted = pubBolusPermitted; + data.bolusPermitted = ( FALSE == isFluidBolusActive() ) ? pubBolusPermitted : FALSE; broadcastData( MSG_ID_TD_FLUID_BOLUS_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&data, sizeof( FLUID_BOLUS_DATA_PAYLOAD_T ) ); @@ -605,7 +605,7 @@ } else { - //SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_MESSAGE_PAYLOAD_LENGTH, (U32)message->hdr.payloadLen ); + rejReason = REQUEST_REJECT_REASON_INVALID_REQUEST_FORMAT; } response.accepted = result;