Index: firmware/App/Controllers/AirTrap.c =================================================================== diff -u -rff9c1ff6639463857772152b9339a237e6722184 -r32763ee524dc476f47ba41ee6c2a8a0c65ebf1e1 --- firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision ff9c1ff6639463857772152b9339a237e6722184) +++ firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision 32763ee524dc476f47ba41ee6c2a8a0c65ebf1e1) @@ -92,6 +92,8 @@ static BOOL airTrapHasDetectedFaultMode; ///< Flag indicates air trap unit has handled transition to fault mode. +static BOOL airTrapFirstLowerEvent; ///< Flag for first lower event + // ********** private function prototypes ********** static AIR_TRAP_STATE_T handleAirTrapManualControlState( void ); @@ -138,6 +140,7 @@ airTrapLowerDelayStartTime = 0; airTrapLowerStartTime = 0; airTrapHasDetectedFaultMode = FALSE; + airTrapFirstLowerEvent = FALSE; } /*********************************************************************//** @@ -404,8 +407,20 @@ ( TRUE == didTimeout( airTrapLowerDelayStartTime, AIR_PUMP_ON_DELAY_TIME_MS ) ) ) { set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); // open valve H13 to allow air to be pumped into air trap from atmosphere - //airTrapAirPumpLowerPowerLevel.data = getCalculatedAirPumpDutyCycle(); - setAirPumpState( AIR_PUMP_STATE_ON, getAirPumpLowerPowerLevel() ); + // if it is first lower event + if( TRUE == airTrapFirstLowerEvent ) + { + // use the long filtered H14 venous pressure based duty cycle before AP fill event stored in airTrapAirPumpLowerPowerLevel.data during fill + setAirPumpState( AIR_PUMP_STATE_ON, getAirPumpLowerPowerLevel() ); + airTrapFirstLowerEvent = FALSE; + } + else + { + // get long filtered H14 venous pressure before AP lower event for subsequent lower event + airTrapAirPumpLowerPowerLevel.data = getCalculatedAirPumpDutyCycle(); + setAirPumpState( AIR_PUMP_STATE_ON, getAirPumpLowerPowerLevel() ); + } + airTrapLowerStartTime = getMSTimerCount(); signalInitiatePressureStabilization( USE_SHORT_STABILIZATION_PERIOD ); SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_AIR_TRAP_LOWER, ON, 0 ); @@ -417,11 +432,14 @@ else if ( ( airTrapWasFilledAtStartOfTreatement != TRUE ) || ( AIR_TRAP_LEVEL_AIR == getLevelSensorState( H17_LEVL ) ) ) { + // fill/raise duty cycle is always 60% setAirPumpState( AIR_PUMP_STATE_ON, getAirPumpRaisePowerLevel() ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); // open valve H20 to allow air to be pumped out of air trap to atmosphere airTrapFillStartTime = getMSTimerCount(); SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_AIR_TRAP_FILL, ON, 0 ); - // get long filtered H14 venous pressure before AP fill event + // set flag for first lower event + airTrapFirstLowerEvent = TRUE; + // get long filtered H14 venous pressure and duty cycle before AP fill event for the first lower event airTrapAirPumpLowerPowerLevel.data = getCalculatedAirPumpDutyCycle(); result = AIR_TRAP_RAISE_LEVEL_STATE; } @@ -455,7 +473,7 @@ { airTrapWasFilledAtStartOfTreatement = TRUE; set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); - set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); // open valve H13 to allow air to be pumped into air trap from atmosphere + set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); //airTrapAirPumpLowerPowerLevel.data = getCalculatedAirPumpDutyCycle(); setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); // adjust the air trap lower delay start time after fill complete