satengine/SatServer/SystemState/src/CSatPSChangeNotifier.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 14 Sep 2010 22:26:11 +0300
branchRCL_3
changeset 21 0a6dd2dc9970
parent 0 ff3b6d0fd310
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* Copyright (c) 2002-2007 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:  Notifies the changes in publish and suscripe properties.
*
*/



// INCLUDE FILES
#include    "CSatPSChangeNotifier.h"
#include    "MSatSystemStateObserver.h"
#include    "Panic.h"
#include    "SatLog.h"

// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CSatPSChangeNotifier::CSatPSChangeNotifier
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CSatPSChangeNotifier::CSatPSChangeNotifier(
    const TUid& aPropertyKey,
    TUint aPropertyValue,
    MSatSystemStateObserver& aObserver,
    TInt aNotifyValue ) :
    CActive( EPriorityStandard ),
    iObserver( aObserver ),
    iPSKey( aPropertyKey ),
    iPSValue( aPropertyValue ),
    iNotifyValue( aNotifyValue )
    {
    LOG( SIMPLE,
        "SATSYSTEMSTATE: CSatPSChangeNotifier::CSatPSChangeNotifier calling" )
    // Log parameters
    LOG2( NORMAL,
        "SATSYSTEMSTATE: CSatPSChangeNotifier::CSatPSChangeNotifier PS Uid: %d",
        aPropertyKey )
    LOG2( NORMAL,
        "SATSYSTEMSTATE: CSatPSChangeNotifier::CSatPSChangeNotifier PS Key: %d",
        aPropertyValue )
    LOG2( NORMAL,
        "SATSYSTEMSTATE: CSatPSChangeNotifier::CSatPSChangeNotifier Needed \
        value: %d ", aNotifyValue )

    CActiveScheduler::Add( this );

    LOG( SIMPLE,
        "SATSYSTEMSTATE: CSatPSChangeNotifier::CSatPSChangeNotifier exiting" )
    }

// -----------------------------------------------------------------------------
// CSatPSChangeNotifier::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CSatPSChangeNotifier* CSatPSChangeNotifier::NewL(
    const TUid& aPropertyKey,
    TUint aPropertyValue,
    MSatSystemStateObserver& aObserver,
    TInt aNotifyValue )
    {
    LOG( SIMPLE, "SATSYSTEMSTATE: CSatPSChangeNotifier::NewL calling" )

    CSatPSChangeNotifier* self =
        new( ELeave ) CSatPSChangeNotifier(
            aPropertyKey, aPropertyValue, aObserver, aNotifyValue );

    LOG( SIMPLE, "SATSYSTEMSTATE: CSatPSChangeNotifier::NewL exiting" )
    return self;
    }


// Destructor
CSatPSChangeNotifier::~CSatPSChangeNotifier()
    {
    LOG( SIMPLE,
        "SATSYSTEMSTATE: CSatPSChangeNotifier::~CSatPSChangeNotifier calling" )

    Cancel();
    iPSClient.Close();

    LOG( SIMPLE,
        "SATSYSTEMSTATE: CSatPSChangeNotifier::~CSatPSChangeNotifier exiting" )
    }

// -----------------------------------------------------------------------------
// CSatPSChangeNotifier::NotifyChangeL
// Issues notification request.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CSatPSChangeNotifier::NotifyChangeL()
    {
    LOG( SIMPLE, "SATSYSTEMSTATE: CSatPSChangeNotifier::NotifyChangeL calling" )

    __ASSERT_ALWAYS( !IsActive(), Panic( ESatSystemStateAllReadyActive ) );
    User::LeaveIfError( iPSClient.Attach( iPSKey, iPSValue ) );
    Activate();

    LOG( SIMPLE, "SATSYSTEMSTATE: CSatPSChangeNotifier::NotifyChangeL exiting" )
    }

// -----------------------------------------------------------------------------
// CSatPSChangeNotifier::CancelNotify
// Cancels outstanding request.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CSatPSChangeNotifier::CancelNotify()
    {
    LOG( SIMPLE, "SATSYSTEMSTATE: CSatPSChangeNotifier::CancelNotify calling" )

    Cancel();

    LOG( SIMPLE, "SATSYSTEMSTATE: CSatPSChangeNotifier::CancelNotify exiting" )
    }

// -----------------------------------------------------------------------------
// CSatPSChangeNotifier::DoCancel
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CSatPSChangeNotifier::DoCancel()
    {
    LOG( SIMPLE, "SATSYSTEMSTATE: CSatPSChangeNotifier::DoCancel calling" )

    iPSClient.Cancel();

    LOG( SIMPLE, "SATSYSTEMSTATE: CSatPSChangeNotifier::DoCancel exiting" )
    }

// -----------------------------------------------------------------------------
// CSatPSChangeNotifier::RunL
// Activates the request again and calls the observer.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CSatPSChangeNotifier::RunL()
    {
    LOG( SIMPLE, "SATSYSTEMSTATE: CSatPSChangeNotifier::RunL calling" )
    // Makes sure that all the changes are notified.
    LOG2( SIMPLE, "SATSYSTEMSTATE:   Failed: %i", iStatus.Int() )
    if ( KErrNone == iStatus.Int() )
        {
        NotifyChangeL();

        // Check the value
        TInt value = KNotifyValueNotSet;

        // Get the value from P&S
        RProperty::Get( iPSKey, iPSValue, value );

        // If notify value is set, check the value before notifying observer
        if ( KNotifyValueNotSet != iNotifyValue )
            {
            LOG( SIMPLE, "SATSYSTEMSTATE: CSatPSChangeNotifier::RunL \
            KNotifyValueNotSet != iNotifyValue" )
            // If changed P&S value is same as notify value, notify observer
            if ( value == iNotifyValue )
                {
                LOG( SIMPLE, "SATSYSTEMSTATE: CSatPSChangeNotifier::RunL \
                value == iNotifyValue" )
                iObserver.StateChanged();
                }
            }
        else
            {
            LOG( SIMPLE, "SATSYSTEMSTATE: CSatPSChangeNotifier::RunL \
            KNotifyValueNotSet == iNotifyValue" )
            // Notify value not specified -> Send the changed value
            iObserver.StateChanged( value );
            }
        }
    else if ( KErrCancel == iStatus.Int() )
        {
        Activate();
        }
    LOG( SIMPLE, "SATSYSTEMSTATE: CSatPSChangeNotifier::RunL exiting" )
    }

// -----------------------------------------------------------------------------
// CSatPSChangeNotifier::Activate
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CSatPSChangeNotifier::Activate()
    {
    LOG( SIMPLE, "SATSYSTEMSTATE: CSatPSChangeNotifier::Activate calling" )

    iPSClient.Subscribe( iStatus );
    SetActive();

    LOG( SIMPLE, "SATSYSTEMSTATE: CSatPSChangeNotifier::Activate exiting" )
    }

// -----------------------------------------------------------------------------
// CSatPSChangeNotifier::GetValueInt
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CSatPSChangeNotifier::GetValueInt()
    {
    LOG( SIMPLE, "SATSYSTEMSTATE: CSatPSChangeNotifier::GetValueInt calling" )

    // Gets the value from P&S.
    TInt value( KNotifyValueNotSet );
    RProperty::Get( iPSKey, iPSValue, value );

    LOG2( SIMPLE, 
        "SATSYSTEMSTATE: CSatPSChangeNotifier::GetValueInt exiting %i",
        value )
    return value;
    }
    
//  End of File