serviceproviders/sapi_location/tsrc/dev/tlocationprovidertest/src/tenableHighAcc.cpp
changeset 22 fc9cf246af83
child 24 f4292e0e20df
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/serviceproviders/sapi_location/tsrc/dev/tlocationprovidertest/src/tenableHighAcc.cpp	Thu Aug 27 07:43:07 2009 +0300
@@ -0,0 +1,502 @@
+/*
+* 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: 
+*
+*/
+/*
+ * Enable High Accuracy params
+ */
+
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include <LbsRequestor.h>
+#include <LiwServiceHandler.h>
+#include <LiwCommon.h>
+
+
+#include "tcomplugin.h"
+TInt cbErr;
+TInt EnableHighAccL(TInt aCallType,TBool aEnableAcc);
+
+class EnableHighAccClass : public MLiwNotifyCallback
+    {
+
+    MLiwInterface *iLocationInterface ;
+    CLiwGenericParamList *iInputList ;
+    TInt cnt;
+public :
+    TInt iRetStatus ;
+
+    TInt HandleNotifyL(
+            TInt aCmdId,
+            TInt aEventId,
+            CLiwGenericParamList& aEventParamList,
+            const CLiwGenericParamList& aInParamList) ;
+
+    EnableHighAccClass() : iRetStatus(KErrGeneral),cnt(0) //Default constructor 
+                    {
+                    ;
+                    }
+    EnableHighAccClass(TInt aCmd , MLiwInterface *aInterface , CLiwGenericParamList *aInputList)     ;
+    };
+
+
+EnableHighAccClass :: EnableHighAccClass(TInt aCmd ,MLiwInterface *aInterface , CLiwGenericParamList *aInputList)
+    { 
+    cnt = 0;
+    iLocationInterface = aInterface ;
+    iInputList = aInputList ;
+
+    }
+
+TInt EnableHighAccClass ::  HandleNotifyL(
+        TInt aCmdId,
+        TInt aEventId,
+        CLiwGenericParamList& aEventParamList,
+        const CLiwGenericParamList& aInParamList)
+    {
+
+    //DeRefrence Allocated Map first 
+    cnt++;
+    TInt index = 0;
+    const TLiwGenericParam *GenericParam =  aEventParamList.FindFirst(index , KErrorCode) ;
+
+    if(!GenericParam)
+        {
+        cbErr =  KErrGeneral ;
+        }
+
+    if((GenericParam->Value()).AsTInt32() != KErrNone)
+        {
+        cbErr = (GenericParam->Value()).AsTInt32() ;
+        }
+
+    CActiveScheduler::Stop();
+
+    return 0 ;
+    }
+
+
+TInt EnableHighAccL(TInt aCallType,TBool aEnableAcc)
+    {
+    __UHEAP_MARK ;
+    cbErr = KErrNone;
+    RFile LogFile ;
+    RFs LogSession ;
+    TBuf8<50> data ;
+    TRealFormat format ;
+    CActiveScheduler *Scheduler  = CActiveScheduler :: Current() ;
+
+    if(!Scheduler)
+        {
+        Scheduler = new CActiveScheduler ;
+        }
+
+
+    CActiveScheduler :: Install(Scheduler) ;
+
+
+
+
+
+    _LIT(LogFileNameCancel , "C:\\cancelinvalid.txt") ;
+    /*
+      if(LogFile.Open(LogSession ,LogFileNameCancel , EFileWrite | EFileShareAny )  == KErrNotFound)
+      {
+          if(LogFile.Create(LogSession ,LogFileNameCancel , EFileWrite | EFileShareAny ) != KErrNone)
+          {
+              _LIT(KLog , "Failed to create  log file\n") ;
+
+              return KErrGeneral ;
+          }
+
+      }
+     */    
+    _LIT(KLog , "In CancelWithInvalidTransactionID\n") ;
+    data.Copy(KLog);
+    //  LogFile.Write(data) ;
+
+
+
+    CLiwServiceHandler* ServiceHandler = CLiwServiceHandler::NewL();
+
+    // Input and output parameter list
+    CLiwGenericParamList* inputlist = &(ServiceHandler->InParamListL());
+    CLiwGenericParamList* outputlist = &(ServiceHandler->OutParamListL());
+
+
+
+
+    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)
+        {
+
+        return KErrGeneral ;
+        }
+
+
+    _LIT8(KDataSource, "ILocation");
+
+    pos = 0 ;
+
+    const TLiwGenericParam *genericparm = outputlist->FindFirst(pos,KLocationInterface);
+
+    if(!genericparm)
+        {
+
+        return KErrGeneral ;
+        }
+
+    MLiwInterface* locinterface = (genericparm->Value()).AsInterface();
+
+    outputlist->Reset() ;
+    inputlist->Reset() ;
+    EnableHighAccClass* callBack = new(ELeave) EnableHighAccClass;
+
+    TBuf8<20>CmdBuf(KTraceLocation) ;
+
+    if(aCallType == 1)
+        {
+        TBuf8<20>CmdBuf1(KCmdGetLocation);
+        CmdBuf = CmdBuf1;
+        }
+
+
+
+
+    //Appending update options
+    /* CLiwMap* updateoptionMap = CLiwDefaultMap::NewL();
+
+          TInt32 updateInterval = 2;
+
+          updateoptionMap->InsertL(KUpdateOptionInterval,TLiwVariant(updateInterval));
+
+          TInt32 updateTimeOut = 3;
+          updateoptionMap->InsertL(KUpdateOptionTimeOut,TLiwVariant(updateTimeOut));
+
+          TInt32 updateMaxAge = 1;
+          updateoptionMap->InsertL(KUpdateOptionMaxAge,TLiwVariant(updateMaxAge));
+
+          TLiwGenericParam updateOption(KUpdateOptionMap,TLiwVariant(updateoptionMap));
+          inputlist->AppendL(updateOption) ;
+     */
+    _LIT8(KEnableHighAccuracy,"EnableHighAccuracy");
+
+    TLiwGenericParam EnableHighAcc(KEnableHighAccuracy,TLiwVariant(aEnableAcc));
+
+    inputlist->AppendL(EnableHighAcc);
+
+
+    locinterface->ExecuteCmdL(CmdBuf , *inputlist , *outputlist,KLiwOptASyncronous, callBack);
+
+    pos = 0 ;
+
+    const TLiwGenericParam *ErrorParm =  outputlist->FindFirst(pos ,KErrorCode ) ;
+
+    if(!ErrorParm)
+        {
+        return KErrGeneral ;
+        }
+
+    TInt reqerror = (ErrorParm->Value()).AsTInt32();
+
+    if(reqerror == KErrNone )     
+        CActiveScheduler::Start();
+
+
+
+    //const TLiwGenericParam *ErrorParm =  outputlist->FindFirst(pos ,KErrorCode ) ;
+    //delete updateoptionMap;
+    delete callBack;
+    locinterface->Close() ;
+    delete ServiceHandler ;
+    a.ResetAndDestroy() ;
+    a.Close() ;
+    delete Scheduler;
+
+
+    __UHEAP_MARKEND ;
+    return reqerror | cbErr ;
+
+
+
+    }
+
+
+TInt EnableHighAcc(TAny *aFlag)
+    {
+
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+    TInt  Val = KErrGeneral;
+    TInt *flag = static_cast<TInt *>(aFlag);
+    TInt err = 0;
+    //Install a new active scheduler to this thread
+
+    if(*flag == 1)
+        {
+        //GetLocation, EnablehighAcc is true
+        TRAP(err ,( Val = EnableHighAccL(1,true)) );
+        }
+
+    else if(*flag == 2)
+        {
+        //GetLocation, EnablehighAcc is false
+        TRAP(err ,( Val = EnableHighAccL(1,false)) );
+        }
+
+    else if(*flag == 3)
+        {
+        //Trace, EnablehighAcc is true
+        TRAP(err ,( Val = EnableHighAccL(2,true)) );
+        }
+
+    else if(*flag == 4)
+        {
+        //Trace, EnablehighAcc is false
+        TRAP(err ,( Val = EnableHighAccL(2,false)) );
+        }
+
+    delete cleanup ;
+
+
+    return Val | err;
+    }
+
+
+
+TInt EnableHighAcc_PosBased(TAny *aFlag)
+    {
+
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+    TInt  Val ;
+    TInt *flag = static_cast<TInt *>(aFlag);
+    TInt err;
+    //Install a new active scheduler to this thread
+
+    if(*flag == 1)
+        {
+        //GetLocation, Correct value for EnableAcc PosBased
+        TRAP(err ,( Val = EnableHighAcc_PosBasedL(1,true)) );
+        }
+
+    else if(*flag == 2)
+        {
+        //GetLocation, Wrong Type for enableAcc
+        TRAP(err ,( Val = EnableHighAcc_PosBasedL(1,false)) );
+        }
+
+    else if(*flag == 3)
+        {
+        //Trace , Correct type
+        TRAP(err ,( Val = EnableHighAcc_PosBasedL(2,true)) );
+        }
+
+    else if(*flag == 4)
+        {
+        //Trace, Wrong type
+        TRAP(err ,( Val = EnableHighAcc_PosBasedL(2,false)) );
+        }
+
+    delete cleanup ;
+
+    return Val | err;
+    }
+
+
+TInt EnableHighAcc_PosBasedL(TInt aCallType,TBool aEnableAcc)
+    {
+    __UHEAP_MARK ;
+    RFile LogFile ;
+    RFs LogSession ;
+    TBuf8<50> data ;
+    TRealFormat format ;
+    cbErr = KErrNone;
+    CActiveScheduler *Scheduler  = CActiveScheduler :: Current() ;
+
+    if(!Scheduler)
+        {
+        Scheduler = new CActiveScheduler ;
+        }
+
+
+    CActiveScheduler :: Install(Scheduler) ;
+
+
+
+
+
+    _LIT(LogFileNameCancel , "C:\\cancelinvalid.txt") ;
+
+    _LIT(KLog , "In CancelWithInvalidTransactionID\n") ;
+    data.Copy(KLog);
+    //  LogFile.Write(data) ;
+
+
+
+    CLiwServiceHandler* ServiceHandler = CLiwServiceHandler::NewL();
+
+    // Input and output parameter list
+    CLiwGenericParamList* inputlist = CLiwGenericParamList::NewL();
+    CLiwGenericParamList* outputlist = CLiwGenericParamList::NewL();
+
+
+
+
+    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)
+        {
+
+        return KErrGeneral ;
+        }
+
+
+    _LIT8(KDataSource, "ILocation");
+
+    pos = 0 ;
+
+    const TLiwGenericParam *genericparm = outputlist->FindFirst(pos,KLocationInterface);
+
+    if(!genericparm)
+        {
+
+        return KErrGeneral ;
+        }
+
+    MLiwInterface* locinterface = (genericparm->Value()).AsInterface();
+
+    outputlist->Reset() ;
+    inputlist->Reset() ;
+    EnableHighAccClass* callBack = new(ELeave) EnableHighAccClass;
+
+    TBuf8<20>CmdBuf(KTraceLocation) ;
+
+    if(aCallType == 1)
+        {
+        TBuf8<20>CmdBuf1(KCmdGetLocation);
+        CmdBuf = CmdBuf1;
+        }
+
+
+
+
+    _LIT(KClass,"GenericLocationInfo");
+    inputlist->AppendL( TLiwGenericParam( KNullDesC8,TLiwVariant( KClass )  ) );
+    CLiwMap* updatemap = CLiwDefaultMap::NewL();
+    updatemap->PushL();
+    _LIT8(KInterval,"UpdateInterval");
+    _LIT8(KTimeout,"UpdateTimeOut");
+    _LIT8(KAge,"UpdateMaxAge");
+    _LIT8(KPartial,"PartialUpdates");
+    const TInt KTime = 1000000;
+
+    updatemap->InsertL(KInterval , TLiwVariant(TInt32(2*KTime)));
+    updatemap->InsertL(KTimeout , TLiwVariant(TInt32(30*KTime)));
+    updatemap->InsertL(KAge , TLiwVariant(TInt32(0)));
+    updatemap->InsertL(KPartial , TLiwVariant(TBool(FALSE)));
+
+    inputlist->AppendL(TLiwGenericParam(KNullDesC8,TLiwVariant(updatemap)));
+    updatemap->DecRef();
+
+    if(aEnableAcc){
+    TLiwGenericParam EnableHighAcc(KNullDesC8,TLiwVariant(aEnableAcc));
+    inputlist->AppendL(EnableHighAcc);
+    }
+    else
+        {
+        TPtrC aEnableAcc1(_L("hi"));
+        TLiwGenericParam EnableHighAcc(KNullDesC8,TLiwVariant(aEnableAcc1));
+        inputlist->AppendL(EnableHighAcc);
+        }
+
+
+
+
+    locinterface->ExecuteCmdL(CmdBuf , *inputlist , *outputlist,KLiwOptASyncronous, callBack);
+
+    pos = 0 ;
+
+    const TLiwGenericParam *ErrorParm =  outputlist->FindFirst(pos ,KErrorCode ) ;
+
+    if(!ErrorParm)
+        {
+        return KErrGeneral ;
+        }
+
+    TInt reqerror = (ErrorParm->Value()).AsTInt32();
+
+    if(reqerror == KErrNone)
+        CActiveScheduler::Start();
+
+    if(reqerror == SErrBadArgumentType && !aEnableAcc)
+        reqerror = KErrNone;
+
+    pos = 0 ;
+    CleanupStack::PopAndDestroy(updatemap);
+    inputlist->Reset();
+    outputlist->Reset();
+    delete outputlist; 
+    
+    delete inputlist;
+    
+    delete callBack;
+    locinterface->Close() ;
+    
+    a.ResetAndDestroy() ;
+    a.Close() ;
+    delete Scheduler;
+    delete ServiceHandler ;
+    __UHEAP_MARKEND ;
+
+    return reqerror | cbErr;
+
+
+
+    }
+
+