Index: firmware/App/Modes/Rinseback.c =================================================================== diff -u -rb20421d84b9049977c04f4752f4fc5697425f25c -raae7692fd100c173832c35786d060d2ad9aecf0d --- firmware/App/Modes/Rinseback.c (.../Rinseback.c) (revision b20421d84b9049977c04f4752f4fc5697425f25c) +++ firmware/App/Modes/Rinseback.c (.../Rinseback.c) (revision aae7692fd100c173832c35786d060d2ad9aecf0d) @@ -993,8 +993,10 @@ if ( ++rinsebackPublishTimerCtr >= getPublishRinsebackInterval() ) { RINSEBACK_DATA_PAYLOAD_T data; + TREATMENT_STOP_PAYLOAD_T sdata; U32 timeout = MAX_RINSEBACK_TIME / ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ); U32 countdown = ( getRinsebackVolume() >= rinsebackTargetVolume_mL ? MAX_RINSEBACK_DONE_TIME : MAX_RINSEBACK_TIME ); + U32 stopTO = ( getRinsebackVolume() >= rinsebackTargetVolume_mL ? 0 : MAX_RINSEBACK_TIME ); countdown -= rinsebackTimerCtr; // Handle countdown past zero @@ -1026,6 +1028,19 @@ data.isCompleted = TRUE; } broadcastData( MSG_ID_HD_RINSEBACK_PROGRESS, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&data, sizeof( RINSEBACK_DATA_PAYLOAD_T ) ); + + // Send blood sitting count down to UI for alarm dialog + sdata.timeout = stopTO / ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ); + sdata.countdown = 0; + + if ( getRinsebackCompleted() != TRUE ) + { + if ( rinsebackTimerCtr > 0 ) + { + sdata.countdown = ( rinsebackTimerCtr > MAX_TIME_BLOOD_SITTING ? 0 : ( MAX_TIME_BLOOD_SITTING - rinsebackTimerCtr ) / ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ); + } + } + broadcastData( MSG_ID_HD_TREATMENT_STOP_TIMER_DATA, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&sdata, sizeof( TREATMENT_STOP_PAYLOAD_T ) ); } }