diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcesrv/mmceserver/inc/mcetimermanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcesrv/mmceserver/inc/mcetimermanager.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,166 @@ +/* +* 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 header file is included by the subsystem which is +* responsible for creating the CMceTimerManager instance. +* +*/ + + + + +#ifndef __CMCETIMERMANAGER_H__ +#define __CMCETIMERMANAGER_H__ + + + +// INCLUDES +#include +#include "mceexpirationhandler.h" + +// Timer call back function used by CDeltaTimer +typedef TInt(*MceTimerCallBack)(TAny *aPtr); + +// CLASS DEFINITION +/** + * CMceTimerManager is the main class of the Lightweight timer subsystem. It is + * intended to be used in a way that there is only one instance of the + * CMceTimerManager class, and the basic timer services are available through the + * MTimerManager interface. + * + * Several logical timers can run simultaneously, but only one CTimer derived + * timer is used. + */ +class CMceTimerManager : + public CBase, + public MMceTimerManager + + { + public: // Constructors and destructor + + /** + * Static constructor. + * + * @see CMceTimerManager::NewLC + * @return An initialized instance of this class. + */ + static CMceTimerManager* NewL(); + + /** + * Static constructor. Leaves pointer to cleanup stack. + * + * @see CMceTimerManager::NewL + * @return An initialized instance of this class. + */ + static CMceTimerManager* NewLC(); + + /// Destructor + ~CMceTimerManager(); + + public: // From MTimerManager: + + TMceTimerId StartL( MMCEExpirationHandler* aObserver, + TUint aMilliseconds ); + + TMceTimerId StartL( MMCEExpirationHandler* aObserver, + TUint aMilliseconds, + TAny* aTimerParam ); + + TInt Stop( TMceTimerId aTimerId ); + + TBool IsRunning( TMceTimerId aTimerId ) const; + + static TInt TimerExpiredCallBack(TAny *aPtr); + + private: // New methods + + /** + * Generates a new unique TMceTimerId value. This is basically just + * a linear sequence of TUint32 values (0,1,2,3,4...n) + * + * @return New TimerId value + */ + TMceTimerId NewTimerId(); + + /** + * Finds a timer entry from the iEntries array based on the supplied id. + * + * @return Timer entry index within iEntries or KErrNotFound. + */ + TInt FindEntry( TMceTimerId aTimerId ) const; + + /// Queue the first timer entry to the system timer (if any) + void ActivateFirstEntry(); + + private: // Constructors and destructor + + /// Default constructor + inline CMceTimerManager(); + + /// 2nd phase constructor + inline void ConstructL(); + + private: // Nested classes + + // CLASS DEFINITION + class TEntry // : public TDeltaTimerEntry + { + public: // Constructors and destructor + + /// Default constructor. Resets all member variables. + TEntry(); + + public: // Data + + /// Unique timer id within CMceTimerManager + TMceTimerId iId; + + /// Observer that is notified on timer expiration. Not owned. + MMCEExpirationHandler* iObserver; + + /// Parameter value that is passed to the observer. Not owned + TAny* iObserverParam; + + /// Parameter value that is passed to the CDeltaTimer::QueueLong + TDeltaTimerEntry iEntry; + + /// Parameter value that is contain the call back function + TCallBack iCallBack; + + /// Used to remove TEntry pointer from CMceTimerManager::iEntries. Not owned + CMceTimerManager* iTimerManager; + + + }; + + private: // Data + + /// Timer entry array. Owned. + RPointerArray< TEntry > iEntries; + + /// Counter used to produce unique TimerId values + TMceTimerId iTimerIdCounter; + + /// Implemented the timer queue and scheduler logic + CDeltaTimer *iTimerContainer; + + private: // For testing purposes + +#ifdef MCE_TIMER_MANAGER_UNIT_TEST + friend class CMceTimerManagerTest; +#endif + + }; + + +#endif // __CMCETIMERMANAGER_H__