--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/serviceproviders/sapi_location/tsrc/dev/tlocationprovidertest/src/tgetlocationasync.cpp Fri Jul 03 15:51:24 2009 +0100
@@ -0,0 +1,516 @@
+/*
+* 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 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:
+*
+*/
+
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include <LbsRequestor.h>
+#include <LiwServiceHandler.h>
+#include <LiwCommon.h>
+#include "tcomplugin.h"
+
+using namespace LIW;
+
+_LIT(LogFileName , "C:\\Notifications.txt") ;
+
+class ASyncLocCB : public MLiwNotifyCallback
+{
+
+ public :
+ TInt iRetStatus ;
+
+ TInt HandleNotifyL(
+ TInt aCmdId,
+ TInt aEventId,
+ CLiwGenericParamList& aEventParamList,
+ const CLiwGenericParamList& aInParamList) ;
+
+ ASyncLocCB() : iRetStatus(KErrGeneral) //Default constructor
+ {
+ ;
+ }
+
+};
+
+
+
+TInt ASyncLocCB :: HandleNotifyL(
+ TInt aCmdId,
+ TInt aEventId,
+ CLiwGenericParamList& aEventParamList,
+ const CLiwGenericParamList& aInParamList)
+
+{
+ TBuf8<50> data ;
+ TRealFormat format ;
+
+
+ RFile LogFile ;
+ RFs LogSession ;
+ TBuf8<50> Buffer(_L8("Latitude = ")) ;
+
+
+
+ LogSession.Connect() ;
+
+ if(LogFile.Open(LogSession ,LogFileName , EFileWrite | EFileShareAny ) == KErrNotFound)
+ {
+ LogFile.Create(LogSession ,LogFileName , EFileWrite | EFileShareAny ) ;
+
+ }
+
+
+ TInt End = 0 ;
+ TInt index = 0 ;
+ const TLiwGenericParam *GenericParam = aEventParamList.FindFirst(index , KErrorCode) ;
+
+ if(!GenericParam)
+ {
+ return KErrGeneral ;
+ }
+
+ if((GenericParam->Value()).AsTInt32() != KErrNone)
+ {
+ return (GenericParam->Value()).AsTInt32() ;
+ }
+
+ index = 0 ;
+
+ LogFile.Seek(ESeekEnd , End) ; //Seek to end of the file before writing
+ const TLiwGenericParam *MapParam = aEventParamList.FindFirst(index ,KLocationMap) ;
+
+ if(!MapParam)
+ {
+ return KErrGeneral ;
+ }
+
+ TLiwVariant Variant ;
+
+ Variant = MapParam->Value() ;
+ const CLiwMap *LocMap = Variant.AsMap() ;
+
+ TLiwVariant PosVariant ;
+
+ LocMap->FindL(KLongitudeKey , PosVariant) ;
+
+
+ TReal64 LongData = (TReal64)PosVariant.AsTReal() ; //Longitude
+ data.Num(LongData , format) ;
+ LogFile.Write(_L8("\n")) ;
+ LogFile.Write(_L8("Logitude = ")) ;
+ LogFile.Write(data) ;
+
+ LocMap->FindL(KLatitudeKey ,PosVariant) ; //Latitude
+
+ TReal64 LatData = (TReal64)PosVariant.AsTReal() ;
+ data.Num(LatData , format) ;
+ LogFile.Write(_L8(" Latitude = ")) ;
+ LogFile.Write(data) ;
+
+ LocMap->FindL(KAltitudeKey , PosVariant) ; //Altitude
+ TReal32 AltData = PosVariant.AsTReal() ;
+ data.Num(AltData , format) ;
+
+ LogFile.Write(_L8(" Altitude = ")) ;
+ LogFile.Write(data) ;
+ // LocMap->DecRef() ;
+
+ const TLiwGenericParam *Speed = aEventParamList.FindFirst(index , _L8("HorizontalSpeed")) ;
+
+ if(index != -1)
+ {
+ Variant = Speed->Value() ;
+ TReal speed = Variant.AsTReal() ;
+
+ data.Num(speed , format) ;
+
+ LogFile.Write(_L8("Speed = ")) ;
+ LogFile.Write(data) ;
+
+ }
+
+ const TLiwGenericParam *SpeedError = aEventParamList.FindFirst(index , _L8("HorizontalSpeedError")) ;
+
+
+ if(index != -1)
+ {
+ Variant = SpeedError->Value() ;
+ TReal speed = Variant.AsTReal() ;
+
+ data.Num(speed , format) ;
+
+ LogFile.Write(_L8("Speed = ")) ;
+ LogFile.Write(data) ;
+
+ }
+
+ index = 0 ;
+
+ const TLiwGenericParam *SatInfo = aEventParamList.FindFirst(index , _L8("SatelliteNumView")) ;
+
+ if(index != -1 )
+ {
+ Variant = SatInfo->Value() ;
+
+ TInt satnumView = Variant.AsTInt32() ;
+ data.Num(satnumView , format);
+
+ LogFile.Write(_L8("Satellite information")) ;
+
+ LogFile.Write(_L8("Number of visible satellites ")) ;
+ LogFile.Write(data) ;
+ }
+
+ index = 0 ;
+
+ const TLiwGenericParam *SatInfoview = aEventParamList.FindFirst(index , _L8("SatelliteNumViewUsed")) ;
+
+ if(index != -1 )
+ {
+ Variant = SatInfoview->Value() ;
+
+ TInt satnumViewUsed = Variant.AsTInt32() ;
+ data.Num(satnumViewUsed , format);
+
+ LogFile.Write(_L8("\nSatellite information")) ;
+
+ LogFile.Write(_L8("\nSatelliteNumViewUsed")) ;
+ LogFile.Write(data) ;
+ }
+
+ index = 0 ;
+
+ const TLiwGenericParam *Heading = aEventParamList.FindFirst(index ,_L8("Heading") ) ;
+
+ if(-1 != index)
+ {
+ Variant = Heading->Value() ;
+
+ TReal heading = Variant.AsTReal() ;
+ data.Num(heading , format);
+
+ LogFile.Write(_L8("\ncompass information")) ;
+
+ LogFile.Write(_L8("\nHeading")) ;
+ LogFile.Write(data) ;
+ }
+
+ index = 0 ;
+
+ if(Heading)
+ {
+ const TLiwGenericParam *HeadingError = aEventParamList.FindFirst(index , _L8("HeadingError") ) ;
+
+ if(-1 != index)
+ {
+ Variant = HeadingError->Value() ;
+
+ TReal heading = Variant.AsTReal() ;
+ data.Num(heading , format);
+
+ LogFile.Write(_L8("\ncompass information")) ;
+
+ LogFile.Write(_L8("\nHeading Error")) ;
+ LogFile.Write(data) ;
+
+ }
+ index = 0 ;
+ const TLiwGenericParam *MagneticHeading = aEventParamList.FindFirst(index , _L8("MagneticHeading") ) ;
+
+ if(-1 != index)
+ {
+ Variant = MagneticHeading->Value() ;
+
+ TReal heading = Variant.AsTReal() ;
+ data.Num(heading , format);
+
+ LogFile.Write(_L8("\ncompass information")) ;
+
+ LogFile.Write(_L8("\n MagneticHeading ")) ;
+ LogFile.Write(data) ;
+
+ }
+
+ index = 0 ;
+ const TLiwGenericParam *MagneticHeadingError = aEventParamList.FindFirst(index , _L8("MagneticHeadingError") ) ;
+
+ if(-1 != index)
+ {
+ Variant = MagneticHeadingError->Value() ;
+
+ TReal heading = Variant.AsTReal() ;
+ data.Num(heading , format);
+
+ LogFile.Write(_L8("\ncompass information")) ;
+
+ LogFile.Write(_L8("\nMagneticHeading Error")) ;
+ LogFile.Write(data) ;
+
+ }
+
+
+ } //End of Heading
+
+ index = 0 ;
+
+ const TLiwGenericParam *TrueCourse = aEventParamList.FindFirst(index , _L8("TrueCourse") ) ;
+
+ if(-1 != index)
+ {
+
+ Variant = TrueCourse->Value() ;
+
+ TReal heading = Variant.AsTReal() ;
+ data.Num(heading , format);
+
+ LogFile.Write(_L8("\nDirection ")) ;
+
+ LogFile.Write(_L8("\n TrueCourse Error")) ;
+ LogFile.Write(data) ;
+
+ index = 0 ;
+
+ const TLiwGenericParam *TrueCourseError = aEventParamList.FindFirst(index , _L8("TrueCourseError") ) ;
+
+ if(-1 != index)
+ {
+ Variant = TrueCourseError->Value() ;
+
+ TReal heading = Variant.AsTReal() ;
+ data.Num(heading , format);
+
+ LogFile.Write(_L8("\ncompass information")) ;
+
+ LogFile.Write(_L8("\nMagneticHeading Error")) ;
+ LogFile.Write(data) ;
+
+ }
+
+
+ }
+
+ index = 0 ;
+ const TLiwGenericParam *MagneticCourse = aEventParamList.FindFirst(index , _L8("MagneticCourse") ) ;
+
+
+ if(-1 != index)
+ {
+ Variant = MagneticCourse->Value() ;
+
+ TReal heading = Variant.AsTReal() ;
+ data.Num(heading , format);
+
+ LogFile.Write(_L8("\ncompass information")) ;
+
+ LogFile.Write(_L8("\nMagneticCourse ")) ;
+ LogFile.Write(data) ;
+
+ index = 0 ;
+
+ const TLiwGenericParam *MagneticCourseError = aEventParamList.FindFirst(index , _L8("MagneticCourseError") ) ;
+
+ if(-1 != index)
+ {
+ Variant = MagneticCourseError->Value() ;
+
+ TReal heading = Variant.AsTReal() ;
+ data.Num(heading , format);
+
+ LogFile.Write(_L8("\ncompass information")) ;
+
+ LogFile.Write(_L8("\n MagneticCourseError Error")) ;
+ LogFile.Write(data) ;
+
+ }
+
+
+ }
+
+
+ /*index = 0 ;
+ const TLiwGenericParam *NmeaNum = aEventParamList.FindFirst(index , _L8("NMEASentence") ) ;
+
+
+ if(-1 != index)
+ {
+ Variant = NmeaNum->Value() ;
+
+ TInt32 NMEASentence = Variant.AsTInt32() ;
+ data.Num(NMEASentence , format);
+
+ LogFile.Write(_L8("\nNMEA Information")) ;
+
+ LogFile.Write(_L8("\n number of NMEA Sentences ")) ;
+ LogFile.Write(data) ;
+
+ index = 0 ;
+
+ const TLiwGenericParam *MagneticCourseError = aEventParamList.FindFirst(index , _L8("NMEASentenceStart") ) ;
+
+ if(-1 != index)
+ {
+ Variant = MagneticCourseError->Value() ;
+
+ // TDes8 heading = Variant.AsDes() ;
+
+ // LogFile.Write(_L8("\nNMEA information")) ;
+
+ // LogFile.Write(_L8("\n NMEA Sentences")) ;
+ // LogFile.Write(data) ;
+
+ }
+ }*/
+
+
+
+ LogFile.Close() ;
+ LogSession.Close() ;
+ iRetStatus = KErrNone ;
+ CActiveScheduler *Current = CActiveScheduler :: Current() ;
+ Current->Stop() ;
+
+
+ return KErrNone ;
+}
+
+
+
+TInt GetLocAsynchFunctionL()
+{
+ __UHEAP_MARK;
+ TInt start = User::CountAllocCells();
+ ASyncLocCB MyUpdates ;
+
+ _LIT8(KService, "Service.Location");
+ _LIT8(KIDataSource,"ILocation");
+
+
+
+ CActiveScheduler *Scheduler = CActiveScheduler :: Current() ;
+
+ if(!Scheduler)
+ {
+ Scheduler = new CActiveScheduler ;
+ }
+
+
+ CActiveScheduler :: Install(Scheduler) ;
+
+
+
+
+ CLiwServiceHandler* ServiceHandler = CLiwServiceHandler::NewL();
+
+ // Input and output parameter list
+ CLiwGenericParamList* inputlist = &(ServiceHandler->InParamListL());
+ CLiwGenericParamList* outputlist = &(ServiceHandler->OutParamListL());
+
+
+
+
+ //CLiwCriteriaItem* crit = CLiwCriteriaItem::NewL(1, KContents, KService);
+ CLiwCriteriaItem* crit = CLiwCriteriaItem::NewL(1, KDataSource, KService);
+
+
+ crit->SetServiceClass(TUid::Uid(KLiwClassBase));
+
+ RCriteriaArray a;
+ a.AppendL(crit);
+
+ ServiceHandler->AttachL(a) ;
+
+
+
+
+
+
+
+ ServiceHandler->ExecuteServiceCmdL(*crit, *inputlist, *outputlist);
+
+
+
+
+ TInt pos = 0;
+
+ const TLiwGenericParam *errorprm = outputlist->FindFirst(pos , KErrorCode) ;
+
+ if(!errorprm)
+ {
+ //_LIT(Klog , "Success/Failure error code missing from outputlist") ;
+ //iLog->Log(Klog) ;
+ return KErrGeneral ;
+ }
+
+
+ _LIT8(KDataSource, "ILocation");
+
+ pos = 0 ;
+
+ const TLiwGenericParam *genericparm = outputlist->FindFirst(pos,KIDataSource );
+
+ if(!genericparm)
+ {
+ //_LIT(KLog , "Interface not found");
+ //iLog->Log(KLog) ;
+ return KErrGeneral ;
+ }
+
+ MLiwInterface* locinterface = (genericparm->Value()).AsInterface();
+ // CLiwGenericParamList *OutParmList = CLiwGenericParamList :: NewL() ;
+
+
+ TBuf8<20>CmdBuf(KCmdGetLocation) ;
+
+ outputlist->Reset() ;
+ inputlist->Reset() ;
+ locinterface->ExecuteCmdL(CmdBuf , *inputlist , *outputlist ,KLiwOptASyncronous , &MyUpdates);
+
+ CActiveScheduler :: Start() ;
+ delete Scheduler ;
+
+ locinterface->Close();
+ delete ServiceHandler;
+ a.ResetAndDestroy();
+ a.Close();
+ //delete inputlist ;
+ //delete outputlist ;
+
+ //delete ServiceHandler;
+ TInt end = User::CountAllocCells();
+ __UHEAP_MARKEND;
+ return MyUpdates.iRetStatus ;
+}
+
+
+
+
+TInt FindLocationAsynch(TAny * /*Arg*/)
+{
+// __UHEAP_MARK;
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+
+ TInt ret = 0 ;
+ TRAPD(err , (ret = GetLocAsynchFunctionL()) );
+ delete cleanup ;
+ // __UHEAP_MARKEND;
+
+ if(err)
+ {
+ return err ;
+ }
+ return ret ;
+}
\ No newline at end of file