serviceproviders/sapi_location/inc/locationinterface.h
changeset 5 989d2f495d90
child 10 fc9cf246af83
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/serviceproviders/sapi_location/inc/locationinterface.h	Fri Jul 03 15:51:24 2009 +0100
@@ -0,0 +1,325 @@
+/*
+* Copyright (c) 2006-2007 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 "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:  Header file for location SAPI core implementation.
+*
+*/
+
+#ifndef C_LOCINTERFACE_H
+#define C_LOCINTERFACE_H
+
+
+#include <LiwCommon.h>
+#include "locationcb.h"
+#include "locationservice.h"
+#include "serviceerrno.h"
+
+
+// CONSTANTS
+const TInt KMaxSupportedFields = 25 ;
+
+
+
+//Second
+const TInt KLocSecond = 1000000;
+
+//Update interval
+const TInt KLocUpdateInterval = KLocSecond;
+
+//Update time out
+const TInt KLocUpdateTimeOut = 15*KLocSecond;
+
+//MaxAge
+const TInt KLocMaxAge = 0;
+
+
+/**
+ * Various command for Location service
+ */
+ 
+_LIT8( KCmdGetLocation , "GetLocation" ) ;
+_LIT8( KCmdTraceLocation, "Trace" ) ;
+_LIT8( KCmdCancelRequest, "CancelNotification" ) ;
+_LIT8( KCmdSetIdentity, "SetIdentity");
+
+_LIT( KRequestTrace ,"TraceCancel") ;
+_LIT( KRequestGetLoc , "GetLocCancel" ) ;
+_LIT8( KRequestCalculate , "Calculate") ;
+ 
+_LIT8(	KMathRequest , "MathRequest") ;
+_LIT8( KCancelType , "CancelRequestType") ;
+
+/**
+ * Error Indntifier in Output parameter list
+ */
+ _LIT8(KErrorCode , "ErrorCode") ; 
+ 
+ /**
+  * Error string 
+  */
+  _LIT8(KErrorMessage,"ErrorMessage");
+ 
+ /**
+  * Location SAPI result parmater identifiers
+  */
+ _LIT8(KLocationMap , "ReturnValue") ; 
+ 
+/**
+ * Update Options
+ */
+_LIT8(KUpdateOptionMap,"Updateoptions");
+_LIT8(KUpdateOptionInterval,"UpdateInterval");
+_LIT8(KUpdateOptionTimeOut,"UpdateTimeOut");
+_LIT8(KUpdateOptionMaxAge,"UpdateMaxAge");
+_LIT8(KPartialUpdates , "PartialUpdates");
+
+/**
+ * Class of Location Information ;user is 
+ * looking for
+ */
+_LIT8(KLocationInfoCategory,"LocationInformationClass");
+_LIT(KLocationBasicinfo,"BasicLocationInformation");
+_LIT(KLocationGenericInfo,"GenericLocationInfo");
+
+/**
+ * Math operations request identifiers 
+ */
+_LIT( KRequestDistance , "FindDistance") ;
+_LIT(KRequestBearingTo,"FindBearingTo");
+_LIT(KRequestMove,"MoveCoordinates");
+_LIT8(KDistanceParmSource , "DistanceParamSource") ;
+_LIT8(KDistanceMove , "MoveByThisDistance");
+_LIT8(KBearingMove , "MoveByThisBearing");
+_LIT8(KDistanceParmDestination , "DistanceParamDestination") ;
+_LIT8(KMathOpResult,"ReturnValue");
+ 
+  
+/**
+ * Speed informations which will be part of outparamlist 
+ */
+   
+_LIT8(KPositionFieldHorizontalSpeed , "HorizontalSpeed") ;
+_LIT8(KPositionFieldVerticalSpeed , "VeritcalSpeed") ;
+_LIT8(KPositionFieldHorizontalSpeedError , "HorizontalSpeedError") ;
+_LIT8(KPositionFieldVerticalSpeedError , "VeritcalSpeedError") ;
+   
+ /**
+  * Satellite information which be part of outparm list
+  */
+_LIT8(KPositionFieldSatelliteNumInView , "SatelliteNumView") ;
+_LIT8(KPositionFieldSatelliteNumUsed , "SatelliteNumViewUsed") ;
+_LIT8(KPositionFieldSatelliteTime , "SatelliteTime") ;
+
+/**
+ * Compass information which will be part of outparmlist
+ */
+_LIT8(KPositionFieldHeading , "Heading") ;
+_LIT8(KPositionFieldHeadingError , "HeadingError") ;
+_LIT8(KPositionFieldMagneticHeading , "MagneticHeading") ;
+_LIT8(KPositionFieldMagneticHeadingError , "MagneticHeadingError") ;
+  
+/**
+ * Direction course information which will be part of outparm list
+ */
+_LIT8(KPositionFieldTrueCourse , "TrueCourse") ;
+_LIT8(KPositionFieldTrueCourseError , "TrueCourseError") ;
+_LIT8(KPositionFieldMagneticCourse , "MagneticCourse") ;
+_LIT8(KPositionFieldMagneticCourseError , "MagneticCourseError") ;
+
+/**
+ * NMEA information which will be part of outparam list 
+ */
+
+_LIT8(KPositionFieldNMEASentences , "NMEASentence") ;
+_LIT8(KPositionFieldNMEASentencesStart , "NMEASentenceStart") ;
+
+/**
+ * Enum specifier for postion Info Category
+ * 
+ */
+ enum TPositionCategory
+	 {
+	 EBasicPositionInfo   = 0,
+	 EGenericPositionInfo = 1	
+	 };
+
+/**
+ * Transaction id, which will be part of outparamlist for asynchronous request
+ */
+_LIT8(KTransactionId, "TransactionID");
+  
+/**
+ * This is an interface class for Location SAPI   This class implements ExecuteCmdL() method
+ * ExecuteCmdL() method is called directly by consumer after descovering the service 
+ */
+ 
+class CLocationInterface : public CBase ,public  MLiwInterface
+    {
+    public:
+    enum TIndex
+			{
+			Index0 = 0,        
+			Index1,
+			Index2,
+			Index3
+			};
+    /**
+      * A static method for creating CLocationInterface object
+      */
+     static CLocationInterface *NewL() ;
+    
+
+    /**
+     * Default destructor
+     */
+    virtual ~CLocationInterface() ;
+
+    /**
+     * ExecuteCmdL parses the input parameters and then calls an appropriate method on iLocationServic
+     *
+     * @param aCmdName the name of the service command which the consumer wants to invoke
+     * @param aInParamList the input parameter list, can be empty list
+     * @param [in,out] aOutParamList the output parameter list, can be empty lis. The
+     * service provider can use the output parameter list to fill in necessary return values
+     * @param aCmdOptions Options for the command, see TLiwServiceCmdOptions in LiwCommon.hrh.
+     * @param aCallback callback to be registered by consumer application
+     *               
+     * @see TLiwServiceCmdOptions
+     * @see CLiwGenericParamList
+     * @see MLiwNotifyCallback
+     */
+    virtual void ExecuteCmdL( const TDesC8& aCmdName,
+                           const CLiwGenericParamList& aInParamList,
+                           CLiwGenericParamList& aOutParamList,
+                           TUint aCmdOptions = 0,
+                           MLiwNotifyCallback* aCallback = 0 );
+	static TInt ConvertToSapiError(TInt aSymbianErrorCode);
+                           
+    /**
+     * Close function called by consumer when it wants to delete the interface
+     */
+    virtual void Close() {delete this;}                          
+
+    private :
+    static void ConvertPosToGenricListL( TPosition &aPos , CLiwGenericParamList &aOutList ) ;
+
+    /**
+     * Internal private function which extracts coordinate information from CLiwMap
+     * passed by consumer, this is required for math operations
+     *
+     * @param aCoordinate which will contain extracted coordinate info from map
+     * @param input map containing cooridinate information
+     */
+    void FillCoordinatesL( TCoordinate &aCoordinate , const CLiwMap *aMap ) ;
+		
+	/**
+	 * SetUpdateOption construct a TPositionUpdateOptions object from the map containing
+	 * different field of update optiin.
+	 *
+	 * @param aPositionUpdateoption object to be constructed
+	 * @param aUpdatemap map containing values of different field of update option.
+	 * return -1 if negative value for timeinterval is given
+	 */
+	 TInt SetUpdateOption(TPositionUpdateOptions& aPositionUpdateoption,const CLiwMap* aUpdatemap);
+	 
+    private :
+    /**
+     *Default constructor
+     */
+     
+    CLocationInterface() ;
+
+    /**
+     * Internal CmdExecute function which parses  the input parameters
+     * this function is called by ExecuteCmdL() function 
+     *
+     * @param aCmdName the name of the service command which the consumer wants to invoke
+     * @param aInParamList the input parameter list, can be empty list
+     * @param [in,out] aOutParamList the output parameter list, can be empty lis. The
+     * service provider can use the output parameter list to fill in necessary return values
+     * @param aCmdOptions Options for the command, see TLiwServiceCmdOptions in LiwCommon.hrh.
+     * @param aCallback callback to be registered by consumer application
+     * @see TLiwServiceCmdOptions
+     * @see CLiwGenericParamList
+     * @see MLiwNotifyCallback
+     *
+     */
+       
+         
+     void CmdExecuteL(
+	         	const TDesC8& aCmdName,
+	            const CLiwGenericParamList& aInParamList ,
+	            CLiwGenericParamList& aOutParamList,
+	            TUint aCmdOptions,
+	            MLiwNotifyCallback* aCallback);
+    	            
+    /**
+     * Internal utility function which fills iGenericPosinfo  accoriding to capability of 
+     * Positioning module used for location estimation
+     */	            
+    	            
+    TInt SetSupportedFields() ;  
+
+    /**
+     * Internal utility function which gets all location information which module supports
+     *
+     * @param aOutParamList output list which is populated with location informatio
+     * @param aPosInfoCategory position category (Basic or Generic)
+     */
+     
+	void GetLocationInfo( CLiwGenericParamList& aOutParamList,TInt aPosInfoCategory) ;
+	
+	/**
+     * Internal function which cancels the asynchronous using transaction id of the 
+     * async request
+     *
+     * @param aTransactionId Transaction id of the asynchronous request to be cancelled
+     */   	
+     
+     MLiwNotifyCallback* RequestCancel(TInt32 aTransactionId/*,MLiwNotifyCallback** aCallBack*/) ;   	
+        
+            
+    /**
+     * Handle to core location class for performing location operations
+     */
+    CLocationService *iLocationService ;
+    
+    /**
+     * Registration table for callbacks
+     */
+    RPointerArray<LocationInterfaceCB> iHandleCB; 
+    
+
+    /**
+     * Member variable which holds all the Generic position  information
+     */
+
+    HPositionGenericInfo *iGenericPosInfo ;
+
+    /**
+     * Class member which contains module information which is used for location esitmation
+     */
+    TPositionModuleInfo   iModuleInfo ;
+
+    /**
+     * Class member which contains all the field ids of all the supported Hposition info fields
+     */ 
+
+    TPositionFieldId iFieldList[KMaxSupportedFields] ;
+
+
+
+    };
+
+
+#endif //C_LOCINTERFACE_H
\ No newline at end of file