Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -rab09af73712b54877a5d536426d2b4feb3af7fed -r457fc704dc96f6da4e14263d576bc3ba479e36a8 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision ab09af73712b54877a5d536426d2b4feb3af7fed) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 457fc704dc96f6da4e14263d576bc3ba479e36a8) @@ -158,14 +158,14 @@ transitionToNewOperationMode( newMode ); currentMode = newMode; - if ( MODE_TREA == lastMode ) + if ( ( MODE_TREA == lastMode ) && ( currentMode != MODE_TREA ) ) { - // If the current mode is treatment but transitioning to another mode has been requested (including transitioning to fault mode) + // If the last mode is treatment but the new mode is not treatment // it means the treatment is done. Get the elapsed time since the beginning of the treatment and convert it to hours to be written U32 txElapsedTimeMS = calcTimeSince( getTreatmentStartTimeStamp() ); F32 txElapsedTimeHrs = (F32)txElapsedTimeMS / ( MIN_PER_HOUR * SEC_PER_MIN * MS_PER_SECOND ); // Write the treatment hours and set the service to be false so the treatment hours is not reset - setTxTimeHours( txElapsedTimeHrs, FALSE ); + setTxTimeHours( txElapsedTimeHrs ); } }