--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/serviceproviders/sapi_location/src/locationcallBack.cpp Fri Jul 03 15:51:24 2009 +0100
@@ -0,0 +1,322 @@
+/*
+* 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: Implements callback methods which is called my core dll call
+* callback methods.
+*
+*/
+
+#include <liwserviceifbase.h>
+#include <LiwCommon.h>
+#include "locationinterface.h"
+#include "locationservice.h"
+#include "locationcb.h"
+
+using namespace LIW;
+
+/**
+ * Default constructor
+ */
+
+LocationInterfaceCB ::LocationInterfaceCB()
+ {
+ iCallBack = NULL ;
+ iOutParmList = NULL ;
+ iInParmList = NULL ;
+ iTransactionId = 0 ;
+ }
+
+/**
+ * OverLoaded constructor which accepts the callback adderss
+ * and registers it
+ */
+
+LocationInterfaceCB :: LocationInterfaceCB( MLiwNotifyCallback* aCallBack ,
+ const CLiwGenericParamList* aInParmList ,
+ TPositionModuleInfo* aPositionModuleInfo ,
+ TInt32 aTransactionId ) : iCallBack(aCallBack),
+ iTransactionId(aTransactionId)
+ {
+ iModuleInfo = aPositionModuleInfo ;
+
+ //Store the outparam and in param list
+
+ iOutParmList = CLiwGenericParamList :: NewL(); //(*aOutParmList) ;
+
+
+ //Currently we dont use inputparam list, but when need it has to be
+ //initalised as done above for iOutParamList
+ iInParmList = iOutParmList ;
+ //Extract the location info category from inputparamlist
+ TInt index = 0;
+ const TLiwGenericParam *smapparam = aInParmList->FindFirst(index , KLocationInfoCategory) ;
+ TPtrC argposInfoCategory(KLocationBasicinfo) ;
+
+ if(index != KErrNotFound)
+ {
+
+ //posInfoCategory = (smapparam->Value()).AsDes() ;
+ argposInfoCategory.Set( (smapparam->Value()).AsDes() );
+ }
+
+
+ iLocinfoCategory = EBasicInfo;
+ if ( argposInfoCategory == KLocationGenericInfo )
+ {
+ iLocinfoCategory = EGenericInfo;
+ }
+ }
+
+/**
+ * overloaded NewL function for creating local call back objects
+ * as required by locationinterface.cpp
+ */
+
+LocationInterfaceCB *LocationInterfaceCB :: NewL(MLiwNotifyCallback* aCallBack ,
+ const CLiwGenericParamList* aInParmList ,
+ TPositionModuleInfo* aPositionModuleInfo,
+ TInt32 aTransactionid )
+ {
+ LocationInterfaceCB *self = new(ELeave) LocationInterfaceCB(aCallBack , aInParmList ,
+ aPositionModuleInfo, aTransactionid) ;
+
+ return self ;
+ }
+
+/**
+ * implementation of HandleNotifyL function derived from LocationInterfaceCB
+ */
+
+ TInt LocationInterfaceCB :: HandleNotifyL(HPositionGenericInfo* aGenericInfo , TInt aError)
+ {
+
+ iOutParmList->Reset() ;
+ TInt err = CLocationInterface :: ConvertToSapiError(aError) ;
+
+ TLiwGenericParam errorParm(KErrorCode , TLiwVariant((TInt32)err)) ;
+ iOutParmList->AppendL(errorParm) ;
+
+ if(aError) //if Error then return the error code to user
+ {
+
+ iCallBack->HandleNotifyL(iTransactionId , KLiwEventError , *iOutParmList , *iInParmList) ;
+ iOutParmList = NULL ;
+ //delete this ;
+ return KErrGeneral ;
+ }
+
+
+ TRAPD(error , HandleL(aGenericInfo , aError))
+
+ if(error != KErrNone)
+ {
+ iCallBack->HandleNotifyL(iTransactionId , KLiwEventError , *iOutParmList , *iInParmList) ;
+ iOutParmList = NULL ;
+ //delete this ;
+ return KErrGeneral ;
+ }
+
+
+
+ //For GetLocation notify user with EventCompleted Notification and for trace
+ //Notify user with Event in progress notification
+ if(iRequestType == KGetLocationCB)
+ {
+ iCallBack->HandleNotifyL(iTransactionId , KLiwEventCompleted , *iOutParmList , *iInParmList ) ;
+ }
+ else
+ {
+ iCallBack->HandleNotifyL(iTransactionId , KLiwEventInProgress , *iOutParmList , *iInParmList ) ;
+ }
+
+
+
+ return KErrNone ;
+ }
+
+ /**
+ * LocationInterfaceCB :: HandleL(): An internal utility function that encapsulates
+ * all the leaving methods. This function is called by HandleNotifyL method
+ */
+
+void LocationInterfaceCB :: HandleL(HPositionGenericInfo* aGenericInfo , TInt /*aError*/)
+ {
+ CLiwDefaultMap *result = CLiwDefaultMap::NewL() ;
+ CleanupStack :: PushL(result) ;
+ //Now insert the collected position informaiton(latitude, longitude , and altitude into a default map
+ TPosition pos ;
+
+ aGenericInfo->GetPosition(pos) ;
+
+ TReal32 Val = pos.Longitude() ;
+
+ result->InsertL(KLongitudeKey , TLiwVariant((TReal)Val)) ; //Inserting longitude
+
+
+ Val = pos.Latitude() ;
+ result->InsertL(KLatitudeKey , TLiwVariant((TReal)Val)) ; //Inserting latitude into map
+
+ Val = pos.Altitude() ;
+
+ result->InsertL(KAltitudeKey , TLiwVariant((TReal)Val)) ; //Inserting altitude into map
+ //TLiwVariant resVar(result) ;
+
+
+ TPositionModuleInfo :: TCapabilities currCapability = iModuleInfo->Capabilities() ;
+
+ if ( iLocinfoCategory == EGenericInfo )
+ {
+ if(currCapability & TPositionModuleInfo :: ECapabilitySpeed) //Populate output param with speed info
+ {
+ TReal32 speedinfo = 0 ;
+
+ if(!aGenericInfo->GetValue(EPositionFieldHorizontalSpeed , speedinfo) ) //Extract speed
+ {
+ result->InsertL(KPositionFieldHorizontalSpeed,TLiwVariant((TReal)speedinfo));
+
+ }
+
+ if(!aGenericInfo->GetValue(EPositionFieldHorizontalSpeedError , speedinfo))
+ {
+ result->InsertL(KPositionFieldHorizontalSpeedError,TLiwVariant((TReal)speedinfo));
+ }
+
+
+
+ } //End of EcapabilitySpeed
+
+
+ if(currCapability & TPositionModuleInfo :: ECapabilitySatellite) //Extract satellitinfo if any and append it
+ { //as part of out parm list
+ TInt8 satinfo = 0;
+
+ if(!aGenericInfo->GetValue(EPositionFieldSatelliteNumInView , satinfo))
+ {
+ result->InsertL(KPositionFieldSatelliteNumInView,TLiwVariant((TReal)satinfo));
+ }
+ if(!aGenericInfo->GetValue(EPositionFieldSatelliteNumUsed , satinfo))
+ {
+ result->InsertL(KPositionFieldSatelliteNumUsed ,TLiwVariant((TReal) satinfo)) ;
+ }
+
+
+ }
+
+ if(currCapability & TPositionModuleInfo :: ECapabilityDirection) //Extract direction info if any and append it
+ { // as part of out parm list
+ TReal direcinfo = 0;
+
+ if(!aGenericInfo->GetValue(EPositionFieldTrueCourse , direcinfo) )
+ {
+ result->InsertL(KPositionFieldTrueCourse,TLiwVariant((TReal)direcinfo));
+ //iOutParmList->AppendL(TLiwGenericParam(KPositionFieldTrueCourse , TLiwVariant((TInt32)direcinfo))) ;
+ }
+
+
+ if(!aGenericInfo->GetValue(EPositionFieldTrueCourseError , direcinfo) )
+ {
+ result->InsertL(KPositionFieldTrueCourseError,TLiwVariant((TReal)direcinfo));
+ //iOutParmList->AppendL(TLiwGenericParam(KPositionFieldTrueCourseError , TLiwVariant((TInt32)direcinfo))) ;
+ }
+
+
+ if(!aGenericInfo->GetValue(EPositionFieldMagneticCourseError , direcinfo) )
+ {
+ result->InsertL(KPositionFieldTrueCourseError,TLiwVariant((TReal)direcinfo));
+ //iOutParmList->AppendL(TLiwGenericParam(KPositionFieldMagneticCourseError , TLiwVariant((TInt32)direcinfo))) ;
+ }
+
+ if(!aGenericInfo->GetValue(EPositionFieldMagneticCourse , direcinfo) )
+ {
+ result->InsertL(KPositionFieldMagneticCourse,TLiwVariant((TReal)direcinfo));
+
+ }
+
+ }
+
+
+ if(currCapability & TPositionModuleInfo :: ECapabilityCompass) //Extract compass info if any and append it
+ { // as part of out parm list
+ TReal compassinfo ;
+
+ if(!aGenericInfo->GetValue(EPositionFieldHeading , compassinfo) )
+ {
+ result->InsertL(KPositionFieldHeading,TLiwVariant((TReal)compassinfo));
+ ;
+ }
+
+
+ if(!aGenericInfo->GetValue(EPositionFieldHeadingError , compassinfo) )
+ {
+ result->InsertL(KPositionFieldHeadingError,TLiwVariant((TReal)compassinfo));
+
+ }
+
+ if(!aGenericInfo->GetValue(EPositionFieldMagneticHeading , compassinfo) )
+ {
+ result->InsertL(KPositionFieldMagneticHeading,TLiwVariant((TReal)compassinfo));
+
+ }
+
+
+
+ if(!aGenericInfo->GetValue(EPositionFieldMagneticHeadingError , compassinfo) )
+ {
+ result->InsertL(KPositionFieldMagneticHeadingError,TLiwVariant((TReal)compassinfo));
+
+ }
+
+
+
+ }
+
+ /*if( currCapability & TPositionModuleInfo :: ECapabilityNmea ) //Extract Nmea info if any and append it
+ { //as part of out param list
+ TUint8 numSentences ;
+
+ if(!aGenericInfo->GetValue(EPositionFieldNMEASentences , numSentences) )
+ {
+ result->InsertL(KPositionFieldNMEASentences,TLiwVariant((TReal)numSentences));
+
+ }
+
+
+ TBuf8 <20> nmeaSentences ;
+
+ if(!aGenericInfo->GetValue(EPositionFieldNMEASentencesStart , nmeaSentences) )
+ {
+ result->InsertL(KPositionFieldNMEASentencesStart,TLiwVariant(nmeaSentences));
+
+ }
+ }*/
+
+ }
+ TLiwGenericParam outParm(KLocationMap , TLiwVariant(result)) ;
+
+ iOutParmList->AppendL(outParm) ;
+ CleanupStack :: Pop(result) ;
+ result->DecRef() ;
+
+
+ }
+
+/**
+ * Default destructor
+ */
+
+ LocationInterfaceCB :: ~LocationInterfaceCB()
+ {
+
+ delete iOutParmList;
+
+ }