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; Index: firmware/App/Controllers/PresOccl.h =================================================================== diff -u -rf84665efed96420a7a0192910b98c8d975041bb8 -r8a78d0bee10166f1b5d2c47474f57f8a7b279cba --- firmware/App/Controllers/PresOccl.h (.../PresOccl.h) (revision f84665efed96420a7a0192910b98c8d975041bb8) +++ firmware/App/Controllers/PresOccl.h (.../PresOccl.h) (revision 8a78d0bee10166f1b5d2c47474f57f8a7b279cba) @@ -32,14 +32,14 @@ // ********** public definitions ********** -/// Enumeration of stabilization period. -typedef enum StabilizationPeriod +/// Enumeration of stabilization periods. +typedef enum StabilizationPeriods { STABILIZATION_PERIOD_OFF = 0, ///< Stabilization period off - 0 seconds USE_SHORT_STABILIZATION_PERIOD, ///< Short stabilization period for air pump event - 10 seconds USE_NORMAL_STABILIZATION_PERIOD, ///< Normal Stabilization period for system events, excluding airpump events ( treatment param change, resume treatment etc.,) - 60 seconds - NUM_OF_STABILIZATION_PERIOD ///< Number of stabilization period -} STABILIZATION_PERIOD_T; + NUM_OF_STABILIZATION_PERIODS ///< Number of stabilization periods +} STABILIZATION_PERIODS_T; /// Enumeration of pressure sensors monitored by this module. typedef enum PressureSensors @@ -56,7 +56,7 @@ PRESSURE_LIMITS_STATE_IDLE, ///< Idle - in Treatment mode state where BP is stopped - no pressure low/high alarms PRESSURE_LIMITS_STATE_WIDE, ///< Wide - in Treatment mode state where BP is running but wide limits apply PRESSURE_LIMITS_STATE_STABILIZATION, ///< Stabilization - in Treatment mode state where BP is running (dialysis or stop), but need to stabilize first - PRESSURE_LIMITS_STATE_SHORT_RESTABILIZATION, ///< Second stage stabilization - re adjust the pressure that has been drifted due to UF control etc and limit windows apply + PRESSURE_LIMITS_STATE_STABILIZATION_2, ///< Second stage stabilization - re adjust the pressure that has been drifted due to UF control etc and limit windows apply PRESSURE_LIMITS_STATE_STABLE, ///< Stable - in Treatment mode state where BP is running (dialysis or stop) and limit windows apply NUM_OF_PRESSURE_LIMITS_STATES ///< Number of pressure limits states } PRESSURE_LIMITS_STATES_T; @@ -87,7 +87,7 @@ void setPressureLimitsToOuterBounds( void ); void updatePressureLimitWindows( void ); -void signalInitiatePressureStabilization( STABILIZATION_PERIOD_T stabilizationPeriod ); +void signalInitiatePressureStabilization( STABILIZATION_PERIODS_T stabilizationPeriod ); void resetArtVenPressureOffsets( void ); void setArtVenPressureOffsets( void );