sysstatemgmt/systemstatemgr/ssm/src/ssmstatepolicyframe.cpp
changeset 0 4e1aa6a622a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstatemgr/ssm/src/ssmstatepolicyframe.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,189 @@
+// 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 <ssm/ssmstate.h>
+#include "ssmstatepolicyframe.h"
+
+#include "ssmdebug.h"
+#include "ssmserverpanic.h"
+
+
+/**
+*/
+typedef MSsmStatePolicy* (*TFuncStateNewL)(void);
+
+/**
+*/
+CSsmStatePolicyFrame::CSsmStatePolicyFrame()
+	{
+	}
+
+/**
+*/
+ CSsmStatePolicyFrame::CSsmStatePolicyFrame(MSsmStatePolicy* aStatePolicy)
+ 	: iStatePolicy(aStatePolicy)
+ 	{
+ 	}
+
+/**
+*/
+CSsmStatePolicyFrame* CSsmStatePolicyFrame::NewL(TLibraryFunction aNewLFunc)
+	{
+	CSsmStatePolicyFrame* self = new (ELeave) CSsmStatePolicyFrame();
+	CleanupStack::PushL(self);
+	self->ConstructL(aNewLFunc);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+/**
+*/
+void CSsmStatePolicyFrame::ConstructL(TLibraryFunction aNewLFunc)
+	{
+	TFuncStateNewL newL = reinterpret_cast<TFuncStateNewL>( aNewLFunc );
+	iStatePolicy = newL();
+#ifdef _DEBUG
+	if(!iStatePolicy)
+		{
+		DEBUGPRINT1(_L("First function in State Policy DLL didn't create a new instance"));
+		}
+#endif
+	SSMLOGLEAVEIFNULL(iStatePolicy);
+	}
+
+/**
+*/
+CSsmStatePolicyFrame::~CSsmStatePolicyFrame()
+ 	{
+	//Let the derived implementation handle its own destruction
+	if(iStatePolicy)
+		{
+		iStatePolicy->Release();
+		iStatePolicy = NULL;
+		}
+ 	}
+
+/**
+Returns the major state handled by this DLL.
+The value returned is read from the DLL filename
+*/
+TUint16 CSsmStatePolicyFrame::StatePolicyId() const
+	{
+	return iStatePolicyId;
+	}
+
+/**
+*/
+void CSsmStatePolicyFrame::SetStatePolicyId(TUint16 aMainState)
+	{
+	iStatePolicyId = aMainState;
+	}
+
+/**
+*/
+void CSsmStatePolicyFrame::CallInitialize(TRequestStatus& aStatus)
+ 	{
+	__ASSERT_DEBUG(EInitialize == iNextAction, PanicNow(KPanicSysStateMgr,ESsmStatePolicyError1));
+	__ASSERT_DEBUG(!iInitializeCalled, PanicNow(KPanicSysStateMgr,ESsmStatePolicyError2));
+	__ASSERT_DEBUG(iStatePolicy, PanicNow(KPanicSysStateMgr,ESsmStatePolicyError7));
+	if(iStatePolicy)
+		{
+		iStatePolicy->Initialize(aStatus);
+		iInitializeCalled = ETrue;
+		iNextAction = EPrepare;
+		}
+	}
+
+/**
+ */
+ void CSsmStatePolicyFrame::CallInitializeCancel()
+ 	{
+ 	__ASSERT_DEBUG(iStatePolicy, PanicNow(KPanicSysStateMgr,ESsmStatePolicyError8));
+ 	if(iStatePolicy)
+ 		{
+ 		iStatePolicy->InitializeCancel();
+ 		iNextAction = EInitialize;
+ 		}
+ 	}
+
+/**
+*/
+MSsmStatePolicy::TResponse CSsmStatePolicyFrame::CallTransitionAllowed(const TSsmStateTransition& aRequest, TSsmStateTransition const* aCurrent, TSsmStateTransition const* aQueued, const RMessagePtr2& aMessage)
+	{
+	MSsmStatePolicy::TResponse response = MSsmStatePolicy::ENotAllowed;
+	__ASSERT_DEBUG(iStatePolicy, PanicNow(KPanicSysStateMgr,ESsmStatePolicyError10));
+	if(iStatePolicy)
+		{
+		response = iStatePolicy->TransitionAllowed(aRequest, aCurrent, aQueued, aMessage);
+		}
+	return response;
+	}
+
+/**
+*/
+void CSsmStatePolicyFrame::CallPrepareCommandList(TSsmState aState, TInt aReason, TRequestStatus& aStatus)
+	{
+	__ASSERT_DEBUG(EPrepare == iNextAction || ENext == iNextAction, PanicNow(KPanicSysStateMgr,ESsmStatePolicyError3));
+	__ASSERT_DEBUG(aState.MainState() == iStatePolicyId, PanicNow(KPanicSysStateMgr,ESsmStatePolicyError4));
+	__ASSERT_DEBUG(iStatePolicy, PanicNow(KPanicSysStateMgr,ESsmStatePolicyError11));
+	if(iStatePolicy)
+		{
+		iStatePolicy->PrepareCommandList(aState, aReason, aStatus);
+		iNextAction = EGet;
+		}
+	} //lint !e1746 Suppress parameter 'aState' could be made const reference
+
+/**
+ */
+ void CSsmStatePolicyFrame::CallPrepareCommandListCancel()
+ 	{
+ 	__ASSERT_DEBUG(iStatePolicy, PanicNow(KPanicSysStateMgr,ESsmStatePolicyError12));
+ 	if(iStatePolicy)
+ 		{
+ 		iStatePolicy->PrepareCommandListCancel();
+ 		iNextAction = EPrepare;
+ 		}
+ 	}
+
+/**
+*/
+CSsmCommandList* CSsmStatePolicyFrame::CallCommandList()
+	{
+	__ASSERT_DEBUG(EGet == iNextAction, PanicNow(KPanicSysStateMgr,ESsmStatePolicyError5));
+	__ASSERT_DEBUG(iStatePolicy, PanicNow(KPanicSysStateMgr,ESsmStatePolicyError13));
+	CSsmCommandList* list = NULL;
+	if(iStatePolicy)
+		{
+		list = iStatePolicy->CommandList();
+		iNextAction = ENext;
+		}
+	return list;
+	}
+
+/**
+*/
+TBool CSsmStatePolicyFrame::CallGetNextState(TSsmState aCurrentTransition, TInt aReason, TInt aError, TInt aSeverity, TSsmState& aNextState)
+	{
+	__ASSERT_DEBUG(ENext == iNextAction, PanicNow(KPanicSysStateMgr,ESsmStatePolicyError6));
+	__ASSERT_DEBUG(iStatePolicy, PanicNow(KPanicSysStateMgr,ESsmStatePolicyError14));
+	TBool moreToCome = EFalse;
+	if(iStatePolicy)
+		{
+		moreToCome = iStatePolicy->GetNextState(aCurrentTransition, aReason, aError, aSeverity, aNextState);
+		iNextAction = EPrepare;
+		}
+	return moreToCome;
+	} //lint !e1746 Suppress parameter 'aCurrentTransition' could be made const reference
+