1 /******************************************************************************
2  *
3  *  Copyright (C) 1999-2012 Broadcom Corporation
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 /******************************************************************************
20  *
21  *  This file contains the Bluetooth Manager (BTM) API function external
22  *  definitions.
23  *
24  ******************************************************************************/
25 #ifndef BTM_BLE_API_H
26 #define BTM_BLE_API_H
27 
28 #include "btm_api.h"
29 #include "gki.h"
30 #include <hardware/bt_common_types.h>
31 
32 #define CHNL_MAP_LEN    5
33 typedef UINT8 tBTM_BLE_CHNL_MAP[CHNL_MAP_LEN];
34 
35 /* 0x00-0x04 only used for set advertising parameter command */
36 #define BTM_BLE_CONNECT_EVT     0x00   /* 0x00-0x04 only used for set advertising
37                                             parameter command */
38 #define BTM_BLE_CONNECT_DIR_EVT 0x01   /* Connectable directed advertising */
39 #define BTM_BLE_DISCOVER_EVT    0x02  /* Scannable undirected advertising */
40 #define BTM_BLE_NON_CONNECT_EVT 0x03  /* Non connectable undirected advertising */
41 #define BTM_BLE_CONNECT_LO_DUTY_DIR_EVT 0x04        /* Connectable low duty
42                                                        cycle directed advertising  */
43     /* 0x00 - 0x05 can be received on adv event type */
44 #define BTM_BLE_SCAN_RSP_EVT    0x04
45 #define BTM_BLE_SCAN_REQ_EVT    0x05
46 #define BTM_BLE_UNKNOWN_EVT     0xff
47 
48 #define BTM_BLE_UNKNOWN_EVT     0xff
49 
50 typedef UINT8 tBTM_BLE_EVT;
51 typedef UINT8 tBTM_BLE_CONN_MODE;
52 
53 typedef UINT32 tBTM_BLE_REF_VALUE;
54 
55 #define BTM_BLE_SCAN_MODE_PASS      0
56 #define BTM_BLE_SCAN_MODE_ACTI      1
57 #define BTM_BLE_SCAN_MODE_NONE      0xff
58 typedef UINT8 tBLE_SCAN_MODE;
59 
60 #define BTM_BLE_BATCH_SCAN_MODE_DISABLE 0
61 #define BTM_BLE_BATCH_SCAN_MODE_PASS  1
62 #define BTM_BLE_BATCH_SCAN_MODE_ACTI  2
63 #define BTM_BLE_BATCH_SCAN_MODE_PASS_ACTI 3
64 
65 typedef UINT8 tBTM_BLE_BATCH_SCAN_MODE;
66 
67 /* advertising channel map */
68 #define BTM_BLE_ADV_CHNL_37    (0x01 << 0)
69 #define BTM_BLE_ADV_CHNL_38    (0x01 << 1)
70 #define BTM_BLE_ADV_CHNL_39    (0x01 << 2)
71 typedef UINT8 tBTM_BLE_ADV_CHNL_MAP;
72 
73 /*d efault advertising channel map */
74 #ifndef BTM_BLE_DEFAULT_ADV_CHNL_MAP
75 #define BTM_BLE_DEFAULT_ADV_CHNL_MAP   (BTM_BLE_ADV_CHNL_37| BTM_BLE_ADV_CHNL_38| BTM_BLE_ADV_CHNL_39)
76 #endif
77 
78 /* advertising filter policy */
79 #define AP_SCAN_CONN_ALL           0x00        /* default */
80 #define AP_SCAN_WL_CONN_ALL        0x01
81 #define AP_SCAN_ALL_CONN_WL        0x02
82 #define AP_SCAN_CONN_WL            0x03
83 #define AP_SCAN_CONN_POLICY_MAX    0x04
84 typedef UINT8   tBTM_BLE_AFP;
85 
86 /* default advertising filter policy */
87 #ifndef BTM_BLE_DEFAULT_AFP
88 #define BTM_BLE_DEFAULT_AFP   AP_SCAN_CONN_ALL
89 #endif
90 
91 /* scanning filter policy */
92 #define SP_ADV_ALL     0x00     /* 0: accept adv packet from all, directed adv pkt not directed */
93                                 /* to local device is ignored */
94 #define SP_ADV_WL      0x01     /* 1: accept adv packet from device in white list, directed adv */
95                                 /* packet not directed to local device is ignored */
96 #define SP_ADV_ALL_RPA_DIR_ADV 0x02  /* 2: accept adv packet from all, directed adv pkt */
97                                      /* not directed to me is ignored except direct adv with RPA */
98 #define SP_ADV_WL_RPA_DIR_ADV  0x03  /* 3: accept adv packet from device in white list, directed */
99                                      /* adv pkt not directed to me is ignored except direct adv */
100                                      /* with RPA */
101 typedef UINT8   tBTM_BLE_SFP;
102 
103 #ifndef BTM_BLE_DEFAULT_SFP
104 #define BTM_BLE_DEFAULT_SFP   SP_ADV_ALL
105 #endif
106 
107 /* adv parameter boundary values */
108 #define BTM_BLE_ADV_INT_MIN            0x0020
109 #define BTM_BLE_ADV_INT_MAX            0x4000
110 
111 /* Full scan boundary values */
112 #define BTM_BLE_ADV_SCAN_FULL_MIN      0x00
113 #define BTM_BLE_ADV_SCAN_FULL_MAX      0x64
114 
115 /* Partial scan boundary values */
116 #define BTM_BLE_ADV_SCAN_TRUNC_MIN      BTM_BLE_ADV_SCAN_FULL_MIN
117 #define BTM_BLE_ADV_SCAN_TRUNC_MAX      BTM_BLE_ADV_SCAN_FULL_MAX
118 
119 /* Threshold values */
120 #define BTM_BLE_ADV_SCAN_THR_MIN        BTM_BLE_ADV_SCAN_FULL_MIN
121 #define BTM_BLE_ADV_SCAN_THR_MAX        BTM_BLE_ADV_SCAN_FULL_MAX
122 
123 /* connection parameter boundary values */
124 #define BTM_BLE_SCAN_INT_MIN            0x0004
125 #define BTM_BLE_SCAN_INT_MAX            0x4000
126 #define BTM_BLE_SCAN_WIN_MIN            0x0004
127 #define BTM_BLE_SCAN_WIN_MAX            0x4000
128 #define BTM_BLE_EXT_SCAN_INT_MAX        0x00FFFFFF
129 #define BTM_BLE_EXT_SCAN_WIN_MAX        0xFFFF
130 #define BTM_BLE_CONN_INT_MIN            0x0006
131 #define BTM_BLE_CONN_INT_MAX            0x0C80
132 #define BTM_BLE_CONN_LATENCY_MAX        500
133 #define BTM_BLE_CONN_SUP_TOUT_MIN       0x000A
134 #define BTM_BLE_CONN_SUP_TOUT_MAX       0x0C80
135 #define BTM_BLE_CONN_PARAM_UNDEF        0xffff      /* use this value when a specific value not to be overwritten */
136 #define BTM_BLE_SCAN_PARAM_UNDEF        0xffffffff
137 
138 /* default connection parameters if not configured, use GAP recommend value for auto/selective connection */
139 /* default scan interval */
140 #ifndef BTM_BLE_SCAN_FAST_INT
141 #define BTM_BLE_SCAN_FAST_INT    96    /* 30 ~ 60 ms (use 60)  = 96 *0.625 */
142 #endif
143 /* default scan window for background connection, applicable for auto connection or selective conenction */
144 #ifndef BTM_BLE_SCAN_FAST_WIN
145 #define BTM_BLE_SCAN_FAST_WIN   48      /* 30 ms = 48 *0.625 */
146 #endif
147 
148 /* default scan paramter used in reduced power cycle (background scanning) */
149 #ifndef BTM_BLE_SCAN_SLOW_INT_1
150 #define BTM_BLE_SCAN_SLOW_INT_1    2048    /* 1.28 s   = 2048 *0.625 */
151 #endif
152 #ifndef BTM_BLE_SCAN_SLOW_WIN_1
153 #define BTM_BLE_SCAN_SLOW_WIN_1   48      /* 30 ms = 48 *0.625 */
154 #endif
155 
156 /* default scan paramter used in reduced power cycle (background scanning) */
157 #ifndef BTM_BLE_SCAN_SLOW_INT_2
158 #define BTM_BLE_SCAN_SLOW_INT_2    4096    /* 2.56 s   = 4096 *0.625 */
159 #endif
160 #ifndef BTM_BLE_SCAN_SLOW_WIN_2
161 #define BTM_BLE_SCAN_SLOW_WIN_2   36      /* 22.5 ms = 36 *0.625 */
162 #endif
163 
164 /* default connection interval min */
165 #ifndef BTM_BLE_CONN_INT_MIN_DEF
166 #define BTM_BLE_CONN_INT_MIN_DEF     24      /* recommended min: 30ms  = 24 * 1.25 */
167 #endif
168 
169 /* default connectino interval max */
170 #ifndef BTM_BLE_CONN_INT_MAX_DEF
171 #define BTM_BLE_CONN_INT_MAX_DEF     40      /* recommended max: 50 ms = 56 * 1.25 */
172 #endif
173 
174 /* default slave latency */
175 #ifndef BTM_BLE_CONN_SLAVE_LATENCY_DEF
176 #define BTM_BLE_CONN_SLAVE_LATENCY_DEF  0      /* 0 */
177 #endif
178 
179 /* default supervision timeout */
180 #ifndef BTM_BLE_CONN_TIMEOUT_DEF
181 #define BTM_BLE_CONN_TIMEOUT_DEF    2000
182 #endif
183 
184 /* minimum acceptable connection interval */
185 #ifndef BTM_BLE_CONN_INT_MIN_LIMIT
186 #define BTM_BLE_CONN_INT_MIN_LIMIT     0x0009
187 #endif
188 
189 #define BTM_BLE_DIR_CONN_FALLBACK_UNDIR         1
190 #define BTM_BLE_DIR_CONN_FALLBACK_NO_ADV        2
191 
192 #ifndef BTM_BLE_DIR_CONN_FALLBACK
193 #define BTM_BLE_DIR_CONN_FALLBACK   BTM_BLE_DIR_CONN_FALLBACK_UNDIR
194 #endif
195 
196 #define BTM_CMAC_TLEN_SIZE          8                   /* 64 bits */
197 #define BTM_BLE_AUTH_SIGN_LEN       12                   /* BLE data signature length 8 Bytes + 4 bytes counter*/
198 typedef UINT8 BLE_SIGNATURE[BTM_BLE_AUTH_SIGN_LEN];         /* Device address */
199 
200 #ifndef BTM_BLE_HOST_SUPPORT
201 #define BTM_BLE_HOST_SUPPORT        0x01
202 #endif
203 
204 #ifndef BTM_BLE_SIMULTANEOUS_HOST
205 #define BTM_BLE_SIMULTANEOUS_HOST   0x01
206 #endif
207 
208 /* Appearance Values Reported with BTM_BLE_AD_TYPE_APPEARANCE */
209 #define BTM_BLE_APPEARANCE_UKNOWN                  0x0000
210 #define BTM_BLE_APPEARANCE_GENERIC_PHONE           0x0040
211 #define BTM_BLE_APPEARANCE_GENERIC_COMPUTER        0x0080
212 #define BTM_BLE_APPEARANCE_GENERIC_WATCH           0x00C0
213 #define BTM_BLE_APPEARANCE_SPORTS_WATCH            0x00C1
214 #define BTM_BLE_APPEARANCE_GENERIC_CLOCK           0x0100
215 #define BTM_BLE_APPEARANCE_GENERIC_DISPLAY         0x0140
216 #define BTM_BLE_APPEARANCE_GENERIC_REMOTE          0x0180
217 #define BTM_BLE_APPEARANCE_GENERIC_EYEGLASSES      0x01C0
218 #define BTM_BLE_APPEARANCE_GENERIC_TAG             0x0200
219 #define BTM_BLE_APPEARANCE_GENERIC_KEYRING         0x0240
220 #define BTM_BLE_APPEARANCE_GENERIC_MEDIA_PLAYER    0x0280
221 #define BTM_BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 0x02C0
222 #define BTM_BLE_APPEARANCE_GENERIC_THERMOMETER     0x0300
223 #define BTM_BLE_APPEARANCE_THERMOMETER_EAR         0x0301
224 #define BTM_BLE_APPEARANCE_GENERIC_HEART_RATE      0x0340
225 #define BTM_BLE_APPEARANCE_HEART_RATE_BELT         0x0341
226 #define BTM_BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE  0x0380
227 #define BTM_BLE_APPEARANCE_BLOOD_PRESSURE_ARM      0x0381
228 #define BTM_BLE_APPEARANCE_BLOOD_PRESSURE_WRIST    0x0382
229 #define BTM_BLE_APPEARANCE_GENERIC_HID             0x03C0
230 #define BTM_BLE_APPEARANCE_HID_KEYBOARD            0x03C1
231 #define BTM_BLE_APPEARANCE_HID_MOUSE               0x03C2
232 #define BTM_BLE_APPEARANCE_HID_JOYSTICK            0x03C3
233 #define BTM_BLE_APPEARANCE_HID_GAMEPAD             0x03C4
234 #define BTM_BLE_APPEARANCE_HID_DIGITIZER_TABLET    0x03C5
235 #define BTM_BLE_APPEARANCE_HID_CARD_READER         0x03C6
236 #define BTM_BLE_APPEARANCE_HID_DIGITAL_PEN         0x03C7
237 #define BTM_BLE_APPEARANCE_HID_BARCODE_SCANNER     0x03C8
238 #define BTM_BLE_APPEARANCE_GENERIC_GLUCOSE         0x0400
239 #define BTM_BLE_APPEARANCE_GENERIC_WALKING         0x0440
240 #define BTM_BLE_APPEARANCE_WALKING_IN_SHOE         0x0441
241 #define BTM_BLE_APPEARANCE_WALKING_ON_SHOE         0x0442
242 #define BTM_BLE_APPEARANCE_WALKING_ON_HIP          0x0443
243 #define BTM_BLE_APPEARANCE_GENERIC_CYCLING         0x0480
244 #define BTM_BLE_APPEARANCE_CYCLING_COMPUTER        0x0481
245 #define BTM_BLE_APPEARANCE_CYCLING_SPEED           0x0482
246 #define BTM_BLE_APPEARANCE_CYCLING_CADENCE         0x0483
247 #define BTM_BLE_APPEARANCE_CYCLING_POWER           0x0484
248 #define BTM_BLE_APPEARANCE_CYCLING_SPEED_CADENCE   0x0485
249 #define BTM_BLE_APPEARANCE_GENERIC_PULSE_OXIMETER  0x0C40
250 #define BTM_BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 0x0C41
251 #define BTM_BLE_APPEARANCE_PULSE_OXIMETER_WRIST    0x0C42
252 #define BTM_BLE_APPEARANCE_GENERIC_WEIGHT          0x0C80
253 #define BTM_BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS  0x1440
254 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION 0x1441
255 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_AND_NAV     0x1442
256 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD         0x1443
257 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD_AND_NAV 0x1444
258 
259 
260 /* Structure returned with Rand/Encrypt complete callback */
261 typedef struct
262 {
263     UINT8   status;
264     UINT8   param_len;
265     UINT16  opcode;
266     UINT8   param_buf[BT_OCTET16_LEN];
267 } tBTM_RAND_ENC;
268 
269 /* General callback function for notifying an application that a synchronous
270 ** BTM function is complete. The pointer contains the address of any returned data.
271 */
272 typedef void (tBTM_RAND_ENC_CB) (tBTM_RAND_ENC *p1);
273 
274 #define BTM_BLE_FILTER_TARGET_SCANNER       0x01
275 #define BTM_BLE_FILTER_TARGET_ADVR          0x00
276 
277 #define BTM_BLE_POLICY_BLACK_ALL            0x00    /* relevant to both */
278 #define BTM_BLE_POLICY_ALLOW_SCAN           0x01    /* relevant to advertiser */
279 #define BTM_BLE_POLICY_ALLOW_CONN           0x02    /* relevant to advertiser */
280 #define BTM_BLE_POLICY_WHITE_ALL            0x03    /* relevant to both */
281 
282 /* ADV data flag bit definition used for BTM_BLE_AD_TYPE_FLAG */
283 #define BTM_BLE_LIMIT_DISC_FLAG         (0x01 << 0)
284 #define BTM_BLE_GEN_DISC_FLAG           (0x01 << 1)
285 #define BTM_BLE_BREDR_NOT_SPT           (0x01 << 2)
286 /* 4.1 spec adv flag for simultaneous BR/EDR+LE connection support */
287 #define BTM_BLE_DMT_CONTROLLER_SPT      (0x01 << 3)
288 #define BTM_BLE_DMT_HOST_SPT            (0x01 << 4)
289 #define BTM_BLE_NON_LIMIT_DISC_FLAG     (0x00 )         /* lowest bit unset */
290 #define BTM_BLE_ADV_FLAG_MASK           (BTM_BLE_LIMIT_DISC_FLAG | BTM_BLE_BREDR_NOT_SPT | BTM_BLE_GEN_DISC_FLAG)
291 #define BTM_BLE_LIMIT_DISC_MASK         (BTM_BLE_LIMIT_DISC_FLAG )
292 
293 #define BTM_BLE_AD_BIT_DEV_NAME        (0x00000001 << 0)
294 #define BTM_BLE_AD_BIT_FLAGS           (0x00000001 << 1)
295 #define BTM_BLE_AD_BIT_MANU            (0x00000001 << 2)
296 #define BTM_BLE_AD_BIT_TX_PWR          (0x00000001 << 3)
297 #define BTM_BLE_AD_BIT_INT_RANGE       (0x00000001 << 5)
298 #define BTM_BLE_AD_BIT_SERVICE         (0x00000001 << 6)
299 #define BTM_BLE_AD_BIT_SERVICE_SOL     (0x00000001 << 7)
300 #define BTM_BLE_AD_BIT_SERVICE_DATA    (0x00000001 << 8)
301 #define BTM_BLE_AD_BIT_SIGN_DATA       (0x00000001 << 9)
302 #define BTM_BLE_AD_BIT_SERVICE_128SOL  (0x00000001 << 10)
303 #define BTM_BLE_AD_BIT_APPEARANCE      (0x00000001 << 11)
304 #define BTM_BLE_AD_BIT_PUBLIC_ADDR      (0x00000001 << 12)
305 #define BTM_BLE_AD_BIT_RANDOM_ADDR       (0x00000001 << 13)
306 #define BTM_BLE_AD_BIT_SERVICE_32        (0x00000001 << 4)
307 #define BTM_BLE_AD_BIT_SERVICE_32SOL     (0x00000001 << 14)
308 #define BTM_BLE_AD_BIT_PROPRIETARY     (0x00000001 << 15)
309 #define BTM_BLE_AD_BIT_SERVICE_128      (0x00000001 << 16)      /*128-bit Service UUIDs*/
310 
311 typedef  UINT32  tBTM_BLE_AD_MASK;
312 
313 #define BTM_BLE_AD_TYPE_FLAG            HCI_EIR_FLAGS_TYPE                  /* 0x01 */
314 #define BTM_BLE_AD_TYPE_16SRV_PART      HCI_EIR_MORE_16BITS_UUID_TYPE       /* 0x02 */
315 #define BTM_BLE_AD_TYPE_16SRV_CMPL      HCI_EIR_COMPLETE_16BITS_UUID_TYPE   /* 0x03 */
316 #define BTM_BLE_AD_TYPE_32SRV_PART      HCI_EIR_MORE_32BITS_UUID_TYPE       /* 0x04 */
317 #define BTM_BLE_AD_TYPE_32SRV_CMPL      HCI_EIR_COMPLETE_32BITS_UUID_TYPE   /* 0x05 */
318 #define BTM_BLE_AD_TYPE_128SRV_PART     HCI_EIR_MORE_128BITS_UUID_TYPE       /* 0x06 */
319 #define BTM_BLE_AD_TYPE_128SRV_CMPL     HCI_EIR_COMPLETE_128BITS_UUID_TYPE   /* 0x07 */
320 #define BTM_BLE_AD_TYPE_NAME_SHORT      HCI_EIR_SHORTENED_LOCAL_NAME_TYPE       /* 0x08 */
321 #define BTM_BLE_AD_TYPE_NAME_CMPL       HCI_EIR_COMPLETE_LOCAL_NAME_TYPE        /* 0x09 */
322 #define BTM_BLE_AD_TYPE_TX_PWR          HCI_EIR_TX_POWER_LEVEL_TYPE             /* 0x0A */
323 #define BTM_BLE_AD_TYPE_DEV_CLASS       0x0D
324 #define BTM_BLE_AD_TYPE_SM_TK           0x10
325 #define BTM_BLE_AD_TYPE_SM_OOB_FLAG     0x11
326 #define BTM_BLE_AD_TYPE_INT_RANGE       0x12
327 #define BTM_BLE_AD_TYPE_SOL_SRV_UUID    0x14
328 #define BTM_BLE_AD_TYPE_128SOL_SRV_UUID 0x15
329 #define BTM_BLE_AD_TYPE_SERVICE_DATA    0x16
330 #define BTM_BLE_AD_TYPE_PUBLIC_TARGET   0x17
331 #define BTM_BLE_AD_TYPE_RANDOM_TARGET   0x18
332 #define BTM_BLE_AD_TYPE_APPEARANCE      0x19
333 #define BTM_BLE_AD_TYPE_ADV_INT         0x1a
334 #define BTM_BLE_AD_TYPE_32SOL_SRV_UUID  0x1b
335 #define BTM_BLE_AD_TYPE_32SERVICE_DATA  0x1c
336 #define BTM_BLE_AD_TYPE_128SERVICE_DATA 0x1d
337 
338 #define BTM_BLE_AD_TYPE_MANU            HCI_EIR_MANUFACTURER_SPECIFIC_TYPE      /* 0xff */
339 typedef UINT8   tBTM_BLE_AD_TYPE;
340 
341 /*  Security settings used with L2CAP LE COC */
342 #define BTM_SEC_LE_LINK_ENCRYPTED           0x01
343 #define BTM_SEC_LE_LINK_PAIRED_WITHOUT_MITM 0x02
344 #define BTM_SEC_LE_LINK_PAIRED_WITH_MITM    0x04
345 
346 /*  Min/max Preferred  number of payload octets that the local Controller
347     should include in a single Link Layer Data Channel PDU. */
348 #define BTM_BLE_DATA_SIZE_MAX     0x00fb
349 #define BTM_BLE_DATA_SIZE_MIN     0x001b
350 
351 /*  Preferred maximum number of microseconds that the local Controller
352     should use to transmit a single Link Layer Data Channel PDU. */
353 #define BTM_BLE_DATA_TX_TIME_MIN     0x0148
354 #define BTM_BLE_DATA_TX_TIME_MAX     0x0848
355 
356 /* adv tx power level */
357 #define BTM_BLE_ADV_TX_POWER_MIN        0           /* minimum tx power */
358 #define BTM_BLE_ADV_TX_POWER_LOW        1           /* low tx power     */
359 #define BTM_BLE_ADV_TX_POWER_MID        2           /* middle tx power  */
360 #define BTM_BLE_ADV_TX_POWER_UPPER      3           /* upper tx power   */
361 #define BTM_BLE_ADV_TX_POWER_MAX        4           /* maximum tx power */
362 typedef UINT8 tBTM_BLE_ADV_TX_POWER;
363 
364 /* adv tx power in dBm */
365 typedef struct
366 {
367     UINT8 adv_inst_max;         /* max adv instance supported in controller */
368     UINT8 rpa_offloading;
369     UINT16 tot_scan_results_strg;
370     UINT8 max_irk_list_sz;
371     UINT8 filter_support;
372     UINT8 max_filter;
373     UINT8 energy_support;
374     BOOLEAN values_read;
375     UINT16 version_supported;
376     UINT16 total_trackable_advertisers;
377     UINT8 extended_scan_support;
378     UINT8 debug_logging_supported;
379 }tBTM_BLE_VSC_CB;
380 
381 /* slave preferred connection interval range */
382 typedef struct
383 {
384     UINT16  low;
385     UINT16  hi;
386 
387 }tBTM_BLE_INT_RANGE;
388 
389 /* Service tag supported in the device */
390 typedef struct
391 {
392     UINT8       num_service;
393     BOOLEAN     list_cmpl;
394     UINT16      *p_uuid;
395 }tBTM_BLE_SERVICE;
396 
397 /* 32 bits Service supported in the device */
398 typedef struct
399 {
400     UINT8       num_service;
401     BOOLEAN     list_cmpl;
402     UINT32      *p_uuid;
403 }tBTM_BLE_32SERVICE;
404 
405 /* 128 bits Service supported in the device */
406 typedef struct
407 {
408     BOOLEAN     list_cmpl;
409     UINT8       uuid128[MAX_UUID_SIZE];
410 }tBTM_BLE_128SERVICE;
411 
412 typedef struct
413 {
414     UINT8       len;
415     UINT8      *p_val;
416 }tBTM_BLE_MANU;
417 
418 
419 typedef struct
420 {
421     tBT_UUID    service_uuid;
422     UINT8       len;
423     UINT8      *p_val;
424 }tBTM_BLE_SERVICE_DATA;
425 
426 typedef struct
427 {
428     UINT8       adv_type;
429     UINT8       len;
430     UINT8       *p_val;     /* number of len byte */
431 }tBTM_BLE_PROP_ELEM;
432 
433 typedef struct
434 {
435     UINT8                   num_elem;
436     tBTM_BLE_PROP_ELEM      *p_elem;
437 }tBTM_BLE_PROPRIETARY;
438 
439 typedef struct
440 {
441     tBTM_BLE_INT_RANGE      int_range;      /* slave prefered conn interval range */
442     tBTM_BLE_MANU           *p_manu;           /* manufactuer data */
443     tBTM_BLE_SERVICE        *p_services;       /* services */
444     tBTM_BLE_128SERVICE     *p_services_128b;  /* 128 bits service */
445     tBTM_BLE_32SERVICE      *p_service_32b;     /* 32 bits Service UUID */
446     tBTM_BLE_SERVICE        *p_sol_services;    /* 16 bits services Solicitation UUIDs */
447     tBTM_BLE_32SERVICE      *p_sol_service_32b;    /* List of 32 bit Service Solicitation UUIDs */
448     tBTM_BLE_128SERVICE     *p_sol_service_128b;    /* List of 128 bit Service Solicitation UUIDs */
449     tBTM_BLE_PROPRIETARY    *p_proprietary;
450     tBTM_BLE_SERVICE_DATA   *p_service_data;    /* service data */
451     UINT16                  appearance;
452     UINT8                   flag;
453     UINT8                   tx_power;
454 }tBTM_BLE_ADV_DATA;
455 
456 #ifndef BTM_BLE_MULTI_ADV_MAX
457 #define BTM_BLE_MULTI_ADV_MAX   16 /* controller returned adv_inst_max should be less
458                                       than this number */
459 #endif
460 
461 #define BTM_BLE_MULTI_ADV_INVALID   0
462 
463 #define BTM_BLE_MULTI_ADV_ENB_EVT           1
464 #define BTM_BLE_MULTI_ADV_DISABLE_EVT       2
465 #define BTM_BLE_MULTI_ADV_PARAM_EVT         3
466 #define BTM_BLE_MULTI_ADV_DATA_EVT          4
467 typedef UINT8 tBTM_BLE_MULTI_ADV_EVT;
468 
469 #define BTM_BLE_MULTI_ADV_DEFAULT_STD 0
470 
471 typedef struct
472 {
473     UINT16          adv_int_min;
474     UINT16          adv_int_max;
475     UINT8           adv_type;
476     tBTM_BLE_ADV_CHNL_MAP channel_map;
477     tBTM_BLE_AFP    adv_filter_policy;
478     tBTM_BLE_ADV_TX_POWER tx_power;
479 }tBTM_BLE_ADV_PARAMS;
480 
481 typedef struct
482 {
483     UINT8   *p_sub_code; /* dynamic array to store sub code */
484     UINT8   *p_inst_id;  /* dynamic array to store instance id */
485     UINT8   pending_idx;
486     UINT8   next_idx;
487 }tBTM_BLE_MULTI_ADV_OPQ;
488 
489 typedef void (tBTM_BLE_MULTI_ADV_CBACK)(tBTM_BLE_MULTI_ADV_EVT evt, UINT8 inst_id,
490                 void *p_ref, tBTM_STATUS status);
491 
492 typedef struct
493 {
494     UINT8                       inst_id;
495     BOOLEAN                     in_use;
496     UINT8                       adv_evt;
497     BD_ADDR                     rpa;
498     TIMER_LIST_ENT              raddr_timer_ent;
499     tBTM_BLE_MULTI_ADV_CBACK    *p_cback;
500     void                        *p_ref;
501     UINT8                       index;
502 }tBTM_BLE_MULTI_ADV_INST;
503 
504 typedef struct
505 {
506     UINT8 inst_index_queue[BTM_BLE_MULTI_ADV_MAX];
507     int front;
508     int rear;
509 }tBTM_BLE_MULTI_ADV_INST_IDX_Q;
510 
511 typedef struct
512 {
513     tBTM_BLE_MULTI_ADV_INST *p_adv_inst; /* dynamic array to store adv instance */
514     tBTM_BLE_MULTI_ADV_OPQ  op_q;
515 }tBTM_BLE_MULTI_ADV_CB;
516 
517 typedef UINT8 tGATT_IF;
518 
519 typedef void (tBTM_BLE_SCAN_THRESHOLD_CBACK)(tBTM_BLE_REF_VALUE ref_value);
520 typedef void (tBTM_BLE_SCAN_REP_CBACK)(tBTM_BLE_REF_VALUE ref_value, UINT8 report_format,
521                                        UINT8 num_records, UINT16 total_len,
522                                        UINT8* p_rep_data, UINT8 status);
523 typedef void (tBTM_BLE_SCAN_SETUP_CBACK)(UINT8 evt, tBTM_BLE_REF_VALUE ref_value, UINT8 status);
524 
525 #ifndef BTM_BLE_BATCH_SCAN_MAX
526 #define BTM_BLE_BATCH_SCAN_MAX   5
527 #endif
528 
529 #ifndef BTM_BLE_BATCH_REP_MAIN_Q_SIZE
530 #define BTM_BLE_BATCH_REP_MAIN_Q_SIZE  2
531 #endif
532 
533 typedef enum
534 {
535     BTM_BLE_SCAN_INVALID_STATE=0,
536     BTM_BLE_SCAN_ENABLE_CALLED=1,
537     BTM_BLE_SCAN_ENABLED_STATE=2,
538     BTM_BLE_SCAN_DISABLE_CALLED=3,
539     BTM_BLE_SCAN_DISABLED_STATE=4
540 }tBTM_BLE_BATCH_SCAN_STATE;
541 
542 enum
543 {
544     BTM_BLE_DISCARD_OLD_ITEMS,
545     BTM_BLE_DISCARD_LOWER_RSSI_ITEMS
546 };
547 typedef UINT8 tBTM_BLE_DISCARD_RULE;
548 
549 typedef struct
550 {
551     UINT8   sub_code[BTM_BLE_BATCH_SCAN_MAX];
552     tBTM_BLE_BATCH_SCAN_STATE cur_state[BTM_BLE_BATCH_SCAN_MAX];
553     tBTM_BLE_REF_VALUE        ref_value[BTM_BLE_BATCH_SCAN_MAX];
554     UINT8   pending_idx;
555     UINT8   next_idx;
556 }tBTM_BLE_BATCH_SCAN_OPQ;
557 
558 typedef struct
559 {
560     UINT8   rep_mode[BTM_BLE_BATCH_REP_MAIN_Q_SIZE];
561     tBTM_BLE_REF_VALUE  ref_value[BTM_BLE_BATCH_REP_MAIN_Q_SIZE];
562     UINT8   num_records[BTM_BLE_BATCH_REP_MAIN_Q_SIZE];
563     UINT16  data_len[BTM_BLE_BATCH_REP_MAIN_Q_SIZE];
564     UINT8   *p_data[BTM_BLE_BATCH_REP_MAIN_Q_SIZE];
565     UINT8   pending_idx;
566     UINT8   next_idx;
567 }tBTM_BLE_BATCH_SCAN_REP_Q;
568 
569 typedef struct
570 {
571     tBTM_BLE_BATCH_SCAN_STATE      cur_state;
572     tBTM_BLE_BATCH_SCAN_MODE scan_mode;
573     UINT32                  scan_interval;
574     UINT32                  scan_window;
575     tBLE_ADDR_TYPE          addr_type;
576     tBTM_BLE_DISCARD_RULE   discard_rule;
577     tBTM_BLE_BATCH_SCAN_OPQ  op_q;
578     tBTM_BLE_BATCH_SCAN_REP_Q main_rep_q;
579     tBTM_BLE_SCAN_SETUP_CBACK     *p_setup_cback;
580     tBTM_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback;
581     tBTM_BLE_SCAN_REP_CBACK       *p_scan_rep_cback;
582     tBTM_BLE_REF_VALUE             ref_value;
583 }tBTM_BLE_BATCH_SCAN_CB;
584 
585 /* filter selection bit index  */
586 #define BTM_BLE_PF_ADDR_FILTER          0
587 #define BTM_BLE_PF_SRVC_DATA            1
588 #define BTM_BLE_PF_SRVC_UUID            2
589 #define BTM_BLE_PF_SRVC_SOL_UUID        3
590 #define BTM_BLE_PF_LOCAL_NAME           4
591 #define BTM_BLE_PF_MANU_DATA            5
592 #define BTM_BLE_PF_SRVC_DATA_PATTERN    6
593 #define BTM_BLE_PF_TYPE_ALL             7  /* when passed in payload filter type all, only clear action is applicable */
594 #define BTM_BLE_PF_TYPE_MAX             8
595 
596 /* max number of filter spot for different filter type */
597 #ifndef BTM_BLE_MAX_UUID_FILTER
598 #define BTM_BLE_MAX_UUID_FILTER     8
599 #endif
600 #ifndef BTM_BLE_MAX_ADDR_FILTER
601 #define BTM_BLE_MAX_ADDR_FILTER     8
602 #endif
603 #ifndef BTM_BLE_PF_STR_COND_MAX
604 #define BTM_BLE_PF_STR_COND_MAX     4   /* apply to manu data , or local name */
605 #endif
606 #ifndef BTM_BLE_PF_STR_LEN_MAX
607 #define BTM_BLE_PF_STR_LEN_MAX      29  /* match for first 29 bytes */
608 #endif
609 
610 typedef UINT8   tBTM_BLE_PF_COND_TYPE;
611 
612 #define BTM_BLE_PF_LOGIC_OR              0
613 #define BTM_BLE_PF_LOGIC_AND             1
614 typedef UINT8 tBTM_BLE_PF_LOGIC_TYPE;
615 
616 #define BTM_BLE_PF_ENABLE       1
617 #define BTM_BLE_PF_CONFIG       2
618 typedef UINT8 tBTM_BLE_PF_ACTION;
619 
620 typedef UINT8 tBTM_BLE_PF_FILT_INDEX;
621 
622 typedef UINT8 tBTM_BLE_PF_AVBL_SPACE;
623 
624 #define BTM_BLE_PF_BRDCAST_ADDR_FILT  1
625 #define BTM_BLE_PF_SERV_DATA_CHG_FILT 2
626 #define BTM_BLE_PF_SERV_UUID          4
627 #define BTM_BLE_PF_SERV_SOLC_UUID     8
628 #define BTM_BLE_PF_LOC_NAME_CHECK    16
629 #define BTM_BLE_PF_MANUF_NAME_CHECK  32
630 #define BTM_BLE_PF_SERV_DATA_CHECK   64
631 typedef UINT16 tBTM_BLE_PF_FEAT_SEL;
632 
633 #define BTM_BLE_PF_LIST_LOGIC_OR   1
634 #define BTM_BLE_PF_LIST_LOGIC_AND  2
635 typedef UINT16 tBTM_BLE_PF_LIST_LOGIC_TYPE;
636 
637 #define BTM_BLE_PF_FILT_LOGIC_OR   0
638 #define BTM_BLE_PF_FILT_LOGIC_AND  1
639 typedef UINT16 tBTM_BLE_PF_FILT_LOGIC_TYPE;
640 
641 typedef UINT8  tBTM_BLE_PF_RSSI_THRESHOLD;
642 typedef UINT8  tBTM_BLE_PF_DELIVERY_MODE;
643 typedef UINT16 tBTM_BLE_PF_TIMEOUT;
644 typedef UINT8  tBTM_BLE_PF_TIMEOUT_CNT;
645 typedef UINT16 tBTM_BLE_PF_ADV_TRACK_ENTRIES;
646 
647 typedef struct
648 {
649     tBTM_BLE_PF_FEAT_SEL feat_seln;
650     tBTM_BLE_PF_LIST_LOGIC_TYPE logic_type;
651     tBTM_BLE_PF_FILT_LOGIC_TYPE filt_logic_type;
652     tBTM_BLE_PF_RSSI_THRESHOLD  rssi_high_thres;
653     tBTM_BLE_PF_RSSI_THRESHOLD  rssi_low_thres;
654     tBTM_BLE_PF_DELIVERY_MODE dely_mode;
655     tBTM_BLE_PF_TIMEOUT found_timeout;
656     tBTM_BLE_PF_TIMEOUT lost_timeout;
657     tBTM_BLE_PF_TIMEOUT_CNT found_timeout_cnt;
658     tBTM_BLE_PF_ADV_TRACK_ENTRIES num_of_tracking_entries;
659 }tBTM_BLE_PF_FILT_PARAMS;
660 
661 enum
662 {
663     BTM_BLE_SCAN_COND_ADD,
664     BTM_BLE_SCAN_COND_DELETE,
665     BTM_BLE_SCAN_COND_CLEAR = 2
666 };
667 typedef UINT8 tBTM_BLE_SCAN_COND_OP;
668 
669 enum
670 {
671     BTM_BLE_FILT_ENABLE_DISABLE = 1,
672     BTM_BLE_FILT_CFG            = 2,
673     BTM_BLE_FILT_ADV_PARAM      = 3
674 };
675 
676 typedef UINT8 tBTM_BLE_FILT_CB_EVT;
677 
678 /* BLE adv payload filtering config complete callback */
679 typedef void (tBTM_BLE_PF_CFG_CBACK)(tBTM_BLE_PF_ACTION action, tBTM_BLE_SCAN_COND_OP cfg_op,
680                                      tBTM_BLE_PF_AVBL_SPACE avbl_space, tBTM_STATUS status,
681                                      tBTM_BLE_REF_VALUE ref_value);
682 
683 typedef void (tBTM_BLE_PF_CMPL_CBACK) (tBTM_BLE_PF_CFG_CBACK);
684 
685 /* BLE adv payload filtering status setup complete callback */
686 typedef void (tBTM_BLE_PF_STATUS_CBACK) (UINT8 action, tBTM_STATUS status,
687                                         tBTM_BLE_REF_VALUE ref_value);
688 
689 /* BLE adv payload filtering param setup complete callback */
690 typedef void (tBTM_BLE_PF_PARAM_CBACK) (tBTM_BLE_PF_ACTION action_type,
691                                         tBTM_BLE_PF_AVBL_SPACE avbl_space,
692                                         tBTM_BLE_REF_VALUE ref_value, tBTM_STATUS status);
693 
694 typedef union
695 {
696       UINT16              uuid16_mask;
697       UINT32              uuid32_mask;
698       UINT8               uuid128_mask[LEN_UUID_128];
699 }tBTM_BLE_PF_COND_MASK;
700 
701 typedef struct
702 {
703     tBLE_BD_ADDR            *p_target_addr;     /* target address, if NULL, generic UUID filter */
704     tBT_UUID                uuid;           /* UUID condition */
705     tBTM_BLE_PF_LOGIC_TYPE  cond_logic;    /* AND/OR */
706     tBTM_BLE_PF_COND_MASK   *p_uuid_mask;           /* UUID mask */
707 }tBTM_BLE_PF_UUID_COND;
708 
709 typedef struct
710 {
711     UINT8                   data_len;       /* <= 20 bytes */
712     UINT8                   *p_data;
713 }tBTM_BLE_PF_LOCAL_NAME_COND;
714 
715 typedef struct
716 {
717     UINT16                  company_id;     /* company ID */
718     UINT8                   data_len;       /* <= 20 bytes */
719     UINT8                   *p_pattern;
720     UINT16                  company_id_mask; /* UUID value mask */
721     UINT8                   *p_pattern_mask; /* Manufacturer data matching mask,
722                                                 same length as data pattern,
723                                                 set to all 0xff, match exact data */
724 }tBTM_BLE_PF_MANU_COND;
725 
726 typedef struct
727 {
728     UINT16                  uuid;     /* service ID */
729     UINT8                   data_len;       /* <= 20 bytes */
730     UINT8                   *p_pattern;
731     UINT8                   *p_pattern_mask; /* Service data matching mask, same length as data pattern,
732                                                 set to all 0xff, match exact data */
733 }tBTM_BLE_PF_SRVC_PATTERN_COND;
734 
735 
736 typedef union
737 {
738     tBLE_BD_ADDR                            target_addr;
739     tBTM_BLE_PF_LOCAL_NAME_COND             local_name; /* lcoal name filtering */
740     tBTM_BLE_PF_MANU_COND                   manu_data;  /* manufactuer data filtering */
741     tBTM_BLE_PF_UUID_COND                   srvc_uuid;  /* service UUID filtering */
742     tBTM_BLE_PF_UUID_COND                   solicitate_uuid;   /* solicitated service UUID filtering */
743     tBTM_BLE_PF_SRVC_PATTERN_COND           srvc_data;      /* service data pattern */
744 }tBTM_BLE_PF_COND_PARAM;
745 
746 typedef struct
747 {
748     UINT8   action_ocf[BTM_BLE_PF_TYPE_MAX];
749     tBTM_BLE_REF_VALUE  ref_value[BTM_BLE_PF_TYPE_MAX];
750     tBTM_BLE_PF_PARAM_CBACK  *p_filt_param_cback[BTM_BLE_PF_TYPE_MAX];
751     tBTM_BLE_PF_CFG_CBACK *p_scan_cfg_cback[BTM_BLE_PF_TYPE_MAX];
752     UINT8   cb_evt[BTM_BLE_PF_TYPE_MAX];
753     UINT8   pending_idx;
754     UINT8   next_idx;
755 }tBTM_BLE_ADV_FILTER_ADV_OPQ;
756 
757 #define BTM_BLE_MAX_FILTER_COUNTER  (BTM_BLE_MAX_ADDR_FILTER + 1) /* per device filter + one generic filter indexed by 0 */
758 
759 #ifndef BTM_CS_IRK_LIST_MAX
760 #define BTM_CS_IRK_LIST_MAX 0x20
761 #endif
762 
763 typedef struct
764 {
765     BOOLEAN    in_use;
766     BD_ADDR    bd_addr;
767     UINT8      pf_counter[BTM_BLE_PF_TYPE_MAX]; /* number of filter indexed by tBTM_BLE_PF_COND_TYPE */
768 }tBTM_BLE_PF_COUNT;
769 
770 typedef struct
771 {
772     BOOLEAN             enable;
773     UINT8               op_type;
774     tBTM_BLE_PF_COUNT   *p_addr_filter_count; /* per BDA filter array */
775     tBLE_BD_ADDR        cur_filter_target;
776     tBTM_BLE_PF_STATUS_CBACK *p_filt_stat_cback;
777     tBTM_BLE_ADV_FILTER_ADV_OPQ  op_q;
778 }tBTM_BLE_ADV_FILTER_CB;
779 
780 /* Sub codes */
781 #define BTM_BLE_META_PF_ENABLE          0x00
782 #define BTM_BLE_META_PF_FEAT_SEL        0x01
783 #define BTM_BLE_META_PF_ADDR            0x02
784 #define BTM_BLE_META_PF_UUID            0x03
785 #define BTM_BLE_META_PF_SOL_UUID        0x04
786 #define BTM_BLE_META_PF_LOCAL_NAME      0x05
787 #define BTM_BLE_META_PF_MANU_DATA       0x06
788 #define BTM_BLE_META_PF_SRVC_DATA       0x07
789 #define BTM_BLE_META_PF_ALL             0x08
790 
791 typedef UINT8 BTM_BLE_ADV_STATE;
792 typedef UINT8 BTM_BLE_ADV_INFO_PRESENT;
793 typedef UINT8 BTM_BLE_RSSI_VALUE;
794 typedef UINT16 BTM_BLE_ADV_INFO_TIMESTAMP;
795 
796 /* These are the fields returned in each device adv packet.  It
797 ** is returned in the results callback if registered.
798 */
799 typedef struct
800 {
801     UINT8               conn_mode;
802     tBTM_BLE_AD_MASK    ad_mask;        /* mask of the valid adv data field */
803     UINT8               flag;
804     UINT8               tx_power_level;
805     UINT8               remote_name_len;
806     UINT8               *p_remote_name;
807     tBTM_BLE_SERVICE    service;
808 } tBTM_BLE_INQ_DATA;
809 
810 enum
811 {
812     BTM_BLE_CONN_NONE,
813     BTM_BLE_CONN_AUTO,
814     BTM_BLE_CONN_SELECTIVE
815 };
816 typedef UINT8   tBTM_BLE_CONN_TYPE;
817 
818 #define ADV_INFO_PRESENT        0x00
819 #define NO_ADV_INFO_PRESENT     0x01
820 
821 typedef btgatt_track_adv_info_t tBTM_BLE_TRACK_ADV_DATA;
822 
823 typedef void (tBTM_BLE_TRACK_ADV_CBACK)(tBTM_BLE_TRACK_ADV_DATA *p_track_adv_data);
824 
825 typedef UINT8 tBTM_BLE_TRACK_ADV_EVT;
826 
827 typedef struct
828 {
829     tBTM_BLE_REF_VALUE             ref_value;
830     tBTM_BLE_TRACK_ADV_CBACK *p_track_cback;
831 }tBTM_BLE_ADV_TRACK_CB;
832 
833 enum
834 {
835     BTM_BLE_TRACK_ADV_ADD,
836     BTM_BLE_TRACK_ADV_REMOVE
837 };
838 
839 typedef UINT8 tBTM_BLE_TRACK_ADV_ACTION;
840 
841 #define BTM_BLE_MULTI_ADV_INVALID   0
842 
843 #define BTM_BLE_BATCH_SCAN_ENABLE_EVT     1
844 #define BTM_BLE_BATCH_SCAN_CFG_STRG_EVT   2
845 #define BTM_BLE_BATCH_SCAN_READ_REPTS_EVT 3
846 #define BTM_BLE_BATCH_SCAN_THR_EVT        4
847 #define BTM_BLE_BATCH_SCAN_PARAM_EVT      5
848 #define BTM_BLE_BATCH_SCAN_DISABLE_EVT    6
849 
850 typedef UINT8 tBTM_BLE_BATCH_SCAN_EVT;
851 
852 typedef UINT32 tBTM_BLE_TX_TIME_MS;
853 typedef UINT32 tBTM_BLE_RX_TIME_MS;
854 typedef UINT32 tBTM_BLE_IDLE_TIME_MS;
855 typedef UINT32 tBTM_BLE_ENERGY_USED;
856 
857 typedef void (tBTM_BLE_ENERGY_INFO_CBACK)(tBTM_BLE_TX_TIME_MS tx_time, tBTM_BLE_RX_TIME_MS rx_time,
858                                           tBTM_BLE_IDLE_TIME_MS idle_time,
859                                           tBTM_BLE_ENERGY_USED  energy_used,
860                                           tBTM_STATUS status);
861 
862 typedef struct
863 {
864     tBTM_BLE_ENERGY_INFO_CBACK *p_ener_cback;
865 }tBTM_BLE_ENERGY_INFO_CB;
866 
867 typedef BOOLEAN (tBTM_BLE_SEL_CBACK)(BD_ADDR random_bda,     UINT8 *p_remote_name);
868 typedef void (tBTM_BLE_CTRL_FEATURES_CBACK)(tBTM_STATUS status);
869 
870 /* callback function for SMP signing algorithm, signed data in little endian order with tlen bits long */
871 typedef void (tBTM_BLE_SIGN_CBACK)(void *p_ref_data, UINT8 *p_signing_data);
872 typedef void (tBTM_BLE_VERIFY_CBACK)(void *p_ref_data, BOOLEAN match);
873 /* random address set complete callback */
874 typedef void (tBTM_BLE_RANDOM_SET_CBACK) (BD_ADDR random_bda);
875 
876 typedef void (tBTM_BLE_SCAN_REQ_CBACK)(BD_ADDR remote_bda, tBLE_ADDR_TYPE addr_type, UINT8 adv_evt);
877 typedef void (*tBLE_SCAN_PARAM_SETUP_CBACK)(tGATT_IF client_if, tBTM_STATUS status);
878 
879 tBTM_BLE_SCAN_SETUP_CBACK bta_ble_scan_setup_cb;
880 
881 /*****************************************************************************
882 **  EXTERNAL FUNCTION DECLARATIONS
883 *****************************************************************************/
884 #ifdef __cplusplus
885 extern "C" {
886 #endif
887 /*******************************************************************************
888 **
889 ** Function         BTM_SecAddBleDevice
890 **
891 ** Description      Add/modify device.  This function will be normally called
892 **                  during host startup to restore all required information
893 **                  for a LE device stored in the NVRAM.
894 **
895 ** Parameters:      bd_addr          - BD address of the peer
896 **                  bd_name          - Name of the peer device.  NULL if unknown.
897 **                  dev_type         - Remote device's device type.
898 **                  addr_type        - LE device address type.
899 **
900 ** Returns          TRUE if added OK, else FALSE
901 **
902 *******************************************************************************/
903 extern BOOLEAN BTM_SecAddBleDevice (BD_ADDR bd_addr, BD_NAME bd_name,
904                                            tBT_DEVICE_TYPE dev_type, tBLE_ADDR_TYPE addr_type);
905 
906 /*******************************************************************************
907 **
908 ** Function         BTM_SecAddBleKey
909 **
910 ** Description      Add/modify LE device information.  This function will be
911 **                  normally called during host startup to restore all required
912 **                  information stored in the NVRAM.
913 **
914 ** Parameters:      bd_addr          - BD address of the peer
915 **                  p_le_key         - LE key values.
916 **                  key_type         - LE SMP key type.
917 *
918 ** Returns          TRUE if added OK, else FALSE
919 **
920 *******************************************************************************/
921 extern BOOLEAN BTM_SecAddBleKey (BD_ADDR bd_addr, tBTM_LE_KEY_VALUE *p_le_key,
922                                  tBTM_LE_KEY_TYPE key_type);
923 
924 /*******************************************************************************
925 **
926 ** Function         BTM_BleSetAdvParams
927 **
928 ** Description      This function is called to set advertising parameters.
929 **
930 ** Parameters:       None.
931 **
932 ** Returns          void
933 **
934 *******************************************************************************/
935 extern tBTM_STATUS BTM_BleSetAdvParams(UINT16 adv_int_min, UINT16 adv_int_max,
936                                        tBLE_BD_ADDR *p_dir_bda, tBTM_BLE_ADV_CHNL_MAP chnl_map);
937 
938 /*******************************************************************************
939 **
940 ** Function         BTM_BleWriteAdvData
941 **
942 ** Description      This function is called to write advertising data.
943 **
944 ** Parameters:       None.
945 **
946 ** Returns          void
947 **
948 *******************************************************************************/
949 extern tBTM_STATUS BTM_BleWriteAdvData(tBTM_BLE_AD_MASK  data_mask,
950                                        tBTM_BLE_ADV_DATA *p_data);
951 
952 /*******************************************************************************
953 **
954 ** Function         BTM_BleSetAdvParams
955 **
956 ** Description      This function is called to set advertising parameters.
957 **
958 ** Parameters       adv_int_min: minimum advertising interval
959 **                  adv_int_max: maximum advertising interval
960 **                  p_dir_bda: connectable direct initiator's LE device address
961 **                  chnl_map: advertising channel map.
962 **
963 ** Returns          void
964 **
965 *******************************************************************************/
966 extern void BTM_BleReadAdvParams (UINT16 *adv_int_min, UINT16 *adv_int_max,
967                                   tBLE_BD_ADDR *p_dir_bda, tBTM_BLE_ADV_CHNL_MAP *p_chnl_map);
968 
969 /*******************************************************************************
970 **
971 ** Function         BTM_BleObtainVendorCapabilities
972 **
973 ** Description      This function is called to obatin vendor capabilties
974 **
975 ** Parameters       p_cmn_vsc_cb - Returns the vednor capabilities
976 **
977 ** Returns          void
978 **
979 *******************************************************************************/
980 extern void BTM_BleObtainVendorCapabilities(tBTM_BLE_VSC_CB *p_cmn_vsc_cb);
981 
982 /*******************************************************************************
983 **
984 ** Function         BTM_BleSetScanParams
985 **
986 ** Description      This function is called to set Scan parameters.
987 **
988 ** Parameters       client_if - Client IF value
989 **                  scan_interval - Scan interval
990 **                  scan_window - Scan window
991 **                  scan_type - Scan type
992 **                  scan_setup_status_cback - Scan setup status callback
993 **
994 ** Returns          void
995 **
996 *******************************************************************************/
997 extern void BTM_BleSetScanParams(tGATT_IF client_if, UINT32 scan_interval,
998                                  UINT32 scan_window, tBLE_SCAN_MODE scan_type,
999                                  tBLE_SCAN_PARAM_SETUP_CBACK scan_setup_status_cback);
1000 
1001 /*******************************************************************************
1002 **
1003 ** Function         BTM_BleGetVendorCapabilities
1004 **
1005 ** Description      This function reads local LE features
1006 **
1007 ** Parameters       p_cmn_vsc_cb : Locala LE capability structure
1008 **
1009 ** Returns          void
1010 **
1011 *******************************************************************************/
1012 extern void BTM_BleGetVendorCapabilities(tBTM_BLE_VSC_CB *p_cmn_vsc_cb);
1013 /*******************************************************************************
1014 **
1015 ** Function         BTM_BleSetStorageConfig
1016 **
1017 ** Description      This function is called to setup storage configuration and setup callbacks.
1018 **
1019 ** Parameters       UINT8 batch_scan_full_max -Batch scan full maximum
1020                     UINT8 batch_scan_trunc_max - Batch scan truncated value maximum
1021                     UINT8 batch_scan_notify_threshold - Threshold value
1022                     tBTM_BLE_SCAN_SETUP_CBACK *p_setup_cback - Setup callback
1023                     tBTM_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback -Threshold callback
1024                     void *p_ref - Reference value
1025 **
1026 ** Returns          tBTM_STATUS
1027 **
1028 *******************************************************************************/
1029 extern tBTM_STATUS BTM_BleSetStorageConfig(UINT8 batch_scan_full_max,
1030                                         UINT8 batch_scan_trunc_max,
1031                                         UINT8 batch_scan_notify_threshold,
1032                                         tBTM_BLE_SCAN_SETUP_CBACK *p_setup_cback,
1033                                         tBTM_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback,
1034                                         tBTM_BLE_SCAN_REP_CBACK* p_cback,
1035                                         tBTM_BLE_REF_VALUE ref_value);
1036 
1037 /*******************************************************************************
1038 **
1039 ** Function         BTM_BleEnableBatchScan
1040 **
1041 ** Description      This function is called to enable batch scan
1042 **
1043 ** Parameters       tBTM_BLE_BATCH_SCAN_MODE scan_mode - Batch scan mode
1044                     UINT32 scan_interval -Scan interval
1045                     UINT32 scan_window - Scan window value
1046                     tBLE_ADDR_TYPE addr_type - Address type
1047                     tBTM_BLE_DISCARD_RULE discard_rule - Data discard rules
1048 **
1049 ** Returns          tBTM_STATUS
1050 **
1051 *******************************************************************************/
1052 extern tBTM_STATUS BTM_BleEnableBatchScan(tBTM_BLE_BATCH_SCAN_MODE scan_mode,
1053                                         UINT32 scan_interval, UINT32 scan_window,
1054                                         tBTM_BLE_DISCARD_RULE discard_rule,
1055                                         tBLE_ADDR_TYPE addr_type,
1056                                         tBTM_BLE_REF_VALUE ref_value);
1057 
1058 /*******************************************************************************
1059 **
1060 ** Function         BTM_BleDisableBatchScan
1061 **
1062 ** Description      This function is called to disable batch scanning
1063 **
1064 ** Parameters       void
1065 **
1066 ** Returns          void
1067 **
1068 *******************************************************************************/
1069 extern tBTM_STATUS BTM_BleDisableBatchScan(tBTM_BLE_REF_VALUE ref_value);
1070 
1071 /*******************************************************************************
1072 **
1073 ** Function         BTM_BleReadScanReports
1074 **
1075 ** Description      This function is called to read batch scan reports
1076 **
1077 ** Parameters       tBLE_SCAN_MODE scan_mode - Scan mode report to be read out
1078                     tBTM_BLE_SCAN_REP_CBACK* p_cback - Reports callback
1079 **
1080 ** Returns          tBTM_STATUS
1081 **
1082 *******************************************************************************/
1083 extern tBTM_STATUS BTM_BleReadScanReports(tBLE_SCAN_MODE scan_mode,
1084                                                   tBTM_BLE_REF_VALUE ref_value);
1085 
1086 /*******************************************************************************
1087 **
1088 ** Function         BTM_BleTrackAdvertiser
1089 **
1090 ** Description      This function is called to read batch scan reports
1091 **
1092 ** Parameters       p_track_cback - Tracking callback
1093 **                  ref_value - Reference value
1094 **
1095 ** Returns          tBTM_STATUS
1096 **
1097 *******************************************************************************/
1098 extern tBTM_STATUS BTM_BleTrackAdvertiser(tBTM_BLE_TRACK_ADV_CBACK *p_track_cback,
1099                                                   tBTM_BLE_REF_VALUE ref_value);
1100 
1101 /*******************************************************************************
1102 **
1103 ** Function         BTM_BleWriteScanRsp
1104 **
1105 ** Description      This function is called to write LE scan response.
1106 **
1107 ** Parameters:      p_scan_rsp: scan response.
1108 **
1109 ** Returns          status
1110 **
1111 *******************************************************************************/
1112 extern tBTM_STATUS BTM_BleWriteScanRsp(tBTM_BLE_AD_MASK data_mask,
1113                                        tBTM_BLE_ADV_DATA *p_data);
1114 
1115 /*******************************************************************************
1116 **
1117 ** Function         BTM_BleObserve
1118 **
1119 ** Description      This procedure keep the device listening for advertising
1120 **                  events from a broadcast device.
1121 **
1122 ** Parameters       start: start or stop observe.
1123 **
1124 ** Returns          void
1125 **
1126 *******************************************************************************/
1127 extern tBTM_STATUS BTM_BleObserve(BOOLEAN start, UINT8 duration,
1128                                   tBTM_INQ_RESULTS_CB *p_results_cb, tBTM_CMPL_CB *p_cmpl_cb);
1129 
1130 
1131 /*******************************************************************************
1132 **
1133 ** Function         BTM_GetDeviceIDRoot
1134 **
1135 ** Description      This function is called to read the local device identity
1136 **                  root.
1137 **
1138 ** Returns          void
1139 **                  the local device ER is copied into er
1140 **
1141 *******************************************************************************/
1142 extern void BTM_GetDeviceIDRoot (BT_OCTET16 ir);
1143 
1144 /*******************************************************************************
1145 **
1146 ** Function         BTM_GetDeviceEncRoot
1147 **
1148 ** Description      This function is called to read the local device encryption
1149 **                  root.
1150 **
1151 ** Returns          void
1152 **                  the local device ER is copied into er
1153 **
1154 *******************************************************************************/
1155 extern void BTM_GetDeviceEncRoot (BT_OCTET16 er);
1156 
1157 /*******************************************************************************
1158 **
1159 ** Function         BTM_GetDeviceDHK
1160 **
1161 ** Description      This function is called to read the local device DHK.
1162 **
1163 ** Returns          void
1164 **                  the local device DHK is copied into dhk
1165 **
1166 *******************************************************************************/
1167 extern void BTM_GetDeviceDHK (BT_OCTET16 dhk);
1168 
1169 /*******************************************************************************
1170 **
1171 ** Function         BTM_SecurityGrant
1172 **
1173 ** Description      This function is called to grant security process.
1174 **
1175 ** Parameters       bd_addr - peer device bd address.
1176 **                  res     - result of the operation BTM_SUCCESS if success.
1177 **                            Otherwise, BTM_REPEATED_ATTEMPTS is too many attempts.
1178 **
1179 ** Returns          None
1180 **
1181 *******************************************************************************/
1182 extern void BTM_SecurityGrant(BD_ADDR bd_addr, UINT8 res);
1183 
1184 /*******************************************************************************
1185 **
1186 ** Function         BTM_BlePasskeyReply
1187 **
1188 ** Description      This function is called after Security Manager submitted
1189 **                  passkey request to the application.
1190 **
1191 ** Parameters:      bd_addr      - Address of the device for which passkey was requested
1192 **                  res          - result of the operation SMP_SUCCESS if success
1193 **                  passkey - numeric value in the range of
1194 **                  BTM_MIN_PASSKEY_VAL(0) - BTM_MAX_PASSKEY_VAL(999999(0xF423F)).
1195 **
1196 *******************************************************************************/
1197 extern void BTM_BlePasskeyReply (BD_ADDR bd_addr, UINT8 res, UINT32 passkey);
1198 
1199 /*******************************************************************************
1200 **
1201 ** Function         BTM_BleConfirmReply
1202 **
1203 ** Description      This function is called after Security Manager submitted
1204 **                  numeric comparison request to the application.
1205 **
1206 ** Parameters:      bd_addr      - Address of the device with which numeric
1207 **                                 comparison was requested
1208 **                  res          - comparison result BTM_SUCCESS if success
1209 **
1210 *******************************************************************************/
1211 extern void BTM_BleConfirmReply (BD_ADDR bd_addr, UINT8 res);
1212 
1213 /*******************************************************************************
1214 **
1215 ** Function         BTM_LeOobDataReply
1216 **
1217 ** Description      This function is called to provide the OOB data for
1218 **                  SMP in response to BTM_LE_OOB_REQ_EVT
1219 **
1220 ** Parameters:      bd_addr     - Address of the peer device
1221 **                  res         - result of the operation SMP_SUCCESS if success
1222 **                  p_data      - simple pairing Randomizer  C.
1223 **
1224 *******************************************************************************/
1225 extern void BTM_BleOobDataReply(BD_ADDR bd_addr, UINT8 res, UINT8 len, UINT8 *p_data);
1226 
1227 
1228 /*******************************************************************************
1229 **
1230 ** Function         BTM_BleDataSignature
1231 **
1232 ** Description      This function is called to sign the data using AES128 CMAC
1233 **                  algorith.
1234 **
1235 ** Parameter        bd_addr: target device the data to be signed for.
1236 **                  p_text: singing data
1237 **                  len: length of the signing data
1238 **                  signature: output parameter where data signature is going to
1239 **                             be stored.
1240 **
1241 ** Returns          TRUE if signing sucessul, otherwise FALSE.
1242 **
1243 *******************************************************************************/
1244 extern BOOLEAN BTM_BleDataSignature (BD_ADDR bd_addr, UINT8 *p_text, UINT16 len,
1245                                      BLE_SIGNATURE signature);
1246 
1247 /*******************************************************************************
1248 **
1249 ** Function         BTM_BleVerifySignature
1250 **
1251 ** Description      This function is called to verify the data signature
1252 **
1253 ** Parameter        bd_addr: target device the data to be signed for.
1254 **                  p_orig:  original data before signature.
1255 **                  len: length of the signing data
1256 **                  counter: counter used when doing data signing
1257 **                  p_comp: signature to be compared against.
1258 
1259 ** Returns          TRUE if signature verified correctly; otherwise FALSE.
1260 **
1261 *******************************************************************************/
1262 extern BOOLEAN BTM_BleVerifySignature (BD_ADDR bd_addr, UINT8 *p_orig,
1263                                        UINT16 len, UINT32 counter,
1264                                        UINT8 *p_comp);
1265 
1266 /*******************************************************************************
1267 **
1268 ** Function         BTM_ReadConnectionAddr
1269 **
1270 ** Description      This function is called to set the local device random address
1271 **                  .
1272 **
1273 ** Returns          void
1274 **
1275 *******************************************************************************/
1276 extern void BTM_ReadConnectionAddr (BD_ADDR remote_bda, BD_ADDR local_conn_addr,
1277                                             tBLE_ADDR_TYPE *p_addr_type);
1278 
1279 
1280 
1281 /*******************************************************************************
1282 **
1283 ** Function         BTM_ReadRemoteConnectionAddr
1284 **
1285 ** Description      This function is read the remote device address currently used
1286 **                  .
1287 **
1288 ** Returns          void
1289 **
1290 *******************************************************************************/
1291 extern BOOLEAN BTM_ReadRemoteConnectionAddr(BD_ADDR pseudo_addr,
1292                                                     BD_ADDR conn_addr,
1293                                                     tBLE_ADDR_TYPE *p_addr_type);
1294 
1295 /*******************************************************************************
1296 **
1297 ** Function         BTM_BleLoadLocalKeys
1298 **
1299 ** Description      Local local identity key, encryption root or sign counter.
1300 **
1301 ** Parameters:      key_type: type of key, can be BTM_BLE_KEY_TYPE_ID, BTM_BLE_KEY_TYPE_ER
1302 **                            or BTM_BLE_KEY_TYPE_COUNTER.
1303 **                  p_key: pointer to the key.
1304 *
1305 ** Returns          non2.
1306 **
1307 *******************************************************************************/
1308 extern void BTM_BleLoadLocalKeys(UINT8 key_type, tBTM_BLE_LOCAL_KEYS *p_key);
1309 
1310 
1311 /*******************************************************************************
1312 **
1313 ** Function         BTM_BleSetBgConnType
1314 **
1315 ** Description      This function is called to set BLE background connection
1316 **                  procedure type. It can be auto connection, or selective connection.
1317 **
1318 ** Parameters       conn_type: it can be auto connection, or selective connection.
1319 **                  p_select_cback: callback function when selective connection procedure
1320 **                              is being used.
1321 **
1322 ** Returns          void
1323 **
1324 *******************************************************************************/
1325 extern BOOLEAN BTM_BleSetBgConnType(tBTM_BLE_CONN_TYPE   conn_type,
1326                                     tBTM_BLE_SEL_CBACK   *p_select_cback);
1327 
1328 /*******************************************************************************
1329 **
1330 ** Function         BTM_BleUpdateBgConnDev
1331 **
1332 ** Description      This function is called to add or remove a device into/from
1333 **                  background connection procedure. The background connection
1334 *                   procedure is decided by the background connection type, it can be
1335 *                   auto connection, or selective connection.
1336 **
1337 ** Parameters       add_remove: TRUE to add; FALSE to remove.
1338 **                  remote_bda: device address to add/remove.
1339 **
1340 ** Returns          void
1341 **
1342 *******************************************************************************/
1343 extern BOOLEAN BTM_BleUpdateBgConnDev(BOOLEAN add_remove, BD_ADDR   remote_bda);
1344 
1345 /*******************************************************************************
1346 **
1347 ** Function         BTM_BleClearBgConnDev
1348 **
1349 ** Description      This function is called to clear the whitelist,
1350 **                  end any pending whitelist connections,
1351 *                   and reset the local bg device list.
1352 **
1353 ** Parameters       void
1354 **
1355 ** Returns          void
1356 **
1357 *******************************************************************************/
1358 extern void BTM_BleClearBgConnDev(void);
1359 
1360 /********************************************************
1361 **
1362 ** Function         BTM_BleSetPrefConnParams
1363 **
1364 ** Description      Set a peripheral's preferred connection parameters. When
1365 **                  any of the value does not want to be updated while others
1366 **                  do, use BTM_BLE_CONN_PARAM_UNDEF for the ones want to
1367 **                  leave untouched.
1368 **
1369 ** Parameters:      bd_addr          - BD address of the peripheral
1370 **                  min_conn_int     - minimum preferred connection interval
1371 **                  max_conn_int     - maximum preferred connection interval
1372 **                  slave_latency    - preferred slave latency
1373 **                  supervision_tout - preferred supervision timeout
1374 **
1375 ** Returns          void
1376 **
1377 *******************************************************************************/
1378 extern  void BTM_BleSetPrefConnParams (BD_ADDR bd_addr,
1379                                                UINT16 min_conn_int,  UINT16 max_conn_int,
1380                                                UINT16 slave_latency, UINT16 supervision_tout);
1381 
1382 /******************************************************************************
1383 **
1384 ** Function         BTM_BleSetConnScanParams
1385 **
1386 ** Description      Set scan parameters used in BLE connection request
1387 **
1388 ** Parameters:      scan_interval    - scan interval
1389 **                  scan_window      - scan window
1390 **
1391 ** Returns          void
1392 **
1393 *******************************************************************************/
1394 extern  void BTM_BleSetConnScanParams (UINT32 scan_interval, UINT32 scan_window);
1395 
1396 /******************************************************************************
1397 **
1398 ** Function         BTM_BleReadControllerFeatures
1399 **
1400 ** Description      Reads BLE specific controller features
1401 **
1402 ** Parameters:      tBTM_BLE_CTRL_FEATURES_CBACK : Callback to notify when features are read
1403 **
1404 ** Returns          void
1405 **
1406 *******************************************************************************/
1407 extern void BTM_BleReadControllerFeatures(tBTM_BLE_CTRL_FEATURES_CBACK  *p_vsc_cback);
1408 
1409 /*******************************************************************************
1410 **
1411 ** Function         BTM_CheckAdvData
1412 **
1413 ** Description      This function is called to get ADV data for a specific type.
1414 **
1415 ** Parameters       p_adv - pointer of ADV data
1416 **                  type   - finding ADV data type
1417 **                  p_length - return the length of ADV data not including type
1418 **
1419 ** Returns          pointer of ADV data
1420 **
1421 *******************************************************************************/
1422 extern  UINT8 *BTM_CheckAdvData( UINT8 *p_adv, UINT8 type, UINT8 *p_length);
1423 
1424 /*******************************************************************************
1425 **
1426 ** Function         BTM__BLEReadDiscoverability
1427 **
1428 ** Description      This function is called to read the current LE discoverability
1429 **                  mode of the device.
1430 **
1431 ** Returns          BTM_BLE_NON_DISCOVERABLE ,BTM_BLE_LIMITED_DISCOVERABLE or
1432 **                     BTM_BLE_GENRAL_DISCOVERABLE
1433 **
1434 *******************************************************************************/
1435 UINT16 BTM_BleReadDiscoverability();
1436 
1437 /*******************************************************************************
1438 **
1439 ** Function         BTM__BLEReadConnectability
1440 **
1441 ** Description      This function is called to read the current LE connectibility
1442 **                  mode of the device.
1443 **
1444 ** Returns          BTM_BLE_NON_CONNECTABLE or BTM_BLE_CONNECTABLE
1445 **
1446 *******************************************************************************/
1447 extern UINT16 BTM_BleReadConnectability ();
1448 
1449 /*******************************************************************************
1450 **
1451 ** Function         BTM_ReadDevInfo
1452 **
1453 ** Description      This function is called to read the device/address type
1454 **                  of BD address.
1455 **
1456 ** Parameter        remote_bda: remote device address
1457 **                  p_dev_type: output parameter to read the device type.
1458 **                  p_addr_type: output parameter to read the address type.
1459 **
1460 *******************************************************************************/
1461 extern void BTM_ReadDevInfo (BD_ADDR remote_bda, tBT_DEVICE_TYPE *p_dev_type,
1462                                      tBLE_ADDR_TYPE *p_addr_type);
1463 
1464 
1465 /*******************************************************************************
1466 **
1467 ** Function         BTM_ReadConnectedTransportAddress
1468 **
1469 ** Description      This function is called to read the paired device/address type of other device paired
1470 **                  corresponding to the BD_address
1471 **
1472 ** Parameter        remote_bda: remote device address, carry out the transport address
1473 **                  transport: active transport
1474 **
1475 ** Return           TRUE if an active link is identified; FALSE otherwise
1476 **
1477 *******************************************************************************/
1478 extern BOOLEAN BTM_ReadConnectedTransportAddress(BD_ADDR remote_bda,
1479                                                  tBT_TRANSPORT transport);
1480 
1481 /*******************************************************************************
1482 **
1483 ** Function         BTM_BleBroadcast
1484 **
1485 ** Description      This function is to start or stop broadcasting.
1486 **
1487 ** Parameters       start: start or stop broadcasting.
1488 **
1489 ** Returns          status.
1490 **
1491 *******************************************************************************/
1492 extern tBTM_STATUS BTM_BleBroadcast(BOOLEAN start);
1493 
1494 /*******************************************************************************
1495 **
1496 ** Function         BTM_BleConfigPrivacy
1497 **
1498 ** Description      This function is called to enable or disable the privacy in
1499 **                  the local device.
1500 **
1501 ** Parameters       enable: TRUE to enable it; FALSE to disable it.
1502 **
1503 ** Returns          BOOLEAN privacy mode set success; otherwise failed.
1504 **
1505 *******************************************************************************/
1506 extern BOOLEAN BTM_BleConfigPrivacy(BOOLEAN enable);
1507 
1508 /*******************************************************************************
1509 **
1510 ** Function         BTM_BleLocalPrivacyEnabled
1511 **
1512 ** Description        Checks if local device supports private address
1513 **
1514 ** Returns          Return TRUE if local privacy is enabled else FALSE
1515 **
1516 *******************************************************************************/
1517 extern BOOLEAN BTM_BleLocalPrivacyEnabled(void);
1518 
1519 /*******************************************************************************
1520 **
1521 ** Function         BTM_BleEnableMixedPrivacyMode
1522 **
1523 ** Description      This function is called to enabled Mixed mode if privacy 1.2
1524 **                  is applicable in controller.
1525 **
1526 ** Parameters       mixed_on:  mixed mode to be used or not.
1527 **
1528 ** Returns          void
1529 **
1530 *******************************************************************************/
1531 extern void BTM_BleEnableMixedPrivacyMode(BOOLEAN mixed_on);
1532 
1533 /*******************************************************************************
1534 **
1535 ** Function          BTM_BleMaxMultiAdvInstanceCount
1536 **
1537 ** Description        Returns max number of multi adv instances  supported by controller
1538 **
1539 ** Returns          Max multi adv instance count
1540 **
1541 *******************************************************************************/
1542 extern UINT8  BTM_BleMaxMultiAdvInstanceCount();
1543 
1544 /*******************************************************************************
1545 **
1546 ** Function         BTM_BleSetConnectableMode
1547 **
1548 ** Description      This function is called to set BLE connectable mode for a
1549 **                  peripheral device.
1550 **
1551 ** Parameters       connectable_mode:  directed connectable mode, or non-directed.It can
1552 **                              be BTM_BLE_CONNECT_EVT, BTM_BLE_CONNECT_DIR_EVT or
1553 **                              BTM_BLE_CONNECT_LO_DUTY_DIR_EVT
1554 **
1555 ** Returns          BTM_ILLEGAL_VALUE if controller does not support BLE.
1556 **                  BTM_SUCCESS is status set successfully; otherwise failure.
1557 **
1558 *******************************************************************************/
1559 extern tBTM_STATUS BTM_BleSetConnectableMode(tBTM_BLE_CONN_MODE connectable_mode);
1560 
1561 /*******************************************************************************
1562 **
1563 ** Function         BTM_BleTurnOnPrivacyOnRemote
1564 **
1565 ** Description      This function is called to enable or disable the privacy on the
1566 **                  remote device.
1567 **
1568 ** Parameters       bd_addr: remote device address.
1569 **                  privacy_on: TRUE to enable it; FALSE to disable it.
1570 **
1571 ** Returns          void
1572 **
1573 *******************************************************************************/
1574 extern void BTM_BleTurnOnPrivacyOnRemote(BD_ADDR bd_addr,
1575                                                  BOOLEAN privacy_on);
1576 
1577 /*******************************************************************************
1578 **
1579 ** Function         BTM_BleUpdateAdvWhitelist
1580 **
1581 ** Description      Add or remove device from advertising white list
1582 **
1583 ** Returns          void
1584 **
1585 *******************************************************************************/
1586 extern BOOLEAN BTM_BleUpdateAdvWhitelist(BOOLEAN add_remove, BD_ADDR emote_bda);
1587 
1588 /*******************************************************************************
1589 **
1590 ** Function         BTM_BleUpdateAdvFilterPolicy
1591 **
1592 ** Description      This function update the filter policy of advertiser.
1593 **
1594 ** Parameter        adv_policy: advertising filter policy
1595 **
1596 ** Return           void
1597 *******************************************************************************/
1598 extern void BTM_BleUpdateAdvFilterPolicy(tBTM_BLE_AFP adv_policy);
1599 
1600 /*******************************************************************************
1601 **
1602 ** Function         BTM_BleReceiverTest
1603 **
1604 ** Description      This function is called to start the LE Receiver test
1605 **
1606 ** Parameter       rx_freq - Frequency Range
1607 **               p_cmd_cmpl_cback - Command Complete callback
1608 **
1609 *******************************************************************************/
1610 void BTM_BleReceiverTest(UINT8 rx_freq, tBTM_CMPL_CB *p_cmd_cmpl_cback);
1611 
1612 
1613 /*******************************************************************************
1614 **
1615 ** Function         BTM_BleTransmitterTest
1616 **
1617 ** Description      This function is called to start the LE Transmitter test
1618 **
1619 ** Parameter       tx_freq - Frequency Range
1620 **                       test_data_len - Length in bytes of payload data in each packet
1621 **                       packet_payload - Pattern to use in the payload
1622 **                       p_cmd_cmpl_cback - Command Complete callback
1623 **
1624 *******************************************************************************/
1625 void BTM_BleTransmitterTest(UINT8 tx_freq, UINT8 test_data_len,
1626                                  UINT8 packet_payload, tBTM_CMPL_CB *p_cmd_cmpl_cback);
1627 
1628 /*******************************************************************************
1629 **
1630 ** Function         BTM_BleTestEnd
1631 **
1632 ** Description      This function is called to stop the in-progress TX or RX test
1633 **
1634 ** Parameter       p_cmd_cmpl_cback - Command complete callback
1635 **
1636 *******************************************************************************/
1637 void BTM_BleTestEnd(tBTM_CMPL_CB *p_cmd_cmpl_cback);
1638 
1639 /*******************************************************************************
1640 **
1641 ** Function         BTM_UseLeLink
1642 **
1643 ** Description      This function is to select the underneath physical link to use.
1644 **
1645 ** Returns          TRUE to use LE, FALSE use BR/EDR.
1646 **
1647 *******************************************************************************/
1648 extern BOOLEAN BTM_UseLeLink (BD_ADDR bd_addr);
1649 
1650 /*******************************************************************************
1651 **
1652 ** Function         BTM_BleStackEnable
1653 **
1654 ** Description      Enable/Disable BLE functionality on stack regarless controller
1655 **                  capability.
1656 **
1657 ** Parameters:      enable: TRUE to enable, FALSE to disable.
1658 **
1659 ** Returns          TRUE if added OK, else FALSE
1660 **
1661 *******************************************************************************/
1662 extern tBTM_STATUS BTM_BleStackEnable (BOOLEAN enable);
1663 
1664 /*******************************************************************************
1665 **
1666 ** Function         BTM_GetLeSecurityState
1667 **
1668 ** Description      This function is called to get security mode 1 flags and
1669 **                  encryption key size for LE peer.
1670 **
1671 ** Returns          BOOLEAN TRUE if LE device is found, FALSE otherwise.
1672 **
1673 *******************************************************************************/
1674 extern BOOLEAN BTM_GetLeSecurityState (BD_ADDR bd_addr,
1675                                                UINT8 *p_le_dev_sec_flags,
1676                                                UINT8 *p_le_key_size);
1677 
1678 /*******************************************************************************
1679 **
1680 ** Function         BTM_BleSecurityProcedureIsRunning
1681 **
1682 ** Description      This function indicates if LE security procedure is
1683 **                  currently running with the peer.
1684 **
1685 ** Returns          BOOLEAN TRUE if security procedure is running, FALSE otherwise.
1686 **
1687 *******************************************************************************/
1688 extern BOOLEAN BTM_BleSecurityProcedureIsRunning (BD_ADDR bd_addr);
1689 
1690 /*******************************************************************************
1691 **
1692 ** Function         BTM_BleGetSupportedKeySize
1693 **
1694 ** Description      This function gets the maximum encryption key size in bytes
1695 **                  the local device can suport.
1696 **                  record.
1697 **
1698 ** Returns          the key size or 0 if the size can't be retrieved.
1699 **
1700 *******************************************************************************/
1701 extern UINT8 BTM_BleGetSupportedKeySize (BD_ADDR bd_addr);
1702 
1703 /*******************************************************************************/
1704 /*                          Multi ADV API                                      */
1705 /*******************************************************************************
1706 **
1707 ** Function         BTM_BleEnableAdvInstance
1708 **
1709 ** Description      This function enable a Multi-ADV instance with the specified
1710 **                  adv parameters
1711 **
1712 ** Parameters       p_params: pointer to the adv parameter structure, set as default
1713 **                            adv parameter when the instance is enabled.
1714 **                  p_cback: callback function for the adv instance.
1715 **                  p_ref:  reference data attach to the adv instance to be enabled.
1716 **
1717 ** Returns          status
1718 **
1719 *******************************************************************************/
1720 extern tBTM_STATUS BTM_BleEnableAdvInstance (tBTM_BLE_ADV_PARAMS *p_params,
1721                                       tBTM_BLE_MULTI_ADV_CBACK *p_cback,
1722                                       void *p_ref);
1723 
1724 /*******************************************************************************
1725 **
1726 ** Function         BTM_BleUpdateAdvInstParam
1727 **
1728 ** Description      This function update a Multi-ADV instance with the specififed
1729 **                  adv parameters.
1730 **
1731 ** Parameters       inst_id: adv instance ID
1732 **                  p_params: pointer to the adv parameter structure.
1733 **
1734 ** Returns          status
1735 **
1736 *******************************************************************************/
1737 extern tBTM_STATUS BTM_BleUpdateAdvInstParam (UINT8 inst_id, tBTM_BLE_ADV_PARAMS *p_params);
1738 
1739 /*******************************************************************************
1740 **
1741 ** Function         BTM_BleCfgAdvInstData
1742 **
1743 ** Description      This function configure a Multi-ADV instance with the specified
1744 **                  adv data or scan response data.
1745 **
1746 ** Parameters       inst_id: adv instance ID
1747 **                  is_scan_rsp: is this scacn response, if no set as adv data.
1748 **                  data_mask: adv data mask.
1749 **                  p_data: pointer to the adv data structure.
1750 **
1751 ** Returns          status
1752 **
1753 *******************************************************************************/
1754 extern tBTM_STATUS BTM_BleCfgAdvInstData (UINT8 inst_id, BOOLEAN is_scan_rsp,
1755                                     tBTM_BLE_AD_MASK data_mask,
1756                                     tBTM_BLE_ADV_DATA *p_data);
1757 
1758 /*******************************************************************************
1759 **
1760 ** Function         BTM_BleDisableAdvInstance
1761 **
1762 ** Description      This function disable a Multi-ADV instance.
1763 **
1764 ** Parameters       inst_id: adv instance ID
1765 **
1766 ** Returns          status
1767 **
1768 *******************************************************************************/
1769 extern tBTM_STATUS BTM_BleDisableAdvInstance (UINT8 inst_id);
1770 
1771 /*******************************************************************************
1772 **
1773 ** Function         BTM_BleAdvFilterParamSetup
1774 **
1775 ** Description      This function is called to setup the adv data payload filter
1776 **                  condition.
1777 **
1778 ** Parameters       p_target: enabble the filter condition on a target device; if NULL
1779 **                            enable the generic scan condition.
1780 **                  enable: enable or disable the filter condition
1781 **
1782 ** Returns          void
1783 **
1784 *******************************************************************************/
1785 extern tBTM_STATUS BTM_BleAdvFilterParamSetup(int action,
1786                                 tBTM_BLE_PF_FILT_INDEX filt_index,
1787                                 tBTM_BLE_PF_FILT_PARAMS *p_filt_params,
1788                                 tBLE_BD_ADDR *p_target, tBTM_BLE_PF_PARAM_CBACK *p_cmpl_cback,
1789                                 tBTM_BLE_REF_VALUE ref_value);
1790 
1791 /*******************************************************************************
1792 **
1793 ** Function         BTM_BleCfgFilterCondition
1794 **
1795 ** Description      This function is called to configure the adv data payload filter
1796 **                  condition.
1797 **
1798 ** Parameters       action: to read/write/clear
1799 **                  cond_type: filter condition type.
1800 **                  p_cond: filter condition paramter
1801 **
1802 ** Returns          tBTM_STATUS
1803 **
1804 *******************************************************************************/
1805 extern tBTM_STATUS BTM_BleCfgFilterCondition(tBTM_BLE_SCAN_COND_OP action,
1806                                       tBTM_BLE_PF_COND_TYPE cond_type,
1807                                       tBTM_BLE_PF_FILT_INDEX filt_index,
1808                                       tBTM_BLE_PF_COND_PARAM *p_cond,
1809                                       tBTM_BLE_PF_CFG_CBACK *p_cmpl_cback,
1810                                       tBTM_BLE_REF_VALUE ref_value);
1811 
1812 /*******************************************************************************
1813 **
1814 ** Function         BTM_BleEnableDisableFilterFeature
1815 **
1816 ** Description      This function is called to enable or disable the APCF feature
1817 **
1818 ** Parameters       enable - TRUE - enables the APCF, FALSE - disables the APCF
1819 **                       ref_value - Ref value
1820 **
1821 ** Returns          tBTM_STATUS
1822 **
1823 *******************************************************************************/
1824 extern tBTM_STATUS BTM_BleEnableDisableFilterFeature(UINT8 enable,
1825                                                tBTM_BLE_PF_STATUS_CBACK *p_stat_cback,
1826                                                tBTM_BLE_REF_VALUE ref_value);
1827 
1828 /*******************************************************************************
1829 **
1830 ** Function         BTM_BleGetEnergyInfo
1831 **
1832 ** Description      This function obtains the energy info
1833 **
1834 ** Parameters       p_ener_cback - Callback pointer
1835 **
1836 ** Returns          status
1837 **
1838 *******************************************************************************/
1839 extern tBTM_STATUS BTM_BleGetEnergyInfo(tBTM_BLE_ENERGY_INFO_CBACK *p_ener_cback);
1840 
1841 /*******************************************************************************
1842 **
1843 ** Function         BTM_SetBleDataLength
1844 **
1845 ** Description      This function is called to set maximum BLE transmission packet size
1846 **
1847 ** Returns          BTM_SUCCESS if success; otherwise failed.
1848 **
1849 *******************************************************************************/
1850 extern tBTM_STATUS BTM_SetBleDataLength(BD_ADDR bd_addr, UINT16 tx_pdu_length);
1851 
1852 #ifdef __cplusplus
1853 }
1854 #endif
1855 
1856 #endif
1857