diff -r f5050f1da672 -r 04becd199f91 javaextensions/location/tsrc/vipertestpsy/src/vipertestpsy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaextensions/location/tsrc/vipertestpsy/src/vipertestpsy.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,221 @@ +/* +* 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: +* +*/ +// INCLUDES +#include +#include +#include +#include +#include "ViperTestPsy.hrh" +#include "EPos_CPositioner.h" + +// CONSTANTS +const TReal32 KHorizontalAcc = 40; +const TReal32 KVerticalAcc = 40; + +const TReal64 KLatitude = 2; +const TReal64 KLongitude = 3; +const TReal32 KAltitude = 200; + +_LIT(KPositionTime, "20801027:161600");//YYYYMMDD:HHMMSS.MMMMMM + +const TReal32 KSpeed = 20; +const TReal32 KHeading = 30; +const TReal32 KSpeedAcc = 2; +const TReal32 KHeadingAcc = 3; + +const TInt KSatelliteId = 30; +const TReal32 KAzimuth = 30; +const TReal32 KElevation = 30; +const TBool KIsUsed = ETrue; +const TInt KSignalStrength = 10; + +const TReal32 KAzimuthOdd = 35; +const TReal32 KElevationOdd = 35; +const TBool KIsUsedOdd = EFalse; +const TInt KSignalStrengthOdd = 5; + +const TUint KNumberOfSatellitesInView = 12; +const TUint KNumberOfSatellitesUsed = 6; +_LIT(KSatelliteTime, "20021027:161600"); +const TReal32 KHorizontalDoPValue = 1; +const TReal32 KVerticalDoPValue = 2; +const TReal32 KTimeDoPValue = 20; +_LIT(KModuleName, "ViperTest PSY"); + +// CLASS DECLARATION + +class CViperTestPsy: public CPositioner +{ +public: + // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CViperTestPsy* NewL(TAny* aConstructionParameters); + + /** + * Destructor. + */ + ~CViperTestPsy(); + +protected: + // Functions from base classes + + /** + * From CPositioner. Requests position info asynchronously. + * + * @param aPosInfo A reference to a position info object. This object + * must be in scope until the request has completed. + * @param aStatus The request status + */ + void NotifyPositionUpdate( + /* IN/OUT */TPositionInfoBase& aPosInfo, + /* OUT */TRequestStatus& aStatus); + + /** + * From CPositioner. Cancels position info request. + */ + void CancelNotifyPositionUpdate(); + +private: + + /** + * C++ default constructor. + */ + CViperTestPsy(); + + /** + * By default EPOC constructor is private. + */ + void ConstructL(TAny* aConstructionParameters); + + void SetTPositionInfo(TPositionInfo& aInfo); + void SetTPositionCourseInfo(TPositionCourseInfo& aCourseInfo); + void SetTPositionSatelliteInfo(TPositionSatelliteInfo& aSatelliteInfo); + void SetHPositionGenericInfo(HPositionGenericInfo& aGenericInfo); + + // By default, prohibit copy constructor + CViperTestPsy(const CViperTestPsy&); + // Prohibit assigment operator + CViperTestPsy& operator=(const CViperTestPsy&); + +}; + +// ================= OTHER EXPORTED FUNCTIONS ============== + +const TImplementationProxy KFactoryPtr = IMPLEMENTATION_PROXY_ENTRY( + KPosImplementationUid, CViperTestPsy::NewL); + +// +// --------------------------------------------------------- +// ImplementationGroupProxy +// Required PSY interface. +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( + TInt& aTableCount) +{ + aTableCount = 1; + return &KFactoryPtr; +} + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CViperTestPsy::CViperTestPsy() +{ +} + +// EPOC default constructor can leave. +void CViperTestPsy::ConstructL(TAny* aConstructionParameters) +{ + BaseConstructL(aConstructionParameters); +} + +// Two-phased constructor. +CViperTestPsy* CViperTestPsy::NewL(TAny* aConstructionParameters) +{ + CViperTestPsy* self = new(ELeave) CViperTestPsy; + CleanupStack::PushL(self); + self->ConstructL(aConstructionParameters); + CleanupStack::Pop(); + return self; +} + +// Destructor +CViperTestPsy::~CViperTestPsy() +{ +} + +void CViperTestPsy::NotifyPositionUpdate(TPositionInfoBase& aPosInfo, + TRequestStatus& aStatus) +{ + TRequestStatus* status = &aStatus; + + TUid implUid = + { KPosImplementationUid }; + aPosInfo.SetModuleId(implUid); + TUint32 classType = aPosInfo.PositionClassType(); + + if (classType == (classType & EPositionInfoClass)) + { + TPositionInfo* position = static_cast(&aPosInfo); + SetTPositionInfo(*position); + } + else if (classType & EPositionGenericInfoClass) + { + HPositionGenericInfo& generic = + static_cast(aPosInfo); + SetHPositionGenericInfo(generic); + } + else + { + User::RequestComplete(status, KErrGeneral); + return; + } + + User::RequestComplete(status, KErrNone); +} + +void CViperTestPsy::CancelNotifyPositionUpdate() +{ +} + +void CViperTestPsy::SetTPositionInfo(TPositionInfo& aInfo) +{ + TCoordinate coor(KLatitude, KLongitude, KAltitude); + TLocality loc(coor, KHorizontalAcc, KVerticalAcc); + TTime now; + now.UniversalTime(); + TPosition pos(loc, now); + aInfo.SetPosition(pos); +} + +void CViperTestPsy::SetHPositionGenericInfo(HPositionGenericInfo& aGenericInfo) +{ + SetTPositionInfo(aGenericInfo); + if (aGenericInfo.IsRequestedField(EPositionFieldHorizontalSpeed)) + { + aGenericInfo.SetValue(EPositionFieldHorizontalSpeed, KSpeed); + } + if (aGenericInfo.IsRequestedField(EPositionFieldHeading)) + { + aGenericInfo.SetValue(EPositionFieldHeading, KHeading); + } +} + +// End of File