Index: firmware/App/Modes/Rinseback.c =================================================================== diff -u -r00f9e708bd590c51dc8a83b59ed5d31a4e0b80b8 -rf66a94fdd645d2146e828fd760960849d1ac05c6 --- firmware/App/Modes/Rinseback.c (.../Rinseback.c) (revision 00f9e708bd590c51dc8a83b59ed5d31a4e0b80b8) +++ firmware/App/Modes/Rinseback.c (.../Rinseback.c) (revision f66a94fdd645d2146e828fd760960849d1ac05c6) @@ -924,7 +924,8 @@ * @brief * The publishRinsebackData function publishes rinseback progress to UI * at 1 Hz interval. - * @details Inputs: rinsebackPublishTimerCtr + * @details Inputs: rinsebackPublishTimerCtr, rinsebackTimerCtr, rinsebackState, + * cumulativeRinsebackVolume_mL, rinsebackRate_mL_min * @details Outputs: rinseback data published * @return none *************************************************************************/ @@ -933,11 +934,20 @@ if ( ++rinsebackPublishTimerCtr >= RINSEBACK_DATA_PUBLISH_INTERVAL ) { RINSEBACK_DATA_PAYLOAD_T data; + U32 timeout = MAX_RINSEBACK_TIME / TASK_GENERAL_INTERVAL; + U32 countdown = ( rinsebackTimerCtr >= MAX_RINSEBACK_TIME ? 0 : ( MAX_RINSEBACK_TIME - rinsebackTimerCtr ) / TASK_GENERAL_INTERVAL ); rinsebackPublishTimerCtr = 0; + // If we have completed rinseback, timeout is no longer in force + if ( ( rinsebackState > RINSEBACK_PAUSED_STATE ) && ( cumulativeRinsebackVolume_mL >= TARGET_RINSEBACK_VOLUME_ML ) ) + { + timeout = 0; + } data.targetRinsebackVolumeMl = TARGET_RINSEBACK_VOLUME_ML; data.deliveredRinsebackVolumeMl = cumulativeRinsebackVolume_mL; data.rinsebackFlowRateMlMin = rinsebackRate_mL_min; + data.timeout = timeout; + data.countdown = countdown; broadcastRinsebackData( data ); } }