bluetoothmgmt/btmgr/Inc/btdevice.h
changeset 0 29b1cd4cb562
child 47 a1b8f5cc021e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothmgmt/btmgr/Inc/btdevice.h	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,924 @@
+// Copyright (c) 1999-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:
+//
+
+#ifndef BTDEVICE_H
+#define BTDEVICE_H
+
+#include <e32std.h>
+#include <e32base.h>
+#include <s32mem.h>
+
+#include <bluetooth/hci/hciopcodes.h>
+#include <bluetooth/hci/hciconsts.h>
+
+/** The maximum length of a bluetooth device name, as stored in CBTDevice.
+@publishedAll
+@released
+**/
+static const TInt KMaxBluetoothNameLen = KHCILocalDeviceNameMaxLength;
+
+/** The maximum length of the user-assinged friendly name for a bluetooth device, as stored in CBTDevice.
+@publishedAll
+@released
+**/
+static const TInt KMaxFriendlyNameLen = 100;
+
+/** Length of a bluetooth device name. This is not to be used outside of the sub-system. Retained for binary compatibility.
+@internalComponent
+@deprecated
+**/
+static const TInt KMaxBCBluetoothNameLen = 256;
+
+//forward declarations
+class TBTDeviceClass;
+class CBTDevice;
+class TBTServiceSecurityPerDevice;
+
+/** A typedef'ed array of CBTDevice objects.
+@publishedAll
+@released
+**/
+typedef CArrayPtrFlat<CBTDevice> CBTDeviceArray;
+
+/** A typedef'ed array of TBTServiceSecurityPerDevice objects.
+@publishedAll
+@released
+**/
+typedef RArray<TBTServiceSecurityPerDevice> RBTSecurityArray;
+
+/** Wide descriptor of correct length to hold a bluetooth device name.
+@publishedAll
+@released
+**/
+typedef TBuf<KMaxBCBluetoothNameLen> TBTDeviceName;
+
+/** Narrow descriptor of correct length to hold a bluetooth device name.
+
+@publishedAll
+@released
+**/
+typedef TBuf8<KMaxBluetoothNameLen> TBTDeviceName8;
+
+/** Utility class to convert between a wide TBTDeviceName and a narrow TBTDeviceName8.
+@publishedAll
+@released
+**/
+class BTDeviceNameConverter
+	{
+public:
+	IMPORT_C static TBTDeviceName ToUnicodeL(const TBTDeviceName8& aName);
+	IMPORT_C static TBTDeviceName8 ToUTF8L(const TBTDeviceName& aName);
+	};
+
+/** Cleanup utility for CBTDeviceArrays.
+
+Creates a TCleanupItem that calls ResetAndDestroy and then deletes the array.
+
+@publishedAll
+@released
+*/
+class BTDeviceArrayCleanupStack
+
+	{
+public:
+	IMPORT_C static void PushL(CBTDeviceArray* aBTDeviceArray);
+private:
+	static void ResetAndDestroy(TAny* aBTDeviceArray);
+	};
+
+/** Enum used to describe the Bluetooth major service classes.  
+
+See the bluetooth specification for more details.
+
+@publishedAll
+@released
+**/
+enum TBTMajorServiceClass
+	{												//23        13	<- bit number
+	/** Limited discoverable mode **/
+	EMajorServiceLimitedDiscoverableMode = 0x01,	//00000000001
+	/** Positioning **/
+	EMajorServicePositioning = 0x08,				//00000001000
+	/** Networking **/
+	EMajorServiceNetworking = 0x10,					//00000010000
+	/** Rendering **/
+	EMajorServiceRendering = 0x20,					//00000100000
+	/** Capturing **/
+	EMajorServiceCapturing = 0x40,					//00001000000
+	/** Object transfer **/
+	EMajorServiceObjectTransfer = 0x80,				//00010000000
+	/** Audio **/
+	EMajorServiceAudio = 0x100,						//00100000000
+	/** Telephony **/
+	EMajorServiceTelephony = 0x200,					//01000000000
+	/** Information **/
+	EMajorServiceInformation = 0x400,				//10000000000
+	/**
+	 * Old name kept for SC.
+	 * @deprecated
+	 * @see EMajorServiceAudio
+	 */
+	EMajorServiceAudioService = 0x100				//00100000000
+	};
+
+/** Enum used to describe the Bluetooth major device classes.  
+
+See the bluetooth specification for more details.
+
+@publishedAll
+@released
+**/
+enum TBTMajorDeviceClass
+	{												//12  8	<- bit number
+	/** Miscellaneous device **/
+	EMajorDeviceMisc = 0x0,							//00000
+	/** Computer device **/
+	EMajorDeviceComputer = 0x1,						//00001
+	/** Phone device **/
+	EMajorDevicePhone = 0x2,						//00010
+	/** LAN access point device **/
+	EMajorDeviceLanAccessPoint = 0x3,				//00011
+	/** Audio-video device **/
+	EMajorDeviceAV = 0x4,							//00100
+	/** Peripheral device **/
+	EMajorDevicePeripheral = 0x5,					//00101
+	/** Imaging device **/
+	EMajorDeviceImaging = 0x6,						//00110
+	/** Wearable device **/
+	EMajorDeviceWearable = 0x7,						//00111
+	/** Toy device **/
+	EMajorDeviceToy = 0x8,							//01000
+	/** Unclassified device **/
+	EMajorDeviceUnclassified = 0x1F,				//11111
+	/**
+	 * Old name kept for SC.
+	 * @deprecated
+	 * @see EMajorDeviceAV
+	 */
+	EMajorDeviceAudioDevice = 0x4,					//00100
+	/**
+	 * Old name kept for SC.
+	 * @deprecated
+	 * @see EMajorDeviceUnclassified
+	 */
+	EMajorDeviceDeviceUnclassified = 0x1F			//11111
+	};
+
+/** Enum used to describe the Bluetooth minor device classes relating to the "Computer" major device class.
+
+See the bluetooth specification for more details.
+
+@publishedAll
+@released
+**/
+enum TBTMinorDeviceClassComputer
+	{										//7    2	<- bit number
+	/** Unclassified computer device **/
+	EMinorDeviceComputerUnclassified = 0x0,	//000000
+	/** Desktop computer device **/
+	EMinorDeviceComputerDesktop = 0x1,		//000001
+	/** Server computer device **/
+	EMinorDeviceComputerServer = 0x2,		//000010
+	/** Laptop computer device **/
+	EMinorDeviceComputerLaptop = 0x3,		//000011
+	/** Handheld computer device **/
+	EMinorDeviceComputerHandheld = 0x4,		//000100
+	/** Palm computer device **/
+	EMinorDeviceComputerPalmSize = 0x5,		//000101
+	/** Wearable computer device **/
+	EMinorDeviceComputerWearable = 0x6		//000110
+	};
+
+/** Enum used to describe the Bluetooth minor device classes relating to the "phone" major device class.
+
+See the bluetooth specification for more details.
+
+@publishedAll
+@released
+**/
+enum TBTMinorDeviceClassPhone
+	{										//7    2	<- bit number
+	/** Unclassified phone device **/
+	EMinorDevicePhoneUnclassified = 0x0,	//000000
+	/** Cellular phone device **/
+	EMinorDevicePhoneCellular = 0x1,		//000001
+	/** Cordless phone device **/
+	EMinorDevicePhoneCordless = 0x2,		//000010
+	/** Smart phone device **/
+	EMinorDevicePhoneSmartPhone = 0x3,		//000011
+	/** Wired modem phone device **/
+	EMinorDevicePhoneWiredModem = 0x4,		//000100
+	/** ISDN phone device **/
+	EMinorDevicePhoneCommonISDNAccess = 0x5	//000101
+	};
+
+/** Enum used to describe the Bluetooth minor device classes relating to the "LAN" major device class.
+
+See the bluetooth specification for more details.
+@publishedAll
+@released
+**/
+enum TBTMinorDeviceClassLAN
+	{										//7    2	<- bit number
+	/** LAN is currently 0% utilitized **/
+	EMinorDeviceLANFullyAvailable = 0x0,	//000000
+	/** LAN is currently 1-17% utilitized **/
+	EMinorDeviceLANServiceOne = 0x8,		//001000
+	/** LAN is currently 17-33% utilitized **/
+	EMinorDeviceLANServiceTwo = 0x10,		//010000
+	/** LAN is currently 33-50% utilitized **/
+	EMinorDeviceLANServiceThree = 0x18,		//011000
+	/** LAN is currently 50-67% utilitized **/
+	EMinorDeviceLANServiceFour = 0x20,		//100000
+	/** LAN is currently 67-83% utilitized **/
+	EMinorDeviceLANServiceFive = 0x28,		//101000
+	/** LAN is currently 83-99% utilitized **/
+	EMinorDeviceLANServiceSix = 0x30,		//110000
+	/** LAN is currently 100% utilitized **/
+	EMinorDeviceLANNoService = 0x38			//111000
+	};
+
+/** Enum used to describe the Bluetooth minor device classes relating to the "AV" major device class.
+
+See the bluetooth specification for more details.
+
+@publishedAll
+@released
+**/
+enum TBTMinorDeviceClassAV
+	{												//7    2
+	/** Unclassified AV Device **/
+	EMinorDeviceAVUnclassified = 0x0,				//000000
+	/** Headset AV Device **/
+	EMinorDeviceAVHeadset = 0x1,					//000001
+	/** Handsfree AV Device **/
+	EMinorDeviceAVHandsfree = 0x2,					//000010
+	/** Microphone AV Device **/
+	EMinorDeviceAVMicrophone = 0x4,					//000100
+	/** Loudspeaker AV Device **/
+	EMinorDeviceAVLoudspeaker = 0x5,				//000101
+	/** Headphone AV Device **/
+	EMinorDeviceAVHeadphones = 0x6,					//000110
+	/** Portable audio AV Device **/
+	EMinorDeviceAVPortableAudio = 0x7,				//000111
+	/** Car audio AV Device **/
+	EMinorDeviceAVCarAudio = 0x8,					//001000
+	/** Set top box AV Device **/
+	EMinorDeviceAVSetTopBox = 0x9,					//001001
+	/** Hifi audio AV Device **/
+	EMinorDeviceAVHiFiAudio = 0xA,					//001010
+	/** VCR AV Device **/
+	EMinorDeviceAVVCR = 0xB,						//001011
+	/** Video camera AV Device **/
+	EMinorDeviceAVVideoCamera = 0xC,				//001100
+	/** Camcorder AV Device **/
+	EMinorDeviceAVCamcorder = 0xD,					//001101
+	/** Video monitor AV Device **/
+	EMinorDeviceAVVideoMonitor = 0xE,				//001110
+	/** Video display and loudspeaker AV Device **/
+	EMinorDeviceAVVideoDisplayAndLoudspeaker = 0xF,	//001111
+	/** Video conferencing AV Device **/
+	EMinorDeviceAVVideoConferencing = 0x10,			//010000
+	/** Gaming toy AV Device **/
+	EMinorDeviceAVGamingToy = 0x12					//010010
+	};	
+	
+/** Enum used to describe the Bluetooth minor device classes relating to the "Peripheral" major device class.
+
+See the bluetooth specification for more details.
+@publishedAll
+@released
+**/
+enum TBTMinorDeviceClassPeripheral
+	{													//7    2
+	/** Keyboard peripheral device.
+	
+	Note that the keyboard bit can be independently
+	or'd with all other bits.
+	**/
+	EMinorDevicePeripheralKeyboard = 0x10,				//010000
+	/** Pointer peripheral device.
+	
+	Note that the pointer bit can be independently
+	or'd with all other bits.
+	**/
+	EMinorDevicePeripheralPointer = 0x20,				//100000
+	//
+	// All other bits are mutually exclusive
+	//
+	/** Uncategorized peripheral device **/
+	EMinorDevicePeripheralUncategorized = 0x00,			//000000
+	/** Joystick peripheral device **/
+	EMinorDevicePeripheralJoystick = 0x01,				//000001
+	/** Gamepad peripheral device **/
+	EMinorDevicePeripheralGamepad = 0x02,				//000010
+	/** Remote control peripheral device **/
+	EMinorDevicePeripheralRemoteControl = 0x03,			//000011
+	/** Sensing peripheral device **/
+	EMinorDevicePeripheralSensingDevice = 0x04,			//000100
+	/** Digitizer tablet peripheral device **/
+	EMinorDevicePeripheralDigitizerTablet = 0x05,		//000101
+	/** Card reader peripheral device **/
+	EMinorDevicePeripheralCardReader = 0x06				//000110
+	};
+
+/** Enum used to describe the Bluetooth minor device classes relating to the "Imaging" major device class.
+
+See the bluetooth specification for more details.
+@publishedAll
+@released
+
+**/
+enum TBTMinorDeviceClassImaging
+	{											//7    2
+	/** Display imaging device **/
+	EMinorDeviceImagingDisplay = 0x04,			//000100
+	/** Camera imaging device **/
+	EMinorDeviceImagingCamera = 0x08,			//001000
+	/** Scanner imaging device **/
+	EMinorDeviceImagingScanner = 0x10,			//010000
+	/** Printer imaging device **/
+	EMinorDeviceImagingPrinter = 0x20,			//100000
+	};
+
+/** Enum used to describe the Bluetooth minor device classes relating to the "Wearable" major device class.
+
+See the bluetooth specification for more details.
+@publishedAll
+@released
+
+**/
+enum TBTMinorDeviceClassWearable
+	{											//7    2
+	/** Wrist watch wearable device **/
+	EMinorDeviceWearableWatch = 0x01,			//000001
+	/** Pager wearable device **/
+	EMinorDeviceWearablePager = 0x02,			//000010
+	/** Jacket wearable device **/
+	EMinorDeviceWearableJacket = 0x03,			//000011
+	/** Helmet wearable device **/
+	EMinorDeviceWearableHelmet = 0x04,			//000100
+	/** Glasses wearable device **/
+	EMinorDeviceWearableGlasses = 0x05,			//000101	
+	};
+
+/** Enum used to describe the Bluetooth minor device classes relating to the "Toy" major device class.
+
+See the bluetooth specification for more details.
+@publishedAll
+@released
+
+**/
+enum TBTMinorDeviceClassToy
+	{											//7    2
+	/** Robot toy device **/
+	EMinorDeviceToyRobot = 0x01,				//000001
+	/** Vehicle toy device **/
+	EMinorDeviceToyVehicle = 0x02,				//000010
+	/** Doll toy device **/
+	EMinorDeviceToyDoll = 0x03,					//000011
+	/** Controller toy device **/
+	EMinorDeviceToyController = 0x04,			//000100
+	/** Game toy device **/
+	EMinorDeviceToyGame = 0x05,					//000101	
+	};
+	
+/** Encapsulation of device class definitions.
+
+Contains a single TInt as member data and methods to extract the major, minor and service
+class information from that TInt.
+@publishedAll
+@released
+**/
+NONSHARABLE_CLASS(TBTDeviceClass)
+	{
+public:
+	IMPORT_C TBTDeviceClass();
+	IMPORT_C TBTDeviceClass(TUint32 aDeviceClass);
+	IMPORT_C TBTDeviceClass(TUint16 aMajorServiceClass, TUint8 aMajorDeviceClass,
+							TUint8 aMinorDeviceClass);
+
+	IMPORT_C TUint16 MajorServiceClass() const;
+	IMPORT_C TUint8 MajorDeviceClass() const;
+	IMPORT_C TUint8 MinorDeviceClass() const;
+	IMPORT_C TUint32 DeviceClass() const;
+	
+	IMPORT_C TBool operator==(const TBTDeviceClass& aDeviceClass) const;
+	IMPORT_C TBTDeviceClass& operator=(const TBTDeviceClass& aDeviceClass);
+	
+	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+	IMPORT_C void InternalizeL(RReadStream& aStream);
+private:
+	static const TUint32 KStreamVersion = 0x00000001;
+private:
+	TUint32	iDeviceClass;
+	
+	// This data padding has been added to help prevent future binary compatibility breaks	
+	// Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used
+	TUint32	iPadding1; 
+	TUint32	iPadding2; 
+	};
+
+/** Class to store the security override parameters for a particular remote device.
+
+@publishedAll
+@released
+*/
+NONSHARABLE_CLASS(TBTDeviceSecurity)
+	{
+public:
+	/** Enumeration to provide select MITM protection required. */
+	enum TMitmRequired
+		{
+		EMitmUnspecified,	/*!< No specific MITM protection requirements */
+		EMitmRequired		/*!< Require the link is MITM protected */
+		};
+	
+public:
+	IMPORT_C TBTDeviceSecurity();
+	IMPORT_C TBTDeviceSecurity(TUint8 aSecurity);
+	IMPORT_C TBTDeviceSecurity(TUint8 aSecurity, TUint aPasskeyMinLength);
+	IMPORT_C TBTDeviceSecurity(TBool aNoAuthenticate, TBool aNoAuthorise, TBool aEncrypt, TBool aBanned);
+	IMPORT_C TBTDeviceSecurity(TMitmRequired aMitmRequirements, TBool aNoAuthorise, TBool aEncrypt, TBool aBanned);
+	
+	IMPORT_C void SetNoAuthenticate(TBool aDecision);
+	IMPORT_C void SetMitmRequirements(TMitmRequired aDecision);
+	IMPORT_C void SetNoAuthorise(TBool aDecision);
+	IMPORT_C void SetEncrypt(TBool aDecision);
+	IMPORT_C void SetBanned(TBool aDecision);
+	
+	IMPORT_C TBool NoAuthenticate() const;
+	IMPORT_C TMitmRequired MitmRequirements() const;
+	IMPORT_C TBool NoAuthorise() const;
+	IMPORT_C TBool Encrypt() const;
+	IMPORT_C TBool Banned() const;
+	IMPORT_C TUint PasskeyMinLength() const;
+	
+	
+	IMPORT_C TUint8 SecurityValue() const;
+	IMPORT_C void SetSecurityValue(TUint8 aDeviceSecurity);
+	IMPORT_C TInt SetPasskeyMinLength(TUint aPasskeyMinLength);	
+	
+	
+	IMPORT_C TBool operator==(const TBTDeviceSecurity& aDeviceSecurity) const;
+	IMPORT_C TBool operator!=(const TBTDeviceSecurity& aDeviceSecurity) const;
+	
+	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+	IMPORT_C void InternalizeL(RReadStream& aStream);
+
+public:
+	/** Enumeration to assist in parsing of security settings. */
+	enum TBTDeviceSecuritySettings
+		{
+		ENoAuthenticate			= 0x01, /*!< Don't authenticate the link @deprecated */
+		ENoAuthorise			= 0x02, /*!< Don't authorise the connection */
+		EEncrypt				= 0x04, /*!< Encrypt the link */
+		EBanned					= 0x08, /*!< Don't connect to the device */
+		EMitmProtectionRequired	= 0x10, /*!< Require the link is MITM protected */
+		};
+	
+private:
+	static const TUint32 KStreamVersion = 0x00000001;
+
+private:
+	TUint8	iSecurity;
+	TUint	iPasskeyMinLength;	
+	
+	// This data padding has been added to help prevent future binary compatibility breaks	
+	// Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used
+	TUint32	iPadding1; 
+	TUint32	iPadding2; 
+	};
+
+/** Class to tie a service uid with a device security setting.
+
+This allows us to have service-specific security settings for a device.
+
+@publishedAll
+@released
+*/
+NONSHARABLE_CLASS(TBTServiceSecurityPerDevice)
+	{
+public:
+	IMPORT_C TBTServiceSecurityPerDevice();
+	IMPORT_C TBTServiceSecurityPerDevice(const TBTDevAddr& aDevice, const TBTDeviceSecurity& aSecuritySettings);
+	IMPORT_C TBTServiceSecurityPerDevice(const TBTServiceSecurityPerDevice&);
+	
+	IMPORT_C void SetDeviceSecurity(const TBTDeviceSecurity& aSecuritySettings);
+	IMPORT_C void SetAddress(const TBTDevAddr& aAddress);
+
+	IMPORT_C const TBTDeviceSecurity& DeviceSecurity() const;
+	IMPORT_C const TBTDevAddr& DeviceAddress() const;
+	
+	IMPORT_C void operator=(const TBTServiceSecurityPerDevice& aServiceSecurityPerDevice);
+	IMPORT_C TBool operator==(const TBTServiceSecurityPerDevice& aServiceSecurityPerDevice) const;
+	IMPORT_C TBool operator!=(const TBTServiceSecurityPerDevice& aServiceSecurityPerDevice) const;
+	
+	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+	IMPORT_C void InternalizeL(RReadStream& aStream);
+private:
+	static const TUint32 KStreamVersion = 0x00000001;
+private:
+	TBTDevAddr			iDeviceAddress;		/*!< the address of the device for the overriding security **/
+	TBTDeviceSecurity	iDeviceSecurity;	/*!< the overriding security */
+	
+	// This data padding has been added to help prevent future binary compatibility breaks	
+	// Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used
+	TUint32		iPadding1; 
+	TUint32		iPadding2; 	
+	};
+
+/** Stores parameters for a nameless device.
+
+A class which stores useful parameters concerning a remote device
+But *not* including names
+@see CBTDevice
+@publishedAll
+@released
+*/
+NONSHARABLE_CLASS(TBTNamelessDevice)
+	{
+friend class CBTDevice;
+
+private:
+	/** For Symbian use only
+	@internalComponent	
+	*/
+	NONSHARABLE_CLASS(TBTBasebandParameters)
+		{
+	public:
+		void ExternalizeL(RWriteStream& aStream) const;
+		void InternalizeL(RReadStream& aStream);
+
+		TUint8 iPageScanRepetitionMode;			/*!< Page Scan repetition mode of remote device ( valid if > 0 ) */
+		TUint8 iPageScanPeriodMode;				/*!< Page scan period mode of remote device */
+		TUint8 iPageScanMode;					/*!< Page scan mode of remote device ( valid if > 0 ) */
+		TUint16 iClockOffset;					/*!< clock off set of remote device ( valid if > 0 ) */
+		
+	private:
+		static const TUint32 KStreamVersion = 0x00000001;
+		};
+public:
+	
+	IMPORT_C TBTNamelessDevice();
+	IMPORT_C const TBTDevAddr& Address() const;
+	IMPORT_C const TBTDeviceClass& DeviceClass() const;
+	IMPORT_C const TBTLinkKey& LinkKey() const;
+	IMPORT_C TBTLinkKeyType LinkKeyType() const;
+	IMPORT_C TUint8 PageScanRepMode() const;
+	IMPORT_C TUint8 PageScanMode() const;
+	IMPORT_C TUint8 PageScanPeriodMode() const;
+	IMPORT_C TUint16 ClockOffset() const;
+	IMPORT_C const TTime& Seen() const;
+	IMPORT_C const TTime& Used() const;
+	IMPORT_C const TBTDeviceSecurity& GlobalSecurity() const;
+	IMPORT_C void SetAddress(const TBTDevAddr& aBDAddr);
+	IMPORT_C void SetDeviceClass(TBTDeviceClass aDeviceClass);
+	IMPORT_C void SetLinkKey(const TBTLinkKey& aLinkKey);
+	IMPORT_C void SetLinkKey(const TBTLinkKey& aLinkKey, TBTLinkKeyType aLinkKeyType);
+	IMPORT_C void SetPageScanRepMode(TUint8 aPageScanRepMode);
+	IMPORT_C void SetPageScanPeriodMode(TUint8 aPageScanPeriodMode);
+	IMPORT_C void SetPageScanMode(TUint8 aPageScanMode);
+	IMPORT_C void SetClockOffset(TUint16 aClockOffSet);
+	IMPORT_C void SetGlobalSecurity(const TBTDeviceSecurity& aSetting);
+	IMPORT_C void SetUsed(const TTime& aDateTime);
+	IMPORT_C void SetSeen(const TTime& aDateTime);
+	IMPORT_C TBool IsValidAddress() const;
+	IMPORT_C TBool IsValidDeviceClass() const;
+	IMPORT_C TBool IsValidLinkKey() const;
+	IMPORT_C TBool IsValidGlobalSecurity() const;
+	IMPORT_C TBool IsValidPageScanRepMode() const;
+	IMPORT_C TBool IsValidPageScanMode() const;
+	IMPORT_C TBool IsValidPageScanPeriodMode() const;
+	IMPORT_C TBool IsValidClockOffset() const;
+	IMPORT_C TBool IsValidUsed() const;
+	IMPORT_C TBool IsValidSeen() const;
+	IMPORT_C void DeleteLinkKey();
+	IMPORT_C void Update(const TBTNamelessDevice& aDevice);
+	IMPORT_C TBTNamelessDevice& operator=(const TBTNamelessDevice& aDevice);
+	IMPORT_C TBool operator==(const TBTNamelessDevice& aDevice) const;
+	IMPORT_C TBool operator!=(const TBTNamelessDevice& aDevice) const;
+	IMPORT_C TUint CompareTo(const TBTNamelessDevice& aDevice) const;
+	IMPORT_C TBool IsPaired() const;
+	IMPORT_C void SetPaired(TBool aPaired);
+	IMPORT_C void SetPaired(TBTLinkKeyType aLinkKeyType);
+	IMPORT_C TBool IsValidPaired() const;
+	IMPORT_C const TBTPinCode& PassKey() const;
+	IMPORT_C void  SetPassKey(const TBTPinCode& aPassKey);
+	IMPORT_C TBool IsValidPassKey() const;
+	IMPORT_C TUint PassKeyLength() const;
+	IMPORT_C TBool IsValidUiCookie() const;
+	IMPORT_C void SetUiCookie(TUint32 aUiCookie);
+	IMPORT_C TUint32 UiCookie() const;
+	
+	/**	Bitfield of TBTNamelessDevice attributes
+	This enum is to only be used by phone manufacturers, not by application developers.
+	@publishedPartner
+	@released
+	*/	
+	enum TBTDeviceSet
+		{
+		EAddress				=	0x000001, /*!< Device address */
+		EDeviceClass			=	0x000002, /*!< Device class */
+		ELinkKey				=	0x000004, /*!< Link key */
+		EGlobalSecurity			=	0x000008, /*!< Global security settings */
+		EPageScanRepMode		=	0x000010, /*!< Page scan repition mode */
+		EPageScanMode			=	0x000020, /*!< Page scan mode */
+		EPageScanPeriodMode		=	0x000040, /*!< Page scan period */
+		EClockOffset			=	0x000080, /*!< Clock offset */
+		EUsed					=	0x000100, /*!< Last used */
+		ESeen					=	0x000200, /*!< Last seen */
+		EIsPaired				=	0x000400, /*!< Is paired */
+		EPassKey				=	0x000800, /*!< PassKey */
+		EUiCookie				=	0x001000, /*!< User interface specific cookie */
+
+		EAllNamelessProperties	= 0x00ffffff, /*!< All nameless properties set */
+		// Two highest nibbles used by CBTDevice
+		};
+
+private:
+	TUint32					iSetMask;		/*!< Bit mask indicating the data members that have been set */
+	TBTDevAddr				iBDAddr; 		/*!< The BT address of the remote device */
+	TBTDeviceClass			iDeviceClass;	/*!< The class(es) of the remote device */
+	TBTLinkKey				iLinkKey;		/*!< The link key */
+	TBTDeviceSecurity		iGlobalSecurity;/*!< The overall security criteria for all services which this device may wish to use */
+	TBTBasebandParameters	iBasebandParams;/*!< The baseband parameters */
+	TTime					iUsed;			/*!< when last connect from/to */
+	TTime					iSeen;			/*!< when last seen in inquiry */
+	TBool					iPaired;		/*!< Whether this device is paired */
+	TBTPinCode				iPassKey;		/*!< PassKey */
+	TBTLinkKeyType			iLinkKeyType;	/*!< Link Key Type */
+	TUint32					iUiCookie;		/*!< The cookie attached to this device by the UI */
+	
+	// This data padding has been added to help prevent future binary compatibility breaks.
+	// iPadding1 has been used for iLinkKeyType
+	// iPadding2 has been used for iUiCookie 
+	TUint32		iPadding3; 
+	TUint32		iPadding4; 
+	};
+
+
+/** Encapsulates all information that must be known about a device.
+
+Stores useful information concerning a remote device, including names
+
+@publishedAll
+@released
+*/
+NONSHARABLE_CLASS(CBTDevice) : public CBase
+	{
+friend class TBTNamelessDevice;
+public:
+	
+	IMPORT_C static CBTDevice* NewL(const TBTDevAddr& aBDAddr);
+	IMPORT_C static CBTDevice* NewLC(const TBTDevAddr& aBDAddr);
+	IMPORT_C static CBTDevice* NewL(const TBTNamelessDevice& aNamelessDevice);
+	IMPORT_C static CBTDevice* NewLC(const TBTNamelessDevice& aNamelessDevice);
+	IMPORT_C static CBTDevice* NewL();
+	IMPORT_C static CBTDevice* NewLC();
+	IMPORT_C ~CBTDevice();
+	IMPORT_C CBTDevice* CopyL() const;
+	IMPORT_C void UpdateL(const CBTDevice& aDevice);
+	IMPORT_C void AssignL(CBTDevice& aDevice);
+	IMPORT_C const TDesC8& DeviceName() const;
+	IMPORT_C const TDesC& FriendlyName() const;
+	IMPORT_C void SetDeviceNameL(const TDesC8& aName);
+	IMPORT_C void SetFriendlyNameL(const TDesC& aName);
+	IMPORT_C TBool IsValidDeviceName() const;
+	IMPORT_C TBool IsValidFriendlyName() const;
+	IMPORT_C TBool operator==(const CBTDevice& aDevice) const;
+	IMPORT_C TBool operator!=(const CBTDevice& aDevice) const;
+	IMPORT_C TUint CompareTo(const CBTDevice& aDevice) const;
+	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+	IMPORT_C void InternalizeL(RReadStream& aStream);
+	IMPORT_C const TBTDevAddr& BDAddr() const;
+	IMPORT_C const TBTLinkKey& LinkKey() const;
+	IMPORT_C TBTLinkKeyType LinkKeyType() const;
+	IMPORT_C TBTDeviceClass DeviceClass() const;
+	IMPORT_C const TBTDeviceSecurity GlobalSecurity() const;
+	IMPORT_C void SetDeviceAddress(const TBTDevAddr& aBDAddr);
+	IMPORT_C void SetDeviceClass(TBTDeviceClass aDeviceClass);
+	IMPORT_C void SetLinkKey(const TBTLinkKey& aLinkKey);
+	IMPORT_C void SetLinkKey(const TBTLinkKey& aLinkKey, TBTLinkKeyType aLinkKeyType);
+	IMPORT_C void SetGlobalSecurity(const TBTDeviceSecurity& aSetting);
+	IMPORT_C void DeleteLinkKey();
+	IMPORT_C TBool IsValidBDAddr() const;
+	IMPORT_C TBool IsValidDeviceClass() const;
+	IMPORT_C TBool IsValidLinkKey() const;
+	IMPORT_C TBool IsValidGlobalSecurity() const;
+	IMPORT_C const TTime& Seen() const;	
+	IMPORT_C const TTime& Used() const;
+	IMPORT_C void SetUsed(const TTime& aDateTime);
+	IMPORT_C void SetSeen(const TTime& aDateTime);
+	IMPORT_C TBool IsValidUsed() const;
+	IMPORT_C TBool IsValidSeen() const;
+	IMPORT_C TBTNamelessDevice& AsNamelessDevice();	
+	IMPORT_C const TBTNamelessDevice& AsNamelessDevice() const;
+	IMPORT_C TBool IsPaired() const;
+	IMPORT_C void SetPaired(TBool aPaired);
+	IMPORT_C void SetPaired(TBTLinkKeyType aLinkKeyType);
+	IMPORT_C TBool IsValidPaired() const;
+	IMPORT_C const TBTPinCode& PassKey() const;		
+	IMPORT_C void  SetPassKey(const TBTPinCode& aPassKey);		
+	IMPORT_C TBool IsValidPassKey() const;
+	IMPORT_C TUint PassKeyLength() const;
+	IMPORT_C TBool IsValidUiCookie() const;
+	IMPORT_C void SetUiCookie(TUint32 aUiCookie);
+	IMPORT_C TUint32 UiCookie() const;
+	
+private:
+	CBTDevice();
+	void ConstructL();
+	void ConstructL(const TBTDevAddr& aAddr);
+	void ConstructL(const TBTNamelessDevice& aNamelessDevice);
+	void CommonConstructL();
+		
+public:
+	/** Describes the similarities between two devices. */
+	enum TBTDeviceNameSelector // not very encapsulated - we extend the enum of TBTNamelessDevice
+		{
+		/** Device name. */
+		EDeviceName		= 0x40000000,
+		/** Friendly name. */
+		EFriendlyName	= 0x80000000,
+		/** 
+		All name properties
+		*/
+		EAllNameProperties = 0xff000000,
+		/** Last enum. This is NOT a name property */
+		ELast 			= KMaxTUint,
+		// All but two highest nibbles used by TBTNamelessDevice
+		};
+private:
+	static const TUint32 KStreamVersion = 0x00000001;
+private:
+	HBufC8*	iDeviceName;
+	HBufC*	iFriendlyName;
+	TBTNamelessDevice iDevice;
+	};
+
+
+/**Number of bytes in an AFH Host Channel Classification. 
+
+Size and Length of the TBTAFHHostChannelClassification Descriptor
+
+@see TBTAFHHostChannelClassification
+@publishedAll
+@released
+*/
+const TUint8 KHCIAFHHostChannelClassificationSize=10;
+
+
+/**Required number of unknown channels in an AFH Host Channel Classification.
+
+That is least number of channels in the 79 channel set that must be left
+NOT set to bad. In AFH host channel classification a channel may labelled
+'bad' (implies do not use) or 'unknown' (implies that it is up to the 
+controller to decide if should be used). An attempt to create a 
+TBTAFHHostChannelClassification with more than KAFHMinUnknownChannels 
+set to 'bad' will result in a KErrUnderflow error being returned.
+
+@see TBTAFHHostChannelClassification
+@publishedAll
+@released
+*/
+const TUint8 KAFHMinUnknownChannels=20;
+
+
+/**Number of channels in the Bluetooth channel set that is used with AFH
+
+The Bluetooth channel set is the set of frequencies used in the Bluetooth
+hopping sequence. AFH allows a connection to opt not to use some of the 
+frequencies in this set.
+
+@see TBTAFHHostChannelClassification
+@publishedAll
+@released
+*/
+const TUint8 KAFHNumChannels=79;
+
+
+/**Descriptor class that should be used to help set up an 
+AFH host channel classification for the controller.
+
+The bits in each byte of this descriptor are used
+to tell the controller which channels the host
+anticipates will become busy and so advisable for
+Bluetooth to avoid. Such channels are referred to 
+as 'bad', and are represented by bits set to 0.  
+Channels that are not 'bad' are referred to as 'unknown' implying
+simply that the host has no knowledge that they are, or
+are about to become 'bad'. These are represented by bits set to 1.
+Note: The Bluetooth specification demands that at least 20 channels 
+must be set to 'unknown'. Any attempt by the user of this class
+to set too many 'bad' channels will result in the return of a 
+KErrNotSupported error, and the attempt having no effect.
+
+
+@publishedAll
+@released
+*/
+NONSHARABLE_CLASS(TBTAFHHostChannelClassification) : public TBuf8<KHCIAFHHostChannelClassificationSize>
+	{
+public:
+	IMPORT_C TBTAFHHostChannelClassification();
+	IMPORT_C void Reset();
+	IMPORT_C TInt Validate() const;
+	IMPORT_C TInt SetChannelBad(const TUint8 aChannel);
+	IMPORT_C TInt SetChannelRangeBad(const TUint8 aChannelRangeLowest, const TUint8 aChannelRangeHighest);
+	
+private:
+	TInt DoSetChannelBad(const TUint8 aChannel);
+	TInt BitByteIndices(TUint8& aByteIndex, TUint8& aBitIndex, const TUint8 aChannel) const;
+	TUint8 NumUnknownsWithinRange(const TUint8 aChannelRangeLowest, const TUint8 aChannelRangeHighest) const;
+	
+	// This data padding has been added to help prevent future binary compatibility breaks
+	// Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used	
+	TUint32     iPadding1; 
+	TUint32     iPadding2;	
+    };
+
+
+/** Class used to exchange the local settings with the Registry server.
+
+	Not a complete set of details of the local device
+
+	@publishedAll
+	@released
+
+*/
+NONSHARABLE_CLASS(TBTLocalDevice)
+	{
+public:
+	IMPORT_C TBTLocalDevice();	
+	IMPORT_C const TBTDevAddr& Address() const;
+	IMPORT_C TUint32 DeviceClass() const;	
+	IMPORT_C const TDesC8& DeviceName() const;	
+	IMPORT_C THCIScanEnable ScanEnable() const;	
+	IMPORT_C TBool LimitedDiscoverable() const;	
+	IMPORT_C TUint8 PowerSetting() const;
+	IMPORT_C TBool AFHChannelAssessmentMode() const;
+	IMPORT_C TBool AcceptPairedOnlyMode() const;
+	IMPORT_C void SetAddress(const TBTDevAddr& aAddr);	
+	IMPORT_C void SetDeviceClass(TUint32 aCod);	
+	IMPORT_C void SetDeviceName(const TDesC8& aName);	
+	IMPORT_C void SetScanEnable(THCIScanEnable aEnable);	
+	IMPORT_C void SetLimitedDiscoverable(TBool aOn);	
+	IMPORT_C void SetPowerSetting(TUint8 aPowerSetting);	
+	IMPORT_C void SetAFHChannelAssessmentMode(TBool aOn);	
+	IMPORT_C void SetAcceptPairedOnlyMode(TBool aOn);	
+	IMPORT_C TBool IsValidAddress() const;	
+	IMPORT_C TBool IsValidDeviceClass() const;	
+	IMPORT_C TBool IsValidDeviceName() const;	
+	IMPORT_C TBool IsValidScanEnable() const;	
+	IMPORT_C TBool IsValidLimitedDiscoverable() const;	
+	IMPORT_C TBool IsValidPowerSetting() const;
+	IMPORT_C TBool IsValidAFHChannelAssessmentMode() const;
+	IMPORT_C TBool IsValidAcceptPairedOnlyMode() const;
+
+protected:
+	enum
+		{
+		EAddress					= 0x0001,
+		ECoD						= 0x0002,
+		EDeviceName					= 0x0004,
+		EPowerSetting				= 0x0008,
+		EScanEnable					= 0x0010,
+		ELimitedDiscoverable 		= 0x0020,
+		EAFHChannelAssessmentMode	= 0x0040,
+		EAcceptPairedOnlyMode 		= 0x0080,
+		};	//< Used for indicating if a setting has been set (i.e. not a default/random value) @see iBitMask
+		
+private:		
+	enum
+		{
+		EAFHChannelAssessmentModeValue	= 0x0001,
+		EAcceptPairedOnlyModeValue		= 0x0002,
+		};	//< Used for settings requiring little space: allows new settings ot be introduced without increasing the size of this class @see iSimpleSettings
+			
+		
+
+	TUint			iSetMask;		 //< Bit mask indicating the data members that have been set
+	TBTDevAddr		iAddress;
+	TUint32			iCod;
+	TBTDeviceName8	iLocalName;
+	TUint8			iPowerSetting;
+	THCIScanEnable	iScanEnable;
+	TBool			iLimitedDiscoverable;
+	TUint32			iSimpleSettings; //< Only first two bits currently used - for AFH Channel Assessment Mode, and Accept Paired Only Mode
+	};
+
+
+#endif