diff -r 000000000000 -r 0ce1b5ce9557 systemswstubs/hwrmstubplugins/src/LightPlugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/systemswstubs/hwrmstubplugins/src/LightPlugin.cpp Thu Jan 14 07:14:53 2010 +0200 @@ -0,0 +1,270 @@ +/* +* Copyright (c) 2002-2005 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: Hardware Resource Manager stub plugins light plugin +* implementation. +* +*/ + + +#include "LightPlugin.h" +#include +#include "PluginTimer.h" +#include "Trace.h" + +#ifdef PUBLISH_STATE_INFO +const TUid KPSUidHWResourceNotification = {0x101F7A01}; // HWRM private PS Uid +#endif // PUBLISH_STATE_INFO + +CLightPlugin* CLightPlugin::NewL() + { + CLightPlugin* self = new(ELeave) CLightPlugin(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +CLightPlugin::~CLightPlugin() + { + iTimers.ResetAndDestroy(); +#ifdef PUBLISH_STATE_INFO + for ( TInt i=0; i< KHWRMLightMaxTargets; i++ ) + { + iCmdProperty[i].Close(); + iDataProperty[i].Close(); + } + iIntensityProperty.Close(); + iSensitivityProperty.Close(); +#endif // PUBLISH_STATE_INFO + } + +CLightPlugin::CLightPlugin() + { + } + +void CLightPlugin::ConstructL() + { +#ifdef PUBLISH_STATE_INFO + TInt currentTarget(0x00010000); + for ( TInt i=0; i< KHWRMLightMaxTargets; i++ ) + { + RProperty::Define(KPSUidHWResourceNotification, (KHWRMTestLightCommand | currentTarget), RProperty::EInt); + RProperty::Define(KPSUidHWResourceNotification, (KHWRMTestLightDataPckg | currentTarget), RProperty::EByteArray, 512); + iCmdProperty[i].Attach(KPSUidHWResourceNotification, (KHWRMTestLightCommand | currentTarget)); + iDataProperty[i].Attach(KPSUidHWResourceNotification, (KHWRMTestLightDataPckg | currentTarget)); + currentTarget <<= 1; + } + + RProperty::Define(KPSUidHWResourceNotification, KHWRMTestLightIntensityValue, RProperty::EInt); + RProperty::Define(KPSUidHWResourceNotification, KHWRMTestLightSensitivityValue, RProperty::EInt); + iIntensityProperty.Attach(KPSUidHWResourceNotification, KHWRMTestLightIntensityValue); + iSensitivityProperty.Attach(KPSUidHWResourceNotification, KHWRMTestLightSensitivityValue); +#endif // PUBLISH_STATE_INFO + } + + +void CLightPlugin::ProcessCommandL( const TInt aCommandId, + const TUint8 aTransId, +#ifdef PUBLISH_STATE_INFO + TDesC8& aData ) +#else + TDesC8& /*aData*/ ) +#endif // PUBLISH_STATE_INFO + { + COMPONENT_TRACE((_L("HWRM LightPlugin: Processing command: 0x%x, TransId: 0x%x"), aCommandId, aTransId)); + +#ifdef PUBLISH_STATE_INFO + TInt targetMask(0); +#endif // PUBLISH_STATE_INFO + switch ( aCommandId ) + { + case HWRMLightCommand::ELightsOnCmdId: + { + COMPONENT_TRACE(_L("HWRM LightPlugin: Processed ELightsOnCmdId")); +#ifdef PUBLISH_STATE_INFO + HWRMLightCommand::TLightsOnCmdPackage pckg; + pckg.Copy(aData); + HWRMLightCommand::TLightsOnData data = pckg(); + if ( data.iIntensity == KHWRMDefaultIntensity ) + { + data.iIntensity = iDefaultIntensity; + } + + targetMask = data.iTarget << 16; + HWRMLightCommand::TLightsOnCmdPackage pckg2(data); + PublishStateInfo(targetMask, aCommandId, pckg2); +#endif // PUBLISH_STATE_INFO + } + break; + case HWRMLightCommand::ELightsOnSensorCmdId: + { + COMPONENT_TRACE(_L("HWRM LightPlugin: Processed ELightsOnSensorCmdId")); +#ifdef PUBLISH_STATE_INFO + HWRMLightCommand::TLightsOnSensorCmdPackage pckg; + pckg.Copy(aData); + HWRMLightCommand::TLightsOnSensorData data = pckg(); + + targetMask = data.iTarget << 16; + PublishStateInfo(targetMask, aCommandId, pckg); +#endif // PUBLISH_STATE_INFO + } + break; + case HWRMLightCommand::ELightsBlinkCmdId: + { + COMPONENT_TRACE(_L("HWRM LightPlugin: Processed ELightsBlinkCmdId")); +#ifdef PUBLISH_STATE_INFO + HWRMLightCommand::TLightsBlinkCmdPackage pckg; + pckg.Copy(aData); + HWRMLightCommand::TLightsBlinkData data = pckg(); + if ( data.iIntensity == KHWRMDefaultIntensity ) + { + data.iIntensity = iDefaultIntensity; + } + + targetMask = data.iTarget << 16; + HWRMLightCommand::TLightsBlinkCmdPackage pckg2(data); + PublishStateInfo(targetMask, aCommandId, pckg2); +#endif // PUBLISH_STATE_INFO + } + break; + case HWRMLightCommand::ELightsOffCmdId: + { + COMPONENT_TRACE(_L("HWRM LightPlugin: Processed ELightsOffCmdId")); +#ifdef PUBLISH_STATE_INFO + HWRMLightCommand::TLightsOffCmdPackage pckg; + pckg.Copy(aData); + HWRMLightCommand::TLightsOffData data = pckg(); + + targetMask = data.iTarget << 16; + PublishStateInfo(targetMask, aCommandId, pckg); +#endif // PUBLISH_STATE_INFO + } + break; + case HWRMLightCommand::ESetLightsIntensityCmdId: + { + COMPONENT_TRACE(_L("HWRM LightPlugin: Processed ESetLightsIntensityCmdId")); +#ifdef PUBLISH_STATE_INFO + HWRMLightCommand::TLightsIntensityCmdPackage pckg; + pckg.Copy(aData); + HWRMLightCommand::TLightsIntensityData data = pckg(); + + iDefaultIntensity = data.iIntensity; + COMPONENT_TRACE( (_L("HWRM LightPlugin: Intensity: %d"), iDefaultIntensity)); + + // Currently only general intensity is supported, so ignore target parameter, + // it is always all supported targets + iIntensityProperty.Set(iDefaultIntensity); + +#endif // PUBLISH_STATE_INFO + } + break; + case HWRMLightCommand::ESetLightsSensorSensitivityCmdId: + { + COMPONENT_TRACE(_L("HWRM LightPlugin: Processed ESetLightsSensorSensitivityCmdId")); +#ifdef PUBLISH_STATE_INFO + HWRMLightCommand::TLightsSensorSensitivityCmdPackage pckg; + pckg.Copy(aData); + TInt data = pckg(); + + iSensitivityProperty.Set(data); +#endif // PUBLISH_STATE_INFO + } + break; + default : + { + COMPONENT_TRACE((_L("HWRM LightPlugin: Unknown Command: 0x%x"), aCommandId)); + } + break; + } + TInt retval(KErrNone); + TInt timeout(500); // microseconds + + // create new timer + CPluginTimer* timer = CPluginTimer::NewL(timeout, iResponseCallback, aCommandId, aTransId, retval, this); + CleanupStack::PushL(timer); + iTimers.AppendL(timer); + CleanupStack::Pop(timer); + } + +#ifdef PUBLISH_STATE_INFO +void CLightPlugin::PublishStateInfo(TInt aTargetMask, + const TInt aCommandId, + TDesC8& aData ) + { + // publish + TInt currentTarget(0x10000); + for ( TInt i=0; i< KHWRMLightMaxTargets; i++ ) + { + if ( aTargetMask & currentTarget ) + { + iCmdProperty[i].Set(aCommandId); + iDataProperty[i].Set(aData); + } + currentTarget <<= 1; + } + } +#endif // PUBLISH_STATE_INFO + +void CLightPlugin::CancelCommandL( const TUint8 aTransId, +#if defined(_DEBUG) && defined(COMPONENT_TRACE_FLAG) + const TInt aCommandId) +#else + const TInt /*aCommandId*/) +#endif + { + COMPONENT_TRACE((_L("HWRM LightPlugin: Cancelling command: 0x%x, TransId: 0x%x"), aCommandId, aTransId)); + COMPONENT_TRACE((_L("HWRM LightPlugin: Cancelling command - iTimers.Count(): %d "), iTimers.Count())); + + for( TInt i = 0; i < iTimers.Count(); i++ ) + { + if ( iTimers[i]->TransId() == aTransId ) + { + delete iTimers[i]; + iTimers.Remove(i); + COMPONENT_TRACE((_L("HWRM LightPlugin: Cancelling command - Removed command: 0x%x, TransId: 0x%x"), aCommandId, aTransId)); + break; + } + } + } + +void CLightPlugin::GenericTimerFired(MHWRMPluginCallback* aService, + TInt aCommandId, + TUint8 aTransId, + TInt aRetVal) + { + COMPONENT_TRACE((_L("HWRM LightPlugin: GenericTimerFired (0x%x, 0x%x, %d)"), aCommandId, aTransId, aRetVal)); + + __ASSERT_ALWAYS(aService != NULL, User::Invariant() ); + + HWRMLightCommand::TErrorCodeResponsePackage retvalPackage(aRetVal); + + TRAPD(err, aService->ProcessResponseL(aCommandId, aTransId, retvalPackage)); + + if ( err != KErrNone ) + { + COMPONENT_TRACE((_L("HWRM LightPlugin: Error in ProcessResponseL: %d"), err)); + } + + // delete obsolete timers + for( TInt i = (iTimers.Count()-1); i > -1 ; i-- ) + { + if ( !iTimers[i]->IsActive() ) + { + delete iTimers[i]; + iTimers.Remove(i); + COMPONENT_TRACE((_L("HWRM LightPlugin: GenericTimerFired - Removed obsolete timer"))); + } + } + } +