summaryrefslogtreecommitdiffstats
path: root/MdePkg/Include/Protocol/BluetoothConfig.h
blob: 052b860137370067f500f82317c964bb8ea2bad3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
/** @file
  EFI Bluetooth Configuration Protocol as defined in UEFI 2.7.
  This protocol abstracts user interface configuration for Bluetooth device.

  Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent

  @par Revision Reference:
  This Protocol is introduced in UEFI Specification 2.7

**/

#ifndef __EFI_BLUETOOTH_CONFIG_PROTOCOL_H__
#define __EFI_BLUETOOTH_CONFIG_PROTOCOL_H__

#include <IndustryStandard/Bluetooth.h>

#define EFI_BLUETOOTH_CONFIG_PROTOCOL_GUID \
  { \
    0x62960cf3, 0x40ff, 0x4263, { 0xa7, 0x7c, 0xdf, 0xde, 0xbd, 0x19, 0x1b, 0x4b } \
  }

typedef struct _EFI_BLUETOOTH_CONFIG_PROTOCOL EFI_BLUETOOTH_CONFIG_PROTOCOL;

typedef UINT32      EFI_BLUETOOTH_CONFIG_REMOTE_DEVICE_STATE_TYPE;
#define EFI_BLUETOOTH_CONFIG_REMOTE_DEVICE_STATE_CONNECTED    0x1
#define EFI_BLUETOOTH_CONFIG_REMOTE_DEVICE_STATE_PAIRED       0x2

///
/// EFI_BLUETOOTH_SCAN_CALLBACK_INFORMATION
///
typedef struct {
  ///
  /// 48bit Bluetooth device address.
  ///
  BLUETOOTH_ADDRESS         BDAddr;
  ///
  /// State of the remote deive
  ///
  UINT8                     RemoteDeviceState;
  ///
  /// Bluetooth ClassOfDevice. See Bluetooth specification for detail.
  ///
  BLUETOOTH_CLASS_OF_DEVICE ClassOfDevice;
  ///
  /// Remote device name
  ///
  UINT8                     RemoteDeviceName[BLUETOOTH_HCI_COMMAND_LOCAL_READABLE_NAME_MAX_SIZE];
} EFI_BLUETOOTH_SCAN_CALLBACK_INFORMATION;

///
/// EFI_BLUETOOTH_CONFIG_DATA_TYPE
///
typedef enum {
  ///
  /// Local/Remote Bluetooth device name. Data structure is zero terminated CHAR8[].
  ///
  EfiBluetoothConfigDataTypeDeviceName,
  ///
  /// Local/Remote Bluetooth device ClassOfDevice. Data structure is BLUETOOTH_CLASS_OF_DEVICE.
  ///
  EfiBluetoothConfigDataTypeClassOfDevice,
  ///
  /// Remote Bluetooth device state. Data structure is EFI_BLUETOOTH_CONFIG_REMOTE_DEVICE_STATE_TYPE.
  ///
  EfiBluetoothConfigDataTypeRemoteDeviceState, /* Relevant for LE*/
  ///
  /// Local/Remote Bluetooth device SDP information. Data structure is UINT8[].
  ///
  EfiBluetoothConfigDataTypeSdpInfo,
  ///
  /// Local Bluetooth device address. Data structure is BLUETOOTH_ADDRESS.
  ///
  EfiBluetoothConfigDataTypeBDADDR, /* Relevant for LE*/
  ///
  /// Local Bluetooth discoverable state. Data structure is UINT8. (Page scan and/or Inquiry scan)
  ///
  EfiBluetoothConfigDataTypeDiscoverable, /* Relevant for LE*/
  ///
  /// Local Bluetooth controller stored paired device list. Data structure is BLUETOOTH_ADDRESS[].
  ///
  EfiBluetoothConfigDataTypeControllerStoredPairedDeviceList,
  ///
  /// Local available device list. Data structure is BLUETOOTH_ADDRESS[].
  ///
  EfiBluetoothConfigDataTypeAvailableDeviceList,
  EfiBluetoothConfigDataTypeRandomAddress, /* Relevant for LE*/
  EfiBluetoothConfigDataTypeRSSI, /* Relevant for LE*/
  ///
  /// Advertisement report. Data structure is UNIT8[].
  ///
  EfiBluetoothConfigDataTypeAdvertisementData, /* Relevant for LE*/
  EfiBluetoothConfigDataTypeIoCapability, /* Relevant for LE*/
  EfiBluetoothConfigDataTypeOOBDataFlag, /* Relevant for LE*/
  ///
  /// KeyType of Authentication Requirements flag of local
  /// device as UINT8, indicating requested security properties.
  /// See Bluetooth specification 3.H.3.5.1. BIT0: MITM, BIT1:SC.
  ///
  EfiBluetoothConfigDataTypeKeyType, /* Relevant for LE*/
  EfiBluetoothConfigDataTypeEncKeySize, /* Relevant for LE*/
  EfiBluetoothConfigDataTypeMax,
} EFI_BLUETOOTH_CONFIG_DATA_TYPE;

///
/// EFI_BLUETOOTH_PIN_CALLBACK_TYPE.
///
typedef enum {
  ///
  /// For SSP - passkey entry. Input buffer is Passkey (4 bytes). No output buffer.
  /// See Bluetooth HCI command for detail.
  ///
  EfiBluetoothCallbackTypeUserPasskeyNotification,
  ///
  /// For SSP - just work and numeric comparison. Input buffer is numeric value (4 bytes).
  /// Output buffer is BOOLEAN (1 byte). See Bluetooth HCI command for detail.
  ///
  EfiBluetoothCallbackTypeUserConfirmationRequest,
  ///
  /// For SSP - OOB. See Bluetooth HCI command for detail.
  ///
  EfiBluetoothCallbackTypeOOBDataRequest,
  ///
  /// For legacy paring. No input buffer. Output buffer is PIN code( <= 16 bytes).
  /// See Bluetooth HCI command for detail.
  ///
  EfiBluetoothCallbackTypePinCodeRequest,
  EfiBluetoothCallbackTypeMax
} EFI_BLUETOOTH_PIN_CALLBACK_TYPE;

///
/// EFI_BLUETOOTH_CONNECT_COMPLETE_CALLBACK_TYPE.
///
typedef enum {
  ///
  /// This callback is called when Bluetooth receive Disconnection_Complete event. Input buffer is Event
  /// Parameters of Disconnection_Complete Event defined in Bluetooth specification.
  ///
  EfiBluetoothConnCallbackTypeDisconnected,
  ///
  /// This callback is called when Bluetooth receive Connection_Complete event. Input buffer is Event
  /// Parameters of Connection_Complete Event defined in Bluetooth specification.
  ///
  EfiBluetoothConnCallbackTypeConnected,
  ///
  /// This callback is called when Bluetooth receive Authentication_Complete event. Input buffer is Event
  /// Parameters of Authentication_Complete Event defined in Bluetooth specification.
  ///
  EfiBluetoothConnCallbackTypeAuthenticated,
  ///
  /// This callback is called when Bluetooth receive Encryption_Change event. Input buffer is Event
  /// Parameters of Encryption_Change Event defined in Bluetooth specification.
  ///
  EfiBluetoothConnCallbackTypeEncrypted
} EFI_BLUETOOTH_CONNECT_COMPLETE_CALLBACK_TYPE;


/**
  Initialize Bluetooth host controller and local device.

  @param  This          Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.

  @retval EFI_SUCCESS           The Bluetooth host controller and local device is initialized successfully.
  @retval EFI_DEVICE_ERROR      A hardware error occurred trying to initialize the Bluetooth host controller
                                and local device.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_INIT)(
  IN EFI_BLUETOOTH_CONFIG_PROTOCOL  *This
  );

/**
  Callback function, it is called if a Bluetooth device is found during scan process.

  @param  This            Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
  @param  Context         Context passed from scan request.
  @param  CallbackInfo    Data related to scan result. NULL CallbackInfo means scan complete.

  @retval EFI_SUCCESS       The callback function complete successfully.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_SCAN_CALLBACK_FUNCTION) (
  IN EFI_BLUETOOTH_CONFIG_PROTOCOL            *This,
  IN VOID                                     *Context,
  IN EFI_BLUETOOTH_SCAN_CALLBACK_INFORMATION  *CallbackInfo
  );

/**
  Scan Bluetooth device.

  @param  This          Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
  @param  ReScan        If TRUE, a new scan request is submitted no matter there is scan result before.
                        If FALSE and there is scan result, the previous scan result is returned and no scan request
                        is submitted.
  @param  ScanType      Bluetooth scan type, Inquiry and/or Page. See Bluetooth specification for detail.
  @param  Callback      The callback function. This function is called if a Bluetooth device is found during scan
                        process.
  @param  Context       Data passed into Callback function. This is optional parameter and may be NULL.

  @retval EFI_SUCCESS           The Bluetooth scan request is submitted.
  @retval EFI_DEVICE_ERROR      A hardware error occurred trying to scan the Bluetooth device.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_SCAN)(
  IN EFI_BLUETOOTH_CONFIG_PROTOCOL                  *This,
  IN BOOLEAN                                        ReScan,
  IN UINT8                                          ScanType,
  IN EFI_BLUETOOTH_CONFIG_SCAN_CALLBACK_FUNCTION    Callback,
  IN VOID                                           *Context
  );

/**
  Connect a Bluetooth device.

  @param  This          Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
  @param  BD_ADDR       The address of Bluetooth device to be connected.

  @retval EFI_SUCCESS           The Bluetooth device is connected successfully.
  @retval EFI_ALREADY_STARTED   The Bluetooth device is already connected.
  @retval EFI_NOT_FOUND         The Bluetooth device is not found.
  @retval EFI_DEVICE_ERROR      A hardware error occurred trying to connect the Bluetooth device.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_CONNECT)(
  IN EFI_BLUETOOTH_CONFIG_PROTOCOL                  *This,
  IN BLUETOOTH_ADDRESS                              *BD_ADDR
  );

/**
  Disconnect a Bluetooth device.

  @param  This          Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
  @param  BD_ADDR       The address of Bluetooth device to be connected.
  @param  Reason        Bluetooth disconnect reason. See Bluetooth specification for detail.

  @retval EFI_SUCCESS           The Bluetooth device is disconnected successfully.
  @retval EFI_NOT_STARTED       The Bluetooth device is not connected.
  @retval EFI_NOT_FOUND         The Bluetooth device is not found.
  @retval EFI_DEVICE_ERROR      A hardware error occurred trying to disconnect the Bluetooth device.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_DISCONNECT)(
  IN EFI_BLUETOOTH_CONFIG_PROTOCOL                  *This,
  IN BLUETOOTH_ADDRESS                              *BD_ADDR,
  IN UINT8                                          Reason
  );

/**
  Get Bluetooth configuration data.

  @param  This          Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
  @param  DataType      Configuration data type.
  @param  DataSize      On input, indicates the size, in bytes, of the data buffer specified by Data.
                        On output, indicates the amount of data actually returned.
  @param  Data          A pointer to the buffer of data that will be returned.

  @retval EFI_SUCCESS           The Bluetooth configuration data is returned successfully.
  @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:
                                - DataSize is NULL.
                                - *DataSize is not 0 and Data is NULL.
  @retval EFI_UNSUPPORTED       The DataType is unsupported.
  @retval EFI_NOT_FOUND         The DataType is not found.
  @retval EFI_BUFFER_TOO_SMALL  The buffer is too small to hold the buffer.
                                *DataSize has been updated with the size needed to complete the request.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_GET_DATA)(
  IN EFI_BLUETOOTH_CONFIG_PROTOCOL                  *This,
  IN EFI_BLUETOOTH_CONFIG_DATA_TYPE                 DataType,
  IN OUT UINTN                                      *DataSize,
  IN OUT VOID                                       *Data
  );

/**
  Set Bluetooth configuration data.

  @param  This          Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
  @param  DataType      Configuration data type.
  @param  DataSize      Indicates the size, in bytes, of the data buffer specified by Data.
  @param  Data          A pointer to the buffer of data that will be set.

  @retval EFI_SUCCESS           The Bluetooth configuration data is set successfully.
  @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:
                                - DataSize is 0.
                                - Data is NULL.
  @retval EFI_UNSUPPORTED       The DataType is unsupported.
  @retval EFI_BUFFER_TOO_SMALL  Cannot set configuration data.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_SET_DATA)(
  IN EFI_BLUETOOTH_CONFIG_PROTOCOL                  *This,
  IN EFI_BLUETOOTH_CONFIG_DATA_TYPE                 DataType,
  IN UINTN                                          DataSize,
  IN VOID                                           *Data
  );

/**
  Get remove Bluetooth device configuration data.

  @param  This          Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
  @param  DataType      Configuration data type.
  @param  BDAddr        Remote Bluetooth device address.
  @param  DataSize      On input, indicates the size, in bytes, of the data buffer specified by Data.
                        On output, indicates the amount of data actually returned.
  @param  Data          A pointer to the buffer of data that will be returned.

  @retval EFI_SUCCESS           The remote Bluetooth device configuration data is returned successfully.
  @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:
                                - DataSize is NULL.
                                - *DataSize is not 0 and Data is NULL.
  @retval EFI_UNSUPPORTED       The DataType is unsupported.
  @retval EFI_NOT_FOUND         The DataType is not found.
  @retval EFI_BUFFER_TOO_SMALL  The buffer is too small to hold the buffer.
                                *DataSize has been updated with the size needed to complete the request.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_GET_REMOTE_DATA)(
  IN EFI_BLUETOOTH_CONFIG_PROTOCOL                  *This,
  IN EFI_BLUETOOTH_CONFIG_DATA_TYPE                 DataType,
  IN BLUETOOTH_ADDRESS                              *BDAddr,
  IN OUT UINTN                                      *DataSize,
  IN OUT VOID                                       *Data
  );

/**
  The callback function for PIN code.

  @param  This                Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
  @param  Context             Context passed from registration.
  @param  CallbackType        Callback type in EFI_BLUETOOTH_PIN_CALLBACK_TYPE.
  @param  InputBuffer         A pointer to the buffer of data that is input from callback caller.
  @param  InputBufferSize     Indicates the size, in bytes, of the data buffer specified by InputBuffer.
  @param  OutputBuffer        A pointer to the buffer of data that will be output from callback callee.
                              Callee allocates this buffer by using EFI Boot Service AllocatePool().
  @param  OutputBufferSize    Indicates the size, in bytes, of the data buffer specified by OutputBuffer.

  @retval EFI_SUCCESS   The callback function complete successfully.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_REGISTER_PIN_CALLBACK_FUNCTION)(
  IN EFI_BLUETOOTH_CONFIG_PROTOCOL                        *This,
  IN VOID                                                 *Context,
  IN EFI_BLUETOOTH_PIN_CALLBACK_TYPE                      CallbackType,
  IN VOID                                                 *InputBuffer,
  IN UINTN                                                InputBufferSize,
  OUT VOID                                                **OutputBuffer,
  OUT UINTN                                               *OutputBufferSize
  );

/**
  Register PIN callback function.

  @param  This          Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
  @param  Callback      The callback function. NULL means unregister.
  @param  Context       Data passed into Callback function. This is optional parameter and may be NULL.

  @retval EFI_SUCCESS   The PIN callback function is registered successfully.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_REGISTER_PIN_CALLBACK)(
  IN EFI_BLUETOOTH_CONFIG_PROTOCOL                        *This,
  IN EFI_BLUETOOTH_CONFIG_REGISTER_PIN_CALLBACK_FUNCTION  Callback,
  IN VOID                                                 *Context
  );

/**
  The callback function to get link key.

  @param  This                Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
  @param  Context             Context passed from registration.
  @param  BDAddr              A pointer to Bluetooth device address.
  @param  LinkKey             A pointer to the buffer of link key.

  @retval EFI_SUCCESS   The callback function complete successfully.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_REGISTER_GET_LINK_KEY_CALLBACK_FUNCTION)(
  IN EFI_BLUETOOTH_CONFIG_PROTOCOL        *This,
  IN VOID                                 *Context,
  IN BLUETOOTH_ADDRESS                    *BDAddr,
  OUT UINT8                               LinkKey[BLUETOOTH_HCI_LINK_KEY_SIZE]
  );

/**
  Register get link key callback function.

  @param  This          Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
  @param  Callback      The callback function. NULL means unregister.
  @param  Context       Data passed into Callback function. This is optional parameter and may be NULL.

  @retval EFI_SUCCESS   The link key callback function is registered successfully.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_REGISTER_GET_LINK_KEY_CALLBACK)(
  IN EFI_BLUETOOTH_CONFIG_PROTOCOL                                  *This,
  IN EFI_BLUETOOTH_CONFIG_REGISTER_GET_LINK_KEY_CALLBACK_FUNCTION   Callback,
  IN VOID                                                           *Context
  );

/**
  The callback function to set link key.

  @param  This                Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
  @param  Context             Context passed from registration.
  @param  BDAddr              A pointer to Bluetooth device address.
  @param  LinkKey             A pointer to the buffer of link key.

  @retval EFI_SUCCESS   The callback function complete successfully.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_REGISTER_SET_LINK_KEY_CALLBACK_FUNCTION)(
  IN EFI_BLUETOOTH_CONFIG_PROTOCOL        *This,
  IN VOID                                 *Context,
  IN BLUETOOTH_ADDRESS                    *BDAddr,
  IN UINT8                                LinkKey[BLUETOOTH_HCI_LINK_KEY_SIZE]
  );

/**
  Register set link key callback function.

  @param  This          Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
  @param  Callback      The callback function. NULL means unregister.
  @param  Context       Data passed into Callback function. This is optional parameter and may be NULL.

  @retval EFI_SUCCESS   The link key callback function is registered successfully.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_REGISTER_SET_LINK_KEY_CALLBACK)(
  IN EFI_BLUETOOTH_CONFIG_PROTOCOL                                  *This,
  IN EFI_BLUETOOTH_CONFIG_REGISTER_SET_LINK_KEY_CALLBACK_FUNCTION   Callback,
  IN VOID                                                           *Context
  );

/**
  The callback function. It is called after connect completed.

  @param  This                Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
  @param  Context             Context passed from registration.
  @param  CallbackType        Callback type in EFI_BLUETOOTH_CONNECT_COMPLETE_CALLBACK_TYPE.
  @param  BDAddr              A pointer to Bluetooth device address.
  @param  InputBuffer         A pointer to the buffer of data that is input from callback caller.
  @param  InputBufferSize     Indicates the size, in bytes, of the data buffer specified by InputBuffer.

  @retval EFI_SUCCESS   The callback function complete successfully.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_REGISTER_CONNECT_COMPLETE_CALLBACK_FUNCTION)(
  IN EFI_BLUETOOTH_CONFIG_PROTOCOL                  *This,
  IN VOID                                           *Context,
  IN EFI_BLUETOOTH_CONNECT_COMPLETE_CALLBACK_TYPE   CallbackType,
  IN BLUETOOTH_ADDRESS                              *BDAddr,
  IN VOID                                           *InputBuffer,
  IN UINTN                                          InputBufferSize
  );

/**
  Register link connect complete callback function.

  @param  This          Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
  @param  Callback      The callback function. NULL means unregister.
  @param  Context       Data passed into Callback function. This is optional parameter and may be NULL.

  @retval EFI_SUCCESS   The link connect complete callback function is registered successfully.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_REGISTER_CONNECT_COMPLETE_CALLBACK)(
  IN EFI_BLUETOOTH_CONFIG_PROTOCOL                                      *This,
  IN EFI_BLUETOOTH_CONFIG_REGISTER_CONNECT_COMPLETE_CALLBACK_FUNCTION   Callback,
  IN VOID                                                               *Context
  );

///
/// This protocol abstracts user interface configuration for Bluetooth device.
///
struct _EFI_BLUETOOTH_CONFIG_PROTOCOL {
  EFI_BLUETOOTH_CONFIG_INIT                               Init;
  EFI_BLUETOOTH_CONFIG_SCAN                               Scan;
  EFI_BLUETOOTH_CONFIG_CONNECT                            Connect;
  EFI_BLUETOOTH_CONFIG_DISCONNECT                         Disconnect;
  EFI_BLUETOOTH_CONFIG_GET_DATA                           GetData;
  EFI_BLUETOOTH_CONFIG_SET_DATA                           SetData;
  EFI_BLUETOOTH_CONFIG_GET_REMOTE_DATA                    GetRemoteData;
  EFI_BLUETOOTH_CONFIG_REGISTER_PIN_CALLBACK              RegisterPinCallback;
  EFI_BLUETOOTH_CONFIG_REGISTER_GET_LINK_KEY_CALLBACK     RegisterGetLinkKeyCallback;
  EFI_BLUETOOTH_CONFIG_REGISTER_SET_LINK_KEY_CALLBACK     RegisterSetLinkKeyCallback;
  EFI_BLUETOOTH_CONFIG_REGISTER_CONNECT_COMPLETE_CALLBACK RegisterLinkConnectCompleteCallback;
};

extern EFI_GUID gEfiBluetoothConfigProtocolGuid;

#endif