sysstatemgmt/systemstatereferenceplugins/clayer/src/saartcadaptation.cpp
changeset 0 4e1aa6a622a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstatereferenceplugins/clayer/src/saartcadaptation.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,240 @@
+// 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 "saartcadaptation.h"
+
+#include "startupadaptationadapter.h"
+#include "ssmdebug.h"
+#include "clayerpanic.h"
+/*
+ * Creates a new object associated with the passed in CStartupAdaptationAdapter
+ * 
+ * @internalComponent
+ */
+CSaaRtcAdaptation* CSaaRtcAdaptation::NewL(CStartupAdaptationAdapter* aAdapter)
+	{
+	CSaaRtcAdaptation* self = new (ELeave) CSaaRtcAdaptation(aAdapter);
+	return self;
+	}
+
+/*
+ * Destructor for this object
+ * 
+ * @internalComponent
+ */
+CSaaRtcAdaptation::~CSaaRtcAdaptation()
+	{
+
+	}
+
+/*
+ * Decrements the reference count for this object, deleting it if necessary
+ * 
+ * @internalComponent
+ */
+void CSaaRtcAdaptation::Release()
+	{
+	// This MClass is owned by the singleton CStartupAdaptationAdapter class so
+	// release should do nothing.
+	}
+
+/*
+ * 
+ * 
+ * @internalComponent
+ */
+void CSaaRtcAdaptation::ValidateRtc(TDes8& aValidityPckg, TRequestStatus& aStatus)
+	{
+	// If this adaptation is busy then complete with KErrInUse
+	if(Busy())
+		{
+		TRequestStatus* statusPtr = &aStatus;
+		User::RequestComplete(statusPtr, KErrInUse);
+		return;
+		}
+	// Set this request status
+	SetRequestStatus(&aStatus);
+	aStatus = KRequestPending;
+	// No outstand requests so set up command id
+	SetCommandId(StartupAdaptation::EValidateRTCTime);
+	// No parameters to set to pass in
+	
+	// Remember the package to pass data back into
+	iReturnDes = &aValidityPckg;
+	// Pass this to the adapter
+	TRAPD(err, iAdapter->QueueDispatchL(this));
+	if(err != KErrNone)
+		{
+		// Failed to queue adaptation, complete with error
+		SetRequestStatus(NULL);
+		TRequestStatus* statusPtr = &aStatus;
+		User::RequestComplete(statusPtr, err);
+		}
+	}
+
+/*
+ * 
+ * 
+ * @internalComponent
+ */
+void CSaaRtcAdaptation::SetWakeupAlarm(TDesC8& aAlarmTimePckg, TRequestStatus& aStatus)
+	{
+	// If this adaptation is busy then complete with KErrInUse
+	if(Busy())
+		{
+		TRequestStatus* statusPtr = &aStatus;
+		User::RequestComplete(statusPtr, KErrInUse);
+		return;
+		}
+	// Set this request status
+	SetRequestStatus(&aStatus);
+	aStatus = KRequestPending;
+	// No outstand requests so set up command id
+	SetCommandId(StartupAdaptation::ESetWakeupAlarm);
+	// Copy across the parameters into iWakeupAlarmPckg
+	TPckg<TTime> timePckg(iWakeupAlarmPckg().iTime);
+	timePckg.Copy(aAlarmTimePckg);
+	iWakeupAlarmPckg().iUniversalTimeOffset = 0;
+	iWakeupAlarmPckg().iDaylightSavingOffset = 0;
+	// Pass this to the adapter
+	TRAPD(err, iAdapter->QueueDispatchL(this));
+	if(err != KErrNone)
+		{
+		// Failed to queue adaptation, complete with error
+		SetRequestStatus(NULL);
+		TRequestStatus* statusPtr = &aStatus;
+		User::RequestComplete(statusPtr, err);
+		}
+
+	}
+
+/*
+ * 
+ * 
+ * @internalComponent
+ */
+void CSaaRtcAdaptation::UnsetWakeupAlarm(TRequestStatus& aStatus)
+	{
+	// If this adaptation is busy then complete with KErrInUse
+	if(Busy())
+		{
+		TRequestStatus* statusPtr = &aStatus;
+		User::RequestComplete(statusPtr, KErrInUse);
+		return;
+		}
+	// Set this request status
+	SetRequestStatus(&aStatus);
+	aStatus = KRequestPending;
+	// No outstand requests so set up command id
+	SetCommandId(StartupAdaptation::ECancelWakeupAlarm);
+	// No parameters to set to pass in
+	
+	// Pass this to the adapter
+	TRAPD(err, iAdapter->QueueDispatchL(this));
+	if(err != KErrNone)
+		{
+		// Failed to queue adaptation, complete with error
+		SetRequestStatus(NULL);
+		TRequestStatus* statusPtr = &aStatus;
+		User::RequestComplete(statusPtr, err);
+		}
+	}
+
+/*
+ * 
+ * 
+ * @internalComponent
+ */
+void CSaaRtcAdaptation::Cancel()
+	{
+	CancelRequest();
+	}
+	
+/*
+ * Constructs a new state adaptation object and associates it with aAdapter
+ * 
+ * @internalComponent
+ */
+CSaaRtcAdaptation::CSaaRtcAdaptation(CStartupAdaptationAdapter* aAdapter)
+: CAdaptationBase(aAdapter)
+	{
+
+	}
+
+/**
+ * See CAdaptationBase for description of method.
+ *  
+ * @internalComponent
+ */
+void CSaaRtcAdaptation::RequestComplete(const StartupAdaptation::TCommand __DEBUG_ONLY(aCommandId), TDesC8& aRetPckg)
+	{
+	DEBUGPRINT3A("SAA - Response received from adaptation with commandId: %d, expecting %d", aCommandId, CommandId());
+	__ASSERT_DEBUG(aCommandId == CommandId(), CLAYER_PANIC(ECLayerUnexpectedCommandResponse));
+	switch(CommandId())
+		{
+		case StartupAdaptation::EValidateRTCTime:
+			{
+			StartupAdaptation::TResponsePckg responsePckg;
+			responsePckg.Copy(aRetPckg);
+			// if responsePckg is KErrNone then the RTC is valid, otherwise it isn't valid, use this to set the value
+			TPckgBuf<TBool> booleanPckg(responsePckg() == KErrNone);
+			iReturnDes->Copy(booleanPckg);
+			// Null iReturnDes as it has no further use
+			iReturnDes = NULL;
+			CompleteRequestStatus(KErrNone);
+			break;
+			}
+		case StartupAdaptation::ESetWakeupAlarm:
+			{
+			StartupAdaptation::TResponsePckg responsePckg;
+			responsePckg.Copy(aRetPckg);
+			CompleteRequestStatus(responsePckg());
+			break;
+			}
+		case StartupAdaptation::ECancelWakeupAlarm:
+			// Always successful so nothing to check in aRetPckg
+			CompleteRequestStatus(KErrNone);
+			break;
+		default:
+			CLAYER_PANIC(ECLayerUnknownCommandResponse);
+			break;
+		}
+	}
+
+/**
+ * See CAdaptationBase for description of method.
+ *  
+ * @internalComponent
+ */
+TDesC8* CSaaRtcAdaptation::ParameterPckg()
+	{
+	TDesC8* ptr = NULL;
+	switch(CommandId())
+		{
+		case StartupAdaptation::EValidateRTCTime:
+			ptr = &iNullBuf;
+			break;
+		case StartupAdaptation::ESetWakeupAlarm:
+			ptr = &iWakeupAlarmPckg;
+			break;
+		case StartupAdaptation::ECancelWakeupAlarm:
+			ptr = &iNullBuf;
+			break;
+		default:
+			ptr = NULL;
+			break;
+		}
+	return ptr;
+	}