bluetooth/btstack/linkmgr/linkmgr.cpp
branchRCL_3
changeset 11 20fda83a6398
parent 0 29b1cd4cb562
child 17 32ba20339036
equal deleted inserted replaced
10:8a27654f7b62 11:20fda83a6398
     1 // Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
     1 // Copyright (c) 1999-2010 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
    35 #include "linkconsts.h"
    35 #include "linkconsts.h"
    36 #include "eirmanserver.h"
    36 #include "eirmanserver.h"
    37 #include "eirmanager.h"
    37 #include "eirmanager.h"
    38 #include "eirpublisherlocalname.h"
    38 #include "eirpublisherlocalname.h"
    39 #include "eirpublishertxpowerlevel.h"
    39 #include "eirpublishertxpowerlevel.h"
       
    40 #include "bredrcontrollerconfiguration.h"
    40 
    41 
    41 
    42 
    42 #include "ProxySAP.h"
    43 #include "ProxySAP.h"
    43 #include "SCOSAP.h"
    44 #include "SCOSAP.h"
    44 #include "ACLSAP.h"
    45 #include "ACLSAP.h"
   108 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothSetDeviceClass);
   109 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothSetDeviceClass);
   109 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothSetAFHHostChannelClassification);
   110 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothSetAFHHostChannelClassification);
   110 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothSetAFHChannelAssessmentMode);
   111 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothSetAFHChannelAssessmentMode);
   111 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothSetDeviceName);
   112 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothSetDeviceName);
   112 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothSetAcceptPairedOnlyMode);
   113 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothSetAcceptPairedOnlyMode);
       
   114 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothSetPageScanParameters);
   113 
   115 
   114 	// Delete standard P&S values (possibly trying to delete already deleted shared set+get values)
   116 	// Delete standard P&S values (possibly trying to delete already deleted shared set+get values)
   115 	iProperty.Delete(KPropertyUidBluetoothCategory, KPropertyKeyBluetoothGetLocalDeviceAddress);
   117 	iProperty.Delete(KPropertyUidBluetoothCategory, KPropertyKeyBluetoothGetLocalDeviceAddress);
   116 	iProperty.Delete(KPropertyUidBluetoothCategory, KPropertyKeyBluetoothGetPHYCount);
   118 	iProperty.Delete(KPropertyUidBluetoothCategory, KPropertyKeyBluetoothGetPHYCount);
   117 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothGetConnectingStatus);
   119 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothGetConnectingStatus);
   120 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothGetDeviceClass);
   122 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothGetDeviceClass);
   121 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothGetDeviceName);
   123 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothGetDeviceName);
   122 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothGetAcceptPairedOnlyMode);
   124 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothGetAcceptPairedOnlyMode);
   123 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothHostResolverActive);
   125 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothHostResolverActive);
   124 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothSetSimplePairingDebugMode);
   126 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothSetSimplePairingDebugMode);
       
   127 	iProperty.Delete(KPropertyUidBluetoothCategory,	KPropertyKeyBluetoothGetPageScanParameters);
       
   128 
   125 
   129 
   126 	delete iPhysicalLinksMgr;
   130 	delete iPhysicalLinksMgr;
   127 	delete iInquiryMgr;
   131 	delete iInquiryMgr;
   128 	delete iEirManServer;
   132 	delete iEirManServer;
   129 	delete iACLStateFactory;
   133 	delete iACLStateFactory;
   188 		// getter and setter methods were 'ClassOfDevice', but even that wouldn't help
   192 		// getter and setter methods were 'ClassOfDevice', but even that wouldn't help
   189 		// much...
   193 		// much...
   190 		//
   194 		//
   191 		iLocalDeviceSettings.SetDeviceClass(iLocalDeviceSettings.DeviceClass() & KDeviceClassBitMask);
   195 		iLocalDeviceSettings.SetDeviceClass(iLocalDeviceSettings.DeviceClass() & KDeviceClassBitMask);
   192 		
   196 		
   193 		
       
   194 		//NB - no (ELeave) here - in OOM we'd rather continue and not update the registry
   197 		//NB - no (ELeave) here - in OOM we'd rather continue and not update the registry
   195 		//than Leave.  All calls to methods are guarded by "if (iRegistryUpdater)"
   198 		//than Leave.  All calls to methods are guarded by "if (iRegistryUpdater)"
   196 		iRegistryUpdater = new CRegistryUpdater(iLocalDevice, iLocalDeviceSettings);
   199 		iRegistryUpdater = new CRegistryUpdater(iLocalDevice, iLocalDeviceSettings);
   197 		}
   200 		}
   198 
   201 
   281 		CleanupStack::PushL(subscriber);
   284 		CleanupStack::PushL(subscriber);
   282 		User::LeaveIfError(iSubscribers.Append(subscriber));
   285 		User::LeaveIfError(iSubscribers.Append(subscriber));
   283 		CleanupStack::Pop(subscriber);
   286 		CleanupStack::Pop(subscriber);
   284 		}
   287 		}
   285 
   288 
       
   289 	subscriber = CPageScanParametersSubscriber::NewL(*this);
       
   290 	CleanupStack::PushL(subscriber);
       
   291 	User::LeaveIfError(iSubscribers.Append(subscriber));
       
   292 	CleanupStack::Pop(subscriber);
       
   293 
   286 	// set CoD - leave if goes wrong, user's device will be "unknown" otherwise
   294 	// set CoD - leave if goes wrong, user's device will be "unknown" otherwise
   287 	// NB - In future we should tie this to the SDP Server...(or someother higher API...)
   295 	// NB - In future we should tie this to the SDP Server...(or someother higher API...)
   288 	
   296 	
   289 	if (iLocalDeviceSettings.DeviceClass() && iLocalDeviceSettings.IsValidDeviceClass())
   297 	if (iLocalDeviceSettings.DeviceClass() && iLocalDeviceSettings.IsValidDeviceClass())
   290 	// Some phones never set their CoD in s/w, we don't want to blat
   298 	// Some phones never set their CoD in s/w, we don't want to blat
   304 	//Attempt to make sure that controller has the same value as the registry
   312 	//Attempt to make sure that controller has the same value as the registry
   305 	//and that the P&S key 'KPropertyKeyBluetoothGetLimitedDiscoverableStatus'
   313 	//and that the P&S key 'KPropertyKeyBluetoothGetLimitedDiscoverableStatus'
   306 	//is, as a consequence, 'Set' appropriately (when the associated controller 
   314 	//is, as a consequence, 'Set' appropriately (when the associated controller 
   307 	//event arrives).
   315 	//event arrives).
   308 	DoSetLimitedDiscoverableL(iLocalDeviceSettings.LimitedDiscoverable());
   316 	DoSetLimitedDiscoverableL(iLocalDeviceSettings.LimitedDiscoverable());
       
   317 
       
   318 	LOG(_L("LinkMgr : Initialising BR/EDR Controller Configuration"));
       
   319 	iBrEdrControllerConfiguration = CBrEdrControllerConfiguration::NewL(iHCIFacade->CommandQController(), *this);
   309 	
   320 	
   310 	LOG(_L("LinkMgr : Initialising complete"));
   321 	LOG(_L("LinkMgr : Initialising complete"));
   311 	}
   322 	}
   312 
   323 
   313 void CLinkMgrProtocol::DefinePublications(THCIScanEnable aHCIScanEnable)
   324 void CLinkMgrProtocol::DefinePublications(THCIScanEnable aHCIScanEnable)
   379 							KPropertyKeyBluetoothSetSimplePairingDebugMode,
   390 							KPropertyKeyBluetoothSetSimplePairingDebugMode,
   380 							RProperty::EInt,
   391 							RProperty::EInt,
   381 							KLOCAL_SERVICES,
   392 							KLOCAL_SERVICES,
   382 							KCOMMDD
   393 							KCOMMDD
   383 							));
   394 							));
       
   395 
       
   396 	(void)(iProperty.Define(KPropertyUidBluetoothCategory,
       
   397 							KPropertyKeyBluetoothSetPageScanParameters,
       
   398 							RProperty::EInt,
       
   399 							KLOCAL_SERVICES_AND_NETWORK_CONTROL,
       
   400 							KLOCAL_SERVICES_AND_NETWORK_CONTROL
       
   401 							));
       
   402 
       
   403 	(void) RProperty::Set(KPropertyUidBluetoothCategory,
       
   404 						  KPropertyKeyBluetoothSetPageScanParameters,
       
   405 						  EStandardPageScanParameters);
   384 
   406 
   385 
   407 
   386 	// Original Get P&S value definitions.
   408 	// Original Get P&S value definitions.
   387 
   409 
   388 	(void)(iProperty.Define(KPropertyUidBluetoothCategory,
   410 	(void)(iProperty.Define(KPropertyUidBluetoothCategory,
   452 							KPropertyKeyBluetoothGetSimplePairingDebugMode,
   474 							KPropertyKeyBluetoothGetSimplePairingDebugMode,
   453 							RProperty::EInt,
   475 							RProperty::EInt,
   454 							KLOCAL_SERVICES,
   476 							KLOCAL_SERVICES,
   455 						   	KLOCAL_SERVICES_AND_NETWORK_CONTROL
   477 						   	KLOCAL_SERVICES_AND_NETWORK_CONTROL
   456 							));
   478 							));
       
   479 
       
   480 	(void)(iProperty.Define(KPropertyUidBluetoothCategory,
       
   481 							KPropertyKeyBluetoothGetPageScanParameters,
       
   482 							RProperty::EInt,
       
   483 							KLOCAL_SERVICES_AND_NETWORK_CONTROL,
       
   484 							KLOCAL_SERVICES_AND_NETWORK_CONTROL
       
   485 							));
       
   486 							
       
   487 	(void) RProperty::Set(KPropertyUidBluetoothCategory,
       
   488 						  KPropertyKeyBluetoothGetPageScanParameters,
       
   489 						  EStandardPageScanParameters);
   457 	}
   490 	}
   458 
   491 
   459 void CLinkMgrProtocol::DeletePublications()
   492 void CLinkMgrProtocol::DeletePublications()
   460 	{
   493 	{
   461 	LOG_FUNC
   494 	LOG_FUNC
   946 	{
   979 	{
   947 	LOG_FUNC
   980 	LOG_FUNC
   948 	// Only write the CoD bits if they have changed from the existing setting
   981 	// Only write the CoD bits if they have changed from the existing setting
   949 	if (iPendingLocalDeviceSettings.DeviceClass() != aCoD)
   982 	if (iPendingLocalDeviceSettings.DeviceClass() != aCoD)
   950 		{
   983 		{
   951 		iPendingLocalDeviceSettings.SetDeviceClass(aCoD);
   984 		TRAPD(err, iHCIFacade->WriteDeviceClassL(aCoD));
   952 		iHCIFacade->WriteDeviceClassL(aCoD);
   985 		if (err == KErrNone)
       
   986 			{
       
   987 			iPendingLocalDeviceSettings.SetDeviceClass(aCoD);
       
   988 			}
       
   989 		else
       
   990 			{
       
   991 			/* If the function errors, it is probably becuase the power is off, so we'll save the setting for power on
       
   992 			   If the error is for a different reason, setting this doesn't do any harm anyway - it will get picked
       
   993 			   up the next time the power is turned on */
       
   994 			iDesiredLocalDeviceSettings.SetDeviceClass(aCoD);
       
   995 			User::Leave(err);
       
   996 			}
   953 		}
   997 		}
   954 	}
   998 	}
   955 
   999 
   956 TInt CLinkMgrProtocol::SetLocalDeviceName(const TDesC8& aName)
  1000 TInt CLinkMgrProtocol::SetLocalDeviceName(const TDesC8& aName)
   957 	{
  1001 	{
   961 	TRAPD(err, iHCIFacade->WriteLocalNameL(aName));
  1005 	TRAPD(err, iHCIFacade->WriteLocalNameL(aName));
   962 	if (err == KErrNone)
  1006 	if (err == KErrNone)
   963 		{
  1007 		{
   964 		iPendingLocalDeviceSettings.SetDeviceName(aName);
  1008 		iPendingLocalDeviceSettings.SetDeviceName(aName);
   965 		}
  1009 		}
       
  1010 	else
       
  1011 		{
       
  1012 		/* If the function leaves, it is probably becuase the power is off, so we'll save the setting for power on
       
  1013 		   If the leave is for a different reason, setting this doesn't do any harm anyway - it will get picked
       
  1014 		   up the next time the power is turned on */
       
  1015 		iDesiredLocalDeviceSettings.SetDeviceName(aName);
       
  1016 		}
   966 	return err;
  1017 	return err;
   967 	}
  1018 	}
   968 
  1019 
   969 void CLinkMgrProtocol::SetAFHHostChannelClassificationL(const TBTAFHHostChannelClassification& aChannelClassification)
  1020 void CLinkMgrProtocol::SetAFHHostChannelClassificationL(const TBTAFHHostChannelClassification& aChannelClassification)
   970 	{
  1021 	{
   973 	}
  1024 	}
   974 	
  1025 	
   975 void CLinkMgrProtocol::SetAFHChannelAssessmentModeL(TBool aMode)
  1026 void CLinkMgrProtocol::SetAFHChannelAssessmentModeL(TBool aMode)
   976 	{
  1027 	{
   977 	LOG_FUNC
  1028 	LOG_FUNC
   978 	iPendingLocalDeviceSettings.SetAFHChannelAssessmentMode(aMode);
  1029 	TRAPD(err, iHCIFacade->WriteAFHChannelAssessmentModeL(aMode));
   979 	iHCIFacade->WriteAFHChannelAssessmentModeL(aMode);
  1030 	if (err == KErrNone)
       
  1031 		{
       
  1032 		iPendingLocalDeviceSettings.SetAFHChannelAssessmentMode(aMode);
       
  1033 		}
       
  1034 	else
       
  1035 		{
       
  1036 		/* If the function leaves, it is probably becuase the power is off, so we'll save the setting for power on
       
  1037 		   If the leave is for a different reason, setting this doesn't do any harm anyway - it will get picked
       
  1038 		   up the next time the power is turned on */
       
  1039 		iDesiredLocalDeviceSettings.SetAFHChannelAssessmentMode(aMode);
       
  1040 		User::Leave(err);
       
  1041 		}
   980 	}
  1042 	}
   981 
  1043 
   982 void CLinkMgrProtocol::SetLimitedDiscoverableIfChangedL(TBool aOn)
  1044 void CLinkMgrProtocol::SetLimitedDiscoverableIfChangedL(TBool aOn)
   983 	{
  1045 	{
   984 	LOG_FUNC
  1046 	LOG_FUNC
  1002 	TUint iacs[2];
  1064 	TUint iacs[2];
  1003 
  1065 
  1004 	if (aOn)
  1066 	if (aOn)
  1005 		{
  1067 		{
  1006 		// turn on LIAC
  1068 		// turn on LIAC
  1007 		iPendingLocalDeviceSettings.SetLimitedDiscoverable(ETrue);
  1069 		TRAPD(err, WriteClassOfDeviceL(iPendingLocalDeviceSettings.DeviceClass() | (EMajorServiceLimitedDiscoverableMode << 
  1008 		WriteClassOfDeviceL(iPendingLocalDeviceSettings.DeviceClass() | (EMajorServiceLimitedDiscoverableMode << 
  1070 				(KLengthOfDeviceClass+KStartingOffsetOfDeviceClass))));
  1009 				(KLengthOfDeviceClass+KStartingOffsetOfDeviceClass))); 
  1071 		if (err == KErrNone)
       
  1072 			{
       
  1073 			iPendingLocalDeviceSettings.SetLimitedDiscoverable(ETrue);
       
  1074 			}
       
  1075 		else
       
  1076 			{
       
  1077 			/* If the function leaves, it is probably becuase the power is off, so we'll save the setting for power on
       
  1078 			   If the leave is for a different reason, setting this doesn't do any harm anyway - it will get picked
       
  1079 			   up the next time the power is turned on */
       
  1080 			iDesiredLocalDeviceSettings.SetLimitedDiscoverable(ETrue);
       
  1081 			User::Leave(err);
       
  1082 			}
  1010 		numIACs = 2;
  1083 		numIACs = 2;
  1011 		iacs[0] = KLIAC;
  1084 		iacs[0] = KLIAC;
  1012 		iacs[1] = KGIAC;
  1085 		iacs[1] = KGIAC;
  1013 		}
  1086 		}
  1014 	else
  1087 	else
  1015 		{
  1088 		{
  1016 		// turn off LIAC - could do the 1 minute GAP timer?
  1089 		// turn off LIAC - could do the 1 minute GAP timer?
  1017 		iPendingLocalDeviceSettings.SetLimitedDiscoverable(EFalse);
  1090 		TRAPD(err, WriteClassOfDeviceL(iPendingLocalDeviceSettings.DeviceClass() & ~(EMajorServiceLimitedDiscoverableMode << 
  1018 		WriteClassOfDeviceL(iPendingLocalDeviceSettings.DeviceClass() & ~(EMajorServiceLimitedDiscoverableMode << 
  1091 				(KLengthOfDeviceClass+KStartingOffsetOfDeviceClass))));
  1019 				(KLengthOfDeviceClass+KStartingOffsetOfDeviceClass))); 
  1092 		if (err == KErrNone)
       
  1093 			{
       
  1094 			iPendingLocalDeviceSettings.SetLimitedDiscoverable(EFalse);
       
  1095 			}
       
  1096 		else
       
  1097 			{
       
  1098 			/* If the function leaves, it is probably becuase the power is off, so we'll save the setting for power on
       
  1099 			   If the leave is for a different reason, setting this doesn't do any harm anyway - it will get picked
       
  1100 			   up the next time the power is turned on */
       
  1101 			iDesiredLocalDeviceSettings.SetLimitedDiscoverable(EFalse);
       
  1102 			User::Leave(err);
       
  1103 			}
  1020 		numIACs = 1;
  1104 		numIACs = 1;
  1021 		iacs[0] = KGIAC;
  1105 		iacs[0] = KGIAC;
  1022 		}
  1106 		}
  1023 	
  1107 	
  1024 	iHCIFacade->WriteIACLAPL(numIACs, iacs);
  1108 	iHCIFacade->WriteIACLAPL(numIACs, iacs);
  1220 
  1304 
  1221 void CLinkMgrProtocol::SetLocalBTAddress(const TBTDevAddr& aAddr)
  1305 void CLinkMgrProtocol::SetLocalBTAddress(const TBTDevAddr& aAddr)
  1222 	{
  1306 	{
  1223 	LOG_FUNC
  1307 	LOG_FUNC
  1224 	iLocalDeviceAddress = aAddr;
  1308 	iLocalDeviceAddress = aAddr;
       
  1309 
       
  1310 	// Also update registry with local device address
       
  1311 	iLocalDeviceSettings.SetAddress(iLocalDeviceAddress);
       
  1312 	UpdateSettings();
  1225 
  1313 
  1226 	// publish this number - might be useful
  1314 	// publish this number - might be useful
  1227 	const TDesC8& des = aAddr.Des();
  1315 	const TDesC8& des = aAddr.Des();
  1228 	(void)iProperty.Set(KPropertyUidBluetoothCategory,
  1316 	(void)iProperty.Set(KPropertyUidBluetoothCategory,
  1229 						KPropertyKeyBluetoothGetLocalDeviceAddress,
  1317 						KPropertyKeyBluetoothGetLocalDeviceAddress,
  1318 	// If we know that the h/w has been reset, then we need to ensure that our persistent
  1406 	// If we know that the h/w has been reset, then we need to ensure that our persistent
  1319 	// value reflects this. That way we will force the CoD re-write to the hardware.
  1407 	// value reflects this. That way we will force the CoD re-write to the hardware.
  1320 	iPendingLocalDeviceSettings.SetDeviceClass(KDeviceClassReset);
  1408 	iPendingLocalDeviceSettings.SetDeviceClass(KDeviceClassReset);
  1321 	}
  1409 	}
  1322 
  1410 
       
  1411 void CLinkMgrProtocol::SetPageScanParameters(TPageScanParameterSettings aPageScanParameters)
       
  1412 	{
       
  1413 	LOG_FUNC
       
  1414 	iBrEdrControllerConfiguration->SetPageScanParameters(aPageScanParameters);
       
  1415 	}
  1323 
  1416 
  1324 
  1417 
  1325 //
  1418 //
  1326 // CRegistrySession
  1419 // CRegistrySession
  1327 //
  1420 //
  1379 RBTRegServ& CRegistrySession::RegServ()
  1472 RBTRegServ& CRegistrySession::RegServ()
  1380 	{
  1473 	{
  1381 	LOG_FUNC
  1474 	LOG_FUNC
  1382 	return iRegServ;
  1475 	return iRegServ;
  1383 	}
  1476 	}
  1384 
       
  1385 
  1477 
  1386 
  1478 
  1387 //class CRegistryUpdater
  1479 //class CRegistryUpdater
  1388 CRegistryUpdater::~CRegistryUpdater()
  1480 CRegistryUpdater::~CRegistryUpdater()
  1389 	{
  1481 	{
  1447 
  1539 
  1448 //class TBTTrackedLocalDevice
  1540 //class TBTTrackedLocalDevice
  1449 void TBTTrackedLocalDevice::SetAddress(const TBTDevAddr& aAddr)
  1541 void TBTTrackedLocalDevice::SetAddress(const TBTDevAddr& aAddr)
  1450 	{
  1542 	{
  1451 	LOG_FUNC
  1543 	LOG_FUNC
  1452 	TBTLocalDevice::SetAddress(aAddr);
  1544 	if (aAddr != Address())
  1453 	StoreChange(EAddress);
  1545 		{
       
  1546 		TBTLocalDevice::SetAddress(aAddr);
       
  1547 		StoreChange(EAddress);
       
  1548 		}
  1454 	}
  1549 	}
  1455 	
  1550 	
  1456 void TBTTrackedLocalDevice::SetDeviceClass(TUint32 aCod)
  1551 void TBTTrackedLocalDevice::SetDeviceClass(TUint32 aCod)
  1457 	{
  1552 	{
  1458 	LOG_FUNC
  1553 	LOG_FUNC
  1459 	TBTLocalDevice::SetDeviceClass(aCod);
  1554 	if (aCod != DeviceClass())
  1460 	StoreChange(ECoD);
  1555 		{
       
  1556 		TBTLocalDevice::SetDeviceClass(aCod);
       
  1557 		StoreChange(ECoD);
       
  1558 		}
  1461 	}
  1559 	}
  1462 
  1560 
  1463 void TBTTrackedLocalDevice::SetDeviceName(const TDesC8& aName)
  1561 void TBTTrackedLocalDevice::SetDeviceName(const TDesC8& aName)
  1464 	{
  1562 	{
  1465 	LOG_FUNC
  1563 	LOG_FUNC
  1466 	TBTLocalDevice::SetDeviceName(aName);
  1564 	if (aName != DeviceName())
  1467 	StoreChange(EDeviceName);
  1565 		{
       
  1566 		TBTLocalDevice::SetDeviceName(aName);
       
  1567 		StoreChange(EDeviceName);
       
  1568 		}
  1468 	}
  1569 	}
  1469 
  1570 
  1470 void TBTTrackedLocalDevice::SetScanEnable(THCIScanEnable aEnable)
  1571 void TBTTrackedLocalDevice::SetScanEnable(THCIScanEnable aEnable)
  1471 	{
  1572 	{
  1472 	LOG_FUNC
  1573 	LOG_FUNC
  1473 	TBTLocalDevice::SetScanEnable(aEnable);
  1574 	if (aEnable != ScanEnable())
  1474 	StoreChange(EScanEnable);
  1575 		{
       
  1576 		TBTLocalDevice::SetScanEnable(aEnable);
       
  1577 		StoreChange(EScanEnable);
       
  1578 		}
  1475 	}
  1579 	}
  1476 
  1580 
  1477 void TBTTrackedLocalDevice::SetLimitedDiscoverable(TBool aOn)
  1581 void TBTTrackedLocalDevice::SetLimitedDiscoverable(TBool aOn)
  1478 	{
  1582 	{
  1479 	LOG_FUNC
  1583 	LOG_FUNC
  1480 	TBTLocalDevice::SetLimitedDiscoverable(aOn);
  1584 	if (aOn != LimitedDiscoverable())
  1481 	StoreChange(ELimitedDiscoverable);
  1585 		{
       
  1586 		TBTLocalDevice::SetLimitedDiscoverable(aOn);
       
  1587 		StoreChange(ELimitedDiscoverable);
       
  1588 		}
  1482 	}
  1589 	}
  1483 
  1590 
  1484 void TBTTrackedLocalDevice::SetPowerSetting(TUint8 aPowerSetting)
  1591 void TBTTrackedLocalDevice::SetPowerSetting(TUint8 aPowerSetting)
  1485 	{
  1592 	{
  1486 	LOG_FUNC
  1593 	LOG_FUNC
  1487 	TBTLocalDevice::SetPowerSetting(aPowerSetting);
  1594 	if (aPowerSetting != PowerSetting())
  1488 	StoreChange(EPowerSetting);
  1595 		{
       
  1596 		TBTLocalDevice::SetPowerSetting(aPowerSetting);
       
  1597 		StoreChange(EPowerSetting);
       
  1598 		}
  1489 	}
  1599 	}
  1490 
  1600 
  1491 void TBTTrackedLocalDevice::SetAFHChannelAssessmentMode(TBool aOn)
  1601 void TBTTrackedLocalDevice::SetAFHChannelAssessmentMode(TBool aOn)
  1492 	{
  1602 	{
  1493 	LOG_FUNC
  1603 	LOG_FUNC
  1494 	TBTLocalDevice::SetAFHChannelAssessmentMode(aOn);
  1604 	if (aOn != AFHChannelAssessmentMode())
  1495 	StoreChange(EAFHChannelAssessmentMode);
  1605 		{
       
  1606 		TBTLocalDevice::SetAFHChannelAssessmentMode(aOn);
       
  1607 		StoreChange(EAFHChannelAssessmentMode);
       
  1608 		}
  1496 	}
  1609 	}
  1497 
  1610 
  1498 void TBTTrackedLocalDevice::SetAcceptPairedOnlyMode(TBool aOn)
  1611 void TBTTrackedLocalDevice::SetAcceptPairedOnlyMode(TBool aOn)
  1499 	{
  1612 	{
  1500 	LOG_FUNC
  1613 	LOG_FUNC
  1501 	TBTLocalDevice::SetAcceptPairedOnlyMode(aOn);
  1614 	if (aOn != AcceptPairedOnlyMode())
  1502 	StoreChange(EAcceptPairedOnlyMode);
  1615 		{
       
  1616 		TBTLocalDevice::SetAcceptPairedOnlyMode(aOn);
       
  1617 		StoreChange(EAcceptPairedOnlyMode);
       
  1618 		}
  1503 	}
  1619 	}
  1504 
  1620 
  1505 void TBTTrackedLocalDevice::StoreChange(TUint8 aChange)
  1621 void TBTTrackedLocalDevice::StoreChange(TUint8 aChange)
  1506 	{
  1622 	{
  1507 	LOG_FUNC
  1623 	LOG_FUNC