--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationmanager/locationtrail/src/cpositioninfo.cpp Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,191 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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: A class for getting network cell id.
+*
+*/
+
+#include <etel3rdparty.h>
+
+#include "rlocationtrail.h"
+#include "cpositioninfo.h"
+#include "locationtraildefs.h"
+#include "locationmanagerdebug.h"
+
+// --------------------------------------------------------------------------
+// CPositionInfo::NewL
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPositionInfo* CPositionInfo::NewL( MPositionInfoObserver* aTrail )
+ {
+ LOG( "CPositionInfo::NewL(), begin" );
+ CPositionInfo* self = new (ELeave) CPositionInfo( aTrail );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ LOG( "CPositionInfo::NewL(), end" );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CPositionInfo::CPositionInfo
+// --------------------------------------------------------------------------
+//
+CPositionInfo::CPositionInfo( MPositionInfoObserver* aTrail )
+ : CActive( CActive::EPriorityStandard ),
+ iFirstInterval( ETrue )
+ {
+ CActiveScheduler::Add( this );
+ iTrail = aTrail;
+ iTrailCaptureSetting = RLocationTrail::ECaptureAll;
+
+ // Set update interval.
+ iUpdateOptions.SetUpdateInterval( TTimeIntervalMicroSeconds(KFirstInterval) );
+ // Set time out level.
+ iUpdateOptions.SetUpdateTimeOut( TTimeIntervalMicroSeconds(KUpdateTimeOut) );
+ // 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 );
+ }
+
+// --------------------------------------------------------------------------
+// CPositionInfo::ConstructL
+// --------------------------------------------------------------------------
+//
+void CPositionInfo::ConstructL()
+ {
+
+ }
+
+// --------------------------------------------------------------------------
+// CPositionInfo::~CPositionInfo
+// --------------------------------------------------------------------------
+//
+CPositionInfo::~CPositionInfo()
+ {
+ Cancel();
+ iPositioner.Close();
+ iPosServer.Close();
+ }
+
+// --------------------------------------------------------------------------
+// CPositionInfo::RunError
+// --------------------------------------------------------------------------
+//
+TInt CPositionInfo::RunError( TInt /*aError*/ )
+ {
+ return KErrNone;
+ }
+
+// --------------------------------------------------------------------------
+// CPositionInfo::GetCellId
+// --------------------------------------------------------------------------
+//
+void CPositionInfo::StartL( RLocationTrail::TTrailCaptureSetting aCaptureSetting, TInt aUpdateInterval )
+ {
+ LOG( "CPositionInfo::StartL(), begin" );
+
+ iTrailCaptureSetting = aCaptureSetting;
+ iUpdateInterval = aUpdateInterval;
+
+ if ( aCaptureSetting == RLocationTrail::ECaptureAll )
+ {
+ 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 );
+ }
+
+ SetActive();
+
+ if ( aCaptureSetting == RLocationTrail::ECaptureNetworkInfo )
+ {
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+ }
+
+ LOG( "CPositionInfo::StartL(), end" );
+ }
+
+// --------------------------------------------------------------------------
+// CPositionInfo::NextPosition
+// --------------------------------------------------------------------------
+//
+void CPositionInfo::NextPosition()
+ {
+ 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 );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPositionInfo::Stop
+// --------------------------------------------------------------------------
+//
+void CPositionInfo::Stop()
+ {
+ Cancel();
+
+ // Start shutdown timer...
+ iPositioner.Close();
+ iPosServer.Close();
+ }
+
+// --------------------------------------------------------------------------
+// CPositionInfo::RunL
+// --------------------------------------------------------------------------
+//
+void CPositionInfo::RunL()
+ {
+ iTrail->Position( iPositionInfo, iStatus.Int() );
+ if ( iFirstInterval && IsActive() )
+ {
+ Cancel();
+ iUpdateOptions.SetUpdateInterval( iUpdateInterval );
+ if ( iTrailCaptureSetting == RLocationTrail::ECaptureAll )
+ {
+ User::LeaveIfError( iPositioner.SetUpdateOptions( iUpdateOptions ) );
+ iPositioner.NotifyPositionUpdate( iPositionInfo, iStatus );
+ }
+ SetActive();
+
+ iFirstInterval = EFalse;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPositionInfo::DoCancel
+// --------------------------------------------------------------------------
+//
+void CPositionInfo::DoCancel()
+ {
+ if ( !IsActive() )
+ {
+ iPositioner.CancelRequest( EPositionerNotifyPositionUpdate );
+ }
+ }
+
+// End of file