diff -r af3fb27c7511 -r 13838cf40350 wlan_bearer/wlanldd/wlan_common/umac_common/src/umacnullsendcontroller.cpp --- a/wlan_bearer/wlanldd/wlan_common/umac_common/src/umacnullsendcontroller.cpp Tue May 25 14:40:09 2010 +0300 +++ b/wlan_bearer/wlanldd/wlan_common/umac_common/src/umacnullsendcontroller.cpp Mon Jun 21 17:43:00 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of the License "Eclipse Public License v1.0" @@ -16,7 +16,7 @@ */ /* -* %version: 15 % +* %version: 16 % */ #include "config.h" @@ -397,32 +397,17 @@ iFlags &= ~KKeepAliveTimerArmed; - TUint32 KTimeAfterLatestTx ( - static_cast(os_systemTime() - iLatestTx) ); - - if ( KTimeAfterLatestTx >= iKeepAliveTimeout ) + // request a regular Null Data frame to be sent + // however, if there is a frame Tx (of any frame) already pending OR + // we use U-APSD for Voice and we are on a VoWLAN call + // we won't request a new frame to be sent. + if ( !iWlanContextImpl.UnsentTxPackets() && + !( iWlanContextImpl.UapsdUsedForVoice() && InVoiceCallState() ) ) { - // request a regular Null Data frame to be sent - - // however, if there is a frame Tx (of any frame) already pending, - // we won't request a new frame to be sent. - if ( !iWlanContextImpl.UnsentTxPackets() ) + if ( !iNullSender.TxNullDataFrame( iWlanContextImpl, EFalse ) ) { - if ( !iNullSender.TxNullDataFrame( iWlanContextImpl, EFalse ) ) - { - // frame was not sent because we didn't get a Tx buffer. - // In this case we'll skip the sending - // However, we need to re-arm the timer to trigger the next - // Null Data frame sending - RegisterKeepAliveTimeout( iKeepAliveTimeout ); - } - } - else - { - // frame Tx already pending, so we don't ask a Null Data to be sent - OsTracePrint( KUmacDetails, (TUint8*) - ("UMAC: WlanNullSendController::OnKeepAliveTimerTimeout: frame Tx already pending. New Null Data Tx request skipped") ); - + // frame was not sent because we didn't get a Tx buffer. + // In this case we'll skip the sending // However, we need to re-arm the timer to trigger the next // Null Data frame sending RegisterKeepAliveTimeout( iKeepAliveTimeout ); @@ -430,9 +415,15 @@ } else { - // No need to send keep alive; yet. Re-arm the timer with - // a suitable timeout relative to the time of the latest frame Tx - RegisterKeepAliveTimeout( iKeepAliveTimeout - KTimeAfterLatestTx ); + // we don't ask a Null Data to be sent + OsTracePrint( KUmacDetails, (TUint8*) + ("UMAC: WlanNullSendController::OnKeepAliveTimerTimeout: frame Tx " + "already pending OR U-APSD used for Voice and we are in VoWLAN" + "call => Null Data Tx request skipped") ); + + // However, we need to re-arm the timer to trigger the next + // Null Data frame sending + RegisterKeepAliveTimeout( iKeepAliveTimeout ); } }