genericpositioningplugins/locationnpppsy/src/npppsystatushandler.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 23 Jun 2010 18:40:52 +0300
changeset 32 b12ea03c50a3
parent 0 667063e416a2
permissions -rw-r--r--
Revision: 201023 Kit: 2010125

/*
* 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 <e32std.h>            
#include <lbs/epos_mpositionerstatus.h>
#include <lbscommon.h>

#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