Index: firmware/App/Controllers/AirTrap.c =================================================================== diff -u -r3698f3664dd6102ba378f85f7fa65fc9ee6dc5a1 -rb0e7750d1f612f98d21513eb18d0971fa1c7547a --- firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision 3698f3664dd6102ba378f85f7fa65fc9ee6dc5a1) +++ firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision b0e7750d1f612f98d21513eb18d0971fa1c7547a) @@ -358,9 +358,9 @@ } } - // Raise air trap level once at start of treatment (blood priming) or when air detected at upper level - else if ( ( TRUE == airTrapWasFilledAtStartOfTreatement ) || - ( AIR_TRAP_LEVEL_AIR == getLevelSensorState( H16_LEVL ) ) ) + // Raise air trap level once at start of treatment (blood priming) or when air detected at lower level + else if ( ( airTrapWasFilledAtStartOfTreatement != TRUE ) || + ( AIR_TRAP_LEVEL_AIR == getLevelSensorState( H17_LEVL ) ) ) { setAirPumpState( AIR_PUMP_STATE_ON, AIR_PUMP_MOTOR_FILL_PWM ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); // open valve H20 to allow air to be pumped out of air trap to atmosphere @@ -393,16 +393,17 @@ set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); result = AIR_TRAP_MANUAL_CONTROL_STATE; } - // Transition back to closed state when air trap fill completed + // Transition back to lower level state when air trap fill completed else if ( AIR_TRAP_LEVEL_FLUID == getRawLevelSensorState( H16_LEVL ) ) { airTrapWasFilledAtStartOfTreatement = TRUE; - setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); - airTrapLowerDelayStartTime = calcTimeBetween( AIR_PUMP_ON_DELAY_ADJUST_AFTER_FILL, getMSTimerCount() ); - signalLowVenousPressureCheck(); - SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_AIR_TRAP_FILL, OFF, 0 ); - result = AIR_TRAP_CLOSED_STATE; + set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); // open valve H13 to allow air to be pumped into air trap from atmosphere + setAirPumpState( AIR_PUMP_STATE_ON, AIR_PUMP_MOTOR_LOWER_PWM ); + airTrapLowerStartTime = getMSTimerCount(); + signalInitiatePressureStabilization( USE_SHORT_STABILIZATION_PERIOD ); + SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_AIR_TRAP_LOWER, ON, 0 ); + result = AIR_TRAP_LOWER_LEVEL_STATE; } return result; @@ -433,14 +434,15 @@ set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); result = AIR_TRAP_MANUAL_CONTROL_STATE; } - // Transition back to closed state when air trap lower level operation completed + // Transition back to closed state when air trap lower level operation completed when air detected at upper level else if ( ( TRUE == didTimeout( airTrapLowerStartTime, airPumpStopTime ) ) || ( AIR_TRAP_LEVEL_AIR == getRawLevelSensorState( H16_LEVL ) ) ) { setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); airTrapLowerDelayStartTime = getMSTimerCount(); + signalLowVenousPressureCheck(); SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_AIR_TRAP_LOWER, OFF, 0 ); // if lower level operation times out, alarm if ( TRUE == didTimeout( airTrapLowerStartTime, airPumpStopTime ) )