locationmgmt/locmonitor/test/ExampleLocationConverter/src/ExampleLocationConverter.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationmgmt/locmonitor/test/ExampleLocationConverter/src/ExampleLocationConverter.cpp Tue Jul 13 12:25:28 2010 +0100
@@ -0,0 +1,331 @@
+/*
+* 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: Definition of CdummyMvmtDet class.
+*
+*/
+
+
+
+#include <ecom/ecom.h>
+#include <e32math.h>
+#include <ecom/implementationproxy.h>
+#include "ExampleLocationConverter.h"
+
+// the test code sets the timing advance in the GSM vell info to this value
+// which instructs the test converter to constuct TLocalitys with
+// latitude ser to country code, longitude set to
+// network code and altitiude set to local area code
+const TInt KTimingAdvanceSpecialValue= 254;
+
+const TInt KTimingAdvanceSaveToCacheTrue= 253;
+
+const TInt KTimingAdvanceSaveToCacheFalse= 252;
+
+// ECOM implementation specifics
+static const TImplementationProxy implTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY(0x2002140D, CExampleLocationConverter::NewL)
+ };
+
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof(implTable) / sizeof(TImplementationProxy);
+
+ return implTable;
+ }
+
+
+// Class methods
+
+//------------------------------------------------------------
+// CLbsLocInfoConversionPluginBase::NewL
+// Symbian Two - phase constructor
+//------------------------------------------------------------
+//
+CExampleLocationConverter* CExampleLocationConverter::NewL( TLbsLocInfoConverterPluginParams& aParams)
+ {
+ CExampleLocationConverter* self = new (ELeave) CExampleLocationConverter(aParams);
+ CleanupStack::PushL(self);
+ self->ConstructL(aParams);
+ CleanupStack::Pop();
+ return self;
+ }
+
+
+//------------------------------------------------------------
+// CLbsLocInfoConversionPluginBase::ConstructL
+//------------------------------------------------------------
+//
+void CExampleLocationConverter::ConstructL( TLbsLocInfoConverterPluginParams& /*aParams*/ )
+ {
+ CLbsLocInfoConverterPluginBase::Version();
+ TInt aFunctionNumber = 1982;
+ TAny* aPtr1 = &aFunctionNumber;
+ TAny* aPtr2 = &aFunctionNumber;
+ CLbsLocInfoConverterPluginBase::ExtendedInterface(aFunctionNumber, aPtr1, aPtr2);
+
+ iObserver.Version();
+ }
+
+
+//-----------------------------------------------------------------
+// CLbsLocInfoConversionPluginBase::CLbsLocInfoConversionPluginBase
+// C++ Default constructor
+//------------------------------------------------------------------
+//
+CExampleLocationConverter::CExampleLocationConverter(TLbsLocInfoConverterPluginParams& aParams):iObserver(aParams.Observer()),
+ iRetainLocalityInCache(ETrue)
+ {
+
+ }
+
+
+//------------------------------------------------------------
+// CLbsLocInfoConversionPluginBase::~CLbsLocInfoConversionPluginBase
+// Destructor
+//------------------------------------------------------------
+//
+CExampleLocationConverter::~CExampleLocationConverter()
+ {
+
+ }
+
+
+//------------------------------------------------------------
+// CLbsLocInfoConversionPluginBase::ConvertLocationInfoL
+//------------------------------------------------------------
+//
+void CExampleLocationConverter::ConvertLocationInfoL( RLbsLocationInfoArray& aLocationInfoArray,
+ const TLbsConversionPrefs /*aConversionPrefs*/,
+ const TLbsConversionOutputInfoMask aRequestedInfo)
+ {
+ if(aRequestedInfo == ELbsConversionOutputNotDefined)
+ {
+ iObserver.OnConversionComplete(KErrArgument);
+ return;
+ }
+ TInt count = aLocationInfoArray.Count();
+ for(TInt i=0 ; i<count;i++)
+ {
+ switch(aRequestedInfo)
+ {
+ case ELbsConversionOutputPosition:
+ {
+ // Extract the area info provided by the client.
+ // If client has specified only coordinate info,
+ // return KErrNotSupported.
+ RLbsAreaInfoBaseArray areaInfoArray;
+ CLbsLocationInfo::TAreaInfoMask areaInfoMask = 0;
+ areaInfoMask |= CLbsLocationInfo::ELbsGsmInfo |
+ CLbsLocationInfo::ELbsWcdmaInfo |
+ CLbsLocationInfo::ELbsWlanInfo;
+ aLocationInfoArray[i]->GetAreaInfoL( areaInfoArray,areaInfoMask );
+ TInt count = areaInfoArray.Count();
+
+
+
+ if( count == 0 )
+ {
+ iObserver.OnConversionComplete(KErrNotSupported);
+ return;
+ }
+ TLocality locality;
+ if (areaInfoArray[0]->Type() == ELbsAreaGsmCellInfoClass)
+ {
+ CLbsGsmCellInfo* posInfo =
+ static_cast<CLbsGsmCellInfo*> (areaInfoArray[0]);
+
+ TInt timingAdvance = posInfo->TimingAdvance();
+
+ if (timingAdvance == KTimingAdvanceSaveToCacheFalse)
+ {
+ iRetainLocalityInCache = EFalse;
+ }
+ else
+ {
+ // for all others values ensiure that we put
+ // localities in cache
+ iRetainLocalityInCache = ETrue;
+ }
+
+ if ((timingAdvance == KTimingAdvanceSpecialValue)
+ || (timingAdvance
+ == KTimingAdvanceSaveToCacheTrue)
+ || (timingAdvance
+ == KTimingAdvanceSaveToCacheFalse))
+ {
+ // For all the special tests
+ TReal64 lat = posInfo->MobileCountryCode();
+ TReal64 lng = posInfo->MobileNetworkCode();
+ TReal32 alt = posInfo->LocationAreaCode();
+
+ TReal32 horAcc = posInfo->CellId();
+
+ locality.SetCoordinate(lat, lng, alt);
+ locality.SetAccuracy(horAcc, 11.0);
+ }
+ else
+ {
+ // and for the original tests
+ locality.SetCoordinate(62.5285, 23.9385, 1.22f);
+ locality.SetAccuracy(10.0f, 0.0);
+
+ }
+ }
+ else
+ {
+ // and for the original tests
+ locality.SetCoordinate(62.5285, 23.9385, 1.22f);
+ locality.SetAccuracy(10.0f, 0.0);
+ }
+ areaInfoArray.ResetAndDestroy();
+
+ CLbsPositionInfo* positionInfo = CLbsPositionInfo::NewL( locality );
+ CleanupStack::PushL( positionInfo );
+ aLocationInfoArray[i]->AddAreaInfoL( positionInfo );
+ CleanupStack::Pop( positionInfo );
+ break;
+ }
+ case ELbsConversionOutputGsm:
+ {
+ // Extract the area info provided by the client.
+ // If client has specified only gsm info,
+ // return KErrNotSupported.
+ RLbsAreaInfoBaseArray areaInfoArray;
+ CLbsLocationInfo::TAreaInfoMask areaInfoMask = 0;
+ areaInfoMask |= CLbsLocationInfo::ELbsPosInfo |
+ CLbsLocationInfo::ELbsWcdmaInfo |
+ CLbsLocationInfo::ELbsWlanInfo;
+ aLocationInfoArray[i]->GetAreaInfoL( areaInfoArray,areaInfoMask );
+ TInt count = areaInfoArray.Count();
+ areaInfoArray.ResetAndDestroy();
+
+ if( count == 0 )
+ {
+ iObserver.OnConversionComplete(KErrNotSupported);
+ return;
+ }
+
+ CLbsGsmCellInfo* gsmCellInfo = CLbsGsmCellInfo::NewL( 100,101,102,103);
+ CleanupStack::PushL( gsmCellInfo );
+ aLocationInfoArray[i]->AddAreaInfoL( gsmCellInfo );
+ CleanupStack::Pop( gsmCellInfo );
+ break;
+ }
+ case ELbsConversionOutputWcdma:
+ {
+ // Extract the area info provided by the client.
+ // If client has specified only wcdma info,
+ // return KErrNotSupported.
+ RLbsAreaInfoBaseArray areaInfoArray;
+ CLbsLocationInfo::TAreaInfoMask areaInfoMask = 0;
+ areaInfoMask |= CLbsLocationInfo::ELbsPosInfo |
+ CLbsLocationInfo::ELbsGsmInfo |
+ CLbsLocationInfo::ELbsWlanInfo;
+ aLocationInfoArray[i]->GetAreaInfoL( areaInfoArray,areaInfoMask );
+ TInt count = areaInfoArray.Count();
+ areaInfoArray.ResetAndDestroy();
+
+ if( count == 0 )
+ {
+ iObserver.OnConversionComplete(KErrNotSupported);
+ return;
+ }
+
+ CLbsWcdmaCellInfo* wcdmaCellInfo = CLbsWcdmaCellInfo::NewL( 100,101,102 );
+ CleanupStack::PushL( wcdmaCellInfo );
+ aLocationInfoArray[i]->AddAreaInfoL( wcdmaCellInfo );
+ CleanupStack::Pop( wcdmaCellInfo );
+ break;
+ }
+ case ELbsConversionOutputWlan:
+ {
+ // Extract the area info provided by the client.
+ // If client has specified only wlan info,
+ // return KErrNotSupported.
+ RLbsAreaInfoBaseArray areaInfoArray;
+ CLbsLocationInfo::TAreaInfoMask areaInfoMask = 0;
+ areaInfoMask |= CLbsLocationInfo::ELbsPosInfo |
+ CLbsLocationInfo::ELbsGsmInfo |
+ CLbsLocationInfo::ELbsWcdmaInfo;
+ aLocationInfoArray[i]->GetAreaInfoL( areaInfoArray,areaInfoMask );
+ TInt count = areaInfoArray.Count();
+ areaInfoArray.ResetAndDestroy();
+
+ if( count == 0 )
+ {
+ iObserver.OnConversionComplete(KErrNotSupported);
+ return;
+ }
+
+ TLbsWlanMacAddress macAddress(_L8("10.0.1"));
+ CLbsWlanInfo* WlanInfo = CLbsWlanInfo::NewL( macAddress,10.1);
+ CleanupStack::PushL( WlanInfo );
+ aLocationInfoArray[i]->AddAreaInfoL( WlanInfo );
+ CleanupStack::Pop( WlanInfo );
+ }
+ default:
+ break;
+ }
+
+ }
+ iObserver.OnConversionComplete(KErrNone);
+ }
+
+//------------------------------------------------------------
+// CLbsLocInfoConversionPluginBase::ConvertLocationInfoL
+//------------------------------------------------------------
+//
+void CExampleLocationConverter::CancelConvertLocationInfo( )
+ {
+
+ }
+
+//------------------------------------------------------------
+// CLbsLocInfoConversionPluginBase::ValidateClient
+//------------------------------------------------------------
+//
+void CExampleLocationConverter::ValidateClient( const TSecureId& /*aSecureId*/,
+ const TVendorId& /*aVendorId*/,
+ const TLbsConversionOutputInfoMask /*aRequestedInfo*/ )
+ {
+ iObserver.OnValidationComplete( KErrNone );
+ }
+
+//------------------------------------------------------------
+// CLbsLocInfoConversionPluginBase::ValidateClient
+//------------------------------------------------------------
+//
+void CExampleLocationConverter::CancelValidateClient()
+ {
+
+ }
+
+//------------------------------------------------------------
+// CExampleLocationConverter::ConversionPluginPreferences
+//------------------------------------------------------------
+//
+void CExampleLocationConverter::ConversionPluginPreferences(
+ TLbsConversionPluginInfo& aPluginInfo )
+ {
+ aPluginInfo.SetIsPluginPositionToBeCached(iRetainLocalityInCache);
+
+ //Note: The capability mask is currently not used anywhere in the location
+ //monitor.
+ TLbsConversionPluginCapabilityMask capabilityMask;
+ capabilityMask = aPluginInfo.PluginCapabilitiesMask();
+ capabilityMask = ( ELbsPluginCapabilityGsmInfo|ELbsPluginCapabilityPosInfo|ELbsPluginCapabilityWlanInfo);
+ aPluginInfo.SetPluginCapabilitiesMask(capabilityMask);
+ }