bluetoothengine/btctrldcmoadapter/src/btctrldcmoadapter.cpp
changeset 0 f63038272f30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btctrldcmoadapter/src/btctrldcmoadapter.cpp	Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,258 @@
+/*
+ * ==============================================================================
+ * 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:
+ * 
+ * ==============================================================================
+ */
+
+#include <stringresourcereader.h>
+#include <data_caging_path_literals.hrh> 
+#include <bautils.h>
+
+#include <dcmo.rsg>
+#include <btfeaturescfg.h>
+
+#include "btctrldcmoadapter.h"
+
+_LIT(KBluetoothDcmoPanicName, "BT DCMO Adapter");
+
+_LIT( KBluetoothControlProperty, "Bluetooth" );
+_LIT( KDisableBluetoothDescription, "Used to enable/disable the Bluetooth connectivity." ); // Description
+_LIT( KRuntimeResourceFileName, "z:dcmo.rsc" );
+
+TDCMOStatus CBluetoothCtrlDcmoAdapter::MapFeatureControlError(TInt aErrorCode)
+    {
+    TDCMOStatus status = EDcmoFail;
+    
+    switch (aErrorCode)
+        {
+        case KErrNone:
+            status = EDcmoSuccess;
+            break;
+        case KErrPermissionDenied:
+        case KErrAccessDenied:
+            status = EDcmoAccessDenied;
+            break;
+        case KErrNotFound:
+            status = EDcmoNotFound;
+            break;
+        default:
+            break;
+        }
+    return status;
+    }
+
+// Construction and destruction functions
+
+CBluetoothCtrlDcmoAdapter* CBluetoothCtrlDcmoAdapter::NewL(TAny* aParams)
+	{
+    CBluetoothCtrlDcmoAdapter* self = new (ELeave ) CBluetoothCtrlDcmoAdapter(aParams);  
+	return self;
+	}
+
+CBluetoothCtrlDcmoAdapter::~CBluetoothCtrlDcmoAdapter()
+	{	
+	}
+
+CBluetoothCtrlDcmoAdapter::CBluetoothCtrlDcmoAdapter(TAny* aInitParams)
+    :  iInitParams(reinterpret_cast<CDCMOInterface::TDCMOInterfaceInitParams*>(aInitParams))
+	{
+	}
+
+// Implementation of CDCMOInterface
+
+//
+// See excerpts from OMA DCMO spec below
+//
+TDCMOStatus CBluetoothCtrlDcmoAdapter::SetDCMOPluginIntAttributeValueL(TDCMONode aId, TInt aValue)
+{
+	TDCMOStatus status = EDcmoFail;
+	
+	switch(aId)
+	{
+        /*
+        This node is used with Exec command to enable the Device Capability to transfer the Device Capability 
+        from Disabled State to Enabled state.
+        */
+		case EEnable:
+		    {
+			BluetoothFeatures::TEnterpriseEnablementMode mode = BluetoothFeatures::EDisabled;
+			switch (aValue)
+				{
+				case 0:
+					mode = BluetoothFeatures::EDisabled;
+					break;
+				case 1:
+					mode = BluetoothFeatures::EEnabled;
+					break;
+				case 2:
+					mode = BluetoothFeatures::EDataProfilesDisabled;
+					break;
+				default:
+					User::Leave(KErrArgument);
+				}
+		    TRAPD(err,BluetoothFeatures::SetEnterpriseEnablementL(mode));
+	        status = MapFeatureControlError(err);
+		    }
+		    break;
+		default:
+		    break;
+	}
+	
+	return status;
+}
+
+//
+// See excerpts from OMA DCMO spec below
+//
+TDCMOStatus CBluetoothCtrlDcmoAdapter::GetDCMOPluginIntAttributeValueL(TDCMONode aId, TInt& aValue)
+{
+	TDCMOStatus status = EDcmoSuccess;
+	
+	switch(aId)
+	{
+	    /*
+	    This node specifies the group name, defined in section 6.1 “Grouping of properties” of [DPE-TS],
+	    for a collection of Device Capabilities
+	    */
+		case EGroup: 
+		    aValue = EConnectivity;
+		    break;
+		/*
+		This leaf node indicates whether the Device Capability is removable and whether it is currently
+        attached to the device. 
+        If the leaf exists then the Device Capability is removable. 
+        If the value of this node is “True” the Device Capability is currently attached to the device; 
+        if the value of this node is “False” the Device Capability is currently detached from the device;
+        
+        NB: Returning EFalse here prevents the node from being inserted into DDF, so Bluetooth is NON-removable media.
+		*/  
+		case EAttached:
+		    aValue = EFalse;
+		    break;
+		/*
+        This leaf node indicates whether the Device Capability is enabled regardless whether 
+        the Device Capability is attached or not. 
+        If the value of this node is “True” the Device Capability is in Enabled State. 
+        If the value of is “False” the Device Capability is in Disabled State;
+        The ‘Attached’ property is independent of ‘Enabled’ property. A Device Capability MAY have ‘True’ 
+        as value for ‘Enabled’ node while having ‘False’ as value for the ‘Attached’ node. That means 
+        the Device Capability is still not available and can’t be used until it is attached to the Device, 
+        but will be useable once the Device Capability is attached.
+		*/
+		case EEnabled:
+			{
+			BluetoothFeatures::TEnterpriseEnablementMode mode = BluetoothFeatures::EnterpriseEnablementL();
+			switch (mode)
+				{
+				case BluetoothFeatures::EDisabled:
+					aValue = 0;
+					break;
+				case BluetoothFeatures::EEnabled:
+					aValue = 1;
+					break;
+				case BluetoothFeatures::EDataProfilesDisabled:
+					aValue = 2;
+					break;
+				default:
+					User::Leave(KErrArgument);
+				}
+			}
+		    break; 
+		/*
+        This leaf node specifies whether the user is able to enable a Device Capability. 
+        If the node is not present or the value is False, the user is allowed to enable the Device Capability.
+        If the node is present and the value is True, the user is not allowed to enable the Device Capability.
+		*/
+		case EDenyUserEnable:
+		    aValue = ETrue;
+		    break;
+		/*
+        This leaf node specifies whether the user is notified with the DCMO Operation result when 
+        enable/disable Primitive is executed. 
+        If the node is not present or the value is ‘False’, the user will not be notified about the result of 
+        the operation. 
+        If the node is present and the value is ‘True’, the user will be notified about the result of 
+        the operation.		
+		*/
+		case ENotifyUser:
+		    aValue = ETrue;
+		    break;
+		default:
+		    break;
+	}
+	
+	return status;
+}
+
+TDCMOStatus CBluetoothCtrlDcmoAdapter::SetDCMOPluginStrAttributeValueL(TDCMONode   /* aId */, 
+                                                                       const TDes& /* aStrValue */)
+{
+	// Nothing to do
+	return EDcmoFail;	
+}
+
+TDCMOStatus CBluetoothCtrlDcmoAdapter::GetDCMOPluginStrAttributeValueL(TDCMONode aId, TDes& aStrValue) 
+{
+	TDCMOStatus status = EDcmoSuccess;
+	switch(aId)
+	{
+	    /*
+	    This leaf node specifies the property name, which is defined in section 6.2 “DPE vocabulary List” 
+	    of [DPE-TS], for a Device Capability.
+	    */
+		case EProperty: 
+		    __ASSERT_DEBUG(aStrValue.MaxLength() >= KBluetoothControlProperty().Length(),Panic(CBluetoothCtrlDcmoAdapter::EPropertyBufferTooSmall));
+		    aStrValue = KBluetoothControlProperty().Left(aStrValue.MaxLength());
+		    break;
+		/*
+		This leaf node specifies the description for this Device Capability.
+		*/
+		case EDescription:
+            __ASSERT_DEBUG(aStrValue.MaxLength() >= KDisableBluetoothDescription().Length(),Panic(CBluetoothCtrlDcmoAdapter::EDescriptionBufferTooSmall));
+		    aStrValue = KDisableBluetoothDescription().Left(aStrValue.MaxLength());
+		    break;
+		default:			
+		    status = EDcmoNotFound;
+		    break;
+	}
+		
+	return status;
+}
+
+void CBluetoothCtrlDcmoAdapter::GetLocalizedNameL(HBufC*& aLocName)
+    {
+    TFileName* fileName = new(ELeave) TFileName;
+    CleanupStack::PushL(fileName);
+    TParse* parseObj = new(ELeave) TParse();
+    CleanupStack::PushL(parseObj);
+    User::LeaveIfError(parseObj->Set(KRuntimeResourceFileName(), &KDC_RESOURCE_FILES_DIR, NULL));
+    *fileName = parseObj->FullName();
+    CleanupStack::PopAndDestroy(parseObj);
+    
+    CStringResourceReader* resReader = CStringResourceReader::NewL(*fileName);
+    CleanupStack::PushL(resReader);
+    
+    TPtrC buf;
+    buf.Set(resReader->ReadResourceString(R_DM_RUN_TIME_VAR_BLUETOOTH)); 
+    aLocName = buf.AllocL() ; 
+    
+    CleanupStack::PopAndDestroy(2,fileName); //resReader,fileName
+    }
+
+void CBluetoothCtrlDcmoAdapter::Panic(TBluetoothDcmoPanic aPanic)
+    {
+    User::Panic(KBluetoothDcmoPanicName, aPanic);
+    }