Index: firmware/App/Modes/BloodPrime.c =================================================================== diff -u -r0cc4e4a7014bad51c8b86e3045c74e87c719207c -rb20421d84b9049977c04f4752f4fc5697425f25c --- firmware/App/Modes/BloodPrime.c (.../BloodPrime.c) (revision 0cc4e4a7014bad51c8b86e3045c74e87c719207c) +++ firmware/App/Modes/BloodPrime.c (.../BloodPrime.c) (revision b20421d84b9049977c04f4752f4fc5697425f25c) @@ -8,7 +8,7 @@ * @file BloodPrime.c * * @author (last) Dara Navaei -* @date (last) 04-Jan-2022 +* @date (last) 01-Sep-2022 * * @author (original) Sean Nash * @date (original) 06-Feb-2021 @@ -36,8 +36,9 @@ // ********** private definitiions *********** -#define TUBING_BLOOD_PRIME_VOLUME_ML 80.0 ///< Target blood prime volume to prime the blood side circuit (in mL). -#define MAX_BLOOD_PRIME_VOLUME_ERROR_ML 60.0 ///< Maximum error in total additional blood prime volume (20% of total). +#define TUBING_BLOOD_PRIME_VOLUME_ML 80.0F ///< Target blood prime volume to prime the blood side circuit (in mL). +#define DEFAULT_BLOOD_PRIME_VOLUME_ML 300.0F ///< Default blood prime volume (in mL). +#define MAX_BLOOD_PRIME_VOLUME_ERROR_ML 60.0F ///< Maximum error in total additional blood prime volume (20% of total). #define MIN_RAMP_TIME_SEC 60 ///< Minimum ramp time for blood prime (in seconds). /// Initial flow rate for blood pump when starting blood prime operation. @@ -50,7 +51,7 @@ #define BLOOD_PRIME_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) /// Multiplier to convert flow (mL/min) into volume (mL) for period of general task interval. -static const F32 BLOOD_PRIME_FLOW_INTEGRATOR = 1.0 / (F32)( SEC_PER_MIN * ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ); +static const F32 BLOOD_PRIME_FLOW_INTEGRATOR = 1.0F / (F32)( SEC_PER_MIN * ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ); // ********** private data ********** @@ -90,10 +91,10 @@ bloodPrimeState = BLOOD_PRIME_RAMP_STATE; bloodPrimeRampControlTimerCtr = 0; - bloodPrimePublishTimerCtr = BLOOD_PRIME_DATA_PUBLISH_INTERVAL; + bloodPrimePublishTimerCtr = BLOOD_PRIME_DATA_PUBLISH_INTERVAL - 2; // setup so publish will occur time after next cumulativeBloodPrimeVolume_mL.data = 0.0; expectedBloodPrimeVolume_mL = 0.0; - bloodPrimeTargetVolume_mL = 300.0; + bloodPrimeTargetVolume_mL = DEFAULT_BLOOD_PRIME_VOLUME_ML; resetBloodPrimeFlags(); bloodPrimeTargetVolume_mL = (F32)TUBING_BLOOD_PRIME_VOLUME_ML + (F32)getDialyzerBloodVolume(); @@ -128,6 +129,8 @@ *************************************************************************/ void transitionToBloodPrime( void ) { + doorClosedRequired( TRUE, TRUE ); + // Set valves setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); @@ -234,13 +237,17 @@ setBloodIsPrimed( TRUE ); // Signal treatment mode that blood prime is completed signalDialInPumpHardStop(); // Stop dialysate recirculation - dialysis sub-mode will restart dialysate pumps signalBloodPrimeToDialysis(); // Signal treatment mode that it's time to start dialysis - cmdStopDGTrimmerHeater(); // Stop trimmer heater - dialysis sub-mode will restart as appropriate + //cmdStopDGTrimmerHeater(); // Stop trimmer heater - dialysis sub-mode will restart as appropriate // TODO un-comment in DEN-13834 } // Is blood prime taking too long based on set BP rate? - else if ( ( fabs( expectedBloodPrimeVolume_mL - getBloodPrimeVolume() ) > MAX_BLOOD_PRIME_VOLUME_ERROR_ML ) && - ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_PUMP_FLOW_CHECKS ) != SW_CONFIG_ENABLE_VALUE ) ) + else if ( fabs( expectedBloodPrimeVolume_mL - getBloodPrimeVolume() ) > MAX_BLOOD_PRIME_VOLUME_ERROR_ML ) { - activateAlarmNoData( ALARM_ID_BLOOD_PRIME_VOLUME_CHECK_FAILURE ); +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_PUMP_FLOW_CHECKS ) != SW_CONFIG_ENABLE_VALUE ) +#endif + { + activateAlarmNoData( ALARM_ID_BLOOD_PRIME_VOLUME_CHECK_FAILURE ); + } } else { @@ -290,8 +297,7 @@ bloodPrimePublishTimerCtr = 0; data.targetBloodPrimeVolumeMl = bloodPrimeTargetVolume_mL; - data.deliveredBloodPrimeVolumeMl = getBloodPrimeVolume(); - data.unused = 0.0; // TODO - remove later when UI no longer looking for this field. + data.deliveredBloodPrimeVolumeMl = MAX( 0.0, getBloodPrimeVolume() ); broadcastData( MSG_ID_HD_BLOOD_PRIME_PROGRESS, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&data, sizeof( BLOOD_PRIME_DATA_PAYLOAD_T ) ); } }