sysstatemgmt/systemstateplugins/adptplugin/src/simadaptationref.cpp
changeset 0 4e1aa6a622a0
child 21 ccb4f6b3db21
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstateplugins/adptplugin/src/simadaptationref.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,155 @@
+// Copyright (c) 2008-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 "simadaptationref.h"
+
+/**
+Function to create new Sim Adaptation Plugin.
+
+@return	a new plugin object for Sim Adaptations.
+*/
+EXPORT_C MSimAdaptation* CreateSimAdaptationRefL()
+	{
+	CSimAdaptationRef* simAdaptationRef = CSimAdaptationRef::NewL();
+	return (static_cast<MSimAdaptation*>(simAdaptationRef));
+	}
+
+CSimAdaptationRef* CSimAdaptationRef::NewL()
+	{
+	CSimAdaptationRef* self = new(ELeave) CSimAdaptationRef;
+	
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+
+	return self;
+	}
+
+CSimAdaptationRef::~CSimAdaptationRef()
+	{
+	delete iTimer;
+	}
+
+CSimAdaptationRef::CSimAdaptationRef()
+	{
+	}
+
+void CSimAdaptationRef::ConstructL()
+	{
+	iTimer = CSimRefAdaptationTimer::NewL();
+	}
+
+//from MSimAdaptation
+void CSimAdaptationRef::Release()
+	{
+	delete this;
+	}
+
+void CSimAdaptationRef::GetSimOwned(TDes8& /*aOwnedPckg*/, TRequestStatus& aStatus)
+	{
+	aStatus = KRequestPending;
+	TRequestStatus* pStatus = &aStatus;
+	User::RequestComplete(pStatus, KErrNone);
+	}
+
+/**
+  Cancel the outstanding request. Reference implementation completes the requests immediately so there is nothing to Cancel.
+  On a device, Cancel() needs an implementation as the Request might be outstanding and it needs to be cancelled.
+*/
+void CSimAdaptationRef::GetCancel()
+	{
+	}
+
+/**
+  The reference implementation completes with KErrNotSupported since there is no SIM support on HRP/Techview.
+  On a device, Sim Adaptation Plug-in would complete 'aTypePckg' with one of the event types in TSsmSimEventType.
+  
+  
+  The above mentioned implementation is modified to facilitate testing and increase the code coverage of the Adaptation 
+  server code.The modified functionality is as follows.
+  
+  
+  Instead of completing the notification request with KErrNotSupported the it is passed to 
+  CSimAdaptationRefEventHandler which is an active object wiht lower priority compared to 
+  the server active object.Because of this a delay will be introduced in completing the notification
+  request so that other active objects can run avoiding infinite loop and starvation of other 
+  active objects,which will be the case if the notification request is immediately completed.
+  This is strictly for testing purposes.On a device this call will be replaced by Sim Adaptation
+  Plug-in  completing 'aTypePckg' with one of the event types in TSsmSimEventType.
+
+  
+  
+*/
+void CSimAdaptationRef::NotifySimEvent(TDes8& /*aTypePckg*/, TRequestStatus& aStatus)
+	{
+	aStatus = KRequestPending;
+	iTimer->After(2000000,aStatus);
+	}
+
+/**
+  Cancel the outstanding request. Reference implementation completes the requests immediately so there is nothing to Cancel.
+  On a device, Cancel() needs an implementation as the Request might be outstanding and it needs to be cancelled.
+*/
+void CSimAdaptationRef::NotifyCancel()
+	{
+	if(iTimer->IsActive())
+		{
+		iTimer->Cancel();			
+		}
+	}
+
+
+
+CSimRefAdaptationTimer::CSimRefAdaptationTimer():CTimer(CActive::EPriorityUserInput)
+	{
+   	CActiveScheduler::Add(this);
+	}
+
+CSimRefAdaptationTimer::~CSimRefAdaptationTimer()
+	{
+	Cancel();	
+	}
+
+CSimRefAdaptationTimer* CSimRefAdaptationTimer::NewL()
+	{
+   	CSimRefAdaptationTimer* self=new (ELeave) CSimRefAdaptationTimer();
+   	CleanupStack::PushL(self);
+   	self->ConstructL();
+   	CleanupStack::Pop();
+    return self;		
+	}
+
+void CSimRefAdaptationTimer::After(TTimeIntervalMicroSeconds32 aCancelDelay, TRequestStatus& aStatus)
+	{
+	iReqStatus = &aStatus;
+	if(!IsActive())
+	CTimer::After(aCancelDelay);	
+	}
+
+
+
+void CSimRefAdaptationTimer::DoCancel()
+	{
+	User::RequestComplete(iReqStatus, KErrCancel);	
+	CTimer::DoCancel();	
+	}
+
+
+void CSimRefAdaptationTimer::RunL()
+	{
+	User::RequestComplete(iReqStatus, KErrNone);	
+	}
+
+