bluetoothmgmt/bluetoothclientlib/inc/bttypes.h
changeset 0 29b1cd4cb562
child 23 5b153be919d4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothmgmt/bluetoothclientlib/inc/bttypes.h	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,946 @@
+// 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:
+// BT protocol wide types
+// 
+//
+
+#ifndef _BTTYPES_H
+#define _BTTYPES_H
+
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <bttypespartner.h>
+#endif
+
+#include <e32std.h>
+#include <bluetooth/eirdatacodec.h>
+
+/**
+@publishedAll
+@released
+
+Minimum eSCO connection latency in milliseconds.  Attempts to specify less than this will be silently
+increased to this level.
+*/
+static const TInt KMinESCOLatency = 4;
+
+/**
+@publishedAll
+@released
+
+Typedef to represent a HCI connection handle.
+*/
+typedef TUint16 THCIConnHandle;
+
+/**
+@publishedAll
+@released
+
+Bluetooth SIG specified values for specification of (piconet) role.
+*/
+enum TBTBasebandRole
+	{
+	EMaster			= 0x00, /*!< Master role */
+	ESlave			= 0x01, /*!< Slave role */
+	ERoleUnknown,			/*!< Unknown role */
+	};
+
+/**
+@publishedAll
+@released
+
+Bluetooth SIG specified values for indicating link modes.
+*/
+enum TBTLinkMode
+    {
+    EActiveMode		= 0x00, /*!< Active mode */
+    EHoldMode		= 0x01, /*!< Hold mode */
+    ESniffMode		= 0x02, /*!< Sniff mode */
+    EParkMode		= 0x04, /*!< Park mode */
+	EScatterMode	= 0x08, /*!< Scatter mode */
+    };
+
+/**
+@publishedAll
+@released
+
+Typedef to represent a union of TBTLinkMode values.
+*/
+typedef TUint32 TBTLinkModeSet;
+
+/**
+@publishedAll
+@released
+
+Bitmask values to help request combinations of link modes.
+@see TBTLinkMode
+*/
+enum TBTLinkModeCombinations
+	{
+	EAnyLowPowerMode = (EHoldMode | ESniffMode | EParkMode | EScatterMode) /*!< Any low power mode */
+	};
+
+/**
+@publishedAll
+@released
+
+Bluetooth SIG specified values for indicating packet types.
+
+DM1, DH1, DM3, DH3, DM5, DH5 are ACL packet types
+HV1, HV2, HV3 are SCO (synchronous link) packet types
+*/
+enum TBTPacketType
+	{
+	EPacketsDM1			= 0x0008, /*!< DM1 ACL packet type */
+	EPacketsDH1			= 0x0010, /*!< DH1 ACL packet type */
+	EPacketsDM3			= 0x0400, /*!< DM3 ACL packet type */
+	EPacketsDH3			= 0x0800, /*!< DH3 ACL packet type */
+	EPacketsDM5			= 0x4000, /*!< DM5 ACL packet type */
+	EPacketsDH5			= 0x8000, /*!< DH5 ACL packet type */
+	
+	EPackets2_DH1		= 0x0002, /*!< 2-DH1 ACL packet type */
+	EPackets3_DH1		= 0x0004, /*!< 3-DH1 ACL packet type */
+	EPackets2_DH3		= 0x0100, /*!< 2-DH3 ACL packet type */
+	EPackets3_DH3		= 0x0200, /*!< 3-DH3 ACL packet type */
+	EPackets2_DH5		= 0x1000, /*!< 2-DH5 ACL packet type */
+	EPackets3_DH5		= 0x2000, /*!< 3-DH5 ACL packet type */
+
+	EPacketsHV1			= 0x0020, /*!< HV1 SCO packet type */
+	EPacketsHV2			= 0x0040, /*!< HV2 SCO packet type */
+	EPacketsHV3			= 0x0080, /*!< HV3 SCO packet type */
+	};
+
+/**
+@publishedAll
+@released
+
+Typedef to represent a set of SCO packet types.
+*/
+typedef TUint16 TBTSCOPackets;
+
+/**
+@publishedAll
+@released
+
+Typedef to represent a set of ACL packet types.
+*/
+typedef TUint16 TBTACLPackets;
+
+/**
+@publishedAll
+@released
+
+Bitmask values to help request combinations of packets.
+@see TBTPacketType
+*/
+enum TBTPacketTypeCombinations
+	{
+	EAnyACLPacket	 = EPacketsDM1 | EPacketsDM3 | EPacketsDM5 | EPacketsDH1 | EPacketsDH3 | EPacketsDH5, /*!< Any ACL packet */
+	EAnyNonEdrACLPacket = EAnyACLPacket | EPackets2_DH1 | EPackets3_DH1 | EPackets2_DH3 | EPackets3_DH3 | EPackets2_DH5 | EPackets3_DH5, /*!< Any Non-EDR ACL packet */
+	EAnySCOPacket	 = EPacketsHV1 | EPacketsHV2 | EPacketsHV3, /*!< Any SCO packet */
+	EAnyPacket		= EAnyACLPacket | EAnySCOPacket  /*!< Any packet */
+	};
+
+
+/**
+@publishedAll
+@released
+
+Typedef to represent a set of synchronous packet types (SCO and eSCO on v1.2).
+@see TBTSyncPackets::TSyncPackets
+*/
+typedef TUint32 TBTSyncPacketTypes;
+
+/**
+@publishedAll
+@deprecated
+
+This constant is no longer needed to translate the SCO mapping of HV packet types to Synchronous
+because CBluetoothSynchronousLink::SetupConnection(const TBTDevAddr& aBDAddr, const TUint16 aPacketTypes)
+adjusts aPacketTypes internally on behalf of clients.
+*/
+static const TInt KSCOvsSyncHVOffset = 5;
+
+
+/**
+@publishedAll
+@released
+
+Class to represent a set of synchronous packet types (SCO and eSCO on v1.2).
+This differs from TBTSyncPacketTypes as it is the interface used by CBluetoothSynchronousLink
+in order to detect the difference between a pre and post eSCO caller.  This is necessary
+as HV1 packets in the SCO numbering clash with EV5 packets in the sync numbering.
+*/
+NONSHARABLE_CLASS(TBTSyncPackets)
+	{
+	public:
+		/**
+		@publishedAll
+		@released
+		
+		Individual synchronous packet types.
+		@see TBTSyncPacketTypes
+		*/
+		enum TSyncPackets
+			{
+			ESyncPacketsHV1		= 0x10001,
+			ESyncPacketsHV2		= 0x10002,
+			ESyncPacketsHV3		= 0x10004,
+
+			ESyncPacketsEV3		= 0x20008,
+			ESyncPacketsEV4		= 0x20010,
+			ESyncPacketsEV5		= 0x20020,
+			
+			ESyncAnySCOPacket	= ESyncPacketsHV1 | ESyncPacketsHV2 | ESyncPacketsHV3,
+			ESyncAnyESCOPacket	= ESyncPacketsEV3 | ESyncPacketsEV4 | ESyncPacketsEV5
+			};
+	
+	public:
+		IMPORT_C explicit TBTSyncPackets(TBTSyncPacketTypes aPackets);
+		IMPORT_C TBTSyncPacketTypes operator()() const;
+		
+	private:
+		TUint32 iPacketTypes;
+
+		// 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;
+	};
+
+
+/**
+@publishedAll
+@released
+
+eSCO links can have different retransmission options, optimised for link usage,
+power or reliability.
+
+@see CBluetoothSynchronousLink::SetRetransmissionEffort
+*/
+enum TBTeSCORetransmissionTypes
+	{
+	EeSCORetransmitNone			= 0,
+	EeSCORetransmitPower		= 1,
+	EeSCORetransmitReliability	= 2,
+	EeSCORetransmitDontCare		= 0xff
+	};
+
+/**
+@publishedAll
+@released
+
+eSCO unspecified bandwidth.  This value can only be used by the accepting side
+of an eSCO link, to allow any bandwidth to be specified by the initiator.
+Otherwise both sides of the link must agree on the same bandwidth.
+
+@see CBluetoothSynchronousLink::SetBandwidth
+@see CBluetoothSynchronousLink::AcceptConnection
+*/
+static const TUint32 KESCOBandwidthDontCare = KMaxTUint32;
+
+/**
+@publishedAll
+@released
+
+Bluetooth SIG specified values indicating whether a device
+is physically able to support a baseband (or link manager protocol) feature
+*/
+enum TBTSupportedFeatures
+	{
+	ESupportedThreeSlotPackets				= 1<<0,  /*!< Three slot packets are supported */
+	ESupportedFiveSlotPackets				= 1<<1,  /*!< Five slot packets are supported */
+	ESupportedEncryption					= 1<<2,  /*!< Encryption is supported */
+	ESupportedSlotOffset					= 1<<3,  /*!< Slot offset is supported */
+	ESupportedTimingAccuracy				= 1<<4,  /*!< Timing accuracy is supported */
+	ESupportedSwitch						= 1<<5,  /*!< Role switch is supported */
+	ESupportedHoldMode						= 1<<6,  /*!< Hold mode is supported */
+	ESupportedSniffMode						= 1<<7,  /*!< Sniff mode is supported */
+	ESupportedParkMode						= 1<<8,  /*!< Park mode is supported */
+	ESupportedRSSI							= 1<<9,  /*!< Receive signal strength indication is supported */
+	ESupportedChannelQualityDrivenDataRate	= 1<<10, /*!< Channel quality driven data rate is supported */
+	ESupportedSCOLink						= 1<<11, /*!< SCO links are supported */
+	ESupportedHV2Packets					= 1<<12, /*!< HV2 packets are supported */
+	ESupportedHV3Packets					= 1<<13, /*!< HV3 packets are supported */
+	ESupportedu_lawLog						= 1<<14, /*!< SCO u-law encoding is supported */
+	ESupportedA_lawLog						= 1<<15, /*!< SCO A-law encoding is supported */
+	ESupportedCVSD							= 1<<16, /*!< SCO Continuously variable slope delta modulation is supported */
+	ESupportedPagingScheme					= 1<<17, /*!< Paging scheme is supported */
+	ESupportedPowerControl					= 1<<18, /*!< Power control is supported */
+	ESupportedTransparentSCOData			= 1<<19, /*!< Transparent SCO data is supported */
+	ESupportedFlowControlLagBit0			= 1<<20, /*!< Flow control lag bit 0 is supported */
+	ESupportedFlowControlLagBit1			= 1<<21, /*!< Flow control lag bit 1 is supported */
+	ESupportedFlowControlLagBit2			= 1<<22, /*!< Flow control lag bit 2 is supported */
+	};
+
+/**
+@publishedAll
+@released
+
+Bitmask values for notifying/requesting notification of the state of a physical link.
+
+These values have a two fold purpose:
+1) They can be used along with TBTPhysicalLinkStateNotifierCombinations to specify
+a set of baseband change events for which notification is desired.
+2) They can be used to notify the state of a physical link or a subset of that state.
+For example if only mode change events are being monitored, then at each mode change event
+only the bit reperesenting the new mode will be returned, however if the whole link state
+is required, then a combination of bit values indicating that state will be returned.
+
+THESE BIT VALUES MUST ONLY BE USED WHEN REQUESTING NOTIFICATION, OR WHEN PARSING THE
+RESULTS OF A NOTIFICATION. All other baseband state activities should use one of the 
+appropriate Bluetooth SIG specified enums
+@see TBTBasebandRole
+@see TBTLinkMode
+@see TBTLinkModeCombinations
+@see TBTPacketType
+@see TBTPacketTypeCombinations
+*/
+enum TBTPhysicalLinkStateNotifier
+	{
+	ENotifyMaster					= 0x00000001, /*!< Master */
+	ENotifySlave					= 0x00000002, /*!< Slave */
+
+	ENotifyActiveMode				= 0x00000004, /*!< Active mode */
+	ENotifySniffMode				= 0x00000008, /*!< Sniff mode */
+	ENotifyParkMode					= 0x00000010, /*!< Park mode */
+	ENotifyHoldMode					= 0x00000020, /*!< Hold mode */
+
+	ENotifyMaxSlots1				= 0x00000040, /*!< Max slots 1 */
+	ENotifyMaxSlots3				= 0x00000080, /*!< Max slots 3 */
+	ENotifyMaxSlots5				= 0x00000100, /*!< Max slots 5 */
+
+	ENotifyPacketsDM1				= 0x00000200, /*!< Packets DM1 */
+	ENotifyPacketsDH1				= 0x00000400, /*!< Packets DH1 */
+	ENotifyPacketsDM3				= 0x00000800, /*!< Packets DM3 */
+	ENotifyPacketsDH3				= 0x00001000, /*!< Packets DH3 */
+	ENotifyPacketsDM5				= 0x00002000, /*!< Packets DM5 */
+	ENotifyPacketsDH5				= 0x00004000, /*!< Packets DH5 */
+
+	ENotifyPacketsHV1				= 0x00008000, /*!< HV1 */
+	ENotifyPacketsHV2				= 0x00010000, /*!< HV2 */
+	ENotifyPacketsHV3				= 0x00020000, /*!< HV3 */
+
+	ENotifyAuthenticationComplete	= 0x00040000, /*!< Authentication Complete */
+	ENotifyEncryptionChangeOn		= 0x00080000, /*!< Encryption Change On */
+	ENotifyEncryptionChangeOff		= 0x00100000, /*!< Encryption Change Off */
+
+	ENotifyPhysicalLinkUp			= 0x00200000, /*!< Physical Link Up */
+	ENotifyPhysicalLinkDown			= 0x00400000, /*!< Physical Link Down */
+	ENotifyPhysicalLinkError		= 0x00800000, /*!< Physical Link Error */
+
+	ENotifySynchronousLinkUp		= 0x01000000, /*!< Synchronous Link Up */
+	ENotifySynchronousLinkDown		= 0x02000000, /*!< Synchronous Link Down */
+	ENotifySynchronousLinkError		= 0x04000000, /*!< Synchronous Link Error */
+
+	
+	/**
+	@deprecated This has been superseded by ENotifySynchronousLinkUp
+	@see ENotifySynchronousLinkUp 
+	*/
+	ENotifySCOLinkUp				= ENotifySynchronousLinkUp,
+	/**
+	@deprecated This has been superseded by ENotifySynchronousLinkDown
+	@see ENotifySynchronousLinkDown 
+	*/
+	ENotifySCOLinkDown				= ENotifySynchronousLinkDown, 
+	/**
+	@deprecated This has been superseded by ENotifySynchronousLinkError
+	@see ENotifySynchronousLinkError 
+	*/
+	ENotifySCOLinkError				= ENotifySynchronousLinkError 
+
+	};
+
+/**
+@publishedAll
+@released
+
+Bitmask values to help request notification of the state of a physical link.
+@see TBTPhysicalLinkStateNotifier
+*/
+enum TBTPhysicalLinkStateNotifierCombinations
+	{
+	ENotifyAnyRole					= ENotifyMaster | ENotifySlave,
+	ENotifyAnyLowPowerMode			= ENotifySniffMode | ENotifyParkMode | ENotifyHoldMode,
+	ENotifyAnyPowerMode				= ENotifyActiveMode | ENotifyAnyLowPowerMode,
+	ENotifyAnyMaxSlots				= ENotifyMaxSlots1 | ENotifyMaxSlots3 | ENotifyMaxSlots5,
+	ENotifyAnyACLPacketType			= ENotifyPacketsDM1 | ENotifyPacketsDH1 | ENotifyPacketsDM3 | EPacketsDH3 | EPacketsDM5 | EPacketsDH5,
+	ENotifyAnySCOPacketType			= ENotifyPacketsHV1 | ENotifyPacketsHV2 | ENotifyPacketsHV3,
+	ENotifyAnyPacketType			= ENotifyAnyACLPacketType | ENotifyAnySCOPacketType,
+	ENotifyAnyPhysicalLinkState		= 0xffffffff,
+	};
+
+/**
+@publishedAll
+@released
+
+The maximum length of an SDP UUID.
+*/
+static const TInt KSdpUUIDMaxLength			= 16;
+
+/**
+@publishedAll
+@released
+
+The size of a bluetooth device address in bytes.
+*/
+const TInt KBTDevAddrSize=0x06;
+
+/**
+@publishedAll
+@released
+
+The size of a bluetooth device address in bytes.
+*/
+const TInt KBTMaxDevAddrSize = KBTDevAddrSize;
+
+/**
+@publishedAll
+@released
+
+48-bit bluetooth device address.
+Each bluetooth device has a unique address built into the hardware, which
+is represented by this class. Used for identifying remote addresses.
+The interface operates in a big-endian manner -- e.g. addr[0] refers
+to the most significant byte of the address. This is the same ordering
+as the addresses would naturally be written down on paper.
+**/
+NONSHARABLE_CLASS(TBTDevAddr)
+	{
+public:
+	IMPORT_C TBTDevAddr();
+	IMPORT_C TBTDevAddr(const TInt64 &aInt);
+	IMPORT_C TBTDevAddr(const TDesC8 &aDes);
+	IMPORT_C TBool operator==(const TBTDevAddr& aAddr) const;
+	IMPORT_C TBool operator!=(const TBTDevAddr& aAddr) const;
+	IMPORT_C const TUint8 &operator[](TInt aIndex) const;
+	IMPORT_C TUint8 &operator[](TInt aIndex);
+	IMPORT_C void Reset();
+	IMPORT_C TPtr8 Des();
+	IMPORT_C const TPtrC8 Des() const;
+	IMPORT_C TInt SetReadable(const TDesC& aSource);
+	IMPORT_C void GetReadable(TDes& aDest) const;
+	IMPORT_C void GetReadable(TDes& aDest, const TDesC& aPrepend, const TDesC& aByteSeperator, const TDesC& aAppend) const;
+	IMPORT_C TBool operator<=(const TBTDevAddr& aAddr) const;
+private:
+	TFixedArray<TUint8, KBTDevAddrSize> iAddr;
+
+	// This data padding has been added to help prevent future binary compatibility breaks	
+	// iPadding hasn't been zero'd because it is currently not used
+	TUint16		iPadding;
+    };
+
+/** Array of device addresses
+@see Enumerate method
+*/
+typedef RArray<TBTDevAddr> RBTDevAddrArray;
+
+/**
+@publishedAll
+@released
+
+A Bluetooth Universally Unique Identifier.
+
+This is a 128-bit quantity that can be created without a central registry 
+while still being globally unique.
+UUIDs are always held in full 128 bit format, however they can be set from 
+BT SIG short form (16 or 32 bit) addresses, and returned as down to their 
+shortest form using ShortestForm().
+**/
+NONSHARABLE_CLASS(TUUID)
+	{
+public:
+	IMPORT_C TUUID();
+	IMPORT_C TUUID(TUint32 aLong);
+	IMPORT_C TUUID(TUint32 aHH, TUint32 aHL, TUint32 aLH, TUint32 aLL);
+	IMPORT_C TUUID(const TUid& aUid);
+	IMPORT_C void SetL(const TDesC8& aDes);
+	IMPORT_C const TPtrC8 LongForm() const;
+	IMPORT_C const TPtrC8 ShortestForm() const;
+	IMPORT_C const TPtrC8 Des() const;
+	/**
+	@deprecated
+	Use SpecifiedLengthL(TInt aLength) instead
+	*/
+	IMPORT_C const TPtrC8 FixedLengthL(TInt aLength) const;
+	IMPORT_C TInt MinimumSize() const;
+	IMPORT_C TBool operator==(const TUUID& aUUID) const;
+	IMPORT_C TBool operator!=(const TUUID& aUUID) const;
+	IMPORT_C const TUint8 &operator[](TInt aIndex) const;
+	IMPORT_C TUint8 &operator[](TInt aIndex);
+	IMPORT_C const TPtrC8 SpecifiedLengthL(TInt aLength) const;
+	IMPORT_C void SetFromLittleEndianL(const TDesC8& aDes);
+private:
+	TFixedArray<TUint8, KSdpUUIDMaxLength> iUUID;	
+
+	// 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;
+	};
+
+
+/**
+@publishedAll
+@released
+
+A UUID container class
+*/
+NONSHARABLE_CLASS(RUUIDContainer)
+	{
+public:
+	IMPORT_C void Close();
+	IMPORT_C void Reset();
+	IMPORT_C TInt Count() const;
+	IMPORT_C TUUID& operator[](TInt aIndex);
+	IMPORT_C const TUUID& operator[](TInt aIndex) const;
+	IMPORT_C const TUUID& At(TInt aIndex) const;
+	IMPORT_C TBool IsPresent(const TUUID& aUuid) const;
+	IMPORT_C TInt Add(const TUUID& aUuid);
+
+private:
+	RArray<TUUID> iUUIDs;
+	
+	// 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;
+	};
+
+
+/**
+@publishedAll
+@released
+
+An EIR UUID container class. Contains UUIDs and indications of data completeness
+*/
+NONSHARABLE_CLASS(RExtendedInquiryResponseUUIDContainer)
+	{
+public:
+	enum TUUIDType
+		{
+		EUUID16  = 0x1,
+		EUUID32  = 0x2,
+		EUUID128 = 0x4,
+		};
+	
+public:
+	IMPORT_C void Close();
+	IMPORT_C RUUIDContainer& UUIDs();
+	IMPORT_C void SetCompleteness(TUUIDType aType, TBool aIsComplete);
+	IMPORT_C TBool GetCompleteness(TUUIDType aType) const;
+
+private:
+	RUUIDContainer iUUIDs;
+	TInt iCompleteness;
+	
+	// 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;
+	};
+
+/**
+@publishedAll
+@released
+
+The size of a link key, in bytes.
+*/
+const TUint8 KHCILinkKeySize=16;
+
+/**
+@publishedAll
+@released
+
+The size of a pin code, in bytes.
+*/
+const TUint8 KHCIPINCodeSize=16;
+
+/**
+@publishedAll
+@released
+
+Link key structure.
+*/
+NONSHARABLE_CLASS(TLinkKeyV10)
+	{
+public:
+	TUint8 iLinkKey[KHCILinkKeySize]; /*!< The link key */
+	};
+
+/**
+@publishedAll
+@released
+
+Typedef'ed TPckgBuf of the class TLinkKeyV10.
+*/
+typedef TPckgBuf<TLinkKeyV10> TBTLinkKey;
+
+/**
+The type of a link key with a remote device
+@publishedAll
+@released
+*/
+enum TBTLinkKeyType
+	{
+	ELinkKeyCombination,					/*!< this key has been generated with pairing with pre-v2.1 Bluetooth devices. */
+	ELinkKeyUnauthenticatedUpgradable,		/*!< this key hasn't yet been tried with MITM protection */
+	ELinkKeyUnauthenticatedNonUpgradable,	/*!< this key tried MITM protection; remote device incapable */
+	ELinkKeyAuthenticated,					/*!< this key authenticated with MITM protection */
+	ELinkKeyDebug							/*!< this key has been generated when in simple pairing debug mode */
+	};
+
+/**
+@publishedAll
+@released
+
+Bluetooth PIN Code structure.
+*/
+NONSHARABLE_CLASS(TPINCodeV10)
+	{
+public:
+	IMPORT_C TBool operator==(const TPINCodeV10& aTPINCodeV10) const;
+	
+public:
+	TUint8 iLength; /*!< The length of the pin key */
+	TUint8 iPIN[KHCIPINCodeSize]; /*!< The pin code */
+	};
+
+/**
+@publishedAll
+@released
+
+Typedef'ed TPckgBuf of the class TPINCodeV10.
+*/
+typedef TPckgBuf<TPINCodeV10> TBTPinCode;
+
+
+/**
+Extended Inquiry Response Class
+This class takes a reference from inquiry result, which could hold both local name and Extended Inquiry Response. 
+It provides API to parse and return the local name and data for any Extended Inquiry Response tag.
+To get Device Name, Manufacturer Specific Data or Flags, firstly getting length of the data, 
+and then allocating a suitable buffer, which is where the data will be placed. 
+*/
+NONSHARABLE_CLASS(TBluetoothNameRecordWrapper)
+{
+public:
+	IMPORT_C explicit TBluetoothNameRecordWrapper(const TNameRecord& aNameRecord);
+	IMPORT_C TInt GetDeviceName(TDes16& aName, TBool& aIsComplete) const;
+	IMPORT_C TInt GetServiceClassUuids(RExtendedInquiryResponseUUIDContainer& aEIRContainer) const;
+	IMPORT_C TInt GetVendorSpecificData(TDes8& aDes) const;
+	IMPORT_C TInt GetTxPowerLevel(TInt8& aTxPowerLevel) const;
+	IMPORT_C TInt GetFlags(TDes8& aDes) const;
+	IMPORT_C TInt GetDeviceNameLength() const;
+	IMPORT_C TInt GetVendorSpecificDataLength() const;
+	IMPORT_C TInt GetFlagsLength() const;
+
+private:
+	TInt AddUuids16(RExtendedInquiryResponseUUIDContainer& aEIRContainer, TPtrC8& aUuids) const;
+	TInt AddUuids128(RExtendedInquiryResponseUUIDContainer& aEIRContainer, TPtrC8& aUuids) const;
+private:
+	TExtendedInquiryResponseDataCodec iEirCodec;
+	
+	// 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;
+};
+
+/**
+@publishedAll
+@released
+
+Contains information resulting from a baseband notification.
+*/
+NONSHARABLE_CLASS(TBTBasebandEventNotification)
+	{
+public:
+	/** 
+	Constructor.
+	@param aEventType The type of event.
+	@param aErrorCode The error code.
+	*/
+	TBTBasebandEventNotification(TUint32 aEventType, TInt aErrorCode = KErrNone) : iEventType(aEventType), iErrorCode(aErrorCode) {};
+
+	/**
+	Default constructor.
+	*/
+	TBTBasebandEventNotification() : iEventType(0), iErrorCode(KErrNone) {};
+
+	/**
+	Copy constructor.
+	@param aEvent The event to copy.
+	*/
+	TBTBasebandEventNotification(const TBTBasebandEventNotification& aEvent) : iEventType(aEvent.iEventType), iErrorCode(aEvent.iErrorCode) {};
+
+	/**
+	The event type.
+	@return The event type.
+	*/
+	TUint32 EventType() const	{ return iEventType; };
+
+	/**
+	The Bluetooth SIG error code associated with the event.
+	@return The SIG error code.
+	*/
+	TInt ErrorCode() const		{ return iErrorCode; };
+
+	/**
+	The Symbian HCI error code associated with the event.
+	@return The Symbian error code.
+	*/
+	IMPORT_C TInt SymbianErrorCode() const;
+
+	/**
+	Set the event type.
+	@param aEventType The event type.
+	*/
+	void SetEventType(TUint32 aEventType)	{ iEventType = aEventType; };
+
+	/**
+	Set the error code.
+	@param aErrorCode The Bluetooth SIG error code.
+	*/
+	void SetErrorCode(TInt aErrorCode)		{ iErrorCode = aErrorCode; };
+
+private:
+	TUint32 iEventType;
+	TInt iErrorCode;
+	};
+
+/**
+@publishedAll
+@released
+
+Typedef'ed pckgbuf of the class TBTBasebandEventNotification.
+*/
+typedef TPckgBuf<TBTBasebandEventNotification> TBTBasebandEvent;
+
+/**
+@publishedAll
+@released
+
+General Unlimited Inquiry Access Code
+*/
+const TUint KGIAC=0x9e8b33;
+
+/**
+@publishedAll
+@released
+
+Limited Inquiry Access Code
+*/
+const TUint KLIAC=0x9e8b00;
+
+/**
+L2CAP channel modes
+@publishedAll
+@released
+*/
+enum TL2CapChannelMode
+	{
+	EL2CAPBasicMode 					= 0x00,
+	EL2CAPRetransmissionMode 			= 0x01,
+	EL2CAPFlowControlMode 				= 0x02,
+	EL2CAPEnhancedRetransmissionMode	= 0x03,
+	EL2CAPStreamingMode					= 0x04,
+	};
+
+/**
+@publishedAll
+@released
+
+API class for setting up an L2Cap channel configuration.
+
+This class may be used to set all or a subset of the following configuration
+items:
+Channel Reliability (and associated timer)
+Maximum Transmission Unit (MTU) value preferred during MTU negotiation
+Maximum Receive Unit (MRU) value preferred during MRU negotiation
+Minimum MTU value acceptable during MTU negotiation
+Minimum MRU value acceptable during MRU negotiation
+Channel Priority
+
+If a configuration item is to be set, then its 'Set' or 'Configure'
+method should be called.
+
+Once a TL2CapConfig object has been set up it can be used to configure a socket
+using RSocket::SetOption or RSocket::Ioctl (or the CBluetoothSocket equivalents).
+
+If the preferred Maximum Transmission Unit (MTU) value is specified but its
+minimum acceptable value is not specified in the same object, then the minimum
+acceptable value will be implicitly taken to be equal to the preferred MTU by
+the L2CAP APIs processing the object. This means that only an MTU greater than or
+equal to the preferred MTU will be accepted from the peer during negotiation.
+
+If the Maximum Receive Unit (MRU) value is specified but its minimum acceptable
+value is not, then the minimum acceptable value is implicitly taken to be equal
+to the protocol minimum (48 bytes) by the L2CAP APIs processing the object.
+
+Note that even though this API allows setting of Obsolescence timer, outgoing
+packet flushing may not be supported on all hardware.
+
+@see RSocket
+@see CBluetoothSocket
+*/
+NONSHARABLE_CLASS(TL2CapConfig)
+	{
+public:
+	/**	
+	Priority required for data on L2Cap channel
+	*/
+	enum TChannelPriority
+		{
+		EHigh		= 2,
+		EMedium		= 1,
+		ELow		= 0,
+		};
+
+	/**	
+	Reliability of data transfer preferred for L2Cap channel.
+	*/
+	enum TChannelReliability
+		{
+		EReliableChannel,
+		EUnreliableChannel,
+		EUnreliableDesiredChannel
+		};	
+
+	/**	
+	Timer values in milliseconds for reliable and unreliable channels
+	*/
+	enum TL2CapConfigSpecifiedTimers
+		{
+		/**
+		This is a time in milliseconds. However 0xffff has been given a special
+		meaning in this interface.  It means "Allow maximum possible number of
+		transmissions of a single packet before giving up and disconnecting the
+		L2Cap channel." This is the maximum number of transmissions effectively
+		allowed by the spec. It only applies to reliable modes and is 255 for
+		Retransmission Mode and Infinity for Enhanced Retransmission Mode.
+		*/
+		EDefaultRetransmission = 0xffff,
+		/**
+		Minimum data obsolescence timeout required because data packets 
+		will not ever be sent if we flush them too quickly.
+		Speed of sending data depends on how many channels are open and channel priority.
+		Note that flushing of outgoing packets may not be implemented on all Symbian OS
+		platforms.
+		*/
+		EMinDataObsolescenceTimeout = 0x0a,
+		/**
+		This is translated to mean never flush (as per spec).
+		*/
+		EDefaultDataObsolescenceTimeout = 0xffff, 
+		};	
+
+	/**	
+	Used to indicate which config options have been specified by the user
+	*/
+	enum TL2CapConfigSpecifiedMask
+		{
+		ENoConfigElementsSpecified			= 0x0000,
+		EMTUSizeSpecifiedMask				= 0x0001,
+		EMRUSizeSpecifiedMask				= 0x0002,
+		EReliabilitySpecifiedMask			= 0x0004,
+		EPrioritySpecifiedMask				= 0x0008,
+		EMinMTUSizeSpecifiedMask			= 0x0010,
+		EMinMRUSizeSpecifiedMask			= 0x0020,
+		ELegacyModesDisallowedSpecifiedMask	= 0x0040
+		};
+		
+	IMPORT_C TL2CapConfig();
+
+	IMPORT_C TInt SetMaxTransmitUnitSize(TUint16 aSize = 0xffff);
+	IMPORT_C TUint16 MaxTransmitUnitSize(TBool& aIsSpecified) const;
+	IMPORT_C TInt SetMaxReceiveUnitSize(TUint16 aSize = 0xffff);
+	IMPORT_C TUint16 MaxReceiveUnitSize(TBool& aIsSpecified) const;
+	
+	IMPORT_C TInt SetMinMTU(TUint16 aSize);
+	IMPORT_C TUint16 MinMTU(TBool& aIsSpecified) const;
+
+	IMPORT_C TInt SetMinMRU(TUint16 aSize);
+	IMPORT_C TUint16 MinMRU(TBool& aIsSpecified) const;
+
+	IMPORT_C TInt ConfigureReliableChannel(TUint16 aRetransmissionTimer);
+	IMPORT_C TInt ConfigureUnreliableChannel(TUint16 aObsolescenceTimer);
+	IMPORT_C TInt ConfigureUnreliableDesiredChannel(TUint16 aObsolescenceTimer, TUint16 aRetransmissionTimer);
+	IMPORT_C void SetLegacyModesDisallowed(TBool aDisallowed);
+	IMPORT_C TBool LegacyModesDisallowed() const;
+
+	IMPORT_C TChannelReliability ChannelReliability(TBool& aIsSpecified, TUint16& aAssociatedTimer) const;
+
+	IMPORT_C TChannelReliability ChannelReliability(TBool& aIsSpecified) const;
+	IMPORT_C TUint16 RetransmissionTimer(TBool& aIsSpecified) const;
+	IMPORT_C TUint16 ObsolescenceTimer(TBool& aIsSpecified) const;
+	
+	IMPORT_C TInt ConfigureChannelPriority(TChannelPriority aPriority);
+	IMPORT_C TChannelPriority ChannelPriority(TBool& aIsSpecified) const;
+
+	/**
+	@deprecated
+	Use ConfigureReliableChannel(TUint16 aRetransmissionTimer) instead
+	*/
+	IMPORT_C TInt SetupReliableChannel(TUint16 aRetransmissionTimer = EDefaultRetransmission);
+	/**
+	@deprecated
+	Use ConfigureUnreliableChannel(TUint16 aObsolescenceTimer) instead
+	*/
+	IMPORT_C TInt SetupUnreliableChannel(TUint16 aObsolescenceTimer = EDefaultDataObsolescenceTimeout);
+	/**
+	@deprecated
+	Use ConfigureChannelPriority(TChannelPriority aPriority) instead
+	*/
+	IMPORT_C TInt SetChannelPriority(TChannelPriority aPriority = ELow);
+
+private:
+	TUint16				iMTUSize;
+	TUint16				iMRUSize;
+	TChannelReliability	iChannelReliability;
+	TUint16				iChannelReliabilityTimer;	// see note below
+	TChannelPriority	iChannelPriority;
+	TUint16				iSpecifiedMask;
+	TUint16 			iMinMTUSize;	// Minimum acceptable MTU.
+	TUint16				iMinMRUSize;	// Minimum acceptable MRU.
+	TUint16				iAdditionalChannelReliabilityTimer;	// see note below
+	// This data padding has been added to help prevent future binary compatibility breaks.
+	TUint16				iPadding;
+
+	// Note on the timer fields:
+	// iAdditionalChannelReliabilityTimer has been added when a need to pass two timers within
+	// one object arose. To maintain BC with existing clients of this class, when a single timer
+	// is passed, it's always stored in iChannelReliabilityTimer. Changing this to just having
+	// iRetransmissionTimer & iObsolescenceTimer would break BC.
+	// When both timers are stored, Flush timeout goes in iChannelReliabilityTimer and
+	// Retransmission timeout goes in iAdditionalChannelReliabilityTimer.
+	};
+
+/**
+@publishedAll
+@released
+
+Typedef to represent a L2CAP Config object.
+*/
+typedef TPckgBuf<TL2CapConfig> TL2CapConfigPkg;
+
+
+enum TEirWrapperPanics
+	{
+	EEirBadUuid16List = 0,
+	EEirBadUuid128List = 1,
+	};
+_LIT(KEirWrapperPanicName, "ExtendedInquiryResponseWrapper");
+
+#endif	//_BTTYPES_H