--- 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
-