--- 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
+