locationmanager/locationtrail/src/cnetworkinfo.cpp
branchRCL_3
changeset 19 b73252188534
parent 6 646a02f170b9
--- a/locationmanager/locationtrail/src/cnetworkinfo.cpp	Thu Jul 15 19:07:24 2010 +0300
+++ b/locationmanager/locationtrail/src/cnetworkinfo.cpp	Thu Aug 19 10:20:41 2010 +0300
@@ -20,6 +20,9 @@
 #include "cnetworkinfo.h"
 #include "locationmanagerdebug.h"
 
+
+
+
 // --------------------------------------------------------------------------
 // CNetworkInfo::NewL
 // --------------------------------------------------------------------------
@@ -31,7 +34,6 @@
     CleanupStack::PushL( self );
     self->ConstructL();
     CleanupStack::Pop( self );
-    LOG( "CNetworkInfo::NewL(), end" );
     return self;
     }
         
@@ -41,12 +43,13 @@
 //  
 CNetworkInfo::CNetworkInfo( MNetworkInfoObserver* aTrail ) 
     : CActive( CActive::EPriorityStandard ),
-    iFirstTime( EFalse ),
-    iTelephony( NULL ),
-    iNetworkInfoV1Pckg( iNetworkInfoV1 ) 
+    iTrail ( aTrail ),
+    iMobilePhone(aTrail->GetMobilePhone4NwInfo()),
+    iState( ENetworkInfoNoOptState ),
+    
+    iMMNetworkInfoPckg( iMMNetworkInfo ) 
     {
     CActiveScheduler::Add( this );
-    iTrail = aTrail;
     }
 
 // --------------------------------------------------------------------------
@@ -56,17 +59,7 @@
 void CNetworkInfo::ConstructL()
     {
 	LOG( "CNetworkInfo::ConstructL(), begin" );
-	iFirstTime = ETrue;
-    iTelephony = CTelephony::NewL();
-    iTelephony->GetCurrentNetworkInfo(iStatus, iNetworkInfoV1Pckg);
-    LOG( "CNetworkInfo::ConstructL(), iTelephony->GetCurrentNetworkInfo called" );
-    
-   	if ( IsActive() )
-    	{
-    	Cancel();
-        }    
-    SetActive();
-    
+    StartNwInfoChangeNotifier();
     LOG( "CNetworkInfo::ConstructL(), end" );
     }
     
@@ -76,8 +69,8 @@
 //    
 EXPORT_C CNetworkInfo::~CNetworkInfo()
     {
+    // we are not owning RMobilePhone obj.. DON'T CLOSE it.
     Cancel();
-    delete iTelephony;
     }
 
 // --------------------------------------------------------------------------
@@ -90,25 +83,61 @@
     }    
 
 // --------------------------------------------------------------------------
+// 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" );   
-	iFirstTime = EFalse; 
-    iTrail->NetworkInfo( iNetworkInfoV1, iStatus.Int() );
-    LOG( "CNetworkInfo::RunL(), iTrail->NetworkInfo called" );   
-    
-    iTelephony->NotifyChange(iStatus, CTelephony::ECurrentNetworkInfoChange, iNetworkInfoV1Pckg);
-    LOG( "CNetworkInfo::RunL(), iTelephony->NotifyChange called" );
-      
-   	if ( IsActive() )
+	// 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() )
     	{
-    	Cancel();
-        }    
-    SetActive();
-    
+    	iState = ENetworkInfoOptNotifyState;
+        iMobilePhone.NotifyCurrentNetworkChange(iStatus,iMMNetworkInfoPckg, iMMArea);
+        SetActive();
+        }
     LOG( "CNetworkInfo::RunL(), end" ); 
     }    
 
@@ -118,21 +147,190 @@
 // 
 void CNetworkInfo::DoCancel()
     {
-	LOG( "CNetworkInfo::DoCancel(), begin" );
-	if ( IsActive() )
-		{
-    	if ( iFirstTime )    
+	LOG1( "CNetworkInfo::DoCancel(), begin. State - %d", iState);
+	switch ( iState )    
+        {   
+        case ENetworkInfoOptGetState:
         	{
-	    	LOG( "CNetworkInfo::DoCancel(), cancelling CTelephony::EGetCurrentNetworkInfoCancel" );
-        	iTelephony->CancelAsync( CTelephony::EGetCurrentNetworkInfoCancel );
+        	LOG( "Cancel get current n/w info change" );
+        	iMobilePhone.CancelAsyncRequest( EMobilePhoneGetCurrentNetwork);
+            break;
         	}
-    	else
+        case ENetworkInfoOptNotifyState:
     		{
-	    	LOG( "CNetworkInfo::DoCancel(), cancelling CTelephony::ECurrentNetworkInfoChangeCancel" );
-	    	iTelephony->CancelAsync( CTelephony::ECurrentNetworkInfoChangeCancel );	
-    		}
-		}	
+        	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
+