diff -r 000000000000 -r 3553901f7fa8 telephonyserverplugins/common_tsy/commontsy/src/mmutility/CResponseTimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyserverplugins/common_tsy/commontsy/src/mmutility/CResponseTimer.cpp Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,178 @@ +// Copyright (c) 2006-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: +// + + + +// INCLUDE FILES +#include "CResponseTimer.h" +#include "cmmphonetsy.h" +#include "CResponseTimerStore.h" +#include "MmTsy_timeoutdefs.h" +#include + +#ifdef REQHANDLE_TIMER + +// ======== MEMBER FUNCTIONS ======== + +CResponseTimer* CResponseTimer::NewL( + CMmPhoneTsy* aPhone ) //a Pointer to a phone + { + CResponseTimer* runner = new (ELeave) CResponseTimer; + CleanupStack::PushL( runner ); + //save pointer to phone + runner->iPhone = aPhone; + //initialize the beat Counter + runner->iBeatCounter = 0; + //2nd phase construction + runner->ConstructL(); + CleanupStack::Pop(); + + return runner; + } + +CResponseTimer::CResponseTimer() + { + } + +void CResponseTimer::ConstructL() + { + // neutral priority, 0 + iTimer = CHeartbeat::NewL( CActive::EPriorityStandard ); + } + +CResponseTimer::~CResponseTimer() + { + if ( iTimer ) + { + //stop calling Beat... + iTimer->Cancel(); + } + + delete iTimer; + } + +// --------------------------------------------------------------------------- +// CResponseTimer::Start +// Starts timer. +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CResponseTimer::Start() + { + //Check if active + if ( !iTimer->IsActive() ) + { + //Timer tick is on the second + iTimer->Start( ETwelveOClock, this ); + } + } + +// --------------------------------------------------------------------------- +// CResponseTimer::Stop +// Stops timer. +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CResponseTimer::Stop() + { + //Check if active + if ( iTimer->IsActive () ) + { + //Cancel beat method calling + iTimer->Cancel(); + } + } + +// --------------------------------------------------------------------------- +// CResponseTimer::Beat +// Beat is called once every second. +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CResponseTimer::Beat() + { + //Update the timer time + iBeatCounter++; + + //check if the time limit is reached for any entry + for ( TInt index = 0; + index < iPhone->GetTimeStampStore()->NumberOfEntries(); + index++ ) + { + CResponseTimerStore::CTableEntry *aEntry = + iPhone->GetTimeStampStore()->GetEntry( index ); + //if the entry is expired, complete and delete it + if ( aEntry->GetTimeStamp() <= iBeatCounter ) + { +TFLOGSTRING2("TSY: Request completed due timer expiration, IPC: %d", aEntry->GetIPC() ); + + //call completion of the request due expired timer + iPhone->TimerExpired( aEntry->GetUserObject(), + aEntry->GetHandleType(), + aEntry->GetIPC() ); + } + else //aEntry.timeStamp > iBeatCounter + { + //break cause table is ordered. + break; + } + } + } + +// --------------------------------------------------------------------------- +// CResponseTimer::Synchronize +// Pure virtual class in base class. Called when synchronization +// is lost. The iBeatCounter is increased. +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CResponseTimer::Synchronize() + { + if(iBeatCounter > 0) + { + iBeatCounter++; + } + } + +// --------------------------------------------------------------------------- +// CResponseTimer::GetBeatCounter +// Returns the the value of the iBeatCounter attribute. +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +TUint32 CResponseTimer::GetBeatCounter() + { + return iBeatCounter; + } + +// --------------------------------------------------------------------------- +// CResponseTimer::ResetBeatCounter +// Resets the value of iBeatCounter to 0. +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CResponseTimer::ResetBeatCounter() + { + //set the beat counter to 0 + iBeatCounter = 0; + } + +#endif //REQHANDLE_TIMER + +// End of File + + + +