diff -r 000000000000 -r 667063e416a2 locationtriggering/ltclientlib/src/lbtcelloperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationtriggering/ltclientlib/src/lbtcelloperation.cpp Tue Feb 02 01:06:48 2010 +0200 @@ -0,0 +1,309 @@ +/* +* Copyright (c) 2008 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: Class definition of Cell data handler +* +*/ + + +#include +#include +#include "lbtcelloperation.h" +#include "lbtgeogsmcell.h" +#include "lbtgeowcdmacell.h" +#include "lbtlogger.h" + +// ----------------------------------------------------------------------------- +// CLbtCellOperation::NewL +// +// ----------------------------------------------------------------------------- +// +CLbtCellOperation* CLbtCellOperation::NewL( TRequestStatus& aStatus, CLbtGeoAreaBase ** aArea ) + { + CLbtCellOperation* self = new (ELeave) CLbtCellOperation(aStatus, aArea); + CleanupStack::PushL(self); + self->ConstructL( ); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CLbtCellOperation::CLbtCellOperation +// +// ----------------------------------------------------------------------------- +// +CLbtCellOperation::CLbtCellOperation(TRequestStatus& aStatus, CLbtGeoAreaBase ** aArea):iCommandId(-1), + iNwInfo(), + iNwInfoPckg(iNwInfo), + iLocArea(),iCellInfo(), + iCellPckg(iCellInfo), + iClientStatus(aStatus), + iArea(aArea) + { + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CLbtCellOperation::~CLbtCellOperation +// +// ----------------------------------------------------------------------------- +// +CLbtCellOperation::~CLbtCellOperation() + { + iMmApi.Close(); + iMPhone.Close(); + iTelServer.Close(); + } + +// ----------------------------------------------------------------------------- +// CLbtCellOperation::ConstructL +// +// ----------------------------------------------------------------------------- +// +void CLbtCellOperation::ConstructL( ) + { + InitialiseEtelL(); + } + +// ----------------------------------------------------------------------------- +// CLbtCellOperation::Cancel +// +// ----------------------------------------------------------------------------- +// +void CLbtCellOperation::DoCancel() + { + if( iCommandId == EMobilePhoneGetCurrentNetwork ) + { + iMPhone.CancelAsyncRequest( iCommandId ); + } + else if( iCommandId == ECustomGetCellInfoIPC ) + { + iMmApi.CancelAsyncRequest( iCommandId ); + } + } + +// ----------------------------------------------------------------------------- +// CLbtCellOperation::RunL +// +// ----------------------------------------------------------------------------- +// +void CLbtCellOperation::RunL() + { + LBT_TRACE( KLbtLogClientLib|KLbtLogVerbose, __FILE__, __LINE__, "CLbtCellOperation::RunL", iStatus.Int() ); + if( iStatus.Int() == KErrNone ) + { + if( iCommandId == EMobilePhoneGetCurrentNetwork ) + { + LBT_TRACE( KLbtLogClientLib|KLbtLogVerbose, __FILE__, __LINE__, "First RunL"); + iMmApi.GetCellInfo(iStatus, iCellPckg); + iCommandId = ECustomGetCellInfoIPC; + SetActive(); + return; // TODO: Test code remove it + } + else + { + LBT_TRACE( KLbtLogClientLib|KLbtLogVerbose, __FILE__, __LINE__, "Second time RunL"); + CLbtGeoCell* geoCell = NULL; + + if(iCellInfo.iMode == RMmCustomAPI::TMmCellInfo::EGSM) + { + geoCell = CLbtGeoGsmCell::NewL(); + } + else + { + geoCell = CLbtGeoWcdmaCell::NewL(); + } + geoCell->SetNetworkType( iNetworkMode ); + geoCell->SetNetworkCountryCode( iNwInfo.iCountryCode ); + geoCell->SetNetworkIdentityCode( iNwInfo.iNetworkId ); + geoCell->SetLocationAreaCode( iLocArea.iLocationAreaCode ); + geoCell->SetCellId( iLocArea.iCellId ); + + if( iNetworkMode == RMobilePhone::ENetworkModeGsm ) + { + CLbtGeoGsmCell* gsmCell = static_cast(geoCell); + RArray bsicArray; + for( TInt i=0;i<15;i++ ) // 15 is max available Nmr value + { + if( iCellInfo.iGsmCellInfo.iNmr[i].iBSIC != -1 ) + { + bsicArray.Append( iCellInfo.iGsmCellInfo.iNmr[i].iBSIC ); + } + } + gsmCell->SetBsic( bsicArray ); + geoCell = gsmCell; + } + else if( iNetworkMode == RMobilePhone::ENetworkModeWcdma ) + { + LBT_TRACE( KLbtLogClientLib|KLbtLogVerbose, __FILE__, __LINE__, "WCDMA Network"); + // Create WCDMA cell + CLbtGeoWcdmaCell* wcdmaCell = static_cast(geoCell); + + TLbtWcdmaCellInfo wcdmaCellInfo; + + // Copy the serving cell parameters + wcdmaCellInfo.iCell.iCarrierRssi = iCellInfo.iWcdmaCellInfo.iNwkMeasureReport[0].iCarrierRSSI; + wcdmaCellInfo.iCell.iRscp = iCellInfo.iWcdmaCellInfo.iNwkMeasureReport[0].iCellMeasuredResult[0].iFddInfo.iCpichRscp; + wcdmaCellInfo.iCell.iEcNo = iCellInfo.iWcdmaCellInfo.iNwkMeasureReport[0].iCellMeasuredResult[0].iFddInfo.iCpichEcN0; + wcdmaCellInfo.iCell.iPathLoss = iCellInfo.iWcdmaCellInfo.iNwkMeasureReport[0].iCellMeasuredResult[0].iFddInfo.iPathloss; + + // Copy the Rscp and Ecno values of the adjacent cells + for(TInt i=1;iSetWcdmaCellInfo(wcdmaCellInfo); + geoCell = wcdmaCell; + } + *(iArea) = geoCell; + TRequestStatus* status = &iClientStatus; + User::RequestComplete( status, iStatus.Int() ); + } + } + else + { + /* + // ------------------------------------------------------------------------------------------------------- + // ----------- TEST CODE ---------------------------- + CLbtGeoCell* geoCell = NULL; + CLbtGeoWcdmaCell* wcdmaCell = CLbtGeoWcdmaCell::NewL(); + wcdmaCell->SetNetworkType( RMobilePhone::ENetworkModeWcdma ); + RMobilePhone::TMobilePhoneNetworkCountryCode countryCode(_L("5")); + wcdmaCell->SetNetworkCountryCode( countryCode ); + RMobilePhone::TMobilePhoneNetworkIdentity nid(_L("5")); + wcdmaCell->SetNetworkIdentityCode( nid ); + wcdmaCell->SetLocationAreaCode( 5 ); + wcdmaCell->SetCellId( 5 ); + TLbtWcdmaCellInfo wcdmaCellInfo; + + // Copy the serving cell parameters + wcdmaCellInfo.iCell.iCarrierRssi = 5; + wcdmaCellInfo.iCell.iRscp = 5; + wcdmaCellInfo.iCell.iEcNo = 5; + wcdmaCellInfo.iCell.iPathLoss = 5; + + // Copy the Rscp and Ecno values of the adjacent cells + for(TInt i=0;i<1;++i) + { + for(TInt j=0;j<5;++j) + { + TInt8 rscp = 5; + TInt8 ecNo = 5; + if( (rscp != -1) && (ecNo != -1) ) + { + TLbtWcdmaCellInfo::TLbtCellMeasuredResult cellMsr; + cellMsr.iEcNo = 5; + cellMsr.iRscp = 5; + wcdmaCellInfo.iMeasurementResult.Append(cellMsr); + } + } + } + wcdmaCell->SetWcdmaCellInfo(wcdmaCellInfo); + geoCell = wcdmaCell; + *(iArea) = geoCell; + // ----------- TEST CODE END---------------------------- + // ------------------------------------------------------------------------------------------------------- + */ + TRequestStatus* status = &iClientStatus; + User::RequestComplete( status, iStatus.Int() ); + } + } + +// ----------------------------------------------------------------------------- +// CLbtCellOperation::GetCurrentCellInformation +// +// ----------------------------------------------------------------------------- +// +void CLbtCellOperation::GetCurrentCellInformation( ) + { + iClientStatus = KRequestPending; + TInt error = iMPhone.GetCurrentMode( iNetworkMode ); + if( KErrNone != error ) + { + TRequestStatus* status = &iClientStatus; + User::RequestComplete( status, error ); + return; + } + iMPhone.GetCurrentNetwork(iStatus, iNwInfoPckg, iLocArea); + iCommandId = EMobilePhoneGetCurrentNetwork; + SetActive(); + } + +// ----------------------------------------------------------------------------- +// CLbtCellOperation::InitialiseEtelL +// +// ----------------------------------------------------------------------------- +// +void CLbtCellOperation::InitialiseEtelL() + { + CCommsDatabase* const db = CCommsDatabase::NewL(ETrue); + CleanupStack::PushL(db); + + TUint32 modemId = 0; + db->GetGlobalSettingL(TPtrC(MODEM_PHONE_SERVICES_SMS), modemId); + CCommsDbTableView* const view = + db->OpenViewMatchingUintLC(TPtrC(MODEM), TPtrC(COMMDB_ID), modemId); + + TInt err = view->GotoFirstRecord(); + if(err != KErrNone) + { + User::Leave(err); + } + + HBufC* nameBuf = NULL; + nameBuf = view->ReadLongTextLC(TPtrC(MODEM_TSY_NAME)); + + User::LeaveIfError(iTelServer.Connect()); + err = iTelServer.LoadPhoneModule(*nameBuf); + + if(err != KErrNone) + { + User::Leave(err); + } + + // For the phone information + RTelServer::TPhoneInfo info; + + iTelServer.GetPhoneInfo(0, info); + err = iMPhone.Open(iTelServer, info.iName); + + if(err != KErrNone) + { + User::Leave(err); + } + + // initialise etel multimode custom api + err = iMmApi.Open(iMPhone); + + if(err != KErrNone) + { + User::Leave(err); + } + + CleanupStack::PopAndDestroy(3); // nameBuf, view and db + } + + +// End of File +