/*
* Copyright (c) 2002-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"
* 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
*
*/
/*
* %version: 12 %
*/
#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::PublishBgScanInterval
// ---------------------------------------------------------
//
EXPORT_C void CWlmPlatform::PublishBgScanInterval( TUint32& aInterval )
{
iPlatformData->PublishBgScanInterval( aInterval );
}
// ---------------------------------------------------------
// 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();
}