datasourcemodules/bluetoothgpspositioningmodule/btgpspsy/src/Utils/BTGPSModuleStatusHandler.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/datasourcemodules/bluetoothgpspositioningmodule/btgpspsy/src/Utils/BTGPSModuleStatusHandler.cpp Fri Jun 04 10:34:15 2010 +0100
@@ -0,0 +1,245 @@
+// Copyright (c) 2004-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:
+//
+
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <lbscommon.h>
+#include "BTGPSModuleStatusHandler.h"
+#include "BTGPSPsyConnectionManager.h"
+#include "BTGPSDeviceManager.h"
+#include "BTGPSRequestManager.h"
+#include "BTGPSFix.h"
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// CBTGPSModuleStatusHandler::NewL
+// -----------------------------------------------------------------------------
+CBTGPSModuleStatusHandler* CBTGPSModuleStatusHandler::NewL(
+ CBTGPSPsyConnectionManager& aPsyConnectionManager,
+ CBTGPSDeviceManager& aDeviceManager,
+ CBTGPSRequestManager& aRequestManager)
+ {
+ CBTGPSModuleStatusHandler* self = new (ELeave) CBTGPSModuleStatusHandler(
+ aPsyConnectionManager,
+ aDeviceManager,
+ aRequestManager);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CBTGPSModuleStatusHandler::~CBTGPSModuleStatusHandler
+// -----------------------------------------------------------------------------
+CBTGPSModuleStatusHandler::~CBTGPSModuleStatusHandler()
+ {
+ iPsyConnectionManager.RemoveListener(*this);
+ iRequestManager.RemoveListener(*this);
+ iDeviceManager.RemoveListener(*this);
+ }
+
+// -----------------------------------------------------------------------------
+// CBTGPSModuleStatusHandler::ConstructL
+// -----------------------------------------------------------------------------
+void CBTGPSModuleStatusHandler::ConstructL()
+ {
+ iDeviceManager.AddListenerL(*this);
+ iRequestManager.AddListenerL(*this);
+ iPsyConnectionManager.AddListenerL(*this);
+
+ //Set moudle status to not found
+ iModuleStatus.SetDataQualityStatus(TPositionModuleStatus::EDataQualityLoss);
+ iModuleStatus.SetDeviceStatus(TPositionModuleStatus::EDeviceUnknown);
+ }
+
+// -----------------------------------------------------------------------------
+// CBTGPSModuleStatusHandler::CBTGPSModuleStatusHandler
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CBTGPSModuleStatusHandler::CBTGPSModuleStatusHandler(
+ CBTGPSPsyConnectionManager& aPsyConnectionManager,
+ CBTGPSDeviceManager& aDeviceManager,
+ CBTGPSRequestManager& aRequestManager)
+ : iPsyConnectionManager(aPsyConnectionManager),
+ iDeviceManager(aDeviceManager),
+ iRequestManager(aRequestManager)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBTGPSModuleStatusHandler::HandlePsyConnectionChange
+// -----------------------------------------------------------------------------
+void CBTGPSModuleStatusHandler::HandlePsyConnectionChange()
+ {
+ TPositionModuleStatus::TDeviceStatus deviceStatus = GetDeviceStatus();
+ if(deviceStatus!=iModuleStatus.DeviceStatus())
+ {
+ iModuleStatus.SetDeviceStatus(deviceStatus);
+ iPsyConnectionManager.ReportStatus(iModuleStatus);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBTGPSModuleStatusHandler::BTDeviceStatusChanged
+// -----------------------------------------------------------------------------
+void CBTGPSModuleStatusHandler::BTDeviceStatusChanged(
+ TInt aConnectStatus,
+ TInt aDeviceType,
+ TInt /*aErr*/)
+ {
+ //Check if device initialising procedure is completed
+ if(!iInitialized &&
+ (aDeviceType == EBTDeviceTypeNonNokGps || aDeviceType == EBTDeviceTypeNokGps))
+ {
+ iInitialized = ETrue;
+ }
+
+ //Check device status
+ TPositionModuleStatus::TDeviceStatus deviceStatus = GetDeviceStatus();
+
+ //Check data quality
+ TPositionModuleStatus::TDataQualityStatus dataQualityStatus =
+ iModuleStatus.DataQualityStatus();
+
+ if(!(aConnectStatus == EBTDeviceConnected &&
+ aDeviceType == EBTDeviceTypeNonNokGps || aDeviceType == EBTDeviceTypeNokGps))
+ {
+ dataQualityStatus =TPositionModuleStatus::EDataQualityLoss;
+ }
+
+ if(dataQualityStatus != iModuleStatus.DataQualityStatus() ||
+ deviceStatus != iModuleStatus.DeviceStatus())
+ {
+ iModuleStatus.SetDataQualityStatus(dataQualityStatus);
+ iModuleStatus.SetDeviceStatus(deviceStatus);
+ iPsyConnectionManager.ReportStatus(iModuleStatus);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBTGPSModuleStatusHandler::HandleLocationFixUpdate
+// -----------------------------------------------------------------------------
+void CBTGPSModuleStatusHandler::HandleLocationFixUpdate(
+ const CBTGPSFix& aFix)
+ {
+ if(!aFix.IfFullNmeaPatternReceived())
+ {
+ //if not full nmea pattern received, then not update data quality change
+ return;
+ }
+
+ TPositionModuleStatus::TDataQualityStatus dataQualityStatus
+ = TPositionModuleStatus::EDataQualityLoss;
+ switch(aFix.FixState())
+ {
+ case CBTGPSFix::EFixValid2D:
+ dataQualityStatus = TPositionModuleStatus::EDataQualityPartial;
+ break;
+ case CBTGPSFix::EFixValid3D:
+ dataQualityStatus = TPositionModuleStatus::EDataQualityNormal;
+ break;
+ case CBTGPSFix::EFixNotValid:
+ dataQualityStatus = TPositionModuleStatus::EDataQualityLoss;
+ break;
+ case CBTGPSFix::EFixValidityUnkown:
+ default:
+ //do nithing
+ break;
+ }
+ if(dataQualityStatus != iModuleStatus.DataQualityStatus())
+ {
+ iModuleStatus.SetDataQualityStatus(dataQualityStatus);
+ iPsyConnectionManager.ReportStatus(iModuleStatus);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBTGPSModuleStatusHandler::GetDeviceStatus
+// -----------------------------------------------------------------------------
+TPositionModuleStatus::TDeviceStatus CBTGPSModuleStatusHandler::GetDeviceStatus()
+ {
+ TPositionModuleStatus::TDeviceStatus deviceStatus =
+ TPositionModuleStatus::EDeviceUnknown;
+ TInt connectStatus = iDeviceManager.DeviceConnectStatus();
+ TInt deviceType = iDeviceManager.DeviceType();
+
+ if(!iInitialized)
+ {
+ if(connectStatus == EBTDeviceConnectError)
+ {
+ //in error case, this will not change
+ //device status.
+ deviceStatus = TPositionModuleStatus::EDeviceError;
+ }
+ else
+ {
+ deviceStatus = TPositionModuleStatus::EDeviceInitialising;
+ }
+ }
+ else
+ {
+ switch (connectStatus)
+ {
+ case EBTDeviceDisconnected:
+ case EBTDeviceConnecting:
+ case EBTDeviceConnectError:
+ deviceStatus = TPositionModuleStatus::EDeviceStandBy;
+ break;
+ case EBTDeviceConnected:
+ if(iPsyConnectionManager.LocationRequestCount()>0 ||
+ iPsyConnectionManager.TrackingSessionCount()>0)
+ {
+ deviceStatus = TPositionModuleStatus::EDeviceActive;
+ }
+ else
+ {
+ deviceStatus = TPositionModuleStatus::EDeviceReady;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ return deviceStatus;
+ }
+
+// End of File
+
+
+