epoc32/include/btdevice.h
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
child 4 837f303aceeb
permissions -rw-r--r--
Final list of Symbian^2 public API header files
williamr@2
     1
// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     2
// All rights reserved.
williamr@2
     3
// This component and the accompanying materials are made available
williamr@2
     4
// 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
     5
// which accompanies this distribution, and is available
williamr@2
     6
// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
williamr@2
     7
//
williamr@2
     8
// Initial Contributors:
williamr@2
     9
// Nokia Corporation - initial contribution.
williamr@2
    10
//
williamr@2
    11
// Contributors:
williamr@2
    12
//
williamr@2
    13
// Description:
williamr@2
    14
//
williamr@2
    15
williamr@2
    16
#ifndef BTDEVICE_H
williamr@2
    17
#define BTDEVICE_H
williamr@2
    18
williamr@2
    19
#include <e32std.h>
williamr@2
    20
#include <e32base.h>
williamr@2
    21
#include <s32mem.h>
williamr@2
    22
williamr@2
    23
#include <bluetooth/hci/hciopcodes.h>
williamr@2
    24
#include <bluetooth/hci/hciconsts.h>
williamr@2
    25
williamr@2
    26
/** The maximum length of a bluetooth device name, as stored in CBTDevice.
williamr@2
    27
@publishedAll
williamr@2
    28
@released
williamr@2
    29
**/
williamr@2
    30
static const TInt KMaxBluetoothNameLen = KHCILocalDeviceNameMaxLength;
williamr@2
    31
williamr@2
    32
/** The maximum length of the user-assinged friendly name for a bluetooth device, as stored in CBTDevice.
williamr@2
    33
@publishedAll
williamr@2
    34
@released
williamr@2
    35
**/
williamr@2
    36
static const TInt KMaxFriendlyNameLen = 100;
williamr@2
    37
williamr@2
    38
/** Length of a bluetooth device name. Retained for binary compatibility.
williamr@2
    39
@internalComponent
williamr@2
    40
@deprecated
williamr@2
    41
**/
williamr@2
    42
static const TInt KMaxBCBluetoothNameLen = 256;
williamr@2
    43
williamr@2
    44
//forward declarations
williamr@2
    45
class TBTDeviceClass;
williamr@2
    46
class CBTDevice;
williamr@2
    47
class TBTServiceSecurityPerDevice;
williamr@2
    48
williamr@2
    49
/** A typedef'ed array of CBTDevice objects.
williamr@2
    50
@publishedAll
williamr@2
    51
@released
williamr@2
    52
**/
williamr@2
    53
typedef CArrayPtrFlat<CBTDevice> CBTDeviceArray;
williamr@2
    54
williamr@2
    55
/** A typedef'ed array of TBTServiceSecurityPerDevice objects.
williamr@2
    56
@publishedAll
williamr@2
    57
@released
williamr@2
    58
**/
williamr@2
    59
typedef RArray<TBTServiceSecurityPerDevice> RBTSecurityArray;
williamr@2
    60
williamr@2
    61
/** Wide descriptor of correct length to hold a bluetooth device name.
williamr@2
    62
@publishedAll
williamr@2
    63
@released
williamr@2
    64
**/
williamr@2
    65
typedef TBuf<KMaxBCBluetoothNameLen> TBTDeviceName;
williamr@2
    66
williamr@2
    67
/** Narrow descriptor of correct length to hold a bluetooth device name.
williamr@2
    68
williamr@2
    69
@publishedAll
williamr@2
    70
@released
williamr@2
    71
**/
williamr@2
    72
typedef TBuf8<KMaxBluetoothNameLen> TBTDeviceName8;
williamr@2
    73
williamr@2
    74
/** Utility class to convert between a wide TBTDeviceName and a narrow TBTDeviceName8.
williamr@2
    75
@publishedAll
williamr@2
    76
@released
williamr@2
    77
**/
williamr@2
    78
class BTDeviceNameConverter
williamr@2
    79
	{
williamr@2
    80
public:
williamr@2
    81
	IMPORT_C static TBTDeviceName ToUnicodeL(const TBTDeviceName8& aName);
williamr@2
    82
	IMPORT_C static TBTDeviceName8 ToUTF8L(const TBTDeviceName& aName);
williamr@2
    83
	};
williamr@2
    84
	
williamr@2
    85
/** Defines the granularity of the arrays used in CBTDevice.
williamr@2
    86
@internalComponent
williamr@2
    87
@released
williamr@2
    88
**/
williamr@2
    89
const TInt KSecurityGranularity=1;
williamr@2
    90
williamr@2
    91
/** Cleanup utility for CBTDeviceArrays.
williamr@2
    92
williamr@2
    93
Creates a TCleanupItem that calls ResetAndDestroy and then deletes the array.
williamr@2
    94
williamr@2
    95
@publishedAll
williamr@2
    96
@released
williamr@2
    97
*/
williamr@2
    98
class BTDeviceArrayCleanupStack
williamr@2
    99
williamr@2
   100
	{
williamr@2
   101
public:
williamr@2
   102
	IMPORT_C static void PushL(CBTDeviceArray* aBTDeviceArray);
williamr@2
   103
private:
williamr@2
   104
	static void ResetAndDestroy(TAny* aBTDeviceArray);
williamr@2
   105
	};
williamr@2
   106
williamr@2
   107
/** Enum used to describe the Bluetooth major service classes.  
williamr@2
   108
williamr@2
   109
See the bluetooth specification for more details.
williamr@2
   110
williamr@2
   111
@publishedAll
williamr@2
   112
@released
williamr@2
   113
**/
williamr@2
   114
enum TBTMajorServiceClass
williamr@2
   115
	{												//23        13	<- bit number
williamr@2
   116
	/** Limited discoverable mode **/
williamr@2
   117
	EMajorServiceLimitedDiscoverableMode = 0x01,	//00000000001
williamr@2
   118
	/** Positioning **/
williamr@2
   119
	EMajorServicePositioning = 0x08,				//00000001000
williamr@2
   120
	/** Networking **/
williamr@2
   121
	EMajorServiceNetworking = 0x10,					//00000010000
williamr@2
   122
	/** Rendering **/
williamr@2
   123
	EMajorServiceRendering = 0x20,					//00000100000
williamr@2
   124
	/** Capturing **/
williamr@2
   125
	EMajorServiceCapturing = 0x40,					//00001000000
williamr@2
   126
	/** Object transfer **/
williamr@2
   127
	EMajorServiceObjectTransfer = 0x80,				//00010000000
williamr@2
   128
	/** Audio **/
williamr@2
   129
	EMajorServiceAudio = 0x100,						//00100000000
williamr@2
   130
	/** Telephony **/
williamr@2
   131
	EMajorServiceTelephony = 0x200,					//01000000000
williamr@2
   132
	/** Information **/
williamr@2
   133
	EMajorServiceInformation = 0x400,				//10000000000
williamr@2
   134
	/**
williamr@2
   135
	 * Old name kept for SC.
williamr@2
   136
	 * @deprecated
williamr@2
   137
	 * @see EMajorServiceAudio
williamr@2
   138
	 */
williamr@2
   139
	EMajorServiceAudioService = 0x100				//00100000000
williamr@2
   140
	};
williamr@2
   141
williamr@2
   142
/** Enum used to describe the Bluetooth major device classes.  
williamr@2
   143
williamr@2
   144
See the bluetooth specification for more details.
williamr@2
   145
williamr@2
   146
@publishedAll
williamr@2
   147
@released
williamr@2
   148
**/
williamr@2
   149
enum TBTMajorDeviceClass
williamr@2
   150
	{												//12  8	<- bit number
williamr@2
   151
	/** Miscellaneous device **/
williamr@2
   152
	EMajorDeviceMisc = 0x0,							//00000
williamr@2
   153
	/** Computer device **/
williamr@2
   154
	EMajorDeviceComputer = 0x1,						//00001
williamr@2
   155
	/** Phone device **/
williamr@2
   156
	EMajorDevicePhone = 0x2,						//00010
williamr@2
   157
	/** LAN access point device **/
williamr@2
   158
	EMajorDeviceLanAccessPoint = 0x3,				//00011
williamr@2
   159
	/** Audio-video device **/
williamr@2
   160
	EMajorDeviceAV = 0x4,							//00100
williamr@2
   161
	/** Peripheral device **/
williamr@2
   162
	EMajorDevicePeripheral = 0x5,					//00101
williamr@2
   163
	/** Imaging device **/
williamr@2
   164
	EMajorDeviceImaging = 0x6,						//00110
williamr@2
   165
	/** Wearable device **/
williamr@2
   166
	EMajorDeviceWearable = 0x7,						//00111
williamr@2
   167
	/** Toy device **/
williamr@2
   168
	EMajorDeviceToy = 0x8,							//01000
williamr@2
   169
	/** Unclassified device **/
williamr@2
   170
	EMajorDeviceUnclassified = 0x1F,				//11111
williamr@2
   171
	/**
williamr@2
   172
	 * Old name kept for SC.
williamr@2
   173
	 * @deprecated
williamr@2
   174
	 * @see EMajorDeviceAV
williamr@2
   175
	 */
williamr@2
   176
	EMajorDeviceAudioDevice = 0x4,					//00100
williamr@2
   177
	/**
williamr@2
   178
	 * Old name kept for SC.
williamr@2
   179
	 * @deprecated
williamr@2
   180
	 * @see EMajorDeviceUnclassified
williamr@2
   181
	 */
williamr@2
   182
	EMajorDeviceDeviceUnclassified = 0x1F			//11111
williamr@2
   183
	};
williamr@2
   184
williamr@2
   185
/** Enum used to describe the Bluetooth minor device classes relating to the "Computer" major device class.
williamr@2
   186
williamr@2
   187
See the bluetooth specification for more details.
williamr@2
   188
williamr@2
   189
@publishedAll
williamr@2
   190
@released
williamr@2
   191
**/
williamr@2
   192
enum TBTMinorDeviceClassComputer
williamr@2
   193
	{										//7    2	<- bit number
williamr@2
   194
	/** Unclassified computer device **/
williamr@2
   195
	EMinorDeviceComputerUnclassified = 0x0,	//000000
williamr@2
   196
	/** Desktop computer device **/
williamr@2
   197
	EMinorDeviceComputerDesktop = 0x1,		//000001
williamr@2
   198
	/** Server computer device **/
williamr@2
   199
	EMinorDeviceComputerServer = 0x2,		//000010
williamr@2
   200
	/** Laptop computer device **/
williamr@2
   201
	EMinorDeviceComputerLaptop = 0x3,		//000011
williamr@2
   202
	/** Handheld computer device **/
williamr@2
   203
	EMinorDeviceComputerHandheld = 0x4,		//000100
williamr@2
   204
	/** Palm computer device **/
williamr@2
   205
	EMinorDeviceComputerPalmSize = 0x5,		//000101
williamr@2
   206
	/** Wearable computer device **/
williamr@2
   207
	EMinorDeviceComputerWearable = 0x6		//000110
williamr@2
   208
	};
williamr@2
   209
williamr@2
   210
/** Enum used to describe the Bluetooth minor device classes relating to the "phone" major device class.
williamr@2
   211
williamr@2
   212
See the bluetooth specification for more details.
williamr@2
   213
williamr@2
   214
@publishedAll
williamr@2
   215
@released
williamr@2
   216
**/
williamr@2
   217
enum TBTMinorDeviceClassPhone
williamr@2
   218
	{										//7    2	<- bit number
williamr@2
   219
	/** Unclassified phone device **/
williamr@2
   220
	EMinorDevicePhoneUnclassified = 0x0,	//000000
williamr@2
   221
	/** Cellular phone device **/
williamr@2
   222
	EMinorDevicePhoneCellular = 0x1,		//000001
williamr@2
   223
	/** Cordless phone device **/
williamr@2
   224
	EMinorDevicePhoneCordless = 0x2,		//000010
williamr@2
   225
	/** Smart phone device **/
williamr@2
   226
	EMinorDevicePhoneSmartPhone = 0x3,		//000011
williamr@2
   227
	/** Wired modem phone device **/
williamr@2
   228
	EMinorDevicePhoneWiredModem = 0x4,		//000100
williamr@2
   229
	/** ISDN phone device **/
williamr@2
   230
	EMinorDevicePhoneCommonISDNAccess = 0x5	//000101
williamr@2
   231
	};
williamr@2
   232
williamr@2
   233
/** Enum used to describe the Bluetooth minor device classes relating to the "LAN" major device class.
williamr@2
   234
williamr@2
   235
See the bluetooth specification for more details.
williamr@2
   236
@publishedAll
williamr@2
   237
@released
williamr@2
   238
**/
williamr@2
   239
enum TBTMinorDeviceClassLAN
williamr@2
   240
	{										//7    2	<- bit number
williamr@2
   241
	/** LAN is currently 0% utilitized **/
williamr@2
   242
	EMinorDeviceLANFullyAvailable = 0x0,	//000000
williamr@2
   243
	/** LAN is currently 1-17% utilitized **/
williamr@2
   244
	EMinorDeviceLANServiceOne = 0x8,		//001000
williamr@2
   245
	/** LAN is currently 17-33% utilitized **/
williamr@2
   246
	EMinorDeviceLANServiceTwo = 0x10,		//010000
williamr@2
   247
	/** LAN is currently 33-50% utilitized **/
williamr@2
   248
	EMinorDeviceLANServiceThree = 0x18,		//011000
williamr@2
   249
	/** LAN is currently 50-67% utilitized **/
williamr@2
   250
	EMinorDeviceLANServiceFour = 0x20,		//100000
williamr@2
   251
	/** LAN is currently 67-83% utilitized **/
williamr@2
   252
	EMinorDeviceLANServiceFive = 0x28,		//101000
williamr@2
   253
	/** LAN is currently 83-99% utilitized **/
williamr@2
   254
	EMinorDeviceLANServiceSix = 0x30,		//110000
williamr@2
   255
	/** LAN is currently 100% utilitized **/
williamr@2
   256
	EMinorDeviceLANNoService = 0x38			//111000
williamr@2
   257
	};
williamr@2
   258
williamr@2
   259
/** Enum used to describe the Bluetooth minor device classes relating to the "AV" major device class.
williamr@2
   260
williamr@2
   261
See the bluetooth specification for more details.
williamr@2
   262
williamr@2
   263
@publishedAll
williamr@2
   264
@released
williamr@2
   265
**/
williamr@2
   266
enum TBTMinorDeviceClassAV
williamr@2
   267
	{												//7    2
williamr@2
   268
	/** Unclassified AV Device **/
williamr@2
   269
	EMinorDeviceAVUnclassified = 0x0,				//000000
williamr@2
   270
	/** Headset AV Device **/
williamr@2
   271
	EMinorDeviceAVHeadset = 0x1,					//000001
williamr@2
   272
	/** Handsfree AV Device **/
williamr@2
   273
	EMinorDeviceAVHandsfree = 0x2,					//000010
williamr@2
   274
	/** Microphone AV Device **/
williamr@2
   275
	EMinorDeviceAVMicrophone = 0x4,					//000100
williamr@2
   276
	/** Loudspeaker AV Device **/
williamr@2
   277
	EMinorDeviceAVLoudspeaker = 0x5,				//000101
williamr@2
   278
	/** Headphone AV Device **/
williamr@2
   279
	EMinorDeviceAVHeadphones = 0x6,					//000110
williamr@2
   280
	/** Portable audio AV Device **/
williamr@2
   281
	EMinorDeviceAVPortableAudio = 0x7,				//000111
williamr@2
   282
	/** Car audio AV Device **/
williamr@2
   283
	EMinorDeviceAVCarAudio = 0x8,					//001000
williamr@2
   284
	/** Set top box AV Device **/
williamr@2
   285
	EMinorDeviceAVSetTopBox = 0x9,					//001001
williamr@2
   286
	/** Hifi audio AV Device **/
williamr@2
   287
	EMinorDeviceAVHiFiAudio = 0xA,					//001010
williamr@2
   288
	/** VCR AV Device **/
williamr@2
   289
	EMinorDeviceAVVCR = 0xB,						//001011
williamr@2
   290
	/** Video camera AV Device **/
williamr@2
   291
	EMinorDeviceAVVideoCamera = 0xC,				//001100
williamr@2
   292
	/** Camcorder AV Device **/
williamr@2
   293
	EMinorDeviceAVCamcorder = 0xD,					//001101
williamr@2
   294
	/** Video monitor AV Device **/
williamr@2
   295
	EMinorDeviceAVVideoMonitor = 0xE,				//001110
williamr@2
   296
	/** Video display and loudspeaker AV Device **/
williamr@2
   297
	EMinorDeviceAVVideoDisplayAndLoudspeaker = 0xF,	//001111
williamr@2
   298
	/** Video conferencing AV Device **/
williamr@2
   299
	EMinorDeviceAVVideoConferencing = 0x10,			//010000
williamr@2
   300
	/** Gaming toy AV Device **/
williamr@2
   301
	EMinorDeviceAVGamingToy = 0x12					//010010
williamr@2
   302
	};	
williamr@2
   303
	
williamr@2
   304
/** Enum used to describe the Bluetooth minor device classes relating to the "Peripheral" major device class.
williamr@2
   305
williamr@2
   306
See the bluetooth specification for more details.
williamr@2
   307
@publishedAll
williamr@2
   308
@released
williamr@2
   309
**/
williamr@2
   310
enum TBTMinorDeviceClassPeripheral
williamr@2
   311
	{													//7    2
williamr@2
   312
	/** Keyboard peripheral device.
williamr@2
   313
	
williamr@2
   314
	Note that the keyboard bit can be independently
williamr@2
   315
	or'd with all other bits.
williamr@2
   316
	**/
williamr@2
   317
	EMinorDevicePeripheralKeyboard = 0x10,				//010000
williamr@2
   318
	/** Pointer peripheral device.
williamr@2
   319
	
williamr@2
   320
	Note that the pointer bit can be independently
williamr@2
   321
	or'd with all other bits.
williamr@2
   322
	**/
williamr@2
   323
	EMinorDevicePeripheralPointer = 0x20,				//100000
williamr@2
   324
	//
williamr@2
   325
	// All other bits are mutually exclusive
williamr@2
   326
	//
williamr@2
   327
	/** Uncategorized peripheral device **/
williamr@2
   328
	EMinorDevicePeripheralUncategorized = 0x00,			//000000
williamr@2
   329
	/** Joystick peripheral device **/
williamr@2
   330
	EMinorDevicePeripheralJoystick = 0x01,				//000001
williamr@2
   331
	/** Gamepad peripheral device **/
williamr@2
   332
	EMinorDevicePeripheralGamepad = 0x02,				//000010
williamr@2
   333
	/** Remote control peripheral device **/
williamr@2
   334
	EMinorDevicePeripheralRemoteControl = 0x03,			//000011
williamr@2
   335
	/** Sensing peripheral device **/
williamr@2
   336
	EMinorDevicePeripheralSensingDevice = 0x04,			//000100
williamr@2
   337
	/** Digitizer tablet peripheral device **/
williamr@2
   338
	EMinorDevicePeripheralDigitizerTablet = 0x05,		//000101
williamr@2
   339
	/** Card reader peripheral device **/
williamr@2
   340
	EMinorDevicePeripheralCardReader = 0x06				//000110
williamr@2
   341
	};
williamr@2
   342
williamr@2
   343
/** Enum used to describe the Bluetooth minor device classes relating to the "Imaging" major device class.
williamr@2
   344
williamr@2
   345
See the bluetooth specification for more details.
williamr@2
   346
@publishedAll
williamr@2
   347
@released
williamr@2
   348
williamr@2
   349
**/
williamr@2
   350
enum TBTMinorDeviceClassImaging
williamr@2
   351
	{											//7    2
williamr@2
   352
	/** Display imaging device **/
williamr@2
   353
	EMinorDeviceImagingDisplay = 0x04,			//000100
williamr@2
   354
	/** Camera imaging device **/
williamr@2
   355
	EMinorDeviceImagingCamera = 0x08,			//001000
williamr@2
   356
	/** Scanner imaging device **/
williamr@2
   357
	EMinorDeviceImagingScanner = 0x10,			//010000
williamr@2
   358
	/** Printer imaging device **/
williamr@2
   359
	EMinorDeviceImagingPrinter = 0x20,			//100000
williamr@2
   360
	};
williamr@2
   361
williamr@2
   362
/** Enum used to describe the Bluetooth minor device classes relating to the "Wearable" major device class.
williamr@2
   363
williamr@2
   364
See the bluetooth specification for more details.
williamr@2
   365
@publishedAll
williamr@2
   366
@released
williamr@2
   367
williamr@2
   368
**/
williamr@2
   369
enum TBTMinorDeviceClassWearable
williamr@2
   370
	{											//7    2
williamr@2
   371
	/** Wrist watch wearable device **/
williamr@2
   372
	EMinorDeviceWearableWatch = 0x01,			//000001
williamr@2
   373
	/** Pager wearable device **/
williamr@2
   374
	EMinorDeviceWearablePager = 0x02,			//000010
williamr@2
   375
	/** Jacket wearable device **/
williamr@2
   376
	EMinorDeviceWearableJacket = 0x03,			//000011
williamr@2
   377
	/** Helmet wearable device **/
williamr@2
   378
	EMinorDeviceWearableHelmet = 0x04,			//000100
williamr@2
   379
	/** Glasses wearable device **/
williamr@2
   380
	EMinorDeviceWearableGlasses = 0x05,			//000101	
williamr@2
   381
	};
williamr@2
   382
williamr@2
   383
/** Enum used to describe the Bluetooth minor device classes relating to the "Toy" major device class.
williamr@2
   384
williamr@2
   385
See the bluetooth specification for more details.
williamr@2
   386
@publishedAll
williamr@2
   387
@released
williamr@2
   388
williamr@2
   389
**/
williamr@2
   390
enum TBTMinorDeviceClassToy
williamr@2
   391
	{											//7    2
williamr@2
   392
	/** Robot toy device **/
williamr@2
   393
	EMinorDeviceToyRobot = 0x01,				//000001
williamr@2
   394
	/** Vehicle toy device **/
williamr@2
   395
	EMinorDeviceToyVehicle = 0x02,				//000010
williamr@2
   396
	/** Doll toy device **/
williamr@2
   397
	EMinorDeviceToyDoll = 0x03,					//000011
williamr@2
   398
	/** Controller toy device **/
williamr@2
   399
	EMinorDeviceToyController = 0x04,			//000100
williamr@2
   400
	/** Game toy device **/
williamr@2
   401
	EMinorDeviceToyGame = 0x05,					//000101	
williamr@2
   402
	};
williamr@2
   403
williamr@2
   404
williamr@2
   405
/** Minor Device class headset.
williamr@2
   406
@deprecated
williamr@2
   407
@internalComponent
williamr@2
   408
@see TBTMinorDeviceClassAV
williamr@2
   409
**/
williamr@2
   410
enum TBTMinorDeviceClassHeadset
williamr@2
   411
	{										//7    2
williamr@2
   412
	EHeadsetUnclassified = 0x0,				//000000
williamr@2
   413
	EHeadsetProfile = 0x1,					//000001
williamr@2
   414
	};
williamr@2
   415
	
williamr@2
   416
/** Encapsulation of device class definitions.
williamr@2
   417
williamr@2
   418
Contains a single TInt as member data and methods to extract the major, minor and service
williamr@2
   419
class information from that TInt.
williamr@2
   420
@publishedAll
williamr@2
   421
@released
williamr@2
   422
**/
williamr@2
   423
NONSHARABLE_CLASS(TBTDeviceClass)
williamr@2
   424
	{
williamr@2
   425
public:
williamr@2
   426
	IMPORT_C TBTDeviceClass();
williamr@2
   427
	IMPORT_C TBTDeviceClass(TUint32 aDeviceClass);
williamr@2
   428
	IMPORT_C TBTDeviceClass(TUint16 aMajorServiceClass, TUint8 aMajorDeviceClass,
williamr@2
   429
							TUint8 aMinorDeviceClass);
williamr@2
   430
williamr@2
   431
	IMPORT_C TUint16 MajorServiceClass() const;
williamr@2
   432
	IMPORT_C TUint8 MajorDeviceClass() const;
williamr@2
   433
	IMPORT_C TUint8 MinorDeviceClass() const;
williamr@2
   434
	IMPORT_C TUint32 DeviceClass() const;
williamr@2
   435
	
williamr@2
   436
	IMPORT_C TBool operator==(const TBTDeviceClass& aDeviceClass) const;
williamr@2
   437
	IMPORT_C TBTDeviceClass& operator=(const TBTDeviceClass& aDeviceClass);
williamr@2
   438
	
williamr@2
   439
	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   440
	IMPORT_C void InternalizeL(RReadStream& aStream);
williamr@2
   441
private:
williamr@2
   442
	static const TUint32 KStreamVersion = 0x00000001;
williamr@2
   443
private:
williamr@2
   444
	TUint32 iDeviceClass;
williamr@2
   445
	
williamr@2
   446
	// This data padding has been added to help prevent future binary compatibility breaks	
williamr@2
   447
	// Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used
williamr@2
   448
	TUint32     iPadding1; 
williamr@2
   449
	TUint32     iPadding2; 
williamr@2
   450
	};
williamr@2
   451
williamr@2
   452
/** Class to store the security override parameters for a particular remote device.
williamr@2
   453
williamr@2
   454
@publishedAll
williamr@2
   455
@released
williamr@2
   456
*/
williamr@2
   457
NONSHARABLE_CLASS(TBTDeviceSecurity)
williamr@2
   458
	{
williamr@2
   459
public:
williamr@2
   460
	/** Enumeration to provide select MITM protection required. */
williamr@2
   461
	enum TMitmRequired
williamr@2
   462
		{
williamr@2
   463
		EMitmUnspecified,	/*!< No specific MITM protection requirements */
williamr@2
   464
		EMitmRequired		/*!< Require the link is MITM protected */
williamr@2
   465
		};
williamr@2
   466
	
williamr@2
   467
public:
williamr@2
   468
	IMPORT_C TBTDeviceSecurity();
williamr@2
   469
	IMPORT_C TBTDeviceSecurity(TUint8 aSecurity);
williamr@2
   470
	IMPORT_C TBTDeviceSecurity(TUint8 aSecurity, TUint aPasskeyMinLength);
williamr@2
   471
	IMPORT_C TBTDeviceSecurity(TBool aNoAuthenticate, TBool aNoAuthorise, TBool aEncrypt, TBool aBanned);
williamr@2
   472
	IMPORT_C TBTDeviceSecurity(TMitmRequired aMitmRequirements, TBool aNoAuthorise, TBool aEncrypt, TBool aBanned);
williamr@2
   473
	
williamr@2
   474
	IMPORT_C void SetNoAuthenticate(TBool aDecision);
williamr@2
   475
	IMPORT_C void SetMitmRequirements(TMitmRequired aDecision);
williamr@2
   476
	IMPORT_C void SetNoAuthorise(TBool aDecision);
williamr@2
   477
	IMPORT_C void SetEncrypt(TBool aDecision);
williamr@2
   478
	IMPORT_C void SetBanned(TBool aDecision);
williamr@2
   479
	
williamr@2
   480
	IMPORT_C TBool NoAuthenticate() const;
williamr@2
   481
	IMPORT_C TMitmRequired MitmRequirements() const;
williamr@2
   482
	IMPORT_C TBool NoAuthorise() const;
williamr@2
   483
	IMPORT_C TBool Encrypt() const;
williamr@2
   484
	IMPORT_C TBool Banned() const;
williamr@2
   485
	IMPORT_C TUint PasskeyMinLength() const;
williamr@2
   486
	
williamr@2
   487
	
williamr@2
   488
	IMPORT_C TUint8 SecurityValue() const;
williamr@2
   489
	IMPORT_C void SetSecurityValue(TUint8 aDeviceSecurity);
williamr@2
   490
	IMPORT_C TInt SetPasskeyMinLength(TUint aPasskeyMinLength);	
williamr@2
   491
	
williamr@2
   492
	
williamr@2
   493
	IMPORT_C TBool operator==(const TBTDeviceSecurity& aDeviceSecurity) const;
williamr@2
   494
	IMPORT_C TBool operator!=(const TBTDeviceSecurity& aDeviceSecurity) const;
williamr@2
   495
	
williamr@2
   496
	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   497
	IMPORT_C void InternalizeL(RReadStream& aStream);
williamr@2
   498
williamr@2
   499
public:
williamr@2
   500
	/** Enumeration to assist in parsing of security settings. */
williamr@2
   501
	enum TBTDeviceSecuritySettings
williamr@2
   502
		{
williamr@2
   503
		ENoAuthenticate	= 0x01, /*!< Don't authenticate the link */
williamr@2
   504
		ENoAuthorise = 0x02, /*!< Don't authorise the connection */
williamr@2
   505
		EEncrypt = 0x04, /*!< Encrypt the link */
williamr@2
   506
		EBanned					= 0x08, /*!< Don't connect to the device */
williamr@2
   507
		EMitmProtectionRequired	= 0x10, /*!< Require the link is MITM protected */
williamr@2
   508
		};
williamr@2
   509
	
williamr@2
   510
private:
williamr@2
   511
	static const TUint32 KStreamVersion = 0x00000001;
williamr@2
   512
williamr@2
   513
private:
williamr@2
   514
	TUint8 iSecurity;
williamr@2
   515
	TUint  iPasskeyMinLength;	
williamr@2
   516
	
williamr@2
   517
	// This data padding has been added to help prevent future binary compatibility breaks	
williamr@2
   518
	// Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used
williamr@2
   519
	TUint32     iPadding1; 
williamr@2
   520
	TUint32     iPadding2; 
williamr@2
   521
	};
williamr@2
   522
williamr@2
   523
/** Class to tie a service uid with a device security setting.
williamr@2
   524
williamr@2
   525
This allows us to have service-specific security settings for a device.
williamr@2
   526
williamr@2
   527
@publishedAll
williamr@2
   528
@released
williamr@2
   529
*/
williamr@2
   530
NONSHARABLE_CLASS(TBTServiceSecurityPerDevice)
williamr@2
   531
	{
williamr@2
   532
public:
williamr@2
   533
	IMPORT_C TBTServiceSecurityPerDevice();
williamr@2
   534
	IMPORT_C TBTServiceSecurityPerDevice(const TBTDevAddr& aDevice, const TBTDeviceSecurity& aSecuritySettings);
williamr@2
   535
	IMPORT_C TBTServiceSecurityPerDevice(const TBTServiceSecurityPerDevice&);
williamr@2
   536
	
williamr@2
   537
	IMPORT_C void SetDeviceSecurity(const TBTDeviceSecurity& aSecuritySettings);
williamr@2
   538
	IMPORT_C void SetAddress(const TBTDevAddr& aAddress);
williamr@2
   539
williamr@2
   540
	IMPORT_C const TBTDeviceSecurity& DeviceSecurity() const;
williamr@2
   541
	IMPORT_C const TBTDevAddr& DeviceAddress() const;
williamr@2
   542
	
williamr@2
   543
	IMPORT_C void operator=(const TBTServiceSecurityPerDevice& aServiceSecurityPerDevice);
williamr@2
   544
	IMPORT_C TBool operator==(const TBTServiceSecurityPerDevice& aServiceSecurityPerDevice) const;
williamr@2
   545
	IMPORT_C TBool operator!=(const TBTServiceSecurityPerDevice& aServiceSecurityPerDevice) const;
williamr@2
   546
	
williamr@2
   547
	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   548
	IMPORT_C void InternalizeL(RReadStream& aStream);
williamr@2
   549
private:
williamr@2
   550
	static const TUint32 KStreamVersion = 0x00000001;
williamr@2
   551
private:
williamr@2
   552
	TBTDevAddr			iDeviceAddress;		/*!< the address of the device for the overriding security **/
williamr@2
   553
	TBTDeviceSecurity	iDeviceSecurity;	/*!< the overriding security */
williamr@2
   554
	
williamr@2
   555
	// This data padding has been added to help prevent future binary compatibility breaks	
williamr@2
   556
	// Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used
williamr@2
   557
	TUint32     iPadding1; 
williamr@2
   558
	TUint32     iPadding2; 	
williamr@2
   559
	};
williamr@2
   560
		
williamr@2
   561
/** For Symbian use only
williamr@2
   562
@internalAll	
williamr@2
   563
*/
williamr@2
   564
NONSHARABLE_CLASS(TBTBasebandParameters)
williamr@2
   565
	{
williamr@2
   566
public:
williamr@2
   567
	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   568
	IMPORT_C void InternalizeL(RReadStream& aStream);			
williamr@2
   569
williamr@2
   570
	TUint8 iPageScanRepetitionMode;			/*!< Page Scan repetition mode of remote device ( valid if > 0 ) */
williamr@2
   571
	TUint8 iPageScanPeriodMode;				/*!< Page scan period mode of remote device */
williamr@2
   572
	TUint8 iPageScanMode;					/*!< Page scan mode of remote device ( valid if > 0 ) */
williamr@2
   573
	TUint16 iClockOffset;					/*!< clock off set of remote device ( valid if > 0 ) */
williamr@2
   574
	
williamr@2
   575
private:
williamr@2
   576
	static const TUint32 KStreamVersion = 0x00000001;
williamr@2
   577
	};
williamr@2
   578
williamr@2
   579
williamr@2
   580
williamr@2
   581
/** Stores parameters for a nameless device.
williamr@2
   582
williamr@2
   583
A class which stores useful parameters concerning a remote device
williamr@2
   584
But *not* including names
williamr@2
   585
@see CBTDevice
williamr@2
   586
@publishedAll
williamr@2
   587
@released
williamr@2
   588
*/
williamr@2
   589
NONSHARABLE_CLASS(TBTNamelessDevice)
williamr@2
   590
	{
williamr@2
   591
friend class CBTDevice;
williamr@2
   592
public:
williamr@2
   593
	
williamr@2
   594
	IMPORT_C TBTNamelessDevice();	
williamr@2
   595
	IMPORT_C const TBTDevAddr& Address() const;	
williamr@2
   596
	IMPORT_C const TBTDeviceClass& DeviceClass() const;	
williamr@2
   597
	IMPORT_C const TBTLinkKey& LinkKey() const;	
williamr@2
   598
	IMPORT_C TBTLinkKeyType LinkKeyType() const;
williamr@2
   599
	IMPORT_C TUint8 PageScanRepMode() const;	
williamr@2
   600
	IMPORT_C TUint8 PageScanMode() const;	
williamr@2
   601
	IMPORT_C TUint8 PageScanPeriodMode() const;	
williamr@2
   602
	IMPORT_C TUint16 ClockOffset() const;	
williamr@2
   603
	IMPORT_C const TTime& Seen() const;		
williamr@2
   604
	IMPORT_C const TTime& Used() const;		
williamr@2
   605
	IMPORT_C const TBTDeviceSecurity& GlobalSecurity() const;	
williamr@2
   606
	IMPORT_C void SetAddress(const TBTDevAddr& aBDAddr);	
williamr@2
   607
	IMPORT_C void SetDeviceClass(TBTDeviceClass aDeviceClass);		
williamr@2
   608
	IMPORT_C void SetLinkKey(const TBTLinkKey& aLinkKey);
williamr@2
   609
	IMPORT_C void SetLinkKey(const TBTLinkKey& aLinkKey, TBTLinkKeyType aLinkKeyType);
williamr@2
   610
	IMPORT_C void SetPageScanRepMode(TUint8 aPageScanRepMode);
williamr@2
   611
	IMPORT_C void SetPageScanPeriodMode(TUint8 aPageScanPeriodMode);
williamr@2
   612
	IMPORT_C void SetPageScanMode(TUint8 aPageScanMode);
williamr@2
   613
	IMPORT_C void SetClockOffset(TUint16 aClockOffSet);
williamr@2
   614
	IMPORT_C void SetGlobalSecurity(const TBTDeviceSecurity& aSetting); 
williamr@2
   615
	IMPORT_C void SetUsed(const TTime& aDateTime);
williamr@2
   616
	IMPORT_C void SetSeen(const TTime& aDateTime);
williamr@2
   617
	IMPORT_C TBool IsValidAddress() const;
williamr@2
   618
	IMPORT_C TBool IsValidDeviceClass() const;
williamr@2
   619
	IMPORT_C TBool IsValidLinkKey() const;
williamr@2
   620
	IMPORT_C TBool IsValidGlobalSecurity() const;
williamr@2
   621
	IMPORT_C TBool IsValidPageScanRepMode() const;
williamr@2
   622
	IMPORT_C TBool IsValidPageScanMode() const;
williamr@2
   623
	IMPORT_C TBool IsValidPageScanPeriodMode() const;
williamr@2
   624
	IMPORT_C TBool IsValidClockOffset() const;
williamr@2
   625
	IMPORT_C TBool IsValidUsed() const;
williamr@2
   626
	IMPORT_C TBool IsValidSeen() const;
williamr@2
   627
	IMPORT_C void DeleteLinkKey();
williamr@2
   628
	IMPORT_C void Update(const TBTNamelessDevice& aDevice);
williamr@2
   629
	IMPORT_C TBTNamelessDevice& operator=(const TBTNamelessDevice& aDevice);
williamr@2
   630
	IMPORT_C TBool operator==(const TBTNamelessDevice& aDevice) const;
williamr@2
   631
	IMPORT_C TBool operator!=(const TBTNamelessDevice& aDevice) const;
williamr@2
   632
	IMPORT_C TUint CompareTo(const TBTNamelessDevice& aDevice) const;
williamr@2
   633
	IMPORT_C TBool IsPaired() const;
williamr@2
   634
	IMPORT_C void SetPaired(TBool aPaired);
williamr@2
   635
	IMPORT_C void SetPaired(TBTLinkKeyType aLinkKeyType);
williamr@2
   636
	IMPORT_C TBool IsValidPaired() const;
williamr@2
   637
	IMPORT_C const TBTPinCode& PassKey() const;		
williamr@2
   638
	IMPORT_C void  SetPassKey(const TBTPinCode& aPassKey);		
williamr@2
   639
	IMPORT_C TBool IsValidPassKey() const;
williamr@2
   640
	IMPORT_C TUint PassKeyLength() const;
williamr@2
   641
	IMPORT_C TBool IsValidUiCookie() const;
williamr@2
   642
	IMPORT_C void SetUiCookie(TUint32 aUiCookie);
williamr@2
   643
	IMPORT_C TUint32 UiCookie() const;
williamr@2
   644
	
williamr@2
   645
	/**	Bitfield of TBTNamelessDevice attributes
williamr@2
   646
	@publishedPartner
williamr@2
   647
	@released
williamr@2
   648
	*/	
williamr@2
   649
	enum TBTDeviceSet
williamr@2
   650
		{
williamr@2
   651
		EAddress				= 0x000001, /*!< Device address */
williamr@2
   652
		EDeviceClass			= 0x000002, /*!< Device class */
williamr@2
   653
		ELinkKey				= 0x000004, /*!< Link key */
williamr@2
   654
		EGlobalSecurity			= 0x000008, /*!< Global security settings */
williamr@2
   655
		EPageScanRepMode		= 0x000010, /*!< Page scan repition mode */
williamr@2
   656
		EPageScanMode           = 0x000020, /*!< Page scan mode */
williamr@2
   657
		EPageScanPeriodMode     = 0x000040, /*!< Page scan period */
williamr@2
   658
		EClockOffset			= 0x000080, /*!< Clock offset */
williamr@2
   659
		EUsed					= 0x000100, /*!< Last used */
williamr@2
   660
		ESeen					= 0x000200, /*!< Last seen */
williamr@2
   661
		EIsPaired				= 0x000400, /*!< Is paired */
williamr@2
   662
		EPassKey				= 0x000800, /*!< PassKey */
williamr@2
   663
		EUiCookie				=	0x001000, /*!< User interface specific cookie */
williamr@2
   664
williamr@2
   665
		EAllNamelessProperties	= 0x00ffffff, /*!< All nameless properties set */
williamr@2
   666
		// Two highest nibbles used by CBTDevice
williamr@2
   667
		};
williamr@2
   668
williamr@2
   669
private:
williamr@2
   670
	TUint32					iSetMask;		/*!< Bit mask indicating the data members that have been set */
williamr@2
   671
	TBTDevAddr				iBDAddr; 		/*!< The BT address of the remote device */
williamr@2
   672
	TBTDeviceClass			iDeviceClass;	/*!< The class(es) of the remote device */
williamr@2
   673
	TBTLinkKey				iLinkKey;		/*!< The link key */
williamr@2
   674
	TBTDeviceSecurity		iGlobalSecurity;/*!< The overall security criteria for all services which this device may wish to use */
williamr@2
   675
	TBTBasebandParameters	iBasebandParams;/*!< The baseband parameters */
williamr@2
   676
	TTime					iUsed;			/*!< when last connect from/to */
williamr@2
   677
	TTime					iSeen;			/*!< when last seen in inquiry */
williamr@2
   678
	TBool					iPaired;		/*!< Whether this device is paired */
williamr@2
   679
	TBTPinCode				iPassKey;       /*!< PassKey */
williamr@2
   680
	TBTLinkKeyType			iLinkKeyType;	/*!< Link Key Type */
williamr@2
   681
	TUint32					iUiCookie;		/*!< The cookie attached to this device by the UI */
williamr@2
   682
	
williamr@2
   683
	// This data padding has been added to help prevent future binary compatibility breaks	
williamr@2
   684
	// iPadding1 has been used for iLinkKeyType
williamr@2
   685
	// iPadding2 has been used for iUiCookie 
williamr@2
   686
	TUint32     iPadding3; 
williamr@2
   687
	TUint32		iPadding4; 
williamr@2
   688
	};
williamr@2
   689
williamr@2
   690
williamr@2
   691
/** Encapsulates all information that must be known about a device.
williamr@2
   692
williamr@2
   693
Stores useful information concerning a remote device, including names
williamr@2
   694
williamr@2
   695
@publishedAll
williamr@2
   696
@released
williamr@2
   697
*/
williamr@2
   698
NONSHARABLE_CLASS(CBTDevice) : public CBase
williamr@2
   699
	{
williamr@2
   700
friend class TBTNamelessDevice;
williamr@2
   701
public:
williamr@2
   702
	
williamr@2
   703
	IMPORT_C static CBTDevice* NewL(const TBTDevAddr& aBDAddr);	
williamr@2
   704
	IMPORT_C static CBTDevice* NewLC(const TBTDevAddr& aBDAddr);
williamr@2
   705
	IMPORT_C static CBTDevice* NewL(const TBTNamelessDevice& aNamelessDevice);
williamr@2
   706
	IMPORT_C static CBTDevice* NewLC(const TBTNamelessDevice& aNamelessDevice);	
williamr@2
   707
	IMPORT_C static CBTDevice* NewL();
williamr@2
   708
	IMPORT_C static CBTDevice* NewLC();
williamr@2
   709
	IMPORT_C ~CBTDevice();
williamr@2
   710
	IMPORT_C CBTDevice* CopyL() const;
williamr@2
   711
	IMPORT_C void UpdateL(const CBTDevice& aDevice);
williamr@2
   712
	IMPORT_C void AssignL(CBTDevice& aDevice);
williamr@2
   713
	IMPORT_C const TDesC8& DeviceName() const;
williamr@2
   714
	IMPORT_C const TDesC& FriendlyName() const;
williamr@2
   715
	IMPORT_C void SetDeviceNameL(const TDesC8& aName);
williamr@2
   716
	IMPORT_C void SetFriendlyNameL(const TDesC& aName);
williamr@2
   717
	IMPORT_C TBool IsValidDeviceName() const;
williamr@2
   718
	IMPORT_C TBool IsValidFriendlyName() const;
williamr@2
   719
	IMPORT_C TBool operator==(const CBTDevice& aDevice) const;
williamr@2
   720
	IMPORT_C TBool operator!=(const CBTDevice& aDevice) const;
williamr@2
   721
	IMPORT_C TUint CompareTo(const CBTDevice& aDevice) const;
williamr@2
   722
	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   723
	IMPORT_C void InternalizeL(RReadStream& aStream);
williamr@2
   724
	IMPORT_C const TBTDevAddr& BDAddr() const;
williamr@2
   725
	IMPORT_C const TBTLinkKey& LinkKey() const;
williamr@2
   726
	IMPORT_C TBTLinkKeyType LinkKeyType() const;
williamr@2
   727
	IMPORT_C TBTDeviceClass DeviceClass() const;
williamr@2
   728
	IMPORT_C const TBTDeviceSecurity GlobalSecurity() const;
williamr@2
   729
	IMPORT_C void SetDeviceAddress(const TBTDevAddr& aBDAddr);
williamr@2
   730
	IMPORT_C void SetDeviceClass(TBTDeviceClass aDeviceClass);
williamr@2
   731
	IMPORT_C void SetLinkKey(const TBTLinkKey& aLinkKey);
williamr@2
   732
	IMPORT_C void SetLinkKey(const TBTLinkKey& aLinkKey, TBTLinkKeyType aLinkKeyType);
williamr@2
   733
	IMPORT_C void SetGlobalSecurity(const TBTDeviceSecurity& aSetting);
williamr@2
   734
	IMPORT_C void DeleteLinkKey();
williamr@2
   735
	IMPORT_C TBool IsValidBDAddr() const;
williamr@2
   736
	IMPORT_C TBool IsValidDeviceClass() const;
williamr@2
   737
	IMPORT_C TBool IsValidLinkKey() const;
williamr@2
   738
	IMPORT_C TBool IsValidGlobalSecurity() const;
williamr@2
   739
	IMPORT_C const TTime& Seen() const;	
williamr@2
   740
	IMPORT_C const TTime& Used() const;
williamr@2
   741
	IMPORT_C void SetUsed(const TTime& aDateTime);
williamr@2
   742
	IMPORT_C void SetSeen(const TTime& aDateTime);
williamr@2
   743
	IMPORT_C TBool IsValidUsed() const;
williamr@2
   744
	IMPORT_C TBool IsValidSeen() const;
williamr@2
   745
	IMPORT_C TBTNamelessDevice& AsNamelessDevice();	
williamr@2
   746
	IMPORT_C const TBTNamelessDevice& AsNamelessDevice() const;
williamr@2
   747
	IMPORT_C TBool IsPaired() const;
williamr@2
   748
	IMPORT_C void SetPaired(TBool aPaired);
williamr@2
   749
	IMPORT_C void SetPaired(TBTLinkKeyType aLinkKeyType);
williamr@2
   750
	IMPORT_C TBool IsValidPaired() const;
williamr@2
   751
	IMPORT_C const TBTPinCode& PassKey() const;		
williamr@2
   752
	IMPORT_C void  SetPassKey(const TBTPinCode& aPassKey);		
williamr@2
   753
	IMPORT_C TBool IsValidPassKey() const;
williamr@2
   754
	IMPORT_C TUint PassKeyLength() const;
williamr@2
   755
	IMPORT_C TBool IsValidUiCookie() const;
williamr@2
   756
	IMPORT_C void SetUiCookie(TUint32 aUiCookie);
williamr@2
   757
	IMPORT_C TUint32 UiCookie() const;
williamr@2
   758
	
williamr@2
   759
private:
williamr@2
   760
	CBTDevice();
williamr@2
   761
	void ConstructL();
williamr@2
   762
	void ConstructL(const TBTDevAddr& aAddr);
williamr@2
   763
	void ConstructL(const TBTNamelessDevice& aNamelessDevice);
williamr@2
   764
	void CommonConstructL();
williamr@2
   765
		
williamr@2
   766
public:
williamr@2
   767
	/** Describes the similarities between two devices. */
williamr@2
   768
	enum TBTDeviceNameSelector // not very encapsulated - we extend the enum of TBTNamelessDevice
williamr@2
   769
		{
williamr@2
   770
		/** Device name. */
williamr@2
   771
		EDeviceName		= 0x40000000,
williamr@2
   772
		/** Friendly name. */
williamr@2
   773
		EFriendlyName	= 0x80000000,
williamr@2
   774
		/** 
williamr@2
   775
		All name properties
williamr@2
   776
		*/
williamr@2
   777
		EAllNameProperties = 0xff000000,
williamr@2
   778
		/** Last enum. This is NOT a name property */
williamr@2
   779
		ELast 			= KMaxTUint,
williamr@2
   780
		// All but two highest nibbles used by TBTNamelessDevice
williamr@2
   781
		};
williamr@2
   782
private:
williamr@2
   783
	static const TUint32 KStreamVersion = 0x00000001;
williamr@2
   784
private:
williamr@2
   785
	HBufC8*	iDeviceName;
williamr@2
   786
	HBufC*	iFriendlyName;
williamr@2
   787
	TBTNamelessDevice iDevice;
williamr@2
   788
	};
williamr@2
   789
williamr@2
   790
williamr@2
   791
/**Number of bytes in an AFH Host Channel Classification. 
williamr@2
   792
williamr@2
   793
Size and Length of the TBTAFHHostChannelClassification Descriptor
williamr@2
   794
williamr@2
   795
@see TBTAFHHostChannelClassification
williamr@2
   796
@publishedAll
williamr@2
   797
@released
williamr@2
   798
*/
williamr@2
   799
const TUint8 KHCIAFHHostChannelClassificationSize=10;
williamr@2
   800
williamr@2
   801
williamr@2
   802
/**Required number of unknown channels in an AFH Host Channel Classification.
williamr@2
   803
williamr@2
   804
That is least number of channels in the 79 channel set that must be left
williamr@2
   805
NOT set to bad. In AFH host channel classification a channel may labelled
williamr@2
   806
'bad' (implies do not use) or 'unknown' (implies that it is up to the 
williamr@2
   807
controller to decide if should be used). An attempt to create a 
williamr@2
   808
TBTAFHHostChannelClassification with more than KAFHMinUnknownChannels 
williamr@2
   809
set to 'bad' will result in a KErrUnderflow error being returned.
williamr@2
   810
williamr@2
   811
@see TBTAFHHostChannelClassification
williamr@2
   812
@publishedAll
williamr@2
   813
@released
williamr@2
   814
*/
williamr@2
   815
const TUint8 KAFHMinUnknownChannels=20;
williamr@2
   816
williamr@2
   817
williamr@2
   818
/**Number of channels in the Bluetooth channel set that is used with AFH
williamr@2
   819
williamr@2
   820
The Bluetooth channel set is the set of frequencies used in the Bluetooth
williamr@2
   821
hopping sequence. AFH allows a connection to opt not to use some of the 
williamr@2
   822
frequencies in this set.
williamr@2
   823
williamr@2
   824
@see TBTAFHHostChannelClassification
williamr@2
   825
@publishedAll
williamr@2
   826
@released
williamr@2
   827
*/
williamr@2
   828
const TUint8 KAFHNumChannels=79;
williamr@2
   829
williamr@2
   830
williamr@2
   831
/**Descriptor class that should be used to help set up an 
williamr@2
   832
AFH host channel classification for the controller.
williamr@2
   833
williamr@2
   834
The bits in each byte of this descriptor are used
williamr@2
   835
to tell the controller which channels the host
williamr@2
   836
anticipates will become busy and so advisable for
williamr@2
   837
Bluetooth to avoid. Such channels are referred to 
williamr@2
   838
as 'bad', and are represented by bits set to 0.  
williamr@2
   839
Channels that are not 'bad' are referred to as 'unknown' implying
williamr@2
   840
simply that the host has no knowledge that they are, or
williamr@2
   841
are about to become 'bad'. These are represented by bits set to 1.
williamr@2
   842
Note: The Bluetooth specification demands that at least 20 channels 
williamr@2
   843
must be set to 'unknown'. Any attempt by the user of this class
williamr@2
   844
to set too many 'bad' channels will result in the return of a 
williamr@2
   845
KErrNotSupported error, and the attempt having no effect.
williamr@2
   846
williamr@2
   847
williamr@2
   848
@publishedAll
williamr@2
   849
@released
williamr@2
   850
*/
williamr@2
   851
NONSHARABLE_CLASS(TBTAFHHostChannelClassification) : public TBuf8<KHCIAFHHostChannelClassificationSize>
williamr@2
   852
	{
williamr@2
   853
public:
williamr@2
   854
	IMPORT_C TBTAFHHostChannelClassification();
williamr@2
   855
	IMPORT_C void Reset();
williamr@2
   856
	IMPORT_C TInt Validate() const;
williamr@2
   857
	IMPORT_C TInt SetChannelBad(const TUint8 aChannel);
williamr@2
   858
	IMPORT_C TInt SetChannelRangeBad(const TUint8 aChannelRangeLowest, const TUint8 aChannelRangeHighest);
williamr@2
   859
	
williamr@2
   860
private:
williamr@2
   861
	TInt DoSetChannelBad(const TUint8 aChannel);
williamr@2
   862
	TInt BitByteIndices(TUint8& aByteIndex, TUint8& aBitIndex, const TUint8 aChannel) const;
williamr@2
   863
	TUint8 NumUnknownsWithinRange(const TUint8 aChannelRangeLowest, const TUint8 aChannelRangeHighest) const;
williamr@2
   864
	
williamr@2
   865
	// This data padding has been added to help prevent future binary compatibility breaks
williamr@2
   866
	// Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used	
williamr@2
   867
	TUint32     iPadding1; 
williamr@2
   868
	TUint32     iPadding2;	
williamr@2
   869
    };
williamr@2
   870
williamr@2
   871
williamr@2
   872
/** Class used to exchange the local settings with the Registry server.
williamr@2
   873
williamr@2
   874
	Not a complete set of details of the local device
williamr@2
   875
williamr@2
   876
	@publishedPartner
williamr@2
   877
	@released
williamr@2
   878
williamr@2
   879
*/
williamr@2
   880
NONSHARABLE_CLASS(TBTLocalDevice)
williamr@2
   881
	{
williamr@2
   882
public:
williamr@2
   883
	IMPORT_C TBTLocalDevice();	
williamr@2
   884
	IMPORT_C const TBTDevAddr& Address() const;
williamr@2
   885
	IMPORT_C TUint32 DeviceClass() const;	
williamr@2
   886
	IMPORT_C const TDesC8& DeviceName() const;	
williamr@2
   887
	IMPORT_C THCIScanEnable ScanEnable() const;	
williamr@2
   888
	IMPORT_C TBool LimitedDiscoverable() const;	
williamr@2
   889
	IMPORT_C TUint8 PowerSetting() const;
williamr@2
   890
	IMPORT_C TBool AFHChannelAssessmentMode() const;
williamr@2
   891
	IMPORT_C TBool AcceptPairedOnlyMode() const;
williamr@2
   892
	IMPORT_C void SetAddress(const TBTDevAddr& aAddr);	
williamr@2
   893
	IMPORT_C void SetDeviceClass(TUint32 aCod);	
williamr@2
   894
	IMPORT_C void SetDeviceName(const TDesC8& aName);	
williamr@2
   895
	IMPORT_C void SetScanEnable(THCIScanEnable aEnable);	
williamr@2
   896
	IMPORT_C void SetLimitedDiscoverable(TBool aOn);	
williamr@2
   897
	IMPORT_C void SetPowerSetting(TUint8 aPowerSetting);	
williamr@2
   898
	IMPORT_C void SetAFHChannelAssessmentMode(TBool aOn);	
williamr@2
   899
	IMPORT_C void SetAcceptPairedOnlyMode(TBool aOn);	
williamr@2
   900
	IMPORT_C TBool IsValidAddress() const;	
williamr@2
   901
	IMPORT_C TBool IsValidDeviceClass() const;	
williamr@2
   902
	IMPORT_C TBool IsValidDeviceName() const;	
williamr@2
   903
	IMPORT_C TBool IsValidScanEnable() const;	
williamr@2
   904
	IMPORT_C TBool IsValidLimitedDiscoverable() const;	
williamr@2
   905
	IMPORT_C TBool IsValidPowerSetting() const;
williamr@2
   906
	IMPORT_C TBool IsValidAFHChannelAssessmentMode() const;
williamr@2
   907
	IMPORT_C TBool IsValidAcceptPairedOnlyMode() const;
williamr@2
   908
williamr@2
   909
protected:
williamr@2
   910
	enum
williamr@2
   911
		{
williamr@2
   912
		EAddress					= 0x0001,
williamr@2
   913
		ECoD						= 0x0002,
williamr@2
   914
		EDeviceName					= 0x0004,
williamr@2
   915
		EPowerSetting				= 0x0008,
williamr@2
   916
		EScanEnable					= 0x0010,
williamr@2
   917
		ELimitedDiscoverable 		= 0x0020,
williamr@2
   918
		EAFHChannelAssessmentMode	= 0x0040,
williamr@2
   919
		EAcceptPairedOnlyMode 		= 0x0080,
williamr@2
   920
		};	///< Used for indicating if a setting has been set (i.e. not a default/random value) @see iBitMask
williamr@2
   921
		
williamr@2
   922
private:		
williamr@2
   923
	enum
williamr@2
   924
		{
williamr@2
   925
		EAFHChannelAssessmentModeValue	= 0x0001,
williamr@2
   926
		EAcceptPairedOnlyModeValue		= 0x0002,
williamr@2
   927
		};	///< Used for settings requiring little space: allows new settings ot be introduced without increasing the size of this class @see iSimpleSettings
williamr@2
   928
			
williamr@2
   929
		
williamr@2
   930
williamr@2
   931
	TUint			iSetMask;		 ///< Bit mask indicating the data members that have been set
williamr@2
   932
	TBTDevAddr		iAddress;
williamr@2
   933
	TUint32			iCod;
williamr@2
   934
	TBTDeviceName8	iLocalName;
williamr@2
   935
	TUint8			iPowerSetting;
williamr@2
   936
	THCIScanEnable	iScanEnable;
williamr@2
   937
	TBool			iLimitedDiscoverable;
williamr@2
   938
	TUint32			iSimpleSettings; ///< Only first two bits currently used - for AFH Channel Assessment Mode, and Accept Paired Only Mode
williamr@2
   939
	};
williamr@2
   940
williamr@2
   941
williamr@2
   942
#endif