Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r99031535f5bc95d882f982b8f4cc5b74b825cf6a -r23ad90c3d5f08e67a1142a68c73d79fedb752da9 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 99031535f5bc95d882f982b8f4cc5b74b825cf6a) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 23ad90c3d5f08e67a1142a68c73d79fedb752da9) @@ -7,8 +7,8 @@ * * @file ModeTreatment.c * -* @author (last) Dara Navaei -* @date (last) 04-Jan-2022 +* @author (last) Darren Cox +* @date (last) 10-Mar-2022 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -25,6 +25,7 @@ #include "Dialysis.h" #include "ModeTreatment.h" #include "ModeTreatmentParams.h" +#include "NVDataMgmt.h" #include "OperationModes.h" #include "Reservoirs.h" #include "Rinseback.h" @@ -244,6 +245,9 @@ initTreatmentRecirc(); initTreatmentEnd(); + // Started the treatment set the start time in epoch + setTxLastStartTimeEpoch( getRTCTimestamp() ); + return currentTreatmentState; } @@ -615,6 +619,8 @@ *************************************************************************/ U32 execTreatmentMode( void ) { + TREATMENT_STATE_T entryTreatmentState = currentTreatmentState; + U32 saveTreatTime = 0; BOOL stop = isStopButtonPressed(); if ( TRUE == stop ) @@ -668,6 +674,19 @@ // clear signal flags from sub-modes before calling sub-mode executives resetSignalFlags(); + if ( (entryTreatmentState != currentTreatmentState) && ( currentTreatmentState == TREATMENT_END_STATE ) ) + { + // Save the Treatment duration and Last Treatment time + // TODO DMC this saves minutes, should be a Float of hours + saveTreatTime = getTreatmentTime (); + saveTreatTime += CALC_ELAPSED_TREAT_TIME_IN_MIN(); + if (!setTreatmentTime ( saveTreatTime )) + { + // TODO Set alarm + } + // TODO Save Last Treatment Time + } + // Broadcast treatment data broadcastTreatmentTimeAndState(); broadcastTreatmentSettingsRanges(); @@ -702,6 +721,8 @@ transitionToBloodPrime(); + // TODO DMC Save Last Treatment Time + return result; } @@ -805,6 +826,7 @@ static TREATMENT_STATE_T handleTreatmentStopState( void ) { TREATMENT_STATE_T result = TREATMENT_STOP_STATE; + BOOL leavingTreatmentStopState = TRUE; // If user requests resumption of treatment, resume treatment if ( TRUE == resumeTreatmentAlarmResponseRequest ) @@ -840,8 +862,19 @@ { execReservoirs(); execTreatmentStop(); + leavingTreatmentStopState = FALSE; } + // If leaving treatment stop state, zero alarm countdown timer for UI + if ( TRUE == leavingTreatmentStopState ) + { + TREATMENT_STOP_PAYLOAD_T data; + + data.timeout = 0; + data.countdown = 0; + broadcastData( MSG_ID_HD_TREATMENT_STOP_TIMER_DATA, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&data, sizeof( TREATMENT_STOP_PAYLOAD_T ) ); + } + return result; }