sysstatemgmt/systemstateplugins/adptplugin/inc/stateadaptationref.h
changeset 0 4e1aa6a622a0
child 21 ccb4f6b3db21
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstateplugins/adptplugin/inc/stateadaptationref.h	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,113 @@
+// 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:
+//
+
+#ifndef __STATEADAPTATIONREF_H__
+#define __STATEADAPTATIONREF_H__
+
+#include <ssm/ssmadaptation.h>
+
+/**
+
+ CStateAdaptationRefEventHandler acts as a dummy event notifier in the absence of Cooperating system
+
+  *********Need for the class*********
+  
+  On a device when NotifyCoopSysEvent is called, State Adaptation Plug-in would request for notification 
+  from the Cooperating System for 'aEvent'.
+  
+  On HRP/Techview,the reference implementation has to complete the notification request with KErrNotSupported
+  since there is no Cooperating System on HRP/Techview.
+  
+  But this implementation will cause problems in the following scenario.
+  
+  *********Problem*********
+  
+  This API is used by Adaptation server to service the clients which request for notifications .
+  This is done as follows.
+  
+  Adaptation server always tracks the events by calling NotifyCoopSysEvent during the whole life time 
+  of the server.It first calls this API in the startup of the server and subsequently whenever an event 
+  is notified(by completing the call NotifyCoopSysEvent) adaptation server resubmits the request 
+  by calling NotifyCoopSysEvent .
+  
+  In this context if NotifyCoopSysEvent just completes the message immediately this results in a infinite 
+  loop and starves other active objects with same priority.
+  
+  This makes testing of Adaptation servers notification functionality impossible on HRP/Techview.
+  
+  *********Solution*********
+
+  To solve this problem NotifyCoopSysEvent will forward the notification request from adaptation server 
+  to the test active object(CStateAdaptationRefEventHandler) which has lesser priority compared to 
+  adaptation servers active object.
+  In the RunL() method of this test active object the notification request is completed.  
+  
+  This will delay the completion of notification message till all the servers active objects 
+  which have higher priority are run.
+  
+  @internalComponent
+  
+   
+*/
+
+
+class CStateRefAdaptationTimer : public CTimer
+	{
+public:
+	CStateRefAdaptationTimer();
+	~CStateRefAdaptationTimer();
+	static CStateRefAdaptationTimer* NewL();
+	void After(TTimeIntervalMicroSeconds32 aCancelDelay, TRequestStatus& aStatus);	
+	void DoCancel();
+private:
+	virtual void RunL();
+
+private:
+	TRequestStatus* iReqStatus;
+	};
+
+
+// C Class
+class CStateAdaptationRef : public CBase, public MStateAdaptation
+	{
+public:
+	static CStateAdaptationRef* NewL();
+	~CStateAdaptationRef();
+
+	//from MStateAdaptation
+	void Release();
+	void RequestCoopSysStateChange(TSsmState aState, TRequestStatus& aStatus);
+	void RequestCoopSysSelfTest(TRequestStatus& aStatus);
+	void RequestCoopSysPerformRestartActions(TInt aReason, TRequestStatus& aStatus);
+	void RequestCoopSysPerformShutdownActions(TInt aReason, TRequestStatus& aStatus);
+	void RequestCoopSysPerformRfsActions(TSsmRfsType aRfsType, TRequestStatus& aStatus);
+	void RequestCancel();
+
+	void NotifyCoopSysEvent(TDes8& aEvent, TRequestStatus& aStatus);
+	void NotifyCancel();
+
+private:
+	CStateAdaptationRef();
+	void ConstructL();
+
+private:
+	CStateRefAdaptationTimer* iTimer;	
+	};
+
+
+
+
+
+#endif // __STATEADAPTATIONREF_H__