--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasupletel.cpp Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,531 @@
+/*
+* Copyright (c) 2002-2005 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: Implementation of COMASuplEtel Class
+* Version : %version: 3 % << Don't touch! Updated by Synergy at check-out.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "epos_comasupltrace.h"
+#include "epos_comasupletel.h"
+#include "epos_comasupllocationid.h"
+
+_LIT(KTraceFileName,"SUPL_OMA_SESSION::EPos_COMASuplETel.cpp");
+
+// ============================ MEMBER FUNCTIONS OF COMASuplETel ===============================
+
+// -----------------------------------------------------------------------------
+// COMASuplETel::COMASuplETel,constuctor
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+
+COMASuplETel::COMASuplETel(MOMASuplETelObserver& aObserver,RMobilePhone& aPhone)
+ : CActive(EPriorityStandard),
+ iPhone(aPhone),
+ iNetworkInfoPkg( iNetworkInfo),
+ iObserver(aObserver),
+ iCellInfoPckg( iMmCellInfo )
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplETel::ConstructL,two phase constuctor
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplETel::ConstructL()
+ {
+ iTrace = COMASuplTrace::NewL();
+ iTrace->Trace(_L("COMASuplETel::ConstructL"), KTraceFileName, __LINE__);
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplETel::NewL,two phase constuctor
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+COMASuplETel* COMASuplETel::NewL(MOMASuplETelObserver& aObserver,
+ RMobilePhone& aPhone)
+ {
+ COMASuplETel* self = new( ELeave ) COMASuplETel(aObserver,aPhone);
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// COMASuplETel::DoCancel
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplETel::DoCancel()
+ {
+ if(iCellMode == EOMASuplCellId || iCellMode == EOMASuplCompareCellId)
+ {
+ iPhone.CancelAsyncRequest( EMobilePhoneGetCurrentNetwork );
+ }
+ else
+ {
+ #ifdef USE_E_CELL_ID_STUB
+ iCustomAPI.CancelAsyncRequest();
+ #else
+ iPhone.CancelAsyncRequest(ECustomGetCellInfoIPC) ;
+ #endif
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplETel::~COMASuplETel,Destructor
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+COMASuplETel::~COMASuplETel()
+ {
+ Cancel();
+ iCustomAPI.Close();
+ delete iTrace;
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplETel::GetLocationID,For retriving the cell id information
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplETel::GetLocationID()
+ {
+ iCellMode = EOMASuplCellId;
+ iTrace->Trace(_L("COMASuplETel::GetLocationID..."),KTraceFileName, __LINE__);
+ iPhone.GetCurrentNetwork( iStatus, iNetworkInfoPkg, iLocationInfo );
+ SetActive();
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplETel::GetECellID,For retriving the E-cell id information
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplETel::GetECellID()
+ {
+ iCellMode = EOMASuplECellId;
+ iTrace->Trace(_L("COMASuplETel::GetECellID..."),KTraceFileName, __LINE__);
+ TInt err = iCustomAPI.Open(iPhone);
+ if(err == KErrNone)
+ {
+ iCustomAPI.GetCellInfo(iStatus,iCellInfoPckg );
+ SetActive();
+ }
+ else
+ {
+ TRequestStatus* pStat = &iStatus;
+ User::RequestComplete(pStat, KErrNone);//go ahead evenif it fails...
+ SetActive();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplETel::GetComparisionLocationID,For retriving the cell id information
+// for comparision
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplETel::GetComparisionLocationID()
+ {
+ iCellMode = EOMASuplCompareCellId;
+ iTrace->Trace(_L("COMASuplETel::GetLocationID..."),KTraceFileName, __LINE__);
+ iPhone.GetCurrentNetwork( iStatus, iNetworkInfoPkg, iLocationInfo );
+ SetActive();
+ }
+// COMASuplETel::RunL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplETel::RunL()
+ {
+ if (iStatus == KErrNone)
+ {
+ if(iCellMode == EOMASuplCellId || iCellMode == EOMASuplCompareCellId)
+ {
+ HandleLocationIdL();
+ }
+ else
+ {
+ HandleECellIdL();
+ }
+ }
+ else
+ {
+ if(iCellMode == EOMASuplCellId)
+ {
+ // Error while processing
+ iTrace->Trace(_L("Error in getting Location Id"),KTraceFileName, __LINE__);
+ iObserver.LocationIDRequestCompletedL(NULL,iStatus.Int());
+ }
+ else if(iCellMode == EOMASuplCompareCellId)
+ {
+ // Error while processing
+ iTrace->Trace(_L("Error in getting Comparision Location Id"),KTraceFileName, __LINE__);
+ iObserver.ComparisionLocationIDRequestCompletedL(NULL,iStatus.Int());
+ }
+ else
+ {
+ // Error while processing
+ iTrace->Trace(_L("Error in getting ECell Id"),KTraceFileName, __LINE__);
+ iObserver.LocationECellIdRequestCompletedL(iOMASuplECellInfo,iStatus.Int());
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplETel::HandleLocationIdL(),
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplETel::HandleLocationIdL()
+ {
+ switch (iNetworkInfo.iMode)
+ {
+ case RMobilePhone::ENetworkModeGsm:
+ {
+ // For GSM Cell Information
+ COMASuplLocationId* locationId = COMASuplLocationId::NewL();
+ CleanupStack::PushL(locationId);
+ COMASuplGSMCellInfo* gsmCellInfo = COMASuplGSMCellInfo::NewL();
+ CleanupStack::PushL(gsmCellInfo);
+ COMASuplLocationId::TOMASuplStatus lStatus = COMASuplLocationId::ECurrent;
+
+ TInt MCC=0;
+ TInt64 MNC=0;
+ TUint LAC, CellId;
+ TLex LexMCC(iNetworkInfo.iCountryCode);
+ TLex LexMNC(iNetworkInfo.iNetworkId);
+
+ LexMCC.Val(MCC);
+ LexMNC.Val(MNC);
+ LAC = iLocationInfo.iLocationAreaCode;
+ CellId = iLocationInfo.iCellId;
+
+
+ gsmCellInfo->SetSuplGSMCellInfo(MNC, MCC,CellId,LAC);
+ locationId->SetSuplLocationId(gsmCellInfo,lStatus);
+ CleanupStack::Pop(gsmCellInfo);
+ CleanupStack::Pop(locationId);
+
+ #if defined(_DEBUG) //This is only for logging purpose.
+ TBuf<128> msg;
+
+ msg.Copy(_L("It is GSM Network. MCC = "));
+ msg.AppendNum(MCC);
+
+ msg.Append(_L(" MNC = "));
+ msg.AppendNum(MNC);
+
+
+ msg.Append(_L(" CellId = "));
+ msg.AppendNum(CellId);
+
+
+ msg.Append(_L(" LAC = "));
+ msg.AppendNum(LAC);
+
+ iTrace->Trace(msg,KTraceFileName, __LINE__);
+ #endif
+
+ if(iCellMode == EOMASuplCellId)
+ iObserver.LocationIDRequestCompletedL(locationId,KErrNone);
+ else if(iCellMode == EOMASuplCompareCellId)
+ iObserver.ComparisionLocationIDRequestCompletedL(locationId,KErrNone);
+ break;
+ }
+ case RMobilePhone::ENetworkModeWcdma:
+ {
+ // For WCDMA Cell Information
+ COMASuplLocationId* locationId = COMASuplLocationId::NewL();
+ CleanupStack::PushL(locationId);
+ COMASuplCellInfo* wcdmaCellInfo = COMASuplCellInfo::NewL();
+ CleanupStack::PushL(wcdmaCellInfo);
+
+ COMASuplLocationId::TOMASuplStatus lStatus = COMASuplLocationId::ECurrent;
+ TInt MCC=0;
+ TInt64 MNC=0;
+ TUint UC;
+ TLex LexMCC(iNetworkInfo.iCountryCode);
+ TLex LexMNC(iNetworkInfo.iNetworkId);
+
+ LexMCC.Val(MCC);
+ LexMNC.Val(MNC);
+ UC = iLocationInfo.iCellId;
+
+
+ wcdmaCellInfo->SetSuplCellInfo(MNC, MCC, UC);
+ locationId->SetSuplLocationId(wcdmaCellInfo,lStatus);
+ CleanupStack::Pop(wcdmaCellInfo);
+ CleanupStack::Pop(locationId);
+
+ #if defined(_DEBUG) //This is only for logging purpose.
+ TBuf<128> msg;
+
+ msg.Copy(_L("It is CDMA Network. MCC = "));
+ msg.AppendNum(MCC);
+
+ msg.Append(_L(" MNC = "));
+ msg.AppendNum(MNC);
+
+
+ msg.Append(_L(" UC = "));
+ msg.AppendNum(UC);
+
+ iTrace->Trace(msg,KTraceFileName, __LINE__);
+ #endif
+
+ if(iCellMode == EOMASuplCellId)
+ iObserver.LocationIDRequestCompletedL(locationId,KErrNone);
+ else if(iCellMode == EOMASuplCompareCellId)
+ iObserver.ComparisionLocationIDRequestCompletedL(locationId,KErrNone);
+ break;
+ }
+ default:
+ {
+ #if _DEBUG
+ // For GSM Cell Information
+ COMASuplLocationId* locationId = COMASuplLocationId::NewL();
+ CleanupStack::PushL(locationId);
+ COMASuplGSMCellInfo* gsmCellInfo = COMASuplGSMCellInfo::NewL();
+ CleanupStack::PushL(gsmCellInfo);
+
+ COMASuplLocationId::TOMASuplStatus lStatus = COMASuplLocationId::ECurrent;
+ TInt MCC=0;
+ TInt64 MNC=0;
+ TUint LAC, CellId;
+ TLex LexMCC(iNetworkInfo.iCountryCode);
+ TLex LexMNC(iNetworkInfo.iNetworkId);
+
+ LexMCC.Val(MCC);
+ LexMNC.Val(MNC);
+ LAC = iLocationInfo.iLocationAreaCode;
+ CellId = iLocationInfo.iCellId;
+
+
+ gsmCellInfo->SetSuplGSMCellInfo(MNC, MCC,CellId,LAC);
+ locationId->SetSuplLocationId(gsmCellInfo,lStatus);
+ CleanupStack::Pop(gsmCellInfo);
+ CleanupStack::Pop(locationId);
+
+ #if defined(_DEBUG) //This is only for logging purpose.
+ TBuf<128> msg;
+ msg.Copy(_L("It is GSM Network. MCC = "));
+ msg.AppendNum(MCC);
+
+ msg.Append(_L(" MNC = "));
+ msg.AppendNum(MNC);
+
+ msg.Append(_L(" CellId = "));
+ msg.AppendNum(CellId);
+
+ msg.Append(_L(" LAC = "));
+ msg.AppendNum(LAC);
+
+ iTrace->Trace(msg,KTraceFileName, __LINE__);
+
+ #endif
+ if(iCellMode == EOMASuplCellId)
+ iObserver.LocationIDRequestCompletedL(locationId,KErrNone);
+ else if(iCellMode == EOMASuplCompareCellId)
+ iObserver.ComparisionLocationIDRequestCompletedL(locationId,KErrNone);
+ #else
+ iTrace->Trace(_L("Error in getting Location Id"),KTraceFileName, __LINE__);
+ if(iCellMode == EOMASuplCellId)
+ iObserver.LocationIDRequestCompletedL(NULL,KErrNotSupported);
+ else if(iCellMode == EOMASuplCompareCellId)
+ iObserver.ComparisionLocationIDRequestCompletedL(NULL,KErrNotSupported);
+ #endif
+ break;
+ }
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplETel::HandleECellIdL(),
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplETel::HandleECellIdL()
+ {
+
+ switch(iMmCellInfo.iMode)
+ {
+ case RMmCustomAPI::TMmCellInfo::EGSM:
+ {
+ FillECellGSMInfoL();
+ break;
+ }
+
+ case RMmCustomAPI::TMmCellInfo::EWCDMA:
+ {
+ FillECellWCDMAInfoL();
+ break;
+ }
+
+ default:break;
+
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplETel::RunError, Will be called by framework,if RunL leaves.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt COMASuplETel::RunError(TInt aError)
+ {
+ if(iCellMode == EOMASuplCellId)
+ {
+ // Error while processing
+ iTrace->Trace(_L("RunL leaved for Cell id"),KTraceFileName, __LINE__);
+ TRAP_IGNORE(iObserver.LocationIDRequestCompletedL(NULL,aError));
+ }
+ else
+ {
+ // Error while processing
+ iTrace->Trace(_L("RunL leaved for E - cell id"),KTraceFileName, __LINE__);
+ TRAP_IGNORE(iObserver.LocationECellIdRequestCompletedL(iOMASuplECellInfo,aError));
+ }
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplETel::FillECellWCDMAInfoL,
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplETel::FillECellWCDMAInfoL()
+ {
+ iCustomWCDMACellInfo = iMmCellInfo.iWcdmaCellInfo;
+ CopyWCDMAData();
+ iOMASuplECellInfo.SetWCDMACellInfo(iOMASuplwcdmaCellInfo);
+ iTrace->Trace(_L("Filled WCDMA Struct for E-CellId"),KTraceFileName, __LINE__);
+ iObserver.LocationECellIdRequestCompletedL(iOMASuplECellInfo,KErrNone);
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplETel::FillECellGSMInfoL,
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplETel::FillECellGSMInfoL()
+ {
+ RMmCustomAPI::TMmCellInfo::TGSMCellInfo gsmCellInfo = iMmCellInfo.iGsmCellInfo;
+ TOMASuplGSMCellinfo suplgsmCellInfo; //Make sure both struct are same.....
+ memcpy(&suplgsmCellInfo,&gsmCellInfo,sizeof(gsmCellInfo));
+ iOMASuplECellInfo.SetGSMCellInfo(suplgsmCellInfo);
+ iTrace->Trace(_L("Filled GSM Struct for E-CellId"),KTraceFileName, __LINE__);
+ iObserver.LocationECellIdRequestCompletedL(iOMASuplECellInfo,KErrNone);
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplETel::CopyWCDMAData,
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplETel::CopyWCDMAData()
+ {
+ if(KFddDLMin <= iCustomWCDMACellInfo.iFrequencyInfo.iFddDL && iCustomWCDMACellInfo.iFrequencyInfo.iFddDL <= KFddDLMax)
+ {
+ iOMASuplwcdmaCellInfo.iFrequencyInfo.iFddDL = iCustomWCDMACellInfo.iFrequencyInfo.iFddDL;
+ }
+ else
+ {
+ iOMASuplwcdmaCellInfo.iFrequencyInfo.iFddDL = -1;
+ }
+
+
+ if(KFddULMin <= iCustomWCDMACellInfo.iFrequencyInfo.iFddUL && iCustomWCDMACellInfo.iFrequencyInfo.iFddUL <= KFddULMax)
+ {
+ iOMASuplwcdmaCellInfo.iFrequencyInfo.iFddUL = iCustomWCDMACellInfo.iFrequencyInfo.iFddUL;
+ }
+ else
+ {
+ iOMASuplwcdmaCellInfo.iFrequencyInfo.iFddUL = -1;
+ }
+
+
+ if(KTddDtMin <= iCustomWCDMACellInfo.iFrequencyInfo.iTddNt && iCustomWCDMACellInfo.iFrequencyInfo.iTddNt <= KTddDtMax)
+ {
+ iOMASuplwcdmaCellInfo.iFrequencyInfo.iTddNt = iCustomWCDMACellInfo.iFrequencyInfo.iTddNt;
+ }
+ else
+ {
+ iOMASuplwcdmaCellInfo.iFrequencyInfo.iTddNt = -1;
+ }
+
+
+ iOMASuplwcdmaCellInfo.iPrimaryScrambilingCode = iCustomWCDMACellInfo.iPrimaryScrambilingCode;
+
+ for(TInt i = 0; i < KOMASUPLMaxNetworkMeasureReports; i++ )
+ {
+
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iFrequencyInfo.iFddDL = -1;
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iFrequencyInfo.iFddUL = -1;
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iFrequencyInfo.iTddNt = -1;
+
+ if(KFddDLMin <= iCustomWCDMACellInfo.iNwkMeasureReport[i].iFrequencyInfo.iFddDL && iCustomWCDMACellInfo.iNwkMeasureReport[i].iFrequencyInfo.iFddDL <= KFddDLMax)
+ {
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iFrequencyInfo.iFddDL = iCustomWCDMACellInfo.iNwkMeasureReport[i].iFrequencyInfo.iFddDL;
+ }
+
+ if(KFddULMin <= iCustomWCDMACellInfo.iNwkMeasureReport[i].iFrequencyInfo.iFddUL && iCustomWCDMACellInfo.iNwkMeasureReport[i].iFrequencyInfo.iFddUL <= KFddULMax)
+ {
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iFrequencyInfo.iFddUL = iCustomWCDMACellInfo.iNwkMeasureReport[i].iFrequencyInfo.iFddUL;
+ }
+
+ if(KTddDtMin <= iCustomWCDMACellInfo.iNwkMeasureReport[i].iFrequencyInfo.iTddNt && iCustomWCDMACellInfo.iNwkMeasureReport[i].iFrequencyInfo.iTddNt <= KTddDtMax)
+ {
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iFrequencyInfo.iTddNt = iCustomWCDMACellInfo.iNwkMeasureReport[i].iFrequencyInfo.iTddNt;
+ }
+
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iCarrierRSSI = iCustomWCDMACellInfo.iNwkMeasureReport[i].iCarrierRSSI;
+
+ for(TInt j = 0; j < KOMASUPLMaxCellMeasuredResults; j++ )
+ {
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iCID = iCustomWCDMACellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iCID ;
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iFddInfo.iPrimaryCPICH = iCustomWCDMACellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iFddInfo.iPrimaryCPICH;
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iFddInfo.iCpichEcN0 = iCustomWCDMACellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iFddInfo.iCpichEcN0;
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iFddInfo.iCichRscp = iCustomWCDMACellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iFddInfo.iCpichRscp;
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iFddInfo.iPathloss = iCustomWCDMACellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iFddInfo.iPathloss;
+
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iTddInfo.iCellParamID = iCustomWCDMACellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iTddInfo.iCellParamID;
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iTddInfo.iProposedTGSN = iCustomWCDMACellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iTddInfo.iProposedTGSN;
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iTddInfo.iPrimaryCcpchRscp = iCustomWCDMACellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iTddInfo.iPrimaryCcpchRscp;
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iTddInfo.iPathloss = iCustomWCDMACellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iTddInfo.iPathloss;
+
+ for(TInt k = 0; k < KOMASUPLMaxTimeSlotIscpAmount; k++ )
+ {
+ iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iTddInfo.iTimeslotISCP[k] = iOMASuplwcdmaCellInfo.iNwkMeasureReport[i].iCellMeasuredResult[j].iTddInfo.iTimeslotISCP[k];
+ }
+
+ }
+
+ }
+
+ }
+// End of File