epoc32/include/lbspositioninfo.h
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
child 4 837f303aceeb
--- a/epoc32/include/lbspositioninfo.h	Tue Nov 24 13:55:44 2009 +0000
+++ b/epoc32/include/lbspositioninfo.h	Tue Mar 16 16:12:26 2010 +0000
@@ -1,1 +1,306 @@
-lbspositioninfo.h
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __LBSPOSITIONINFO_H__
+#define __LBSPOSITIONINFO_H__
+
+#include <lbsposition.h>
+#include <lbscommon.h>
+#include <lbsfields.h>
+
+/**
+The default size for a HPositionGenericInfo position information buffer
+
+@publishedAll
+@released
+*/
+const TInt KPositionGenericInfoDefaultBufferSize = 1024;
+
+/**
+The default number of requested fields for a HPositionGenericInfo 
+position information buffer
+
+@publishedAll
+@released
+*/
+const TInt KPositionGenericInfoDefaultMaxFields = 32;
+
+/**
+Position update types
+
+@publishedAll
+@released
+ */
+enum _TPositionUpdateType
+	{
+	/** EPositionUpdateUnknown */
+	EPositionUpdateUnknown = 0,
+	/** EPositionUpdateGeneral */
+	EPositionUpdateGeneral = 0x01
+	};
+/**
+TPositionUpdateType code
+@publishedAll
+@released
+ */
+typedef TUint32 TPositionUpdateType;
+
+
+/**
+Position mode reasons. These values summarise the reasons why module
+was unable to uses its preferred calculation mode when producing a 
+position update. The values are a bit mask that can be combined
+to describe the various reasons.
+
+NetworkError is used when there is no network coverage or
+the service is unavailable.
+
+LocalError represents environmental reasons that prevent a terminal
+based calculation - such as no satellites in view.
+
+DataError is returned when there is a problem with the initialisation
+data. For example, GPS assistance data was received but it was
+either invalid or could not be used..
+
+@publishedAll
+@released
+ */
+enum _TPositionModeReason
+	{
+	/** Mode reason none */
+	EPositionModeReasonNone         = 0,
+	/** Mode reason network error */
+	EPositionModeReasonNetworkError = 1 << 0,
+	/** Mode reason local error */
+	EPositionModeReasonLocalError   = 1 << 1,
+	/** Mode reason data error */
+	EPositionModeReasonDataError    = 1 << 2
+	};
+
+/**
+TPositionModeReason code
+@publishedAll
+@released
+ */
+typedef TUint32 TPositionModeReason;
+
+
+class TPositionInfoBase : public TPositionClassTypeBase
+/**
+This class provides the interface used by RPositioner to get a location fix,
+and as such all classes used to get location info from the location server should
+derive from this class.
+
+Class contains info about the update type and the ID of the module that gave the 
+location fix
+
+@publishedAll
+@released
+ */
+	{
+public:
+	IMPORT_C TPositionModuleId ModuleId() const;
+	IMPORT_C void SetModuleId(TPositionModuleId aModuleId);
+
+	IMPORT_C TPositionUpdateType UpdateType() const;
+	IMPORT_C void SetUpdateType(TPositionUpdateType aUpdateType);
+
+	IMPORT_C TPositionModuleInfo::TTechnologyType PositionMode() const;
+	IMPORT_C void SetPositionMode(TPositionModuleInfo::TTechnologyType aMode);
+
+	IMPORT_C TPositionModeReason PositionModeReason() const;
+	IMPORT_C void SetPositionModeReason(TPositionModeReason aReason);
+
+protected:
+	IMPORT_C TPositionInfoBase();
+
+protected:
+	/** The Id of the module that gave the location fix. */
+	TPositionModuleId iModuleId;
+	/** The type of update that this location fix represents. */
+	TUint32 iUpdateType;
+
+	/** The positioning mode used to calculate this location fix. */
+	TPositionModuleInfo::TTechnologyType iPositionMode;
+
+	/** The reason why the prefered position mode was not used. */
+	TPositionModeReason iPositionModeReason;
+
+private:
+	/** Unused variable for future expansion. */
+	TUint8 iReserved[8];
+	};
+
+
+class TPositionInfo : public TPositionInfoBase
+/**
+Standard class for getting a TPosition location fix from the location server.
+
+@publishedAll
+@released
+ */
+	{
+public:
+	IMPORT_C TPositionInfo();
+
+	IMPORT_C void GetPosition(TPosition& aPosition) const;
+	IMPORT_C void SetPosition(const TPosition& aPosition);
+
+protected:
+	/** The TPosition. */
+	TPosition iPosition;
+	};
+
+
+class TPositionCourseInfo : public TPositionInfo
+/**
+Class for getting a TCourse from the location server.
+
+@publishedAll
+@released
+ */
+	{
+public:
+	IMPORT_C TPositionCourseInfo();
+
+	IMPORT_C void GetCourse(TCourse& aCourse) const;
+	IMPORT_C void SetCourse(const TCourse& aCourse);
+
+protected:
+	/** The TCourse. */
+	TCourse iCourse;
+	};
+
+
+/**
+Class for getting arbitrary positioning related information back from the location server. 
+The client can set upto KPositionMaxRequestedFields as the number of requested fields.
+The definitions of the fields are given in the enum #_TPositionFieldId. The client must 
+know what data type will be returned for each of the fields. The server will make a best 
+attempt to fill in the requested fields.
+
+The client needs to allocate a big enough buffer to store the information it is requesting.
+In order to be sure of getting back all the information the client must know and allocate 
+memory considering the return value for each requested field.
+
+@publishedAll
+@released
+ */
+class HPositionGenericInfo : public TPositionInfo
+	{
+public:
+
+	IMPORT_C static HPositionGenericInfo* New(TInt aBufferSize = KPositionGenericInfoDefaultBufferSize,
+											  TInt aMaxFields = KPositionGenericInfoDefaultMaxFields);
+	IMPORT_C static HPositionGenericInfo* NewL(TInt aBufferSize = KPositionGenericInfoDefaultBufferSize,
+											   TInt aMaxFields = KPositionGenericInfoDefaultMaxFields);
+	IMPORT_C static HPositionGenericInfo* NewLC(TInt aBufferSize = KPositionGenericInfoDefaultBufferSize,
+												TInt aMaxFields = KPositionGenericInfoDefaultMaxFields);
+	IMPORT_C void ClearRequestedFields();
+	IMPORT_C TInt SetRequestedField(TPositionFieldId aFieldId);
+	IMPORT_C TInt SetRequestedFields(const TPositionFieldIdList aFieldIdList);
+	IMPORT_C TInt IsRequestedField(TPositionFieldId aFieldId) const;
+	IMPORT_C TPositionFieldId FirstRequestedFieldId() const;
+	IMPORT_C TPositionFieldId NextRequestedFieldId(TPositionFieldId aFieldId) const;
+	IMPORT_C TBool IsFieldAvailable(TPositionFieldId aFieldId) const;
+	IMPORT_C void ClearPositionData();	//Required on server side
+	IMPORT_C TInt BufferSize() const;
+	IMPORT_C TInt MaxFields() const;
+
+    /**
+     * Used to store position information.
+     * @param aFieldId Standard position field identifier. See _TPositionFieldId
+     * @param[in] aValue The parameter aValue can be of the type 
+     * TInt8, TInt16, TInt32, TInt64, TUint8, TUint16, TUint32, 
+     * TReal32, TReal64, TTime, TTimeIntervalMicroSeconds, Des8, or Des16.
+     * @return a symbian OS error code.
+     * @return KErrNone on successful operation.
+     * @return KErrPositionBufferOverflow if the data contained in the 
+     * parameter aValue cannot be added to the class due to the buffer being too small.
+     */
+	template <class TType>
+		inline TInt SetValue(TPositionFieldId aFieldId, const TType& aValue) 
+			{return PositionFieldManager::SetValue(aFieldId, aValue, *this);}
+
+    /**
+     * Used to retrieve position information.
+     * @param aFieldId Standard position field identifier. See _TPositionFieldId
+     * @param[out] aValue The parameter aValue can be of the type 
+     * TInt8, TInt16, TInt32, TInt64, TUint8, TUint16, TUint32, 
+     * TReal32, TReal64, TTime, TTimeIntervalMicroSeconds, Des8, or Des16.
+     * Panics with EPositionGenericInfoMismatchDataType if there is a 
+     * mismatch in the data type of a field. 
+     * @return a symbian OS error code.
+     * @return KErrNone on successful operation.
+     * @return KErrOverflow if the supplied descriptor is too short to contain the requested field.
+     * This method must use the same data type as that assigned by SetValue() .
+     */
+	template <class TType>
+		inline TInt GetValue(TPositionFieldId aFieldId, TType& aValue) const 
+			{return PositionFieldManager::GetValue(aFieldId, aValue, *this);}
+
+private:
+	HPositionGenericInfo(TInt aDataBufferSize, TInt aMaxFields, 
+		TUint aFieldIndexStartPoint, TUint aDataStartPoint, TBool aResetRequestedFields);
+    /**
+     * internal private method 
+     */
+	HPositionGenericInfo& operator=(const HPositionGenericInfo&);
+    /**
+     * internal private method 
+     */
+	HPositionGenericInfo(const HPositionGenericInfo&);
+
+	TInt FindEmptyRequestedFieldOffset(TInt& aEmptyFieldOffset) const;
+
+    /**
+     * Helper method. For internal usage only 
+     */
+	inline TPositionFieldId* RequestedFieldPtr();
+    /**
+     * Helper method. For internal usage only 
+     */
+	inline const TPositionFieldId* RequestedFieldPtr() const;
+    /**
+     * Helper method. For internal usage only 
+     */
+	inline TPositionFieldIndex* FieldIndexPtr();
+    /**
+     * Helper method. For internal usage only 
+     */
+	inline const TPositionFieldIndex* FieldIndexPtr() const;
+
+private:
+	friend class TPositionFieldSetter;
+	friend class TPositionFieldGetter;
+
+	/**	Max number of requesable/returnable fields. */
+	const TInt iMaxFields;
+
+	/** Offset into iBuffer of the field index. */
+	const TUint iFieldIndexStartPoint;
+
+	/** Offset into iBuffer of the actual location data. */
+	const TUint iDataStartPoint;
+
+	/** Total size of the buffer */
+	const TInt iTotalBufferSize;
+
+	/** Start of the buffer. The heap cell allocated for an instance of this class
+	has space for information up to iBuffer[iTotalBufferSize-1]*/
+	TUint8 iBuffer[1];	//Must be at end of class
+	};
+
+#endif //__LBSPOSITIONINFO_H__