--- /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
+