diff -r 000000000000 -r 4e1aa6a622a0 sysstatemgmt/systemstatereferenceplugins/clayer/src/saartcadaptation.cpp --- /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 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 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; + }