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