wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanmgmtimpl.cpp
changeset 39 3d23268b50f6
parent 36 1c425781161e
--- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanmgmtimpl.cpp	Tue Jul 06 16:24:00 2010 +0300
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanmgmtimpl.cpp	Wed Aug 18 11:35:02 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 32 %
+* %version: 34 %
 */
 
 // INCLUDE FILES
@@ -401,14 +401,14 @@
     iCacheLifetime = KWlanMgmtDefaultCacheLifetime;
     iMaxDelay = KWlanMgmtDefaultMaxDelay;
 
-	TInt ret = iServer.GetAvailableIaps( iaps, iCacheLifetime, iMaxDelay );
+	TInt ret = iServer.GetAvailableIaps( iaps, iCacheLifetime, iMaxDelay, ETrue );
 	if ( ret != KErrNone )
 		{
 		return ret;
 		}   
     for ( TUint idx( 0 ); idx < iaps.count; ++idx )
         {
-        aAvailableIaps.Append( iaps.iaps[idx] );
+        aAvailableIaps.Append( iaps.iaps[idx].iapId );
         }
 
     return KErrNone;
@@ -684,7 +684,7 @@
 //
 void CWlanMgmtImpl::ActivateExtendedNotificationsL(
     MWlanMgmtNotifications& aCallback,
-    TUint aCallbackInterfaceVersion = KWlanCallbackInterfaceVersion )
+    TUint aCallbackInterfaceVersion )
     {
     TraceDump( INFO_LEVEL, ( _L( "CWlanMgmtImpl::ActivateExtendedNotificationsL()" ) ) );
     iClientNotification = &aCallback;
@@ -799,6 +799,33 @@
     }
 
 // ---------------------------------------------------------
+// CWlanMgmtImpl::GetAvailableIaps
+// ---------------------------------------------------------
+//
+void CWlanMgmtImpl::GetAvailableIaps(
+    TInt& aCacheLifetime,
+    TUint& aMaxDelay,
+    TBool aFilteredResults,
+    TRequestStatus& aStatus,
+    RArray<TWlanIapAvailabilityData>& aAvailableIaps )
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanMgmtImpl::GetAvailableIaps() (async)" ) ) );
+    
+    aAvailableIaps.Reset();
+    
+    aStatus = KRequestPending;
+    iPendingAvailableIapsStatus = &aStatus;    
+    iAvailableIapsRequest = new CWlanAvailableIapsRequest( *this, iServer, aAvailableIaps, aCacheLifetime, aMaxDelay, aFilteredResults );
+    if ( !iAvailableIapsRequest )
+        {
+        User::RequestComplete( iPendingAvailableIapsStatus, KErrNoMemory );
+        iPendingAvailableIapsStatus = NULL;
+        return;
+        }
+    iAvailableIapsRequest->IssueRequest();
+    }
+
+// ---------------------------------------------------------
 // CWlanMgmtImpl::ScanComplete
 // ---------------------------------------------------------
 //
@@ -1069,10 +1096,36 @@
     CActive( CActive::EPriorityStandard ),
     iCallback( aCallback ),
     iServer( aServer ),
-    iPendingAvailableIaps( aAvailableIaps ),
+    iPendingAvailableIapIds( &aAvailableIaps ),
+    iPendingAvailableIaps( NULL ),
     iAvailableIapsBuf( iAvailableIaps ),
     iCacheLifetimeBuf( aCacheLifetime ),
-    iMaxDelayBuf( aMaxDelay )
+    iMaxDelayBuf( aMaxDelay ),
+    iFilteredResults( ETrue )
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanAvailableIapsRequest::CWlanAvailableIapsRequest()" ) ) );
+    CActiveScheduler::Add( this );
+    }
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CWlanAvailableIapsRequest::CWlanAvailableIapsRequest(
+    CWlanMgmtImpl& aCallback, 
+    RWLMServer& aServer,
+    RArray<TWlanIapAvailabilityData>& aAvailableIaps,
+    TInt& aCacheLifetime,
+    TUint& aMaxDelay,
+    TBool aFilteredResults ) :
+    CActive( CActive::EPriorityStandard ),
+    iCallback( aCallback ),
+    iServer( aServer ),
+    iPendingAvailableIapIds( NULL ),
+    iPendingAvailableIaps( &aAvailableIaps ),
+    iAvailableIapsBuf( iAvailableIaps ),
+    iCacheLifetimeBuf( aCacheLifetime ),
+    iMaxDelayBuf( aMaxDelay ),
+    iFilteredResults( aFilteredResults )
     {
     TraceDump( INFO_LEVEL, ( _L( "CWlanAvailableIapsRequest::CWlanAvailableIapsRequest()" ) ) );
     CActiveScheduler::Add( this );
@@ -1083,6 +1136,8 @@
     {
     TraceDump( INFO_LEVEL, ( _L( "CWlanAvailableIapsRequest::CWlanAvailableIapsRequest()" ) ) );
     Cancel();
+    iPendingAvailableIapIds = NULL;
+    iPendingAvailableIaps = NULL;
     }
 
 // ---------------------------------------------------------
@@ -1092,7 +1147,7 @@
 void CWlanAvailableIapsRequest::IssueRequest()
     {
     TraceDump( INFO_LEVEL, ( _L( "CWlanAvailableIapsRequest::IssueRequest()" ) ) );
-    iServer.GetAvailableIaps( iAvailableIapsBuf, iCacheLifetimeBuf, iMaxDelayBuf, iStatus );
+    iServer.GetAvailableIaps( iAvailableIapsBuf, iCacheLifetimeBuf, iMaxDelayBuf, iFilteredResults, iStatus );
     SetActive();
     }
 
@@ -1103,9 +1158,24 @@
 void CWlanAvailableIapsRequest::RunL()
     {
     TraceDump( INFO_LEVEL, ( _L( "CWlanAvailableIapsRequest::RunL()" ) ) );
-    for ( TUint idx( 0 ); idx < iAvailableIaps.count; ++idx )
+    if( iPendingAvailableIapIds )
+        {
+        for ( TUint idx( 0 ); idx < iAvailableIaps.count; ++idx )
+            {
+            iPendingAvailableIapIds->Append( iAvailableIaps.iaps[idx].iapId );
+            }
+        }
+    else if( iPendingAvailableIaps )
         {
-        iPendingAvailableIaps.Append( iAvailableIaps.iaps[idx] );
+        for ( TUint idx( 0 ); idx < iAvailableIaps.count; ++idx )
+            {
+            TWlanIapAvailabilityData tmp;
+            tmp.iIapId = iAvailableIaps.iaps[idx].iapId;
+            // RCPI -> RSSI CONVERSION
+            // Note: conversion may round the result by 0.5 units
+            tmp.iRssi = ( 110 - ( iAvailableIaps.iaps[idx].rcpi / 2 ) ); 
+            iPendingAvailableIaps->Append( tmp );
+            }        
         }
     iCallback.AvailableIapsComplete( iStatus.Int() );
     }