Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -re2cda12dfbedc1b491efff3d5f76dc6743974feb -r56ae47b6766bed3f138fa3f1989431d7a439ea7a --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision e2cda12dfbedc1b491efff3d5f76dc6743974feb) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 56ae47b6766bed3f138fa3f1989431d7a439ea7a) @@ -81,7 +81,6 @@ { U32 requestedTxDurationMins; ///< Requested treatment duration from the user in minutes. F32 newUFRateMLPM; ///< New calculated UF rate in mL/Min. - BOOL isUFRateConfInProgress; ///< Boolean flag to indicate whether a new UF rate confirmation has been requested. } TREATMENT_DURATION_RQST_T; // ********** private data ********** @@ -158,7 +157,6 @@ static TREATMENT_STATE_T handleTreatmentEndState( void ); static void resetSignalFlags( void ); static void resetAlarmSignalFlags( void ); -static void checkUFRateConfirmationMessageFromUI( void ); /*********************************************************************//** * @brief @@ -213,7 +211,6 @@ txDurationRequest.requestedTxDurationMins = 0; txDurationRequest.newUFRateMLPM = 0.0F; - txDurationRequest.isUFRateConfInProgress = FALSE; // reset dialysate temperature alarm persistences prior to starting a treatment. resetPersistentAlarmTimer( ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_SAFETY_TEMP ); @@ -805,8 +802,6 @@ U32 msSinceLast = calcTimeBetween( lastTreatmentTimeStamp, newTime ); DIALYSIS_STATE_T dialysisState = getDialysisState(); - checkUFRateConfirmationMessageFromUI(); - // Update treatment time (unless delivering a saline bolus or is in blood leak zeroing state other than flush reservoir to DPi state) switch ( dialysisState ) { @@ -1103,20 +1098,25 @@ // If the UF volume in the treatment is 0 then send the response back to UI isResp2UINeeded = FALSE; + // Store the proposed treatment duration and the calculated new UF rate until the user approves it txDurationRequest.requestedTxDurationMins = treatmentTime; txDurationRequest.newUFRateMLPM = newUFRateMLPM; - txDurationRequest.isUFRateConfInProgress = TRUE; genericConfRequest.requestID = (U32)GENERIC_CONFIRM_ID_UF_RATE_CHANGE_IN_TX_DURATION_CHANGE; genericConfRequest.requestType = (U32)GENERIC_CONFIRM_CMD_REQUEST_OPEN; genericConfRequest.rejectReason = 0; - genericConfRequest.genericPayload1 = txDurationRequest.newUFRateMLPM; + genericConfRequest.genericPayload1 = ( txDurationRequest.newUFRateMLPM * (F32)MIN_PER_HOUR ) / (F32)ML_PER_LITER; // Convert to L/hr for UI genericConfRequest.genericPayload2 = 0.0F; genericConfRequest.genericPayload3 = 0.0F; genericConfRequest.genericPayload4 = 0.0F; - sendConfirmationRequest( &genericConfRequest ); + addConfirmationRequest( &genericConfRequest ); } + else + { + // Update the treatment time since there is not UF rate chnage that needs approval + presTreatmentTimeSecs = treatmentTime * SEC_PER_MIN; + } } else { @@ -1562,6 +1562,49 @@ /*********************************************************************//** * @brief + * The handleUFRateConfirmationMessageFromUI function handles the UF rate + * message received from UI. It checks whether the accept or reject needs + * to be handled. + * @details Inputs: txDurationRequest + * @details Outputs: presTreatmentTimeSecs, presUFRate, txDurationRequest, + * presMaxUFVolumeML + * @return none + *************************************************************************/ +void handleUFRateConfirmationMessageFromUI( void ) +{ + BOOL result = FALSE; + CONFIRMATION_REQUEST_STATUS_T status = getConfirmationRequestStatus( GENERIC_CONFIRM_ID_UF_RATE_CHANGE_IN_TX_DURATION_CHANGE ); + + if ( ( CONFIRMATION_REQUEST_STATUS_ACCEPTED == status ) || ( CONFIRMATION_REQUEST_STATUS_REJECTED == status ) ) + { + if ( CONFIRMATION_REQUEST_STATUS_ACCEPTED == status ) + { + result = TRUE; + sendTreatmentLogEventData( TREATMENT_DURATION_CHANGE_EVENT, ( presTreatmentTimeSecs / SEC_PER_MIN ), txDurationRequest.requestedTxDurationMins ); + presTreatmentTimeSecs = txDurationRequest.requestedTxDurationMins * SEC_PER_MIN; + presUFRate = txDurationRequest.newUFRateMLPM; + setTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME, ( presMaxUFVolumeML / (F32)ML_PER_LITER ) ); + setTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION, ( presTreatmentTimeSecs / SEC_PER_MIN ) ); + setDialysisDialInFlowAndUFRate( getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presMaxUFVolumeML, presUFRate ); + signalInitiatePressureStabilization( USE_NORMAL_STABILIZATION_PERIOD ); + } + + // Regardless of accept or reject there is no reject reason. + sendChangeTreatmentDurationResponse( result, 0, ( presTreatmentTimeSecs / SEC_PER_MIN ), presMaxUFVolumeML ); + // Send new ranges for settings + treatmentParamsRangesBroadcastTimerCtr = getU32OverrideValue( &treatmentParamRangesPublishInterval ); + broadcastTreatmentSettingsRanges(); + // Send time/state data immediately for UI update + broadcastTreatmentTimeAndState(); + + // Done with treatment duration changes whether they were accepted or rejected. + txDurationRequest.newUFRateMLPM = 0.0F; + txDurationRequest.requestedTxDurationMins = 0; + } +} + +/*********************************************************************//** + * @brief * The broadcastTreatmentSettingsRanges function computes and broadcasts * updated treatment parameter ranges that the user may change during treatment. * It is assumed that prescription settings have already been set prior to calling @@ -1717,54 +1760,7 @@ endTreatmentAlarmResponseRequest = FALSE; } -/*********************************************************************//** - * @brief - * The checkUFRateConfirmationMessageFromUI function checks whether a response - * from UI has been received to see if the new UF rate due to change of - * the treatment duration is accepted or rejected. - * @details Inputs: txDurationRequest - * @details Outputs: presTreatmentTimeSecs, presUFRate, txDurationRequest, - * presMaxUFVolumeML - * @return none - *************************************************************************/ -static void checkUFRateConfirmationMessageFromUI( void ) -{ - if ( TRUE == txDurationRequest.isUFRateConfInProgress ) - { - BOOL result = FALSE; - CONFIRMATION_REQUEST_STATUS_T status = getConfirmationRequestStatus( GENERIC_CONFIRM_ID_UF_RATE_CHANGE_IN_TX_DURATION_CHANGE ); - if ( ( CONFIRMATION_REQUEST_STATUS_ACCEPTED == status ) || ( CONFIRMATION_REQUEST_STATUS_REJECTED == status ) ) - { - if ( CONFIRMATION_REQUEST_STATUS_ACCEPTED == status ) - { - result = TRUE; - sendTreatmentLogEventData( TREATMENT_DURATION_CHANGE_EVENT, ( presTreatmentTimeSecs / SEC_PER_MIN ), txDurationRequest.requestedTxDurationMins ); - presTreatmentTimeSecs = txDurationRequest.requestedTxDurationMins * SEC_PER_MIN; - presUFRate = txDurationRequest.newUFRateMLPM; - setTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME, ( presMaxUFVolumeML / (F32)ML_PER_LITER ) ); - setTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION, ( presTreatmentTimeSecs / SEC_PER_MIN ) ); - setDialysisDialInFlowAndUFRate( getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presMaxUFVolumeML, presUFRate ); - signalInitiatePressureStabilization( USE_NORMAL_STABILIZATION_PERIOD ); - } - - // Regardless of accept or reject there is no reject reason. - sendChangeTreatmentDurationResponse( result, 0, ( presTreatmentTimeSecs / SEC_PER_MIN ), presMaxUFVolumeML ); - // Send new ranges for settings - treatmentParamsRangesBroadcastTimerCtr = getU32OverrideValue( &treatmentParamRangesPublishInterval ); - broadcastTreatmentSettingsRanges(); - // Send time/state data immediately for UI update - broadcastTreatmentTimeAndState(); - - // Done with treatment duration changes whether they were accepted or rejected. - txDurationRequest.isUFRateConfInProgress = FALSE; - txDurationRequest.newUFRateMLPM = 0.0F; - txDurationRequest.requestedTxDurationMins = 0; - } - } -} - - /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/