diff -r 000000000000 -r 29b1cd4cb562 bluetoothmgmt/btmgr/Inc/btdevice.h --- /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 +#include +#include + +#include +#include + +/** 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 CBTDeviceArray; + +/** A typedef'ed array of TBTServiceSecurityPerDevice objects. +@publishedAll +@released +**/ +typedef RArray RBTSecurityArray; + +/** Wide descriptor of correct length to hold a bluetooth device name. +@publishedAll +@released +**/ +typedef TBuf TBTDeviceName; + +/** Narrow descriptor of correct length to hold a bluetooth device name. + +@publishedAll +@released +**/ +typedef TBuf8 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 + { +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