Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -rf0c16ca7223ad48b7bdb86b8f010b74b550c0051 -rda757a96fa3b5756a2cc6321cc851af9a2cfcf09 --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision f0c16ca7223ad48b7bdb86b8f010b74b550c0051) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision da757a96fa3b5756a2cc6321cc851af9a2cfcf09) @@ -43,6 +43,7 @@ #define PRES_OCCL_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the pressure/occlusion data is published on the CAN bus. #define PRES_LIMIT_STABILIZATION_TIME_MS ( 60 * MS_PER_SECOND ) ///< Duration of pressure limit stabilization period (in ms). +#define PRES_LIMIT_SHORT_STABILIZE_TIME_MS ( 5 * MS_PER_SECOND ) ///< Duration of pressure limit short stabilization period (in ms). #define PRES_LIMIT_RESTABILIZE_TIME_MS ( 30 * SEC_PER_MIN * MS_PER_SECOND ) ///< Duration of pressure limit re-stabilize period (in ms). #define ARTERIAL_PRESSURE_CONVERSION_OFFSET 0x800000 ///< Arterial pressure conversion coefficient. @@ -171,6 +172,7 @@ static F32 shortFilteredArterialPressure; ///< Measured arterial pressure after short (1 s) filter. static F32 longFilteredVenousPressure; ///< Measured venous pressure after long (10 s) filter. static F32 shortFilteredVenousPressure; ///< Measured venous pressure after short (1 s) filter. +static BOOL useShortStablizeTime; ///< Flag to use short stabilize time. static U32 bloodPumpOcclusionAfterCartridgeInstall; ///< Measured blood pump occlusion reading taken after cartridge install. @@ -258,6 +260,7 @@ presOcclState = PRESSURE_WAIT_FOR_POST_STATE; presOcclPostState = PRESSURE_SELF_TEST_STATE_START; bloodPumpOcclusionAfterCartridgeInstall = 0; + useShortStablizeTime = FALSE; } /*********************************************************************//** @@ -402,17 +405,30 @@ * will be in effect immediately (next monitor pass). If treatment paused, * resume will start a new stabilization period ending in another set of * stable pressures before windowed limits recalculated. - * @details Inputs: none + * @details Inputs: useShort * @details Outputs: stableArterialPressure, stableVenousPressure * @return none *************************************************************************/ -void updatePressureLimitWindows( void ) +void updatePressureLimitWindows( BOOL useShort ) { - F32 filtArt = getLongFilteredArterialPressure(); - F32 filtVen = getLongFilteredVenousPressure(); - S32 curArtPres = FLOAT_TO_INT_WITH_ROUND( filtArt ); - S32 curVenPres = FLOAT_TO_INT_WITH_ROUND( filtVen ); + F32 filtArt; + F32 filtVen; + S32 curArtPres; + S32 curVenPres; + if ( useShort ) + { + filtArt = getFilteredArterialPressure(); + filtVen = getFilteredVenousPressure(); + } + else + { + F32 filtArt = getLongFilteredArterialPressure(); + F32 filtVen = getLongFilteredVenousPressure(); + } + + curArtPres = FLOAT_TO_INT_WITH_ROUND( filtArt ); + curVenPres = FLOAT_TO_INT_WITH_ROUND( filtVen ); stableArterialPressure = curArtPres; stableVenousPressure = curVenPres; @@ -425,12 +441,15 @@ * The signalInitiatePressureStabilization function signals that user has * changed the blood and/or dialysate flow rate. If pressure limits state * was stable, a rate change will kick us back to stabilization state. - * @details Inputs: none - * @details Outputs: currPresLimitsState, stabilizationStartTimeMs + * Else reset stabilize counter. + * @details Inputs: useShort + * @details Outputs: currPresLimitsState, stabilizationStartTimeMs, useShortStablizeTime * @return none *************************************************************************/ -void signalInitiatePressureStabilization( void ) +void signalInitiatePressureStabilization( BOOL useShort ) { + useShortStablizeTime = useShort; + // 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 ) { @@ -574,6 +593,7 @@ BOOL bpRampComplete = isBloodPumpRampComplete(); HD_OP_MODE_T currMode = getCurrentOperationMode(); TREATMENT_STATE_T currTxState = getTreatmentState(); + U32 stabilizeTime = PRES_LIMIT_STABILIZATION_TIME_MS; if ( currMode != MODE_TREA ) { @@ -604,11 +624,21 @@ else if ( ( TREATMENT_DIALYSIS_STATE == currTxState ) || ( TREATMENT_STOP_STATE == currTxState ) ) { stabilizationStartTimeMs = getMSTimerCount(); + useShortStablizeTime = FALSE; currPresLimitsState = PRESSURE_LIMITS_STATE_STABILIZATION; } break; case PRESSURE_LIMITS_STATE_STABILIZATION: + if ( useShortStablizeTime ) + { + stabilizeTime = PRES_LIMIT_SHORT_STABILIZE_TIME_MS; + } + else + { + stabilizeTime = PRES_LIMIT_STABILIZATION_TIME_MS; + } + if ( bpRunning != TRUE ) { currPresLimitsState = PRESSURE_LIMITS_STATE_IDLE; @@ -617,10 +647,11 @@ { currPresLimitsState = PRESSURE_LIMITS_STATE_WIDE; } - else if ( TRUE == didTimeout( stabilizationStartTimeMs, PRES_LIMIT_STABILIZATION_TIME_MS ) ) + else if ( TRUE == didTimeout( stabilizationStartTimeMs, stabilizeTime ) ) { - updatePressureLimitWindows(); + updatePressureLimitWindows( useShortStablizeTime ); stabilizationStartTimeMs = getMSTimerCount(); + useShortStablizeTime = FALSE; currPresLimitsState = PRESSURE_LIMITS_STATE_STABLE; } break; @@ -637,6 +668,7 @@ else if ( TRUE == didTimeout( stabilizationStartTimeMs, PRES_LIMIT_RESTABILIZE_TIME_MS ) ) { stabilizationStartTimeMs = getMSTimerCount(); + useShortStablizeTime = FALSE; currPresLimitsState = PRESSURE_LIMITS_STATE_STABILIZATION; } break;