--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcemgmt/hwresourcesmgr/server/src/HWRMServer.cpp Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,757 @@
+// Copyright (c) 2006-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 FILES
+#include <ecom/ecom.h>
+#include <centralrepository.h>
+#include <featureuids.h>
+#include "HWRMClient.h" // THWRMResourceType
+#include "HWRMClientServer.h"
+#include "HWRMVibraClientServer.h"
+#include "HWRMLightClientServer.h"
+#include "HWRMPowerClientServer.h"
+#include "HWRMFmTxClientServer.h"
+#include "HWRMServer.h"
+#include "HWRMSession.h"
+#include "HWRMConfiguration.h"
+#include "HWRMPluginHandler.h"
+#include "HWRMVibraCommands.h"
+#include "HWRMLightCommands.h"
+#include "HWRMPowerCommands.h"
+#include "HWRMFmTxCommands.h"
+#include "HWRMtrace.h"
+#include "HWRMVibraCommonService.h"
+#include "HWRMVibraCommonData.h"
+#include "HWRMLightCommonData.h"
+#include "HWRMPowerCommonData.h"
+#include "HWRMFmTxCommonData.h"
+#include "HWRMFmTxStateUtility.h"
+#include "HWRMReservationHandler.h"
+#include "HWRMPolicy.h"
+#include "HWRMPowerStatePluginHandler.h"
+#include "HWRMPrivatePSKeys.h"
+#include "HWRMDomainPSKeys.h"
+#include "HWRMPrivateCRKeys.h"
+#include "HWRMFeatureMgr.h"
+
+// EXTERNAL DATA STRUCTURES
+// None
+
+// EXTERNAL FUNCTION PROTOTYPES
+// None
+
+// CONSTANTS
+
+// ------------------- Policy Server Security Setup ----------------------
+
+const TUint KRangeCount = 12;
+
+const TInt KIPCRanges[KRangeCount] =
+ {
+ EHWRMCreateVibraService, // first createSevice IPC (==0)
+ EHWRMEndOfCreateServiceOpCodes,
+ EHWRMLightsOn, // first light IPC (==1000)
+ EHWRMEndOfLightOpCodes,
+ EHWRMStartVibraDefaultIntensity, // first vibra IPC (==2000)
+ EHWRMEndOfVibraOpCodes,
+ EHWRMGetBatteryInfo, // first power IPC (==3000)
+ EHWRMEndOfPowerOpCodes,
+ EHWRMFmTxOn, // first fmTx IPC (==4000)
+ EHWRMFmTxSetRdsPty,
+ EHWRMFmTxReserve,
+ EHWRMEndOfFmTxOpCodes
+ };
+
+/**
+ Specifies the appropriate action to take for each range in KRanges.
+ The n:th element of KElementsIndex specifies the appropriate action to take for the n:th range in KRanges.
+*/
+
+#ifdef HWRM_FMTX_POLICY_CHECKING_DISABLED
+const TUint8 KElementsIndex[KRangeCount] =
+ {
+ CPolicyServer::EAlwaysPass,
+ CPolicyServer::ENotSupported,
+ CPolicyServer::EAlwaysPass,
+ CPolicyServer::ENotSupported,
+ CPolicyServer::EAlwaysPass,
+ CPolicyServer::ENotSupported,
+ CPolicyServer::EAlwaysPass,
+ CPolicyServer::ENotSupported,
+ CPolicyServer::EAlwaysPass,
+ CPolicyServer::EAlwaysPass,
+ CPolicyServer::EAlwaysPass,
+ CPolicyServer::ENotSupported
+ };
+
+const CPolicyServer::TPolicyElement KHWRMPolicyElements[] ={{}};
+
+#else
+const TUint8 KElementsIndex[KRangeCount] =
+ {
+ CPolicyServer::EAlwaysPass,
+ CPolicyServer::ENotSupported,
+ CPolicyServer::EAlwaysPass,
+ CPolicyServer::ENotSupported,
+ CPolicyServer::EAlwaysPass,
+ CPolicyServer::ENotSupported,
+ CPolicyServer::EAlwaysPass,
+ CPolicyServer::ENotSupported,
+ 0,
+ 1,
+ CPolicyServer::EAlwaysPass,
+ CPolicyServer::ENotSupported
+ };
+
+/**
+ Array containing the different security checks performed by this server
+ */
+const CPolicyServer::TPolicyElement KHWRMPolicyElements[] =
+ {
+ {_INIT_SECURITY_POLICY_C1(ECapabilityMultimediaDD), CPolicyServer::EFailClient},
+ {_INIT_SECURITY_POLICY_C2(ECapabilityMultimediaDD, ECapabilityWriteUserData), CPolicyServer::EFailClient}
+ };
+#endif //HWRM_FMTX_POLICY_CHECKING_DISABLED
+
+/**
+ Setup a security policy.
+*/
+const CPolicyServer::TPolicy KHWRMServerPolicy =
+ {
+ CPolicyServer::EAlwaysPass, // connection attempts always pass
+ KRangeCount,
+ KIPCRanges,
+ KElementsIndex,
+ KHWRMPolicyElements
+ };
+
+// MACROS
+// None
+
+// LOCAL CONSTANTS AND MACROS
+_LIT( KPanicCategory, "HWRMServer" );
+const TInt KDefaultPluginTimeout = 10000000;
+
+// MODULE DATA STRUCTURES
+// None
+
+// LOCAL FUNCTION PROTOTYPES
+// None
+
+// FORWARD DECLARATIONS
+// None
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CHWRMServer::CHWRMServer
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CHWRMServer::CHWRMServer( const TInt aPriority, const TServerType aType )
+ : CPolicyServer( aPriority, KHWRMServerPolicy, aType ),
+ iPluginTimeout(KDefaultPluginTimeout)
+ {
+ // Nothing to do
+ }
+
+// -----------------------------------------------------------------------------
+// CHWRMServer::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CHWRMServer::ConstructL()
+ {
+ COMPONENT_TRACE1(_L( "HWRM Server - CHWRMServer::ConstructL()" ) );
+
+ TInt err(KErrNone);
+ TInt chargerBlockVibra(ETrue);
+ TInt chargerBlockFeedbackVibra(ETrue);
+
+ // Open settings repository and get necessary values
+ CRepository* repository = NULL;
+ TRAP( err, repository = CRepository::NewL(KCRUidHWRMSettings) );
+
+ if ( err == KErrNone )
+ {
+ TInt value(0);
+ err = repository->Get(KHWRMPluginTimeout, value);
+ if ( err == KErrNone )
+ {
+ if ( value > 0 )
+ {
+ iPluginTimeout = value*1000; // Value is in milliseconds
+ }
+ }
+ else
+ {
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::ConstructL - KHWRMPluginTimeout value getting failed: %d, using default" ), err);
+ }
+
+ err = repository->Get(KHWRMInternalSettings, value);
+ if ( err == KErrNone )
+ {
+ chargerBlockVibra = (value & KHWRMInternalSettingsChargerBlockVibra) ? ETrue : EFalse;
+ chargerBlockFeedbackVibra = (value & KHWRMInternalSettingsChargerBlockFeedback) ? ETrue : EFalse;
+ }
+ else
+ {
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::ConstructL - KHWRMInternalSettings value getting failed: %d, using default" ), err );
+ }
+ }
+ else
+ {
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::ConstructL - KCRUidHWRMSettings repository opening failed: %d" ), err);
+ }
+
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::ConstructL - pluginTimeout: %d" ), iPluginTimeout);
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::ConstructL - chargerBlockVibra: %d" ), chargerBlockVibra);
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::ConstructL - chargerBlockFeedbackVibra: %d" ), chargerBlockFeedbackVibra);
+
+ // Read priority setting and set HWRM priority accordingly
+ TInt priority(0);
+ err = repository->Get(KHWRMPriority, priority);
+ if ( err == KErrNone )
+ {
+ TProcessPriority procPrio( static_cast<TProcessPriority>(priority) );
+ COMPONENT_TRACE3(_L("HWRM Server - CHWRMServer::ConstructL - current priority: %d \
+ new priority %d" ), RProcess().Priority(), procPrio);
+ RProcess().SetPriority( procPrio );
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::ConstructL - priority now: %d" ), RProcess().Priority() );
+ }
+
+ // Cleanup repository
+ delete repository;
+ repository = NULL;
+
+ // Create light handlers and common data (vibra ones are created when vibra is first needed)
+ TRAP(err, iLightPluginHandler = CHWRMPluginHandler::NewL( KHWRMLightApiEComMatch, iPluginTimeout ));
+ if ( err != KErrNone )
+ {
+ // Light not supported by the device, set handler to null
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::ConstructL() - Light not supported, error: %d" ), err );
+ iLightPluginHandler = NULL;
+ }
+ else
+ {
+ TRAP(err, iLightReservationHandler = CHWRMReservationHandler::NewL( KHWRMLightMaxTargets, KLightsPolicyFilename ));
+ if ( err != KErrNone )
+ {
+ // Light not supported by the device, set handler to null
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::ConstructL() - iLightReservationHandler creation, error: %d" ), err );
+ iLightReservationHandler = NULL;
+ }
+ else
+ {
+ TRAP(err, iLightCommonData = CHWRMLightCommonData::NewL(iLightPluginHandler, iLightReservationHandler));
+ if ( err != KErrNone )
+ {
+ // Light not supported by the device, set common data to null
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::ConstructL() - CHWRMLightCommonData creation error: %d" ), err );
+ iLightCommonData = NULL;
+ }
+ }
+ }
+
+ // Initialize vibra blocking key
+ User::LeaveIfError(RProperty::Define(KPSUidHWRMPrivate, KHWRMInternalVibraBlocked, RProperty::EInt, KNoCapability, KWriteDeviceDataPolicy));
+
+ // Initialize keys of HWRM Device Switch API
+ User::LeaveIfError(RProperty::Define( KPSUidHWRM, KHWRMTwistStatus, RProperty::EInt, KAlwaysPassPolicy, KWriteDeviceDataPolicy ));
+ RProperty::Set( KPSUidHWRM, KHWRMTwistStatus, EPSHWRMTwistStatusUninitialized );
+ User::LeaveIfError(RProperty::Define( KPSUidHWRM, KHWRMFlipStatus, RProperty::EInt, KAlwaysPassPolicy, KWriteDeviceDataPolicy ));
+ RProperty::Set( KPSUidHWRM, KHWRMFlipStatus, EPSHWRMFlipStatusUninitialized );
+ User::LeaveIfError(RProperty::Define( KPSUidHWRM, KHWRMGripStatus, RProperty::EInt, KAlwaysPassPolicy, KWriteDeviceDataPolicy ));
+ RProperty::Set( KPSUidHWRM, KHWRMGripStatus, EPSHWRMGripStatusUninitialized );
+
+ // Initialize FmTx common data that is needed immediately like P&S keys etc
+ TRAP( err, iFmTxCommonData = CHWRMFmTxCommonData::NewL() );
+ if ( err != KErrNone )
+ {
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::ConstructL() - FmTx common data, error: %d" ), err );
+ iFmTxCommonData = NULL;
+ }
+
+ // create power state plugin
+ TRAP( err, iPowerStatePluginHandler = CHWRMPowerStatePluginHandler::NewL(chargerBlockVibra, chargerBlockFeedbackVibra) );
+ if ( err != KErrNone )
+ {
+ // Power state API not supported by the device, set handler to null
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::ConstructL() - Power state not supported, error: %d" ), err );
+ iPowerStatePluginHandler = NULL;
+ }
+
+ // Set server process system critical
+ User::SetProcessCritical(User::ESystemPermanent);
+
+ // Add server to active scheduler
+ StartL( KServerProcessName );
+
+ COMPONENT_TRACE1(_L( "HWRM Server - CHWRMServer::ConstructL - return" ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CHWRMServer::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CHWRMServer* CHWRMServer::NewL(const TInt aPriority)
+ {
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::NewL(0x%x)" ), aPriority );
+
+ CHWRMServer* self = CHWRMServer::NewLC(aPriority);
+ CleanupStack::Pop();
+
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::NewL - return 0x%x" ), self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CHWRMServer::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CHWRMServer* CHWRMServer::NewLC(const TInt aPriority)
+ {
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::NewLC(0x%x)" ), aPriority );
+
+ CHWRMServer* self = new( ELeave ) CHWRMServer(aPriority, EUnsharableSessions);
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::NewLC - return 0x%x" ), self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CHWRMServer::~CHWRMServer()
+ {
+ COMPONENT_TRACE1(_L( "HWRM Server - CHWRMServer::~CHWRMServer()" ) );
+
+ // Close all open sessions
+ CHWRMSession* session=NULL;
+ iSessionIter.SetToFirst();
+ while((session = static_cast<CHWRMSession*>(iSessionIter++)) != NULL)
+ {
+ delete session;
+ }
+
+ // Delete plugin handlers
+ delete iPowerStatePluginHandler;
+ delete iVibraPluginHandler;
+ delete iLightPluginHandler;
+ delete iPowerPluginHandler;
+ delete iFmTxPluginHandler;
+ delete iFmTxWatcherPluginHandler;
+
+ // Delete reservation handlers
+ delete iVibraReservationHandler;
+ delete iLightReservationHandler;
+ delete iFmTxReservationHandler;
+
+ // Delete vibra common service
+ delete iVibraCommonService;
+
+ // Delete common data
+ delete iVibraCommonData;
+ delete iLightCommonData;
+ delete iPowerCommonData;
+ delete iFmTxStateUtility;
+ delete iFmTxCommonData;
+
+ // Signal final closure of ecom session
+ REComSession::FinalClose();
+
+ COMPONENT_TRACE1(_L( "HWRM Server - CHWRMServer::~CHWRMServer - return") );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CHWRMServer::NewSessionL
+// Creates a new CSession2
+// -----------------------------------------------------------------------------
+//
+CSession2* CHWRMServer::NewSessionL( const TVersion& aVersion,
+ const RMessage2& /*aMessage*/ ) const
+ {
+#if defined(_DEBUG) && defined(COMPONENT_TRACE_FLAG)
+ TVersionName name = aVersion.Name();
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::NewSessionL(%S)" ), &name);
+#endif
+
+ if ( !User::QueryVersionSupported( TVersion( KServerVersionMajor,
+ KServerVersionMinor,
+ KServerVersionBuild ),
+ aVersion ) )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ CSession2* session = CHWRMSession::NewL(*const_cast<CHWRMServer*>(this));
+
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::NewSessionL - return 0x%x" ), session );
+
+ return( session );
+ }
+
+// -----------------------------------------------------------------------------
+// CHWRMServer::PanicClient
+// RMessage2::Panic() also completes the message. This is:
+// (a) important for efficient cleanup within the kernel
+// (b) a problem if the message is completed a second time
+// -----------------------------------------------------------------------------
+//
+void CHWRMServer::PanicClient(const RMessage2& aMessage,THWRMPanic aPanic)
+ {
+ COMPONENT_TRACE3(_L( "HWRM Server - CHWRMServer::PanicClient(0x%x, 0x%x)" ), aMessage.Handle(), aPanic);
+
+ aMessage.Panic(KPanicCategory,aPanic);
+
+ COMPONENT_TRACE1(_L( "HWRM Server - CHWRMServer::PanicClient - return" ) );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CHWRMServer::GetPluginHandler
+// Returns pointer to correct plugin handler.
+// In case resource is not supported, returns NULL
+// -----------------------------------------------------------------------------
+//
+CHWRMPluginHandler* CHWRMServer::GetPluginHandler(THWRMResourceType aType)
+ {
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::GetPluginHandler(0x%x)" ), aType );
+
+ CHWRMPluginHandler* retval = NULL;
+
+ switch(aType)
+ {
+ case HWRMResourceTypeVibra:
+ if ( !iVibraInitAttempted )
+ {
+ InitVibra();
+ }
+ retval = iVibraPluginHandler;
+ break;
+ case HWRMResourceTypeLight:
+ retval = iLightPluginHandler;
+ break;
+ case HWRMResourceTypePower:
+ if ( !iPowerInitAttempted )
+ {
+ InitPower();
+ }
+ retval = iPowerPluginHandler;
+ break;
+ case HWRMResourceTypeFmTx:
+ if ( !iFmTxInitAttempted )
+ {
+ TRAPD( initErr, InitFmTxL() );
+ if ( initErr != KErrNone )
+ {
+ COMPONENT_TRACE2( _L("HWRM Server - CHWRMServer::InitFmTxL() error = %d"), initErr );
+ }
+ }
+ retval = iFmTxPluginHandler;
+ break;
+ case HWRMResourceTypeFmTxWatcher:
+ retval = iFmTxWatcherPluginHandler;
+ break;
+ default:
+ // invalid type, just break (i.e. return NULL)
+ break;
+ }
+
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::GetPluginHandler - return 0x%x" ), retval );
+
+ return retval;
+ }
+
+// -----------------------------------------------------------------------------
+// CHWRMServer::GetReservationHandler
+// Returns pointer to correct reservation handler.
+// In case resource is not supported, returns NULL
+// -----------------------------------------------------------------------------
+//
+CHWRMReservationHandler* CHWRMServer::GetReservationHandler(THWRMResourceType aType)
+ {
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::GetReservationHandler(0x%x)" ), aType );
+
+ CHWRMReservationHandler* retval = NULL;
+
+ switch(aType)
+ {
+ case HWRMResourceTypeVibra:
+ retval = iVibraReservationHandler;
+ break;
+ case HWRMResourceTypeLight:
+ retval = iLightReservationHandler;
+ break;
+ case HWRMResourceTypeFmTx:
+ retval = iFmTxReservationHandler;
+ break;
+ default:
+ // invalid type, just break (i.e. return NULL)
+ break;
+ }
+
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::GetReservationHandler - return 0x%x" ), retval );
+
+ return retval;
+ }
+
+// -----------------------------------------------------------------------------
+// CHWRMServer::GetVibraCommonService
+// Returns pointer to Vibra common service used to handle overlapping vibration
+// requests from all sessions.
+// -----------------------------------------------------------------------------
+//
+CHWRMVibraCommonService* CHWRMServer::GetVibraCommonService()
+ {
+ COMPONENT_TRACE1(_L( "HWRM Server - CHWRMServer::GetVibraCommonService()" ));
+
+ CHWRMVibraCommonService* retval = iVibraCommonService;
+
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::GetVibraCommonService - return 0x%x" ), retval );
+
+ return retval;
+ }
+
+// -----------------------------------------------------------------------------
+// CHWRMServer::GetVibraCommonData
+// Returns pointer to Vibra common data
+// -----------------------------------------------------------------------------
+//
+CHWRMVibraCommonData* CHWRMServer::GetVibraCommonData()
+ {
+ COMPONENT_TRACE1(_L( "HWRM Server - CHWRMServer::GetVibraCommonData()" ));
+
+ CHWRMVibraCommonData* retval = iVibraCommonData;
+
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::GetVibraCommonData - return 0x%x" ), retval );
+
+ return retval;
+ }
+// -----------------------------------------------------------------------------
+// CHWRMServer::GetLightCommonData
+// Returns pointer to Light common data
+// -----------------------------------------------------------------------------
+//
+CHWRMLightCommonData* CHWRMServer::GetLightCommonData()
+ {
+ COMPONENT_TRACE1(_L( "HWRM Server - CHWRMServer::GetLightCommonData()" ));
+
+ CHWRMLightCommonData* retval = iLightCommonData;
+
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::GetLightCommonData - return 0x%x" ), retval );
+
+ return retval;
+ }
+
+// -----------------------------------------------------------------------------
+// CHWRMServer::GetPowerCommonData
+// Returns pointer to Power common data
+// -----------------------------------------------------------------------------
+//
+CHWRMPowerCommonData* CHWRMServer::GetPowerCommonData()
+ {
+ COMPONENT_TRACE1(_L( "HWRM Server - CHWRMServer::GetPowerCommonData()" ));
+
+ CHWRMPowerCommonData* retval = iPowerCommonData;
+
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::GetPowerCommonData - return 0x%x" ), retval );
+
+ return retval;
+ }
+
+// -----------------------------------------------------------------------------
+// CHWRMServer::GetFmTxCommonData
+// Returns pointer to FM Tx common data
+// -----------------------------------------------------------------------------
+//
+CHWRMFmTxCommonData* CHWRMServer::GetFmTxCommonData()
+ {
+ COMPONENT_TRACE1( _L( "HWRM Server - CHWRMServer::GetFmTxCommonData()" ) );
+
+ CHWRMFmTxCommonData* retval = iFmTxCommonData;
+
+ COMPONENT_TRACE2( _L( "HWRM Server - CHWRMServer::GetFmTxCommonData - return 0x%x" ), retval );
+
+ return retval;
+ }
+
+// -----------------------------------------------------------------------------
+// CHWRMServer::InitVibra
+// Initialises vibra
+// -----------------------------------------------------------------------------
+//
+void CHWRMServer::InitVibra()
+ {
+ if ( !iVibraInitAttempted )
+ {
+ iVibraInitAttempted = ETrue;
+ TInt err;
+
+ //The feature UID NFeature::KVibra is defined in featureuids.h
+ TBool vibraSupported = HWRMFeatureMgr::IsFeatureSupported(NFeature::KVibra);
+
+ if ( vibraSupported )
+ {
+ TRAP(err, iVibraPluginHandler = CHWRMPluginHandler::NewL( KHWRMVibraApiEComMatch, iPluginTimeout ));
+ if ( err != KErrNone )
+ {
+ // Vibra not supported by the device, set handler to null
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::InitVibra() - Vibra not supported, error: %d" ), err );
+ iVibraPluginHandler = NULL;
+ }
+ else
+ {
+ TRAP(err, iVibraReservationHandler = CHWRMReservationHandler::NewL( KHWRMVibraMaxTargets, KVibraPolicyFilename ));
+ if ( err != KErrNone )
+ {
+ // Vibra not supported by the device, set handler to null
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::InitVibra() - iVibraReservationHandler creation, error: %d" ), err );
+ iVibraReservationHandler = NULL;
+ }
+ else
+ {
+ TRAP(err, iVibraCommonService = CHWRMVibraCommonService::NewL(iVibraPluginHandler, iVibraReservationHandler));
+ if ( err != KErrNone )
+ {
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::InitVibra() - iVibraCommonService creation, error: %d" ), err );
+ iVibraCommonService = NULL;
+ }
+ else
+ {
+ TRAP(err, iVibraCommonData = CHWRMVibraCommonData::NewL(iVibraPluginHandler, iVibraReservationHandler, *iVibraCommonService));
+ if ( err != KErrNone )
+ {
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::InitVibra() - iVibraCommonData creation, error: %d" ), err );
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ COMPONENT_TRACE1(_L( "HWRM Server - CHWRMServer::InitVibra() - Vibra not supported in the device." ) );
+ }
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CHWRMServer::InitPower
+// Initialises power
+// -----------------------------------------------------------------------------
+//
+void CHWRMServer::InitPower()
+ {
+ if ( !iPowerInitAttempted )
+ {
+ iPowerInitAttempted = ETrue;
+ TInt err;
+
+ TRAP(err, iPowerPluginHandler = CHWRMPluginHandler::NewL( KHWRMPowerApiEComMatch, iPluginTimeout));
+ if ( err != KErrNone )
+ {
+ // Power not supported by the device, set handler to null
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::InitPower() - Power not supported, error: %d" ), err );
+ iPowerPluginHandler = NULL;
+ }
+ else
+ {
+ TRAP(err, iPowerCommonData = CHWRMPowerCommonData::NewL(iPowerPluginHandler));
+
+ if ( err != KErrNone )
+ {
+ // Power not supported by the device, set common data to null
+ COMPONENT_TRACE2(_L( "HWRM Server - CHWRMServer::InitPower() - CHWRMPowerCommonData creation error: %d" ), err );
+ iPowerCommonData = NULL;
+ }
+ }
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CHWRMServer::InitFmTxL
+// Initialises FM Tx
+// -----------------------------------------------------------------------------
+//
+void CHWRMServer::InitFmTxL()
+ {
+ COMPONENT_TRACE1( _L( "HWRM Server - CHWRMServer::InitFmTxL()" ) );
+
+ if ( !iFmTxInitAttempted )
+ {
+ COMPONENT_TRACE1( _L( "HWRM Server - CHWRMServer::InitFmTxL() first attempt" ) );
+
+ iFmTxInitAttempted = ETrue;
+
+
+ //The feature UID NFeature::KFmTx is defined in featureuids.h
+ TBool fmTxSupported = HWRMFeatureMgr::IsFeatureSupported(NFeature::KFmTx);
+
+ if ( fmTxSupported )
+ {
+ COMPONENT_TRACE1( _L( "HWRM Server - CHWRMServer::InitFmTxL() - FM Tx supported in the device" ) );
+
+ delete iFmTxPluginHandler;
+ iFmTxPluginHandler = NULL;
+ iFmTxPluginHandler = CHWRMPluginHandler::NewL( KHWRMFmTxApiEComMatch, iPluginTimeout );
+
+ delete iFmTxWatcherPluginHandler;
+ iFmTxWatcherPluginHandler = NULL;
+ iFmTxWatcherPluginHandler = CHWRMPluginHandler::NewL( KHWRMFmTxWatcherApiEComMatch,
+ iPluginTimeout );
+
+ delete iFmTxReservationHandler;
+ iFmTxReservationHandler = NULL;
+ iFmTxReservationHandler = CHWRMReservationHandler::NewL( KHWRMFmTxSubResourceCount, KFmTxPolicyFilename );
+
+ delete iFmTxCommonData;
+ iFmTxCommonData = NULL;
+ iFmTxCommonData = CHWRMFmTxCommonData::NewL();
+
+ iFmTxPluginHandler->RegisterForIndications(iFmTxCommonData);
+
+ iFmTxStateUtility = CHWRMFmTxStateUtility::NewL(iFmTxPluginHandler,
+ iFmTxWatcherPluginHandler, iFmTxReservationHandler, iFmTxCommonData);
+
+ iFmTxWatcherPluginHandler->RegisterForIndications(iFmTxStateUtility);
+ }
+ else
+ {
+ COMPONENT_TRACE1( _L( "HWRM Server - CHWRMServer::InitFmTx() - FM Tx not supported in the device." ) );
+ }
+ }
+ }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+// None
+
+// End of File