Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r5815db0d9a40db034fd03dba2b8960ad518a9984 -r98cc51d12256e9e9d63632d0206e9cd6e5b92429 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 5815db0d9a40db034fd03dba2b8960ad518a9984) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 98cc51d12256e9e9d63632d0206e9cd6e5b92429) @@ -8,7 +8,7 @@ * @file ModeTreatment.c * * @author (last) Dara Navaei -* @date (last) 12-Jul-2023 +* @date (last) 24-Jul-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -767,14 +767,7 @@ // Update treatment time (unless delivering a saline bolus) if ( dialysisState != DIALYSIS_SALINE_BOLUS_STATE ) { -#ifdef DIALYZER_REPRIME_ENABLED - if ( dialysisState != DIALYSIS_DIALYZER_REPRIME_STATE ) - { -#endif treatmentTimeMS += msSinceLast; -#ifdef DIALYZER_REPRIME_ENABLED - } -#endif } lastTreatmentTimeStamp = newTime; @@ -925,16 +918,26 @@ * @brief * The handleTreatmentRecircState function executes the re-circulate state of the * Treatment Mode state machine. - * @details Inputs: none - * @details Outputs: treatment re-circulate sub-mode executed. + * @details Inputs: endTreatmentAlarmResponseRequest, rinsebackToStoppedRequest, + * endTreatmentRequest + * @details Outputs: sendLastTreatmentPeriodicData * @return next treatment mode state *************************************************************************/ static TREATMENT_STATE_T handleTreatmentRecircState( void ) { TREATMENT_STATE_T result = TREATMENT_RECIRC_STATE; - // Execute treatment re-circ sub-mode - execTreatmentRecirc(); + // If user requests treatment end, end treatment + if ( TRUE == endTreatmentAlarmResponseRequest ) + { + sendLastTreatmentPeriodicData = TRUE; + requestNewOperationMode( MODE_POST ); + } + else + { + // Execute treatment re-circ sub-mode + execTreatmentRecirc(); + } // Handle signals from treatment re-circ sub-mode if ( TRUE == rinsebackToStoppedRequest ) @@ -1142,19 +1145,8 @@ { pendingUFRateChange = 0.0; } - // Verify treatment duration change would be valid (leave zero if not valid - UI will disable option) - if ( ( trtTime <= MAX_TREATMENT_TIME_MINUTES ) && ( trtTime >= getMinTreatmentTimeInMinutes() ) && - ( dialVolume <= MAX_DIALYSATE_VOLUME_ML ) ) - { - result = TRUE; - pendingUFVolumeChange = uFVolume; - pendingTreatmentTimeChange = trtTime; - timeDiff = trtTime - ( (U32)( (F32)presTreatmentTimeSecs / (F32)SEC_PER_MIN ) + 1 ); - } - else - { - pendingTreatmentTimeChange = 0; - } + // Treatment duration change is now never valid - leave zero - UI will disable option) + pendingTreatmentTimeChange = 0; // If neither option works, reject for UF rate if ( FALSE == result ) { @@ -1216,14 +1208,9 @@ presMaxUFVolumeML = pendingUFVolumeChange; setTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME, ( presMaxUFVolumeML / (F32)ML_PER_LITER ) ); - // Which setting does user want to adjust to accommodate the UF volume change? (treatment time or UF rate) - if ( UF_ADJ_TREATMENT_TIME == adjustment ) + // User should only allow UF rate adjustment to achieve UF volume change + if ( UF_ADJ_UF_RATE == adjustment ) { - presTreatmentTimeSecs = pendingTreatmentTimeChange * SEC_PER_MIN; - setTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION, ( presTreatmentTimeSecs / SEC_PER_MIN ) ); - } - else // Must be adjusting UF rate then - { sendTreatmentLogEventData( UF_RATE_CHANGE_EVENT, presUFRate, pendingUFRateChange ); presUFRate = pendingUFRateChange; signalInitiatePressureStabilization(); @@ -1460,11 +1447,6 @@ payload.txEndState = getCurrentTreatmentEndState(); payload.heparinState = getHeparinState(); payload.dialysisState = getDialysisState(); -#ifdef DIALYZER_REPRIME_ENABLED - payload.dlzReprimeState = getDialyzerRePrimeState(); -#else - payload.dlzReprimeState = 0; -#endif broadcastData( MSG_ID_TREATMENT_STATE_DATA, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&payload, sizeof( TREATMENT_STATE_DATA_T ) ); treatmentStateBroadcastTimerCtr = 0;