--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contextframework/cfw/src/basicoperationsplugin/cfdelay.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,149 @@
+/*
+* Copyright (c) 2007-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: CCFDelay class implementation.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "cfdelay.h"
+#include "cfbasicoptrace.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+//-----------------------------------------------------------------------------
+// CCFDelay::CCFDelay
+// Delayed evaluation should be as exact as possible. Set high priority.
+//-----------------------------------------------------------------------------
+//
+CCFDelay::CCFDelay( MCFDelayExpired& aDelayer )
+ : CTimer( EPriorityHigh ),
+ iDelayer( aDelayer )
+ {
+ FUNC_LOG;
+ }
+
+//-----------------------------------------------------------------------------
+// CCFDelay::ConstructL
+//-----------------------------------------------------------------------------
+//
+void CCFDelay::ConstructL()
+ {
+ FUNC_LOG;
+
+ // Construct ctimer
+ CTimer::ConstructL();
+
+ // Add into active scheduler if not already added
+ if( !IsAdded() )
+ {
+ CActiveScheduler::Add( this );
+ }
+ }
+
+//-----------------------------------------------------------------------------
+// CCFDelay::NewL
+//-----------------------------------------------------------------------------
+//
+CCFDelay* CCFDelay::NewL( MCFDelayExpired& aDelayer )
+ {
+ FUNC_LOG;
+
+ CCFDelay* self = CCFDelay::NewLC( aDelayer );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+//-----------------------------------------------------------------------------
+// CCFDelay::NewLC
+//-----------------------------------------------------------------------------
+//
+CCFDelay* CCFDelay::NewLC( MCFDelayExpired& aDelayer )
+ {
+ FUNC_LOG;
+
+ CCFDelay* self = new( ELeave ) CCFDelay( aDelayer );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// Destructor
+CCFDelay::~CCFDelay()
+ {
+ FUNC_LOG;
+
+ Cancel();
+ }
+
+
+//-----------------------------------------------------------------------------
+// CCFDelay::Delay
+//-----------------------------------------------------------------------------
+//
+void CCFDelay::Delay( const TTimeIntervalMicroSeconds32& aDelay )
+ {
+ FUNC_LOG;
+
+ TBool startDelay = ETrue;
+ if ( IsActive() )
+ {
+ TTime currentTime;
+ currentTime.HomeTime();
+ TInt64 elapsedTime = currentTime.Int64() - iDelayStartTime.Int64();
+ if ( aDelay.Int() < ( iDelay - elapsedTime ) )
+ {
+ startDelay = EFalse; // Current delay outlasts the new one
+ }
+ }
+
+ if ( startDelay )
+ {
+ Cancel(); // Cancel ongoing timer if any
+
+ iDelay = aDelay.Int();
+ iDelayStartTime.HomeTime();
+ After( aDelay ); // Start delay
+ }
+ }
+
+//-----------------------------------------------------------------------------
+// CCFDelay::RunL
+//-----------------------------------------------------------------------------
+//
+void CCFDelay::RunL()
+ {
+ FUNC_LOG;
+
+ iDelayer.ExpiredL();
+ }
+
+//-----------------------------------------------------------------------------
+// CCFDelay::RunError
+//-----------------------------------------------------------------------------
+//
+#ifndef ERROR_TRACE
+TInt CCFDelay::RunError( TInt /*aError*/ )
+#else // ERROR_TRACE defined
+TInt CCFDelay::RunError( TInt aError )
+#endif
+ {
+ FUNC_LOG;
+
+ ERROR( aError, "Call MCFDelayExpired::ExpiredL() leave code: %d (skipped)" );
+
+ return KErrNone; // Ignore errors
+ }