diff -r 000000000000 -r 4e1aa6a622a0 sysstatemgmt/ssmmapperutility/src/ssmmapperutility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysstatemgmt/ssmmapperutility/src/ssmmapperutility.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,328 @@ +/* +* Copyright (c) 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: +* Implementation of CSsmMapperUtility class. +* +*/ + +#include +#include +#include +#include +#include +#include "ssmmapperutility.h" +#include "trace.h" + +typedef CSsmMapperUtility* (*CreateMapperUtilExtL)(); + +_LIT_SECURE_ID( KStifTestServerSid, 0x102073E4 ); +_LIT_SECURE_ID( KStifConsoleUiSid, 0x102073DA ); +_LIT_SECURE_ID( KStifGuiSid, 0x102073DC ); + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CSsmMapperUtility::NewL +// --------------------------------------------------------------------------- +// +EXPORT_C CSsmMapperUtility* CSsmMapperUtility::NewL() + { + FUNC_LOG; + + CSsmMapperUtility* self = new ( ELeave ) CSsmMapperUtility; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + + +// --------------------------------------------------------------------------- +// CSsmMapperUtility::~CSsmMapperUtility +// --------------------------------------------------------------------------- +// +EXPORT_C CSsmMapperUtility::~CSsmMapperUtility() + { + FUNC_LOG; + + delete iExtension; + iExtensionLib.Close(); + } + + +// --------------------------------------------------------------------------- +// CSsmMapperUtility::PsUid +// --------------------------------------------------------------------------- +// +TUid CSsmMapperUtility::PsUid( const TUid& aUid ) + { + FUNC_LOG; + + TUid uid( aUid ); + if ( iExtension ) + { + uid = iExtension->PsUid( aUid ); + INFO_2( "PS Uid 0x%08x mapped to 0x%08x", aUid.iUid, uid.iUid ); + } + + return uid; + } + + +// --------------------------------------------------------------------------- +// CSsmMapperUtility::CrUid +// --------------------------------------------------------------------------- +// +TUid CSsmMapperUtility::CrUid( const TUid& aUid ) + { + FUNC_LOG; + + TUid uid( aUid ); + if ( iExtension ) + { + uid = iExtension->CrUid( aUid ); + INFO_2( "CR Uid 0x%08x mapped to 0x%08x", aUid.iUid, uid.iUid ); + } + + return uid; + } + + +// --------------------------------------------------------------------------- +// CSsmMapperUtility::FeatureUid +// --------------------------------------------------------------------------- +// +TUid CSsmMapperUtility::FeatureUid( const TUid& aUid ) + { + FUNC_LOG; + + TUid uid( aUid ); + if ( iExtension ) + { + uid = iExtension->FeatureUid( aUid ); + INFO_2( "Feature Uid 0x%08x mapped to 0x%08x", aUid.iUid, uid.iUid ); + } + + return uid; + } + + +// --------------------------------------------------------------------------- +// CSsmMapperUtility::GetCurrentState +// --------------------------------------------------------------------------- +// +TInt CSsmMapperUtility::GetCurrentState( TSsmState& aState ) const + { + FUNC_LOG; + + TInt err( KErrNone ); + + if ( iExtension ) + { + err = iExtension->GetCurrentState( aState ); + ERROR( err, "Error getting state" ); + } + else + { + RSsmStateAwareSession sas; + + err = sas.Connect( KUIFrameworkDomain3 ); + ERROR( err, "Error connecting RSsmStateAwareSession" ); + if ( err == KErrNone ) + { + aState = sas.State(); + sas.Close(); + } + } + + INFO_2( "Current state is %04x.%04x", aState.MainState(), aState.SubState() ); + + return err; + } + + +// --------------------------------------------------------------------------- +// CSsmMapperUtility::FeatureStatus +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CSsmMapperUtility::FeatureStatus( const TUid& aUid ) + { + FUNC_LOG; + + TBool status( EFalse ); + CFeatureDiscovery* feat = NULL; + TRAPD( err, feat = CFeatureDiscovery::NewL() ); + ERROR( err, "Error creating CFeatureDiscovery" ); + + if ( err == KErrNone ) + { + TUid uid( FeatureUid( aUid ) ); + status = feat->IsSupported( uid ); + INFO_2( "Feature 0x%08x status is %d", uid.iUid, status ); + delete feat; + } + + return status; + } + + +// --------------------------------------------------------------------------- +// CSsmMapperUtility::CrValue +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CSsmMapperUtility::CrValue( const TUid& aUid, TUint32 aKey, TInt& aValue ) + { + FUNC_LOG; + + TUid uid( CrUid( aUid ) ); + TInt err( KErrNone ); + CRepository* repository = NULL; + + TRAP( err, repository = CRepository::NewL( uid ) ); + ERROR_1( err, "Error opening repository 0x%08x", uid.iUid ); + + if ( err == KErrNone ) + { + err = repository->Get( aKey, aValue ); + ERROR_1( err, "Failed to read value of key 0x%08x", aKey ); + delete repository; + } + + INFO_3( "CR 0x%08x::0x%08x value is %d", uid.iUid, aKey, aValue ); + + return err; + } + + +// --------------------------------------------------------------------------- +// CSsmMapperUtility::CrValue +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CSsmMapperUtility::CrValue( const TUid& aUid, TUint32 aKey, TDes& aValue ) + { + FUNC_LOG; + + TUid uid( CrUid( aUid ) ); + TInt err( KErrNone ); + CRepository* repository = NULL; + + TRAP( err, repository = CRepository::NewL( uid ) ); + ERROR_1( err, "Error opening repository 0x%08x", uid.iUid ); + + if ( err == KErrNone ) + { + err = repository->Get( aKey, aValue ); + ERROR_1( err, "Failed to read value of key 0x%08x", aKey ); + delete repository; + } + + INFO_3( "CR 0x%08x::0x%08x value is '%S'", uid.iUid, aKey, &aValue ); + + return err; + } + + +// --------------------------------------------------------------------------- +// CSsmMapperUtility::GetCommandListPath +// --------------------------------------------------------------------------- +// +EXPORT_C void CSsmMapperUtility::GetCommandListPath( TDes& aCmdListPath ) + { + FUNC_LOG; + + if ( iExtension ) + { + iExtension->GetCommandListPath( aCmdListPath ); + } + } + + +// --------------------------------------------------------------------------- +// CSsmMapperUtility::CrValue +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CSsmMapperUtility::CheckCaps( const RMessagePtr2& aMessage ) + { + FUNC_LOG; + + TBool ret( EFalse ); + + if ( iExtension ) + { + ret = ETrue; + } + else if ( aMessage.HasCapability( ECapabilityPowerMgmt ) ) + { + ret = ETrue; + } + else + { + INFO( "Client missing the PowerMgmt capability" ); + } + + return ret; + } + + +// --------------------------------------------------------------------------- +// CSsmMapperUtility::CSsmMapperUtility +// --------------------------------------------------------------------------- +// +EXPORT_C CSsmMapperUtility::CSsmMapperUtility() + { + FUNC_LOG; + } + + +// --------------------------------------------------------------------------- +// CSsmMapperUtility::ConstructL +// --------------------------------------------------------------------------- +// +void CSsmMapperUtility::ConstructL() + { + FUNC_LOG; + + TSecureId sid = User::CreatorSecureId(); + + if ( sid.iId == KStifTestServerSid.iId || + sid.iId == KStifConsoleUiSid.iId || + sid.iId == KStifGuiSid.iId ) + { + INFO( "Loading mapper utility stub" ); + // If the loading process is STIF, load the stub library dynamically. + // Errors loading library are not treated worth leaving. With this + // approach better coverage for mapper utility can be achieved. + _LIT( KSsmMapperUtilityStubLib, "ssmmapperutilstub.dll" ); + + TInt err( iExtensionLib.Load( KSsmMapperUtilityStubLib ) ); + ERROR( err, "Failed to load stub library!" ); + User::LeaveIfError( err ); + + // Function at ordinal 1 creates derived CSsmMapperUtility instance + TLibraryFunction entry = iExtensionLib.Lookup( 1 ); + + if ( entry ) + { + CreateMapperUtilExtL newL = + reinterpret_cast( entry ); + iExtension = ( *newL )(); + } + else + { + ERROR( KErrNotFound, "Entry not found!" ); + User::Leave( KErrNotFound ); + } + } + }