diff -r 63c982fb92f2 -r b73252188534 locationmanager/geoconverter/src/cgeoconverter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationmanager/geoconverter/src/cgeoconverter.cpp Thu Aug 19 10:20:41 2010 +0300 @@ -0,0 +1,213 @@ +/* +* Copyright (c) 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 creating country and city tags for media files +* +*/ + +//#include "locationmanagerdebug.h" +#include "cgeoconverter.h" +#include "locationmanagerdebug.h" + + + +// -------------------------------------------------------------------------- +// CGeoConverter::NewL +// -------------------------------------------------------------------------- +// +EXPORT_C CGeoConverter* CGeoConverter::NewL( MGeoConverterObserver& aObserver ) + { + LOG("CGeoConverter::NewL"); + CGeoConverter* self = new( ELeave ) CGeoConverter( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + return self; + } + +// -------------------------------------------------------------------------- +// CGeoConverter::CGeoConverter() +// -------------------------------------------------------------------------- +// +CGeoConverter::CGeoConverter( MGeoConverterObserver& aObserver ) + :iObserver( aObserver ) +#ifdef LOC_GEOTAGGING_CELLID + ,iLocConverter(NULL), + iLocInfo(NULL), + iGsmCellInfo(NULL), + iWcdmaCellInfo(NULL) +#endif + { + } + +// -------------------------------------------------------------------------- +// CGeoConverter::~CGeoConverter +// -------------------------------------------------------------------------- +// +EXPORT_C CGeoConverter::~CGeoConverter() + { + LOG("CGeoConverter::~CGeoConverter, begin"); +#ifdef LOC_GEOTAGGING_CELLID + delete iGsmCellInfo; + iGsmCellInfo = NULL; + delete iWcdmaCellInfo; + iWcdmaCellInfo = NULL; + delete iLocInfo; + iLocInfo = NULL; + delete iLocConverter; + iLocConverter = NULL; +#endif + LOG("CGeoConverter::~CGeoConverter, end"); + } + +// -------------------------------------------------------------------------- +// CGeoConverter::OnConversionComplete() +// -------------------------------------------------------------------------- +// +void CGeoConverter::OnConversionComplete( TInt aStatusCode ) + { + LOG("CGeoConverter::OnConversionComplete, begin"); +#ifdef LOC_GEOTAGGING_CELLID + //16. Retrieve position estimate that is updated by Location Monitor server + //after a conversion operation is completed successfully. + RLbsAreaInfoBaseArray posInfoList; + TLocality position; + + + LOG1("Status Code - %d",aStatusCode); + + if( KErrNone == aStatusCode ) + { + TRAP_IGNORE(iLocInfo->GetAreaInfoL( posInfoList, CLbsLocationInfo::ELbsPosInfo );) + + //Get geo-coordinates. + + LOG1("PposInfoList Count - %d",posInfoList.Count()); + if ( posInfoList.Count() ) + { + static_cast(posInfoList[0])->GetLocality(position); + } + else + { + aStatusCode = KErrNotFound; + } + } + TRAPD(err,iObserver.ConversionCompletedL( aStatusCode, position);) + if(err != KErrNone) + { + iObserver.HandleConversionError(err); + } + posInfoList.Close(); +#endif + LOG("CGeoConverter::OnConversionComplete, end"); + } + +// -------------------------------------------------------------------------- +// CGeoConverter::ConstructL() +// -------------------------------------------------------------------------- +// +void CGeoConverter::ConstructL() + { + LOG("CGeoConverter::ConstructL, begin"); +#ifdef LOC_GEOTAGGING_CELLID + iLocInfo = CLbsLocationInfo::NewL(); + TUid pluginUid = TUid::Uid( 0x20027011 ); + LOG("CGeoConverter::ConstructL"); + iLocConverter = CLbsLocationInfoConverter::NewL( *this, pluginUid ); +#endif + LOG("CGeoConverter::ConstructL, end"); + } + +// -------------------------------------------------------------------------- +// CGeoConverter::ConvertL() +// -------------------------------------------------------------------------- +// +EXPORT_C void CGeoConverter::ConvertL( const CTelephony::TNetworkInfoV1& aNetworkInfo ) + { + LOG("CGeoConverter::ConvertL, begin"); +#ifdef LOC_GEOTAGGING_CELLID + + //Set mobile country code + TLex lexer( aNetworkInfo.iCountryCode ); + TUint countryCode = 0; + + User::LeaveIfError( lexer.Val( countryCode, EDecimal) ); + //Set mobile network code + lexer = aNetworkInfo.iNetworkId; + TUint networkCode = 0; + User::LeaveIfError( lexer.Val( networkCode, EDecimal) ); + LOG1("Network mode - %d", aNetworkInfo.iMode); + CLbsAreaInfoBase* areaInfoBase = NULL; + switch(aNetworkInfo.iAccess) + { + case CTelephony::ENetworkAccessGsm: + case CTelephony::ENetworkAccessGsmCompact: + { + LOG("2G network."); + if(iGsmCellInfo == NULL) + { + iGsmCellInfo = CLbsGsmCellInfo::NewL(); + } + iGsmCellInfo->SetMobileCountryCode( countryCode ); + + iGsmCellInfo->SetMobileNetworkCode( networkCode ); + //Set cell id + iGsmCellInfo->SetCellId( aNetworkInfo.iCellId ); + + if(aNetworkInfo.iAreaKnown) + { + //Set location area code + iGsmCellInfo->SetLocationAreaCode( aNetworkInfo.iLocationAreaCode ); + } + + areaInfoBase = iGsmCellInfo; + } + break; + case CTelephony::ENetworkAccessUtran: + { + LOG("3G network."); + if(iWcdmaCellInfo == NULL) + { + iWcdmaCellInfo = CLbsWcdmaCellInfo::NewL(); + } + iWcdmaCellInfo->SetMobileCountryCode(countryCode); + iWcdmaCellInfo->SetMobileNetworkCode(networkCode); + iWcdmaCellInfo->SetUniqueCellId(aNetworkInfo.iCellId); + areaInfoBase = iWcdmaCellInfo; + } + break; + default: + LOG("Unknown network mode"); + User::Leave(KErrNotSupported); + } + //Add the cell information to the location info class. This class + //would be sent to the Location Monitor server that would perform the + //requested conversion and update the position estimate + if(areaInfoBase != NULL) // self check + { + // reset previous one.. to clear the local info. + iLocInfo->ResetAreaInfo(CLbsLocationInfo::ELbsAreaInfoAll); + iLocInfo->AddAreaInfoL( areaInfoBase ); + //ownership is transferred. + iWcdmaCellInfo = NULL; + iGsmCellInfo = NULL; + //Request conversion of GSM cell information to corresponding coordinate information + iLocConverter->ConvertLocationInfoL( *iLocInfo, ELbsConversionSilent, + ELbsConversionOutputPosition ); + } +#endif + LOG("CGeoConverter::ConvertL, end"); + } + +// End of file +