Index: firmware/App/Modes/TreatmentEnd.c =================================================================== diff -u -r346e74cbf78fdf1ea7cd779103476e49c4ee190e -r37ff579592dd1113ed4813e9fe561f8d77a114d0 --- firmware/App/Modes/TreatmentEnd.c (.../TreatmentEnd.c) (revision 346e74cbf78fdf1ea7cd779103476e49c4ee190e) +++ firmware/App/Modes/TreatmentEnd.c (.../TreatmentEnd.c) (revision 37ff579592dd1113ed4813e9fe561f8d77a114d0) @@ -24,6 +24,7 @@ #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "TreatmentEnd.h" +#include "TreatmentStop.h" #include "Valves.h" /** @@ -33,6 +34,8 @@ // ********** private definitiions *********** +/// Interval at which treatment end progress is to be published to UI. +#define TREATMENT_END_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) /// Target flow rate for blood while waiting for user to initiate final rinseback. #define TX_END_BP_FLOW_RATE_ML_MIN 100 @@ -51,13 +54,15 @@ static BOOL txEndAlarmEndTreatmentRequested; ///< Flag indicates user requesting end treatment from alarm. static BOOL txEndRinsebackRequested; ///< Flag indicates user requesting final rinseback. static BOOL txEndDrainCmdSent; ///< Flag indicates DG Drain command has been sent. +static U32 treatmentEndPublishTimerCtr; ///< Timer counter for determining interval for treatment end status to be published. // ********** private function prototypes ********** static void resetTreatmentEndFlags( void ); static void setupForTxEndWait4RinsebackState( void ); static void setupForTxEndPausedState( void ); +static void publishTreatmentEndData( void ); static TREATMENT_END_STATE_T handleTxEndWait4RinsebackState( void ); static TREATMENT_END_STATE_T handleTxEndPausedState( void ); @@ -77,6 +82,7 @@ treatmentEndState = TREATMENT_END_WAIT_FOR_RINSEBACK_STATE; txEndTimerCtr = 0; bloodSittingTimerCtr = 0; + treatmentEndPublishTimerCtr = 0; txEndDrainCmdSent = FALSE; resetTreatmentEndFlags(); } @@ -209,6 +215,8 @@ setCurrentSubState( (U32)treatmentEndState ); SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, treatmentEndState ); } + publishTreatmentEndData(); + // Re-circulate flags should be handled by now - reset in case not handled by current state resetTreatmentEndFlags(); } @@ -439,4 +447,31 @@ return treatmentEndState; } +/*********************************************************************//** + * @brief + * The publishTreatmentEndData function publishes Treatment End progress to UI + * at 1 Hz interval. + * @details Inputs: treatmentEndPublishTimerCtr + * @details Outputs: Treatment end data published + * @return none + *************************************************************************/ +static void publishTreatmentEndData( void ) +{ + if ( ++treatmentEndPublishTimerCtr >= TREATMENT_END_DATA_PUBLISH_INTERVAL ) + { + TREATMENT_STOP_PAYLOAD_T data; + + data.timeout = 0; + data.countdown = 0; + + // update blood sitting timer if active + if ( bloodSittingTimerCtr > 0 ) + { + data.timeout = MAX_TIME_BLOOD_SITTING / ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ); + data.countdown = ( bloodSittingTimerCtr >= MAX_TIME_BLOOD_SITTING ? 0 : ( MAX_TIME_BLOOD_SITTING - bloodSittingTimerCtr ) / ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ); + } + broadcastData( MSG_ID_HD_TREATMENT_STOP_TIMER_DATA, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&data, sizeof( TREATMENT_STOP_PAYLOAD_T ) ); + } +} + /**@}*/