diff -r 000000000000 -r 4e1aa6a622a0 sensorservices/sensorserver/src/server/sensrvtimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sensorservices/sensorserver/src/server/sensrvtimer.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,139 @@ +/* +* 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: Generic sensor server timer +* +*/ + + +#include "sensrvdefines.h" +#include "sensrvtimer.h" +#include "sensrvtrace.h" + +// ----------------------------------------------------------------------------- +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSensrvTimer* CSensrvTimer::NewL(MSensrvTimerCallback& aCallback, + const TTimeIntervalMicroSeconds32& aMaxTime, + TInt aTimerId) + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvTimer::NewL(0x%x, %d, %d)" ), &aCallback, aMaxTime.Int(), aTimerId ) ); + + CSensrvTimer* self = new (ELeave) CSensrvTimer(aCallback, aMaxTime, aTimerId); + CleanupStack::PushL(self); + self->ConstructL(); // Base call, needed or will KERN-EXEC 0 at ::After() + CleanupStack::Pop(self); + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvTimer::NewL - return 0x%x" ), self ) ); + + return self; + } + +// ----------------------------------------------------------------------------- +// Constructor with callback class as a parameter. +// ----------------------------------------------------------------------------- +// +CSensrvTimer::CSensrvTimer(MSensrvTimerCallback& aCallback, + const TTimeIntervalMicroSeconds32& aMaxTime, + TInt aTimerId) + : CTimer(EPriorityHigh), + iCallback(aCallback), + iMaximumTime(aMaxTime), + iTimerId(aTimerId) + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvTimer::CSensrvTimer()" ) ) ); + + // Nothing to do + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvTimer::CSensrvTimer - return" ) ) ); + } + +// ----------------------------------------------------------------------------- +// Destructor. +// ----------------------------------------------------------------------------- +// +CSensrvTimer::~CSensrvTimer() + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvTimer::~CSensrvTimer()" ) ) ); + + Cancel(); + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvTimer::~CSensrvTimer - return" ) ) ); + } + +// ----------------------------------------------------------------------------- +// Start the timer to complete after the specified number of microseconds. +// If the duration is zero, then timer is set to predefined maximum value. +// ----------------------------------------------------------------------------- +// +void CSensrvTimer::Set(const TTimeIntervalMicroSeconds32& aInterval) + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvTimer::Set(%d)" ), aInterval.Int() ) ); + + if (CActiveScheduler::Current()) + { + if (!IsAdded()) + { + CActiveScheduler::Add(this); + } + + // If the timer is already running, cancel it... + if (IsActive()) + { + Cancel(); + } + + // ...and set the new timer. If timer has specified maximum time, enforce that. + if ( iMaximumTime.Int() != 0 && (0 == aInterval.Int() || aInterval > iMaximumTime) ) + { + // Maximum time has been specified, and interval parameter is such that + // it should be enforced + After(iMaximumTime); + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvTimer::Set - Using Maximum time %d" ), iMaximumTime.Int() ) ); + } + else if ( iMaximumTime.Int() == 0 && aInterval.Int() == 0 ) + { + // No maximum time specified and interval calls for infinite duration. + // --> Do not set the timer at all. + } + else + { + // Otherwise just set the time to specified interval. + After(aInterval); + } + } + else + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvTimer::Set - Scheduler not active, set ignored" ) ) ); + // If there are loaded plugins when shutting down the server, timer setting does occur + } + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvTimer::Set - return" ) ) ); + } + +// ----------------------------------------------------------------------------- +// RunL() function will be run after the specified system time expires, +// i.e. time is set by After() method, +// ----------------------------------------------------------------------------- +void CSensrvTimer::RunL() + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvTimer::RunL()" )) ); + + iCallback.TimerFired(iTimerId); + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvTimer::RunL - return" ) ) ); + } + +// End of File