featuremgmt/featuremgr/src/clientdll/featmgrtlsdata.cpp
changeset 0 08ec8eefde2f
child 10 fa9941cf3867
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/featuremgmt/featuremgr/src/clientdll/featmgrtlsdata.cpp	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,300 @@
+// Copyright (c) 2007-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 <featmgr/featmgr.h>
+#include "featmgrtlsdata.h"
+#include "featmgrdebug.h"
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+static CFeatMgrTlsData* TlsData( )
+    {
+    CFeatMgrTlsData* tlsData = STATIC_CAST( CFeatMgrTlsData*, Dll::Tls() );
+    _LIT( KPanicCategory, "RFeatureControl" );
+    __ASSERT_ALWAYS( tlsData, User::Panic( KPanicCategory, EPanicBadHandle ) );
+
+    return tlsData;
+    }
+    
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFeatureManager::CFeatureManager()
+// -----------------------------------------------------------------------------
+//
+
+CFeatMgrTlsData::CFeatMgrTlsData() :
+    iClientCount(0)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatureManager::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CFeatMgrTlsData::ConstructL()
+    {
+    // Connect to Feature Manager server
+    FUNC_LOG
+    TInt err( iFeatMgrClient.Connect() );
+    User::LeaveIfError(err);
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatureManager::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeatMgrTlsData* CFeatMgrTlsData::NewL()
+    {
+    CFeatMgrTlsData* self = new( ELeave ) CFeatMgrTlsData();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+// -----------------------------------------------------------------------------
+// CFeatureManager::~CFeatMgrTlsData
+// -----------------------------------------------------------------------------
+//
+CFeatMgrTlsData::~CFeatMgrTlsData()
+    {
+    FUNC_LOG
+    iFeatMgrClient.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::CanBeFreed()
+// -----------------------------------------------------------------------------
+//
+TBool CFeatMgrTlsData::CanBeFreed() const
+    {
+	if (iClientCount <= 0)
+	    {
+		INFO_LOG1( "FeatMgr: TLS can be freed, clients(%d)", iClientCount );
+		return ETrue;
+	    }
+	else
+	    {
+		INFO_LOG1( "FeatMgr: TLS can NOT be freed, clients(%d)", iClientCount );
+		return EFalse;
+	    }
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::IncreaseClientCount()
+// -----------------------------------------------------------------------------
+//
+void CFeatMgrTlsData::IncreaseClientCount()
+    {
+	++iClientCount;
+	INFO_LOG1( "FeatMgr: TLS increase, clients now(%d)", iClientCount );
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::DecreaseClientCount()
+// -----------------------------------------------------------------------------
+//
+
+void CFeatMgrTlsData::DecreaseClientCount()
+    {
+	--iClientCount;
+	INFO_LOG1( "FeatMgr: TLS decrease, clients now(%d)", iClientCount );
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::FeatureSupported()
+// -----------------------------------------------------------------------------
+//
+TInt CFeatMgrTlsData::FeatureSupported( TFeatureEntry& aFeature ) const
+    {
+    return iFeatMgrClient.FeatureSupported( aFeature );
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::FeaturesSupported()
+// -----------------------------------------------------------------------------
+//
+TInt CFeatMgrTlsData::FeaturesSupported( RFeatureArray& aFeatures )
+    {
+    return iFeatMgrClient.FeaturesSupported( aFeatures );
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::EnableFeature()
+// -----------------------------------------------------------------------------
+//
+TInt CFeatMgrTlsData::EnableFeature( TUid aFeature ) const
+    {
+    return iFeatMgrClient.EnableFeature( aFeature );
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::DisableFeature()
+// -----------------------------------------------------------------------------
+//
+TInt CFeatMgrTlsData::DisableFeature( TUid aFeature ) const
+    {
+    return iFeatMgrClient.DisableFeature( aFeature );
+    }
+    
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::SetFeature()
+// -----------------------------------------------------------------------------
+//
+TInt CFeatMgrTlsData::SetFeature( TUid aFeature, TBool aEnabled, TInt aData ) const
+    {
+    return iFeatMgrClient.SetFeature( aFeature, aEnabled, aData );
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::SetFeature()
+// -----------------------------------------------------------------------------
+//
+TInt CFeatMgrTlsData::SetFeature( TUid aFeature, TInt aData ) const
+    {
+    return iFeatMgrClient.SetFeature( aFeature, aData );
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::AddFeature()
+// -----------------------------------------------------------------------------
+//
+TInt CFeatMgrTlsData::AddFeature( TFeatureEntry aFeature ) const
+    {
+    return iFeatMgrClient.AddFeature( aFeature );
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::DeleteFeature()
+// -----------------------------------------------------------------------------
+//
+TInt CFeatMgrTlsData::DeleteFeature( TUid aFeature ) const
+    {
+    return iFeatMgrClient.DeleteFeature( aFeature );
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::ListSupportedFeaturesL()
+// -----------------------------------------------------------------------------
+//
+void CFeatMgrTlsData::ListSupportedFeaturesL( RFeatureUidArray& aSupportedFeatures )
+    {
+    iFeatMgrClient.ListSupportedFeaturesL( aSupportedFeatures );
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::ReRequestNotification(TUid&, TRequestStatus&)
+// -----------------------------------------------------------------------------
+//
+TInt CFeatMgrTlsData::ReRequestNotification( TUid& aFeatUid, TRequestStatus& aStatus )
+    {
+    return iFeatMgrClient.ReRequestNotification( aFeatUid, aStatus );
+    }
+        
+
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::RequestNotification(RFeatureUidArray&, TUid&, TRequestStatus&)
+// -----------------------------------------------------------------------------
+//
+TInt CFeatMgrTlsData::RequestNotification( RFeatureUidArray& aFeatures, TUid& aFeatUid, 
+    TRequestStatus& aStatus )
+    {
+    return iFeatMgrClient.RequestNotification( aFeatures, aFeatUid, aStatus );
+    }
+        
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::RequestNotifyCancel(RFeatureUidArray&, TRequestStatus&)
+// -----------------------------------------------------------------------------
+//
+TInt CFeatMgrTlsData::RequestNotifyCancel( TUid aFeature ) const
+    {
+    return iFeatMgrClient.RequestNotifyCancel( aFeature );
+    }
+        
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::RequestNotifyCancelAll(RFeatureUidArray&, TRequestStatus&)
+// -----------------------------------------------------------------------------
+//
+TInt CFeatMgrTlsData::RequestNotifyCancelAll( ) const
+    {
+    return iFeatMgrClient.RequestNotifyCancelAll( );
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::DeleteClient()
+// -----------------------------------------------------------------------------
+//
+void CFeatMgrTlsData::DeleteClient()
+	{
+	CFeatMgrTlsData* tlsData = TlsData();
+
+	// Decrease the client count (self)
+	tlsData->DecreaseClientCount();
+
+	// Check if no more clients so that TLS can be freed.
+	if (tlsData->CanBeFreed())
+		{
+		delete tlsData;
+		Dll::SetTls( NULL );
+		}
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::SWIStart()
+// -----------------------------------------------------------------------------
+//
+TInt CFeatMgrTlsData::SWIStart( ) const
+    {
+    return iFeatMgrClient.SWIStart();
+    }
+
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::SWIEnd()
+// -----------------------------------------------------------------------------
+//
+TInt CFeatMgrTlsData::SWIEnd( ) const
+    {
+    return iFeatMgrClient.SWIEnd(); 
+	}
+
+
+// debug only API functions
+
+#ifdef EXTENDED_FEATURE_MANAGER_TEST
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::NumberOfNotifyFeatures()
+// -----------------------------------------------------------------------------
+//
+TInt CFeatMgrTlsData::NumberOfNotifyFeatures( void ) const
+    {
+    return iFeatMgrClient.NumberOfNotifyFeatures();
+    }
+// -----------------------------------------------------------------------------
+// CFeatMgrTlsData::CountAllocCells()
+// -----------------------------------------------------------------------------
+//
+TInt CFeatMgrTlsData::CountAllocCells( void ) const
+    {
+    return iFeatMgrClient.CountAllocCells();
+    }
+#endif
+
+//  End of File