Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -rab55a3f55e8ff168b1be66350616f27f9428633e -r8a78d0bee10166f1b5d2c47474f57f8a7b279cba --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision ab55a3f55e8ff168b1be66350616f27f9428633e) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 8a78d0bee10166f1b5d2c47474f57f8a7b279cba) @@ -175,7 +175,7 @@ static OVERRIDE_F32_T shortFilteredArterialPressure = { 0.0, 0.0, 0.0, 0 }; ///< Measured arterial pressure after short (1 s) filter. static F32 longFilteredVenousPressure; ///< Measured venous pressure after long (10 s) filter. static OVERRIDE_F32_T shortFilteredVenousPressure = { 0.0, 0.0, 0.0, 0 }; ///< Measured venous pressure after short (1 s) filter. -static STABILIZATION_PERIOD_T pressureStabilizeTime; ///< Pressure stabilization time based on system events such as airpump, treatment param changes etc., +static STABILIZATION_PERIODS_T pressureStabilizeTime; ///< Pressure stabilization time based on system events such as airpump, treatment param changes etc., static U32 bloodPumpOcclusionAfterCartridgeInstall; ///< Measured blood pump occlusion reading taken after cartridge install. @@ -451,7 +451,7 @@ * USE_NORMAL_STABILIZATION_PERIOD, USE_SHORT_STABILIZATION_PERIOD * @return none *************************************************************************/ -void signalInitiatePressureStabilization( STABILIZATION_PERIOD_T stabilizationPeriod ) +void signalInitiatePressureStabilization( STABILIZATION_PERIODS_T stabilizationPeriod ) { // User update of blood/dialysate flow rate or UF rate or initiates/resets a stabilization period (if we were in stabilization or stable state) if ( PRESSURE_LIMITS_STATE_STABILIZATION == currPresLimitsState ) @@ -460,16 +460,17 @@ U32 expiredTime = u32DiffWithWrap( stabilizationStartTimeMs, currentTime ); // if pressure is already stabilized enough, assign the short stabilize time for the recent event ( air pump on). - // else,leave the current/on going stabilization to expire due to long pending stable time to settle down the pressure. + // else,allow the ongoing stabilization to complete. // allow Normal stabilization on a case when user updates flow rate or UF rate etc., - if ( expiredTime > PRES_LIMIT_MIN_STABILIZATION_TIME_IN_MS || stabilizationPeriod == USE_NORMAL_STABILIZATION_PERIOD ) + if ( ( expiredTime > PRES_LIMIT_MIN_STABILIZATION_TIME_IN_MS ) || + ( stabilizationPeriod == USE_NORMAL_STABILIZATION_PERIOD ) ) { pressureStabilizeTime = stabilizationPeriod; stabilizationStartTimeMs = getMSTimerCount(); } } else if ( ( PRESSURE_LIMITS_STATE_STABLE == currPresLimitsState ) || - ( PRESSURE_LIMITS_STATE_SHORT_RESTABILIZATION == currPresLimitsState ) ) + ( PRESSURE_LIMITS_STATE_STABILIZATION_2 == currPresLimitsState ) ) { pressureStabilizeTime = stabilizationPeriod; currPresLimitsState = PRESSURE_LIMITS_STATE_STABILIZATION; @@ -489,7 +490,7 @@ static void determineArtVenPressureLimits( void ) { if ( ( PRESSURE_LIMITS_STATE_STABLE == currPresLimitsState ) || - ( PRESSURE_LIMITS_STATE_SHORT_RESTABILIZATION == currPresLimitsState ) ) + ( PRESSURE_LIMITS_STATE_STABILIZATION_2 == currPresLimitsState ) ) { // apply pressure windows when stable S32 artOffset = getTreatmentParameterS32( TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW ) / 2; // Arterial is symmetric @@ -656,14 +657,15 @@ { stabilizeTime = PRES_LIMIT_SHORT_STABILIZE_TIME_MS; } - else if ( USE_NORMAL_STABILIZATION_PERIOD == pressureStabilizeTime ) - { - stabilizeTime = PRES_LIMIT_STABILIZATION_TIME_MS; - } else if ( STABILIZATION_PERIOD_OFF == pressureStabilizeTime ) { stabilizeTime = PRES_LIMIT_STABILIZATION_OFF; } + // Normal stabilization period + else + { + stabilizeTime = PRES_LIMIT_STABILIZATION_TIME_MS; + } if ( bpRunning != TRUE ) { @@ -677,19 +679,21 @@ { updatePressureLimitWindows(); stabilizationStartTimeMs = getMSTimerCount(); + // second stage stabilization is not required when returning from stable state on every 15 minutes once. if ( pressureStabilizeTime == STABILIZATION_PERIOD_OFF ) { currPresLimitsState = PRESSURE_LIMITS_STATE_STABLE; } else { - currPresLimitsState = PRESSURE_LIMITS_STATE_SHORT_RESTABILIZATION; + currPresLimitsState = PRESSURE_LIMITS_STATE_STABILIZATION_2; } pressureStabilizeTime = USE_NORMAL_STABILIZATION_PERIOD; } break; - case PRESSURE_LIMITS_STATE_SHORT_RESTABILIZATION: + case PRESSURE_LIMITS_STATE_STABILIZATION_2: + // second stage stabilization helps to re determine the pressure due to UF control change etc., if ( bpRunning != TRUE ) { currPresLimitsState = PRESSURE_LIMITS_STATE_IDLE; @@ -702,12 +706,12 @@ { updatePressureLimitWindows(); stabilizationStartTimeMs = getMSTimerCount(); - pressureStabilizeTime = USE_NORMAL_STABILIZATION_PERIOD; currPresLimitsState = PRESSURE_LIMITS_STATE_STABLE; } break; case PRESSURE_LIMITS_STATE_STABLE: + // Pressure is re determined after every 15 minutes once and be remain in limited pressure windows. if ( bpRunning != TRUE ) { currPresLimitsState = PRESSURE_LIMITS_STATE_IDLE;