Index: firmware/App/Controllers/AirTrap.c =================================================================== diff -u -rca8d99e25bf12144593d4f9dcfab9f1564269ef0 -rdba0155ba6025beaaba0c55afb36fa1258ca4fb2 --- firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision ca8d99e25bf12144593d4f9dcfab9f1564269ef0) +++ firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision dba0155ba6025beaaba0c55afb36fa1258ca4fb2) @@ -37,8 +37,9 @@ #define AIR_TRAP_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the air trap data is published on the CAN bus. -#define AIR_TRAP_FILL_TIMEOUT_MS ( 10 * MS_PER_SECOND ) ///< Air trap fill timeout period (in ms). +#define AIR_TRAP_FILL_TIMEOUT_MS ( 10 * MS_PER_SECOND ) ///< Air trap fill timeout period (in ms). #define AIR_PUMP_ON_DELAY_TIME_MS ( 10 * MS_PER_SECOND ) ///< Delay between air pump On (in ms). +#define AIR_PUMP_ON_STOP_TIME_MS 400 ///< Stop air Pump irrespective of air trap level. #define AIR_PUMP_UPPER_LEVEL_PERSISTENCE ( 100 / TASK_GENERAL_INTERVAL ) ///< Persistence time for air pump operation after air trap upper level reads air. #define AIR_PUMP_ON_ERROR_MAX_CNT 6 ///< Maximum number of air pump on events within time window before alarm triggered. Do not exceed MAX_TIME_WINDOWED_COUNT. #define AIR_PUMP_ON_ERROR_TIME_WIN_MS ( 60 * MS_PER_SECOND ) ///< Time window for Air Pump on count error. @@ -78,6 +79,7 @@ static U32 fillStartTime = 0; ///< Time stamp for start of air trap fill. static U32 airPumpOnDelayStartTime = 0; ///< Air pump On start time. +static U32 stopAirPumpStartTime = 0; ///< Stop air pump after defined time irrespective of air trap levels. static BOOL airTrapValveOpenAtStablePressureState = FALSE; ///< Periodic AirTrap fill during pressure stable state, to clear any accumulated bubbles @@ -104,6 +106,7 @@ airTrapValveOpenAtStablePressureState = TRUE; airPumpUpperLevelCtr = 0; airPumpOnDelayStartTime = getMSTimerCount(); + stopAirPumpStartTime = 0; for ( i = 0; i < NUM_OF_AIR_TRAP_LEVEL_SENSORS; i++ ) { @@ -400,21 +403,11 @@ result = AIR_TRAP_VALVE_OPEN_STATE; } - //Turn on air pump if fluid reaches upper level. - else if ( AIR_TRAP_LEVEL_FLUID == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_UPPER ) ) + // Turn air pump off after defined time or air detected at upper level + else if ( ( TRUE == didTimeout( stopAirPumpStartTime, AIR_PUMP_ON_STOP_TIME_MS ) ) || + ( ( AIR_TRAP_LEVEL_AIR == getRawAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_UPPER ) ) && + ( AIR_TRAP_LEVEL_FLUID == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_LOWER ) ) ) ) { - if ( ( AIR_PUMP_STATE_OFF == getAirPumpState() ) && - ( TRUE == didTimeout( airPumpOnDelayStartTime, AIR_PUMP_ON_DELAY_TIME_MS ) ) ) - { - setAirPumpState( AIR_PUMP_STATE_ON ); - airPumpUpperLevelCtr = 0; - signalInitiatePressureStabilization( USE_SHORT_STABILIZATION_PERIOD ); - } - } - - else if ( ( AIR_TRAP_LEVEL_AIR == getRawAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_UPPER ) ) && - ( AIR_TRAP_LEVEL_FLUID == getRawAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_LOWER ) ) ) - { if ( AIR_PUMP_STATE_ON == getAirPumpState() ) { airPumpUpperLevelCtr++; @@ -427,6 +420,19 @@ } } + //Turn on air pump if fluid reaches upper level. + else if ( AIR_TRAP_LEVEL_FLUID == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_UPPER ) ) + { + if ( ( AIR_PUMP_STATE_OFF == getAirPumpState() ) && + ( TRUE == didTimeout( airPumpOnDelayStartTime, AIR_PUMP_ON_DELAY_TIME_MS ) ) ) + { + setAirPumpState( AIR_PUMP_STATE_ON ); + stopAirPumpStartTime = getMSTimerCount(); + airPumpUpperLevelCtr = 0; + signalInitiatePressureStabilization( USE_SHORT_STABILIZATION_PERIOD ); + } + } + // Transition to open valve state when air detected at lower level else if ( ( AIR_TRAP_LEVEL_AIR == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_UPPER ) ) && ( AIR_TRAP_LEVEL_AIR == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_LOWER ) ) )