wlan_bearer/wlanldd/wlan_common/umac_common/src/umacnullsendcontroller.cpp
branchRCL_3
changeset 14 13838cf40350
parent 0 c40eb8fe8501
--- 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<TUint32>(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 );
         }
     }