diff -r 000000000000 -r 667063e416a2 genericpositioningplugins/locationnpppsy/src/npppsystatushandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericpositioningplugins/locationnpppsy/src/npppsystatushandler.cpp Tue Feb 02 01:06:48 2010 +0200 @@ -0,0 +1,174 @@ +/* +* Copyright (c) 2006 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: This is NPP PSY Positioning Plug-in ( PSY ). +* +*/ + + + +// INCLUDE FILES +#include +#include +#include + +#include "npppsystatushandler.h" +#include "npppsysingletonhandler.h" +#include "npppsylogging.h" +#include "npppsypanic.h" +#include "npppsy.hrh" + + +// ========================== == MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CNppPsyStatusHandler::CNppPsyStatusHandler +// C++default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CNppPsyStatusHandler::CNppPsyStatusHandler( MPositionerStatus& aStatusInterface ) + : iStatusInterface( aStatusInterface ) + { + //Set to initialising + iModuleStatus.SetDeviceStatus( TPositionModuleStatus::EDeviceInitialising ); + iModuleStatus.SetDataQualityStatus( TPositionModuleStatus::EDataQualityNormal ); + iStatusInterface.ReportStatus( iModuleStatus ); + } + + +// ----------------------------------------------------------------------------- +// CNppPsyStatusHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CNppPsyStatusHandler::ConstructL() + { + TRACESTRING( "CNppPsyStatusHandler::ConstructL start" ) + + //Set to ready + iModuleStatus.SetDeviceStatus( TPositionModuleStatus::EDeviceReady ); + iStatusInterface.ReportStatus( iModuleStatus ); + + TRACESTRING( "CNppPsyStatusHandler::ConstructL end" ) + } + + +// ----------------------------------------------------------------------------- +// CNppPsyStatusHandler::NewL +// ----------------------------------------------------------------------------- +// +CNppPsyStatusHandler* CNppPsyStatusHandler::NewL( + MPositionerStatus& aStatusInterface ) + { + CNppPsyStatusHandler* self = new( ELeave ) CNppPsyStatusHandler( + aStatusInterface ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + + +// ----------------------------------------------------------------------------- +// CNppPsyStatusHandler::~CNppPsyStatusHandler +// ----------------------------------------------------------------------------- +// +CNppPsyStatusHandler::~CNppPsyStatusHandler() + { + //Set as inactive and data quality unknown + iModuleStatus.SetDeviceStatus( TPositionModuleStatus::EDeviceInactive ); + iModuleStatus.SetDataQualityStatus( + TPositionModuleStatus::EDataQualityUnknown ); + iStatusInterface.ReportStatus( iModuleStatus ); + + TRACESTRING( "CNppPsyStatusHandler:: destructed" ) + } + +// ----------------------------------------------------------------------------- +// CNppPsyStatusHandler::SetPsyListStatus +// ----------------------------------------------------------------------------- +// +void CNppPsyStatusHandler::SetPsyListStatus( TBool aHealthy ) + { + if ( aHealthy && iModuleStatus.DeviceStatus() == + TPositionModuleStatus::EDeviceError ) + { + if ( iRequests > 0 ) + { + iModuleStatus.SetDeviceStatus( + TPositionModuleStatus::EDeviceActive ); + } + else + { + iModuleStatus.SetDeviceStatus( + TPositionModuleStatus::EDeviceReady ); + } + iStatusInterface.ReportStatus( iModuleStatus ); + } + + if ( !aHealthy && iModuleStatus.DeviceStatus() != + TPositionModuleStatus::EDeviceError ) + { + iModuleStatus.SetDeviceStatus( TPositionModuleStatus::EDeviceError ); + iStatusInterface.ReportStatus( iModuleStatus ); + } + } + +// ----------------------------------------------------------------------------- +// CNppPsyStatusHandler::IncRequestCount +// ----------------------------------------------------------------------------- +// +void CNppPsyStatusHandler::IncRequestCount() + { + ++iRequests; + UpdateStatus(); + } + +// ----------------------------------------------------------------------------- +// CNppPsyStatusHandler::DecRequestCount +// ----------------------------------------------------------------------------- +// +void CNppPsyStatusHandler::DecRequestCount() + { + if ( iRequests > 0 ) + { + --iRequests; + } + UpdateStatus(); + } + +// ----------------------------------------------------------------------------- +// CNppPsyStatusHandler::UpdateStatus +// ----------------------------------------------------------------------------- +// +void CNppPsyStatusHandler::UpdateStatus() + { + if ( iRequests > 0 && iModuleStatus.DeviceStatus() == + TPositionModuleStatus::EDeviceReady ) + { + iModuleStatus.SetDeviceStatus( TPositionModuleStatus::EDeviceActive ); + iStatusInterface.ReportStatus( iModuleStatus ); + } + + if ( iRequests <= 0 && iModuleStatus.DeviceStatus() == + TPositionModuleStatus::EDeviceActive ) + { + iModuleStatus.SetDeviceStatus( TPositionModuleStatus::EDeviceReady ); + iStatusInterface.ReportStatus( iModuleStatus ); + } + } + +// End of File