diff -r 000000000000 -r 4e1aa6a622a0 resourcemgmt/hwrmtargetmodifierplugin/src/hwrmdefaultlighttargetmodifierplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/resourcemgmt/hwrmtargetmodifierplugin/src/hwrmdefaultlighttargetmodifierplugin.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,218 @@ +/* +* Copyright (c) 2006 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 Default Light Target Modifier Plugin +* implementation file +* +*/ + + +#include +#include +#include +#include +#include "hwrmdefaultlighttargetmodifierplugin.h" +#include "Trace.h" + +// CONSTANTS + +// Value for all defined non-custom targets. Used to determine system target. +const TInt KHWRMNonCustomTargets(CHWRMLight::EPrimaryDisplay | + CHWRMLight::EPrimaryKeyboard | + CHWRMLight::ESecondaryDisplay | + CHWRMLight::ESecondaryKeyboard ); + +// Values for switch IO group and switch functions. These values are licensee specific. +const TInt KHWSwitchGroup( 29 ); +const TInt KHWSwitchGrip( 2 ); + +// ----------------------------------------------------------------------------- +// CHWRMDefaultLightTargetModifierPlugin::NewL +// ----------------------------------------------------------------------------- +// +CHWRMDefaultLightTargetModifierPlugin* CHWRMDefaultLightTargetModifierPlugin::NewL() + { + CHWRMDefaultLightTargetModifierPlugin* self = new(ELeave) CHWRMDefaultLightTargetModifierPlugin(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CHWRMDefaultLightTargetModifierPlugin::~CHWRMDefaultLightTargetModifierPlugin +// ----------------------------------------------------------------------------- +// +CHWRMDefaultLightTargetModifierPlugin::~CHWRMDefaultLightTargetModifierPlugin() + { + } + +// ----------------------------------------------------------------------------- +// CHWRMDefaultLightTargetModifierPlugin::CHWRMDefaultLightTargetModifierPlugin +// ----------------------------------------------------------------------------- +// +CHWRMDefaultLightTargetModifierPlugin::CHWRMDefaultLightTargetModifierPlugin() + { + } + +// ----------------------------------------------------------------------------- +// CHWRMDefaultLightTargetModifierPlugin::ConstructL +// +// Check relevant features initial states (if any) for target modification. +// +// Customer specific lights related initialization needed at startup +// can be done in ConstructL of customer implementation. +// ----------------------------------------------------------------------------- +// +void CHWRMDefaultLightTargetModifierPlugin::ConstructL() + { + FeatureManager::InitializeLibL(); + iCoverDisplaySupported = FeatureManager::FeatureSupported( KFeatureIdCoverDisplay ); + iGripSupported = !(FeatureManager::FeatureSupported( KFeatureIdKeypadNoSlider )); + FeatureManager::UnInitializeLib(); + + TInt err( KErrNone ); + TInt status; + + err = RProperty::Get( KPSUidHWRM, KHWRMGripStatus, status ); + if( err == KErrNone && status == EPSHWRMGripStatusUninitialized ) + { + // Initialize grip status of HWRM Device Switch API + err = UserSvr::HalFunction( KHWSwitchGroup, KHWSwitchGrip, &status, 0 ); + if( err == KErrNone) + { + RProperty::Set( KPSUidHWRM, KHWRMGripStatus, status ? EPSHWRMGripOpen : EPSHWRMGripClosed ); + } + COMPONENT_TRACE( ( _L( "CHWRMDefaultLightTargetModifierPlugin::ConstructL() - grip, err: %d, status: %d" ), + err, status ) ); + } + } + +// ----------------------------------------------------------------------------- +// CHWRMDefaultLightTargetModifierPlugin::ModifyTargetL +// +// Default implementation provides handling for devices that have one of the +// following supported light target configurations: +// - Primary display + Primary keyboard, no flip +// - Primary and secondary display + Primary (and optionally secondary) keyboard +// - Requires KFeatureIdCoverDisplay feature to be defined +// - Either of the above with grip that covers primary keyboard +// - Requires KFeatureIdKeypadNoSlider feature to not be defined +// +// Default implementation will not leave. +// ----------------------------------------------------------------------------- +// +TInt CHWRMDefaultLightTargetModifierPlugin::ModifyTargetL( TInt aTarget ) + { + COMPONENT_TRACE((_L("CHWRMDefaultLightTargetModifierPlugin::ModifyTargetL(aTarget: 0x%x)"), aTarget )); + + TInt modifiedTarget(aTarget); + + // Figure out the active targets + TInt err(KErrNone); + TInt gripOpen(EPSHWRMGripOpen); + + if ( iGripSupported ) + { + err = RProperty::Get( KPSUidHWRM, KHWRMGripStatus, gripOpen ); + if ( err != KErrNone ) + { + gripOpen = EPSHWRMGripOpen; + COMPONENT_TRACE( ( _L( "CHWRMDefaultLightTargetModifierPlugin::ModifyTargetL - KHWRMGripStatus reading failed: %d " ), err ) ); + } + } + + if ( iCoverDisplaySupported ) + { + TInt flipOpen(EPSHWRMFlipOpen); + err = RProperty::Get(KPSUidHWRM, KHWRMFlipStatus, flipOpen); // returns 0 or 1, no enums defined + + if ( err == KErrNone ) + { + if ( flipOpen == EPSHWRMFlipOpen ) + { + if ( gripOpen == EPSHWRMGripOpen ) + { + modifiedTarget &= ~CHWRMLight::ESecondaryDisplayAndKeyboard; + COMPONENT_TRACE( ( _L( "CHWRMDefaultLightTargetModifierPlugin::ModifyTargetL - Flip and grip open, removed secondary display and keyboard" ) ) ); + } + else + { + modifiedTarget &= ~(CHWRMLight::EPrimaryKeyboard | CHWRMLight::ESecondaryDisplayAndKeyboard); + COMPONENT_TRACE( ( _L( "CHWRMDefaultLightTargetModifierPlugin::ModifyTargetL - Flip open, grip closed, removed primary keyboard and secondary display and keyboard" ) ) ); + } + } + else + { + // If cover UI and flip closed: Remove all primary components + modifiedTarget &= ~CHWRMLight::EPrimaryDisplayAndKeyboard; + COMPONENT_TRACE( ( _L( "CHWRMDefaultLightTargetModifierPlugin::ModifyTargetL - Flip closed, removed primary display and keyboard" ) ) ); + } + } + else + { + COMPONENT_TRACE( ( _L( "CHWRMDefaultLightTargetModifierPlugin::ModifyTargetL - KHWRMFlipStatus reading failed: %d, no further modification to target " ), err ) ); + } + } + else + { + if ( gripOpen == EPSHWRMGripOpen ) + { + TInt flipOpen(EPSHWRMFlipOpen); + err = RProperty::Get(KPSUidHWRM, KHWRMFlipStatus, flipOpen); // returns 0 or 1, no enums defined + if ( err == KErrNone ) + { + if ( flipOpen == EPSHWRMFlipClosed ) + { + // Removing the primary keyboard from the light target of a device with + // the primary keyboard hidden under a slider which can generate flip events. + modifiedTarget &= ~CHWRMLight::EPrimaryKeyboard; + COMPONENT_TRACE( ( _L( "CHWRMDefaultLightTargetModifierPlugin::ModifyTargetL - Flip closed, removed primary keyboard" ) ) ); + } + else + { + COMPONENT_TRACE( ( _L( "CHWRMDefaultLightTargetModifierPlugin::ModifyTargetL - Grip open, no further modification to target" ) ) ); + } + } + else + { + COMPONENT_TRACE( ( _L( "CHWRMDefaultLightTargetModifierPlugin::ModifyTargetL - KHWRMFlipStatus reading failed: %d" ), err ) ); + } + } + else + { + modifiedTarget &= ~CHWRMLight::EPrimaryKeyboard; + COMPONENT_TRACE( ( _L( "CHWRMDefaultLightTargetModifierPlugin::ModifyTargetL - Grip closed, removed primary keyboard" ) ) ); + } + } + + COMPONENT_TRACE((_L("CHWRMDefaultLightTargetModifierPlugin::ModifyTargetL - Return: 0x%x (Original target: 0x%x)"), modifiedTarget, aTarget)); + + return modifiedTarget; + } + +// ----------------------------------------------------------------------------- +// CHWRMDefaultLightTargetModifierPlugin::GetFullSystemTarget +// +// Assume all supported non-custom targets are system targets +// in default implementation. +// In customer implementations KHWRMNonCustomTargets needs to be replaced +// with product specific mask or logic to determine a mask. +// ----------------------------------------------------------------------------- +// +TInt CHWRMDefaultLightTargetModifierPlugin::GetFullSystemTarget() + { + return KHWRMNonCustomTargets; + } + +