--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationmanager/locationtrail/inc/clocationrecord.h Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,371 @@
+/*
+* Copyright (c) 2006-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 recording and storing locations.
+*
+*/
+
+#ifndef C_CLOCATIONRECORD_H
+#define C_CLOCATIONRECORD_H
+
+#include <e32base.h>
+#include <e32property.h>
+#include <Lbs.h>
+
+#include "rlocationtrail.h"
+#include "locationdatatype.h"
+#include "cnetworkinfo.h"
+#include "cpositioninfo.h"
+#include "rlocationobjectmanipulator.h"
+
+#include "mdccommon.h"
+#include "mdesession.h"
+#include "mdenamespacedef.h"
+#include "mdeobjectdef.h"
+#include "mdepropertydef.h"
+#include "mderelation.h"
+#include "mdequery.h"
+#include "locationremappingao.h"
+
+typedef RLocationTrail::TTrailState TLocTrailState;
+
+class CTelephony;
+class TPositionSatelliteInfo;
+
+/**
+* An observer interface, which is used for getting notification when the
+* location trail's state changes.
+*
+* @since S60 3.1
+*/
+class MLocationTrailObserver
+ {
+public:
+ /**
+ * This method is used to notify about location trail state changes.
+ */
+ virtual void LocationTrailStateChange() = 0;
+
+ virtual void CurrentLocation( const TPositionSatelliteInfo& aSatelliteInfo,
+ const CTelephony::TNetworkInfoV1& aNetworkInfo,
+ const TInt aError ) = 0;
+
+ virtual void GPSSignalQualityChanged( const TPositionSatelliteInfo& aSatelliteInfo ) = 0;
+ };
+
+/**
+* Location trail item class.
+*/
+class TLocationTrailItem
+ {
+ public:
+ TLocationData iLocationData; // Location info & network info
+ TTime iTimeStamp; // Time stamp.
+ TLocTrailState iTrailState; // Trail state for this item.
+ };
+
+class MLocationAddObserver
+ {
+public:
+ /**
+ * This method is used to notify about new locations added to location trail
+ */
+ virtual void LocationAdded( const TLocationTrailItem& aTrailItem,
+ const TPositionSatelliteInfo& aSatellites ) = 0;
+ };
+
+/**
+ * Location trail collects location information periodically and stores them
+ * to an array. Stored locations may be searched by time stamp to get
+ * a location, which corresponds to certain time.
+ *
+ * @since S60 3.1
+ */
+class CLocationRecord : public CBase,
+ public MNetworkInfoObserver,
+ public MPositionInfoObserver,
+ public MMdEQueryObserver
+ {
+public:
+ /**
+ * 2-phased constructor.
+ * @since S60 3.1
+ */
+ IMPORT_C static CLocationRecord* NewL();
+
+ /**
+ * C++ destructor.
+ * @since S60 3.1
+ */
+ IMPORT_C virtual ~CLocationRecord();
+
+
+public:
+ /**
+ * Returns the current state of the location trail.
+ * @since S60 3.1
+ * @param aState, The current state is written to this variable.
+ * @return None.
+ */
+ IMPORT_C void LocationTrailState( TLocTrailState& aState );
+
+ /**
+ * Starts collecting locations from Location Acquisition API.
+ * @since S60 3.1
+ * @param None.
+ * @return None.
+ */
+ IMPORT_C void StartL( RLocationTrail::TTrailCaptureSetting aCaptureSetting );
+
+ /**
+ * Stops collecting locations.
+ * @since S60 3.1
+ * @param None.
+ * @return None.
+ */
+ IMPORT_C void Stop();
+
+ /**
+ * Returns the location info, which is nearest to the given time.
+ * @since S60 3.1
+ * @param aTime, A time stamp to get corresponding location.
+ * @param aPosition, Location info is written to this param.
+ * @param
+ * @return None.
+ */
+ IMPORT_C void GetLocationByTimeL( const TTime aTime,
+ TLocationData& aLocationData,
+ /*TLocality& aPosition,
+ CTelephony::TNetworkInfoV1& aNetworkInfo,*/
+ TLocTrailState& aState );
+
+ /**
+ * Request location info. The result is returned by calllback method.
+ * @since S60 3.1
+ * @param None.
+ * @return None.
+ */
+ IMPORT_C void RequestLocationL();
+
+ /**
+ * Cancel request for location info.
+ * @since S60 3.1
+ * @param None.
+ * @return None.
+ */
+ IMPORT_C void CancelLocationRequest();
+
+ /**
+ * Get network cell id.
+ * @since S60 3.1
+ * @param aCellId, Network cell is written into this param.
+ * @return None.
+ */
+ IMPORT_C void GetNetworkInfo( CTelephony::TNetworkInfoV1& aNetworkInfo );
+
+ /**
+ * Set observer for notifying state changes.
+ * @since S60 3.1
+ * @param aObserver, An interface to notify about state changes.
+ * @return None.
+ */
+ IMPORT_C void SetObserver( MLocationTrailObserver* aObserver );
+
+ /**
+ * Set observer (TrackLog) for notifying new locations in location trail
+ */
+ IMPORT_C void SetAddObserver( MLocationAddObserver* aObserver );
+
+ static TInt UpdateNetworkInfo( TAny* aAny );
+
+ IMPORT_C void CreateLocationObjectL( const TLocationData& aLocationData,
+ const TUint& aObjectId );
+
+ IMPORT_C void LocationSnapshotL( const TUint& aObjectId );
+
+ TItemId DoCreateLocationL( const TLocationData& aLocationData );
+
+ TItemId CreateRelationL( const TUint& aObjectId, const TUint& aLocationId );
+
+ IMPORT_C void SetMdeSession( CMdESession* aSession );
+
+ IMPORT_C void SetStateToStopping();
+
+ TTime GetMdeObjectTimeL( TItemId aObjectId );
+
+ IMPORT_C TBool RemappingNeeded();
+
+public: // from MNetworkInfoObserver.
+ /**
+ *
+ * @since S60 3.1
+ * @param
+ * @return
+ */
+ void NetworkInfo( const CTelephony::TNetworkInfoV1 &aNetworkInfo, TInt aError );
+
+public: // from MPositionInfoObserver
+ /**
+ *
+ * @since S60 3.1
+ * @param
+ * @return
+ */
+ void Position( const TPositionInfo& aPositionInfo, const TInt aError );
+
+
+public: // From MMdEQueryObserver
+
+ void HandleQueryNewResults(CMdEQuery& aQuery, TInt aFirstNewItemIndex,
+ TInt aNewItemCount);
+
+ void HandleQueryCompleted(CMdEQuery& aQuery, TInt aError);
+
+private:
+ /**
+ * Stores the location info into the array.
+ */
+ void StoreLocation( /*const TPosition& aPosition, const TCourse& aCourse,*/
+ const TPositionSatelliteInfo& aSatelliteInfo );
+
+ /**
+ * Changes the current state. New state is published in P&S and
+ * possible observer is notified.
+ */
+ void SetCurrentState( TLocTrailState aState );
+
+ /**
+ * Returns the requested location via callback method, if the location
+ * is valid. Otherwise new location value is requested until the value
+ * is succesful, or the time out limit has been reached.
+ *
+ */
+ void HandleLocationRequest( const TPositionSatelliteInfo& aSatelliteInfo /*TLocality& aPosition*/,
+ const TInt aError );
+ /**
+ * C++ constructor.
+ */
+ CLocationRecord();
+
+ /**
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Read interval value from Central repository
+ * @param aKey, Key to item
+ * @param aValue, Read value
+ */
+ void ReadCenRepValueL(TInt aKey, TInt& aValue);
+
+ TBool CheckGPSFix( const TPositionSatelliteInfo& aSatelliteInfo );
+
+ void StartTimerL();
+
+private:
+ /**
+ * A session to Metadata Engine for creating and manipulating location objects.
+ */
+ CMdESession* iMdeSession;
+
+ /**
+ * An observer interface to notify about state changes.
+ * Not own.
+ */
+ MLocationTrailObserver* iObserver;
+
+ /**
+ * An observer interface to notify about new locations.
+ * Not own.
+ */
+ MLocationAddObserver* iAddObserver;
+
+ /**
+ * An array to collect location values.
+ * Own.
+ */
+ RArray<TLocationTrailItem> iTrail;
+
+ /**
+ * P&S key property.
+ * Own.
+ */
+ RProperty iProperty;
+
+ /**
+ * Active class to get network information.
+ * Own.
+ */
+ CNetworkInfo* iNetworkInfo;
+
+ /**
+ * Active class to get position information.
+ * Own.
+ */
+ CPositionInfo* iPositionInfo;
+
+ /**
+ * Class which handles database remapping operations
+ */
+ CLocationRemappingAO* iRemapper;
+
+ CActiveSchedulerWait iWait;
+
+ /**
+ * Timer for capturing network info only
+ */
+ CPeriodic* iNetworkInfoTimer;
+
+ TLocTrailState iState;
+ TLocationTrailItem iNewItem;
+ RLocationTrail::TTrailCaptureSetting iTrailCaptureSetting;
+ CTelephony::TNetworkInfoV1 iNetwork;
+
+ TInt iMaxTrailSize;
+ TInt iLocationCounter;
+
+ /*
+ * Interval value for location trail
+ */
+ TInt iInterval;
+
+ /**
+ * Buffer size for tracklog
+ */
+ TInt iBufferSize;
+
+ TBool iRequestCurrentLoc;
+ TBool iTrailStarted;
+
+ TUint iLastNumberOfSatellitesUsed;
+ TReal32 iLastHDOP;
+ TReal32 iLastVDOP;
+ TBool iLastGPSFixState;
+
+ TInt iLocationDelta;
+ TLocationData iLastLocation;
+ TItemId iLastLocationId;
+
+ TItemId iObjectId;
+ TLocationData iLocationData;
+
+ /**
+ * This query object is used to find existing locations
+ */
+ CMdEObjectQuery* iLocationQuery;
+ };
+
+#endif // C_CLOCATIONRECORD_H
+
+// End of file.