locationmanager/locationtrail/src/cpositioninfo.cpp
branchRCL_3
changeset 63 e538444823de
parent 47 b73252188534
--- a/locationmanager/locationtrail/src/cpositioninfo.cpp	Wed Sep 15 12:40:59 2010 +0300
+++ b/locationmanager/locationtrail/src/cpositioninfo.cpp	Wed Oct 13 15:02:02 2010 +0300
@@ -43,8 +43,7 @@
 //  
 CPositionInfo::CPositionInfo( MPositionInfoObserver* aTrail ) 
     : CActive( CActive::EPriorityStandard ),
-    iState( EPositionOptStateNone ),
-    iConnectedPositionServer(EFalse)
+    iFirstInterval( ETrue )
     {
     LOG( "CPositionInfo::CPositionInfo()");
     CActiveScheduler::Add( this );
@@ -76,7 +75,9 @@
 //    
 EXPORT_C CPositionInfo::~CPositionInfo()
     {
-    Stop();
+    Cancel();
+    iPositioner.Close();
+    iPosServer.Close();
     }
 
 // --------------------------------------------------------------------------
@@ -95,41 +96,34 @@
 void CPositionInfo::StartL( RLocationTrail::TTrailCaptureSetting aCaptureSetting, TInt aUpdateInterval )
     {
     LOG( "CPositionInfo::StartL(), begin" );
-    if(IsActive()) 
-        {
-        Cancel();
-        }
+
     iTrailCaptureSetting = aCaptureSetting;
     iUpdateInterval = aUpdateInterval;
-    iState = EPositionOptStateNone;
+    iFirstInterval = ETrue;
+    iPositionInfo = TPositionSatelliteInfo();
     
-    iPositionInfo = TPositionSatelliteInfo();
+    // Set update interval.
+     iUpdateOptions.SetUpdateInterval( TTimeIntervalMicroSeconds(KFirstInterval) );
+     // Set time out level. 
+     iUpdateOptions.SetUpdateTimeOut( TTimeIntervalMicroSeconds( KFirstTimeOut) );
+     // Positions which have time stamp below KMaxAge can be reused
+     iUpdateOptions.SetMaxUpdateAge( TTimeIntervalMicroSeconds(KMaxAge) );
+     // Disables location framework to send partial position data
+     iUpdateOptions.SetAcceptPartialUpdates( EFalse );
     
     if ( aCaptureSetting == RLocationTrail::ECaptureAll ) 
     	{
-    	if(!iConnectedPositionServer)
-            {   
-             // Positions which have time stamp below KMaxAge can be reused
-             iUpdateOptions.SetMaxUpdateAge( TTimeIntervalMicroSeconds(KMaxAge) );
-             // Disables location framework to send partial position data
-             iUpdateOptions.SetAcceptPartialUpdates( EFalse );
-    	    User::LeaveIfError( iPosServer.Connect() );
-            CleanupClosePushL(iPosServer);
-    	    User::LeaveIfError( iPositioner.Open( iPosServer ) );
-            CleanupClosePushL(iPositioner);
-    	    User::LeaveIfError( iPositioner.SetRequestor( CRequestor::ERequestorService,
-    	                        CRequestor::EFormatApplication, KRequestor ) );
-            iUpdateOptions.SetUpdateInterval( TTimeIntervalMicroSeconds (iUpdateInterval) );  
-            iUpdateOptions.SetUpdateTimeOut( TTimeIntervalMicroSeconds(KUpdateTimeOut ) );
-            User::LeaveIfError( iPositioner.SetUpdateOptions( iUpdateOptions ) );
-            CleanupStack::Pop(2); // iPositioner, iPosServer
-            iConnectedPositionServer = ETrue;
-           }
-        iState = EPositionOptStateGetLastKnownPosition;
-        iPositioner.GetLastKnownPosition( iPositionInfo, iStatus );
-        SetActive();
+	    User::LeaveIfError( iPosServer.Connect() );
+	    User::LeaveIfError( iPositioner.Open( iPosServer ) );
+	    User::LeaveIfError( iPositioner.SetRequestor( CRequestor::ERequestorService,
+	                        CRequestor::EFormatApplication, KRequestor ) );
+	    User::LeaveIfError( iPositioner.SetUpdateOptions( iUpdateOptions ) );
+	    iPositioner.NotifyPositionUpdate( iPositionInfo, iStatus );
     	}
-    else if ( aCaptureSetting == RLocationTrail::ECaptureNetworkInfo ) 
+    
+    SetActive();
+    
+    if ( aCaptureSetting == RLocationTrail::ECaptureNetworkInfo ) 
     	{
     	TRequestStatus* status = &iStatus;
         User::RequestComplete( status, KErrNone );
@@ -144,25 +138,19 @@
 //
 void CPositionInfo::NextPosition()
     {
-    LOG( "CPositionInfo::NextPosition(), begin" );
-    if(!IsActive() && iConnectedPositionServer)
-        {
-        LOG("Not active");
-        iPositionInfo = TPositionSatelliteInfo(); // Clear position info.
-        if ( iTrailCaptureSetting == RLocationTrail::ECaptureAll )
-        	{
-            iState = EPositionOptStateNotifyUpdate;
-        	iPositioner.NotifyPositionUpdate( iPositionInfo, iStatus );
-            SetActive();
-        	}
-        else if ( iTrailCaptureSetting == RLocationTrail::ECaptureNetworkInfo ) 
-        	{
-            SetActive();
-        	TRequestStatus* status = &iStatus;
-            User::RequestComplete( status, KErrNone );
-        	}
-        }
-    LOG( "CPositionInfo::NextPosition(), end" );
+    iPositionInfo = TPositionSatelliteInfo(); // Clear position info.
+    if ( iTrailCaptureSetting == RLocationTrail::ECaptureAll )
+    	{
+    	iPositioner.NotifyPositionUpdate( iPositionInfo, iStatus );
+    	}
+    
+    SetActive();
+    
+    if ( iTrailCaptureSetting == RLocationTrail::ECaptureNetworkInfo ) 
+    	{
+    	TRequestStatus* status = &iStatus;
+        User::RequestComplete( status, KErrNone );
+    	}
     }
     
 // --------------------------------------------------------------------------
@@ -171,17 +159,10 @@
 //
 void CPositionInfo::Stop()
     {
-    LOG( "CPositionInfo::Stop(), begin" );
     Cancel();    
-    if(iConnectedPositionServer)
-        {
-        iPositioner.Close();
-        iPosServer.Close();
-        iConnectedPositionServer = EFalse;
-        }
-    // reset the state
-    iState = EPositionOptStateNone;
-    LOG( "CPositionInfo::Stop(), end" );
+
+    iPositioner.Close();
+    iPosServer.Close();
     }    
         
 // --------------------------------------------------------------------------
@@ -190,39 +171,22 @@
 //
 void CPositionInfo::RunL()
     { 
-    LOG( "CPositionInfo::RunL(), begin" );
-    if(iState == EPositionOptStateGetLastKnownPosition)
-        {
-        // get last location.. check the time and if it's within the limit, pass to trail.
-        const TTimeIntervalSeconds KMaxAllowedLastKnownPosition(60*5); // 5 mins
-        TTimeIntervalSeconds interval;
-        TTime now;
-        TPosition lastPosition;
-        iPositionInfo.GetPosition(lastPosition);
-        now.UniversalTime();
-        now.SecondsFrom(lastPosition.Time(), interval);
-        if(iStatus.Int() == KErrNone && interval < KMaxAllowedLastKnownPosition)
-            {
-            LOG("Last know position is recent one");
-            iTrail->Position( iPositionInfo, iStatus.Int() );
-            }
-        else
-            {
-            LOG("Old last know position. Drop it..");
-            }
-        }
-    else
-        {
-        // notify response.. always pass to trail
-        iTrail->Position( iPositionInfo, iStatus.Int() );
-        }
-     
-    if ( iTrailCaptureSetting == RLocationTrail::ECaptureAll &&
-        iState != EPositionOptStateNone) 
+    iTrail->Position( iPositionInfo, iStatus.Int() );
+ 
+    if ( iFirstInterval && IsActive() )
     	{
-    	NextPosition();
+    	Cancel();
+    	LOG("CPositionInfo::RunL() - First Time");
+    	iUpdateOptions.SetUpdateInterval( TTimeIntervalMicroSeconds (iUpdateInterval) );  
+    	iUpdateOptions.SetUpdateTimeOut( TTimeIntervalMicroSeconds(KUpdateTimeOut ) );
+        if ( iTrailCaptureSetting == RLocationTrail::ECaptureAll ) 
+        	{
+        	User::LeaveIfError( iPositioner.SetUpdateOptions( iUpdateOptions ) );        	
+        	iPositioner.NotifyPositionUpdate( iPositionInfo, iStatus );
+        	}
+    	SetActive();
+    	iFirstInterval = EFalse;
     	}
-    LOG( "CPositionInfo::RunL(), end" );
     }    
 
 // --------------------------------------------------------------------------
@@ -231,37 +195,11 @@
 // 
 void CPositionInfo::DoCancel()
     {
-    LOG( "CPositionInfo::DoCancel(), begin" );
-    switch(iState)
+    LOG( "CPositionInfo::DoCancel()" );
+    if ( IsActive() )    
         {
-        case EPositionOptStateGetLastKnownPosition:
-            {
-            iPositioner.CancelRequest( EPositionerGetLastKnownPosition );
-            break;
-            }
-        case EPositionOptStateNotifyUpdate:
-            {
-            iPositioner.CancelRequest( EPositionerNotifyPositionUpdate );
-            break;
-            }
-        default:
-            break;
+        iPositioner.CancelRequest( EPositionerNotifyPositionUpdate );
         }
-	iState = EPositionOptStateNone;
-    LOG( "CPositionInfo::DoCancel(), end" );
-    }
-
-
-// --------------------------------------------------------------------------
-// CPositionInfo::HandleRemapComplete
-// --------------------------------------------------------------------------
-// 
-void CPositionInfo::HandleRemapComplete()
-    {
-    LOG( "CPositionInfo::HandleRemapComplete()" );
-    // Don't call notify update from RunL
-    iState = EPositionOptStateNone;
     }
 
 // End of file
-