--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationmgmt/networklocationmgr/src/lbsnetlocmanlogic.cpp Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,216 @@
+// 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:
+// Includes
+// System
+//
+//
+
+#include <e32cons.h>
+
+// Lbs
+#include "lbsdevloggermacros.h"
+
+// Component
+#include "lbsnetlocmanlogic.h"
+
+
+//****************************************************************
+// Class CNetLocManLogic
+//****************************************************************
+/** Static constructor.
+@released
+@internalComponent
+*/
+CNetLocManLogic* CNetLocManLogic::NewL()
+ {
+
+
+ CNetLocManLogic* self = new(ELeave) CNetLocManLogic;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+
+ CleanupStack::Pop(self);
+ return self;
+ };
+
+
+/** Constructor.
+@released
+@internalComponent
+*/
+CNetLocManLogic::CNetLocManLogic()
+ {
+ }
+
+
+/** Second phase constructor.
+@released
+@internalComponent
+*/
+void CNetLocManLogic::ConstructL()
+ {
+
+
+ iCurrentId.SetSessionOwner(KLbsNetLocManagerUid);
+ iCurrentId.SetSessionNum(0);
+
+ // create the monitor to handle the close down request signal from root process
+ iCloseDownRequestDetector = CLbsCloseDownRequestDetector::NewL(this, KLbsNetLocManagerUid);
+
+ // open the property for position update and module status
+ iPositionUpdates.OpenL(KLbsNetLocManagerUid);
+
+ // Set the initial device status, network location manager can only be EDeviceReady or EDeviceActive
+ iModuleStatus.OpenL(KLbsNetLocManagerUid);
+ iPreviousReportedModuleStatus.SetDeviceStatus(TPositionModuleStatus::EDeviceReady);
+ iPreviousReportedModuleStatus.SetDataQualityStatus(TPositionModuleStatus::EDataQualityNormal);
+ TPositionModuleStatusEventBase::TModuleEvent occurredEventsSinceLastSet =
+ TPositionModuleStatusEventBase::EEventDeviceStatus | TPositionModuleStatusEventBase::EEventDataQualityStatus;
+ iModuleStatus.SetModuleStatus(&iPreviousReportedModuleStatus,sizeof(iPreviousReportedModuleStatus),occurredEventsSinceLastSet);
+
+ const RLbsPositionUpdateRequests::TChannelIdentifer KChannelIdentifierLS =
+ {
+ {KLbsNetLocManagerUidValue},{KLbsLocServerUidValue}
+ };
+
+ // create netloc request handler and start the active object
+ iLocSvrLocationRequestHandler = CNetLocManRequestHandler::NewL(KChannelIdentifierLS, *this);
+ iLocSvrLocationRequestHandler->StartGettingRequests();
+
+ // create netloc response handler and start the active object
+ iNetLocationResponseHandler = CNetLocManResponseHandler::NewL(*this);
+ iNetLocationResponseHandler->StartGettingRequests();
+ }
+
+
+/** Destructor.
+@released
+@internalComponent
+*/
+CNetLocManLogic::~CNetLocManLogic()
+ {
+
+ delete iNetLocationResponseHandler;
+ iNetLocationResponseHandler = NULL;
+
+ delete iLocSvrLocationRequestHandler;
+ iLocSvrLocationRequestHandler = NULL;
+
+ delete iCloseDownRequestDetector;
+ iCloseDownRequestDetector = NULL;
+ }
+
+
+
+/** Process version
+@released
+@internalComponent
+*/
+TVersion CNetLocManLogic::Version()
+ {
+ return TVersion(1,0,0);
+ }
+
+
+/** Retrieve the current session id for the component
+@param aSessionId A session id to return current id through
+@released
+@internalComponent
+*/
+void CNetLocManLogic::GetSessionId(TLbsNetSessionIdInt& aSessionId)
+ {
+ aSessionId = iCurrentId;
+ }
+
+
+/** Increment the current session
+@released
+@internalComponent
+*/
+void CNetLocManLogic::IncrementSessionId()
+ {
+ iCurrentId.IncrSession();
+ }
+
+
+/** Publish a position on the position request bus
+This function is called from the response handler when it has
+received a response from the NetworkGateway. If aStatus is different
+from KErrNone an error has ocurred and the NetworkGateway has not
+a valid position to the response handler and the information passed
+in the other parameters is therefore disregarded. In any other case
+the position info received is published.
+@param aStatus An errorcode
+@param aPosInfoArray A position array
+@param aTargetTime The position target time
+@see CNetLocManResponseHandler::RunL
+@released
+@internalComponent
+*/
+void CNetLocManLogic::UpdateLocation(TInt aStatus, TPositionInfoBase& aPosition,
+ const TTime& aTargetTime)
+ {
+ // Module Id and update type
+ TPositionModuleId id = {KLbsNetLocManagerUidValue};
+ TPositionModuleInfo::TTechnologyType type = TPositionModuleInfo::ETechnologyNetwork;
+
+ aPosition.SetModuleId(id);
+ aPosition.SetUpdateType(EPositionUpdateGeneral);
+ aPosition.SetPositionMode(type);
+ aPosition.SetPositionModeReason(EPositionModeReasonNone);
+
+ TInt size = aPosition.PositionClassSize();
+ if ((aStatus == KErrServerBusy) || (aStatus == KErrPositionHighPriorityReceive))
+ {
+ iPositionUpdates.SetPositionInfo(aStatus, ETrue, &aPosition,size,0, 0);
+ }
+ else if (aStatus != KErrNone)
+ {
+ iPositionUpdates.SetPositionInfo(aStatus, EFalse, &aPosition,size,0, 0);
+ }
+
+ else
+ {
+ TTime timeNow;
+ timeNow.UniversalTime();
+
+ // always publish new update regardless
+ TInt size = aPosition.PositionClassSize();
+ iPositionUpdates.SetPositionInfo(aStatus, EFalse, &aPosition,size,aTargetTime, timeNow);
+ }
+ // Request has been dealt with... We can say we're 'ready' again.
+ UpdateDeviceStatus(TPositionModuleStatus::EDeviceReady);
+ }
+
+
+/** Process close down callback
+@see MLbsCloseDownObserver
+@released
+@internalComponent
+*/
+void CNetLocManLogic::OnProcessCloseDown()
+ {
+ iLocSvrLocationRequestHandler->Cancel();
+ iNetLocationResponseHandler->Cancel();
+ CActiveScheduler::Stop();
+ }
+
+void CNetLocManLogic::UpdateDeviceStatus(TPositionModuleStatus::TDeviceStatus aDeviceStatus)
+ {
+ iPreviousReportedModuleStatus.SetDeviceStatus(aDeviceStatus);
+ TPositionModuleStatusEventBase::TModuleEvent occurredEventsSinceLastSet =
+ TPositionModuleStatusEventBase::EEventDeviceStatus;
+ iModuleStatus.SetModuleStatus(&iPreviousReportedModuleStatus,sizeof(TPositionModuleStatus),occurredEventsSinceLastSet);
+ }
+