resourcemgmt/powerandmemorynotificationservice/src/shutdowntimer.cpp
changeset 0 4e1aa6a622a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcemgmt/powerandmemorynotificationservice/src/shutdowntimer.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,94 @@
+// Copyright (c) 2007-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 "shutdowntimer.h"
+#include "savepriv.h"
+
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "shutdownsrv.h"
+#else //SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "shutdownsess.h"
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "shutdownsrvpatchdata.h"
+
+/*
+Patchable data KShtdwnTimeoutBase can be configured as -1 not to apply the timer 
+as backward compatibility.
+*/
+const TInt32 KShtdwnTimeoutNoApply = -1;
+
+/**
+Standard phase-one factory method for creating CShutdownTimer instances.
+It might return a NULL pointer if the patchable constant KShtdwnTimeoutBase has been configured 
+as -1 which indicates no timer should be started.
+@param aShtdwnSrv The reference to CServShutdownServer.
+@return 0 if no timer should be started, otherwise a pointer to CShutdownTimer object.
+@leave Some system-wide error codes including KErrNoMemory.
+@panic KErrNotSupported Incorrect patchable variables configuration.
+*/
+CShutdownTimer* CShutdownTimer::NewL(CServShutdownServer& aShtdwnSrv)
+	{ 
+	__ASSERT_ALWAYS( (KShtdwnTimeoutBase >= KShtdwnTimeoutNoApply) && (KShtdwnTimeoutClient >= 0), \
+		User::Panic(__SHUTDOWN_SERVER_NAME, KErrNotSupported));
+
+	CShutdownTimer* self = 0;
+	if(KShtdwnTimeoutBase > KShtdwnTimeoutNoApply)
+		{
+		self = new(ELeave) CShutdownTimer(aShtdwnSrv);
+		CleanupStack::PushL(self);
+		self->ConstructL();
+		CleanupStack::Pop(self);
+		}
+	
+	return self;
+	}
+
+/**
+Constructor
+@param aShtdwnSrv The reference to CServShutdownServer
+*/
+CShutdownTimer::CShutdownTimer(CServShutdownServer& aShtdwnSrv):
+	CTimer(CActive::EPriorityStandard), iShtdwnSrv(aShtdwnSrv)
+	{
+	CActiveScheduler::Add(this);
+    }
+   
+/**
+Removes the timer object from the active scheduler's list if it has been added.
+*/
+void CShutdownTimer::DoCancel()
+	{
+	// Do nothing
+	}
+	
+/**
+Calculates the timeout value by the number of the clients and starts the timer.
+@param aNumClients The number of the clients.
+*/
+void CShutdownTimer::Start(TInt aNumClients)
+	{
+	TInt32 timeout = KShtdwnTimeoutBase + KShtdwnTimeoutClient * aNumClients;
+	After(timeout);
+	}
+
+	
+/**
+Gets called when the timeout expires.
+Calls CServShutdownServer::SwitchOff() to execute the switch off.
+*/
+void CShutdownTimer::RunL()
+	{
+	iShtdwnSrv.SwitchOff();
+	}