/*
* Copyright (c) 2003 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: Timer class for superviving Vibrating time
*
*/
// INCLUDE FILES
#include "vibratimer.h"
#include "vibractrl.h" //TVibraCtrlPanic
// ============================ MEMBER FUNCTIONS ===============================
// -----------------------------------------------------------------------------
// CVibraTimer::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CVibraTimer* CVibraTimer::NewL(MVibraTimerCallback* aCallback, TInt aMaxVibTime)
{
CVibraTimer* p = new (ELeave) CVibraTimer(aCallback, aMaxVibTime);
CleanupStack::PushL(p);
p->ConstructL();//base call
CleanupStack::Pop(); // p
return p;
}
// -----------------------------------------------------------------------------
// CVibraTimer::CVibraTimer(MVibraTimerCallback* aCallback)
// Constructor with callback class as a parameter.
// -----------------------------------------------------------------------------
//
CVibraTimer::CVibraTimer(MVibraTimerCallback* aCallback, TInt aMaxVibTime)
:CTimer(EPriorityHigh),
iCallback(aCallback),
iMaximumVibraTimeMs(aMaxVibTime)
{
__ASSERT_ALWAYS(aCallback != NULL, User::Invariant());
}
// -----------------------------------------------------------------------------
// CVibraTimer::~CVibraTimer
// Destructor.
// -----------------------------------------------------------------------------
//
CVibraTimer::~CVibraTimer()
{
}
// -----------------------------------------------------------------------------
// CVibraTimer::Set(TInt aIntervalInMilliSecs)
// Start the timer to complete after the specified number of microseconds.
// If the duration is zero, then timer is set to predefined maximum value.
// -----------------------------------------------------------------------------
//
TInt CVibraTimer::Set(TInt aIntervalInMilliSecs)
{
__ASSERT_ALWAYS(CActiveScheduler::Current()!= NULL, User::Invariant());
if (!IsAdded())
{
CActiveScheduler::Add(this);
}
// If the timer is already running, cancel it...
if (IsActive())
{
Cancel();
}
// And set the new timer...
// Convert to uS first -- which is, after all, why this method really exists...
if ((0 == aIntervalInMilliSecs) || (aIntervalInMilliSecs > iMaximumVibraTimeMs))
{
After(iMaximumVibraTimeMs * 1000);
}
else
{
After(aIntervalInMilliSecs * 1000);
}
return KErrNone;
}
// -----------------------------------------------------------------------------
// CVibraTimer::RunL
// RunL() function will be run after the specified system time expires,
// i.e. time is set by After() method,
// -----------------------------------------------------------------------------
void CVibraTimer::RunL()
{
__ASSERT_ALWAYS(iCallback != NULL, User::Invariant());
iCallback->TimerFired();
}
// End of File