1 /******************************************************************************
2  *
3  *  Copyright (C) 2003-2014 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 is the API implementation file for the BTA device manager.
22  *
23  ******************************************************************************/
24 
25 #include "bta/bta_sys.h"
26 #include "bta/bta_api.h"
27 #include "bta_dm_int.h"
28 #include "bta_sys_int.h"
29 #include "stack/btm_api.h"
30 #include "btm_int.h"
31 #include <string.h>
32 #include <assert.h>
33 #include "bta/utl.h"
34 #include "osi/allocator.h"
35 
36 /*****************************************************************************
37 **  Constants
38 *****************************************************************************/
39 
40 static const tBTA_SYS_REG bta_dm_reg = {
41     bta_dm_sm_execute,
42     bta_dm_sm_disable
43 };
44 
45 static const tBTA_SYS_REG bta_dm_search_reg = {
46     bta_dm_search_sm_execute,
47     bta_dm_search_sm_disable
48 };
49 
50 /*******************************************************************************
51 **
52 ** Function         BTA_EnableBluetooth
53 **
54 ** Description      Enables bluetooth service.  This function must be
55 **                  called before any other functions in the BTA API are called.
56 **
57 **
58 ** Returns          tBTA_STATUS
59 **
60 *******************************************************************************/
BTA_EnableBluetooth(tBTA_DM_SEC_CBACK * p_cback)61 tBTA_STATUS BTA_EnableBluetooth(tBTA_DM_SEC_CBACK *p_cback)
62 {
63 
64     tBTA_DM_API_ENABLE    *p_msg;
65 
66     /* Bluetooth disabling is in progress */
67     if (bta_dm_cb.disabling) {
68         return BTA_FAILURE;
69     }
70 
71     memset(&bta_dm_cb, 0, sizeof(bta_dm_cb));
72 
73     bta_sys_register (BTA_ID_DM, &bta_dm_reg );
74     bta_sys_register (BTA_ID_DM_SEARCH, &bta_dm_search_reg );
75 
76     /* if UUID list is not provided as static data */
77     bta_sys_eir_register(bta_dm_eir_update_uuid);
78 
79     if ((p_msg = (tBTA_DM_API_ENABLE *) osi_malloc(sizeof(tBTA_DM_API_ENABLE))) != NULL) {
80         p_msg->hdr.event = BTA_DM_API_ENABLE_EVT;
81         p_msg->p_sec_cback = p_cback;
82         bta_sys_sendmsg(p_msg);
83         return BTA_SUCCESS;
84     }
85     return BTA_FAILURE;
86 
87 }
88 
89 /*******************************************************************************
90 **
91 ** Function         BTA_DisableBluetooth
92 **
93 ** Description      Disables bluetooth service.  This function is called when
94 **                  the application no longer needs bluetooth service
95 **
96 ** Returns          void
97 **
98 *******************************************************************************/
BTA_DisableBluetooth(void)99 tBTA_STATUS BTA_DisableBluetooth(void)
100 {
101 
102     BT_HDR    *p_msg;
103 
104     if ((p_msg = (BT_HDR *) osi_malloc(sizeof(BT_HDR))) != NULL) {
105         p_msg->event = BTA_DM_API_DISABLE_EVT;
106         bta_sys_sendmsg(p_msg);
107     } else {
108         return BTA_FAILURE;
109     }
110 
111     return BTA_SUCCESS;
112 }
113 
114 /*******************************************************************************
115 **
116 ** Function         BTA_EnableTestMode
117 **
118 ** Description      Enables bluetooth device under test mode
119 **
120 **
121 ** Returns          tBTA_STATUS
122 **
123 *******************************************************************************/
BTA_EnableTestMode(void)124 tBTA_STATUS BTA_EnableTestMode(void)
125 {
126     BT_HDR    *p_msg;
127 
128     APPL_TRACE_API("BTA_EnableTestMode");
129 
130     if ((p_msg = (BT_HDR *) osi_malloc(sizeof(BT_HDR))) != NULL) {
131         p_msg->event = BTA_DM_API_ENABLE_TEST_MODE_EVT;
132         bta_sys_sendmsg(p_msg);
133         return BTA_SUCCESS;
134     }
135     return BTA_FAILURE;
136 }
137 
138 /*******************************************************************************
139 **
140 ** Function         BTA_DisableTestMode
141 **
142 ** Description      Disable bluetooth device under test mode
143 **
144 **
145 ** Returns          None
146 **
147 *******************************************************************************/
BTA_DisableTestMode(void)148 void BTA_DisableTestMode(void)
149 {
150     BT_HDR    *p_msg;
151 
152     APPL_TRACE_API("BTA_DisableTestMode");
153 
154     if ((p_msg = (BT_HDR *) osi_malloc(sizeof(BT_HDR))) != NULL) {
155         p_msg->event = BTA_DM_API_DISABLE_TEST_MODE_EVT;
156         bta_sys_sendmsg(p_msg);
157     }
158 }
159 
160 /*******************************************************************************
161 **
162 ** Function         BTA_DmSetDeviceName
163 **
164 ** Description      This function sets the Bluetooth name of local device
165 **
166 **
167 ** Returns          void
168 **
169 *******************************************************************************/
BTA_DmSetDeviceName(const char * p_name)170 void BTA_DmSetDeviceName(const char *p_name)
171 {
172 
173     tBTA_DM_API_SET_NAME    *p_msg;
174 
175     if ((p_msg = (tBTA_DM_API_SET_NAME *) osi_malloc(sizeof(tBTA_DM_API_SET_NAME))) != NULL) {
176         p_msg->hdr.event = BTA_DM_API_SET_NAME_EVT;
177         /* truncate the name if needed */
178         BCM_STRNCPY_S((char *)p_msg->name, p_name, BD_NAME_LEN);
179         p_msg->name[BD_NAME_LEN] = '\0';
180 
181         bta_sys_sendmsg(p_msg);
182     }
183 }
184 
185 /*******************************************************************************
186 **
187 ** Function         BTA_DmGetDeviceName
188 **
189 ** Description      This function gets the Bluetooth name of local device
190 **
191 **
192 ** Returns          void
193 **
194 *******************************************************************************/
BTA_DmGetDeviceName(tBTA_GET_DEV_NAME_CBACK * p_cback)195 void BTA_DmGetDeviceName(tBTA_GET_DEV_NAME_CBACK *p_cback)
196 {
197     tBTA_DM_API_GET_NAME *p_msg;
198 
199     if ((p_msg = (tBTA_DM_API_GET_NAME *) osi_malloc(sizeof(tBTA_DM_API_GET_NAME))) != NULL) {
200         p_msg->hdr.event = BTA_DM_API_GET_NAME_EVT;
201         p_msg->p_cback = p_cback;
202         bta_sys_sendmsg(p_msg);
203     }
204 }
205 
BTA_DmsendVendorHciCmd(UINT16 opcode,UINT8 param_len,UINT8 * p_param_buf,tBTA_SEND_VENDOR_HCI_CMPL_CBACK p_vendor_cmd_complete_cback)206 void BTA_DmsendVendorHciCmd(UINT16 opcode, UINT8 param_len, UINT8 *p_param_buf, tBTA_SEND_VENDOR_HCI_CMPL_CBACK p_vendor_cmd_complete_cback)
207 {
208     tBTA_DM_API_SEND_VENDOR_HCI_CMD *p_msg;
209     if ((p_msg = (tBTA_DM_API_SEND_VENDOR_HCI_CMD *)osi_malloc(sizeof(tBTA_DM_API_SEND_VENDOR_HCI_CMD) + param_len)) != NULL) {
210         p_msg->hdr.event = BTA_DM_API_SEND_VENDOR_HCI_CMD_EVT;
211         p_msg->opcode = opcode;
212         p_msg->param_len = param_len;
213         p_msg->p_param_buf = (UINT8 *)(p_msg + 1);
214         memcpy(p_msg->p_param_buf, p_param_buf, param_len);
215         p_msg->vendor_hci_cb = p_vendor_cmd_complete_cback;
216 
217         bta_sys_sendmsg(p_msg);
218     }
219 }
220 
221 #if (CLASSIC_BT_INCLUDED == TRUE)
222 
BTA_DmConfigEir(tBTA_DM_EIR_CONF * eir_config)223 void BTA_DmConfigEir(tBTA_DM_EIR_CONF *eir_config)
224 {
225     tBTA_DM_API_CONFIG_EIR    *p_msg;
226 
227     UINT8 eir_manufac_spec_len = eir_config->bta_dm_eir_manufac_spec_len;
228     UINT8 eir_url_len = eir_config->bta_dm_eir_url_len;
229 
230     if (eir_manufac_spec_len > HCI_EXT_INQ_RESPONSE_LEN) {
231         APPL_TRACE_WARNING ("%s: Manufacturer data is too long(%d), cut it to %d\n",
232                             __func__, eir_manufac_spec_len, HCI_EXT_INQ_RESPONSE_LEN);
233         eir_manufac_spec_len = HCI_EXT_INQ_RESPONSE_LEN;
234     }
235     if (eir_url_len > HCI_EXT_INQ_RESPONSE_LEN) {
236         APPL_TRACE_WARNING ("%s: URL is too long(%d), cut it to %d\n",
237                             __func__, eir_url_len, HCI_EXT_INQ_RESPONSE_LEN);
238         eir_url_len = HCI_EXT_INQ_RESPONSE_LEN;
239     }
240 
241     if ((p_msg = (tBTA_DM_API_CONFIG_EIR *) osi_malloc(sizeof(tBTA_DM_API_CONFIG_EIR) + eir_manufac_spec_len + eir_url_len)) != NULL) {
242         p_msg->hdr.event = BTA_DM_API_CONFIG_EIR_EVT;
243 
244         p_msg->eir_fec_required = eir_config->bta_dm_eir_fec_required;
245         p_msg->eir_included_name = eir_config->bta_dm_eir_included_name;
246         p_msg->eir_included_tx_power = eir_config->bta_dm_eir_included_tx_power;
247         p_msg->eir_included_uuid = eir_config->bta_dm_eir_included_uuid;
248         p_msg->eir_flags = eir_config->bta_dm_eir_flags;
249         p_msg->eir_manufac_spec_len = eir_manufac_spec_len;
250         p_msg->eir_manufac_spec = p_msg->data;
251         p_msg->eir_url_len = eir_url_len;
252         p_msg->eir_url = p_msg->data + eir_manufac_spec_len;
253 
254         if (eir_manufac_spec_len > 0) {
255             memcpy(p_msg->eir_manufac_spec, eir_config->bta_dm_eir_manufac_spec, eir_manufac_spec_len);
256         }
257 
258         if (eir_url_len > 0) {
259             memcpy(p_msg->eir_url, eir_config->bta_dm_eir_url, eir_url_len);
260         }
261 
262         bta_sys_sendmsg(p_msg);
263     }
264 }
265 
266 
267 /*******************************************************************************
268 **
269 ** Function         BTA_DmSetAfhChannels
270 **
271 ** Description      This function sets the AFH channels
272 **
273 **
274 ** Returns          void
275 **
276 *******************************************************************************/
BTA_DmSetAfhChannels(const uint8_t * channels,tBTA_CMPL_CB * set_afh_cb)277 void BTA_DmSetAfhChannels(const uint8_t *channels, tBTA_CMPL_CB  *set_afh_cb)
278 {
279     tBTA_DM_API_SET_AFH_CHANNELS *p_msg;
280 
281     if ((p_msg = (tBTA_DM_API_SET_AFH_CHANNELS *) osi_malloc(sizeof(tBTA_DM_API_SET_AFH_CHANNELS))) != NULL) {
282         p_msg->hdr.event = BTA_DM_API_SET_AFH_CHANNELS_EVT;
283 
284         p_msg->set_afh_cb = set_afh_cb;
285         memcpy(p_msg->channels, channels, AFH_CHANNELS_LEN);
286 
287         bta_sys_sendmsg(p_msg);
288     }
289 }
290 
291 /*******************************************************************************
292 **
293 ** Function         BTA_DmSetAclPktTypes
294 **
295 ** Description      This function sets the packet types used for ACL traffic.
296 **
297 **
298 ** Returns          void
299 **
300 *******************************************************************************/
BTA_DmSetAclPktTypes(BD_ADDR remote_addr,UINT16 pkt_types,tBTM_CMPL_CB * p_cb)301 void BTA_DmSetAclPktTypes(BD_ADDR remote_addr, UINT16 pkt_types, tBTM_CMPL_CB *p_cb)
302 {
303     tBTA_DM_API_SET_ACL_PKT_TYPES *p_msg;
304 
305     if ((p_msg = (tBTA_DM_API_SET_ACL_PKT_TYPES *) osi_malloc(sizeof(tBTA_DM_API_SET_ACL_PKT_TYPES))) != NULL) {
306         p_msg->hdr.event = BTA_DM_API_SET_ACL_PKT_TYPES_EVT;
307         bdcpy(p_msg->rmt_addr, remote_addr);
308         p_msg->pkt_types = pkt_types;
309         p_msg->set_acl_pkt_types_cb = p_cb;
310 
311         bta_sys_sendmsg(p_msg);
312     }
313 }
314 #endif /// CLASSIC_BT_INCLUDED == TRUE
315 
316 #if (SDP_INCLUDED == TRUE)
317 /*******************************************************************************
318 **
319 ** Function         BTA_DmGetRemoteName
320 **
321 ** Description      This function gets the peer device's Bluetooth name.
322 **
323 **
324 ** Returns          void
325 **
326 *******************************************************************************/
BTA_DmGetRemoteName(BD_ADDR remote_addr,tBTA_CMPL_CB * rmt_name_cb)327 void BTA_DmGetRemoteName(BD_ADDR remote_addr, tBTA_CMPL_CB *rmt_name_cb)
328 {
329     tBTA_DM_API_GET_REMOTE_NAME *p_msg;
330 
331     if ((p_msg = (tBTA_DM_API_GET_REMOTE_NAME *) osi_malloc(sizeof(tBTA_DM_API_GET_REMOTE_NAME))) != NULL) {
332         p_msg->hdr.event = BTA_DM_API_GET_REMOTE_NAME_EVT;
333         p_msg->rmt_name_cb = rmt_name_cb;
334         bdcpy(p_msg->rmt_addr, remote_addr);
335         bta_sys_sendmsg(p_msg);
336     }
337 }
338 #endif
339 
340 #if (BLE_INCLUDED == TRUE)
341 /*******************************************************************************
342 **
343 ** Function         BTA_DmBleSetChannels
344 **
345 ** Description      This function sets BLE channels
346 **
347 **
348 ** Returns          void
349 **
350 *******************************************************************************/
BTA_DmBleSetChannels(const uint8_t * channels,tBTA_CMPL_CB * set_channels_cb)351 void BTA_DmBleSetChannels(const uint8_t *channels, tBTA_CMPL_CB  *set_channels_cb)
352 {
353 
354     tBTA_DM_API_BLE_SET_CHANNELS *p_msg;
355 
356     if ((p_msg = (tBTA_DM_API_BLE_SET_CHANNELS *) osi_malloc(sizeof(tBTA_DM_API_BLE_SET_CHANNELS))) != NULL) {
357         p_msg->hdr.event = BTA_DM_API_BLE_SET_CHANNELS_EVT;
358 
359         p_msg->set_channels_cb = set_channels_cb;
360         memcpy(p_msg->channels, channels, BLE_CHANNELS_LEN);
361 
362         bta_sys_sendmsg(p_msg);
363     }
364 
365 
366 }
367 
BTA_DmUpdateWhiteList(BOOLEAN add_remove,BD_ADDR remote_addr,tBLE_ADDR_TYPE addr_type,tBTA_UPDATE_WHITELIST_CBACK * update_wl_cb)368 void BTA_DmUpdateWhiteList(BOOLEAN add_remove,  BD_ADDR remote_addr, tBLE_ADDR_TYPE addr_type, tBTA_UPDATE_WHITELIST_CBACK *update_wl_cb)
369 {
370     tBTA_DM_API_UPDATE_WHITE_LIST *p_msg;
371     if ((p_msg = (tBTA_DM_API_UPDATE_WHITE_LIST *)osi_malloc(sizeof(tBTA_DM_API_UPDATE_WHITE_LIST))) != NULL) {
372         p_msg->hdr.event = BTA_DM_API_UPDATE_WHITE_LIST_EVT;
373         p_msg->add_remove = add_remove;
374         p_msg->addr_type = addr_type;
375         p_msg->update_wl_cb = update_wl_cb;
376         memcpy(p_msg->remote_addr, remote_addr, sizeof(BD_ADDR));
377 
378         bta_sys_sendmsg(p_msg);
379     }
380 }
381 
BTA_DmClearWhiteList(tBTA_UPDATE_WHITELIST_CBACK * update_wl_cb)382 void BTA_DmClearWhiteList(tBTA_UPDATE_WHITELIST_CBACK *update_wl_cb)
383 {
384     tBTA_DM_API_UPDATE_WHITE_LIST *p_msg;
385     if ((p_msg = (tBTA_DM_API_UPDATE_WHITE_LIST *)osi_malloc(sizeof(tBTA_DM_API_UPDATE_WHITE_LIST))) != NULL) {
386         p_msg->hdr.event = BTA_DM_API_CLEAR_WHITE_LIST_EVT;
387         p_msg->update_wl_cb = update_wl_cb;
388 
389         bta_sys_sendmsg(p_msg);
390     }
391 }
392 
BTA_DmBleReadAdvTxPower(tBTA_CMPL_CB * cmpl_cb)393 void BTA_DmBleReadAdvTxPower(tBTA_CMPL_CB *cmpl_cb)
394 {
395     tBTA_DM_API_READ_ADV_TX_POWER *p_msg;
396     if ((p_msg = (tBTA_DM_API_READ_ADV_TX_POWER *)osi_malloc(sizeof(tBTA_DM_API_READ_ADV_TX_POWER))) != NULL) {
397         p_msg->hdr.event = BTA_DM_API_BLE_READ_ADV_TX_POWER_EVT;
398         p_msg->read_tx_power_cb = cmpl_cb;
399         bta_sys_sendmsg(p_msg);
400     }
401 }
402 #endif  ///BLE_INCLUDED == TRUE
403 
BTA_DmReadRSSI(BD_ADDR remote_addr,tBTA_TRANSPORT transport,tBTA_CMPL_CB * cmpl_cb)404 void BTA_DmReadRSSI(BD_ADDR remote_addr, tBTA_TRANSPORT transport, tBTA_CMPL_CB *cmpl_cb)
405 {
406     tBTA_DM_API_READ_RSSI *p_msg;
407     if ((p_msg = (tBTA_DM_API_READ_RSSI *)osi_malloc(sizeof(tBTA_DM_API_READ_RSSI))) != NULL) {
408         p_msg->hdr.event = BTA_DM_API_READ_RSSI_EVT;
409         memcpy(p_msg->remote_addr, remote_addr, sizeof(BD_ADDR));
410         p_msg->transport = transport;
411         p_msg->read_rssi_cb = cmpl_cb;
412         bta_sys_sendmsg(p_msg);
413     }
414 }
415 
416 /*******************************************************************************
417 **
418 ** Function         BTA_DmSetVisibility
419 **
420 ** Description      This function sets the Bluetooth connectable,
421 **                  discoverable, pairable and conn paired only modes of local device
422 **
423 **
424 ** Returns          void
425 **
426 *******************************************************************************/
BTA_DmSetVisibility(tBTA_DM_DISC disc_mode,tBTA_DM_CONN conn_mode,UINT8 pairable_mode,UINT8 conn_filter)427 void BTA_DmSetVisibility(tBTA_DM_DISC disc_mode, tBTA_DM_CONN conn_mode, UINT8 pairable_mode, UINT8 conn_filter )
428 {
429 
430     tBTA_DM_API_SET_VISIBILITY    *p_msg;
431 
432     if ((p_msg = (tBTA_DM_API_SET_VISIBILITY *) osi_malloc(sizeof(tBTA_DM_API_SET_VISIBILITY))) != NULL) {
433         p_msg->hdr.event = BTA_DM_API_SET_VISIBILITY_EVT;
434         p_msg->disc_mode = disc_mode;
435         p_msg->conn_mode = conn_mode;
436         p_msg->pair_mode = pairable_mode;
437         p_msg->conn_paired_only = conn_filter;
438 
439 
440         bta_sys_sendmsg(p_msg);
441     }
442 
443 
444 }
445 
446 /*******************************************************************************
447 **
448 ** Function         BTA_DmSearch
449 **
450 ** Description      This function searches for peer Bluetooth devices. It performs
451 **                  an inquiry and gets the remote name for devices. Service
452 **                  discovery is done if services is non zero
453 **
454 **
455 ** Returns          void
456 **
457 *******************************************************************************/
BTA_DmSearch(tBTA_DM_INQ * p_dm_inq,tBTA_SERVICE_MASK services,tBTA_DM_SEARCH_CBACK * p_cback)458 void BTA_DmSearch(tBTA_DM_INQ *p_dm_inq, tBTA_SERVICE_MASK services, tBTA_DM_SEARCH_CBACK *p_cback)
459 {
460 
461     tBTA_DM_API_SEARCH    *p_msg;
462 
463     if ((p_msg = (tBTA_DM_API_SEARCH *) osi_malloc(sizeof(tBTA_DM_API_SEARCH))) != NULL) {
464         memset(p_msg, 0, sizeof(tBTA_DM_API_SEARCH));
465 
466         p_msg->hdr.event = BTA_DM_API_SEARCH_EVT;
467         memcpy(&p_msg->inq_params, p_dm_inq, sizeof(tBTA_DM_INQ));
468         p_msg->services = services;
469         p_msg->p_cback = p_cback;
470         p_msg->rs_res  = BTA_DM_RS_NONE;
471         bta_sys_sendmsg(p_msg);
472     }
473 
474 }
475 
476 
477 /*******************************************************************************
478 **
479 ** Function         BTA_DmSearchCancel
480 **
481 ** Description      This function  cancels a search initiated by BTA_DmSearch
482 **
483 **
484 ** Returns          void
485 **
486 *******************************************************************************/
BTA_DmSearchCancel(void)487 void BTA_DmSearchCancel(void)
488 {
489     BT_HDR    *p_msg;
490 
491     if ((p_msg = (BT_HDR *) osi_malloc(sizeof(BT_HDR))) != NULL) {
492         p_msg->event = BTA_DM_API_SEARCH_CANCEL_EVT;
493         bta_sys_sendmsg(p_msg);
494     }
495 
496 }
497 
498 #if (SDP_INCLUDED == TRUE)
499 /*******************************************************************************
500 **
501 ** Function         BTA_DmDiscover
502 **
503 ** Description      This function does service discovery for services of a
504 **                  peer device
505 **
506 **
507 ** Returns          void
508 **
509 *******************************************************************************/
BTA_DmDiscover(BD_ADDR bd_addr,tBTA_SERVICE_MASK services,tBTA_DM_SEARCH_CBACK * p_cback,BOOLEAN sdp_search)510 void BTA_DmDiscover(BD_ADDR bd_addr, tBTA_SERVICE_MASK services,
511                     tBTA_DM_SEARCH_CBACK *p_cback, BOOLEAN sdp_search)
512 {
513     tBTA_DM_API_DISCOVER    *p_msg;
514 
515     if ((p_msg = (tBTA_DM_API_DISCOVER *) osi_malloc(sizeof(tBTA_DM_API_DISCOVER))) != NULL) {
516         memset(p_msg, 0, sizeof(tBTA_DM_API_DISCOVER));
517 
518         p_msg->hdr.event = BTA_DM_API_DISCOVER_EVT;
519         bdcpy(p_msg->bd_addr, bd_addr);
520         p_msg->services = services;
521         p_msg->p_cback = p_cback;
522         p_msg->sdp_search = sdp_search;
523         bta_sys_sendmsg(p_msg);
524     }
525 }
526 
527 /*******************************************************************************
528 **
529 ** Function         BTA_DmDiscoverUUID
530 **
531 ** Description      This function does service discovery for services of a
532 **                  peer device
533 **
534 **
535 ** Returns          void
536 **
537 *******************************************************************************/
BTA_DmDiscoverUUID(BD_ADDR bd_addr,tSDP_UUID * uuid,tBTA_DM_SEARCH_CBACK * p_cback,BOOLEAN sdp_search)538 void BTA_DmDiscoverUUID(BD_ADDR bd_addr, tSDP_UUID *uuid,
539                         tBTA_DM_SEARCH_CBACK *p_cback, BOOLEAN sdp_search)
540 {
541     tBTA_DM_API_DISCOVER    *p_msg;
542 
543     if ((p_msg = (tBTA_DM_API_DISCOVER *) osi_malloc(sizeof(tBTA_DM_API_DISCOVER))) != NULL) {
544         p_msg->hdr.event = BTA_DM_API_DISCOVER_EVT;
545         bdcpy(p_msg->bd_addr, bd_addr);
546         p_msg->services = BTA_USER_SERVICE_MASK; //Not exposed at API level
547         p_msg->p_cback = p_cback;
548         p_msg->sdp_search = sdp_search;
549 
550 #if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
551         p_msg->num_uuid = 0;
552         p_msg->p_uuid = NULL;
553 #endif
554         memcpy( &p_msg->uuid, uuid, sizeof(tSDP_UUID) );
555         bta_sys_sendmsg(p_msg);
556     }
557 }
558 #endif  ///SDP_INCLUDED == TRUE
559 
560 /*******************************************************************************
561 **
562 ** Function         BTA_DmBond
563 **
564 ** Description      This function initiates a bonding procedure with a peer
565 **                  device
566 **
567 **
568 ** Returns          void
569 **
570 *******************************************************************************/
571 #if (SMP_INCLUDED == TRUE)
BTA_DmBond(BD_ADDR bd_addr)572 void BTA_DmBond(BD_ADDR bd_addr)
573 {
574     tBTA_DM_API_BOND    *p_msg;
575 
576     p_msg = (tBTA_DM_API_BOND *) osi_malloc(sizeof(tBTA_DM_API_BOND));
577     if (p_msg != NULL) {
578         p_msg->hdr.event = BTA_DM_API_BOND_EVT;
579         bdcpy(p_msg->bd_addr, bd_addr);
580         p_msg->transport = BTA_TRANSPORT_UNKNOWN;
581         bta_sys_sendmsg(p_msg);
582     }
583 }
584 
585 /*******************************************************************************
586 **
587 ** Function         BTA_DmBondByTransports
588 **
589 ** Description      This function initiates a bonding procedure with a peer
590 **                  device
591 **
592 **
593 ** Returns          void
594 **
595 *******************************************************************************/
BTA_DmBondByTransport(BD_ADDR bd_addr,tBTA_TRANSPORT transport)596 void BTA_DmBondByTransport(BD_ADDR bd_addr, tBTA_TRANSPORT transport)
597 {
598     tBTA_DM_API_BOND    *p_msg;
599 
600     if ((p_msg = (tBTA_DM_API_BOND *) osi_malloc(sizeof(tBTA_DM_API_BOND))) != NULL) {
601         p_msg->hdr.event = BTA_DM_API_BOND_EVT;
602         bdcpy(p_msg->bd_addr, bd_addr);
603         p_msg->transport = transport;
604         bta_sys_sendmsg(p_msg);
605     }
606 
607 
608 }
609 
610 /*******************************************************************************
611 **
612 ** Function         BTA_DmBondCancel
613 **
614 ** Description      This function cancels the bonding procedure with a peer
615 **                  device
616 **
617 **
618 ** Returns          void
619 **
620 *******************************************************************************/
BTA_DmBondCancel(BD_ADDR bd_addr)621 void BTA_DmBondCancel(BD_ADDR bd_addr)
622 {
623     tBTA_DM_API_BOND_CANCEL    *p_msg;
624 
625     if ((p_msg = (tBTA_DM_API_BOND_CANCEL *) osi_malloc(sizeof(tBTA_DM_API_BOND_CANCEL))) != NULL) {
626         p_msg->hdr.event = BTA_DM_API_BOND_CANCEL_EVT;
627         bdcpy(p_msg->bd_addr, bd_addr);
628         bta_sys_sendmsg(p_msg);
629     }
630 }
631 #endif  ///SMP_INCLUDED == TRUE
632 
633 #if (CLASSIC_BT_INCLUDED == TRUE)
634 /*******************************************************************************
635 **
636 ** Function         BTA_DMSetPinType
637 **
638 ** Description      This function set pin type as BTM_PIN_TYPE_FIXED or BTM_PIN_TYPE_VARIABLE
639 **
640 **
641 ** Returns          void
642 **
643 *******************************************************************************/
BTA_DMSetPinType(UINT8 pin_type,UINT8 * pin_code,UINT8 pin_code_len)644 void BTA_DMSetPinType (UINT8 pin_type, UINT8 *pin_code, UINT8 pin_code_len)
645 {
646     tBTA_DM_API_SET_PIN_TYPE    *p_msg;
647 
648     if ((p_msg = (tBTA_DM_API_SET_PIN_TYPE *) osi_malloc(sizeof(tBTA_DM_API_SET_PIN_TYPE))) != NULL) {
649         p_msg->hdr.event = BTA_DM_API_SET_PIN_TYPE_EVT;
650         p_msg->pin_type = pin_type;
651         p_msg->pin_len = pin_code_len;
652         memcpy(p_msg->p_pin, pin_code, pin_code_len);
653         bta_sys_sendmsg(p_msg);
654     }
655 }
656 
657 /*******************************************************************************
658 **
659 ** Function         BTA_DmPinReply
660 **
661 ** Description      This function provides a pincode for a remote device when
662 **                  one is requested by DM through BTA_DM_PIN_REQ_EVT
663 **
664 **
665 ** Returns          void
666 **
667 *******************************************************************************/
BTA_DmPinReply(BD_ADDR bd_addr,BOOLEAN accept,UINT8 pin_len,UINT8 * p_pin)668 void BTA_DmPinReply(BD_ADDR bd_addr, BOOLEAN accept, UINT8 pin_len, UINT8 *p_pin)
669 {
670     tBTA_DM_API_PIN_REPLY    *p_msg;
671 
672     if ((p_msg = (tBTA_DM_API_PIN_REPLY *) osi_malloc(sizeof(tBTA_DM_API_PIN_REPLY))) != NULL) {
673         p_msg->hdr.event = BTA_DM_API_PIN_REPLY_EVT;
674         bdcpy(p_msg->bd_addr, bd_addr);
675         p_msg->accept = accept;
676         if (accept) {
677             p_msg->pin_len = pin_len;
678             memcpy(p_msg->p_pin, p_pin, pin_len);
679         }
680         bta_sys_sendmsg(p_msg);
681     }
682 
683 }
684 #endif  ///CLASSIC_BT_INCLUDED == TRUE
685 
686 #if (BTM_OOB_INCLUDED == TRUE && SMP_INCLUDED == TRUE)
687 /*******************************************************************************
688 **
689 ** Function         BTA_DmLocalOob
690 **
691 ** Description      This function retrieves the OOB data from local controller.
692 **                  The result is reported by:
693 **                  - bta_dm_co_loc_oob_ext() if device supports secure
694 **                    connections (SC)
695 **                  - bta_dm_co_loc_oob() if device doesn't support SC
696 **
697 ** Returns          void
698 **
699 *******************************************************************************/
BTA_DmLocalOob(void)700 void BTA_DmLocalOob(void)
701 {
702     tBTA_DM_API_LOC_OOB    *p_msg;
703 
704     if ((p_msg = (tBTA_DM_API_LOC_OOB *) osi_malloc(sizeof(tBTA_DM_API_LOC_OOB))) != NULL) {
705         p_msg->hdr.event = BTA_DM_API_LOC_OOB_EVT;
706         bta_sys_sendmsg(p_msg);
707     }
708 }
709 
710 /*******************************************************************************
711 **
712 ** Function         BTA_DmOobReply
713 **
714 **                  This function is called to provide the OOB data for
715 **                  SMP in response to BTA_LE_OOB_REQ_EVT
716 **
717 ** Parameters:      bd_addr     - Address of the peer device
718 **                  len         - length of simple pairing Randomizer  C
719 **                  p_value     - simple pairing Randomizer  C.
720 **
721 ** Returns          void
722 **
723 *******************************************************************************/
BTA_DmOobReply(BD_ADDR bd_addr,UINT8 len,UINT8 * p_value)724 void BTA_DmOobReply(BD_ADDR bd_addr, UINT8 len, UINT8 *p_value)
725 {
726     tBTA_DM_API_OOB_REPLY    *p_msg;
727 
728     if ((p_msg = (tBTA_DM_API_OOB_REPLY *) osi_malloc(sizeof(tBTA_DM_API_OOB_REPLY))) != NULL) {
729         p_msg->hdr.event = BTA_DM_API_OOB_REPLY_EVT;
730         if(p_value == NULL || len > BT_OCTET16_LEN) {
731             osi_free(p_msg);
732             return;
733         }
734         memcpy(p_msg->bd_addr, bd_addr, BD_ADDR_LEN);
735         p_msg->len = len;
736         memcpy(p_msg->value, p_value, len);
737         bta_sys_sendmsg(p_msg);
738     }
739 }
740 
741 /*******************************************************************************
742 **
743 ** Function         BTA_DmSecureConnectionOobReply
744 **
745 **                  This function is called to provide the OOB data for
746 **                  SMP in response to BTA_LE_OOB_REQ_EVT
747 **
748 ** Parameters:      bd_addr     - Address of the peer device
749 **                  p_c         - Pointer to Confirmation
750 **                  p_r         - Pointer to Randomizer
751 **
752 ** Returns          void
753 **
754 *******************************************************************************/
BTA_DmSecureConnectionOobReply(BD_ADDR bd_addr,UINT8 * p_c,UINT8 * p_r)755 void BTA_DmSecureConnectionOobReply(BD_ADDR bd_addr, UINT8 *p_c, UINT8 *p_r)
756 {
757     tBTA_DM_API_SC_OOB_REPLY    *p_msg;
758 
759     if ((p_msg = (tBTA_DM_API_SC_OOB_REPLY *) osi_malloc(sizeof(tBTA_DM_API_OOB_REPLY))) != NULL) {
760         p_msg->hdr.event = BTA_DM_API_SC_OOB_REPLY_EVT;
761         if((p_c == NULL) || (p_r == NULL)) {
762             return;
763         }
764         memcpy(p_msg->bd_addr, bd_addr, BD_ADDR_LEN);
765         memcpy(p_msg->c, p_c, BT_OCTET16_LEN);
766         memcpy(p_msg->r, p_r, BT_OCTET16_LEN);
767         bta_sys_sendmsg(p_msg);
768     }
769 }
770 /*******************************************************************************
771 **
772 ** Function         BTA_DmSecureConnectionCreateOobData
773 **
774 **                  This function is called to create the OOB data for
775 **                  SMP when secure connection
776 **
777 ** Returns          void
778 **
779 *******************************************************************************/
BTA_DmSecureConnectionCreateOobData(void)780 void BTA_DmSecureConnectionCreateOobData(void)
781 {
782     tBTA_DM_API_SC_CR_OOB_DATA *p_msg;
783 
784     if ((p_msg = (tBTA_DM_API_SC_CR_OOB_DATA *) osi_malloc(sizeof(tBTA_DM_API_SC_CR_OOB_DATA))) != NULL) {
785         p_msg->hdr.event = BTA_DM_API_SC_CR_OOB_DATA_EVT;
786         bta_sys_sendmsg(p_msg);
787     }
788 }
789 #endif /* BTM_OOB_INCLUDED */
790 /*******************************************************************************
791 **
792 ** Function         BTA_DmConfirm
793 **
794 ** Description      This function accepts or rejects the numerical value of the
795 **                  Simple Pairing process on BTA_DM_SP_CFM_REQ_EVT
796 **
797 ** Returns          void
798 **
799 *******************************************************************************/
800 #if (SMP_INCLUDED == TRUE)
BTA_DmConfirm(BD_ADDR bd_addr,BOOLEAN accept)801 void BTA_DmConfirm(BD_ADDR bd_addr, BOOLEAN accept)
802 {
803     tBTA_DM_API_CONFIRM    *p_msg;
804 
805     if ((p_msg = (tBTA_DM_API_CONFIRM *) osi_malloc(sizeof(tBTA_DM_API_CONFIRM))) != NULL) {
806         p_msg->hdr.event = BTA_DM_API_CONFIRM_EVT;
807         bdcpy(p_msg->bd_addr, bd_addr);
808         p_msg->accept = accept;
809         bta_sys_sendmsg(p_msg);
810     }
811 }
812 
813 /*******************************************************************************
814 **
815 ** Function         BTA_DmPasskeyReqReply
816 **
817 ** Description      This function is called to provide the passkey for
818 **                  Simple Pairing in response to BTA_DM_SP_KEY_REQ_EVT
819 **
820 ** Returns          void
821 **
822 *******************************************************************************/
823 #if (BT_SSP_INCLUDED == TRUE)
BTA_DmPasskeyReqReply(BOOLEAN accept,BD_ADDR bd_addr,UINT32 passkey)824 void BTA_DmPasskeyReqReply(BOOLEAN accept, BD_ADDR bd_addr, UINT32 passkey)
825 {
826     tBTA_DM_API_KEY_REQ    *p_msg;
827     if ((p_msg = (tBTA_DM_API_KEY_REQ *) osi_malloc(sizeof(tBTA_DM_API_KEY_REQ))) != NULL) {
828         p_msg->hdr.event = BTA_DM_API_KEY_REQ_EVT;
829         bdcpy(p_msg->bd_addr, bd_addr);
830         p_msg->accept = accept;
831         p_msg->passkey = passkey;
832         bta_sys_sendmsg(p_msg);
833     }
834 }
835 #endif ///BT_SSP_INCLUDED == TRUE
836 #endif  ///SMP_INCLUDED == TRUE
837 /*******************************************************************************
838 **
839 ** Function         BTA_DmAddDevice
840 **
841 ** Description      This function adds a device to the security database list of
842 **                  peer device
843 **
844 **
845 ** Returns          void
846 **
847 *******************************************************************************/
BTA_DmAddDevice(BD_ADDR bd_addr,DEV_CLASS dev_class,LINK_KEY link_key,tBTA_SERVICE_MASK trusted_mask,BOOLEAN is_trusted,UINT8 key_type,tBTA_IO_CAP io_cap,UINT8 pin_length,UINT8 sc_support)848 void BTA_DmAddDevice(BD_ADDR bd_addr, DEV_CLASS dev_class, LINK_KEY link_key,
849                      tBTA_SERVICE_MASK trusted_mask, BOOLEAN is_trusted,
850                      UINT8 key_type, tBTA_IO_CAP io_cap, UINT8 pin_length,
851                      UINT8 sc_support)
852 {
853 
854     tBTA_DM_API_ADD_DEVICE *p_msg;
855 
856     if ((p_msg = (tBTA_DM_API_ADD_DEVICE *) osi_malloc(sizeof(tBTA_DM_API_ADD_DEVICE))) != NULL) {
857         memset (p_msg, 0, sizeof(tBTA_DM_API_ADD_DEVICE));
858 
859         p_msg->hdr.event = BTA_DM_API_ADD_DEVICE_EVT;
860         bdcpy(p_msg->bd_addr, bd_addr);
861         p_msg->tm = trusted_mask;
862         p_msg->is_trusted = is_trusted;
863         p_msg->io_cap = io_cap;
864         p_msg->sc_support = sc_support;
865 
866         if (link_key) {
867             p_msg->link_key_known = TRUE;
868             p_msg->key_type = key_type;
869             memcpy(p_msg->link_key, link_key, LINK_KEY_LEN);
870         }
871 
872         /* Load device class if specified */
873         if (dev_class) {
874             p_msg->dc_known = TRUE;
875             memcpy (p_msg->dc, dev_class, DEV_CLASS_LEN);
876         }
877 
878         memset (p_msg->bd_name, 0, BD_NAME_LEN + 1);
879         memset (p_msg->features, 0, sizeof (p_msg->features));
880         p_msg->pin_length = pin_length;
881 
882         bta_sys_sendmsg(p_msg);
883     }
884 }
885 
886 
887 /*******************************************************************************
888 **
889 ** Function         BTA_DmRemoveDevice
890 **
891 ** Description      This function removes a device from the security database list of
892 **                  peer device. It manages unpairing even while connected.
893 **
894 **
895 ** Returns          void
896 **
897 *******************************************************************************/
BTA_DmRemoveDevice(BD_ADDR bd_addr,tBT_TRANSPORT transport)898 tBTA_STATUS BTA_DmRemoveDevice(BD_ADDR bd_addr, tBT_TRANSPORT transport)
899 {
900     tBTA_DM_API_REMOVE_DEVICE *p_msg;
901 
902     if ((p_msg = (tBTA_DM_API_REMOVE_DEVICE *) osi_malloc(sizeof(tBTA_DM_API_REMOVE_DEVICE))) != NULL) {
903         memset (p_msg, 0, sizeof(tBTA_DM_API_REMOVE_DEVICE));
904 
905         p_msg->hdr.event = BTA_DM_API_REMOVE_DEVICE_EVT;
906         bdcpy(p_msg->bd_addr, bd_addr);
907         p_msg->transport = transport;
908         bta_sys_sendmsg(p_msg);
909     } else {
910         return BTA_FAILURE;
911     }
912 
913     return BTA_SUCCESS;
914 }
915 // #endif  ///SMP_INCLUDED == TRUE
916 
917 /*******************************************************************************
918 **
919 ** Function         BTA_GetEirService
920 **
921 ** Description      This function is called to get BTA service mask from EIR.
922 **
923 ** Parameters       p_eir - pointer of EIR significant part
924 **                  p_services - return the BTA service mask
925 **
926 ** Returns          None
927 **
928 *******************************************************************************/
929 extern const UINT16 bta_service_id_to_uuid_lkup_tbl [];
BTA_GetEirService(UINT8 * p_eir,tBTA_SERVICE_MASK * p_services)930 void BTA_GetEirService( UINT8 *p_eir, tBTA_SERVICE_MASK *p_services )
931 {
932     UINT8 xx, yy;
933     UINT8 num_uuid, max_num_uuid = 32;
934     UINT8 uuid_list[32 * LEN_UUID_16];
935     UINT16 *p_uuid16 = (UINT16 *)uuid_list;
936     tBTA_SERVICE_MASK mask;
937 
938     BTM_GetEirUuidList( p_eir, LEN_UUID_16, &num_uuid, uuid_list, max_num_uuid);
939     for ( xx = 0; xx < num_uuid; xx++ ) {
940         mask = 1;
941         for ( yy = 0; yy < BTA_MAX_SERVICE_ID; yy++ ) {
942             if ( *(p_uuid16 + xx) == bta_service_id_to_uuid_lkup_tbl[yy] ) {
943                 *p_services |= mask;
944                 break;
945             }
946             mask <<= 1;
947         }
948 
949         /* for HSP v1.2 only device */
950         if (*(p_uuid16 + xx) == UUID_SERVCLASS_HEADSET_HS) {
951             *p_services |= BTA_HSP_SERVICE_MASK;
952         }
953 
954         if (*(p_uuid16 + xx) == UUID_SERVCLASS_HDP_SOURCE) {
955             *p_services |= BTA_HL_SERVICE_MASK;
956         }
957 
958         if (*(p_uuid16 + xx) == UUID_SERVCLASS_HDP_SINK) {
959             *p_services |= BTA_HL_SERVICE_MASK;
960         }
961     }
962 }
963 
964 /*******************************************************************************
965 **
966 ** Function         BTA_DmGetConnectionState
967 **
968 ** Description      Returns whether the remote device is currently connected.
969 **
970 ** Returns          0 if the device is NOT connected.
971 **
972 *******************************************************************************/
BTA_DmGetConnectionState(BD_ADDR bd_addr)973 UINT16 BTA_DmGetConnectionState( BD_ADDR bd_addr )
974 {
975     tBTA_DM_PEER_DEVICE *p_dev = bta_dm_find_peer_device(bd_addr);
976     return (p_dev && p_dev->conn_state == BTA_DM_CONNECTED);
977 }
978 
979 #if (SDP_INCLUDED == TRUE)
980 /*******************************************************************************
981 **                   Device Identification (DI) Server Functions
982 *******************************************************************************/
983 /*******************************************************************************
984 **
985 ** Function         BTA_DmSetLocalDiRecord
986 **
987 ** Description      This function adds a DI record to the local SDP database.
988 **
989 ** Returns          BTA_SUCCESS if record set successfully, otherwise error code.
990 **
991 *******************************************************************************/
BTA_DmSetLocalDiRecord(tBTA_DI_RECORD * p_device_info,UINT32 * p_handle)992 tBTA_STATUS BTA_DmSetLocalDiRecord( tBTA_DI_RECORD *p_device_info,
993                                     UINT32 *p_handle )
994 {
995     tBTA_STATUS status = BTA_FAILURE;
996 
997     if (bta_dm_di_cb.di_num < BTA_DI_NUM_MAX) {
998         if (SDP_SetLocalDiRecord((tSDP_DI_RECORD *)p_device_info, p_handle) == SDP_SUCCESS) {
999             if (!p_device_info->primary_record) {
1000                 for (uint8_t i = 1; i < BTA_DI_NUM_MAX; i++) {
1001                     if (!bta_dm_di_cb.di_handle[i]) {
1002                         bta_dm_di_cb.di_handle[i] = *p_handle;
1003                         break;
1004                     }
1005                 }
1006                 bta_dm_di_cb.di_num++;
1007             } else if (!bta_dm_di_cb.di_handle[0]) {
1008                 bta_dm_di_cb.di_handle[0] = *p_handle;
1009                 bta_dm_di_cb.di_num++;
1010             } else {
1011                 assert(bta_dm_di_cb.di_handle[0] == (*p_handle));
1012             }
1013 
1014             if (!bta_dm_di_cb.uuid_added) {
1015                 bta_sys_add_uuid(UUID_SERVCLASS_PNP_INFORMATION);
1016                 bta_dm_di_cb.uuid_added = TRUE;
1017             }
1018 
1019             status = BTA_SUCCESS;
1020         }
1021     }
1022 
1023     return status;
1024 }
1025 
1026 /*******************************************************************************
1027 **
1028 ** Function         BTA_DmRemoveLocalDiRecord
1029 **
1030 ** Description      This function removes a DI record from the local SDP database.
1031 **
1032 ** Returns          BTA_SUCCESS if record is removed successfully, otherwise error code.
1033 **
1034 *******************************************************************************/
BTA_DmRemoveLocalDiRecord(UINT32 handle)1035 tBTA_STATUS BTA_DmRemoveLocalDiRecord(UINT32 handle)
1036 {
1037     tBTA_STATUS status = BTA_FAILURE;
1038 
1039     for (uint8_t i = 0; i < BTA_DI_NUM_MAX; i++) {
1040         if (bta_dm_di_cb.di_handle[i] == handle) {
1041             if (SDP_DeleteRecord(handle)) {
1042                 bta_dm_di_cb.di_handle[i] = 0;
1043                 bta_dm_di_cb.di_num--;
1044                 status = BTA_SUCCESS;
1045                 break;
1046             }
1047         }
1048     }
1049 
1050     if (bta_dm_di_cb.di_num == 0 && bta_dm_di_cb.uuid_added) {
1051         bta_sys_remove_uuid(UUID_SERVCLASS_PNP_INFORMATION);
1052     }
1053 
1054     return status;
1055 }
1056 #endif  ///SDP_INCLUDED == TRUE
1057 /*******************************************************************************
1058 **
1059 ** Function         bta_dmexecutecallback
1060 **
1061 ** Description      This function will request BTA to execute a call back in the context of BTU task
1062 **                  This API was named in lower case because it is only intended
1063 **                  for the internal customers(like BTIF).
1064 **
1065 ** Returns          void
1066 **
1067 *******************************************************************************/
bta_dmexecutecallback(tBTA_DM_EXEC_CBACK * p_callback,void * p_param)1068 void bta_dmexecutecallback (tBTA_DM_EXEC_CBACK *p_callback, void *p_param)
1069 {
1070     tBTA_DM_API_EXECUTE_CBACK *p_msg;
1071 
1072     if ((p_msg = (tBTA_DM_API_EXECUTE_CBACK *) osi_malloc(sizeof(tBTA_DM_API_EXECUTE_CBACK))) != NULL) {
1073         p_msg->hdr.event = BTA_DM_API_EXECUTE_CBACK_EVT;
1074         p_msg->p_param = p_param;
1075         p_msg->p_exec_cback = p_callback;
1076         bta_sys_sendmsg(p_msg);
1077     }
1078 }
1079 
1080 /*******************************************************************************
1081 **
1082 ** Function         BTA_DmAddBleKey
1083 **
1084 ** Description      Add/modify LE device information.  This function will be
1085 **                  normally called during host startup to restore all required
1086 **                  information stored in the NVRAM.
1087 **
1088 ** Parameters:      bd_addr          - BD address of the peer
1089 **                  p_le_key         - LE key values.
1090 **                  key_type         - LE SMP key type.
1091 **
1092 ** Returns          BTA_SUCCESS if successful
1093 **                  BTA_FAIL if operation failed.
1094 **
1095 *******************************************************************************/
1096 #if BLE_INCLUDED == TRUE
1097 #if SMP_INCLUDED == TRUE
BTA_DmAddBleKey(BD_ADDR bd_addr,tBTA_LE_KEY_VALUE * p_le_key,tBTA_LE_KEY_TYPE key_type)1098 void BTA_DmAddBleKey (BD_ADDR bd_addr, tBTA_LE_KEY_VALUE *p_le_key, tBTA_LE_KEY_TYPE key_type)
1099 {
1100     tBTA_DM_API_ADD_BLEKEY *p_msg;
1101 
1102     if ((p_msg = (tBTA_DM_API_ADD_BLEKEY *) osi_malloc(sizeof(tBTA_DM_API_ADD_BLEKEY))) != NULL) {
1103         memset (p_msg, 0, sizeof(tBTA_DM_API_ADD_BLEKEY));
1104 
1105         p_msg->hdr.event = BTA_DM_API_ADD_BLEKEY_EVT;
1106         p_msg->key_type = key_type;
1107         bdcpy(p_msg->bd_addr, bd_addr);
1108         memcpy(&p_msg->blekey, p_le_key, sizeof(tBTA_LE_KEY_VALUE));
1109 
1110         bta_sys_sendmsg(p_msg);
1111     }
1112 
1113 }
1114 
1115 /*******************************************************************************
1116 **
1117 ** Function         BTA_DmAddBleDevice
1118 **
1119 ** Description      Add a BLE device.  This function will be normally called
1120 **                  during host startup to restore all required information
1121 **                  for a LE device stored in the NVRAM.
1122 **
1123 ** Parameters:      bd_addr          - BD address of the peer
1124 **                  dev_type         - Remote device's device type.
1125 **                  auth_mode        - auth mode
1126 **                  addr_type        - LE device address type.
1127 **
1128 ** Returns          void
1129 **
1130 *******************************************************************************/
BTA_DmAddBleDevice(BD_ADDR bd_addr,tBLE_ADDR_TYPE addr_type,int auth_mode,tBT_DEVICE_TYPE dev_type)1131 void BTA_DmAddBleDevice(BD_ADDR bd_addr, tBLE_ADDR_TYPE addr_type, int auth_mode, tBT_DEVICE_TYPE dev_type)
1132 {
1133     tBTA_DM_API_ADD_BLE_DEVICE *p_msg;
1134 
1135     if ((p_msg = (tBTA_DM_API_ADD_BLE_DEVICE *) osi_malloc(sizeof(tBTA_DM_API_ADD_BLE_DEVICE))) != NULL) {
1136         memset (p_msg, 0, sizeof(tBTA_DM_API_ADD_BLE_DEVICE));
1137 
1138         p_msg->hdr.event = BTA_DM_API_ADD_BLEDEVICE_EVT;
1139         bdcpy(p_msg->bd_addr, bd_addr);
1140         p_msg->addr_type = addr_type;
1141         p_msg->auth_mode = auth_mode;
1142         p_msg->dev_type = dev_type;
1143 
1144         bta_sys_sendmsg(p_msg);
1145     }
1146 }
1147 /*******************************************************************************
1148 **
1149 ** Function         BTA_DmBlePasskeyReply
1150 **
1151 ** Description      Send BLE SMP passkey reply.
1152 **
1153 ** Parameters:      bd_addr          - BD address of the peer
1154 **                  accept           - passkey entry successful or declined.
1155 **                  passkey          - passkey value, must be a 6 digit number,
1156 **                                     can be lead by 0.
1157 **
1158 ** Returns          void
1159 **
1160 *******************************************************************************/
BTA_DmBlePasskeyReply(BD_ADDR bd_addr,BOOLEAN accept,UINT32 passkey)1161 void BTA_DmBlePasskeyReply(BD_ADDR bd_addr, BOOLEAN accept, UINT32 passkey)
1162 {
1163     tBTA_DM_API_PASSKEY_REPLY    *p_msg;
1164 
1165     if ((p_msg = (tBTA_DM_API_PASSKEY_REPLY *) osi_malloc(sizeof(tBTA_DM_API_PASSKEY_REPLY))) != NULL) {
1166         memset(p_msg, 0, sizeof(tBTA_DM_API_PASSKEY_REPLY));
1167 
1168         p_msg->hdr.event = BTA_DM_API_BLE_PASSKEY_REPLY_EVT;
1169         bdcpy(p_msg->bd_addr, bd_addr);
1170         p_msg->accept = accept;
1171 
1172         if (accept) {
1173             p_msg->passkey = passkey;
1174         }
1175         bta_sys_sendmsg(p_msg);
1176     }
1177 }
1178 
BTA_DmBleSetStaticPasskey(bool add,uint32_t passkey)1179 void BTA_DmBleSetStaticPasskey(bool add, uint32_t passkey)
1180 {
1181     tBTA_DM_API_SET_DEFAULT_PASSKEY    *p_msg;
1182 
1183     if ((p_msg = (tBTA_DM_API_SET_DEFAULT_PASSKEY *) osi_malloc(sizeof(tBTA_DM_API_SET_DEFAULT_PASSKEY))) != NULL) {
1184         memset(p_msg, 0, sizeof(tBTA_DM_API_SET_DEFAULT_PASSKEY));
1185 
1186         p_msg->hdr.event = BTA_DM_API_BLE_SET_STATIC_PASSKEY_EVT;
1187         p_msg->add = add;
1188         p_msg->static_passkey = passkey;
1189         bta_sys_sendmsg(p_msg);
1190     }
1191 }
1192 
1193 /*******************************************************************************
1194 **
1195 ** Function         BTA_DmBleConfirmReply
1196 **
1197 ** Description      Send BLE SMP SC user confirmation reply.
1198 **
1199 ** Parameters:      bd_addr          - BD address of the peer
1200 **                  accept           - numbers to compare are the same or different.
1201 **
1202 ** Returns          void
1203 **
1204 *******************************************************************************/
BTA_DmBleConfirmReply(BD_ADDR bd_addr,BOOLEAN accept)1205 void BTA_DmBleConfirmReply(BD_ADDR bd_addr, BOOLEAN accept)
1206 {
1207     tBTA_DM_API_CONFIRM *p_msg = (tBTA_DM_API_CONFIRM *)osi_malloc(sizeof(tBTA_DM_API_CONFIRM));
1208     if (p_msg != NULL) {
1209         memset(p_msg, 0, sizeof(tBTA_DM_API_CONFIRM));
1210         p_msg->hdr.event = BTA_DM_API_BLE_CONFIRM_REPLY_EVT;
1211         bdcpy(p_msg->bd_addr, bd_addr);
1212         p_msg->accept = accept;
1213         bta_sys_sendmsg(p_msg);
1214     }
1215 }
1216 
1217 /*******************************************************************************
1218 **
1219 ** Function         BTA_DmBleSecurityGrant
1220 **
1221 ** Description      Grant security request access.
1222 **
1223 ** Parameters:      bd_addr          - BD address of the peer
1224 **                  res              - security grant status.
1225 **
1226 ** Returns          void
1227 **
1228 *******************************************************************************/
BTA_DmBleSecurityGrant(BD_ADDR bd_addr,tBTA_DM_BLE_SEC_GRANT res)1229 void BTA_DmBleSecurityGrant(BD_ADDR bd_addr, tBTA_DM_BLE_SEC_GRANT res)
1230 {
1231     tBTA_DM_API_BLE_SEC_GRANT    *p_msg;
1232 
1233     if ((p_msg = (tBTA_DM_API_BLE_SEC_GRANT *) osi_malloc(sizeof(tBTA_DM_API_BLE_SEC_GRANT))) != NULL) {
1234         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_SEC_GRANT));
1235 
1236         p_msg->hdr.event = BTA_DM_API_BLE_SEC_GRANT_EVT;
1237         bdcpy(p_msg->bd_addr, bd_addr);
1238         p_msg->res = res;
1239 
1240         bta_sys_sendmsg(p_msg);
1241     }
1242 }
1243 #endif  ///SMP_INCLUDED == TRUE
1244 
1245 
1246 /*******************************************************************************
1247 **
1248 ** Function         BTA_DmSetBlePrefConnParams
1249 **
1250 ** Description      This function is called to set the preferred connection
1251 **                  parameters when default connection parameter is not desired.
1252 **
1253 ** Parameters:      bd_addr          - BD address of the peripheral
1254 **                  scan_interval    - scan interval
1255 **                  scan_window      - scan window
1256 **                  min_conn_int     - minimum preferred connection interval
1257 **                  max_conn_int     - maximum preferred connection interval
1258 **                  slave_latency    - preferred slave latency
1259 **                  supervision_tout - preferred supervision timeout
1260 **
1261 **
1262 ** Returns          void
1263 **
1264 *******************************************************************************/
BTA_DmSetBlePrefConnParams(BD_ADDR bd_addr,UINT16 min_conn_int,UINT16 max_conn_int,UINT16 slave_latency,UINT16 supervision_tout)1265 void BTA_DmSetBlePrefConnParams(BD_ADDR bd_addr,
1266                                 UINT16 min_conn_int, UINT16 max_conn_int,
1267                                 UINT16 slave_latency, UINT16 supervision_tout )
1268 {
1269 #if BLE_INCLUDED == TRUE
1270     tBTA_DM_API_BLE_CONN_PARAMS    *p_msg;
1271 
1272     if ((p_msg = (tBTA_DM_API_BLE_CONN_PARAMS *) osi_malloc(sizeof(tBTA_DM_API_BLE_CONN_PARAMS))) != NULL) {
1273         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_CONN_PARAMS));
1274 
1275         p_msg->hdr.event = BTA_DM_API_BLE_CONN_PARAM_EVT;
1276 
1277         memcpy(p_msg->peer_bda, bd_addr, BD_ADDR_LEN);
1278 
1279         p_msg->conn_int_max     = max_conn_int;
1280         p_msg->conn_int_min     = min_conn_int;
1281         p_msg->slave_latency    = slave_latency;
1282         p_msg->supervision_tout = supervision_tout;
1283 
1284         bta_sys_sendmsg(p_msg);
1285     }
1286 #endif
1287 }
1288 
1289 /*******************************************************************************
1290 **
1291 ** Function         BTA_DmSetBleConnScanParams
1292 **
1293 ** Description      This function is called to set scan parameters used in
1294 **                  BLE connection request
1295 **
1296 ** Parameters:      scan_interval    - scan interval
1297 **                  scan_window      - scan window
1298 **
1299 ** Returns          void
1300 **
1301 *******************************************************************************/
BTA_DmSetBleConnScanParams(UINT32 scan_interval,UINT32 scan_window)1302 void BTA_DmSetBleConnScanParams(UINT32 scan_interval, UINT32 scan_window)
1303 {
1304     tBTA_DM_API_BLE_SCAN_PARAMS  *p_msg;
1305     if ((p_msg = (tBTA_DM_API_BLE_SCAN_PARAMS *)osi_malloc(sizeof(tBTA_DM_API_BLE_SCAN_PARAMS))) != NULL) {
1306         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_SCAN_PARAMS));
1307         p_msg->hdr.event = BTA_DM_API_BLE_CONN_SCAN_PARAM_EVT;
1308         p_msg->scan_int         = scan_interval;
1309         p_msg->scan_window      = scan_window;
1310         bta_sys_sendmsg(p_msg);
1311     }
1312 }
1313 
1314 /*******************************************************************************
1315 **
1316 ** Function         BTA_DmSetBleScanParams
1317 **
1318 ** Description      This function is called to set scan parameters
1319 **
1320 ** Parameters:      client_if - Client IF
1321 **                  scan_interval - scan interval
1322 **                  scan_window - scan window
1323 **                  scan_mode - scan mode
1324 **                  scan_param_setup_status_cback - Set scan param status callback
1325 **
1326 ** Returns          void
1327 **
1328 *******************************************************************************/
BTA_DmSetBleScanParams(tGATT_IF client_if,UINT32 scan_interval,UINT32 scan_window,tBLE_SCAN_MODE scan_mode,tBLE_SCAN_PARAM_SETUP_CBACK scan_param_setup_cback)1329 void BTA_DmSetBleScanParams(tGATT_IF client_if, UINT32 scan_interval,
1330                             UINT32 scan_window, tBLE_SCAN_MODE scan_mode,
1331                             tBLE_SCAN_PARAM_SETUP_CBACK scan_param_setup_cback)
1332 {
1333     tBTA_DM_API_BLE_SCAN_PARAMS *p_msg;
1334 
1335     if ((p_msg = (tBTA_DM_API_BLE_SCAN_PARAMS *)osi_malloc(sizeof(tBTA_DM_API_BLE_SCAN_PARAMS))) != NULL) {
1336         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_SCAN_PARAMS));
1337         p_msg->hdr.event = BTA_DM_API_BLE_SCAN_PARAM_EVT;
1338         p_msg->client_if = client_if;
1339         p_msg->scan_int = scan_interval;
1340         p_msg->scan_window = scan_window;
1341         p_msg->scan_mode = scan_mode;
1342         p_msg->scan_param_setup_cback = scan_param_setup_cback;
1343 
1344         bta_sys_sendmsg(p_msg);
1345     }
1346 }
1347 
1348 
1349 /*******************************************************************************
1350 **
1351 ** Function         BTA_DmSetBleScanFilterParams
1352 **
1353 ** Description      This function is called to set scan parameters
1354 **
1355 ** Parameters:      client_if - Client IF
1356 **                  scan_interval - scan interval
1357 **                  scan_window - scan window
1358 **                  scan_mode - scan mode
1359 **                  scan_duplicate_filter - scan duplicate filter
1360 **                  scan_param_setup_status_cback - Set scan param status callback
1361 **
1362 ** Returns          void
1363 **
1364 *******************************************************************************/
BTA_DmSetBleScanFilterParams(tGATT_IF client_if,UINT32 scan_interval,UINT32 scan_window,tBLE_SCAN_MODE scan_mode,UINT8 scan_fil_poilcy,UINT8 addr_type_own,UINT8 scan_duplicate_filter,tBLE_SCAN_PARAM_SETUP_CBACK scan_param_setup_cback)1365 void BTA_DmSetBleScanFilterParams(tGATT_IF client_if, UINT32 scan_interval,
1366                                   UINT32 scan_window, tBLE_SCAN_MODE scan_mode, UINT8 scan_fil_poilcy,
1367                                   UINT8 addr_type_own, UINT8 scan_duplicate_filter, tBLE_SCAN_PARAM_SETUP_CBACK scan_param_setup_cback)
1368 {
1369     tBTA_DM_API_BLE_SCAN_FILTER_PARAMS *p_msg;
1370 
1371     if ((p_msg = (tBTA_DM_API_BLE_SCAN_FILTER_PARAMS *)osi_malloc(sizeof(tBTA_DM_API_BLE_SCAN_FILTER_PARAMS))) != NULL) {
1372         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_SCAN_FILTER_PARAMS));
1373         p_msg->hdr.event = BTA_DM_API_BLE_SCAN_FIL_PARAM_EVT;
1374         p_msg->client_if = client_if;
1375         p_msg->scan_int = scan_interval;
1376         p_msg->scan_window = scan_window;
1377         p_msg->scan_mode = scan_mode;
1378         p_msg->addr_type_own = addr_type_own;
1379         p_msg->scan_duplicate_filter = scan_duplicate_filter;
1380         p_msg->scan_filter_policy = scan_fil_poilcy;
1381         p_msg->scan_param_setup_cback = scan_param_setup_cback;
1382 
1383         bta_sys_sendmsg(p_msg);
1384     }
1385 
1386 
1387 }
1388 
1389 /*******************************************************************************
1390 **
1391 ** Function         BTA_DmSetBleAdvParams
1392 **
1393 ** Description      This function sets the advertising parameters BLE functionality.
1394 **                  It is to be called when device act in peripheral or broadcaster
1395 **                  role.
1396 **
1397 **
1398 ** Returns          void
1399 **
1400 *******************************************************************************/
BTA_DmSetBleAdvParams(UINT16 adv_int_min,UINT16 adv_int_max,tBLE_BD_ADDR * p_dir_bda)1401 void BTA_DmSetBleAdvParams (UINT16 adv_int_min, UINT16 adv_int_max,
1402                             tBLE_BD_ADDR *p_dir_bda)
1403 {
1404 #if BLE_INCLUDED == TRUE
1405     tBTA_DM_API_BLE_ADV_PARAMS    *p_msg;
1406 
1407     APPL_TRACE_API ("BTA_DmSetBleAdvParam: %d, %d\n", adv_int_min, adv_int_max);
1408 
1409     if ((p_msg = (tBTA_DM_API_BLE_ADV_PARAMS *) osi_malloc(sizeof(tBTA_DM_API_BLE_ADV_PARAMS)
1410                  + sizeof(tBLE_BD_ADDR))) != NULL) {
1411         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_ADV_PARAMS) + sizeof(tBLE_BD_ADDR));
1412 
1413         p_msg->hdr.event = BTA_DM_API_BLE_ADV_PARAM_EVT;
1414 
1415         p_msg->adv_int_min      = adv_int_min;
1416         p_msg->adv_int_max      = adv_int_max;
1417 
1418         if (p_dir_bda != NULL) {
1419             p_msg->p_dir_bda = (tBLE_BD_ADDR *)(p_msg + 1);
1420             memcpy(p_msg->p_dir_bda, p_dir_bda, sizeof(tBLE_BD_ADDR));
1421         }
1422 
1423         bta_sys_sendmsg(p_msg);
1424     }
1425 #endif
1426 }
1427 
BTA_DmSetBleAdvParamsAll(UINT16 adv_int_min,UINT16 adv_int_max,UINT8 adv_type,tBLE_ADDR_TYPE addr_type_own,tBTM_BLE_ADV_CHNL_MAP chnl_map,tBTM_BLE_AFP adv_fil_pol,tBLE_BD_ADDR * p_dir_bda,tBTA_START_ADV_CMPL_CBACK p_start_adv_cb)1428 void BTA_DmSetBleAdvParamsAll (UINT16 adv_int_min, UINT16 adv_int_max,
1429                                UINT8 adv_type, tBLE_ADDR_TYPE addr_type_own,
1430                                tBTM_BLE_ADV_CHNL_MAP chnl_map, tBTM_BLE_AFP adv_fil_pol,
1431                                tBLE_BD_ADDR *p_dir_bda, tBTA_START_ADV_CMPL_CBACK p_start_adv_cb)
1432 {
1433 #if BLE_INCLUDED == TRUE
1434     tBTA_DM_API_BLE_ADV_PARAMS_ALL    *p_msg;
1435 
1436     APPL_TRACE_API ("BTA_DmSetBleAdvParamsAll: %d, %d\n", adv_int_min, adv_int_max);
1437     APPL_TRACE_API ("adv_type = %d, addr_type_own = %d, chnl_map = %d, adv_fil_pol = %d\n",
1438                       adv_type, addr_type_own, chnl_map, adv_fil_pol);
1439     if ((p_msg = (tBTA_DM_API_BLE_ADV_PARAMS_ALL *) osi_malloc(sizeof(tBTA_DM_API_BLE_ADV_PARAMS_ALL)
1440                  + sizeof(tBLE_BD_ADDR))) != NULL) {
1441         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_ADV_PARAMS_ALL));
1442 
1443         p_msg->hdr.event = BTA_DM_API_BLE_ADV_PARAM_All_EVT;
1444 
1445         p_msg->adv_int_min      = adv_int_min;
1446         p_msg->adv_int_max      = adv_int_max;
1447         p_msg->adv_type         = adv_type;
1448         p_msg->addr_type_own    = addr_type_own;
1449         p_msg->channel_map      = chnl_map;
1450         p_msg->adv_filter_policy    = adv_fil_pol;
1451         p_msg->p_start_adv_cback    = p_start_adv_cb;
1452         if (p_dir_bda != NULL) {
1453             p_msg->p_dir_bda = (tBLE_BD_ADDR *)(p_msg + 1);
1454             memcpy(p_msg->p_dir_bda, p_dir_bda, sizeof(tBLE_BD_ADDR));
1455         }
1456 
1457         bta_sys_sendmsg(p_msg);
1458     }
1459 #endif
1460 }
1461 #endif  ///BLE_INCLUDED == TRUE
1462 
1463 
1464 /*******************************************************************************
1465 **                      BLE ADV data management API
1466 ********************************************************************************/
1467 
1468 #if BLE_INCLUDED == TRUE
1469 /*******************************************************************************
1470 **
1471 ** Function         BTA_DmBleSetAdvConfig
1472 **
1473 ** Description      This function is called to override the BTA default ADV parameters.
1474 **
1475 ** Parameters       data_mask: adv data mask.
1476 **                  p_adv_cfg: Pointer to User defined ADV data structure. This
1477 **                             memory space can not be freed until p_adv_data_cback
1478 **                             is received.
1479 **                  p_adv_data_cback: set adv data complete callback.
1480 **
1481 ** Returns          None
1482 **
1483 *******************************************************************************/
BTA_DmBleSetAdvConfig(tBTA_BLE_AD_MASK data_mask,tBTA_BLE_ADV_DATA * p_adv_cfg,tBTA_SET_ADV_DATA_CMPL_CBACK * p_adv_data_cback)1484 void BTA_DmBleSetAdvConfig (tBTA_BLE_AD_MASK data_mask, tBTA_BLE_ADV_DATA *p_adv_cfg,
1485                             tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback)
1486 {
1487     tBTA_DM_API_SET_ADV_CONFIG  *p_msg;
1488 
1489     if ((p_msg = (tBTA_DM_API_SET_ADV_CONFIG *)
1490                  osi_malloc(sizeof(tBTA_DM_API_SET_ADV_CONFIG))) != NULL) {
1491         p_msg->hdr.event = BTA_DM_API_BLE_SET_ADV_CONFIG_EVT;
1492         p_msg->data_mask = data_mask;
1493         p_msg->p_adv_data_cback = p_adv_data_cback;
1494         p_msg->p_adv_cfg = p_adv_cfg;
1495 
1496         bta_sys_sendmsg(p_msg);
1497     }
1498 }
1499 
1500 /*******************************************************************************
1501 **
1502 ** Function         BTA_DmBleSetAdvConfigRaw
1503 **
1504 ** Description      This function is called to set raw Advertising data
1505 **
1506 ** Parameters       p_raw_adv : raw advertising data.
1507 **                  raw_adv_len : raw advertising data length.
1508 **                  p_adv_data_cback : set adv data complete callback.
1509 **
1510 ** Returns          None
1511 **
1512 *******************************************************************************/
BTA_DmBleSetAdvConfigRaw(UINT8 * p_raw_adv,UINT32 raw_adv_len,tBTA_SET_ADV_DATA_CMPL_CBACK * p_adv_data_cback)1513 void BTA_DmBleSetAdvConfigRaw (UINT8 *p_raw_adv, UINT32 raw_adv_len,
1514                             tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback)
1515 {
1516     tBTA_DM_API_SET_ADV_CONFIG_RAW  *p_msg;
1517 
1518     if ((p_msg = (tBTA_DM_API_SET_ADV_CONFIG_RAW *)
1519                  osi_malloc(sizeof(tBTA_DM_API_SET_ADV_CONFIG_RAW) + raw_adv_len)) != NULL) {
1520         p_msg->hdr.event = BTA_DM_API_BLE_SET_ADV_CONFIG_RAW_EVT;
1521         p_msg->p_adv_data_cback = p_adv_data_cback;
1522         p_msg->p_raw_adv = (UINT8 *)(p_msg + 1);
1523         memcpy(p_msg->p_raw_adv, p_raw_adv, raw_adv_len);
1524         p_msg->raw_adv_len = raw_adv_len;
1525 
1526         bta_sys_sendmsg(p_msg);
1527     }
1528 }
1529 
1530 /*******************************************************************************
1531 **
1532 ** Function         BTA_DmBleSetLongAdv
1533 **
1534 ** Description      This function is called to set long Advertising data
1535 **
1536 ** Parameters       adv_data : long advertising data.
1537 **                  adv_data_len : long advertising data length.
1538 **                  p_adv_data_cback : set long adv data complete callback.
1539 **
1540 ** Returns          None
1541 **
1542 *******************************************************************************/
BTA_DmBleSetLongAdv(UINT8 * adv_data,UINT32 adv_data_len,tBTA_SET_ADV_DATA_CMPL_CBACK * p_adv_data_cback)1543 void BTA_DmBleSetLongAdv (UINT8 *adv_data, UINT32 adv_data_len,
1544                             tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback)
1545 {
1546     tBTA_DM_API_SET_LONG_ADV  *p_msg;
1547 
1548     if ((p_msg = (tBTA_DM_API_SET_LONG_ADV *)
1549                  osi_malloc(sizeof(tBTA_DM_API_SET_LONG_ADV))) != NULL) {
1550         p_msg->hdr.event = BTA_DM_API_BLE_SET_LONG_ADV_EVT;
1551         p_msg->p_adv_data_cback = p_adv_data_cback;
1552         p_msg->adv_data = adv_data;
1553         p_msg->adv_data_len = adv_data_len;
1554 
1555         bta_sys_sendmsg(p_msg);
1556     }
1557 }
1558 
1559 /*******************************************************************************
1560 **
1561 ** Function         BTA_DmBleSetScanRsp
1562 **
1563 ** Description      This function is called to override the BTA scan response.
1564 **
1565 ** Parameters       Pointer to User defined ADV data structure
1566 **
1567 ** Returns          None
1568 **
1569 *******************************************************************************/
BTA_DmBleSetScanRsp(tBTA_BLE_AD_MASK data_mask,tBTA_BLE_ADV_DATA * p_adv_cfg,tBTA_SET_ADV_DATA_CMPL_CBACK * p_adv_data_cback)1570 extern void BTA_DmBleSetScanRsp (tBTA_BLE_AD_MASK data_mask, tBTA_BLE_ADV_DATA *p_adv_cfg,
1571                                  tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback)
1572 {
1573     tBTA_DM_API_SET_ADV_CONFIG  *p_msg;
1574 
1575     if ((p_msg = (tBTA_DM_API_SET_ADV_CONFIG *)
1576                  osi_malloc(sizeof(tBTA_DM_API_SET_ADV_CONFIG))) != NULL) {
1577         p_msg->hdr.event = BTA_DM_API_BLE_SET_SCAN_RSP_EVT;
1578         p_msg->data_mask = data_mask;
1579         p_msg->p_adv_data_cback = p_adv_data_cback;
1580         p_msg->p_adv_cfg = p_adv_cfg;
1581 
1582         bta_sys_sendmsg(p_msg);
1583     }
1584 }
1585 
1586 /*******************************************************************************
1587 **
1588 ** Function         BTA_DmBleSetScanRspRaw
1589 **
1590 ** Description      This function is called to set raw scan response data
1591 **
1592 ** Parameters       p_raw_scan_rsp : raw scan_rspertising data.
1593 **                  raw_scan_rsp_len : raw scan_rspertising data length.
1594 **                  p_scan_rsp_data_cback : set scan_rsp data complete callback.
1595 **
1596 ** Returns          None
1597 **
1598 *******************************************************************************/
BTA_DmBleSetScanRspRaw(UINT8 * p_raw_scan_rsp,UINT32 raw_scan_rsp_len,tBTA_SET_ADV_DATA_CMPL_CBACK * p_scan_rsp_data_cback)1599 void BTA_DmBleSetScanRspRaw (UINT8 *p_raw_scan_rsp, UINT32 raw_scan_rsp_len,
1600                             tBTA_SET_ADV_DATA_CMPL_CBACK *p_scan_rsp_data_cback)
1601 {
1602     tBTA_DM_API_SET_ADV_CONFIG_RAW  *p_msg;
1603 
1604     if ((p_msg = (tBTA_DM_API_SET_ADV_CONFIG_RAW *)
1605                  osi_malloc(sizeof(tBTA_DM_API_SET_ADV_CONFIG_RAW) + raw_scan_rsp_len)) != NULL) {
1606         p_msg->hdr.event = BTA_DM_API_BLE_SET_SCAN_RSP_RAW_EVT;
1607         p_msg->p_adv_data_cback = p_scan_rsp_data_cback;
1608         p_msg->p_raw_adv = (UINT8 *)(p_msg + 1);
1609         memcpy(p_msg->p_raw_adv, p_raw_scan_rsp, raw_scan_rsp_len);
1610         p_msg->raw_adv_len = raw_scan_rsp_len;
1611 
1612         bta_sys_sendmsg(p_msg);
1613     }
1614 }
1615 
1616 /*******************************************************************************
1617 **
1618 ** Function         BTA_DmUpdateDuplicateExceptionalList
1619 **
1620 ** Description      This function is called to update duplicate scan exceptional list
1621 **
1622 ** Parameters       subcode : add, remove or clean duplicate scan exceptional list.
1623 **                  type : device info type.
1624 **                  device_info:  device info
1625 **                  p_update_duplicate_ignore_list_cback :  update complete callback.
1626 **
1627 ** Returns          None
1628 **
1629 *******************************************************************************/
BTA_DmUpdateDuplicateExceptionalList(UINT8 subcode,UINT32 type,BD_ADDR device_info,tBTA_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_CMPL_CBACK p_update_duplicate_exceptional_list_cback)1630 void BTA_DmUpdateDuplicateExceptionalList(UINT8 subcode, UINT32 type, BD_ADDR device_info, tBTA_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_CMPL_CBACK p_update_duplicate_exceptional_list_cback)
1631 {
1632     tBTA_DM_API_UPDATE_DUPLICATE_EXCEPTIONAL_LIST *p_msg;
1633     if ((p_msg = (tBTA_DM_API_UPDATE_DUPLICATE_EXCEPTIONAL_LIST *)osi_malloc(sizeof(tBTA_DM_API_UPDATE_DUPLICATE_EXCEPTIONAL_LIST))) != NULL) {
1634         p_msg->hdr.event = BTA_DM_API_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_EVT;
1635         p_msg->subcode = subcode;
1636         p_msg->type = type;
1637         p_msg->exceptional_list_cb = p_update_duplicate_exceptional_list_cback;
1638         memcpy(p_msg->device_info, device_info, sizeof(BD_ADDR));
1639 
1640         bta_sys_sendmsg(p_msg);
1641     }
1642 }
1643 
1644 /*******************************************************************************
1645 **
1646 ** Function         BTA_DmBleSetStorageParams
1647 **
1648 ** Description      This function is called to override the BTA scan response.
1649 **
1650 ** Parameters       batch_scan_full_max -Max storage space (in %) allocated to full scanning
1651 **                  batch_scan_trunc_max -Max storage space (in %) allocated to truncated scanning
1652 **                  batch_scan_notify_threshold -Setup notification level based on total space
1653 **                  p_setup_cback - Setup callback pointer
1654 **                  p_thres_cback - Threshold callback pointer
1655 **                  p_rep_cback - Reports callback pointer
1656 **                  ref_value - Ref value
1657 **
1658 ** Returns          None
1659 **
1660 *******************************************************************************/
BTA_DmBleSetStorageParams(UINT8 batch_scan_full_max,UINT8 batch_scan_trunc_max,UINT8 batch_scan_notify_threshold,tBTA_BLE_SCAN_SETUP_CBACK * p_setup_cback,tBTA_BLE_SCAN_THRESHOLD_CBACK * p_thres_cback,tBTA_BLE_SCAN_REP_CBACK * p_rep_cback,tBTA_DM_BLE_REF_VALUE ref_value)1661 extern void BTA_DmBleSetStorageParams(UINT8 batch_scan_full_max,
1662                                       UINT8 batch_scan_trunc_max,
1663                                       UINT8 batch_scan_notify_threshold,
1664                                       tBTA_BLE_SCAN_SETUP_CBACK *p_setup_cback,
1665                                       tBTA_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback,
1666                                       tBTA_BLE_SCAN_REP_CBACK *p_rep_cback,
1667                                       tBTA_DM_BLE_REF_VALUE ref_value)
1668 {
1669     tBTA_DM_API_SET_STORAGE_CONFIG  *p_msg;
1670     bta_dm_cb.p_setup_cback = p_setup_cback;
1671     if ((p_msg = (tBTA_DM_API_SET_STORAGE_CONFIG *)
1672                  osi_malloc(sizeof(tBTA_DM_API_SET_STORAGE_CONFIG))) != NULL) {
1673         p_msg->hdr.event = BTA_DM_API_BLE_SETUP_STORAGE_EVT;
1674         p_msg->p_setup_cback = bta_ble_scan_setup_cb;
1675         p_msg->p_thres_cback = p_thres_cback;
1676         p_msg->p_read_rep_cback = p_rep_cback;
1677         p_msg->ref_value = ref_value;
1678         p_msg->batch_scan_full_max = batch_scan_full_max;
1679         p_msg->batch_scan_trunc_max = batch_scan_trunc_max;
1680         p_msg->batch_scan_notify_threshold = batch_scan_notify_threshold;
1681         bta_sys_sendmsg(p_msg);
1682     }
1683 }
1684 
1685 /*******************************************************************************
1686 **
1687 ** Function         BTA_DmBleEnableBatchScan
1688 **
1689 ** Description      This function is called to enable the batch scan
1690 **
1691 ** Parameters       scan_mode -Batch scan mode
1692 **                  scan_interval - Scan interval
1693 **                  scan_window - Scan window
1694 **                  discard_rule -Discard rules
1695 **                  addr_type - Address type
1696 **                  ref_value - Reference value
1697 **
1698 ** Returns          None
1699 **
1700 *******************************************************************************/
BTA_DmBleEnableBatchScan(tBTA_BLE_BATCH_SCAN_MODE scan_mode,UINT32 scan_interval,UINT32 scan_window,tBTA_BLE_DISCARD_RULE discard_rule,tBLE_ADDR_TYPE addr_type,tBTA_DM_BLE_REF_VALUE ref_value)1701 extern void BTA_DmBleEnableBatchScan(tBTA_BLE_BATCH_SCAN_MODE scan_mode,
1702                                      UINT32 scan_interval, UINT32 scan_window,
1703                                      tBTA_BLE_DISCARD_RULE discard_rule,
1704                                      tBLE_ADDR_TYPE        addr_type,
1705                                      tBTA_DM_BLE_REF_VALUE ref_value)
1706 {
1707     tBTA_DM_API_ENABLE_SCAN  *p_msg;
1708 
1709     if ((p_msg = (tBTA_DM_API_ENABLE_SCAN *) osi_malloc(sizeof(tBTA_DM_API_ENABLE_SCAN))) != NULL) {
1710         p_msg->hdr.event = BTA_DM_API_BLE_ENABLE_BATCH_SCAN_EVT;
1711         p_msg->scan_mode = scan_mode;
1712         p_msg->scan_int = scan_interval;
1713         p_msg->scan_window = scan_window;
1714         p_msg->discard_rule = discard_rule;
1715         p_msg->addr_type = addr_type;
1716         p_msg->ref_value = ref_value;
1717         bta_sys_sendmsg(p_msg);
1718     }
1719 }
1720 
1721 /*******************************************************************************
1722 **
1723 ** Function         BTA_DmBleDisableBatchScan
1724 **
1725 ** Description      This function is called to disable the batch scan
1726 **
1727 ** Parameters       ref_value - Reference value
1728 **
1729 ** Returns          None
1730 **
1731 *******************************************************************************/
BTA_DmBleDisableBatchScan(tBTA_DM_BLE_REF_VALUE ref_value)1732 extern void BTA_DmBleDisableBatchScan(tBTA_DM_BLE_REF_VALUE ref_value)
1733 {
1734     tBTA_DM_API_DISABLE_SCAN  *p_msg;
1735 
1736     if ((p_msg = (tBTA_DM_API_DISABLE_SCAN *)
1737                  osi_malloc(sizeof(tBTA_DM_API_DISABLE_SCAN))) != NULL) {
1738         p_msg->hdr.event = BTA_DM_API_BLE_DISABLE_BATCH_SCAN_EVT;
1739         p_msg->ref_value = ref_value;
1740         bta_sys_sendmsg(p_msg);
1741     }
1742 }
1743 
1744 /*******************************************************************************
1745 **
1746 ** Function         BTA_DmBleReadScanReports
1747 **
1748 ** Description      This function is called to read scan reports
1749 **
1750 ** Parameters       scan_type -Batch scan mode
1751 **                  ref_value - Reference value
1752 **
1753 ** Returns          None
1754 **
1755 *******************************************************************************/
BTA_DmBleReadScanReports(tBTA_BLE_BATCH_SCAN_MODE scan_type,tBTA_DM_BLE_REF_VALUE ref_value)1756 extern void BTA_DmBleReadScanReports(tBTA_BLE_BATCH_SCAN_MODE scan_type,
1757                                      tBTA_DM_BLE_REF_VALUE ref_value)
1758 {
1759     tBTA_DM_API_READ_SCAN_REPORTS  *p_msg;
1760 
1761     if ((p_msg = (tBTA_DM_API_READ_SCAN_REPORTS *)
1762                  osi_malloc(sizeof(tBTA_DM_API_READ_SCAN_REPORTS))) != NULL) {
1763         p_msg->hdr.event = BTA_DM_API_BLE_READ_SCAN_REPORTS_EVT;
1764         p_msg->scan_type = scan_type;
1765         p_msg->ref_value = ref_value;
1766         bta_sys_sendmsg(p_msg);
1767     }
1768 }
1769 
1770 /*******************************************************************************
1771 **
1772 ** Function         BTA_DmBleTrackAdvertiser
1773 **
1774 ** Description      This function is called to track advertiser
1775 **
1776 ** Parameters       ref_value - Reference value
1777 **                  p_track_adv_cback - Track ADV callback
1778 **
1779 ** Returns          None
1780 **
1781 *******************************************************************************/
BTA_DmBleTrackAdvertiser(tBTA_DM_BLE_REF_VALUE ref_value,tBTA_BLE_TRACK_ADV_CBACK * p_track_adv_cback)1782 extern void BTA_DmBleTrackAdvertiser(tBTA_DM_BLE_REF_VALUE ref_value,
1783                                      tBTA_BLE_TRACK_ADV_CBACK *p_track_adv_cback)
1784 {
1785     tBTA_DM_API_TRACK_ADVERTISER  *p_msg;
1786 
1787     if ((p_msg = (tBTA_DM_API_TRACK_ADVERTISER *)
1788                  osi_malloc(sizeof(tBTA_DM_API_TRACK_ADVERTISER))) != NULL) {
1789         p_msg->hdr.event = BTA_DM_API_BLE_TRACK_ADVERTISER_EVT;
1790         p_msg->p_track_adv_cback = p_track_adv_cback;
1791         p_msg->ref_value = ref_value;
1792         bta_sys_sendmsg(p_msg);
1793     }
1794 }
1795 
1796 #endif
1797 
1798 /*******************************************************************************
1799 **                      BLE ADV data management API
1800 ********************************************************************************/
1801 #if BLE_INCLUDED == TRUE
1802 
1803 /*******************************************************************************
1804 **
1805 ** Function         BTA_DmBleBroadcast
1806 **
1807 ** Description      This function starts or stops LE broadcasting.
1808 **
1809 ** Parameters       start: start or stop broadcast.
1810 **
1811 ** Returns          None
1812 **
1813 *******************************************************************************/
BTA_DmBleBroadcast(BOOLEAN start,tBTA_START_STOP_ADV_CMPL_CBACK * p_start_stop_adv_cb)1814 extern void BTA_DmBleBroadcast (BOOLEAN start, tBTA_START_STOP_ADV_CMPL_CBACK *p_start_stop_adv_cb)
1815 {
1816     tBTA_DM_API_BLE_OBSERVE   *p_msg;
1817 
1818     APPL_TRACE_API("BTA_DmBleBroadcast: start = %d \n", start);
1819 
1820     if ((p_msg = (tBTA_DM_API_BLE_OBSERVE *) osi_malloc(sizeof(tBTA_DM_API_BLE_OBSERVE))) != NULL) {
1821         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_OBSERVE));
1822 
1823         p_msg->hdr.event = BTA_DM_API_BLE_BROADCAST_EVT;
1824         p_msg->start = start;
1825         if (start == FALSE){
1826             p_msg->p_stop_adv_cback= p_start_stop_adv_cb;
1827         }
1828 
1829         bta_sys_sendmsg(p_msg);
1830     }
1831 }
1832 
1833 /*******************************************************************************
1834 **
1835 ** Function         BTA_DmBleClearAdv
1836 **
1837 ** Description      This function is called to clear Advertising
1838 **
1839 ** Parameters       p_adv_data_cback : clear adv complete callback.
1840 **
1841 ** Returns          None
1842 **
1843 *******************************************************************************/
BTA_DmBleClearAdv(tBTA_CLEAR_ADV_CMPL_CBACK * p_clear_adv_cback)1844 void BTA_DmBleClearAdv (tBTA_CLEAR_ADV_CMPL_CBACK *p_clear_adv_cback)
1845 {
1846     tBTA_DM_API_CLEAR_ADV  *p_msg;
1847 
1848     if ((p_msg = (tBTA_DM_API_CLEAR_ADV *)
1849                  osi_malloc(sizeof(tBTA_DM_API_CLEAR_ADV))) != NULL) {
1850         p_msg->hdr.event = BTA_DM_API_BLE_CLEAR_ADV_EVT;
1851         p_msg->p_clear_adv_cback = p_clear_adv_cback;
1852 
1853         bta_sys_sendmsg(p_msg);
1854     }
1855 }
1856 #endif
1857 /*******************************************************************************
1858 **
1859 ** Function         BTA_DmBleSetBgConnType
1860 **
1861 ** Description      This function is called to set BLE connectable mode for a
1862 **                  peripheral device.
1863 **
1864 ** Parameters       bg_conn_type: it can be auto connection, or selective connection.
1865 **                  p_select_cback: callback function when selective connection procedure
1866 **                              is being used.
1867 **
1868 ** Returns          void
1869 **
1870 *******************************************************************************/
BTA_DmBleSetBgConnType(tBTA_DM_BLE_CONN_TYPE bg_conn_type,tBTA_DM_BLE_SEL_CBACK * p_select_cback)1871 void BTA_DmBleSetBgConnType(tBTA_DM_BLE_CONN_TYPE bg_conn_type, tBTA_DM_BLE_SEL_CBACK *p_select_cback)
1872 {
1873 #if BLE_INCLUDED == TRUE
1874     tBTA_DM_API_BLE_SET_BG_CONN_TYPE    *p_msg;
1875 
1876     if ((p_msg = (tBTA_DM_API_BLE_SET_BG_CONN_TYPE *) osi_malloc(sizeof(tBTA_DM_API_BLE_SET_BG_CONN_TYPE))) != NULL) {
1877         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_SET_BG_CONN_TYPE));
1878 
1879         p_msg->hdr.event        = BTA_DM_API_BLE_SET_BG_CONN_TYPE;
1880         p_msg->bg_conn_type     = bg_conn_type;
1881         p_msg->p_select_cback   = p_select_cback;
1882 
1883         bta_sys_sendmsg(p_msg);
1884     }
1885 #endif
1886 }
1887 
1888 /*******************************************************************************
1889 **
1890 ** Function         bta_dm_discover_send_msg
1891 **
1892 ** Description      This function send discover message to BTA task.
1893 **
1894 ** Returns          void
1895 **
1896 *******************************************************************************/
1897 #if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE && SDP_INCLUDED == TRUE
bta_dm_discover_send_msg(BD_ADDR bd_addr,tBTA_SERVICE_MASK_EXT * p_services,tBTA_DM_SEARCH_CBACK * p_cback,BOOLEAN sdp_search,tBTA_TRANSPORT transport)1898 static void bta_dm_discover_send_msg(BD_ADDR bd_addr, tBTA_SERVICE_MASK_EXT *p_services,
1899                                      tBTA_DM_SEARCH_CBACK *p_cback, BOOLEAN sdp_search,
1900                                      tBTA_TRANSPORT transport)
1901 {
1902     tBTA_DM_API_DISCOVER    *p_msg;
1903     UINT16  len = p_services ? (sizeof(tBTA_DM_API_DISCOVER) +
1904                                 sizeof(tBT_UUID) * p_services->num_uuid) :
1905                   sizeof(tBTA_DM_API_DISCOVER);
1906 
1907     if ((p_msg = (tBTA_DM_API_DISCOVER *) osi_malloc(len)) != NULL) {
1908         memset(p_msg, 0, len);
1909 
1910         p_msg->hdr.event = BTA_DM_API_DISCOVER_EVT;
1911         bdcpy(p_msg->bd_addr, bd_addr);
1912         p_msg->p_cback = p_cback;
1913         p_msg->sdp_search = sdp_search;
1914         p_msg->transport    = transport;
1915 
1916         if (p_services != NULL) {
1917 #if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
1918             p_msg->services = p_services->srvc_mask;
1919             p_msg->num_uuid = p_services->num_uuid;
1920             if (p_services->num_uuid != 0) {
1921                 p_msg->p_uuid = (tBT_UUID *)(p_msg + 1);
1922                 memcpy(p_msg->p_uuid, p_services->p_uuid, sizeof(tBT_UUID) * p_services->num_uuid);
1923             }
1924 #endif
1925         }
1926 
1927         bta_sys_sendmsg(p_msg);
1928     }
1929 }
1930 #endif
1931 /*******************************************************************************
1932 **
1933 ** Function         BTA_DmDiscoverByTransport
1934 **
1935 ** Description      This function does service discovery on particular transport
1936 **                  for services of a
1937 **                  peer device. When services.num_uuid is 0, it indicates all
1938 **                  GATT based services are to be searched; otherwise a list of
1939 **                  UUID of interested services should be provided through
1940 **                  p_services->p_uuid.
1941 **
1942 **
1943 **
1944 ** Returns          void
1945 **
1946 *******************************************************************************/
BTA_DmDiscoverByTransport(BD_ADDR bd_addr,tBTA_SERVICE_MASK_EXT * p_services,tBTA_DM_SEARCH_CBACK * p_cback,BOOLEAN sdp_search,tBTA_TRANSPORT transport)1947 void BTA_DmDiscoverByTransport(BD_ADDR bd_addr, tBTA_SERVICE_MASK_EXT *p_services,
1948                                tBTA_DM_SEARCH_CBACK *p_cback, BOOLEAN sdp_search,
1949                                tBTA_TRANSPORT transport)
1950 {
1951 #if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE && SDP_INCLUDED == TRUE
1952     bta_dm_discover_send_msg(bd_addr, p_services, p_cback, sdp_search, transport);
1953 #endif
1954 }
1955 
1956 
1957 /*******************************************************************************
1958 **
1959 ** Function         BTA_DmDiscoverExt
1960 **
1961 ** Description      This function does service discovery for services of a
1962 **                  peer device. When services.num_uuid is 0, it indicates all
1963 **                  GATT based services are to be searched; other wise a list of
1964 **                  UUID of interested services should be provided through
1965 **                  p_services->p_uuid.
1966 **
1967 **
1968 **
1969 ** Returns          void
1970 **
1971 *******************************************************************************/
BTA_DmDiscoverExt(BD_ADDR bd_addr,tBTA_SERVICE_MASK_EXT * p_services,tBTA_DM_SEARCH_CBACK * p_cback,BOOLEAN sdp_search)1972 void BTA_DmDiscoverExt(BD_ADDR bd_addr, tBTA_SERVICE_MASK_EXT *p_services,
1973                        tBTA_DM_SEARCH_CBACK *p_cback, BOOLEAN sdp_search)
1974 {
1975 #if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE && SDP_INCLUDED == TRUE
1976     bta_dm_discover_send_msg(bd_addr, p_services, p_cback, sdp_search, BTA_TRANSPORT_UNKNOWN);
1977 #endif
1978 
1979 }
1980 
1981 /*******************************************************************************
1982 **
1983 ** Function         BTA_DmSearchExt
1984 **
1985 ** Description      This function searches for peer Bluetooth devices. It performs
1986 **                  an inquiry and gets the remote name for devices. Service
1987 **                  discovery is done if services is non zero
1988 **
1989 ** Parameters       p_dm_inq: inquiry conditions
1990 **                  p_services: if service is not empty, service discovery will be done.
1991 **                            for all GATT based service condition, put num_uuid, and
1992 **                            p_uuid is the pointer to the list of UUID values.
1993 **                  p_cback: callback function when search is completed.
1994 **
1995 **
1996 **
1997 ** Returns          void
1998 **
1999 *******************************************************************************/
BTA_DmSearchExt(tBTA_DM_INQ * p_dm_inq,tBTA_SERVICE_MASK_EXT * p_services,tBTA_DM_SEARCH_CBACK * p_cback)2000 void BTA_DmSearchExt(tBTA_DM_INQ *p_dm_inq, tBTA_SERVICE_MASK_EXT *p_services, tBTA_DM_SEARCH_CBACK *p_cback)
2001 {
2002 #if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
2003     tBTA_DM_API_SEARCH    *p_msg;
2004     UINT16  len = p_services ? (sizeof(tBTA_DM_API_SEARCH) + sizeof(tBT_UUID) * p_services->num_uuid) :
2005                   sizeof(tBTA_DM_API_SEARCH);
2006 
2007     if ((p_msg = (tBTA_DM_API_SEARCH *) osi_malloc(len)) != NULL) {
2008         memset(p_msg, 0, len);
2009 
2010         p_msg->hdr.event = BTA_DM_API_SEARCH_EVT;
2011         memcpy(&p_msg->inq_params, p_dm_inq, sizeof(tBTA_DM_INQ));
2012         p_msg->p_cback = p_cback;
2013         p_msg->rs_res  = BTA_DM_RS_NONE;
2014 
2015 
2016         if (p_services != NULL) {
2017             p_msg->services = p_services->srvc_mask;
2018             p_msg->num_uuid = p_services->num_uuid;
2019 
2020             if (p_services->num_uuid != 0) {
2021                 p_msg->p_uuid = (tBT_UUID *)(p_msg + 1);
2022                 memcpy(p_msg->p_uuid, p_services->p_uuid, sizeof(tBT_UUID) * p_services->num_uuid);
2023             } else {
2024                 p_msg->p_uuid = NULL;
2025             }
2026         }
2027 
2028         bta_sys_sendmsg(p_msg);
2029     }
2030 #else
2031     UNUSED(p_dm_inq);
2032     UNUSED(p_services);
2033     UNUSED(p_cback);
2034 #endif
2035 }
2036 /*******************************************************************************
2037 **
2038 ** Function         BTA_DmBleUpdateConnectionParam
2039 **
2040 ** Description      Update connection parameters, can only be used when connection is up.
2041 **
2042 ** Parameters:      bd_addr          - BD address of the peer
2043 **                  min_int   -     minimum connection interval, [0x0004~ 0x4000]
2044 **                  max_int   -     maximum connection interval, [0x0004~ 0x4000]
2045 **                  latency   -     slave latency [0 ~ 500]
2046 **                  timeout   -     supervision timeout [0x000a ~ 0xc80]
2047 **
2048 ** Returns          void
2049 **
2050 *******************************************************************************/
BTA_DmBleUpdateConnectionParam(BD_ADDR bd_addr,UINT16 min_int,UINT16 max_int,UINT16 latency,UINT16 timeout)2051 void BTA_DmBleUpdateConnectionParam(BD_ADDR bd_addr, UINT16 min_int,
2052                                     UINT16 max_int, UINT16 latency,
2053                                     UINT16 timeout)
2054 {
2055 #if BLE_INCLUDED == TRUE
2056     tBTA_DM_API_UPDATE_CONN_PARAM *p_msg;
2057 
2058     p_msg = (tBTA_DM_API_UPDATE_CONN_PARAM *) osi_malloc(sizeof(tBTA_DM_API_UPDATE_CONN_PARAM));
2059     if (p_msg != NULL) {
2060         memset(p_msg, 0, sizeof(tBTA_DM_API_UPDATE_CONN_PARAM));
2061 
2062         p_msg->hdr.event = BTA_DM_API_UPDATE_CONN_PARAM_EVT;
2063         bdcpy(p_msg->bd_addr, bd_addr);
2064         p_msg->min_int   = min_int;
2065         p_msg->max_int   = max_int;
2066         p_msg->latency   = latency;
2067         p_msg->timeout   = timeout;
2068 
2069         bta_sys_sendmsg(p_msg);
2070     }
2071 #endif
2072 }
2073 
2074 #if BLE_INCLUDED == TRUE
2075 /*******************************************************************************
2076 **
2077 ** Function         BTA_DmBleConfigLocalPrivacy
2078 **
2079 ** Description      Enable/disable privacy on the local device
2080 **
2081 ** Parameters:      privacy_enable   - enable/disable privacy on remote device.
2082 **
2083 ** Returns          void
2084 **
2085 *******************************************************************************/
BTA_DmBleConfigLocalPrivacy(BOOLEAN privacy_enable,tBTA_SET_LOCAL_PRIVACY_CBACK * set_local_privacy_cback)2086 void BTA_DmBleConfigLocalPrivacy(BOOLEAN privacy_enable, tBTA_SET_LOCAL_PRIVACY_CBACK *set_local_privacy_cback)
2087 {
2088     ///This function used the irk to generate the resolve address
2089 #if BLE_INCLUDED == TRUE && BLE_PRIVACY_SPT == TRUE
2090     tBTA_DM_API_LOCAL_PRIVACY *p_msg;
2091 
2092     if ((p_msg = (tBTA_DM_API_LOCAL_PRIVACY *) osi_malloc(sizeof(tBTA_DM_API_ENABLE_PRIVACY))) != NULL) {
2093         memset (p_msg, 0, sizeof(tBTA_DM_API_LOCAL_PRIVACY));
2094 
2095         p_msg->hdr.event = BTA_DM_API_LOCAL_PRIVACY_EVT;
2096         p_msg->privacy_enable   = privacy_enable;
2097         p_msg->set_local_privacy_cback = set_local_privacy_cback;
2098         bta_sys_sendmsg(p_msg);
2099     }
2100 #else
2101     UNUSED (privacy_enable);
2102 #endif
2103 }
2104 
2105 /*******************************************************************************
2106 **
2107 ** Function         BTA_DmBleConfigLocalIcon
2108 **
2109 ** Description      set gap local icon
2110 **
2111 ** Parameters:      icon   - appearance value.
2112 **
2113 ** Returns          void
2114 **
2115 *******************************************************************************/
BTA_DmBleConfigLocalIcon(uint16_t icon)2116 void BTA_DmBleConfigLocalIcon(uint16_t icon)
2117 {
2118     tBTA_DM_API_LOCAL_ICON *p_msg;
2119 
2120     if ((p_msg = (tBTA_DM_API_LOCAL_ICON *) osi_malloc(sizeof(tBTA_DM_API_LOCAL_ICON))) != NULL) {
2121         memset (p_msg, 0, sizeof(tBTA_DM_API_LOCAL_ICON));
2122 
2123         p_msg->hdr.event = BTA_DM_API_LOCAL_ICON_EVT;
2124         p_msg->icon   = icon;
2125         bta_sys_sendmsg(p_msg);
2126     }
2127 }
2128 
2129 /*******************************************************************************
2130 **
2131 ** Function         BTA_BleEnableAdvInstance
2132 **
2133 ** Description      This function enable a Multi-ADV instance with the specified
2134 **                  adv parameters
2135 **
2136 ** Parameters       p_params: pointer to the adv parameter structure.
2137 **                  p_cback: callback function associated to this adv instance.
2138 **                  p_ref: reference data pointer to this adv instance.
2139 **
2140 ** Returns          BTA_SUCCESS if command started successfully; otherwise failure.
2141 **
2142 *******************************************************************************/
BTA_BleEnableAdvInstance(tBTA_BLE_ADV_PARAMS * p_params,tBTA_BLE_MULTI_ADV_CBACK * p_cback,void * p_ref)2143 void BTA_BleEnableAdvInstance (tBTA_BLE_ADV_PARAMS *p_params,
2144                                tBTA_BLE_MULTI_ADV_CBACK *p_cback,
2145                                void *p_ref)
2146 {
2147     ///This function just used for vendor debug
2148     tBTA_DM_API_BLE_MULTI_ADV_ENB    *p_msg;
2149     UINT16 len = sizeof(tBTA_BLE_ADV_PARAMS) + sizeof(tBTA_DM_API_BLE_MULTI_ADV_ENB);
2150 
2151     APPL_TRACE_API ("BTA_BleEnableAdvInstance");
2152 
2153     if ((p_msg = (tBTA_DM_API_BLE_MULTI_ADV_ENB *) osi_malloc(len)) != NULL) {
2154         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_MULTI_ADV_ENB));
2155 
2156         p_msg->hdr.event     = BTA_DM_API_BLE_MULTI_ADV_ENB_EVT;
2157         p_msg->p_cback      = (void *)p_cback;
2158         if (p_params != NULL) {
2159             p_msg->p_params =  (void *)(p_msg + 1);
2160             memcpy(p_msg->p_params, p_params, sizeof(tBTA_BLE_ADV_PARAMS));
2161         }
2162         p_msg->p_ref        = p_ref;
2163 
2164         bta_sys_sendmsg(p_msg);
2165     }
2166 }
2167 
2168 /*******************************************************************************
2169 **
2170 ** Function         BTA_BleUpdateAdvInstParam
2171 **
2172 ** Description      This function update a Multi-ADV instance with the specified
2173 **                  adv parameters.
2174 **
2175 ** Parameters       inst_id: Adv instance to update the parameter.
2176 **                  p_params: pointer to the adv parameter structure.
2177 **
2178 ** Returns          BTA_SUCCESS if command started successfully; otherwise failure.
2179 **
2180 *******************************************************************************/
BTA_BleUpdateAdvInstParam(UINT8 inst_id,tBTA_BLE_ADV_PARAMS * p_params)2181 void BTA_BleUpdateAdvInstParam (UINT8 inst_id, tBTA_BLE_ADV_PARAMS *p_params)
2182 {
2183     ///This function just used for vendor debug
2184     tBTA_DM_API_BLE_MULTI_ADV_PARAM    *p_msg;
2185     UINT16      len = sizeof(tBTA_BLE_ADV_PARAMS) + sizeof(tBTA_DM_API_BLE_MULTI_ADV_PARAM);
2186 
2187     APPL_TRACE_API ("BTA_BleUpdateAdvInstParam");
2188     if ((p_msg = (tBTA_DM_API_BLE_MULTI_ADV_PARAM *) osi_malloc(len)) != NULL) {
2189         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_MULTI_ADV_PARAM));
2190         p_msg->hdr.event     = BTA_DM_API_BLE_MULTI_ADV_PARAM_UPD_EVT;
2191         p_msg->inst_id        = inst_id;
2192         p_msg->p_params =  (void *)(p_msg + 1);
2193         memcpy(p_msg->p_params, p_params, sizeof(tBTA_BLE_ADV_PARAMS));
2194 
2195         bta_sys_sendmsg(p_msg);
2196     }
2197 }
2198 
2199 /*******************************************************************************
2200 **
2201 ** Function         BTA_BleCfgAdvInstData
2202 **
2203 ** Description      This function configure a Multi-ADV instance with the specified
2204 **                  adv data or scan response data.
2205 **
2206 ** Parameter        inst_id: Adv instance to configure the adv data or scan response.
2207 **                  is_scan_rsp: is the data scan response or adv data.
2208 **                  data_mask: adv data type as bit mask.
2209 **                  p_data: pointer to the ADV data structure tBTA_BLE_ADV_DATA. This
2210 **                  memory space can not be freed until BTA_BLE_MULTI_ADV_DATA_EVT
2211 **                  is sent to application.
2212 **
2213 ** Returns          BTA_SUCCESS if command started successfully; otherwise failure.
2214 **
2215 *******************************************************************************/
BTA_BleCfgAdvInstData(UINT8 inst_id,BOOLEAN is_scan_rsp,tBTA_BLE_AD_MASK data_mask,tBTA_BLE_ADV_DATA * p_data)2216 void BTA_BleCfgAdvInstData (UINT8 inst_id, BOOLEAN is_scan_rsp,
2217                             tBTA_BLE_AD_MASK data_mask,
2218                             tBTA_BLE_ADV_DATA *p_data)
2219 {
2220     ///This function just used for vendor debug
2221     tBTA_DM_API_BLE_MULTI_ADV_DATA    *p_msg;
2222     UINT16      len =  sizeof(tBTA_DM_API_BLE_MULTI_ADV_DATA) ;
2223 
2224     APPL_TRACE_API ("BTA_BleCfgAdvInstData");
2225 
2226     if ((p_msg = (tBTA_DM_API_BLE_MULTI_ADV_DATA *) osi_malloc(len)) != NULL) {
2227         memset(p_msg, 0, len);
2228         p_msg->hdr.event     = BTA_DM_API_BLE_MULTI_ADV_DATA_EVT;
2229         p_msg->inst_id      = inst_id;
2230         p_msg->is_scan_rsp  = is_scan_rsp;
2231         p_msg->data_mask     = data_mask;
2232         p_msg->p_data        = p_data;
2233 
2234         bta_sys_sendmsg(p_msg);
2235     }
2236 }
2237 
2238 /*******************************************************************************
2239 **
2240 ** Function         BTA_BleDisableAdvInstance
2241 **
2242 ** Description      This function disable a Multi-ADV instance.
2243 **
2244 ** Parameter        inst_id: instance ID to disable.
2245 **
2246 ** Returns          BTA_SUCCESS if command started successfully; otherwise failure.
2247 **
2248 *******************************************************************************/
BTA_BleDisableAdvInstance(UINT8 inst_id)2249 void BTA_BleDisableAdvInstance (UINT8  inst_id)     //this function just used for vendor debug
2250 {
2251     tBTA_DM_API_BLE_MULTI_ADV_DISABLE    *p_msg;
2252 
2253     APPL_TRACE_API ("BTA_BleDisableAdvInstance: %d", inst_id);
2254     if ((p_msg = (tBTA_DM_API_BLE_MULTI_ADV_DISABLE *)
2255                  osi_malloc(sizeof(tBTA_DM_API_BLE_MULTI_ADV_DISABLE))) != NULL) {
2256         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_MULTI_ADV_DISABLE));
2257         p_msg->hdr.event    = BTA_DM_API_BLE_MULTI_ADV_DISABLE_EVT;
2258         p_msg->inst_id      = inst_id;
2259         bta_sys_sendmsg(p_msg);
2260     }
2261 }
2262 
2263 /*******************************************************************************
2264 **
2265 ** Function         BTA_DmBleCfgFilterCondition
2266 **
2267 ** Description      This function is called to configure the adv data payload filter
2268 **                  condition.
2269 **
2270 ** Parameters       action: to read/write/clear
2271 **                  cond_type: filter condition type
2272 **                  filt_index - Filter index
2273 **                  p_cond: filter condition parameter
2274 **                  p_cmpl_back - Command completed callback
2275 **                  ref_value - Reference value
2276 **
2277 ** Returns          void
2278 **
2279 *******************************************************************************/
BTA_DmBleCfgFilterCondition(tBTA_DM_BLE_SCAN_COND_OP action,tBTA_DM_BLE_PF_COND_TYPE cond_type,tBTA_DM_BLE_PF_FILT_INDEX filt_index,tBTA_DM_BLE_PF_COND_PARAM * p_cond,tBTA_DM_BLE_PF_CFG_CBACK * p_cmpl_cback,tBTA_DM_BLE_REF_VALUE ref_value)2280 void BTA_DmBleCfgFilterCondition(tBTA_DM_BLE_SCAN_COND_OP action,
2281                                  tBTA_DM_BLE_PF_COND_TYPE cond_type,
2282                                  tBTA_DM_BLE_PF_FILT_INDEX filt_index,
2283                                  tBTA_DM_BLE_PF_COND_PARAM *p_cond,
2284                                  tBTA_DM_BLE_PF_CFG_CBACK *p_cmpl_cback,
2285                                  tBTA_DM_BLE_REF_VALUE ref_value)
2286 {
2287 #if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE
2288     tBTA_DM_API_CFG_FILTER_COND *p_msg;
2289     APPL_TRACE_API ("BTA_DmBleCfgFilterCondition: %d, %d", action, cond_type);
2290 
2291     UINT16  len = sizeof(tBTA_DM_API_CFG_FILTER_COND) +
2292                   sizeof(tBTA_DM_BLE_PF_COND_PARAM);
2293     UINT8 *p;
2294 
2295     if (NULL != p_cond) {
2296         switch (cond_type) {
2297         case BTA_DM_BLE_PF_SRVC_DATA_PATTERN:
2298         case BTA_DM_BLE_PF_MANU_DATA:
2299             /* Length of pattern and pattern mask and other elements in */
2300             /* tBTA_DM_BLE_PF_MANU_COND */
2301             len += ((p_cond->manu_data.data_len) * 2) +
2302                    sizeof(UINT16) + sizeof(UINT16) + sizeof(UINT8);
2303             break;
2304 
2305         case BTA_DM_BLE_PF_LOCAL_NAME:
2306             len += ((p_cond->local_name.data_len) + sizeof(UINT8));
2307             break;
2308 
2309         case BTM_BLE_PF_SRVC_UUID:
2310         case BTM_BLE_PF_SRVC_SOL_UUID:
2311             len += sizeof(tBLE_BD_ADDR) + sizeof(tBTA_DM_BLE_PF_COND_MASK);
2312             break;
2313 
2314         default:
2315             break;
2316         }
2317     }
2318 
2319     if ((p_msg = (tBTA_DM_API_CFG_FILTER_COND *) osi_malloc(len)) != NULL) {
2320         memset (p_msg, 0, len);
2321 
2322         p_msg->hdr.event        = BTA_DM_API_CFG_FILTER_COND_EVT;
2323         p_msg->action           = action;
2324         p_msg->cond_type        = cond_type;
2325         p_msg->filt_index       = filt_index;
2326         p_msg->p_filt_cfg_cback = p_cmpl_cback;
2327         p_msg->ref_value        = ref_value;
2328         if (p_cond) {
2329             p_msg->p_cond_param = (tBTA_DM_BLE_PF_COND_PARAM *)(p_msg + 1);
2330             memcpy(p_msg->p_cond_param, p_cond, sizeof(tBTA_DM_BLE_PF_COND_PARAM));
2331 
2332             p = (UINT8 *)(p_msg->p_cond_param + 1);
2333 
2334             if (cond_type == BTA_DM_BLE_PF_SRVC_DATA_PATTERN ||
2335                     cond_type == BTA_DM_BLE_PF_MANU_DATA) {
2336                 p_msg->p_cond_param->manu_data.p_pattern = p;
2337                 p_msg->p_cond_param->manu_data.data_len = p_cond->manu_data.data_len;
2338                 memcpy(p_msg->p_cond_param->manu_data.p_pattern, p_cond->manu_data.p_pattern,
2339                        p_cond->manu_data.data_len);
2340                 p += p_cond->manu_data.data_len;
2341 
2342                 if (cond_type == BTA_DM_BLE_PF_MANU_DATA) {
2343                     p_msg->p_cond_param->manu_data.company_id_mask =
2344                         p_cond->manu_data.company_id_mask;
2345                     if ( p_cond->manu_data.p_pattern_mask != NULL) {
2346                         p_msg->p_cond_param->manu_data.p_pattern_mask = p;
2347                         memcpy(p_msg->p_cond_param->manu_data.p_pattern_mask,
2348                                p_cond->manu_data.p_pattern_mask, p_cond->manu_data.data_len);
2349                     }
2350                 }
2351             } else if (cond_type == BTA_DM_BLE_PF_LOCAL_NAME) {
2352                 p_msg->p_cond_param->local_name.p_data = p;
2353                 p_msg->p_cond_param->local_name.data_len =
2354                     p_cond->local_name.data_len;
2355                 memcpy(p_msg->p_cond_param->local_name.p_data,
2356                        p_cond->local_name.p_data, p_cond->local_name.data_len);
2357             } else if ((cond_type == BTM_BLE_PF_SRVC_UUID
2358                         || cond_type == BTM_BLE_PF_SRVC_SOL_UUID)) {
2359                 if (p_cond->srvc_uuid.p_target_addr != NULL) {
2360                     p_msg->p_cond_param->srvc_uuid.p_target_addr = (tBLE_BD_ADDR *)(p);
2361                     p_msg->p_cond_param->srvc_uuid.p_target_addr->type =
2362                         p_cond->srvc_uuid.p_target_addr->type;
2363                     memcpy(p_msg->p_cond_param->srvc_uuid.p_target_addr->bda,
2364                            p_cond->srvc_uuid.p_target_addr->bda, BD_ADDR_LEN);
2365                     p = (UINT8 *)( p_msg->p_cond_param->srvc_uuid.p_target_addr + 1);
2366                 }
2367                 if (p_cond->srvc_uuid.p_uuid_mask) {
2368                     p_msg->p_cond_param->srvc_uuid.p_uuid_mask = (tBTA_DM_BLE_PF_COND_MASK *)p;
2369                     memcpy(p_msg->p_cond_param->srvc_uuid.p_uuid_mask,
2370                            p_cond->srvc_uuid.p_uuid_mask, sizeof(tBTA_DM_BLE_PF_COND_MASK));
2371                 }
2372             }
2373         }
2374 
2375         bta_sys_sendmsg(p_msg);
2376     }
2377 #else
2378     UNUSED(action);
2379     UNUSED(cond_type);
2380     UNUSED(filt_index);
2381     UNUSED(p_cond);
2382     UNUSED(p_cmpl_cback);
2383     UNUSED(ref_value);
2384 #endif
2385 }
2386 
2387 /*******************************************************************************
2388 **
2389 ** Function         BTA_DmBleScanFilterSetup
2390 **
2391 ** Description      This function is called to setup the adv data payload filter param
2392 **
2393 ** Parameters       p_target: enable the filter condition on a target device; if NULL
2394 **                  filt_index - Filter index
2395 **                  p_filt_params -Filter parameters
2396 **                  ref_value - Reference value
2397 **                  action - Add, delete or clear
2398 **                  p_cmpl_back - Command completed callback
2399 **
2400 ** Returns          void
2401 **
2402 *******************************************************************************/
BTA_DmBleScanFilterSetup(UINT8 action,tBTA_DM_BLE_PF_FILT_INDEX filt_index,tBTA_DM_BLE_PF_FILT_PARAMS * p_filt_params,tBLE_BD_ADDR * p_target,tBTA_DM_BLE_PF_PARAM_CBACK * p_cmpl_cback,tBTA_DM_BLE_REF_VALUE ref_value)2403 void BTA_DmBleScanFilterSetup(UINT8 action, tBTA_DM_BLE_PF_FILT_INDEX filt_index,
2404                               tBTA_DM_BLE_PF_FILT_PARAMS *p_filt_params,
2405                               tBLE_BD_ADDR *p_target,
2406                               tBTA_DM_BLE_PF_PARAM_CBACK *p_cmpl_cback,
2407                               tBTA_DM_BLE_REF_VALUE ref_value)
2408 {
2409 #if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE
2410     tBTA_DM_API_SCAN_FILTER_PARAM_SETUP *p_msg;
2411     APPL_TRACE_API ("BTA_DmBleScanFilterSetup: %d", action);
2412 
2413     UINT16  len = sizeof(tBTA_DM_API_SCAN_FILTER_PARAM_SETUP) + sizeof(tBLE_BD_ADDR);
2414 
2415     if ((p_msg = (tBTA_DM_API_SCAN_FILTER_PARAM_SETUP *) osi_malloc(len)) != NULL) {
2416         memset (p_msg, 0, len);
2417 
2418         p_msg->hdr.event        = BTA_DM_API_SCAN_FILTER_SETUP_EVT;
2419         p_msg->action       = action;
2420         p_msg->filt_index = filt_index;
2421         if (p_filt_params) {
2422             memcpy(&p_msg->filt_params, p_filt_params, sizeof(tBTA_DM_BLE_PF_FILT_PARAMS));
2423         }
2424         p_msg->p_filt_param_cback = p_cmpl_cback;
2425         p_msg->ref_value        = ref_value;
2426 
2427         if (p_target) {
2428             p_msg->p_target = (tBLE_BD_ADDR *)(p_msg + 1);
2429             memcpy(p_msg->p_target, p_target, sizeof(tBLE_BD_ADDR));
2430         }
2431 
2432         bta_sys_sendmsg(p_msg);
2433     }
2434 #else
2435     UNUSED(action);
2436     UNUSED(filt_index);
2437     UNUSED(p_filt_params);
2438     UNUSED(p_target);
2439     UNUSED(p_cmpl_cback);
2440     UNUSED(ref_value);
2441 #endif
2442 }
2443 
2444 /*******************************************************************************
2445 **
2446 ** Function         BTA_DmBleGetEnergyInfo
2447 **
2448 ** Description      This function is called to obtain the energy info
2449 **
2450 ** Parameters       p_cmpl_cback - Command complete callback
2451 **
2452 ** Returns          void
2453 **
2454 *******************************************************************************/
BTA_DmBleGetEnergyInfo(tBTA_BLE_ENERGY_INFO_CBACK * p_cmpl_cback)2455 void BTA_DmBleGetEnergyInfo(tBTA_BLE_ENERGY_INFO_CBACK *p_cmpl_cback)
2456 {
2457     tBTA_DM_API_ENERGY_INFO *p_msg;
2458     APPL_TRACE_API ("BTA_DmBleGetEnergyInfo");
2459 
2460     UINT16  len = sizeof(tBTA_DM_API_ENERGY_INFO) + sizeof(tBLE_BD_ADDR);
2461 
2462     if ((p_msg = (tBTA_DM_API_ENERGY_INFO *) osi_malloc(len)) != NULL) {
2463         memset (p_msg, 0, len);
2464         p_msg->hdr.event        = BTA_DM_API_BLE_ENERGY_INFO_EVT;
2465         p_msg->p_energy_info_cback = p_cmpl_cback;
2466         bta_sys_sendmsg(p_msg);
2467     }
2468 }
2469 
2470 /*******************************************************************************
2471 **
2472 ** Function         BTA_DmEnableScanFilter
2473 **
2474 ** Description      This function is called to enable the adv data payload filter
2475 **
2476 ** Parameters       action - enable or disable the APCF feature
2477 **                  p_cmpl_cback - Command completed callback
2478 **                  ref_value - Reference value
2479 **
2480 ** Returns          void
2481 **
2482 *******************************************************************************/
BTA_DmEnableScanFilter(UINT8 action,tBTA_DM_BLE_PF_STATUS_CBACK * p_cmpl_cback,tBTA_DM_BLE_REF_VALUE ref_value)2483 void BTA_DmEnableScanFilter(UINT8 action, tBTA_DM_BLE_PF_STATUS_CBACK *p_cmpl_cback,
2484                             tBTA_DM_BLE_REF_VALUE ref_value)
2485 {
2486 #if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE
2487     tBTA_DM_API_ENABLE_SCAN_FILTER *p_msg;
2488     APPL_TRACE_API ("BTA_DmEnableScanFilter: %d\n", action);
2489 
2490     UINT16  len = sizeof(tBTA_DM_API_ENABLE_SCAN_FILTER) + sizeof(tBLE_BD_ADDR);
2491 
2492     if ((p_msg = (tBTA_DM_API_ENABLE_SCAN_FILTER *) osi_malloc(len)) != NULL) {
2493         memset (p_msg, 0, len);
2494 
2495         p_msg->hdr.event        = BTA_DM_API_SCAN_FILTER_ENABLE_EVT;
2496         p_msg->action       = action;
2497         p_msg->ref_value    = ref_value;
2498         p_msg->p_filt_status_cback = p_cmpl_cback;
2499 
2500         bta_sys_sendmsg(p_msg);
2501     }
2502 #else
2503     UNUSED(action);
2504     UNUSED(p_cmpl_cback);
2505     UNUSED(ref_value);
2506 #endif
2507 }
2508 
2509 /*******************************************************************************
2510 **
2511 ** Function         BTA_DmBleUpdateConnectionParams
2512 **
2513 ** Description      Update connection parameters, can only be used when connection is up.
2514 **
2515 ** Parameters:      bd_addr   - BD address of the peer
2516 **                  min_int   -     minimum connection interval, [0x0004~ 0x4000]
2517 **                  max_int   -     maximum connection interval, [0x0004~ 0x4000]
2518 **                  latency   -     slave latency [0 ~ 500]
2519 **                  timeout   -     supervision timeout [0x000a ~ 0xc80]
2520 **
2521 ** Returns          void
2522 **
2523 *******************************************************************************/
BTA_DmBleUpdateConnectionParams(BD_ADDR bd_addr,UINT16 min_int,UINT16 max_int,UINT16 latency,UINT16 timeout)2524 void BTA_DmBleUpdateConnectionParams(BD_ADDR bd_addr, UINT16 min_int, UINT16 max_int,
2525                                      UINT16 latency, UINT16 timeout)
2526 {
2527     tBTA_DM_API_UPDATE_CONN_PARAM *p_msg;
2528 
2529     if ((p_msg = (tBTA_DM_API_UPDATE_CONN_PARAM *) osi_malloc(sizeof(tBTA_DM_API_UPDATE_CONN_PARAM))) != NULL) {
2530         memset (p_msg, 0, sizeof(tBTA_DM_API_UPDATE_CONN_PARAM));
2531 
2532         p_msg->hdr.event = BTA_DM_API_UPDATE_CONN_PARAM_EVT;
2533         bdcpy(p_msg->bd_addr, bd_addr);
2534         p_msg->min_int   = min_int;
2535         p_msg->max_int   = max_int;
2536         p_msg->latency   = latency;
2537         p_msg->timeout   = timeout;
2538         bta_sys_sendmsg(p_msg);
2539     }
2540 }
2541 /*******************************************************************************
2542 **
2543 ** Function         BTA_DmBleDisconnect
2544 **
2545 ** Description      Disconnect the ble connection, can only be used when connection is up.
2546 **
2547 ** Parameters:      bd_addr   - BD address of the peer
2548 **
2549 ** Returns          void
2550 **
2551 *******************************************************************************/
BTA_DmBleDisconnect(BD_ADDR bd_addr)2552 void BTA_DmBleDisconnect(BD_ADDR bd_addr)
2553 {
2554     tBTA_DM_API_BLE_DISCONNECT *p_msg;
2555 
2556     if ((p_msg = (tBTA_DM_API_BLE_DISCONNECT *) osi_malloc(sizeof(tBTA_DM_API_BLE_DISCONNECT))) != NULL) {
2557         memset (p_msg, 0, sizeof(tBTA_DM_API_BLE_DISCONNECT));
2558 
2559         p_msg->hdr.event = BTA_DM_API_BLE_DISCONNECT_EVT;
2560         bdcpy(p_msg->remote_bda, bd_addr);
2561 
2562         bta_sys_sendmsg(p_msg);
2563     }
2564 }
2565 /*******************************************************************************
2566 **
2567 ** Function         BTA_DmBleSetDataLength
2568 **
2569 ** Description      This function is to set maximum LE data packet size
2570 **
2571 ** Returns          void
2572 **
2573 **
2574 *******************************************************************************/
BTA_DmBleSetDataLength(BD_ADDR remote_device,UINT16 tx_data_length,tBTA_SET_PKT_DATA_LENGTH_CBACK * p_set_pkt_data_cback)2575 void BTA_DmBleSetDataLength(BD_ADDR remote_device, UINT16 tx_data_length, tBTA_SET_PKT_DATA_LENGTH_CBACK *p_set_pkt_data_cback)
2576 {
2577     tBTA_DM_API_BLE_SET_DATA_LENGTH *p_msg;
2578 
2579     if ((p_msg = (tBTA_DM_API_BLE_SET_DATA_LENGTH *)osi_malloc(sizeof(tBTA_DM_API_BLE_SET_DATA_LENGTH)))
2580             != NULL) {
2581         bdcpy(p_msg->remote_bda, remote_device);
2582         p_msg->hdr.event = BTA_DM_API_SET_DATA_LENGTH_EVT;
2583         p_msg->tx_data_length = tx_data_length;
2584         p_msg->p_set_pkt_data_cback = p_set_pkt_data_cback;
2585 
2586         bta_sys_sendmsg(p_msg);
2587     }
2588 }
2589 
BTA_DmBleDtmTxStart(uint8_t tx_channel,uint8_t len_of_data,uint8_t pkt_payload,tBTA_DTM_CMD_CMPL_CBACK * p_dtm_cmpl_cback)2590 void BTA_DmBleDtmTxStart(uint8_t tx_channel, uint8_t len_of_data, uint8_t pkt_payload, tBTA_DTM_CMD_CMPL_CBACK *p_dtm_cmpl_cback)
2591 {
2592     tBTA_DM_API_BLE_DTM_TX_START *p_msg;
2593 
2594     if ((p_msg = (tBTA_DM_API_BLE_DTM_TX_START *)osi_malloc(sizeof(tBTA_DM_API_BLE_DTM_TX_START)))
2595             != NULL) {
2596         p_msg->hdr.event = BTA_DM_API_DTM_TX_START_EVT;
2597         p_msg->tx_channel = tx_channel;
2598         p_msg->len_of_data = len_of_data;
2599         p_msg->pkt_payload = pkt_payload;
2600         p_msg->p_dtm_cmpl_cback = p_dtm_cmpl_cback;
2601 
2602         bta_sys_sendmsg(p_msg);
2603     }
2604 }
2605 
BTA_DmBleDtmRxStart(uint8_t rx_channel,tBTA_DTM_CMD_CMPL_CBACK * p_dtm_cmpl_cback)2606 void BTA_DmBleDtmRxStart(uint8_t rx_channel, tBTA_DTM_CMD_CMPL_CBACK *p_dtm_cmpl_cback)
2607 {
2608     tBTA_DM_API_BLE_DTM_RX_START *p_msg;
2609 
2610     if ((p_msg = (tBTA_DM_API_BLE_DTM_RX_START *)osi_malloc(sizeof(tBTA_DM_API_BLE_DTM_RX_START)))
2611             != NULL) {
2612         p_msg->hdr.event = BTA_DM_API_DTM_RX_START_EVT;
2613         p_msg->rx_channel= rx_channel;
2614         p_msg->p_dtm_cmpl_cback = p_dtm_cmpl_cback;
2615 
2616         bta_sys_sendmsg(p_msg);
2617     }
2618 }
2619 
BTA_DmBleDtmStop(tBTA_DTM_CMD_CMPL_CBACK * p_dtm_cmpl_cback)2620 void BTA_DmBleDtmStop(tBTA_DTM_CMD_CMPL_CBACK *p_dtm_cmpl_cback)
2621 {
2622     tBTA_DM_API_BLE_DTM_STOP *p_msg;
2623 
2624     if ((p_msg = (tBTA_DM_API_BLE_DTM_STOP *)osi_malloc(sizeof(tBTA_DM_API_BLE_DTM_STOP)))
2625             != NULL) {
2626         p_msg->hdr.event = BTA_DM_API_DTM_STOP_EVT;
2627         p_msg->p_dtm_cmpl_cback = p_dtm_cmpl_cback;
2628 
2629         bta_sys_sendmsg(p_msg);
2630     }
2631 }
2632 
BTA_DmBleSetPrivacyMode(uint8_t addr_type,BD_ADDR addr,uint8_t privacy_mode,tBTA_SET_PRIVACY_MODE_CMPL_CBACK * p_cback)2633 void BTA_DmBleSetPrivacyMode(uint8_t addr_type, BD_ADDR addr, uint8_t privacy_mode, tBTA_SET_PRIVACY_MODE_CMPL_CBACK *p_cback)
2634 {
2635     tBTA_DM_API_SET_PRIVACY_MODE *p_msg;
2636 
2637     if ((p_msg = (tBTA_DM_API_SET_PRIVACY_MODE *)osi_malloc(sizeof(tBTA_DM_API_SET_PRIVACY_MODE)))
2638             != NULL) {
2639         p_msg->hdr.event = BTA_DM_API_SET_PRIVACY_MODE_EVT;
2640         p_msg->addr_type = addr_type;
2641         memcpy(p_msg->addr, addr, sizeof(BD_ADDR));
2642         p_msg->privacy_mode = privacy_mode;
2643         p_msg->p_cback = p_cback;
2644         bta_sys_sendmsg(p_msg);
2645     }
2646 }
2647 
2648 #endif
2649 
2650 /*******************************************************************************
2651 **
2652 ** Function         BTA_DmSetEncryption
2653 **
2654 ** Description      This function is called to ensure that connection is
2655 **                  encrypted.  Should be called only on an open connection.
2656 **                  Typically only needed for connections that first want to
2657 **                  bring up unencrypted links, then later encrypt them.
2658 **
2659 ** Parameters:      bd_addr       - Address of the peer device
2660 **                  transport     - transport of the link to be encruypted
2661 **                  p_callback    - Pointer to callback function to indicate the
2662 **                                  link encryption status
2663 **                  sec_act       - This is the security action to indicate
2664 **                                  what kind of BLE security level is required for
2665 **                                  the BLE link if the BLE is supported
2666 **                                  Note: This parameter is ignored for the BR/EDR link
2667 **                                        or the BLE is not supported
2668 **
2669 ** Returns          void
2670 **
2671 *******************************************************************************/
2672 #if (SMP_INCLUDED == TRUE)
BTA_DmSetEncryption(BD_ADDR bd_addr,tBTA_TRANSPORT transport,tBTA_DM_ENCRYPT_CBACK * p_callback,tBTA_DM_BLE_SEC_ACT sec_act)2673 void BTA_DmSetEncryption(BD_ADDR bd_addr, tBTA_TRANSPORT transport, tBTA_DM_ENCRYPT_CBACK *p_callback,
2674                          tBTA_DM_BLE_SEC_ACT sec_act)
2675 {
2676     tBTA_DM_API_SET_ENCRYPTION   *p_msg;
2677 
2678     APPL_TRACE_API("BTA_DmSetEncryption"); //todo
2679     if ((p_msg = (tBTA_DM_API_SET_ENCRYPTION *) osi_malloc(sizeof(tBTA_DM_API_SET_ENCRYPTION))) != NULL) {
2680         memset(p_msg, 0, sizeof(tBTA_DM_API_SET_ENCRYPTION));
2681 
2682         p_msg->hdr.event = BTA_DM_API_SET_ENCRYPTION_EVT;
2683 
2684         memcpy(p_msg->bd_addr, bd_addr, BD_ADDR_LEN);
2685         p_msg->transport    = transport;
2686         p_msg->p_callback      = p_callback;
2687         p_msg->sec_act         = sec_act;
2688 
2689         bta_sys_sendmsg(p_msg);
2690     }
2691 }
2692 #endif  ///SMP_INCLUDED == TRUE
2693 
2694 /*******************************************************************************
2695 **
2696 ** Function         BTA_DmCloseACL
2697 **
2698 ** Description      This function force to close an ACL connection and remove the
2699 **                  device from the security database list of known devices.
2700 **
2701 ** Parameters:      bd_addr       - Address of the peer device
2702 **                  remove_dev    - remove device or not after link down
2703 **
2704 ** Returns          void
2705 **
2706 *******************************************************************************/
BTA_DmCloseACL(BD_ADDR bd_addr,BOOLEAN remove_dev,tBTA_TRANSPORT transport)2707 void BTA_DmCloseACL(BD_ADDR bd_addr, BOOLEAN remove_dev, tBTA_TRANSPORT transport)
2708 {
2709     tBTA_DM_API_REMOVE_ACL   *p_msg;
2710 
2711     APPL_TRACE_API("BTA_DmCloseACL");
2712 
2713     if ((p_msg = (tBTA_DM_API_REMOVE_ACL *) osi_malloc(sizeof(tBTA_DM_API_REMOVE_ACL))) != NULL) {
2714         memset(p_msg, 0, sizeof(tBTA_DM_API_REMOVE_ACL));
2715 
2716         p_msg->hdr.event = BTA_DM_API_REMOVE_ACL_EVT;
2717 
2718         memcpy(p_msg->bd_addr, bd_addr, BD_ADDR_LEN);
2719         p_msg->remove_dev      = remove_dev;
2720         p_msg->transport       = transport;
2721 
2722         bta_sys_sendmsg(p_msg);
2723     }
2724 }
2725 
2726 #if BLE_INCLUDED == TRUE
2727 /*******************************************************************************
2728 **
2729 ** Function         BTA_DmBleObserve
2730 **
2731 ** Description      This procedure keep the device listening for advertising
2732 **                  events from a broadcast device.
2733 **
2734 ** Parameters       start: start or stop observe.
2735 **
2736 ** Returns          void
2737 
2738 **
2739 ** Returns          void.
2740 **
2741 *******************************************************************************/
BTA_DmBleObserve(BOOLEAN start,UINT32 duration,tBTA_DM_SEARCH_CBACK * p_results_cb,tBTA_START_STOP_SCAN_CMPL_CBACK * p_start_stop_scan_cb)2742 extern void BTA_DmBleObserve(BOOLEAN start, UINT32 duration,
2743                              tBTA_DM_SEARCH_CBACK *p_results_cb,
2744                              tBTA_START_STOP_SCAN_CMPL_CBACK *p_start_stop_scan_cb)
2745 {
2746     tBTA_DM_API_BLE_OBSERVE   *p_msg;
2747 
2748     APPL_TRACE_API("BTA_DmBleObserve:start = %d ", start);
2749 
2750     if ((p_msg = (tBTA_DM_API_BLE_OBSERVE *) osi_malloc(sizeof(tBTA_DM_API_BLE_OBSERVE))) != NULL) {
2751         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_OBSERVE));
2752 
2753         p_msg->hdr.event = BTA_DM_API_BLE_OBSERVE_EVT;
2754         p_msg->start = start;
2755         p_msg->duration = duration;
2756         p_msg->p_cback = p_results_cb;
2757         if (start){
2758             p_msg->p_start_scan_cback = p_start_stop_scan_cb;
2759         }
2760         else {
2761             p_msg->p_stop_scan_cback = p_start_stop_scan_cb;
2762         }
2763 
2764         bta_sys_sendmsg(p_msg);
2765     }
2766 }
2767 
2768 /*******************************************************************************
2769 **
2770 ** Function         BTA_DmBleScan
2771 **
2772 ** Description      This procedure keep the device listening for advertising
2773 **                  events from a broadcast device.
2774 **
2775 ** Parameters       start: start or stop scan.
2776 **
2777 ** Returns          void
2778 
2779 **
2780 ** Returns          void.
2781 **
2782 *******************************************************************************/
BTA_DmBleScan(BOOLEAN start,UINT32 duration,tBTA_DM_SEARCH_CBACK * p_results_cb,tBTA_START_STOP_SCAN_CMPL_CBACK * p_start_stop_scan_cb)2783 extern void BTA_DmBleScan(BOOLEAN start, UINT32 duration,
2784                              tBTA_DM_SEARCH_CBACK *p_results_cb,
2785                              tBTA_START_STOP_SCAN_CMPL_CBACK *p_start_stop_scan_cb)
2786 {
2787     tBTA_DM_API_BLE_SCAN   *p_msg;
2788 
2789     APPL_TRACE_API("BTA_DmBleScan:start = %d ", start);
2790 
2791     if ((p_msg = (tBTA_DM_API_BLE_SCAN *) osi_malloc(sizeof(tBTA_DM_API_BLE_SCAN))) != NULL) {
2792         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_SCAN));
2793 
2794         p_msg->hdr.event = BTA_DM_API_BLE_SCAN_EVT;
2795         p_msg->start = start;
2796         p_msg->duration = duration;
2797         p_msg->p_cback = p_results_cb;
2798         if (start){
2799             p_msg->p_start_scan_cback = p_start_stop_scan_cb;
2800         }
2801         else {
2802             p_msg->p_stop_scan_cback = p_start_stop_scan_cb;
2803         }
2804 
2805         bta_sys_sendmsg(p_msg);
2806     }
2807 }
2808 
2809 /*******************************************************************************
2810 **
2811 ** Function         BTA_DmBleStopAdvertising
2812 **
2813 ** Description      This function set the random address for the APP
2814 **
2815 ** Parameters       void
2816 **
2817 ** Returns          void
2818 **
2819 **
2820 *******************************************************************************/
BTA_DmBleStopAdvertising(void)2821 extern void BTA_DmBleStopAdvertising(void)
2822 {
2823     BT_HDR   *p_msg;
2824 
2825     APPL_TRACE_API("BTA_DmBleStopAdvertising\n");
2826 
2827     if ((p_msg = (BT_HDR *) osi_malloc(sizeof(BT_HDR))) != NULL) {
2828         memset(p_msg, 0, sizeof(BT_HDR));
2829         p_msg->event = BTA_DM_API_BLE_STOP_ADV_EVT;
2830         bta_sys_sendmsg(p_msg);
2831     }
2832 }
2833 
2834 
2835 /*******************************************************************************
2836 **
2837 ** Function         BTA_DmSetRandAddress
2838 **
2839 ** Description      This function set the random address for the APP
2840 **
2841 ** Parameters       rand_addr: the random address with should be setting
2842 **                  p_set_rand_addr_cback: complete callback
2843 ** Returns          void
2844 **
2845 **
2846 *******************************************************************************/
BTA_DmSetRandAddress(BD_ADDR rand_addr,tBTA_SET_RAND_ADDR_CBACK * p_set_rand_addr_cback)2847 extern void BTA_DmSetRandAddress(BD_ADDR rand_addr, tBTA_SET_RAND_ADDR_CBACK *p_set_rand_addr_cback)
2848 {
2849     tBTA_DM_APT_SET_DEV_ADDR *p_msg;
2850     APPL_TRACE_API("set the random address ");
2851     if ((p_msg = (tBTA_DM_APT_SET_DEV_ADDR *) osi_malloc(sizeof(tBTA_DM_APT_SET_DEV_ADDR))) != NULL) {
2852         memset(p_msg, 0, sizeof(tBTA_DM_APT_SET_DEV_ADDR));
2853         memcpy(p_msg->address, rand_addr, BD_ADDR_LEN);
2854         p_msg->hdr.event = BTA_DM_API_SET_RAND_ADDR_EVT;
2855         p_msg->addr_type = BLE_ADDR_RANDOM;
2856         p_msg->p_set_rand_addr_cback = p_set_rand_addr_cback;
2857         //start sent the msg to the bta system control module
2858         bta_sys_sendmsg(p_msg);
2859     }
2860 }
2861 /*******************************************************************************
2862 **
2863 ** Function         BTA_DmBleSetRpaTimeout
2864 **
2865 ** Description      This function sets the Resolvable Private Address (RPA) timeout
2866 **                  for the Bluetooth device. The RPA timeout defines how long an RPA
2867 **                  remains in use before a new one is generated.
2868 **
2869 ** Parameters       rpa_timeout: The timeout in seconds within the range of 1s to 1 hour
2870 **                               as defined by the Bluetooth specification. This duration
2871 **                               specifies how long the controller uses an RPA before
2872 **                               generating a new one.
2873 ** Returns          void
2874 **
2875 **
2876 *******************************************************************************/
BTA_DmBleSetRpaTimeout(uint16_t rpa_timeout,tBTA_SET_RPA_TIMEOUT_CMPL_CBACK * p_set_rpa_timeout_cback)2877 void BTA_DmBleSetRpaTimeout(uint16_t rpa_timeout,tBTA_SET_RPA_TIMEOUT_CMPL_CBACK *p_set_rpa_timeout_cback)
2878 {
2879     tBTA_DM_API_SET_RPA_TIMEOUT *p_msg;
2880     if ((p_msg = (tBTA_DM_API_SET_RPA_TIMEOUT *) osi_malloc(sizeof(tBTA_DM_API_SET_RPA_TIMEOUT))) != NULL) {
2881         memset(p_msg, 0, sizeof(tBTA_DM_API_SET_RPA_TIMEOUT));
2882         p_msg->hdr.event = BTA_DM_API_SET_RPA_TIMEOUT_EVT;
2883         p_msg->rpa_timeout = rpa_timeout; // Assign the RPA timeout value to the message
2884         p_msg->p_set_rpa_timeout_cback = p_set_rpa_timeout_cback;
2885         bta_sys_sendmsg(p_msg);
2886     }
2887 }
2888 
2889 /*******************************************************************************
2890 **
2891 ** Function         BTA_DmBleAddDevToResolvingList
2892 **
2893 ** Description      This function adds a device to the resolving list of the
2894 **                  Bluetooth controller. The resolving list is used for resolving
2895 **                  the identity of devices using resolvable private addresses (RPAs).
2896 **
2897 ** Parameters       addr: Bluetooth device address to be added to the resolving list
2898 **                  addr_type: Type of the address (public or random)
2899 **                  irk: Identity Resolving Key (IRK) of the device
2900 **                  add_dev_to_resolving_list_callback: Callback function to be invoked
2901 **                                                     upon completion of the operation
2902 **
2903 ** Returns          void
2904 **
2905 *******************************************************************************/
BTA_DmBleAddDevToResolvingList(BD_ADDR addr,uint8_t addr_type,PEER_IRK irk,tBTA_ADD_DEV_TO_RESOLVING_LIST_CMPL_CBACK * add_dev_to_resolving_list_callback)2906 void BTA_DmBleAddDevToResolvingList(BD_ADDR addr,
2907                                     uint8_t addr_type,
2908                                     PEER_IRK irk,
2909                                     tBTA_ADD_DEV_TO_RESOLVING_LIST_CMPL_CBACK *add_dev_to_resolving_list_callback)
2910 {
2911     tBTA_DM_API_ADD_DEV_TO_RESOLVING_LIST *p_msg;
2912     if ((p_msg = (tBTA_DM_API_ADD_DEV_TO_RESOLVING_LIST *) osi_malloc(sizeof(tBTA_DM_API_ADD_DEV_TO_RESOLVING_LIST))) != NULL) {
2913         memset(p_msg, 0, sizeof(tBTA_DM_API_ADD_DEV_TO_RESOLVING_LIST));
2914         p_msg->hdr.event = BTA_DM_API_ADD_DEV_TO_RESOLVING_LIST_EVT;
2915         memcpy(p_msg->addr, addr, BD_ADDR_LEN); // Copy the device address to the message
2916         p_msg->addr_type = addr_type;                      // Assign the address type to the message
2917         memcpy(p_msg->irk, irk, PEER_IRK_LEN);            // Copy the IRK to the message
2918         p_msg->p_add_dev_to_resolving_list_callback = add_dev_to_resolving_list_callback;
2919         bta_sys_sendmsg(p_msg);
2920     }
2921 }
2922 
BTA_DmClearRandAddress(void)2923 void BTA_DmClearRandAddress(void)
2924 {
2925     tBTA_DM_APT_CLEAR_ADDR *p_msg;
2926     if ((p_msg = (tBTA_DM_APT_CLEAR_ADDR *) osi_malloc(sizeof(tBTA_DM_APT_CLEAR_ADDR))) != NULL) {
2927         memset(p_msg, 0, sizeof(tBTA_DM_APT_CLEAR_ADDR));
2928         p_msg->hdr.event = BTA_DM_API_CLEAR_RAND_ADDR_EVT;
2929         bta_sys_sendmsg(p_msg);
2930     }
2931 }
2932 
BTA_DmBleGapSetCsaSupport(uint8_t csa_select,tBTA_SET_CSA_SUPPORT_CMPL_CBACK * p_callback)2933 void BTA_DmBleGapSetCsaSupport(uint8_t csa_select, tBTA_SET_CSA_SUPPORT_CMPL_CBACK *p_callback)
2934 {
2935     tBTA_DM_API_BLE_SET_CSA_SUPPORT *p_msg;
2936 
2937     if ((p_msg = (tBTA_DM_API_BLE_SET_CSA_SUPPORT *)osi_malloc(sizeof(tBTA_DM_API_BLE_SET_CSA_SUPPORT)))
2938         != NULL) {
2939         p_msg->hdr.event = BTA_DM_API_BLE_SET_CSA_SUPPORT_EVT;
2940         p_msg->csa_select = csa_select;
2941         p_msg->p_cback = p_callback;
2942         bta_sys_sendmsg(p_msg);
2943     }
2944 }
2945 
2946 /*******************************************************************************
2947 **
2948 ** Function         BTA_VendorInit
2949 **
2950 ** Description      This function initializes vendor specific
2951 **
2952 ** Returns          void
2953 **
2954 *******************************************************************************/
BTA_VendorInit(void)2955 void BTA_VendorInit (void)
2956 {
2957     APPL_TRACE_API("BTA_VendorInit");
2958 }
2959 
2960 /*******************************************************************************
2961 **
2962 ** Function         BTA_VendorCleanup
2963 **
2964 ** Description      This function frees up Broadcom specific VS specific dynamic memory
2965 **
2966 ** Returns          void
2967 **
2968 *******************************************************************************/
BTA_VendorCleanup(void)2969 void BTA_VendorCleanup (void)
2970 {
2971     tBTM_BLE_VSC_CB cmn_ble_vsc_cb;
2972     BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb);
2973 
2974 #if (BLE_INCLUDED == TRUE && BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE)
2975     btm_ble_adv_filter_cleanup();       // when BLE_VND_INCLUDED is false, this function will be ignore, so move it out of "if"
2976 
2977 #if 0                                   //by TH, comment out temporarily
2978     if (cmn_ble_vsc_cb.max_filter > 0) {
2979         btm_ble_adv_filter_cleanup();
2980 #if BLE_PRIVACY_SPT == TRUE
2981         btm_ble_resolving_list_cleanup ();
2982 #endif
2983     }
2984 #endif
2985 
2986     if (cmn_ble_vsc_cb.tot_scan_results_strg > 0) {
2987         btm_ble_batchscan_cleanup();
2988     }
2989 #endif
2990 
2991 }
2992 #if (BLE_50_FEATURE_SUPPORT == TRUE)
BTA_DmBleGapReadPHY(BD_ADDR addr)2993 void BTA_DmBleGapReadPHY(BD_ADDR addr)
2994 {
2995     tBTA_DM_API_READ_PHY *p_msg;
2996     APPL_TRACE_API("%s, read phy.", __func__);
2997     if ((p_msg = (tBTA_DM_API_READ_PHY *) osi_malloc(sizeof(tBTA_DM_API_READ_PHY))) != NULL) {
2998         memset(p_msg, 0, sizeof(tBTA_DM_API_READ_PHY));
2999         p_msg->hdr.event = BTA_DM_API_READ_PHY_EVT;
3000         memcpy(p_msg->bd_addr, addr, BD_ADDR_LEN);
3001         //start sent the msg to the bta system control module
3002         bta_sys_sendmsg(p_msg);
3003     } else {
3004         APPL_TRACE_ERROR("%s malloc failed", __func__);
3005     }
3006 
3007 }
3008 
BTA_DmBleGapSetPreferedDefaultPHY(tBTA_DM_BLE_GAP_PHY_MASK tx_phy_mask,tBTA_DM_BLE_GAP_PHY_MASK rx_phy_mask)3009 void BTA_DmBleGapSetPreferedDefaultPHY(tBTA_DM_BLE_GAP_PHY_MASK tx_phy_mask,
3010                                                           tBTA_DM_BLE_GAP_PHY_MASK rx_phy_mask)
3011 {
3012     tBTA_DM_API_SET_PER_DEF_PHY *p_msg;
3013     APPL_TRACE_API("%s, Set preferred default phy.", __func__);
3014     if ((p_msg = (tBTA_DM_API_SET_PER_DEF_PHY *) osi_malloc(sizeof(tBTA_DM_API_SET_PER_DEF_PHY))) != NULL) {
3015         memset(p_msg, 0, sizeof(tBTA_DM_API_SET_PER_DEF_PHY));
3016         p_msg->hdr.event = BTA_DM_API_SET_PER_DEF_PHY_EVT;
3017         p_msg->tx_phy_mask = tx_phy_mask;
3018         p_msg->rx_phy_mask = rx_phy_mask;
3019         //start sent the msg to the bta system control module
3020         bta_sys_sendmsg(p_msg);
3021     } else {
3022         APPL_TRACE_ERROR("%s malloc failed", __func__);
3023     }
3024 
3025 }
3026 
BTA_DmBleGapSetPreferedPHY(BD_ADDR addr,UINT8 all_phys,tBTA_DM_BLE_GAP_PHY_MASK tx_phy_mask,tBTA_DM_BLE_GAP_PHY_MASK rx_phy_mask,UINT16 phy_options)3027 void BTA_DmBleGapSetPreferedPHY(BD_ADDR addr,
3028                                                UINT8 all_phys,
3029                                                tBTA_DM_BLE_GAP_PHY_MASK tx_phy_mask,
3030                                                tBTA_DM_BLE_GAP_PHY_MASK rx_phy_mask,
3031                                                UINT16 phy_options)
3032 {
3033     tBTA_DM_API_SET_PER_PHY *p_msg;
3034     APPL_TRACE_API("%s, Set preferred phy.", __func__);
3035     if ((p_msg = (tBTA_DM_API_SET_PER_PHY *) osi_malloc(sizeof(tBTA_DM_API_SET_PER_PHY))) != NULL) {
3036         memset(p_msg, 0, sizeof(tBTA_DM_API_SET_PER_PHY));
3037         p_msg->hdr.event = BTA_DM_API_SET_PER_PHY_EVT;
3038         memcpy(p_msg->bd_addr, addr, BD_ADDR_LEN);
3039         p_msg->all_phys = all_phys;
3040         p_msg->tx_phy_mask = tx_phy_mask;
3041         p_msg->rx_phy_mask = rx_phy_mask;
3042         p_msg->phy_options = phy_options;
3043         //start sent the msg to the bta system control module
3044         bta_sys_sendmsg(p_msg);
3045     } else {
3046         APPL_TRACE_ERROR("%s malloc failed", __func__);
3047     }
3048 }
3049 
BTA_DmBleGapExtAdvSetRandaddr(UINT16 instance,BD_ADDR addr)3050 void BTA_DmBleGapExtAdvSetRandaddr(UINT16 instance, BD_ADDR addr)
3051 {
3052     tBTA_DM_API_EXT_ADV_SET_RAND_ADDR *p_msg;
3053     APPL_TRACE_API("%s, Set extended ADV parameters.", __func__);
3054     if ((p_msg = (tBTA_DM_API_EXT_ADV_SET_RAND_ADDR *) osi_malloc(sizeof(tBTA_DM_API_EXT_ADV_SET_RAND_ADDR))) != NULL) {
3055         memset(p_msg, 0, sizeof(tBTA_DM_API_EXT_ADV_SET_RAND_ADDR));
3056         p_msg->hdr.event = BTA_DM_API_SET_EXT_ADV_RAND_ADDR_EVT;
3057         p_msg->instance = instance;
3058         memcpy(&p_msg->rand_addr, addr, BD_ADDR_LEN);
3059         //start sent the msg to the bta system control module
3060         bta_sys_sendmsg(p_msg);
3061     } else {
3062         APPL_TRACE_ERROR("%s malloc failed", __func__);
3063     }
3064 
3065 }
3066 
BTA_DmBleGapExtAdvSetParams(UINT16 instance,const tBTA_DM_BLE_GAP_EXT_ADV_PARAMS * params)3067 void BTA_DmBleGapExtAdvSetParams(UINT16 instance,
3068                                                  const tBTA_DM_BLE_GAP_EXT_ADV_PARAMS *params)
3069 {
3070     tBTA_DM_API_EXT_ADV_SET_PARAMS *p_msg;
3071     APPL_TRACE_API("%s, Set extended ADV parameters.", __func__);
3072     if ((p_msg = (tBTA_DM_API_EXT_ADV_SET_PARAMS *) osi_malloc(sizeof(tBTA_DM_API_EXT_ADV_SET_PARAMS))) != NULL) {
3073         memset(p_msg, 0, sizeof(tBTA_DM_API_EXT_ADV_SET_PARAMS));
3074         p_msg->hdr.event = BTA_DM_API_SET_EXT_ADV_PARAMS_EVT;
3075         p_msg->instance = instance;
3076         memcpy(&p_msg->params, params, sizeof(tBTA_DM_BLE_GAP_EXT_ADV_PARAMS));
3077         //start sent the msg to the bta system control module
3078         bta_sys_sendmsg(p_msg);
3079     } else {
3080         APPL_TRACE_ERROR("%s malloc failed", __func__);
3081     }
3082 
3083 }
3084 
BTA_DmBleGapConfigExtAdvDataRaw(BOOLEAN is_scan_rsp,UINT8 instance,UINT16 length,const UINT8 * data)3085 void BTA_DmBleGapConfigExtAdvDataRaw(BOOLEAN is_scan_rsp, UINT8 instance, UINT16 length,
3086                                                         const UINT8 *data)
3087 {
3088     tBTA_DM_API_CFG_EXT_ADV_DATA *p_msg;
3089     APPL_TRACE_API("%s, Config extended %s data.", __func__, is_scan_rsp ? "Scan rsp" : "Adv");
3090     if ((p_msg = (tBTA_DM_API_CFG_EXT_ADV_DATA *) osi_malloc(sizeof(tBTA_DM_API_CFG_EXT_ADV_DATA) + length)) != NULL) {
3091         memset(p_msg, 0, sizeof(tBTA_DM_API_CFG_EXT_ADV_DATA) + length);
3092         p_msg->hdr.event = BTA_DM_API_CFG_ADV_DATA_RAW_EVT;
3093         p_msg->is_scan_rsp = is_scan_rsp;
3094         p_msg->instance = instance;
3095         p_msg->length = length;
3096         p_msg->data = length != 0 ? (UINT8 *)(p_msg + 1) : NULL;
3097         if (data) {
3098             memcpy(p_msg->data, data, length);
3099         }
3100         //start sent the msg to the bta system control module
3101         bta_sys_sendmsg(p_msg);
3102     } else {
3103         APPL_TRACE_ERROR("%s malloc failed", __func__);
3104     }
3105 }
3106 
BTA_DmBleGapExtAdvEnable(BOOLEAN enable,UINT8 num,tBTA_DM_BLE_EXT_ADV * ext_adv)3107 void BTA_DmBleGapExtAdvEnable(BOOLEAN enable, UINT8 num, tBTA_DM_BLE_EXT_ADV *ext_adv)
3108 {
3109     tBTA_DM_API_BLE_EXT_ADV *p_msg;
3110     APPL_TRACE_API("%s, Start extended ADV", __func__);
3111     if ((p_msg = (tBTA_DM_API_BLE_EXT_ADV *) osi_malloc(sizeof(tBTA_DM_API_BLE_EXT_ADV) + sizeof(tBTA_DM_BLE_EXT_ADV)*num)) != NULL) {
3112         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_EXT_ADV) + sizeof(tBTA_DM_BLE_EXT_ADV)*num);
3113         p_msg->hdr.event = BTA_DM_API_EXT_ADV_ENABLE_EVT;
3114         p_msg->enable = enable;
3115         p_msg->num = num;
3116         p_msg->ext_adv = (tBTA_DM_BLE_EXT_ADV *)(p_msg + 1);
3117         if (ext_adv) {
3118             memcpy(p_msg->ext_adv, ext_adv, sizeof(tBTA_DM_BLE_EXT_ADV)*num);
3119         }
3120         //start sent the msg to the bta system control module
3121         bta_sys_sendmsg(p_msg);
3122     } else {
3123         APPL_TRACE_ERROR("%s malloc failed", __func__);
3124     }
3125 }
3126 
BTA_DmBleGapExtAdvSetRemove(UINT8 instance)3127 void BTA_DmBleGapExtAdvSetRemove(UINT8 instance)
3128 {
3129     tBTA_DM_API_BLE_EXT_ADV_SET_REMOVE *p_msg;
3130     APPL_TRACE_API("%s, Remove extended ADV", __func__);
3131     if ((p_msg = (tBTA_DM_API_BLE_EXT_ADV_SET_REMOVE *) osi_malloc(sizeof(tBTA_DM_API_BLE_EXT_ADV_SET_REMOVE))) != NULL) {
3132         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_EXT_ADV_SET_REMOVE));
3133         p_msg->hdr.event = BTA_DM_API_EXT_ADV_SET_REMOVE_EVT;
3134         p_msg->instance = instance;
3135         //start sent the msg to the bta system control module
3136         bta_sys_sendmsg(p_msg);
3137     } else {
3138         APPL_TRACE_ERROR("%s malloc failed", __func__);
3139     }
3140 }
3141 
BTA_DmBleGapExtAdvSetClear(void)3142 void BTA_DmBleGapExtAdvSetClear(void)
3143 {
3144     tBTA_DM_API_BLE_EXT_ADV_SET_CLEAR *p_msg;
3145     APPL_TRACE_API("%s, Clear extended ADV", __func__);
3146     if ((p_msg = (tBTA_DM_API_BLE_EXT_ADV_SET_CLEAR *) osi_malloc(sizeof(tBTA_DM_API_BLE_EXT_ADV_SET_CLEAR))) != NULL) {
3147         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_EXT_ADV_SET_CLEAR));
3148         p_msg->hdr.event = BTA_DM_API_EXT_ADV_SET_CLEAR_EVT;
3149         //start sent the msg to the bta system control module
3150         bta_sys_sendmsg(p_msg);
3151     } else {
3152         APPL_TRACE_ERROR("%s malloc failed", __func__);
3153     }
3154 }
3155 
BTA_DmBleGapPeriodicAdvSetParams(UINT8 instance,tBTA_DM_BLE_Periodic_Adv_Params * params)3156 void BTA_DmBleGapPeriodicAdvSetParams(UINT8 instance,
3157                                                          tBTA_DM_BLE_Periodic_Adv_Params *params)
3158 {
3159     tBTA_DM_API_BLE_PERIODIC_ADV_SET_PARAMS *p_msg;
3160     APPL_TRACE_API("%s, Periodic ADV set parameters.", __func__);
3161     if ((p_msg = (tBTA_DM_API_BLE_PERIODIC_ADV_SET_PARAMS *) osi_malloc(sizeof(tBTA_DM_API_BLE_PERIODIC_ADV_SET_PARAMS))) != NULL) {
3162         memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_PERIODIC_ADV_SET_PARAMS));
3163         p_msg->hdr.event = BTA_DM_API_PERIODIC_ADV_SET_PARAMS_EVT;
3164         p_msg->instance = instance;
3165         memcpy(&p_msg->params, params, sizeof(tBTA_DM_BLE_Periodic_Adv_Params));
3166         //start sent the msg to the bta system control module
3167         bta_sys_sendmsg(p_msg);
3168     } else {
3169         APPL_TRACE_ERROR("%s malloc failed", __func__);
3170     }
3171 
3172 }
3173 
BTA_DmBleGapPeriodicAdvCfgDataRaw(UINT8 instance,UINT16 length,const UINT8 * data,bool only_update_did)3174 void BTA_DmBleGapPeriodicAdvCfgDataRaw(UINT8 instance, UINT16 length,
3175                                                            const UINT8 *data,bool only_update_did)
3176 {
3177     tBTA_DM_API_CFG_PERIODIC_ADV_DATA *p_msg;
3178     APPL_TRACE_API("%s, Periodic ADV config data raw.", __func__);
3179     if ((p_msg = (tBTA_DM_API_CFG_PERIODIC_ADV_DATA *) osi_malloc(sizeof(tBTA_DM_API_CFG_PERIODIC_ADV_DATA) + length)) != NULL) {
3180         memset(p_msg, 0, sizeof(tBTA_DM_API_CFG_PERIODIC_ADV_DATA) + length);
3181         p_msg->hdr.event = BTA_DM_API_PERIODIC_ADV_CFG_DATA_EVT;
3182         p_msg->instance = instance;
3183         p_msg->length = length;
3184         p_msg->data = (UINT8 *)(p_msg + 1);
3185         memcpy(p_msg->data, data, length);
3186         p_msg->data = length != 0 ? (UINT8 *)(p_msg + 1) : NULL;
3187         p_msg->only_update_did = only_update_did;
3188         //start sent the msg to the bta system control module
3189         bta_sys_sendmsg(p_msg);
3190     } else {
3191         APPL_TRACE_ERROR("%s malloc failed", __func__);
3192     }
3193 
3194 }
3195 
BTA_DmBleGapPeriodicAdvEnable(UINT8 enable,UINT8 instance)3196 void BTA_DmBleGapPeriodicAdvEnable(UINT8 enable, UINT8 instance)
3197 {
3198     tBTA_DM_API_ENABLE_PERIODIC_ADV *p_msg;
3199     APPL_TRACE_API("%s, Periodic ADV %s.", __func__, enable ? "start" : "stop");
3200     if ((p_msg = (tBTA_DM_API_ENABLE_PERIODIC_ADV *) osi_malloc(sizeof(tBTA_DM_API_ENABLE_PERIODIC_ADV))) != NULL) {
3201         memset(p_msg, 0, sizeof(tBTA_DM_API_ENABLE_PERIODIC_ADV));
3202         p_msg->hdr.event = BTA_DM_API_PERIODIC_ADV_ENABLE_EVT;
3203         p_msg->instance = instance;
3204         p_msg->enable = enable;
3205         //start sent the msg to the bta system control module
3206         bta_sys_sendmsg(p_msg);
3207     } else {
3208         APPL_TRACE_ERROR("%s malloc failed", __func__);
3209     }
3210 
3211 }
3212 
BTA_DmBleGapPeriodicAdvCreateSync(tBTA_DM_BLE_Periodic_Sync_Params * params)3213 void BTA_DmBleGapPeriodicAdvCreateSync(tBTA_DM_BLE_Periodic_Sync_Params *params)
3214 {
3215     tBTA_DM_API_PERIODIC_ADV_SYNC *p_msg;
3216     APPL_TRACE_API("%s, Periodic ADV create sync.", __func__);
3217     if ((p_msg = (tBTA_DM_API_PERIODIC_ADV_SYNC *) osi_malloc(sizeof(tBTA_DM_API_PERIODIC_ADV_SYNC))) != NULL) {
3218         memset(p_msg, 0, sizeof(tBTA_DM_API_PERIODIC_ADV_SYNC));
3219         p_msg->hdr.event = BTA_DM_API_PERIODIC_ADV_SYNC_EVT;
3220         memcpy(&p_msg->params, params, sizeof(tBTA_DM_BLE_Periodic_Sync_Params));
3221         //start sent the msg to the bta system control module
3222         bta_sys_sendmsg(p_msg);
3223     } else {
3224         APPL_TRACE_ERROR("%s malloc failed", __func__);
3225     }
3226 
3227 }
3228 
BTA_DmBleGapPeriodicAdvSyncCancel(void)3229 void BTA_DmBleGapPeriodicAdvSyncCancel(void)
3230 {
3231     tBTA_DM_API_PERIODIC_ADV_SYNC_CANCEL *p_msg;
3232     APPL_TRACE_API("%s, Periodic ADV sync cancel.", __func__);
3233     if ((p_msg = (tBTA_DM_API_PERIODIC_ADV_SYNC_CANCEL *) osi_malloc(sizeof(tBTA_DM_API_PERIODIC_ADV_SYNC_CANCEL))) != NULL) {
3234         memset(p_msg, 0, sizeof(tBTA_DM_API_PERIODIC_ADV_SYNC_CANCEL));
3235         p_msg->hdr.event = BTA_DM_API_PERIODIC_ADV_SYNC_CANCEL_EVT;
3236         //start sent the msg to the bta system control module
3237         bta_sys_sendmsg(p_msg);
3238     } else {
3239         APPL_TRACE_ERROR("%s malloc failed", __func__);
3240     }
3241 
3242 }
3243 
BTA_DmBleGapPeriodicAdvSyncTerm(UINT16 sync_handle)3244 void BTA_DmBleGapPeriodicAdvSyncTerm(UINT16 sync_handle)
3245 {
3246     tBTA_DM_API_PERIODIC_ADV_SYNC_TERM *p_msg;
3247     APPL_TRACE_API("%s, Periodic ADV sync terminat.", __func__);
3248     if ((p_msg = (tBTA_DM_API_PERIODIC_ADV_SYNC_TERM *) osi_malloc(sizeof(tBTA_DM_API_PERIODIC_ADV_SYNC_TERM))) != NULL) {
3249         memset(p_msg, 0, sizeof(tBTA_DM_API_PERIODIC_ADV_SYNC_TERM));
3250         p_msg->hdr.event = BTA_DM_API_PERIODIC_ADV_SYNC_TERMINATE_EVT;
3251         p_msg->sync_handle = sync_handle;
3252         //start sent the msg to the bta system control module
3253         bta_sys_sendmsg(p_msg);
3254     } else {
3255         APPL_TRACE_ERROR("%s malloc failed", __func__);
3256     }
3257 
3258 }
3259 
BTA_DmBleGapPeriodicAdvAddDevToList(tBLE_ADDR_TYPE addr_type,BD_ADDR addr,UINT16 sid)3260 void BTA_DmBleGapPeriodicAdvAddDevToList(tBLE_ADDR_TYPE addr_type,
3261                                                               BD_ADDR addr,
3262                                                               UINT16 sid)
3263 {
3264     tBTA_DM_API_PERIODIC_ADV_ADD_DEV_TO_LIST *p_msg;
3265     APPL_TRACE_API("%s, Periodic ADV add device to list.", __func__);
3266     if ((p_msg = (tBTA_DM_API_PERIODIC_ADV_ADD_DEV_TO_LIST *) osi_malloc(sizeof(tBTA_DM_API_PERIODIC_ADV_ADD_DEV_TO_LIST))) != NULL) {
3267         memset(p_msg, 0, sizeof(tBTA_DM_API_PERIODIC_ADV_ADD_DEV_TO_LIST));
3268         p_msg->hdr.event = BTA_DM_API_PERIODIC_ADV_ADD_DEV_TO_LSIT_EVT;
3269         p_msg->addr_type = addr_type;
3270         p_msg->sid = sid;
3271         memcpy(p_msg->addr, addr, sizeof(BD_ADDR));
3272         //start sent the msg to the bta system control module
3273         bta_sys_sendmsg(p_msg);
3274     } else {
3275         APPL_TRACE_ERROR("%s malloc failed", __func__);
3276     }
3277 
3278 }
3279 
BTA_DmBleGapPeriodicAdvRemoveDevFromList(tBLE_ADDR_TYPE addr_type,BD_ADDR addr,UINT16 sid)3280 void BTA_DmBleGapPeriodicAdvRemoveDevFromList(tBLE_ADDR_TYPE addr_type,
3281                                                               BD_ADDR addr,
3282                                                               UINT16 sid)
3283 {
3284     tBTA_DM_API_PERIODIC_ADV_REMOVE_DEV_FROM_LIST *p_msg;
3285     APPL_TRACE_API("%s, Periodic ADV remove device from list.", __func__);
3286     if ((p_msg = (tBTA_DM_API_PERIODIC_ADV_REMOVE_DEV_FROM_LIST *) osi_malloc(sizeof(tBTA_DM_API_PERIODIC_ADV_REMOVE_DEV_FROM_LIST))) != NULL) {
3287         memset(p_msg, 0, sizeof(tBTA_DM_API_PERIODIC_ADV_REMOVE_DEV_FROM_LIST));
3288         p_msg->hdr.event = BTA_DM_API_PERIODIC_ADV_REMOVE_DEV_FROM_LSIT_EVT;
3289         p_msg->addr_type = addr_type;
3290         p_msg->sid = sid;
3291         memcpy(p_msg->addr, addr, sizeof(BD_ADDR));
3292         //start sent the msg to the bta system control module
3293         bta_sys_sendmsg(p_msg);
3294     } else {
3295         APPL_TRACE_ERROR("%s malloc failed", __func__);
3296     }
3297 
3298 }
3299 
BTA_DmBleGapPeriodicAdvClearDev(void)3300 void BTA_DmBleGapPeriodicAdvClearDev(void)
3301 {
3302     tBTA_DM_API_PERIODIC_ADV_DEV_CLEAR *p_msg;
3303     APPL_TRACE_API("%s, Periodic ADV clear device from list.", __func__);
3304     if ((p_msg = (tBTA_DM_API_PERIODIC_ADV_DEV_CLEAR *) osi_malloc(sizeof(tBTA_DM_API_PERIODIC_ADV_DEV_CLEAR))) != NULL) {
3305         memset(p_msg, 0, sizeof(tBTA_DM_API_PERIODIC_ADV_DEV_CLEAR));
3306         p_msg->hdr.event = BTA_DM_API_PERIODIC_ADV_CLEAR_DEV_EVT;
3307         //start sent the msg to the bta system control module
3308         bta_sys_sendmsg(p_msg);
3309     } else {
3310         APPL_TRACE_ERROR("%s malloc failed", __func__);
3311     }
3312 
3313 }
3314 
BTA_DmBleGapSetExtScanParams(tBTA_DM_BLE_EXT_SCAN_PARAMS * params)3315 void BTA_DmBleGapSetExtScanParams(tBTA_DM_BLE_EXT_SCAN_PARAMS *params)
3316 {
3317     tBTA_DM_API_SET_EXT_SCAN_PARAMS *p_msg;
3318     APPL_TRACE_API("%s, Set extended scan parameters.", __func__);
3319     if ((p_msg = (tBTA_DM_API_SET_EXT_SCAN_PARAMS *) osi_malloc(sizeof(tBTA_DM_API_SET_EXT_SCAN_PARAMS))) != NULL) {
3320         memset(p_msg, 0, sizeof(tBTA_DM_API_SET_EXT_SCAN_PARAMS));
3321         p_msg->hdr.event = BTA_DM_API_SET_EXT_SCAN_PARAMS_EVT;
3322         memcpy(&p_msg->params, params, sizeof(tBTA_DM_BLE_EXT_SCAN_PARAMS));
3323         //start sent the msg to the bta system control module
3324         bta_sys_sendmsg(p_msg);
3325     } else {
3326         APPL_TRACE_ERROR("%s malloc failed", __func__);
3327     }
3328 
3329 }
3330 
BTA_DmBleGapExtScan(BOOLEAN start,UINT32 duration,UINT16 period)3331 void BTA_DmBleGapExtScan(BOOLEAN start, UINT32 duration, UINT16 period)
3332 {
3333     tBTA_DM_API_EXT_SCAN *p_msg;
3334     APPL_TRACE_API("%s, %s extended scan.", __func__, start ? "Start" : "Stop");
3335     if ((p_msg = (tBTA_DM_API_EXT_SCAN *) osi_malloc(sizeof(tBTA_DM_API_EXT_SCAN))) != NULL) {
3336         memset(p_msg, 0, sizeof(tBTA_DM_API_EXT_SCAN));
3337         p_msg->hdr.event = BTA_DM_API_START_EXT_SCAN_EVT;
3338         p_msg->start = start;
3339         p_msg->duration = duration;
3340         p_msg->period = period;
3341         //start sent the msg to the bta system control module
3342         bta_sys_sendmsg(p_msg);
3343     } else {
3344         APPL_TRACE_ERROR("%s malloc failed", __func__);
3345     }
3346 
3347 }
3348 
BTA_DmBleGapPreferExtConnectParamsSet(BD_ADDR bd_addr,UINT8 phy_mask,const tBTA_DM_BLE_CONN_PARAMS * phy_1m_conn_params,const tBTA_DM_BLE_CONN_PARAMS * phy_2m_conn_params,const tBTA_DM_BLE_CONN_PARAMS * phy_coded_conn_params)3349 void BTA_DmBleGapPreferExtConnectParamsSet(BD_ADDR bd_addr,
3350                                                                  UINT8 phy_mask,
3351                                                                  const tBTA_DM_BLE_CONN_PARAMS *phy_1m_conn_params,
3352                                                                  const tBTA_DM_BLE_CONN_PARAMS *phy_2m_conn_params,
3353                                                                  const tBTA_DM_BLE_CONN_PARAMS *phy_coded_conn_params)
3354 {
3355     tBTA_DM_API_SET_PER_EXT_CONN_PARAMS *p_msg;
3356     APPL_TRACE_API("%s, Set prefer extended connection parameters.", __func__);
3357     if ((p_msg = (tBTA_DM_API_SET_PER_EXT_CONN_PARAMS *) osi_malloc(sizeof(tBTA_DM_API_SET_PER_EXT_CONN_PARAMS))) != NULL) {
3358         memset(p_msg, 0, sizeof(tBTA_DM_API_SET_PER_EXT_CONN_PARAMS));
3359         p_msg->hdr.event = BTA_DM_API_SET_PERF_EXT_CONN_PARAMS_EVT;
3360         p_msg->phy_mask = phy_mask;
3361 
3362         memcpy(p_msg->bd_addr, bd_addr, sizeof(BD_ADDR));
3363 
3364         if (phy_1m_conn_params) {
3365             memcpy(&p_msg->phy_1m_conn_params, phy_1m_conn_params, sizeof(tBTA_DM_BLE_CONN_PARAMS));
3366         }
3367 
3368         if (phy_2m_conn_params) {
3369             memcpy(&p_msg->phy_2m_conn_params, phy_2m_conn_params, sizeof(tBTA_DM_BLE_CONN_PARAMS));
3370         }
3371 
3372         if (phy_coded_conn_params) {
3373             memcpy(&p_msg->phy_coded_conn_params, phy_coded_conn_params, sizeof(tBTA_DM_BLE_CONN_PARAMS));
3374         }
3375         //start sent the msg to the bta system control module
3376         bta_sys_sendmsg(p_msg);
3377     } else {
3378         APPL_TRACE_ERROR("%s malloc failed", __func__);
3379     }
3380 
3381 
3382 }
3383 
BTA_DmBleGapExtConnect(tBLE_ADDR_TYPE own_addr_type,const BD_ADDR peer_addr)3384 void BTA_DmBleGapExtConnect(tBLE_ADDR_TYPE own_addr_type, const BD_ADDR peer_addr)
3385 {
3386     tBTA_DM_API_EXT_CONN *p_msg;
3387     APPL_TRACE_API("%s, Start Extended connect.", __func__);
3388     APPL_TRACE_API("%s, Set prefer extended connection parameters.", __func__);
3389     if ((p_msg = (tBTA_DM_API_EXT_CONN *) osi_malloc(sizeof(tBTA_DM_API_EXT_CONN))) != NULL) {
3390         memset(p_msg, 0, sizeof(tBTA_DM_API_EXT_CONN));
3391         p_msg->hdr.event = BTA_DM_API_EXT_CONN_EVT;
3392         p_msg->own_addr_type = own_addr_type;
3393         memcpy(p_msg->peer_addr, peer_addr, sizeof(BD_ADDR));
3394         //start sent the msg to the bta system control module
3395         bta_sys_sendmsg(p_msg);
3396     } else {
3397         APPL_TRACE_ERROR("%s malloc failed", __func__);
3398     }
3399 
3400 }
3401 
BTA_DmBleDtmEnhTxStart(uint8_t tx_channel,uint8_t len_of_data,uint8_t pkt_payload,uint8_t phy,tBTA_DTM_CMD_CMPL_CBACK * p_dtm_cmpl_cback)3402 void BTA_DmBleDtmEnhTxStart(uint8_t tx_channel, uint8_t len_of_data, uint8_t pkt_payload, uint8_t phy, tBTA_DTM_CMD_CMPL_CBACK *p_dtm_cmpl_cback)
3403 {
3404     tBTA_DM_API_BLE_DTM_ENH_TX_START *p_msg;
3405 
3406     if ((p_msg = (tBTA_DM_API_BLE_DTM_ENH_TX_START *)osi_malloc(sizeof(tBTA_DM_API_BLE_DTM_ENH_TX_START)))
3407             != NULL) {
3408         p_msg->hdr.event = BTA_DM_API_DTM_ENH_TX_START_EVT;
3409         p_msg->tx_channel = tx_channel;
3410         p_msg->len_of_data = len_of_data;
3411         p_msg->pkt_payload = pkt_payload;
3412         p_msg->phy = phy;
3413         p_msg->p_dtm_cmpl_cback = p_dtm_cmpl_cback;
3414 
3415         bta_sys_sendmsg(p_msg);
3416     }
3417 }
3418 
BTA_DmBleDtmEnhRxStart(uint8_t rx_channel,uint8_t phy,uint8_t modulation_index,tBTA_DTM_CMD_CMPL_CBACK * p_dtm_cmpl_cback)3419 void BTA_DmBleDtmEnhRxStart(uint8_t rx_channel, uint8_t phy, uint8_t modulation_index, tBTA_DTM_CMD_CMPL_CBACK *p_dtm_cmpl_cback)
3420 {
3421     tBTA_DM_API_BLE_DTM_ENH_RX_START *p_msg;
3422 
3423     if ((p_msg = (tBTA_DM_API_BLE_DTM_ENH_RX_START *)osi_malloc(sizeof(tBTA_DM_API_BLE_DTM_ENH_RX_START)))
3424             != NULL) {
3425         p_msg->hdr.event = BTA_DM_API_DTM_ENH_RX_START_EVT;
3426         p_msg->rx_channel= rx_channel;
3427         p_msg->phy = phy;
3428         p_msg->modulation_index = modulation_index;
3429         p_msg->p_dtm_cmpl_cback = p_dtm_cmpl_cback;
3430 
3431         bta_sys_sendmsg(p_msg);
3432     }
3433 }
3434 
3435 #endif // #if (BLE_50_FEATURE_SUPPORT == TRUE)
3436 
3437 #if (BLE_FEAT_PERIODIC_ADV_SYNC_TRANSFER == TRUE)
BTA_DmBleGapPeriodicAdvRecvEnable(UINT16 sync_handle,UINT8 enable)3438 void BTA_DmBleGapPeriodicAdvRecvEnable(UINT16 sync_handle, UINT8 enable)
3439 {
3440     tBTA_DM_API_PERIODIC_ADV_RECV_ENABLE *p_msg;
3441     p_msg = (tBTA_DM_API_PERIODIC_ADV_RECV_ENABLE *) osi_malloc(sizeof(tBTA_DM_API_PERIODIC_ADV_RECV_ENABLE));
3442     if (p_msg != NULL) {
3443         memset(p_msg, 0, sizeof(tBTA_DM_API_PERIODIC_ADV_RECV_ENABLE));
3444         p_msg->hdr.event = BTA_DM_API_PERIODIC_ADV_RECV_ENABLE_EVT;
3445         p_msg->sync_handle = sync_handle;
3446         p_msg->enable = enable;
3447         //start sent the msg to the bta system control module
3448         bta_sys_sendmsg(p_msg);
3449     } else {
3450         APPL_TRACE_ERROR("%s malloc failed", __func__);
3451     }
3452 }
3453 
BTA_DmBleGapPeriodicAdvSyncTrans(BD_ADDR peer_addr,UINT16 service_data,UINT16 sync_handle)3454 void BTA_DmBleGapPeriodicAdvSyncTrans(BD_ADDR peer_addr, UINT16 service_data, UINT16 sync_handle)
3455 {
3456     tBTA_DM_API_PERIODIC_ADV_SYNC_TRANS *p_msg;
3457     p_msg = (tBTA_DM_API_PERIODIC_ADV_SYNC_TRANS *) osi_malloc(sizeof(tBTA_DM_API_PERIODIC_ADV_SYNC_TRANS));
3458     if (p_msg != NULL) {
3459         memset(p_msg, 0, sizeof(tBTA_DM_API_PERIODIC_ADV_SYNC_TRANS));
3460         p_msg->hdr.event = BTA_DM_API_PERIODIC_ADV_SYNC_TRANS_EVT;
3461         memcpy(p_msg->addr, peer_addr, sizeof(BD_ADDR));
3462         p_msg->service_data = service_data;
3463         p_msg->sync_handle = sync_handle;
3464         //start sent the msg to the bta system control module
3465         bta_sys_sendmsg(p_msg);
3466     } else {
3467         APPL_TRACE_ERROR("%s malloc failed", __func__);
3468     }
3469 }
3470 
BTA_DmBleGapPeriodicAdvSetInfoTrans(BD_ADDR peer_addr,UINT16 service_data,UINT8 adv_handle)3471 void BTA_DmBleGapPeriodicAdvSetInfoTrans(BD_ADDR peer_addr, UINT16 service_data, UINT8 adv_handle)
3472 {
3473     tBTA_DM_API_PERIODIC_ADV_SET_INFO_TRANS *p_msg;
3474     p_msg = (tBTA_DM_API_PERIODIC_ADV_SET_INFO_TRANS *) osi_malloc(sizeof(tBTA_DM_API_PERIODIC_ADV_SET_INFO_TRANS));
3475     if (p_msg != NULL) {
3476         memset(p_msg, 0, sizeof(tBTA_DM_API_PERIODIC_ADV_SET_INFO_TRANS));
3477         p_msg->hdr.event = BTA_DM_API_PERIODIC_ADV_SET_INFO_TRANS_EVT;
3478         memcpy(p_msg->addr, peer_addr, sizeof(BD_ADDR));
3479         p_msg->service_data = service_data;
3480         p_msg->adv_hanlde = adv_handle;
3481         //start sent the msg to the bta system control module
3482         bta_sys_sendmsg(p_msg);
3483     } else {
3484         APPL_TRACE_ERROR("%s malloc failed", __func__);
3485     }
3486 }
3487 
BTA_DmBleGapSetPeriodicAdvSyncTransParams(BD_ADDR peer_addr,tBTA_DM_BLE_PAST_PARAMS * params)3488 void BTA_DmBleGapSetPeriodicAdvSyncTransParams(BD_ADDR peer_addr, tBTA_DM_BLE_PAST_PARAMS *params)
3489 {
3490     tBTA_DM_API_SET_PAST_PARAMS *p_msg;
3491     p_msg = (tBTA_DM_API_SET_PAST_PARAMS *) osi_malloc(sizeof(tBTA_DM_API_SET_PAST_PARAMS));
3492     if (p_msg != NULL) {
3493         memset(p_msg, 0, sizeof(tBTA_DM_API_SET_PAST_PARAMS));
3494         p_msg->hdr.event = BTA_DM_API_SET_PERIODIC_ADV_SYNC_TRANS_PARAMS_EVT;
3495         memcpy(p_msg->addr, peer_addr, sizeof(BD_ADDR));
3496         memcpy(&p_msg->params, params, sizeof(tBTA_DM_BLE_PAST_PARAMS));
3497         //start sent the msg to the bta system control module
3498         bta_sys_sendmsg(p_msg);
3499     } else {
3500         APPL_TRACE_ERROR("%s malloc failed", __func__);
3501     }
3502 }
3503 #endif // #if (BLE_FEAT_PERIODIC_ADV_SYNC_TRANSFER == TRUE)
3504 
3505 #endif
3506