wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmplatform.cpp
changeset 0 c40eb8fe8501
child 3 6524e815f76f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmplatform.cpp	Tue Feb 02 02:03:13 2010 +0200
@@ -0,0 +1,325 @@
+/*
+* Copyright (c) 2002-2006 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"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Offers API to platform for the rest of the engine
+*
+*/
+
+
+#include <e32std.h>
+#include "wlmplatform.h"
+#include "wlmplatformdata.h"
+#include "am_debug.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CWlmPlatform::CWlmPlatform( MWlmPlatformCallback& aCallback ) :
+    iCallback( aCallback ), 
+    iCurrentSystemMode( EWlanSystemStartupInProgress ),
+    iPlatformData( NULL ),
+    iWlanConnectedBeforeEmergencyCall( EFalse ),
+    iSystemTimeHandler( NULL ),
+    iPeriodicCacheClearingHandler( NULL )
+    {
+    DEBUG( "CWlmPlatform::CWlmPlatform()" );
+    }
+
+// Symbian 2nd phase constructor can leave.
+void CWlmPlatform::ConstructL()
+    {
+    DEBUG( "CWlmPlatform::ConstructL()" );
+
+    iPlatformData = CWlmPlatformData::NewL( *this );
+    iSystemTimeHandler = CWlanSystemTimeHandler::NewL( *this );
+    iPeriodicCacheClearingHandler = CWlanPeriodicCacheClearingHandler::NewL ( *this );
+    }
+
+// Static constructor.
+EXPORT_C  CWlmPlatform* CWlmPlatform::NewL( MWlmPlatformCallback& aCallback )
+    {
+    DEBUG( "CWlmPlatform::NewL()" );
+
+    CWlmPlatform* self = new(ELeave) CWlmPlatform( aCallback );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+// Destructor
+EXPORT_C CWlmPlatform::~CWlmPlatform()
+    {
+    DEBUG( "CWlmPlatform::~CWlmPlatform()" );
+
+    delete iPlatformData;
+    delete iSystemTimeHandler;
+    delete iPeriodicCacheClearingHandler;
+    }
+
+// ---------------------------------------------------------
+// CWlmPlatform::Initialize
+// ---------------------------------------------------------
+//
+EXPORT_C void CWlmPlatform::Initialize()
+    {
+    DEBUG( "CWlmPlatform::Initialize()" );
+
+    iPlatformData->UpdateSystemStatuses();
+    }
+
+// ---------------------------------------------------------
+// CWlmPlatform::GetScanType
+// ---------------------------------------------------------
+//
+EXPORT_C TWLMScanType CWlmPlatform::GetScanType()
+    {
+    DEBUG( "CWlmPlatform::GetScanType()" );
+
+    //
+    // No scans if WLAN has been disabled or system is just
+    // starting up.
+    //
+    if( iCurrentSystemMode == EWlanSystemDisabled ||
+        iCurrentSystemMode == EWlanSystemStartupInProgress )
+        {
+        return EWLMScanNotAllowed;
+        }
+
+    //
+    // Scans are passive in PDA/Flight profile until a connection
+    // has been made.
+    //
+    if( iCallback.GetCurrentState() == EWlanStateNotConnected &&
+        iCurrentSystemMode == EWlanSystemFlight )
+        {
+        return EWLMScanForcedPassive;
+        }
+
+    return EWLMScanAsRequested;
+    }
+
+// ---------------------------------------------------------
+// CWlmPlatform::IsWlanDisabled
+// ---------------------------------------------------------
+//   
+EXPORT_C TBool CWlmPlatform::IsWlanDisabled()
+    {
+    if( iCurrentSystemMode == EWlanSystemDisabled )
+        {
+        return ETrue;   
+        }
+    return EFalse;
+    }
+
+// ---------------------------------------------------------
+// CWlmPlatform::GetCurrentSystemMode
+// ---------------------------------------------------------
+//
+EXPORT_C TWlanSystemMode CWlmPlatform::GetCurrentSystemMode()
+    {
+    DEBUG( "CWlmPlatform::GetCurrentSystemMode()" );
+
+    return iCurrentSystemMode;
+    }
+
+// ---------------------------------------------------------
+// CWlmPlatform::SetIconState
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CWlmPlatform::SetIconState( TWlmIconStatus aStatus )
+    {
+    if ( aStatus != EWlmIconStatusConnected &&
+         aStatus != EWlmIconStatusConnectedSecure )
+        {
+        iWlanConnectedBeforeEmergencyCall = EFalse;
+        }
+    
+    return iPlatformData->SetIconState( aStatus );    
+    }
+
+// ---------------------------------------------------------
+// CWlmPlatform::GetCurrentOperatorMccL
+// ---------------------------------------------------------
+//
+EXPORT_C void CWlmPlatform::GetCurrentOperatorMccL( TUint& aCountryCode )
+    {
+    iPlatformData->GetCurrentOperatorMccL( aCountryCode );
+    }
+
+// ---------------------------------------------------------
+// CWlmPlatform::PublishMacAddress
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CWlmPlatform::PublishMacAddress( TMacAddress& aMacAddr )
+    {
+    return iPlatformData->PublishMacAddress( aMacAddr );
+    }
+
+// ---------------------------------------------------------
+// CWlmPlatform::InitializeSystemTimeHandler
+// ---------------------------------------------------------
+//
+EXPORT_C void CWlmPlatform::InitializeSystemTimeHandler()
+    {
+    DEBUG( "CWlmPlatform::InitializeSystemTimeHandler()" );
+
+    iSystemTimeHandler->StopTimer();
+    iPeriodicCacheClearingHandler->StopTimer();
+    
+    iSystemTimeHandler->StartTimer();
+    iPeriodicCacheClearingHandler->StartTimer();
+    }
+
+// ---------------------------------------------------------
+// CWlmPlatform::SystemModeChanged
+// ---------------------------------------------------------
+//
+void CWlmPlatform::SystemModeChanged(
+    TWlanSystemMode aOldMode,
+    TWlanSystemMode aNewMode )
+    {
+    DEBUG( "CWlmPlatform::SystemModeChanged()" );
+
+    if ( aOldMode != aNewMode )
+        {
+        DEBUG2( "System Mode changed from %u to %u", aOldMode, aNewMode );
+        iCurrentSystemMode = aNewMode;
+
+        /**
+        * The "order" of System Modes is
+        * 1) GSM
+        * 2) Flight
+        * 3) Disabled
+        * 4) Starting
+        */
+        if ( aOldMode < aNewMode )
+            {
+            iCallback.ReleaseRequest();
+            }
+        else if ( aOldMode == EWlanSystemDisabled )
+            {
+            iCallback.EnableWlan();
+            }
+        else if ( aOldMode == EWlanSystemStartupInProgress )
+            {
+            iCallback.StartupComplete();
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CWlmPlatform::EmergencyCallEstablished
+// ---------------------------------------------------------
+//
+void CWlmPlatform::EmergencyCallEstablished()
+    {
+    DEBUG( "CWlmPlatform::EmergencyCallEstablished()" );
+
+    iCurrentSystemMode = EWlanSystemNormal;
+    iCallback.EnableWlan();
+        
+    if ( iCallback.GetCurrentState() == EWlanStateInfrastructure ||
+         iCallback.GetCurrentState() == EWlanStateIBSS || 
+         iCallback.GetCurrentState() == EWlanStateSecureInfra )
+        {
+        iWlanConnectedBeforeEmergencyCall = ETrue;
+        }
+    }
+
+// ---------------------------------------------------------
+// CWlmPlatform::EmergencyCallCompleted
+// ---------------------------------------------------------
+//
+void CWlmPlatform::EmergencyCallCompleted( TWlanSystemMode aNewMode )
+    {
+    DEBUG( "CWlmPlatform::EmergencyCallCompleted()" );
+
+        TBool startupComplete;
+        iCurrentSystemMode = aNewMode;
+        if ( aNewMode == EWlanSystemNormal )
+            {
+            startupComplete = ETrue;
+            iCallback.EmergencyCallComplete( startupComplete );
+            } 
+        else if ( aNewMode == EWlanSystemStartupInProgress)
+            {
+            /**
+            * Return back to the Startup in Progress mode
+            */
+            startupComplete = EFalse;
+            iCallback.ReleaseRequest();
+            iCallback.EmergencyCallComplete( startupComplete );
+            }
+        else if ( aNewMode == EWlanSystemFlight )
+      	    {
+       	    /* WLAN connection must be released if WLAN connection 
+       	     * was established only for the emergency call 
+       	     * (connection did not exist before the emergency call) 
+       	     */
+       	    if ( !iWlanConnectedBeforeEmergencyCall )
+       	        {
+       	        iCallback.ReleaseRequest();
+       	        }
+            startupComplete = ETrue;
+            iCallback.EmergencyCallComplete( startupComplete );
+       	    }
+        else
+            {
+            iCallback.ReleaseRequest();
+            }
+    iWlanConnectedBeforeEmergencyCall = EFalse;
+    }
+
+
+// ---------------------------------------------------------
+// CWlmPlatform::BtConnectionEstablished
+// ---------------------------------------------------------
+//
+void CWlmPlatform::BtConnectionEstablished()
+    {
+    iCallback.BtConnectionEstablished();  
+    }
+
+// ---------------------------------------------------------
+// CWlmPlatform::BtConnectionDisabled
+// ---------------------------------------------------------
+//
+void CWlmPlatform::BtConnectionDisabled()
+    {
+    iCallback.BtConnectionDisabled();
+    }
+
+// ---------------------------------------------------------
+// CWlmPlatform::OnSystemTimeChange
+// ---------------------------------------------------------
+//
+void CWlmPlatform::OnSystemTimeChange()
+    {
+    DEBUG( "CWlmPlatform::OnSystemTimeChange()" );
+    
+    iCallback.SystemTimeChanged();
+    }
+
+// ---------------------------------------------------------
+// CWlmPlatform::OnCacheClearTimerExpiration
+// ---------------------------------------------------------
+//
+void CWlmPlatform::OnCacheClearTimerExpiration()
+    {
+    DEBUG( "CWlmPlatform::OnCacheClearTimerExpiration()" );
+    
+    iCallback.ClearRegionCache();
+    }