Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -rf1157c760b320bf088921a25eb78e973d6341578 -r556668d4ef26ad4afbc438cc28d397a898459084 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision f1157c760b320bf088921a25eb78e973d6341578) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 556668d4ef26ad4afbc438cc28d397a898459084) @@ -7,8 +7,8 @@ * * @file ModeTreatment.c * -* @author (last) Dara Navaei -* @date (last) 04-Jun-2023 +* @author (last) Sean Nash +* @date (last) 11-Jul-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -128,7 +128,6 @@ static U32 treatmentStartTimeStamp; ///< Treatment start timestampt for logging purpose. static U32 treatmentEndTimeStamp; ///< Treatment end timestampt for logging purpose. -static BOOL hasTreatmentStartTimeBeenWrittenToNV; ///< Boolean flag to indicate whether treatment start time has been started or not. // ********** private function prototypes ********** @@ -195,7 +194,6 @@ treatmentStartTimeStamp = getRTCTimestamp(); treatmentEndTimeStamp = 0; - hasTreatmentStartTimeBeenWrittenToNV = FALSE; } /*********************************************************************//** @@ -221,6 +219,9 @@ initTreatmentEnd(); } + // Started the treatment set the start time in epoch + setTxLastStartTimeEpoch( getRTCTimestamp() ); + setCurrentSubState( NO_SUB_STATE ); // Enable venous bubble detection in treatment mode setVenousBubbleDetectionEnabled( TRUE ); @@ -629,13 +630,6 @@ checkDialysateTemperature(); } - // Record treatment start time if not done yet - if ( FALSE == hasTreatmentStartTimeBeenWrittenToNV ) - { - // Started the treatment set the start time in epoch - hasTreatmentStartTimeBeenWrittenToNV = setTxLastStartTimeEpoch( getRTCTimestamp() ); - } - // Treatment mode state machine switch ( currentTreatmentState ) { @@ -840,6 +834,7 @@ transitionToBloodPrime(); result = TREATMENT_BLOOD_PRIME_STATE; } + signalInitiatePressureStabilization(); } // If user requests rinseback, go to rinseback else if ( TRUE == initiateRinsebackAlarmResponseRequest ) @@ -879,16 +874,33 @@ * @brief * The handleTreatmentRinsebackState function executes the rinseback state of the * Treatment Mode state machine. - * @details Inputs: none - * @details Outputs: treatment rinseback sub-mode executed. + * @details Inputs: endTreatmentAlarmResponseRequest, resumeTreatmentAlarmResponseRequest, + * rinsebackToRecircRequest, rinsebackToStoppedRequest, endTreatmentRequest + * @details Outputs: treatment rinseback sub-mode executed, sendLastTreatmentPeriodicData * @return next treatment mode state *************************************************************************/ static TREATMENT_STATE_T handleTreatmentRinsebackState( void ) { TREATMENT_STATE_T result = TREATMENT_RINSEBACK_STATE; - // Execute treatment rinseback sub-mode - execRinseback(); + // If user requests treatment end, end treatment + if ( TRUE == endTreatmentAlarmResponseRequest ) + { + sendLastTreatmentPeriodicData = TRUE; + requestNewOperationMode( MODE_POST ); + } + // Otherwise execute state machine for treatment rinseback sub-mode + else + { + // If user requests resumption of treatment, resume rinseback + if ( TRUE == resumeTreatmentAlarmResponseRequest ) + { + resumeTreatmentAlarmResponseRequest = FALSE; + signalRinsebackAlarmResumeUserAction(); + } + // Execute treatment rinseback sub-mode + execRinseback(); + } // Handle signals from rinseback sub-mode if ( TRUE == rinsebackToRecircRequest ) @@ -1208,6 +1220,7 @@ { sendTreatmentLogEventData( UF_RATE_CHANGE_EVENT, presUFRate, pendingUFRateChange ); presUFRate = pendingUFRateChange; + signalInitiatePressureStabilization(); } setDialysisParams( getTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW ), getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presMaxUFVolumeML, presUFRate ); @@ -1274,7 +1287,7 @@ if ( ( bloodRate != (U32)getTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW ) ) || ( dialRate != (U32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ) ) ) { - signalUserRateChange(); + signalInitiatePressureStabilization(); } // Set to new rates setTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW, bloodRate );