Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -r07a39ac5f935a84b2dbb93e3f3d3b3eaa8f37cc4 -rcd5be724d5a3ba7457e761191d82f278654d7f5c --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 07a39ac5f935a84b2dbb93e3f3d3b3eaa8f37cc4) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision cd5be724d5a3ba7457e761191d82f278654d7f5c) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2020-2023 Diality Inc. - All Rights Reserved. +* Copyright (c) 2020-2024 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file Dialysis.c * * @author (last) Sean Nash -* @date (last) 11-Jul-2023 +* @date (last) 11-Oct-2023 * * @author (original) Sean * @date (original) 15-Jan-2020 @@ -40,8 +40,8 @@ // ********** private definitions ********** -#define MAX_UF_VOLUME_ACCURACY_ERROR_ML 100.0F ///< Maximum ultrafiltration volume accuracy error in mL over the entire treatment. -#define MAX_UF_RATE_ACCURACY_ERROR_ML_MIN 10.0F ///< Maximum ultrafiltration rate accuracy error in mL/min over use of single reservoir during treatment. +#define MAX_UF_VOLUME_ACCURACY_ERROR_ML 100.0F ///< Maximum ultrafiltration volume accuracy error in mL over the entire treatment. +#define LOAD_CELL_PRIMARY_BACKUP_MAX_ALLOWED_DRIFT_GRAMS 20.0F ///< Reservoir load cell drift difference allowed /// Saline bolus data broadcast interval (ms/task time) count. static const U32 SALINE_BOLUS_DATA_PUB_INTERVAL = ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ); @@ -277,11 +277,12 @@ F32 hepRate = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ); // Do not run syringe pump if no Heparin included in prescription or it was paused or if Heparin should be stopped at this stage of treatment - if ( ( minRem > (F32)preStop ) && ( HEPARIN_STATE_STOPPED == currentHeparinState ) ) + if ( ( minRem > (F32)preStop ) && + ( ( HEPARIN_STATE_STOPPED == currentHeparinState ) || ( HEPARIN_STATE_DISPENSING == currentHeparinState ) ) ) { if ( hepRate > 0.0 ) { - startHeparinContinuous(); // TODO - check return status + startHeparinContinuous(); } else { @@ -396,7 +397,7 @@ { accept = TRUE; salineBolusStartRequested = TRUE; - signalInitiatePressureStabilization(); + signalInitiatePressureStabilization( USE_NORMAL_STABILIZATION_PERIOD ); } // Send response @@ -437,7 +438,7 @@ { accept = TRUE; salineBolusAbortRequested = TRUE; - signalInitiatePressureStabilization(); + signalInitiatePressureStabilization( USE_NORMAL_STABILIZATION_PERIOD ); } // Send response @@ -522,7 +523,7 @@ /*********************************************************************//** * @brief * The pauseUF function pauses ultrafiltration. - * @details Inputs: currentDialysisState, currentUFState + * @details Inputs: currentDialysisState, currentUFState, setUFRate * @details Outputs: currentUFState, outlet pump set point * @return TRUE if pause successful, FALSE if not *************************************************************************/ @@ -537,10 +538,12 @@ ( DIALYSIS_UF_STATE == currentDialysisState ) && ( UF_RUNNING_STATE == currentUFState ) ) { result = TRUE; - sendTreatmentLogEventData( UF_PAUSE_EVENT, setUFRate, 0.0 ); + if ( setUFRate > 0.0 ) + { + sendTreatmentLogEventData( UF_PAUSE_EVENT, setUFRate, 0.0 ); + } // Go to UF paused state currentUFState = UF_PAUSED_STATE; - sendTreatmentLogEventData( UF_START_RESUME_EVENT, UF_RUNNING_STATE, UF_PAUSED_STATE ); } else { @@ -571,7 +574,7 @@ /*********************************************************************//** * @brief * The resumeUF function resumes ultrafiltration. - * @details Inputs: currentDialysisState, currentUFState + * @details Inputs: currentDialysisState, currentUFState, setUFRate * @details Outputs: currentUFState, outlet pump set point * @return TRUE if resume successful, FALSE if not *************************************************************************/ @@ -586,12 +589,14 @@ ( DIALYSIS_UF_STATE == currentDialysisState ) && ( UF_PAUSED_STATE == currentUFState ) ) { result = TRUE; - sendTreatmentLogEventData( UF_START_RESUME_EVENT, 0.0, setUFRate ); + if ( setUFRate > 0.0 ) + { + sendTreatmentLogEventData( UF_START_RESUME_EVENT, 0.0, setUFRate ); + } // Restart UF time accumulation for reference volume calculation lastUFTimeStamp = getMSTimerCount(); // Go to UF running state currentUFState = UF_RUNNING_STATE; - sendTreatmentLogEventData( UF_START_RESUME_EVENT, UF_PAUSED_STATE, UF_RUNNING_STATE ); } else { @@ -860,9 +865,9 @@ { salineBolusStartRequested = FALSE; // Cmd all pumps to stop - setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); - setDialInPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); - setDialOutPumpTargetRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialInPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialOutPumpTargetRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); stopSyringePump(); // Begin saline bolus result = SALINE_BOLUS_STATE_WAIT_FOR_PUMPS_STOP; @@ -986,7 +991,7 @@ sendOperationStatusEvent(); } - signalInitiatePressureStabilization(); + signalInitiatePressureStabilization( USE_NORMAL_STABILIZATION_PERIOD ); // Resume dialysis transitionToDialysis(); }