--- /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 <e32property.h>
+#include <featdiscovery.h>
+#include <centralrepository.h>
+#include <ssm/ssmdomaindefs.h>
+#include <ssm/ssmstateawaresession.h>
+#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<CreateMapperUtilExtL >( entry );
+ iExtension = ( *newL )();
+ }
+ else
+ {
+ ERROR( KErrNotFound, "Entry not found!" );
+ User::Leave( KErrNotFound );
+ }
+ }
+ }