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