networkhandling/networkhandlingengine/NetworkHandlingGsmInc/CNWNetworkMCNEngine.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:15:03 +0100
branchRCL_3
changeset 20 987c9837762f
parent 19 7d48bed6ce0c
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2002-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:  This file contains the header file of the CNWNetworkMcnEngine class.
*
*/


#ifndef CNWNETWORKMCNENGINE_H
#define CNWNETWORKMCNENGINE_H

//  INCLUDES
#include "MCbsMcnObserver.h" //For McbsMcnObserver
#include "MNWNetworkTimer.h"
#include <e32base.h>
#include <etelmm.h>


//#define TESTINGMCN
// CONSTANTS
const TUint KNWMcnMsgId = 50; 

#ifdef TESTINGMCN
const TInt KWaitTimeForNewMcn = 120000000;
const TInt KWaitTimeToClearOldMcnIndicator = 5000000;
const TInt KWaitTimeForNewMcnAfterClearingOld = KWaitTimeForNewMcn \
            - KWaitTimeToClearOldMcnIndicator;
#else
    //timer values
const TInt KWaitTimeForNewMcn = 120000000;
const TInt KWaitTimeToClearOldMcnIndicator = 5000000;
const TInt KWaitTimeForNewMcnAfterClearingOld = KWaitTimeForNewMcn \
            - KWaitTimeToClearOldMcnIndicator;
#endif

    //for shared data
const TInt KOptionalDefaultValue  = 1;


// FORWARD DECLARATIONS
class CNWGsmSessionImplementation;
class CNWNetworkMcnTimer;
class CMcnTopicArray;
class CMcn;
class CNWGsmMessageHandler;
class CRepository;

// CLASS DECLARATION

/**
* Monitors current network change event from MMEtel.
*
* @lib Networkhandling.lib
* @since Series 60_2.8 
*/
class CNWNetworkMcnEngine : public CActive,
                            public MCbsMcnObserver,
                            protected MNWNetworkTimer
    {
    public:  // Constructors and destructor
        /**
        * C++ default constructor.
        */
        CNWNetworkMcnEngine( CNWGsmMessageHandler& aMessageHandler,
                             TNWInfo& aNetworkInfo,
                             RMmCustomAPI& aCustomAPI,
                             CNWGsmNetworkCellReselectionHandler& 
                             aCellReselectionHandler );

        /**
        * Two-phased constructor.
        */
        static CNWNetworkMcnEngine* NewL( 
                             CNWGsmMessageHandler& aMessageHandler,
                             TNWInfo& aNetworkInfo,
                             RMmCustomAPI& aCustomAPI,
                             CNWGsmNetworkCellReselectionHandler& 
                             aCellReselectionHandler );

        /**
        * Destructor.
        */
        virtual ~CNWNetworkMcnEngine();

    public: // Functions from  MCbsMcnObserver
        /**
        *   This method is called when a message of a subscribed topic 
        *   is received from the network.
        *   @param  aMcnMessage         MCN message received from the network.
        *   @return                     Result code
        */
        TInt CellInfoChanged( const TCbsMcnMessage& aMcnMessage );

    public: // Functions from SharedDataI
        /**
        * Is executed when shared data's cell info display value changes.
        * @param aPtr
        * @return Error code.
        */
        static TInt SharedDataCallBack(TAny* aPtr);

        /**
        * Is called by CNWNetworkCurrentNetworkMonitor in case of
        * cell re-selection.
        */
        void CellReselection();


    private:
        /**
        * By default EPOC constructor is private.
        */
        void ConstructL();

        /**
        * Reads current cell info display setting value from shared data
        * or Central Repository.
        * @return Error code.
        */
        void GetMcnDisplayValue();
 
        /**
        * Registers to listen CBS messages.
        * @param aTopic     Topic id of the CBS messages to listen.
        * @return Error code.
        */
       void RegisterToCBSL( TUint16 aTopic );

        /**
        * Handles the MCN display.
        * 
        */
        void StartIndicatorHandling();

        
        /**
        * Handles the CBS messages.
        * @param  aMcnMessage         MCN message received from the network.
        * @return Possible error code
        */
        TInt HandleCBSMessages( const TCbsMcnMessage& aMcnMessage );
 
        /**
        * Resets MCN display's TNWInfo values.
        *
        */
        void ResetIndicatorValues();
        
        
        
        /**
        * Notify MCN display changed.
        *
        */
        void NotifyMcnDisplayChanged();
        
    protected: // Functions from MNWNetworkTimer
        /**
        * This method is called when network timer expires.
        *
        */
        void HandleTimeOut();
        
protected:  // Functions from CActive

        /**
        * Cancels asyncronous request(s).
        */
        void DoCancel();

        /**
        * Informs object that asyncronous request is ready.
        */
        void RunL();
        
    private:    // Data

        //States
        enum
            {
            EListeningNone,
            EListeningMCN,
            } iCBSState;

        enum 
            {
            EIdle,
            ECbsWaitingToClearMcnIndicator,
            ECbsWaitingForNewMcn 
            } iState;

        //Timer
        CNWNetworkMcnTimer* iTimer;
        //new cellId that will be used to comparization
        TUint iComparedCellId;

        // Reference to CNWGsmMessageHandler
        CNWGsmMessageHandler&   iGsmMessageHandler;
        // Reference to the network info structure.
        TNWInfo&                iNWNetworkInfo;
        // Reference to the customAPI connection
        RMmCustomAPI&           iCustomAPI;
        // Reference to the CNWGsmNetworkCellReselectionHandler
        CNWGsmNetworkCellReselectionHandler& iCellReselectionHandler;
        // Pointer to MCN object
        CMcn*                   iMcn;
        //Boolean indicating if to listen MCN Display area
        TBool iListenMCNDisplay;
        
        //Handle to Central repository
        CRepository* iRepository;
    };

#endif      // CNWNETWORKMCNENGINE_H  
            
// End of File