diff -r af3fb27c7511 -r 13838cf40350 wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanmgmtimpl.cpp --- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanmgmtimpl.cpp Tue May 25 14:40:09 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanmgmtimpl.cpp Mon Jun 21 17:43:00 2010 +0300 @@ -16,7 +16,7 @@ */ /* -* %version: 31 % +* %version: 31.1.2 % */ // 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; @@ -683,7 +683,7 @@ // void CWlanMgmtImpl::ActivateExtendedNotificationsL( MWlanMgmtNotifications& aCallback, - TUint aCallbackInterfaceVersion = KWlanCallbackInterfaceVersion ) + TUint aCallbackInterfaceVersion ) { TraceDump( INFO_LEVEL, ( _L( "CWlanMgmtImpl::ActivateExtendedNotificationsL()" ) ) ); iClientNotification = &aCallback; @@ -798,6 +798,33 @@ } // --------------------------------------------------------- +// CWlanMgmtImpl::GetAvailableIaps +// --------------------------------------------------------- +// +void CWlanMgmtImpl::GetAvailableIaps( + TInt& aCacheLifetime, + TUint& aMaxDelay, + TBool aFilteredResults, + TRequestStatus& aStatus, + RArray& 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 // --------------------------------------------------------- // @@ -1068,10 +1095,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& 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 ); @@ -1082,6 +1135,8 @@ { TraceDump( INFO_LEVEL, ( _L( "CWlanAvailableIapsRequest::CWlanAvailableIapsRequest()" ) ) ); Cancel(); + iPendingAvailableIapIds = NULL; + iPendingAvailableIaps = NULL; } // --------------------------------------------------------- @@ -1091,7 +1146,7 @@ void CWlanAvailableIapsRequest::IssueRequest() { TraceDump( INFO_LEVEL, ( _L( "CWlanAvailableIapsRequest::IssueRequest()" ) ) ); - iServer.GetAvailableIaps( iAvailableIapsBuf, iCacheLifetimeBuf, iMaxDelayBuf, iStatus ); + iServer.GetAvailableIaps( iAvailableIapsBuf, iCacheLifetimeBuf, iMaxDelayBuf, iFilteredResults, iStatus ); SetActive(); } @@ -1102,9 +1157,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() ); }