locationmanager/locationtrail/src/cnetworkinfo.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 06 Jul 2010 14:44:37 +0300
changeset 36 aa5a574040a4
parent 20 6dfc5f825351
child 63 e538444823de
permissions -rw-r--r--
Revision: 201025 Kit: 2010127

/*
* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "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:  A class for getting network cell id.
*
*/

#include <etel3rdparty.h>

#include "cnetworkinfo.h"
#include "locationmanagerdebug.h"




// --------------------------------------------------------------------------
// CNetworkInfo::NewL
// --------------------------------------------------------------------------
//
EXPORT_C CNetworkInfo* CNetworkInfo::NewL( MNetworkInfoObserver* aTrail )
    {
    LOG( "CNetworkInfo::NewL(), begin" );
    CNetworkInfo* self = new (ELeave) CNetworkInfo( aTrail );
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }
        
// --------------------------------------------------------------------------
// CNetworkInfo::CNetworkInfo
// --------------------------------------------------------------------------
//  
CNetworkInfo::CNetworkInfo( MNetworkInfoObserver* aTrail ) 
    : CActive( CActive::EPriorityStandard ),
    iTrail ( aTrail ),
    iMobilePhone(aTrail->GetMobilePhone4NwInfo()),
    iState( ENetworkInfoNoOptState ),
    
    iMMNetworkInfoPckg( iMMNetworkInfo ) 
    {
    CActiveScheduler::Add( this );
    }

// --------------------------------------------------------------------------
// CNetworkInfo::ConstructL
// --------------------------------------------------------------------------
//    
void CNetworkInfo::ConstructL()
    {
	LOG( "CNetworkInfo::ConstructL(), begin" );
    StartNwInfoChangeNotifier();
    LOG( "CNetworkInfo::ConstructL(), end" );
    }
    
// --------------------------------------------------------------------------
// CNetworkInfo::~CNetworkInfo
// --------------------------------------------------------------------------
//    
EXPORT_C CNetworkInfo::~CNetworkInfo()
    {
    // we are not owning RMobilePhone obj.. DON'T CLOSE it.
    Cancel();
    }

// --------------------------------------------------------------------------
// CNetworkInfo::RunError
// --------------------------------------------------------------------------
//
TInt CNetworkInfo::RunError( TInt /*aError*/ )
    {
    return KErrNone;
    }    

// --------------------------------------------------------------------------
// CNetworkInfo::StartNwInfoChangeNotifier
// --------------------------------------------------------------------------
//    
EXPORT_C void CNetworkInfo::StartNwInfoChangeNotifier()
    { 
	LOG( "CNetworkInfo::StartNwInfoChangeNotifier(), begin" );   
   	if ( !IsActive())
    	{
    	// get current n/w info first and from RunL start notifier
        iState = ENetworkInfoOptGetState; 
        
        iMobilePhone.GetCurrentNetwork(iStatus, iMMNetworkInfoPckg, iMMArea);
        SetActive();
        }
    
    LOG( "CNetworkInfo::StartNwInfoChangeNotifier(), end" ); 
    }    

// --------------------------------------------------------------------------
// CNetworkInfo::StopNwInfoChangeNotifier
// --------------------------------------------------------------------------
//    
EXPORT_C void CNetworkInfo::StopNwInfoChangeNotifier()
    { 
	LOG( "CNetworkInfo::StopNwInfoChangeNotifier(), begin" );   
    Cancel();
    iState = ENetworkInfoNoOptState;
    LOG( "CNetworkInfo::StopNwInfoChangeNotifier(), end" ); 
    }    

// --------------------------------------------------------------------------
// CNetworkInfo::RunL
// --------------------------------------------------------------------------
//    
void CNetworkInfo::RunL()
    { 
	LOG( "CNetworkInfo::RunL(), begin" );   
	// reset the flag first
    iState = ENetworkInfoNoOptState;
    if(iStatus == KErrNone)
        {
        // convert the network info to CTelephony network info. just to give backward compatibility
        MapNetworkInfo(&iNetworkInfoV1, &iMMNetworkInfo, &iMMArea);
        }
    if(iTrail)
        {
        iTrail->NetworkInfo( iNetworkInfoV1, iStatus.Int() );
        }
    // listen to n/w info change
   	if ( !IsActive() )
    	{
    	iState = ENetworkInfoOptNotifyState;
        iMobilePhone.NotifyCurrentNetworkChange(iStatus,iMMNetworkInfoPckg, iMMArea);
        SetActive();
        }
    LOG( "CNetworkInfo::RunL(), end" ); 
    }    

// --------------------------------------------------------------------------
// CNetworkInfo::DoCancel
// --------------------------------------------------------------------------
// 
void CNetworkInfo::DoCancel()
    {
	LOG1( "CNetworkInfo::DoCancel(), begin. State - %d", iState);
	switch ( iState )    
        {   
        case ENetworkInfoOptGetState:
        	{
        	LOG( "Cancel get current n/w info change" );
        	iMobilePhone.CancelAsyncRequest( EMobilePhoneGetCurrentNetwork);
            break;
        	}
        case ENetworkInfoOptNotifyState:
    		{
        	LOG( "Cancel current n/w info change" );
        	iMobilePhone.CancelAsyncRequest( EMobilePhoneNotifyCurrentNetworkChange);
            break;
        	}
        default:
            break;
        }
    iState = ENetworkInfoNoOptState;
   	LOG( "CNetworkInfo::DoCancel(), end" );
    }

// --------------------------------------------------------------------------
// CNetworkInfo::MapNetworkInfo
// --------------------------------------------------------------------------
// 
EXPORT_C void CNetworkInfo::MapNetworkInfo(CTelephony::TNetworkInfoV1* aTelNetworkInfo, 
    RMobilePhone::TMobilePhoneNetworkInfoV2* aMMNetworkInfo, 
    RMobilePhone::TMobilePhoneLocationAreaV1* aMMArea)
	{
   	LOG( "CNetworkInfo::MapNetworkInfo(), begin" );
	switch(aMMNetworkInfo->iMode)
		{
		case RMobilePhone::ENetworkModeUnknown: 
			aTelNetworkInfo->iMode=CTelephony::ENetworkModeUnknown;
			break;
		case RMobilePhone::ENetworkModeUnregistered:
			aTelNetworkInfo->iMode=CTelephony::ENetworkModeUnregistered;
			break;
		case RMobilePhone::ENetworkModeGsm:
			aTelNetworkInfo->iMode=CTelephony::ENetworkModeGsm;
			break;
		case RMobilePhone::ENetworkModeAmps:
			aTelNetworkInfo->iMode=CTelephony::ENetworkModeAmps;
			break;			
		case RMobilePhone::ENetworkModeCdma95:
			aTelNetworkInfo->iMode=CTelephony::ENetworkModeCdma95;
			break;
		case RMobilePhone::ENetworkModeCdma2000:
			aTelNetworkInfo->iMode=CTelephony::ENetworkModeCdma2000;
			break;
		case RMobilePhone::ENetworkModeWcdma:
			aTelNetworkInfo->iMode=CTelephony::ENetworkModeWcdma;
			break;
		case RMobilePhone::ENetworkModeTdcdma:
			aTelNetworkInfo->iMode=CTelephony::ENetworkModeTdcdma;
			break;
		default:
			aTelNetworkInfo->iMode=CTelephony::ENetworkModeUnknown;
		}	

	switch(aMMNetworkInfo->iStatus)
		{
		case RMobilePhone::ENetworkStatusUnknown: 
			aTelNetworkInfo->iStatus=CTelephony::ENetworkStatusUnknown;
			break;
		case RMobilePhone::ENetworkStatusAvailable:
			aTelNetworkInfo->iStatus=CTelephony::ENetworkStatusAvailable;
			break;
		case RMobilePhone::ENetworkStatusCurrent:
			aTelNetworkInfo->iStatus=CTelephony::ENetworkStatusCurrent;
			break;
		case RMobilePhone::ENetworkStatusForbidden:
			aTelNetworkInfo->iStatus=CTelephony::ENetworkStatusForbidden;
			break;			
		default:
			aTelNetworkInfo->iStatus=CTelephony::ENetworkStatusUnknown;
		}	
			
	switch(aMMNetworkInfo->iBandInfo)
		{
		case RMobilePhone::EBandUnknown: 
			aTelNetworkInfo->iBandInfo=CTelephony::EBandUnknown;
			break;
		case RMobilePhone::E800BandA:
			aTelNetworkInfo->iBandInfo=CTelephony::E800BandA;
			break;
		case RMobilePhone::E800BandB:
			aTelNetworkInfo->iBandInfo=CTelephony::E800BandB;
			break;
		case RMobilePhone::E800BandC:
			aTelNetworkInfo->iBandInfo=CTelephony::E800BandC;
			break;			
		case RMobilePhone::E1900BandA:
			aTelNetworkInfo->iBandInfo=CTelephony::E1900BandA;
			break;
		case RMobilePhone::E1900BandB:
			aTelNetworkInfo->iBandInfo=CTelephony::E1900BandB;
			break;
		case RMobilePhone::E1900BandC:
			aTelNetworkInfo->iBandInfo=CTelephony::E1900BandC;
			break;
		case RMobilePhone::E1900BandD:
			aTelNetworkInfo->iBandInfo=CTelephony::E1900BandD;
			break;
		case RMobilePhone::E1900BandE:
			aTelNetworkInfo->iBandInfo=CTelephony::E1900BandE;
			break;
		case RMobilePhone::E1900BandF:
			aTelNetworkInfo->iBandInfo=CTelephony::E1900BandF;
			break;
		default:
			aTelNetworkInfo->iBandInfo=CTelephony::EBandUnknown;
		}			
	
	aTelNetworkInfo->iCountryCode.Copy(aMMNetworkInfo->iCountryCode);
	aTelNetworkInfo->iNetworkId.Copy(aMMNetworkInfo->iNetworkId);
	aTelNetworkInfo->iDisplayTag.Copy(aMMNetworkInfo->iDisplayTag);
	
	TInt maxLength = aTelNetworkInfo->iShortName.MaxLength();
	if (aMMNetworkInfo->iShortName.Length() > maxLength)
		{
		aTelNetworkInfo->iShortName.Copy(aMMNetworkInfo->iShortName.Ptr(), maxLength);
		}
	else
		{
		aTelNetworkInfo->iShortName.Copy(aMMNetworkInfo->iShortName);		
		}
	
	maxLength = aTelNetworkInfo->iLongName.MaxLength();

	if (aMMNetworkInfo->iLongName.Length() > maxLength)
		{
		aTelNetworkInfo->iLongName.Copy(aMMNetworkInfo->iLongName.Ptr(), maxLength);
		}
	else
		{
		aTelNetworkInfo->iLongName.Copy(aMMNetworkInfo->iLongName);	
		}
	
	aTelNetworkInfo->iCdmaSID.Copy(aMMNetworkInfo->iCdmaSID);
	
	if(aMMArea)
		{
		aTelNetworkInfo->iAreaKnown=aMMArea->iAreaKnown;
		aTelNetworkInfo->iLocationAreaCode=aMMArea->iLocationAreaCode;
		aTelNetworkInfo->iCellId=aMMArea->iCellId;	
		}
	else
		{
		aTelNetworkInfo->iAreaKnown=EFalse;
		aTelNetworkInfo->iLocationAreaCode=0;
		aTelNetworkInfo->iCellId=0;	
		}
	
	//check which paramater class version this is.		
	switch(aMMNetworkInfo->iAccess)
		{
		case RMobilePhone::ENetworkAccessUnknown: 
			aTelNetworkInfo->iAccess=CTelephony::ENetworkAccessUnknown;
			break;
		case RMobilePhone::ENetworkAccessGsm:
			aTelNetworkInfo->iAccess=CTelephony::ENetworkAccessGsm;
			break;
		case RMobilePhone::ENetworkAccessGsmCompact:
			aTelNetworkInfo->iAccess=CTelephony::ENetworkAccessGsmCompact;
			break;
		case RMobilePhone::ENetworkAccessUtran:
			aTelNetworkInfo->iAccess=CTelephony::ENetworkAccessUtran;
			break;			
		default:
			aTelNetworkInfo->iAccess=CTelephony::ENetworkAccessUnknown;
		}						
		
   	LOG( "CNetworkInfo::MapNetworkInfo(), end" );
	}

// ----------------------------------------------------------------------------
// CNetworkInfo::GetCurrentRegisterNw()
// ---------------------------------------------------------------------------- 
RMobilePhone::TMobilePhoneNetworkInfoV2& CNetworkInfo::GetCurrentRegisterNw()
    {
    return iMMNetworkInfo;
    }

// End of file