Index: firmware/App/Modes/StateTxBloodPrime.c =================================================================== diff -u -rc01e44290174eb4098c14b17031ac538d7560b03 -r63fdc9a97e335c359fed989383cb56db57dc272f --- firmware/App/Modes/StateTxBloodPrime.c (.../StateTxBloodPrime.c) (revision c01e44290174eb4098c14b17031ac538d7560b03) +++ firmware/App/Modes/StateTxBloodPrime.c (.../StateTxBloodPrime.c) (revision 63fdc9a97e335c359fed989383cb56db57dc272f) @@ -7,8 +7,8 @@ * * @file StateTxBloodPrime.c * -* @author (last) Varshini Nagabooshanam -* @date (last) 10-Mar-2026 +* @author (last) Raghu Kallala +* @date (last) 20-Feb-2026 * * @author (original) Varshini Nagabooshanam * @date (original) 09-Jan-2026 @@ -26,6 +26,7 @@ #include "StateTxBloodPrime.h" #include "Switches.h" #include "TaskGeneral.h" +#include "Timers.h" #include "Utilities.h" #include "Valves.h" #include "Valve3Way.h" @@ -71,6 +72,7 @@ static U32 bloodPrimePublishTimerCtr; ///< Timer counter for determining interval for blood prime status to be published. static U32 lastBloodPrimeFlowRate_mL_min; ///< Flow rate prior to pausing blood prime. static U32 requestedBloodFlowRate_mL_min; ///< Requested blood flow rate from UI. +static U32 bloodPrimeStartMS = 0; ///< Start time of Blood Prime (ms timer count) /// 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 }; @@ -118,6 +120,7 @@ estRampSeconds = (F32)MIN_RAMP_TIME_SEC; } bloodPrimeRampStep_mL = rampRateSpan / estRampSeconds; + bloodPrimeStartMS = getMSTimerCount(); } /*********************************************************************//** @@ -494,10 +497,17 @@ if ( ++bloodPrimePublishTimerCtr >= getU32OverrideValue( &bloodPrimePublishInterval ) ) { BLOOD_PRIME_DATA_PAYLOAD_T data; + U32 elapsedMS; + U32 elapsedSec; bloodPrimePublishTimerCtr = 0; data.targetBloodPrimeVolumeMl = bloodPrimeTargetVolume_mL; data.deliveredBloodPrimeVolumeMl = MAX( 0.0, getBloodPrimeVolume() ); + elapsedMS = calcTimeSince( bloodPrimeStartMS ); + elapsedSec = elapsedMS / 1000U; + data.bloodPrimeTimeoutSec = bloodPrimeStartMS; + data.bloodPrimeCountdownSec = elapsedSec; + broadcastData( MSG_ID_TD_BLOOD_PRIME_PROGRESS_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&data, sizeof( BLOOD_PRIME_DATA_PAYLOAD_T ) ); } }