Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r87d315ee2269056a9ca4a023597e7a8dff7db90b -rf70ddc5911bffe11fc5e670c8566164af4b6c88f --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 87d315ee2269056a9ca4a023597e7a8dff7db90b) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision f70ddc5911bffe11fc5e670c8566164af4b6c88f) @@ -7,8 +7,8 @@ * * @file ModeTreatment.c * -* @author (last) Dara Navaei -* @date (last) 08-Mar-2024 +* @author (last) Sean Nash +* @date (last) 22-Apr-2024 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -27,6 +27,8 @@ #include "ModeTreatmentParams.h" #include "NVDataMgmt.h" #include "OperationModes.h" +#include "PersistentAlarm.h" +#include "PresOccl.h" #include "Reservoirs.h" #include "Rinseback.h" #include "RTC.h" @@ -195,6 +197,11 @@ treatmentStartTimeStamp = getRTCTimestamp(); treatmentEndTimeStamp = 0; + + // reset dialysate temperature alarm persistences prior to starting a treatment. + resetPersistentAlarmTimer( ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_SAFETY_TEMP ); + resetPersistentAlarmTimer( ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_TARGET_TEMP ); + resetPersistentAlarmTimer( ALARM_ID_HD_DIALYSATE_TEMP_BELOW_TARGET_TEMP ); } /*********************************************************************//** @@ -746,6 +753,8 @@ sendTreatmentLogEventData( UF_START_RESUME_EVENT, 0.0, presUFRate ); } transitionToDialysis(); + // To update partial blood pump occlusion baseline - start of treatment + signalBloodPumpPressureOcclBaseline(); result = TREATMENT_DIALYSIS_STATE; } } @@ -1025,23 +1034,24 @@ { // Always adjust UF volume to accommodate treatment time change (not UF rate) F32 uFVolume = ( (F32)( treatmentTime - CALC_ELAPSED_TREAT_TIME_IN_MIN() ) * presUFRate ) + getUltrafiltrationReferenceVolume(); + F32 uFVolumeL = uFVolume / ML_PER_LITER; U32 dialVolume = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ) * treatmentTime; // In mL // The minimum treatment time is either in the range of the institutional record or the 1-minute treatment config has been requested which is an exception BOOL isMinTxTimeValid = ( ( treatmentTime >= getU32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_TREATMENT_DURATION ) ) || ( TRUE == getTestConfigStatus( TEST_CONFIG_ENABLE_ONE_MINUTE_TREATMENT ) ) ? TRUE : FALSE ); BOOL isTxTimeValid = ( ( TRUE == isMinTxTimeValid ) && ( treatmentTime <= getU32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_TREATMENT_DURATION ) ) ? TRUE : FALSE ); - BOOL isMinUFVolValid = ( ( uFVolume >= getF32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_UF_VOLUME ) ) || ( uFVolume <= 0.0F ) ? TRUE : FALSE ); - BOOL isUFVolValid = ( ( TRUE == isMinUFVolValid ) && ( uFVolume <= getF32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_UF_VOLUME ) ) ? TRUE : FALSE ); + BOOL isMinUFVolValid = ( ( uFVolumeL >= getF32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_UF_VOLUME ) ) || ( uFVolumeL <= 0.0F ) ? TRUE : FALSE ); + BOOL isUFVolValid = ( ( TRUE == isMinUFVolValid ) && ( uFVolumeL <= getF32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_UF_VOLUME ) ) ? TRUE : FALSE ); if ( ( TRUE == isTxTimeValid ) && ( dialVolume <= MAX_DIALYSATE_VOLUME_ML ) && ( TRUE == isUFVolValid ) ) { result = TRUE; sendTreatmentLogEventData( TREATMENT_DURATION_CHANGE_EVENT, ( presTreatmentTimeSecs / SEC_PER_MIN ), treatmentTime ); presMaxUFVolumeML = uFVolume; presTreatmentTimeSecs = treatmentTime * SEC_PER_MIN; - result &= setTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME, ( presMaxUFVolumeML / (F32)ML_PER_LITER ) ); - result &= setTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION, ( presTreatmentTimeSecs / SEC_PER_MIN ) ); + 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 ); } @@ -1177,6 +1187,7 @@ } // UF volume cannot be set lower than the UF volume that has already been collected else if ( ( uFVolume > ( getF32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_UF_VOLUME ) * ML_PER_LITER ) ) || + ( uFVolume < ( getF32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_UF_VOLUME ) * ML_PER_LITER ) ) || ( uFVolume <= colUFVol ) ) { rejectReason = REQUEST_REJECT_REASON_UF_VOLUME_OUT_OF_RANGE; @@ -1296,6 +1307,8 @@ // Set to new rate result &= setTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW, bloodRate ); setDialysisBloodPumpFlowRate( getTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW ) ); + // Update partial occlusion baseline when blood flow rate changes + signalBloodPumpPressureOcclBaseline(); } // Handle dialysate flow rate changes @@ -1306,6 +1319,8 @@ // Set to new rate result &= setTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW, dialRate ); setDialysisDialInFlowAndUFRate( getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presMaxUFVolumeML, presUFRate ); + // Update partial occlusion baseline when dialysate flow rate changes + signalBloodPumpPressureOcclBaseline(); } } else