Index: firmware/App/Modes/BloodPrime.c =================================================================== diff -u -rafa9d4924d55ac4fc98270a012e92dd1f6ee65d0 -r74be223d47ea7bb0ac7d814e74d3627d830a5fac --- firmware/App/Modes/BloodPrime.c (.../BloodPrime.c) (revision afa9d4924d55ac4fc98270a012e92dd1f6ee65d0) +++ firmware/App/Modes/BloodPrime.c (.../BloodPrime.c) (revision 74be223d47ea7bb0ac7d814e74d3627d830a5fac) @@ -5,13 +5,13 @@ * 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 TreatmentEnd.c +* @file BloodPrime.c * -* @author (last) Sean Nash -* @date (last) 04-Feb-2021 +* @author (last) Sean Nash +* @date (last) 13-Aug-2021 * -* @author (original) Sean -* @date (original) 04-Feb-2021 +* @author (original) Sean Nash +* @date (original) 06-Feb-2021 * ***************************************************************************/ @@ -51,10 +51,10 @@ #define BLOOD_PRIME_INIT_BP_FLOW_RATE_ML_MIN 100 /// Interval at which blood prime ramping is controlled. -static const U32 BLOOD_PRIME_RAMPING_INTERVAL = ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ); +static const U32 BLOOD_PRIME_RAMPING_INTERVAL = ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ); /// Interval at which blood prime progress is to be published to UI. -static const U32 BLOOD_PRIME_DATA_PUBLISH_INTERVAL = ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ); +#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 ) ); @@ -68,6 +68,8 @@ static U32 bloodPrimeRampControlTimerCtr; ///< Timer counter for determining interval for controlling BP ramp. static U32 bloodPrimePublishTimerCtr; ///< Timer counter for determining interval for blood prime status to be published. +/// Interval (in task intervals) at which to publish blood prime data to CAN bus. +static OVERRIDE_U32_T bloodPrimePublishInterval = { BLOOD_PRIME_DATA_PUBLISH_INTERVAL, BLOOD_PRIME_DATA_PUBLISH_INTERVAL, BLOOD_PRIME_DATA_PUBLISH_INTERVAL, 0 }; static OVERRIDE_F32_T cumulativeBloodPrimeVolume_mL = { 0.0, 0.0, 0.0, 0 }; ///< Total cumulative blood prime volume (in mL). static OVERRIDE_F32_T bloodPrimeVolumeDelivered_Safety = { 0.0, 0.0, 0.0, 0 }; ///< The cumulative independent blood prime volume (in mL) calculated so far. @@ -77,6 +79,8 @@ // ********** private function prototypes ********** static void resetBloodPrimeFlags( void ); +static F32 getBloodPrimeVolume( void ); +static F32 getBloodPrimeSafetyVolume( void ); static BLOOD_PRIME_STATE_T handleBloodPrimeRampState( void ); static void publishBloodPrimeData( void ); @@ -268,6 +272,7 @@ setBloodIsPrimed( TRUE ); signalDialInPumpHardStop(); signalBloodPrimeToDialysis(); + cmdStopDGTrimmerHeater(); } } #ifndef DISABLE_PUMP_FLOW_CHECKS @@ -319,15 +324,15 @@ *************************************************************************/ static void publishBloodPrimeData( void ) { - if ( ++bloodPrimePublishTimerCtr >= BLOOD_PRIME_DATA_PUBLISH_INTERVAL ) + if ( ++bloodPrimePublishTimerCtr >= getU32OverrideValue( &bloodPrimePublishInterval ) ) { BLOOD_PRIME_DATA_PAYLOAD_T data; bloodPrimePublishTimerCtr = 0; data.targetBloodPrimeVolumeMl = TARGET_BLOOD_PRIME_VOLUME_ML; data.deliveredBloodPrimeVolumeMl = getBloodPrimeVolume(); data.indDeliveredBloodPrimeVolumeMl = getBloodPrimeSafetyVolume(); - broadcastBloodPrimeData( data ); + broadcastData( MSG_ID_HD_BLOOD_PRIME_PROGRESS, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&data, sizeof( BLOOD_PRIME_DATA_PAYLOAD_T ) ); } } @@ -427,4 +432,51 @@ return result; } +/*********************************************************************//** + * @brief + * The testSetBloodPrimePublishIntervalOverride function sets the override of the + * blood prime data publication interval. + * @details Inputs: none + * @details Outputs: bloodPrimePublishInterval + * @param ms milliseconds between blood prime broadcasts + * @return TRUE if override set successful, FALSE if not + *************************************************************************/ +BOOL testSetBloodPrimePublishIntervalOverride( U32 ms ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + U32 intvl = ms / TASK_GENERAL_INTERVAL; + + result = TRUE; + bloodPrimePublishInterval.ovData = intvl; + bloodPrimePublishInterval.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetBloodPrimePublishIntervalOverride function resets the override of the + * blood prime data publication interval. + * @details Inputs: none + * @details Outputs: bloodPrimePublishInterval + * @return TRUE if override reset successful, FALSE if not + *************************************************************************/ +BOOL testResetBloodPrimePublishIntervalOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + bloodPrimePublishInterval.override = OVERRIDE_RESET; + bloodPrimePublishInterval.ovData = bloodPrimePublishInterval.ovInitData; + } + + return result; +} + /**@}*/