15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
31a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji *  Copyright (C) 2003-2014 Broadcom Corporation
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  you may not use this file except in compliance with the License.
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  You may obtain a copy of the License at:
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  See the License for the specific language governing permissions and
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  limitations under the License.
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  This file contains the action functions for device manager state
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  machine.
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2649120dc867c7818511b5afec461dfc97d17eef58Marie Janssen#define LOG_TAG "bt_bta_dm"
2749120dc867c7818511b5afec461dfc97d17eef58Marie Janssen
284ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra#include <assert.h>
29db554581079863974af8e1289646f5deea6fc044Marie Janssen#include <string.h>
30db554581079863974af8e1289646f5deea6fc044Marie Janssen
31597c5778ca69fec26c96bda48b83935c1a90660dMike J. Chen#include "bt_target.h"
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_types.h"
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_api.h"
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_dm_co.h"
35db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "bta_dm_int.h"
36db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "bta_sys.h"
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_api.h"
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_int.h"
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h"
4022c6e505dc65ab3d624e4ccd7c48c95fe2128703Kévin PETIT#include "gap_api.h"    /* For GAP_BleReadPeerPrefConnParams */
41258c2538e3b62a8cdb403f2730c45d721e5292b4Pavlin Radoslavov#include "bt_common.h"
42db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "l2c_api.h"
43f8027005333c88a2f097cfd70d15c3d54c7764aeChris Manton#include "osi/include/log.h"
44bb95452741bfd65723ea417c25dbd326c7568ab7Arman Uguray#include "osi/include/osi.h"
45db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "sdp_api.h"
46db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "utl.h"
47f8027005333c88a2f097cfd70d15c3d54c7764aeChris Manton
48a02a48c2f2aece8b173a25e88a0f00d2e2f78c48Mike J. Chen#if (GAP_INCLUDED == TRUE)
49a02a48c2f2aece8b173a25e88a0f00d2e2f78c48Mike J. Chen#include "gap_api.h"
50a02a48c2f2aece8b173a25e88a0f00d2e2f78c48Mike J. Chen#endif
51a02a48c2f2aece8b173a25e88a0f00d2e2f78c48Mike J. Chen
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_inq_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir);
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_inq_cmpl_cb (void * p_result);
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_service_search_remname_cback (BD_ADDR bd_addr, DEV_CLASS dc, BD_NAME bd_name);
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_remname_cback (tBTM_REMOTE_DEV_NAME *p_remote_name);
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_find_services ( BD_ADDR bd_addr);
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_discover_next_device(void);
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_sdp_callback (UINT16 sdp_status);
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_authorize_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name, UINT8 *service_name, UINT8 service_id, BOOLEAN is_originator);
60818d0f2afb10c75125b0df9ea2bce6108268a269Casper Bondestatic UINT8 bta_dm_pin_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name, BOOLEAN min_16_digit);
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_new_link_key_cback(BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name, LINK_KEY key, UINT8 key_type);
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_authentication_complete_cback(BD_ADDR bd_addr, DEV_CLASS dev_class,BD_NAME bd_name, int result);
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_local_name_cback(BD_ADDR bd_addr);
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN bta_dm_check_av(UINT16 event);
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data);
6676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_policy_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, BD_ADDR peer_addr);
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Extended Inquiry Response */
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_sp_cback (tBTM_SP_EVT event, tBTM_SP_EVT_DATA *p_data);
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_set_eir (char *local_name);
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_eir_search_services( tBTM_INQ_RESULTS  *p_result,
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        tBTA_SERVICE_MASK *p_services_to_search,
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        tBTA_SERVICE_MASK *p_services_found);
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovstatic void bta_dm_search_timer_cback(void *data);
7978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovstatic void bta_dm_disable_conn_down_timer_cback(void *data);
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_rm_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, BD_ADDR peer_addr);
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_adjust_roles(BOOLEAN delay_role_switch);
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_dm_get_remname(void);
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_bond_cancel_complete_cback(tBTM_STATUS result);
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
857fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battastatic BOOLEAN bta_dm_read_remote_device_name (BD_ADDR bd_addr,tBT_TRANSPORT transport);
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_discover_device(BD_ADDR remote_bd_addr);
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_sys_hw_cback( tBTA_SYS_HW_EVT status );
89ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_disable_search_and_disc(void);
9076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ((defined BLE_INCLUDED) && (BLE_INCLUDED == TRUE))
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    #if ((defined SMP_INCLUDED) && (SMP_INCLUDED == TRUE))
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_ble_smp_cback (tBTM_LE_EVT event, BD_ADDR bda, tBTM_LE_EVT_DATA *p_data);
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    #endif
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_ble_id_key_cback (UINT8 key_type, tBTM_BLE_LOCAL_KEYS *p_key);
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    #if ((defined BTA_GATT_INCLUDED) &&  (BTA_GATT_INCLUDED == TRUE))
97e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbachstatic void bta_dm_gattc_register(void);
9876356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavanstatic void btm_dm_start_gatt_discovery(BD_ADDR bd_addr);
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_cancel_gatt_discovery(BD_ADDR bd_addr);
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data);
10181b03192d4284acc7c9903f5b183927797dceca4Prerepa Viswanadhamextern tBTA_DM_CONTRL_STATE bta_dm_pm_obtain_controller_state(void);
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    #endif
103104e3f238f500cacdb8afaccdc672dfc34eae7eeBernhard Rosenkränzer
104104e3f238f500cacdb8afaccdc672dfc34eae7eeBernhard Rosenkränzer#if BLE_VND_INCLUDED == TRUE
1058d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Battastatic void bta_dm_ctrl_features_rd_cmpl_cback(tBTM_STATUS result);
106104e3f238f500cacdb8afaccdc672dfc34eae7eeBernhard Rosenkränzer#endif
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
108ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#ifndef BTA_DM_BLE_ADV_CHNL_MAP
109ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTA_DM_BLE_ADV_CHNL_MAP (BTM_BLE_ADV_CHNL_37|BTM_BLE_ADV_CHNL_38|BTM_BLE_ADV_CHNL_39)
110ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
111ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
112f751b01146d81fd70645907f5fd3a4cc3a7acc02Matthew Xie
11378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov/* Disable timer interval (in milliseconds) */
11478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#ifndef BTA_DM_DISABLE_TIMER_MS
11578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#define BTA_DM_DISABLE_TIMER_MS 5000
11678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#endif
11778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov
11878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov/* Disable timer retrial interval (in milliseconds) */
11978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#ifndef BTA_DM_DISABLE_TIMER_RETRIAL_MS
12078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#define BTA_DM_DISABLE_TIMER_RETRIAL_MS 1500
12178bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#endif
12278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov
12378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov/* Disable connection down timer (in milliseconds) */
12478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#ifndef BTA_DM_DISABLE_CONN_DOWN_TIMER_MS
12578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#define BTA_DM_DISABLE_CONN_DOWN_TIMER_MS 1000
12678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#endif
12778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov
12878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov/* Switch delay timer (in milliseconds) */
12978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#ifndef BTA_DM_SWITCH_DELAY_TIMER_MS
13078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#define BTA_DM_SWITCH_DELAY_TIMER_MS 500
13178bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#endif
13278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov
13371b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvarajstatic void bta_dm_reset_sec_dev_pending(BD_ADDR remote_bd_addr);
13476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavanstatic void bta_dm_remove_sec_dev_entry(BD_ADDR remote_bd_addr);
13576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavanstatic void bta_dm_observe_results_cb(tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir);
13676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavanstatic void bta_dm_observe_cmpl_cb(void * p_result);
13778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovstatic void bta_dm_delay_role_switch_cback(void *data);
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void sdpu_uuid16_to_uuid128(UINT16 uuid16, UINT8* p_uuid128);
13978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovstatic void bta_dm_disable_timer_cback(void *data);
14076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT16 bta_service_id_to_uuid_lkup_tbl [BTA_MAX_SERVICE_ID] =
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_PNP_INFORMATION,         /* Reserved */
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_SERIAL_PORT,             /* BTA_SPP_SERVICE_ID */
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_DIALUP_NETWORKING,       /* BTA_DUN_SERVICE_ID */
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_AUDIO_SOURCE,            /* BTA_A2DP_SOURCE_SERVICE_ID */
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_LAN_ACCESS_USING_PPP,    /* BTA_LAP_SERVICE_ID */
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_HEADSET,                 /* BTA_HSP_HS_SERVICE_ID */
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_HF_HANDSFREE,            /* BTA_HFP_HS_SERVICE_ID */
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_OBEX_OBJECT_PUSH,        /* BTA_OPP_SERVICE_ID */
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_OBEX_FILE_TRANSFER,      /* BTA_FTP_SERVICE_ID */
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_CORDLESS_TELEPHONY,      /* BTA_CTP_SERVICE_ID */
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_INTERCOM,                /* BTA_ICP_SERVICE_ID */
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_IRMC_SYNC,               /* BTA_SYNC_SERVICE_ID */
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_DIRECT_PRINTING,         /* BTA_BPP_SERVICE_ID */
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_IMAGING_RESPONDER,       /* BTA_BIP_SERVICE_ID */
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_PANU,                    /* BTA_PANU_SERVICE_ID */
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_NAP,                     /* BTA_NAP_SERVICE_ID */
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_GN,                      /* BTA_GN_SERVICE_ID */
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_SAP,                     /* BTA_SAP_SERVICE_ID */
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_AUDIO_SINK,              /* BTA_A2DP_SERVICE_ID */
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_AV_REMOTE_CONTROL,       /* BTA_AVRCP_SERVICE_ID */
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_HUMAN_INTERFACE,         /* BTA_HID_SERVICE_ID */
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_VIDEO_SINK,              /* BTA_VDP_SERVICE_ID */
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_PBAP_PSE,                /* BTA_PBAP_SERVICE_ID */
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_HEADSET_AUDIO_GATEWAY,   /* BTA_HSP_SERVICE_ID */
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_AG_HANDSFREE,            /* BTA_HFP_SERVICE_ID */
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_MESSAGE_ACCESS,          /* BTA_MAP_SERVICE_ID */
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_MESSAGE_NOTIFICATION,    /* BTA_MN_SERVICE_ID */
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_HDP_PROFILE,             /* BTA_HDP_SERVICE_ID */
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_PBAP_PCE                 /* BTA_PCE_SERVICE_ID */
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED && BTA_GATT_INCLUDED
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ,UUID_PROTOCOL_ATT                       /* BTA_GATT_SERVICE_ID */
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * NOTE : The number of element in bta_service_id_to_btm_srv_id_lkup_tbl should be matching with
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *        the value BTA_MAX_SERVICE_ID in bta_api.h
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *        i.e., If you add new Service ID for BTA, the correct security ID of the new service
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *              from Security service definitions (btm_api.h) should be added to this lookup table.
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT32 bta_service_id_to_btm_srv_id_lkup_tbl [BTA_MAX_SERVICE_ID] =
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    0,                                      /* Reserved */
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_SERIAL_PORT,            /* BTA_SPP_SERVICE_ID */
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_DUN,                    /* BTA_DUN_SERVICE_ID */
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_AVDTP,                  /* BTA_AUDIO_SOURCE_SERVICE_ID */
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_LAN_ACCESS,             /* BTA_LAP_SERVICE_ID */
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_HEADSET_AG,             /* BTA_HSP_SERVICE_ID */
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_AG_HANDSFREE,           /* BTA_HFP_SERVICE_ID */
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_OBEX,                   /* BTA_OPP_SERVICE_ID */
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_OBEX_FTP,               /* BTA_FTP_SERVICE_ID */
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_CORDLESS,               /* BTA_CTP_SERVICE_ID */
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_INTERCOM,               /* BTA_ICP_SERVICE_ID */
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_IRMC_SYNC,              /* BTA_SYNC_SERVICE_ID */
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_BPP_JOB,                /* BTA_BPP_SERVICE_ID */
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_BIP,                    /* BTA_BIP_SERVICE_ID */
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_BNEP_PANU,              /* BTA_PANU_SERVICE_ID */
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_BNEP_NAP,               /* BTA_NAP_SERVICE_ID */
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_BNEP_GN,                /* BTA_GN_SERVICE_ID */
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_SAP,                    /* BTA_SAP_SERVICE_ID */
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_AVDTP,                  /* BTA_A2DP_SERVICE_ID */
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_AVCTP,                  /* BTA_AVRCP_SERVICE_ID */
2072e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTM_SEC_SERVICE_HIDH_SEC_CTRL,          /* BTA_HID_SERVICE_ID */
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_AVDTP,                  /* BTA_VDP_SERVICE_ID */
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_PBAP,                   /* BTA_PBAP_SERVICE_ID */
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_HEADSET,                /* BTA_HSP_HS_SERVICE_ID */
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_HF_HANDSFREE,           /* BTA_HFP_HS_SERVICE_ID */
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_MAP,                    /* BTA_MAP_SERVICE_ID */
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_MAP,                    /* BTA_MN_SERVICE_ID */
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_HDP_SNK,                /* BTA_HDP_SERVICE_ID */
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_PBAP                    /* BTA_PCE_SERVICE_ID */
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED && BTA_GATT_INCLUDED
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ,BTM_SEC_SERVICE_ATT                    /* BTA_GATT_SERVICE_ID */
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2196975b4d711142b885af479721cada448952c6b41Andre Eisenbach
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* bta security callback */
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tBTM_APPL_INFO bta_security =
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    &bta_dm_authorize_cback,
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    &bta_dm_pin_cback,
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    &bta_dm_new_link_key_cback,
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    &bta_dm_authentication_complete_cback,
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    &bta_dm_bond_cancel_complete_cback,
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE)
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    &bta_dm_sp_cback
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    NULL
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if SMP_INCLUDED == TRUE
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ,&bta_dm_ble_smp_cback
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ,&bta_dm_ble_id_key_cback
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MAX_DISC_RAW_DATA_BUF       (4096)
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 g_disc_raw_data_buf[MAX_DISC_RAW_DATA_BUF];
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavanextern DEV_CLASS local_device_default_class;
24878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovextern fixed_queue_t *btu_bta_alarm_queue;
24976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_enable
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Initialises the BT device manager
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_enable(tBTA_DM_MSG *p_data)
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
26276356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    tBTA_DM_ENABLE enable_event;
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if already in use, return an error */
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( bta_dm_cb.is_bta_dm_active == TRUE  )
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
26776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        APPL_TRACE_WARNING("%s Device already started by another application", __func__);
26876356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        memset(&enable_event, 0, sizeof(tBTA_DM_ENABLE));
26976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        enable_event.status = BTA_FAILURE;
27076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        if (p_data->enable.p_sec_cback != NULL)
27176356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            p_data->enable.p_sec_cback(BTA_DM_ENABLE_EVT, (tBTA_DM_SEC *)&enable_event);
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* first, register our callback to SYS HW manager */
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_sys_hw_register( BTA_SYS_HW_BLUETOOTH, bta_dm_sys_hw_cback );
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* make sure security callback is saved - if no callback, do not erase the previous one,
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    it could be an error recovery mechanism */
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( p_data->enable.p_sec_cback != NULL  )
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_cb.p_sec_cback = p_data->enable.p_sec_cback;
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* notify BTA DM is now active */
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_cb.is_bta_dm_active = TRUE;
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* send a message to BTA SYS */
2865fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_SYS_HW_MSG *sys_enable_event =
2875fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_SYS_HW_MSG *)osi_malloc(sizeof(tBTA_SYS_HW_MSG));
2885fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    sys_enable_event->hdr.event = BTA_SYS_API_ENABLE_EVT;
2895fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    sys_enable_event->hw_module = BTA_SYS_HW_BLUETOOTH;
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2915fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(sys_enable_event);
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov** Function         bta_dm_init_cb
29778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov**
29878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov** Description      Initializes or re-initializes the bta_dm_cb control block
29978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov**
30078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov**
30178bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov** Returns          void
30278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov**
30378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov*******************************************************************************/
30478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovvoid bta_dm_init_cb(void)
30578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov{
30678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    /*
30778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov     * TODO: Should alarm_free() the bta_dm_cb timers during graceful
30878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov     * shutdown.
30978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov     */
31078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    alarm_free(bta_dm_cb.disable_timer);
31178bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    alarm_free(bta_dm_cb.switch_delay_timer);
31278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    for (size_t i = 0; i < BTA_DM_NUM_PM_TIMER; i++) {
31378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        for (size_t j = 0; j < BTA_DM_PM_MODE_TIMER_MAX; j++) {
31478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov            alarm_free(bta_dm_cb.pm_timer[i].timer[j]);
31578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        }
31678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    }
31778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    memset(&bta_dm_cb, 0, sizeof(bta_dm_cb));
31878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    bta_dm_cb.disable_timer = alarm_new("bta_dm.disable_timer");
31978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    bta_dm_cb.switch_delay_timer = alarm_new("bta_dm.switch_delay_timer");
32078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    for (size_t i = 0; i < BTA_DM_NUM_PM_TIMER; i++) {
32178bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        for (size_t j = 0; j < BTA_DM_PM_MODE_TIMER_MAX; j++) {
32278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov            bta_dm_cb.pm_timer[i].timer[j] = alarm_new("bta_dm.pm_timer");
32378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        }
32478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    }
32578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov}
32678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov
32778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov/*******************************************************************************
32878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov**
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_sys_hw_cback
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description     callback register to SYS to get HW status updates
3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_sys_hw_cback( tBTA_SYS_HW_EVT status )
3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    DEV_CLASS   dev_class;
3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC_CBACK           *temp_cback;
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE
3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   key_mask = 0;
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_OCTET16              er;
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_BLE_LOCAL_ID_KEYS  id_key;
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
34676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
34776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    APPL_TRACE_DEBUG("%s with event: %i", __func__, status);
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* On H/W error evt, report to the registered DM application callback */
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (status == BTA_SYS_HW_ERROR_EVT) {
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project          if( bta_dm_cb.p_sec_cback != NULL )
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_cb.p_sec_cback(BTA_DM_HW_ERROR_EVT, NULL);
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project          return;
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
35576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( status == BTA_SYS_HW_OFF_EVT )
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( bta_dm_cb.p_sec_cback != NULL )
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_DISABLE_EVT, NULL);
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* reinitialize the control block */
36278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        bta_dm_init_cb();
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* unregister from SYS */
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_hw_unregister( BTA_SYS_HW_BLUETOOTH );
3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* notify BTA DM is now unactive */
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.is_bta_dm_active = FALSE;
3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( status == BTA_SYS_HW_ON_EVT )
3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* FIXME: We should not unregister as the SYS shall invoke this callback on a H/W error.
3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        * We need to revisit when this platform has more than one BLuetooth H/W chip */
3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        //bta_sys_hw_unregister( BTA_SYS_HW_BLUETOOTH);
3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* save security callback */
3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        temp_cback = bta_dm_cb.p_sec_cback;
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* make sure the control block is properly initialized */
37978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        bta_dm_init_cb();
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* and retrieve the callback */
3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback=temp_cback;
3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.is_bta_dm_active = TRUE;
3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* hw is ready, go on with BTA DM initialization */
38578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        alarm_free(bta_dm_search_cb.search_timer);
38678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        alarm_free(bta_dm_search_cb.gatt_close_timer);
38778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        memset(&bta_dm_search_cb, 0, sizeof(bta_dm_search_cb));
38878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        /*
38978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov         * TODO: Should alarm_free() the bta_dm_search_cb timers during
39078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov         * graceful shutdown.
39178bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov         */
39278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        bta_dm_search_cb.search_timer =
39378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov          alarm_new("bta_dm_search.search_timer");
39478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        bta_dm_search_cb.gatt_close_timer =
39578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov          alarm_new("bta_dm_search.gatt_close_timer");
39678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov
39778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        memset(&bta_dm_conn_srvcs, 0, sizeof(bta_dm_conn_srvcs));
3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(&bta_dm_di_cb, 0, sizeof(tBTA_DM_DI_CB));
3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        memcpy(dev_class, p_bta_dm_cfg->dev_class, sizeof(dev_class));
4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetDeviceClass (dev_class);
4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
403dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#if (defined(BLE_INCLUDED) && (BLE_INCLUDED == TRUE))
4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* load BLE local information: ID keys, ER if available */
4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_co_ble_load_local_keys(&key_mask, er, &id_key);
4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (key_mask & BTA_BLE_LOCAL_KEY_TYPE_ER)
4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTM_BleLoadLocalKeys(BTA_BLE_LOCAL_KEY_TYPE_ER, (tBTM_BLE_LOCAL_KEYS *)&er);
4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (key_mask & BTA_BLE_LOCAL_KEY_TYPE_ID)
4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTM_BleLoadLocalKeys(BTA_BLE_LOCAL_KEY_TYPE_ID, (tBTM_BLE_LOCAL_KEYS *)&id_key);
4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
415dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#if (defined(BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE))
4166975b4d711142b885af479721cada448952c6b41Andre Eisenbach        bta_dm_search_cb.conn_id = BTA_GATT_INVALID_CONN_ID;
417dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#endif  // (defined(BTA_GATT_INCLUDED) && BTA_GATT_INCLUDED)
418dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#endif  // (defined(BLE_INCLUDED) && (BLE_INCLUDED == TRUE))
4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SecRegister((tBTM_APPL_INFO*)&bta_security);
42176356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        BTM_SetDefaultLinkSuperTout(p_bta_dm_cfg->link_timeout);
42276356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        BTM_WritePageTimeout(p_bta_dm_cfg->page_timeout);
42376356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        bta_dm_cb.cur_policy = p_bta_dm_cfg->policy_settings;
4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetDefaultLinkPolicy(bta_dm_cb.cur_policy);
4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_RegBusyLevelNotif (bta_dm_bl_change_cback, NULL, BTM_BL_UPDATE_MASK|BTM_BL_ROLE_CHG_MASK);
4263f24f460ec3efedde25723e6a4297efc10873cd2Satya Calloji
4273f24f460ec3efedde25723e6a4297efc10873cd2Satya Calloji#if BLE_VND_INCLUDED == TRUE
4283f24f460ec3efedde25723e6a4297efc10873cd2Satya Calloji        BTM_BleReadControllerFeatures (bta_dm_ctrl_features_rd_cmpl_cback);
4293f24f460ec3efedde25723e6a4297efc10873cd2Satya Calloji#endif
4303f24f460ec3efedde25723e6a4297efc10873cd2Satya Calloji
4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Earlier, we used to invoke BTM_ReadLocalAddr which was just copying the bd_addr
4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           from the control block and invoking the callback which was sending the DM_ENABLE_EVT.
4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           But then we have a few HCI commands being invoked above which were still in progress
4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           when the ENABLE_EVT was sent. So modified this to fetch the local name which forces
4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           the DM_ENABLE_EVT to be sent only after all the init steps are complete */
4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_ReadLocalDeviceNameFromController((tBTM_CMPL_CB *)bta_dm_local_name_cback);
4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_rm_register((tBTA_SYS_CONN_CBACK*)bta_dm_rm_cback);
4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* initialize bluetooth low power manager */
4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_init_pm();
4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_policy_register((tBTA_SYS_CONN_CBACK*)bta_dm_policy_cback);
4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
445e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
446e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        bta_dm_gattc_register();
447e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach#endif
448e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach
4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
451e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_DEBUG(" --- ignored event");
4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_disable
4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Disables the BT device manager
4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_disable (tBTA_DM_MSG *p_data)
4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4685cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
4695cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen
4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Set l2cap idle timeout to 0 (so BTE immediately disconnects ACL link after last channel is closed) */
471444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    L2CA_SetIdleTimeoutByBdAddr((UINT8 *)BT_BD_ANY, 0, BT_TRANSPORT_BR_EDR);
472444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    L2CA_SetIdleTimeoutByBdAddr((UINT8 *)BT_BD_ANY, 0, BT_TRANSPORT_LE);
4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* disable all active subsystems */
4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_sys_disable(BTA_SYS_HW_BLUETOOTH);
4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SetDiscoverability(BTM_NON_DISCOVERABLE, 0, 0);
4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SetConnectability(BTM_NON_CONNECTABLE, 0, 0);
4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_disable_pm();
481ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bta_dm_disable_search_and_disc();
4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_cb.disabling = TRUE;
4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
484021e17a641e61e3f139717cd755bf6f9b9b9eb12Nitin Arora#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
485021e17a641e61e3f139717cd755bf6f9b9b9eb12Nitin Arora    BTM_BleClearBgConnDev();
486021e17a641e61e3f139717cd755bf6f9b9b9eb12Nitin Arora#endif
4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(BTM_GetNumAclLinks()==0)
4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BTA_DISABLE_DELAY) && BTA_DISABLE_DELAY > 0)
4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* If BTA_DISABLE_DELAY is defined and greater than zero, then delay the shutdown by
4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         * BTA_DISABLE_DELAY milliseconds
4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         */
494e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_WARNING("%s BTA_DISABLE_DELAY set to %d ms",
4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            __FUNCTION__, BTA_DISABLE_DELAY);
49678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        alarm_set_on_queue(bta_dm_cb.disable_timer, BTA_DISABLE_DELAY,
49778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                           bta_dm_disable_conn_down_timer_cback, NULL,
49878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                           btu_bta_alarm_queue);
4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_disable_conn_down_timer_cback(NULL);
5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
50578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        alarm_set_on_queue(bta_dm_cb.disable_timer, BTA_DM_DISABLE_TIMER_MS,
50678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                           bta_dm_disable_timer_cback, UINT_TO_PTR(0),
50778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                           btu_bta_alarm_queue);
5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_disable_timer_cback
5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Called if the disable timer expires
5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  Used to close ACL connections which are still active
5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
52378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovstatic void bta_dm_disable_timer_cback(void *data)
5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
5267fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR;
527d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin    BOOLEAN trigger_disc = FALSE;
52878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    uint32_t param = PTR_TO_UINT(data);
5297fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
53078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    APPL_TRACE_EVENT("%s trial %u", __func__, param);
5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
53270035577fdab52abfdd621115a3a50377e9e7e57Srinu Jella    if (BTM_GetNumAclLinks() && (param == 0))
5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for(i=0; i<bta_dm_cb.device_list.count; i++)
5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
5367fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE)
5377fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            transport = bta_dm_cb.device_list.peer_device[i].transport;
5387fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
5397fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            btm_remove_acl(bta_dm_cb.device_list.peer_device[i].peer_bdaddr, transport);
540d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin            trigger_disc = TRUE;
5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
543d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin        /* Retrigger disable timer in case ACL disconnect failed, DISABLE_EVT still need
544d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin            to be sent out to avoid jave layer disable timeout */
545d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin        if (trigger_disc)
546d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin        {
54778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov            alarm_set_on_queue(bta_dm_cb.disable_timer,
54878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                               BTA_DM_DISABLE_TIMER_RETRIAL_MS,
54978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                               bta_dm_disable_timer_cback, UINT_TO_PTR(1),
55078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                               btu_bta_alarm_queue);
551d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin        }
5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.disabling = FALSE;
5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_remove_uuid(UUID_SERVCLASS_PNP_INFORMATION);
5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(BTA_DM_DISABLE_EVT, NULL);
5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_set_dev_name
5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Sets local device name
5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_set_dev_name (tBTA_DM_MSG *p_data)
5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SetLocalDeviceName((char*)p_data->set_name.name);
5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_set_eir ((char*)p_data->set_name.name);
5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_set_visibility
5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Sets discoverability, connectability and pairability
5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
59276356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavanvoid bta_dm_set_visibility(tBTA_DM_MSG *p_data)
5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
59476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    UINT16 window, interval;
595dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#if (defined(BTA_GATT_INCLUDED) && BTA_GATT_INCLUDED)
59676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    UINT16 le_disc_mode = BTM_BleReadDiscoverability();
59776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    UINT16 le_conn_mode = BTM_BleReadConnectability();
598dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#endif  // (defined(BTA_GATT_INCLUDED) && BTA_GATT_INCLUDED)
599dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant    UINT16 disc_mode = BTM_ReadDiscoverability(&window, &interval);
60076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    UINT16 conn_mode = BTM_ReadConnectability(&window, &interval);
6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* set modes for Discoverability and connectability if not ignore */
60376356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    if (p_data->set_visibility.disc_mode != (BTA_DM_IGNORE | BTA_DM_LE_IGNORE))
60476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    {
605dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#if (defined(BTA_GATT_INCLUDED) && BTA_GATT_INCLUDED)
60676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        if ((p_data->set_visibility.disc_mode & BTA_DM_LE_IGNORE) == BTA_DM_LE_IGNORE)
60776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            p_data->set_visibility.disc_mode =
60876356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                ((p_data->set_visibility.disc_mode & ~BTA_DM_LE_IGNORE) | le_disc_mode);
609dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#endif  // (defined(BTA_GATT_INCLUDED) && BTA_GATT_INCLUDED)
61076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        if ((p_data->set_visibility.disc_mode & BTA_DM_IGNORE) == BTA_DM_IGNORE)
61176356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            p_data->set_visibility.disc_mode =
61276356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                ((p_data->set_visibility.disc_mode & ~BTA_DM_IGNORE) | disc_mode);
61376356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
61476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        BTM_SetDiscoverability(p_data->set_visibility.disc_mode,
6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                bta_dm_cb.inquiry_scan_window,
6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                bta_dm_cb.inquiry_scan_interval);
61776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    }
6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
61976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    if (p_data->set_visibility.conn_mode != (BTA_DM_IGNORE | BTA_DM_LE_IGNORE))
62076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    {
621dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#if (defined(BTA_GATT_INCLUDED) && BTA_GATT_INCLUDED)
62276356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        if ((p_data->set_visibility.conn_mode & BTA_DM_LE_IGNORE) == BTA_DM_LE_IGNORE)
62376356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            p_data->set_visibility.conn_mode =
62476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                ((p_data->set_visibility.conn_mode & ~BTA_DM_LE_IGNORE) | le_conn_mode);
625dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#endif  // (defined(BTA_GATT_INCLUDED) && BTA_GATT_INCLUDED)
62676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        if ((p_data->set_visibility.conn_mode & BTA_DM_IGNORE) == BTA_DM_IGNORE)
62776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            p_data->set_visibility.conn_mode =
62876356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                ((p_data->set_visibility.conn_mode & ~BTA_DM_IGNORE) | conn_mode);
62976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
63076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        BTM_SetConnectability(p_data->set_visibility.conn_mode,
6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                bta_dm_cb.page_scan_window,
6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                bta_dm_cb.page_scan_interval);
63376356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    }
6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Send False or True if not ignore */
6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->set_visibility.pair_mode != BTA_DM_IGNORE )
6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_data->set_visibility.pair_mode == BTA_DM_NON_PAIRABLE)
6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.disable_pair_mode = TRUE;
6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.disable_pair_mode = FALSE;
6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Send False or True if not ignore */
6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->set_visibility.conn_paired_only != BTA_DM_IGNORE)
6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_data->set_visibility.conn_paired_only == BTA_DM_CONN_ALL)
6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.conn_paired_only = FALSE;
6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.conn_paired_only = TRUE;
6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Change mode if either mode is not ignore */
6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->set_visibility.pair_mode != BTA_DM_IGNORE || p_data->set_visibility.conn_paired_only != BTA_DM_IGNORE)
6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetPairableMode((BOOLEAN)(!(bta_dm_cb.disable_pair_mode)),bta_dm_cb.conn_paired_only);
6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6656fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji** Function         bta_dm_process_remove_device
6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Removes device, Disconnects ACL link if required.
6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project****
6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
6706fc9526bba383fdb33c0536ed050489aa2215554Satya Callojivoid bta_dm_process_remove_device(BD_ADDR bd_addr)
6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6726fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
6736fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji     /* need to remove all pending background connection before unpair */
6746fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji     BTA_GATTC_CancelOpen(0, bd_addr, FALSE);
6756fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji#endif
6766fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji
6776fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji     BTM_SecDeleteDevice(bd_addr);
6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
679bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
6806fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji      /* remove all cached GATT information */
6816fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji      BTA_GATTC_Refresh(bd_addr);
682bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu#endif
683bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu
6846fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji      if (bta_dm_cb.p_sec_cback)
6856fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji      {
6866fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji         tBTA_DM_SEC sec_event;
6876fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji         bdcpy(sec_event.link_down.bd_addr, bd_addr);
6886fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji         /* No connection, set status to success (acl disc code not valid) */
6896fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji         sec_event.link_down.status = HCI_SUCCESS;
6906fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji         bta_dm_cb.p_sec_cback(BTA_DM_DEV_UNPAIRED_EVT, &sec_event);
6916fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji      }
6926fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji}
6936fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji
6946fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji/*******************************************************************************
6956fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji**
6966fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji** Function         bta_dm_remove_device
6976fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji**
6986fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji** Description      Removes device, disconnects ACL link if required.
6996fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji****
7006fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji*******************************************************************************/
7016fc9526bba383fdb33c0536ed050489aa2215554Satya Callojivoid bta_dm_remove_device(tBTA_DM_MSG *p_data)
7026fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji{
7036fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    tBTA_DM_API_REMOVE_DEVICE *p_dev = &p_data->remove_dev;
704dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant    BOOLEAN continue_delete_other_dev = FALSE;
7056fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    if (p_dev == NULL)
7066fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji        return;
7076fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji
7086fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    BD_ADDR other_address;
7096fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    bdcpy(other_address, p_dev->bd_addr);
7106fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji
7116fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    /* If ACL exists for the device in the remove_bond message*/
7126fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    BOOLEAN continue_delete_dev = FALSE;
7136fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    UINT8 other_transport = BT_TRANSPORT_INVALID;
7146fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji
7156fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    if (BTM_IsAclConnectionUp(p_dev->bd_addr, BT_TRANSPORT_LE) ||
7166fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji        BTM_IsAclConnectionUp(p_dev->bd_addr, BT_TRANSPORT_BR_EDR))
7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
7186fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji        APPL_TRACE_DEBUG("%s: ACL Up count  %d", __func__, bta_dm_cb.device_list.count);
7196fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji        continue_delete_dev = FALSE;
7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7216fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji        /* Take the link down first, and mark the device for removal when disconnected */
7226fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji        for(int i=0; i < bta_dm_cb.device_list.count; i++)
7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
7246fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji            if (!bdcmp(bta_dm_cb.device_list.peer_device[i].peer_bdaddr, p_dev->bd_addr))
7257fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            {
726dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant                UINT8 transport = BT_TRANSPORT_BR_EDR;
727dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant
728dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#if (defined(BTA_GATT_INCLUDED) && BTA_GATT_INCLUDED)
729dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant                transport = bta_dm_cb.device_list.peer_device[i].transport;
730dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#endif  // (defined(BTA_GATT_INCLUDED) && BTA_GATT_INCLUDED)
7317fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                bta_dm_cb.device_list.peer_device[i].conn_state = BTA_DM_UNPAIRING;
732dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant                btm_remove_acl(p_dev->bd_addr, transport);
733dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#if (defined(BTA_GATT_INCLUDED) && BTA_GATT_INCLUDED)
7346fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji                APPL_TRACE_DEBUG("%s:transport = %d", __func__,
7356fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji                                  bta_dm_cb.device_list.peer_device[i].transport);
7366fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji
7376fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji                /* save the other transport to check if device is connected on other_transport */
7386fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji                if(bta_dm_cb.device_list.peer_device[i].transport == BT_TRANSPORT_LE)
7396fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji                   other_transport = BT_TRANSPORT_BR_EDR;
7406fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji                else
7416fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji                   other_transport = BT_TRANSPORT_LE;
742dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#endif  // (defined(BTA_GATT_INCLUDED) && BTA_GATT_INCLUDED)
743dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant
7447fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                break;
7457fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            }
7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7486fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    else
7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
7506fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji        continue_delete_dev = TRUE;
7516fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    }
752dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#if (defined(BTA_GATT_INCLUDED) && BTA_GATT_INCLUDED)
7536fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    // If it is DUMO device and device is paired as different address, unpair that device
7546fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    // if different address
7556fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    if ((other_transport && (BTM_ReadConnectedTransportAddress(other_address, other_transport))) ||
7566fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji      (!other_transport && (BTM_ReadConnectedTransportAddress(other_address, BT_TRANSPORT_BR_EDR) ||
7576fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji       BTM_ReadConnectedTransportAddress(other_address, BT_TRANSPORT_LE))))
7586fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    {
7596fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji        continue_delete_other_dev = FALSE;
7606fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji        /* Take the link down first, and mark the device for removal when disconnected */
7616fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji        for(int i=0; i < bta_dm_cb.device_list.count; i++)
7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
7636fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji            if (!bdcmp(bta_dm_cb.device_list.peer_device[i].peer_bdaddr, other_address))
7646fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji            {
7656fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji                bta_dm_cb.device_list.peer_device[i].conn_state = BTA_DM_UNPAIRING;
7666fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji                btm_remove_acl(other_address,bta_dm_cb.device_list.peer_device[i].transport);
7676fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji                break;
7686fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji            }
7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7716fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    else
7726fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    {
7736fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji        APPL_TRACE_DEBUG("%s: continue to delete the other dev ", __func__);
7746fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji        continue_delete_other_dev = TRUE;
7756fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    }
776dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#endif
7776fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    /* Delete the device mentioned in the msg */
7786fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    if (continue_delete_dev)
7796fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji        bta_dm_process_remove_device(p_dev->bd_addr);
7806fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji
7816fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    /* Delete the other paired device too */
7826fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    BD_ADDR dummy_bda = {0};
7836fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji    if (continue_delete_other_dev && (bdcmp(other_address, dummy_bda) != 0))
7846fc9526bba383fdb33c0536ed050489aa2215554Satya Calloji        bta_dm_process_remove_device(other_address);
7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_add_device
7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function adds a Link Key to an security database entry.
7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  It is normally called during host startup to restore all required information
7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  stored in the NVRAM.
7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project****
7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_add_device (tBTA_DM_MSG *p_data)
7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_API_ADD_DEVICE *p_dev = &p_data->add_dev;
7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   *p_dc = NULL;
8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   *p_lc = NULL;
8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32  trusted_services_mask[BTM_SEC_SERVICE_ARRAY_SIZE];
8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   index = 0;
8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   btm_mask_index = 0;
8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset (trusted_services_mask, 0, sizeof(trusted_services_mask));
8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* If not all zeros, the device class has been specified */
8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_dev->dc_known)
8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dc = (UINT8 *)p_dev->dc;
8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_dev->link_key_known)
8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_lc = (UINT8 *)p_dev->link_key;
8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_dev->is_trusted)
8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* covert BTA service mask to BTM mask */
8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_dev->tm && (index < BTA_MAX_SERVICE_ID))
8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_dev->tm & (UINT32)(1<<index))
8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btm_mask_index =  bta_service_id_to_btm_srv_id_lkup_tbl[index] / BTM_SEC_ARRAY_BITS;
8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                trusted_services_mask[btm_mask_index] |= (UINT32)(1 << (bta_service_id_to_btm_srv_id_lkup_tbl[index] - (UINT32)(btm_mask_index * 32)));
8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dev->tm &= (UINT32)(~(1<<index));
8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            index++;
8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!BTM_SecAddDevice (p_dev->bd_addr, p_dc, p_dev->bd_name, p_dev->features,
833818d0f2afb10c75125b0df9ea2bce6108268a269Casper Bonde                           trusted_services_mask, p_lc, p_dev->key_type, p_dev->io_cap,
834818d0f2afb10c75125b0df9ea2bce6108268a269Casper Bonde                           p_dev->pin_length))
8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
836e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR ("BTA_DM: Error adding device %08x%04x",
8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                (p_dev->bd_addr[0]<<24)+(p_dev->bd_addr[1]<<16)+(p_dev->bd_addr[2]<<8)+p_dev->bd_addr[3],
8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                (p_dev->bd_addr[4]<<8)+p_dev->bd_addr[5]);
8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
844ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         bta_dm_close_acl
845ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
846ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function forces to close the connection to a remote device
847ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  and optionaly remove the device from security database if
848ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  required.
849ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta****
850ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
851ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid bta_dm_close_acl(tBTA_DM_MSG *p_data)
852ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
853ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_DM_API_REMOVE_ACL *p_remove_acl = &p_data->remove_acl;
854ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8   index;
855ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
856e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_close_acl");
857ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
85876356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    if (BTM_IsAclConnectionUp(p_remove_acl->bd_addr, p_remove_acl->transport))
859ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
860ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        for (index = 0; index < bta_dm_cb.device_list.count; index ++)
861ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
862ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (!bdcmp( bta_dm_cb.device_list.peer_device[index].peer_bdaddr, p_remove_acl->bd_addr))
863ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                break;
8647fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            }
865ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (index != bta_dm_cb.device_list.count)
866ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
867ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_remove_acl->remove_dev)
868ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                bta_dm_cb.device_list.peer_device[index].remove_dev_pending = TRUE;
869ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
870ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        else
871ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
872e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_ERROR("unknown device, remove ACL failed");
873ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
874ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* Disconnect the ACL link */
87576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        btm_remove_acl(p_remove_acl->bd_addr, p_remove_acl->transport);
876ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
877ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /* if to remove the device from security database ? do it now */
878ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    else if (p_remove_acl->remove_dev)
879ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
880ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (!BTM_SecDeleteDevice(p_remove_acl->bd_addr))
881ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
882e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_ERROR("delete device from security database failed.");
883ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
884ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
885ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* need to remove all pending background connection if any */
886ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        BTA_GATTC_CancelOpen(0, p_remove_acl->bd_addr, FALSE);
887ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* remove all cached GATT information */
888ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        BTA_GATTC_Refresh(p_remove_acl->bd_addr);
889ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
890ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
891ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /* otherwise, no action needed */
892ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
893ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
89476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
89576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan/*******************************************************************************
89676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan**
89776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan** Function         bta_dm_remove_all_acl
89876356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan**
89976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan** Description      This function forces to close all the ACL links specified by link type
90076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan****
90176356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan*******************************************************************************/
90276356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavanvoid bta_dm_remove_all_acl(tBTA_DM_MSG *p_data)
90376356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan{
90476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    const tBTA_DM_LINK_TYPE link_type = p_data->remove_all_acl.link_type;
90576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR;
90676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
90776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    APPL_TRACE_DEBUG("%s link type = %d", __func__, link_type);
90876356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
90976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    for (UINT8 i=0; i < bta_dm_cb.device_list.count; i++)
91076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    {
91176356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        BD_ADDR addr = {0};
91276356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        bdcpy(addr, bta_dm_cb.device_list.peer_device[i].peer_bdaddr);
91376356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan#if defined (BLE_INCLUDED) && (BLE_INCLUDED == TRUE)
91476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        transport = bta_dm_cb.device_list.peer_device[i].transport;
91576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan#endif
91676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        if ((link_type == BTA_DM_LINK_TYPE_ALL) ||
91776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            ((link_type == BTA_DM_LINK_TYPE_LE) && (transport == BT_TRANSPORT_LE)) ||
91876356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            ((link_type == BTA_DM_LINK_TYPE_BR_EDR) && (transport == BT_TRANSPORT_BR_EDR)))
91976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        {
92076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            /* Disconnect the ACL link */
92176356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            btm_remove_acl(addr, transport);
92276356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        }
92376356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    }
92476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan}
92576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
92676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
927ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
928ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_bond
9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Bonds with peer device
9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_bond (tBTA_DM_MSG *p_data)
9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS status;
9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char        *p_name;
9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9437fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if (p_data->bond.transport == BTA_TRANSPORT_UNKNOWN)
9447fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        status = BTM_SecBond ( p_data->bond.bd_addr, 0, NULL, 0 );
9457fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    else
9467fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        status = BTM_SecBondByTransport ( p_data->bond.bd_addr, p_data->bond.transport, 0, NULL, 0 );
9477fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bta_dm_cb.p_sec_cback && (status != BTM_CMD_STARTED))
9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(&sec_event, 0, sizeof(tBTA_DM_SEC));
9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy(sec_event.auth_cmpl.bd_addr, p_data->bond.bd_addr);
9542a2701cdddac0859a95e58aec542742c450145b9Kim Schulz        p_name = BTM_SecReadDevName(p_data->bond.bd_addr);
9552a2701cdddac0859a95e58aec542742c450145b9Kim Schulz        if (p_name != NULL)
9562a2701cdddac0859a95e58aec542742c450145b9Kim Schulz        {
9572a2701cdddac0859a95e58aec542742c450145b9Kim Schulz            memcpy(sec_event.auth_cmpl.bd_name, p_name, (BD_NAME_LEN-1));
9582a2701cdddac0859a95e58aec542742c450145b9Kim Schulz            sec_event.auth_cmpl.bd_name[BD_NAME_LEN-1] = 0;
9592a2701cdddac0859a95e58aec542742c450145b9Kim Schulz        }
9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*      taken care of by memset [above]
9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.auth_cmpl.key_present = FALSE;
9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.auth_cmpl.success = FALSE;
9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*/
9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.auth_cmpl.fail_reason = HCI_ERR_ILLEGAL_COMMAND;
9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (status == BTM_SUCCESS)
967ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            sec_event.auth_cmpl.success = TRUE;
969ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
970ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        else
971ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
972ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            /* delete this device entry from Sec Dev DB */
973ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_dm_remove_sec_dev_entry(p_data->bond.bd_addr);
974ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(BTA_DM_AUTH_CMPL_EVT, &sec_event);
9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_bond_cancel
9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Cancels bonding with a peer device
9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_bond_cancel (tBTA_DM_MSG *p_data)
9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS status;
9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
995e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_EVENT(" bta_dm_bond_cancel ");
9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    status = BTM_SecBondCancel ( p_data->bond_cancel.bd_addr );
9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bta_dm_cb.p_sec_cback && (status != BTM_CMD_STARTED && status != BTM_SUCCESS))
9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.bond_cancel_cmpl.result = BTA_FAILURE;
10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(BTA_DM_BOND_CANCEL_CMPL_EVT, &sec_event);
10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_pin_reply
10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Send the pin_reply to a request from BTM
10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_pin_reply (tBTA_DM_MSG *p_data)
10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32  trusted_mask[BTM_SEC_SERVICE_ARRAY_SIZE];
10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32  * current_trusted_mask;
10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    current_trusted_mask = BTM_ReadTrustedMask(p_data->pin_reply.bd_addr);
10235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(current_trusted_mask)
10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(trusted_mask, current_trusted_mask, sizeof(trusted_mask));
10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(trusted_mask, 0, sizeof(trusted_mask));
10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_data->pin_reply.accept)
10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_PINCodeReply(p_data->pin_reply.bd_addr, BTM_SUCCESS, p_data->pin_reply.pin_len, p_data->pin_reply.p_pin, trusted_mask );
10375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_PINCodeReply(p_data->pin_reply.bd_addr, BTM_NOT_AUTHORIZED, 0, NULL, trusted_mask );
10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
10465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_policy_cback
10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      process the link policy changes
10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_policy_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, BD_ADDR peer_addr)
10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_PEER_DEVICE *p_dev = NULL;
10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16  policy = app_id;
10585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32  mask = (UINT32)(1 << id);
10595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(peer_addr)
10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dev = bta_dm_find_peer_device(peer_addr);
10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1063e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG(" bta_dm_policy_cback cmd:%d, policy:0x%x",
10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status, policy);
10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch(status)
10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_SYS_PLCY_SET:
10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(!p_dev)
10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return;
10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* restore the default link policy */
10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dev->link_policy |= policy;
10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetLinkPolicy(p_dev->peer_bdaddr, &(p_dev->link_policy));
10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_SYS_PLCY_CLR:
10765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(!p_dev)
10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return;
10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* clear the policy from the default link policy */
10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dev->link_policy &= (~policy);
10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetLinkPolicy(p_dev->peer_bdaddr, &(p_dev->link_policy));
10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(policy & (HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_PARK_MODE))
10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* if clearing sniff/park, wake the link */
10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_pm_active(p_dev->peer_bdaddr);
10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_SYS_PLCY_DEF_SET:
10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* want to restore/set the role switch policy */
10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.role_policy_mask &= ~mask;
10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(0 == bta_dm_cb.role_policy_mask)
10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* if nobody wants to insist on the role */
10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.cur_policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH;
10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTM_SetDefaultLinkPolicy(bta_dm_cb.cur_policy);
10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
10985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_SYS_PLCY_DEF_CLR:
11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* want to remove the role switch policy */
11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.role_policy_mask |= mask;
11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.cur_policy &= ~HCI_ENABLE_MASTER_SLAVE_SWITCH;
11045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetDefaultLinkPolicy(bta_dm_cb.cur_policy);
11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_confirm
11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Send the user confirm request reply in response to a
11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  request from BTM
11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
11175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_confirm(tBTA_DM_MSG *p_data)
11205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS res = BTM_NOT_AUTHORIZED;
11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_data->confirm.accept == TRUE)
11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        res = BTM_SUCCESS;
11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_ConfirmReqReply(res, p_data->confirm.bd_addr);
11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_loc_oob
11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Retrieve the OOB data from the local LM
11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_loc_oob(tBTA_DM_MSG *p_data)
11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
11395cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
11405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_ReadLocalOobData();
11415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_ci_io_req_act
11465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      respond to the IO capabilities request from BTM
11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ci_io_req_act(tBTA_DM_MSG *p_data)
11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_AUTH_REQ   auth_req = BTM_AUTH_AP_NO;
11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_data->ci_io_req.auth_req)
11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        auth_req = BTM_AUTH_AP_YES;
11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_IoCapRsp(p_data->ci_io_req.bd_addr, p_data->ci_io_req.io_cap,
11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_data->ci_io_req.oob_data, auth_req);
11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_ci_rmt_oob_act
11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      respond to the OOB data request for the remote device from BTM
11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ci_rmt_oob_act(tBTA_DM_MSG *p_data)
11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS res = BTM_NOT_AUTHORIZED;
11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_data->ci_rmt_oob.accept == TRUE)
11765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        res = BTM_SUCCESS;
11775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_RemoteOobDataReply(res, p_data->ci_rmt_oob.bd_addr,
11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_data->ci_rmt_oob.c, p_data->ci_rmt_oob.r );
11795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
11825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_start
11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Starts an inquiry
11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_start (tBTA_DM_MSG *p_data)
11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_INQUIRY_CMPL result;
11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1195e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
1196abd70abb5e42c9431df94fe9d2c4a78a0d8d9af9Pavlin Radoslavov    size_t len = sizeof(tBT_UUID) * p_data->search.num_uuid;
119776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    bta_dm_gattc_register();
11985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
120076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    APPL_TRACE_DEBUG("%s avoid_scatter=%d", __func__, p_bta_dm_cfg->avoid_scatter);
120176356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
120276356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    if (p_bta_dm_cfg->avoid_scatter &&
12035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (p_data->search.rs_res == BTA_DM_RS_NONE) && bta_dm_check_av(BTA_DM_API_SEARCH_EVT))
12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&bta_dm_cb.search_msg, &p_data->search, sizeof(tBTA_DM_API_SEARCH));
12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_ClearInqDb(NULL);
12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* save search params */
12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.p_search_cback = p_data->search.p_cback;
12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.services = p_data->search.services;
12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
1215abd70abb5e42c9431df94fe9d2c4a78a0d8d9af9Pavlin Radoslavov    osi_free_and_reset((void **)&bta_dm_search_cb.p_srvc_uuid);
12165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((bta_dm_search_cb.num_uuid = p_data->search.num_uuid) != 0 &&
12185fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov         p_data->search.p_uuid != NULL) {
12195fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bta_dm_search_cb.p_srvc_uuid = (tBT_UUID *)osi_malloc(len);
12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(bta_dm_search_cb.p_srvc_uuid, p_data->search.p_uuid, len);
12215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result.status = BTM_StartInquiry(   (tBTM_INQ_PARMS*)&p_data->search.inq_params,
12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        bta_dm_inq_results_cb,
12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        (tBTM_CMPL_CB*) bta_dm_inq_cmpl_cb);
12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
122776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    APPL_TRACE_EVENT("%s status=%d", __func__, result.status);
12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (result.status != BTM_CMD_STARTED)
12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        result.num_resp = 0;
12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_inq_cmpl_cb ((void *)&result);
12325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_cancel
12385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Cancels an ongoing search for devices
12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_cancel (tBTA_DM_MSG *p_data)
12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
12475cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
12485fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_DM_MSG *p_msg;
12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
125076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    if (BTM_IsInquiryActive())
12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12524fc97325278c6ce3c78b14ec26f32b85a15e784eYan Laijun        if (BTM_CancelInquiry() == BTM_SUCCESS)
12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
125476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            bta_dm_search_cancel_notify(NULL);
12555fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG));
12565fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT;
12575fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT;
12585fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            bta_sys_sendmsg(p_msg);
125976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        } else {
126076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            /* flag a search cancel is pending */
126176356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            bta_dm_search_cb.cancel_pending = TRUE;
12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
12635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* If no Service Search going on then issue cancel remote name in case it is active */
12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else if (!bta_dm_search_cb.name_discover_done)
12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_CancelRemoteDeviceName();
1268c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie
12695fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG));
12705fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT;
12715fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT;
12725fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bta_sys_sendmsg(p_msg);
12735fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    } else {
12745fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG));
12755fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->hdr.event = BTA_DM_INQUIRY_CMPL_EVT;
12765fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT;
12775fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bta_sys_sendmsg(p_msg);
1278c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie    }
1279c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie
1280ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bta_dm_search_cb.gatt_disc_active)
12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cancel_gatt_discovery(bta_dm_search_cb.peer_bdaddr);
12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_discover
12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Discovers services on a remote device
12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_discover (tBTA_DM_MSG *p_data)
12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
1301abd70abb5e42c9431df94fe9d2c4a78a0d8d9af9Pavlin Radoslavov    size_t len = sizeof(tBT_UUID) * p_data->discover.num_uuid;
13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1303f8027005333c88a2f097cfd70d15c3d54c7764aeChris Manton    APPL_TRACE_EVENT("%s services_to_search=0x%04X, sdp_search=%d", __func__,
13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_data->discover.services, p_data->discover.sdp_search);
13055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* save the search condition */
13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.services = p_data->discover.services;
13085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
131076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    bta_dm_gattc_register();
1311abd70abb5e42c9431df94fe9d2c4a78a0d8d9af9Pavlin Radoslavov    osi_free_and_reset((void **)&bta_dm_search_cb.p_srvc_uuid);
13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((bta_dm_search_cb.num_uuid = p_data->discover.num_uuid) != 0 &&
13135fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_data->discover.p_uuid != NULL) {
13145fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bta_dm_search_cb.p_srvc_uuid = (tBT_UUID *)osi_malloc(len);
13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(bta_dm_search_cb.p_srvc_uuid, p_data->discover.p_uuid, len);
13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.uuid_to_search = bta_dm_search_cb.num_uuid;
13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.p_search_cback = p_data->discover.p_cback;
13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.sdp_search = p_data->discover.sdp_search;
13225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.services_to_search = bta_dm_search_cb.services;
13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.service_index = 0;
13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.services_found = 0;
13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.peer_name[0] = 0;
13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.sdp_search = p_data->discover.sdp_search;
13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.p_btm_inq_info = BTM_InqDbRead (p_data->discover.bd_addr);
13287fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    bta_dm_search_cb.transport = p_data->discover.transport;
13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.name_discover_done = FALSE;
13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memcpy(&bta_dm_search_cb.uuid, &p_data->discover.uuid, sizeof(tSDP_UUID));
13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_discover_device(p_data->discover.bd_addr);
13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_di_disc_cmpl
13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Sends event to application when DI discovery complete
13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_di_disc_cmpl(tBTA_DM_MSG *p_data)
13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_DI_DISC_CMPL    di_disc;
13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(&di_disc, 0, sizeof(tBTA_DM_DI_DISC_CMPL));
13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bdcpy(di_disc.bd_addr, bta_dm_search_cb.peer_bdaddr);
13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if((p_data->hdr.offset == SDP_SUCCESS)
13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        || (p_data->hdr.offset == SDP_DB_FULL))
13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        di_disc.num_record  = SDP_GetNumDiRecords(bta_dm_di_cb.p_di_db);
13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        di_disc.result      = BTA_FAILURE;
13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_di_cb.p_di_db = NULL;
13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.p_search_cback(BTA_DM_DI_DISC_CMPL_EVT, (tBTA_DM_SEARCH *) &di_disc);
13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_di_disc_callback
13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function queries a remote device for DI information.
13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_di_disc_callback(UINT16 result)
13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
13755fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_DM_MSG *p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG));
13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13775fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT;
13785fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->hdr.layer_specific = BTA_DM_API_DI_DISCOVER_EVT;
13795fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->hdr.offset = result;
13805fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
13815fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_msg);
13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1386ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         bta_dm_disable_search_and_disc
1387ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
1388ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      Cancels an ongoing search or discovery for devices in case of
1389ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  a Bluetooth disable
1390ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
1391ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
1392ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          void
1393ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
1394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
1395ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_disable_search_and_disc (void)
1396ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1397ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_DM_DI_DISC_CMPL    di_disc;
1398ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
139976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    if (bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE)
140076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        bta_dm_search_cancel(NULL);
1401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
140276356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    if (bta_dm_di_cb.p_di_db != NULL)
1403ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
1404ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memset(&di_disc, 0, sizeof(tBTA_DM_DI_DISC_CMPL));
1405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bdcpy(di_disc.bd_addr, bta_dm_search_cb.peer_bdaddr);
1406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        di_disc.result      = BTA_FAILURE;
1407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_dm_di_cb.p_di_db = NULL;
1409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_dm_search_cb.p_search_cback(BTA_DM_DI_DISC_CMPL_EVT, NULL);
1410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
1414ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_di_disc
14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function queries a remote device for DI information.
14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_di_disc (tBTA_DM_MSG *p_data)
14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16  result = BTA_FAILURE;
14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.p_search_cback = p_data->di_disc.p_cback;
14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bdcpy(bta_dm_search_cb.peer_bdaddr, p_data->di_disc.bd_addr);
14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_di_cb.p_di_db = p_data->di_disc.p_sdp_db;
14305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14315fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_dm_search_cb.p_sdp_db = (tSDP_DISCOVERY_DB *)osi_malloc(BTA_DM_SDP_DB_SIZE);
14325fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    if (SDP_DiDiscover(bta_dm_search_cb.peer_bdaddr, p_data->di_disc.p_sdp_db,
14335fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                       p_data->di_disc.len,
14345fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                       bta_dm_di_disc_callback) == SDP_SUCCESS) {
14355fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        result = BTA_SUCCESS;
14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14385fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    if (result == BTA_FAILURE) {
14395fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        tBTA_DM_MSG *p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG));
14405fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
14415fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT;
14425fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->hdr.layer_specific = BTA_DM_API_DI_DISCOVER_EVT;
14435fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_data->hdr.offset = result;
14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_msg);
14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_read_remote_device_name
14515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Initiate to get remote device name
14535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          TRUE if started to get remote name
14555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14577fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battastatic BOOLEAN bta_dm_read_remote_device_name (BD_ADDR bd_addr,tBT_TRANSPORT transport)
14585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
14595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS  btm_status;
14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1461e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_read_remote_device_name");
14625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bdcpy(bta_dm_search_cb.peer_bdaddr, bd_addr);
14645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.peer_name[0] = 0;
14655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btm_status = BTM_ReadRemoteDeviceName (bta_dm_search_cb.peer_bdaddr,
14677fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                           (tBTM_CMPL_CB *) bta_dm_remname_cback,
14687fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                           transport);
14695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( btm_status == BTM_CMD_STARTED )
14715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1472e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_DEBUG("bta_dm_read_remote_device_name: BTM_ReadRemoteDeviceName is started");
14735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (TRUE);
14755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else if ( btm_status == BTM_BUSY )
14775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1478e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_DEBUG("bta_dm_read_remote_device_name: BTM_ReadRemoteDeviceName is busy");
14795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Remote name discovery is on going now so BTM cannot notify through "bta_dm_remname_cback" */
14815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* adding callback to get notified that current reading remore name done */
14825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SecAddRmtNameNotifyCallback(&bta_dm_service_search_remname_cback);
14835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (TRUE);
14855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
14875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1488e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_WARNING("bta_dm_read_remote_device_name: BTM_ReadRemoteDeviceName returns 0x%02X", btm_status);
14895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
14915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
14955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_inq_cmpl
14975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the inquiry complete event from BTM
14995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
15015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_inq_cmpl (tBTA_DM_MSG *p_data)
15045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
15055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEARCH  data;
15065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1507e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_inq_cmpl");
15085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    data.inq_cmpl.num_resps = p_data->inq_cmpl.num;
15105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.p_search_cback(BTA_DM_INQ_CMPL_EVT, &data);
15115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if((bta_dm_search_cb.p_btm_inq_info = BTM_InqDbFirst()) != NULL)
15135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* start name and service discovery from the first device on inquiry result */
15155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.name_discover_done = FALSE;
15165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.peer_name[0]       = 0;
15175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_discover_device(bta_dm_search_cb.p_btm_inq_info->results.remote_bd_addr);
15185fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    } else {
15195fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        tBTA_DM_MSG *p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG));
15205fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
15215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* no devices, search complete */
15225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.services = 0;
15235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15245fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT;
15255fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT;
15265fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bta_sys_sendmsg(p_msg);
15275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15285fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov}
15295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
15315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_rmt_name
15335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the remote name result from BTM
15355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
15375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
15395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_rmt_name (tBTA_DM_MSG *p_data)
15405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1541e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_rmt_name");
15425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( p_data->rem_name.result.disc_res.bd_name[0] && bta_dm_search_cb.p_btm_inq_info)
15445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_btm_inq_info->appl_knows_rem_name = TRUE;
15465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_discover_device(bta_dm_search_cb.peer_bdaddr);
15495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
15505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
15525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_disc_rmt_name
15545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the remote name result from BTM when application
15565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  wants to find the name for a bdaddr
15575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
15595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
15615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_disc_rmt_name (tBTA_DM_MSG *p_data)
15625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
15635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_INQ_INFO *p_btm_inq_info;
15645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1565e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_disc_rmt_name");
15665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_btm_inq_info = BTM_InqDbRead (p_data->rem_name.result.disc_res.bd_addr);
15685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( p_btm_inq_info )
15695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( p_data->rem_name.result.disc_res.bd_name[0] )
15715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_btm_inq_info->appl_knows_rem_name = TRUE;
15735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_discover_device(p_data->rem_name.result.disc_res.bd_addr);
15775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
15785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
15805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_sdp_result
15825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the discovery result from sdp
15845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
15865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
15885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_sdp_result (tBTA_DM_MSG *p_data)
15895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
15905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tSDP_DISC_REC   *p_sdp_rec = NULL;
15925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_MSG     *p_msg;
15935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN          scn_found = FALSE;
15945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16           service = 0xFFFF;
15955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tSDP_PROTOCOL_ELEM  pe;
15965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
15985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBT_UUID           *p_uuid = bta_dm_search_cb.p_srvc_uuid;
15995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEARCH      result;
16005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBT_UUID            service_uuid;
16015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
16025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32 num_uuids = 0;
16045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8  uuid_list[32][MAX_UUID_SIZE]; // assuming a max of 32 services
16055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if((p_data->sdp_event.sdp_result == SDP_SUCCESS)
16075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        || (p_data->sdp_event.sdp_result == SDP_NO_RECS_MATCH)
16085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        || (p_data->sdp_event.sdp_result == SDP_DB_FULL))
16095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1610e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_DEBUG("sdp_result::0x%x", p_data->sdp_event.sdp_result);
16115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        do
16125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
16135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_sdp_rec = NULL;
16155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if( bta_dm_search_cb.service_index == (BTA_USER_SERVICE_ID+1) )
16165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
16175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_sdp_rec = SDP_FindServiceUUIDInDb(bta_dm_search_cb.p_sdp_db, &bta_dm_search_cb.uuid, p_sdp_rec);
16185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_sdp_rec && SDP_FindProtocolListElemInRec(p_sdp_rec, UUID_PROTOCOL_RFCOMM, &pe))
16205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
16215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.peer_scn = (UINT8) pe.params[0];
16225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    scn_found = TRUE;
16235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
16245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
16255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
16265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
16275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                service = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index-1];
16285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_sdp_rec = SDP_FindServiceInDb(bta_dm_search_cb.p_sdp_db, service, p_sdp_rec);
16295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
16305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
16315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* finished with BR/EDR services, now we check the result for GATT based service UUID */
16325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (bta_dm_search_cb.service_index == BTA_MAX_SERVICE_ID)
16335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
16345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (bta_dm_search_cb.uuid_to_search != 0 && p_uuid != NULL)
16355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
16365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_uuid +=  (bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search);
16375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* only support 16 bits UUID for now */
16385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    service = p_uuid->uu.uuid16;
16395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
16415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* all GATT based services */
16425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                do
16435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
16445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* find a service record, report it */
16455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_sdp_rec = SDP_FindServiceInDb(bta_dm_search_cb.p_sdp_db,
16465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                0, p_sdp_rec);
16475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_sdp_rec)
16485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
16495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if (SDP_FindServiceUUIDInRec(p_sdp_rec, &service_uuid))
16505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
16515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            /* send result back to app now, one by one */
16525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            bdcpy (result.disc_ble_res.bd_addr, bta_dm_search_cb.peer_bdaddr);
165366209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach                            strlcpy((char*)result.disc_ble_res.bd_name, bta_dm_get_remname(), BD_NAME_LEN);
16545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            result.disc_ble_res.service.len = service_uuid.len;
16555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            result.disc_ble_res.service.uu.uuid16 = service_uuid.uu.uuid16;
16565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result);
16585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
16595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
16605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (bta_dm_search_cb.uuid_to_search > 0)
16625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
16635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                } while (p_sdp_rec);
16655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
16665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
16675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
16685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
166976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                /* SDP_DB_FULL means some records with the
167076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                   required attributes were received */
167176356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                if (((p_data->sdp_event.sdp_result == SDP_DB_FULL) &&
167276356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                        bta_dm_search_cb.services != BTA_ALL_SERVICE_MASK) ||
167376356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                        (p_sdp_rec != NULL))
16745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
167576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                    if (service != UUID_SERVCLASS_PNP_INFORMATION)
167676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                    {
167776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                        UINT16 tmp_svc = 0xFFFF;
167876356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                        bta_dm_search_cb.services_found |=
167976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                            (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index-1));
168076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                        tmp_svc = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index-1];
168176356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                        /* Add to the list of UUIDs */
168276356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                        sdpu_uuid16_to_uuid128(tmp_svc, uuid_list[num_uuids]);
168376356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                        num_uuids++;
168476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                    }
16855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
16865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
16875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK &&
16895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_search_cb.services_to_search == 0)
16905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
16915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
16925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if ( bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID &&
16935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.uuid_to_search > 0)
16945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.uuid_to_search --;
16955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (bta_dm_search_cb.uuid_to_search == 0 ||
16975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.service_index != BTA_BLE_SERVICE_ID)
16985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
16995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.service_index++;
17005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
17015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else /* regular one service per search or PNP search */
17025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
17035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
170420524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavov        } while (bta_dm_search_cb.service_index <= BTA_MAX_SERVICE_ID);
17055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
170676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        APPL_TRACE_DEBUG("%s services_found = %04x", __FUNCTION__,
170776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                         bta_dm_search_cb.services_found);
17085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Collect the 128-bit services here and put them into the list */
17105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK)
17115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
17125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_sdp_rec = NULL;
17135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            do
17145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
17155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                tBT_UUID temp_uuid;
17165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* find a service record, report it */
17175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_sdp_rec = SDP_FindServiceInDb_128bit(bta_dm_search_cb.p_sdp_db, p_sdp_rec);
17185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_sdp_rec)
17195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
17205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (SDP_FindServiceUUIDInRec_128bit(p_sdp_rec, &temp_uuid))
17215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
17225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        memcpy(uuid_list[num_uuids], temp_uuid.uu.uuid128, MAX_UUID_SIZE);
17235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        num_uuids++;
17245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
17255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
17265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            } while (p_sdp_rec);
17275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
17285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* if there are more services to search for */
17295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_dm_search_cb.services_to_search)
17305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
17315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* Free up the p_sdp_db before checking the next one */
17325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_free_sdp_db(NULL);
17335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_find_services(bta_dm_search_cb.peer_bdaddr);
17345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
17355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
17365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
17375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* callbacks */
17385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* start next bd_addr if necessary */
17395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTM_SecDeleteRmtNameNotifyCallback(&bta_dm_service_search_remname_cback);
17415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17425fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG));
17435fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT;
17445fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            p_msg->disc_result.result.disc_res.result = BTA_SUCCESS;
17455fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            p_msg->disc_result.result.disc_res.p_raw_data = NULL;
17465fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            p_msg->disc_result.result.disc_res.raw_data_size = 0;
17475fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            p_msg->disc_result.result.disc_res.num_uuids = num_uuids;
17485fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            p_msg->disc_result.result.disc_res.p_uuid_list = NULL;
17495fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            if (num_uuids > 0) {
17505fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                p_msg->disc_result.result.disc_res.p_uuid_list =
17515fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                    (UINT8 *)osi_malloc(num_uuids * MAX_UUID_SIZE);
17525fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                memcpy(p_msg->disc_result.result.disc_res.p_uuid_list,
17535fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                       uuid_list, num_uuids * MAX_UUID_SIZE);
17545fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            }
17555fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            // Copy the raw_data to the discovery result structure
17565fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            if (bta_dm_search_cb.p_sdp_db != NULL &&
17575fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                bta_dm_search_cb.p_sdp_db->raw_used != 0 &&
17585fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                bta_dm_search_cb.p_sdp_db->raw_data != NULL) {
17595fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                APPL_TRACE_DEBUG("%s raw_data used = 0x%x raw_data_ptr = 0x%x",
17605fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                                 __func__,
17615fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                                 bta_dm_search_cb.p_sdp_db->raw_used,
17625fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                                 bta_dm_search_cb.p_sdp_db->raw_data);
17635fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
17645fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                p_msg->disc_result.result.disc_res.p_raw_data =
17655fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                    osi_malloc(bta_dm_search_cb.p_sdp_db->raw_used);
17665fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                memcpy(p_msg->disc_result.result.disc_res.p_raw_data,
17675fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                       bta_dm_search_cb.p_sdp_db->raw_data,
17685fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                       bta_dm_search_cb.p_sdp_db->raw_used);
17695fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
17705fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                p_msg->disc_result.result.disc_res.raw_data_size =
17715fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                    bta_dm_search_cb.p_sdp_db->raw_used;
17725fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
17735fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                bta_dm_search_cb.p_sdp_db->raw_data = NULL;     //no need to free this - it is a global assigned.
17745fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                bta_dm_search_cb.p_sdp_db->raw_used = 0;
17755fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                bta_dm_search_cb.p_sdp_db->raw_size = 0;
17765fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            } else {
17775fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                APPL_TRACE_DEBUG("%s raw data size is 0 or raw_data is null!!",
17785fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                                 __func__);
17795fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            }
17805fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            /* Done with p_sdp_db. Free it */
17815fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            bta_dm_free_sdp_db(NULL);
17825fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found;
17835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17845fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            // Piggy back the SCN over result field
17855fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            if (scn_found) {
17865fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                p_msg->disc_result.result.disc_res.result = (3 + bta_dm_search_cb.peer_scn);
17875fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                p_msg->disc_result.result.disc_res.services |= BTA_USER_SERVICE_MASK;
17885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17895fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                APPL_TRACE_EVENT(" Piggy back the SCN over result field  SCN=%d", bta_dm_search_cb.peer_scn);
17905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
17925fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            bdcpy(p_msg->disc_result.result.disc_res.bd_addr,
17935fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                  bta_dm_search_cb.peer_bdaddr);
17945fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            strlcpy((char*)p_msg->disc_result.result.disc_res.bd_name,
17955fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                      bta_dm_get_remname(), BD_NAME_LEN);
17965fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
17975fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            bta_sys_sendmsg(p_msg);
17985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
179976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    } else {
18005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* conn failed. No need for timer */
18015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(p_data->sdp_event.sdp_result == SDP_CONN_FAILED || p_data->sdp_event.sdp_result == SDP_CONN_REJECTED
18025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           || p_data->sdp_event.sdp_result == SDP_SECURITY_ERR)
18035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_search_cb.wait_disc = FALSE;
18045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* not able to connect go to next device */
18068ac46ef1e4910c1db12b0243dca140c3075d3238Srinu Jella        if (bta_dm_search_cb.p_sdp_db)
18078ac46ef1e4910c1db12b0243dca140c3075d3238Srinu Jella            osi_free_and_reset((void **)&bta_dm_search_cb.p_sdp_db);
18085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SecDeleteRmtNameNotifyCallback(&bta_dm_service_search_remname_cback);
18105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18115fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG));
18125fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT;
18135fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->disc_result.result.disc_res.result = BTA_FAILURE;
18145fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found;
18155fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bdcpy(p_msg->disc_result.result.disc_res.bd_addr,
18165fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov              bta_dm_search_cb.peer_bdaddr);
18175fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        strlcpy((char*)p_msg->disc_result.result.disc_res.bd_name,
18185fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                bta_dm_get_remname(), BD_NAME_LEN);
18195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18205fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bta_sys_sendmsg(p_msg);
18215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
18225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
18255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_cmpl
18275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Sends event to application
18295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
18315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
183320524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavovvoid bta_dm_search_cmpl(tBTA_DM_MSG *p_data)
18345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
183576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    APPL_TRACE_EVENT("%s", __func__);
18365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
1838abd70abb5e42c9431df94fe9d2c4a78a0d8d9af9Pavlin Radoslavov    osi_free_and_reset((void **)&bta_dm_search_cb.p_srvc_uuid);
18395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
18405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->hdr.layer_specific == BTA_DM_API_DI_DISCOVER_EVT)
18425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_di_disc_cmpl(p_data);
18435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
18445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_search_cback(BTA_DM_DISC_CMPL_EVT, NULL);
18455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
18485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_disc_result
18505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Service discovery result when discovering services on a device
18525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
18545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
18565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_disc_result (tBTA_DM_MSG *p_data)
18575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
185876356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    APPL_TRACE_EVENT("%s", __func__);
18595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
18615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if any BR/EDR service discovery has been done, report the event */
18625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((bta_dm_search_cb.services & ((BTA_ALL_SERVICE_MASK | BTA_USER_SERVICE_MASK ) & ~BTA_BLE_SERVICE_MASK)))
18635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
18645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.p_search_cback(BTA_DM_DISC_RES_EVT, &p_data->disc_result.result);
18655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18665fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_DM_MSG *p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG));
186776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
18685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* send a message to change state */
18695fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT;
18705fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT;
18715fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_msg);
18725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
18735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
18755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_result
18775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Service discovery result while searching for devices
18795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
18815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
18825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
18835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_result (tBTA_DM_MSG *p_data)
18845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
188576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    APPL_TRACE_DEBUG("%s searching:0x%04x, result:0x%04x", __func__,
18865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       bta_dm_search_cb.services,
18875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       p_data->disc_result.result.disc_res.services);
18885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* call back if application wants name discovery or found services that application is searching */
18905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (( !bta_dm_search_cb.services )
18915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project      ||(( bta_dm_search_cb.services ) && ( p_data->disc_result.result.disc_res.services )))
18925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
18935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_search_cback(BTA_DM_DISC_RES_EVT, &p_data->disc_result.result);
18945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
18955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if searching did not initiate to create link */
18975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(!bta_dm_search_cb.wait_disc )
18985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
18995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* if service searching is done with EIR, don't search next device */
19005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( bta_dm_search_cb.p_btm_inq_info )
19015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_discover_next_device();
19025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
19035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
19045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
19055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* wait until link is disconnected or timeout */
19065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.sdp_results = TRUE;
190778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        alarm_set_on_queue(bta_dm_search_cb.search_timer,
190878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                           1000 * (L2CAP_LINK_INACTIVITY_TOUT + 1),
190978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                           bta_dm_search_timer_cback, NULL,
191078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                           btu_bta_alarm_queue);
19115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
19125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
19155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_timer_cback
19175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Called when ACL disconnect time is over
19195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
19225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
192478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovstatic void bta_dm_search_timer_cback(UNUSED_ATTR void *data)
19255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
192676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    APPL_TRACE_EVENT("%s", __func__);
19275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.wait_disc = FALSE;
19285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* proceed with next device */
19305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_discover_next_device();
19315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
19365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_free_sdp_db
19385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Frees SDP data base
19405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
19425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
19445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_free_sdp_db (tBTA_DM_MSG *p_data)
19455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
19465cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
1947abd70abb5e42c9431df94fe9d2c4a78a0d8d9af9Pavlin Radoslavov    osi_free_and_reset((void **)&bta_dm_search_cb.p_sdp_db);
19485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
19515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_queue_search
19535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Queues search command while search is being cancelled
19555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
19575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
195920524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavovvoid bta_dm_queue_search(tBTA_DM_MSG *p_data)
19605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1961abd70abb5e42c9431df94fe9d2c4a78a0d8d9af9Pavlin Radoslavov    osi_free(bta_dm_search_cb.p_search_queue);
196220524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavov    bta_dm_search_cb.p_search_queue =
1963abd70abb5e42c9431df94fe9d2c4a78a0d8d9af9Pavlin Radoslavov      (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_API_SEARCH));
196420524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavov    memcpy(bta_dm_search_cb.p_search_queue, p_data,
196520524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavov           sizeof(tBTA_DM_API_SEARCH));
19665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
19695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_queue_disc
19715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Queues discovery command while search is being cancelled
19735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
19755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
197720524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavovvoid bta_dm_queue_disc(tBTA_DM_MSG *p_data)
19785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1979abd70abb5e42c9431df94fe9d2c4a78a0d8d9af9Pavlin Radoslavov    osi_free(bta_dm_search_cb.p_search_queue);
198020524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavov    bta_dm_search_cb.p_search_queue =
1981abd70abb5e42c9431df94fe9d2c4a78a0d8d9af9Pavlin Radoslavov        (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_API_DISCOVER));
198220524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavov    memcpy(bta_dm_search_cb.p_search_queue, p_data,
198320524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavov           sizeof(tBTA_DM_API_DISCOVER));
19845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
19875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_clear_queue
19895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Clears the queue if API search cancel is called
19915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
19935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
199520524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavovvoid bta_dm_search_clear_queue(tBTA_DM_MSG *p_data)
19965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
19975cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
1998abd70abb5e42c9431df94fe9d2c4a78a0d8d9af9Pavlin Radoslavov    osi_free_and_reset((void **)&bta_dm_search_cb.p_search_queue);
19995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
20005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
20025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_cancel_cmpl
20045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Search cancel is complete
20065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
20085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
20105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_cancel_cmpl (tBTA_DM_MSG *p_data)
20115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
20125cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
20135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_search_cb.p_search_queue)
20145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
20155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(bta_dm_search_cb.p_search_queue);
20165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_search_queue = NULL;
20175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
20185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
20205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
20225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_cancel_transac_cmpl
20245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Current Service Discovery or remote name procedure is
20265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  completed after search cancellation
20275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
20295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
20315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_cancel_transac_cmpl(tBTA_DM_MSG *p_data)
20325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
20335cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
20345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2035abd70abb5e42c9431df94fe9d2c4a78a0d8d9af9Pavlin Radoslavov    osi_free_and_reset((void **)&bta_dm_search_cb.p_sdp_db);
20365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cancel_notify(NULL);
20375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
20385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
20415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_cancel_notify
20435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Notify application that search has been cancelled
20455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
20475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
20495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_cancel_notify (tBTA_DM_MSG *p_data)
20505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
20515cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
20525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bta_dm_search_cb.p_search_cback)
20535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
20545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_search_cback(BTA_DM_SEARCH_CANCEL_CMPL_EVT, NULL);
20555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
20565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!bta_dm_search_cb.name_discover_done)
20575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
20585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_CancelRemoteDeviceName();
20595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2060ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE) && (BTA_GATT_INCLUDED == TRUE)
20615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bta_dm_search_cb.gatt_disc_active)
20625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
20635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cancel_gatt_discovery(bta_dm_search_cb.peer_bdaddr);
20645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
20655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
20665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
20685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
20705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_find_services
20725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Starts discovery on a device
20745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
20765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
20785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_find_services ( BD_ADDR bd_addr)
20795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
20805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tSDP_UUID    uuid;
20825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20835fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    memset(&uuid, 0, sizeof(tSDP_UUID));
20845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    while(bta_dm_search_cb.service_index < BTA_MAX_SERVICE_ID)
20865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
20875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( bta_dm_search_cb.services_to_search
20885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            & (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index)))
20895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
20905fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            bta_dm_search_cb.p_sdp_db = (tSDP_DISCOVERY_DB *)osi_malloc(BTA_DM_SDP_DB_SIZE);
20915fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            APPL_TRACE_DEBUG("bta_dm_search_cb.services = %04x***********", bta_dm_search_cb.services);
20925fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            /* try to search all services by search based on L2CAP UUID */
20935fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            if (bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK) {
20945fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                LOG_INFO(LOG_TAG, "%s services_to_search=%08x", __func__,
20955fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                         bta_dm_search_cb.services_to_search);
20965fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                if (bta_dm_search_cb.services_to_search & BTA_RES_SERVICE_MASK) {
20975fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                    uuid.uu.uuid16 = bta_service_id_to_uuid_lkup_tbl[0];
20985fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                    bta_dm_search_cb.services_to_search &= ~BTA_RES_SERVICE_MASK;
20995fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                } else {
21005fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                    uuid.uu.uuid16 = UUID_PROTOCOL_L2CAP;
21015fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                    bta_dm_search_cb.services_to_search = 0;
21025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
21035fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            } else {
21045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
21055fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                /* for LE only profile */
21065fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                if (bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID) {
21075fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                    if (bta_dm_search_cb.uuid_to_search > 0 &&
21085fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                        bta_dm_search_cb.p_srvc_uuid) {
21095fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                        memcpy(&uuid,
21105fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                               (const void *)(bta_dm_search_cb.p_srvc_uuid +
21115fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                                              bta_dm_search_cb.num_uuid -
21125fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                                              bta_dm_search_cb.uuid_to_search),
21135fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                               sizeof(tBT_UUID));
21145fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
21155fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                        bta_dm_search_cb.uuid_to_search--;
21165fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                    } else {
21175fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                        uuid.uu.uuid16 = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index];
21185fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                    }
21195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21205fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                    /* last one? clear the BLE service bit if all discovery has been done */
21215fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                    if (bta_dm_search_cb.uuid_to_search == 0)
21225fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                      bta_dm_search_cb.services_to_search &=
21235fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                        (tBTA_SERVICE_MASK)(~(BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index)));
21245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21255fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                } else
21265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
21275fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                {
21285fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                    /* remove the service from services to be searched  */
21295fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                    bta_dm_search_cb.services_to_search &=
21305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        (tBTA_SERVICE_MASK)(~(BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index)));
21315fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                    uuid.uu.uuid16 = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index];
21325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
21335fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            }
21345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21355fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            if (uuid.len == 0)
21365fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                uuid.len = LEN_UUID_16;
21375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21385fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            if (bta_dm_search_cb.service_index == BTA_USER_SERVICE_ID) {
21395fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                memcpy(&uuid, &bta_dm_search_cb.uuid, sizeof(tSDP_UUID));
21405fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            }
21415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21425fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            LOG_INFO(LOG_TAG, "%s search UUID = %04x", __func__,
21435fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                     uuid.uu.uuid16);
21445fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            SDP_InitDiscoveryDb(bta_dm_search_cb.p_sdp_db, BTA_DM_SDP_DB_SIZE,
21455fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                                1, &uuid, 0, NULL);
21465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21475fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            memset(g_disc_raw_data_buf, 0, sizeof(g_disc_raw_data_buf));
21485fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            bta_dm_search_cb.p_sdp_db->raw_data = g_disc_raw_data_buf;
21495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21505fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            bta_dm_search_cb.p_sdp_db->raw_size = MAX_DISC_RAW_DATA_BUF;
21515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21525fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            if (!SDP_ServiceSearchAttributeRequest(bd_addr, bta_dm_search_cb.p_sdp_db, &bta_dm_sdp_callback)) {
21535fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov              /*
21545fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov               * If discovery is not successful with this device, then
21555fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov               * proceed with the next one.
21565fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov               */
21575fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov              osi_free_and_reset((void **)&bta_dm_search_cb.p_sdp_db);
21585fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov              bta_dm_search_cb.service_index = BTA_MAX_SERVICE_ID;
21595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21605fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            } else {
21615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
21625fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                if ((bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID &&
21635fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                     bta_dm_search_cb.uuid_to_search == 0) ||
21645fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                    bta_dm_search_cb.service_index != BTA_BLE_SERVICE_ID)
21655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
21665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.service_index++;
21675fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                return;
21685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
21695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
21705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.service_index++;
21725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
21735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* no more services to be discovered */
21755fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    if (bta_dm_search_cb.service_index >= BTA_MAX_SERVICE_ID) {
21765fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        tBTA_DM_MSG *p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG));
21775fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT;
21785fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found;
21795fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bdcpy(p_msg->disc_result.result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr);
21805fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        strlcpy((char*)p_msg->disc_result.result.disc_res.bd_name,
21815fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                bta_dm_get_remname(), BD_NAME_LEN);
21825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21835fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bta_sys_sendmsg(p_msg);
21845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
21855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
21865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
21885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_discover_next_device
21905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Starts discovery on the next device in Inquiry data base
21925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
21945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
21965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_discover_next_device(void)
21975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2198e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_discover_next_device");
21995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* searching next device on inquiry result */
22015fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    if((bta_dm_search_cb.p_btm_inq_info = BTM_InqDbNext(bta_dm_search_cb.p_btm_inq_info)) != NULL) {
22025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.name_discover_done = FALSE;
22035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.peer_name[0]       = 0;
22045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_discover_device(bta_dm_search_cb.p_btm_inq_info->results.remote_bd_addr);
22055fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    } else {
22065fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        tBTA_DM_MSG *p_msg =
22075fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG));
22085fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
22095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* no devices, search complete */
22105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.services = 0;
22115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22125fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT;
22135fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT;
22145fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
22155fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bta_sys_sendmsg(p_msg);
22165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
22175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
22205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_discover_device
22225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Starts name and service discovery on the device
22245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
22265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
22285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_discover_device(BD_ADDR remote_bd_addr)
22295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
22307fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR;
2231b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora
22327fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
2233b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora    if (bta_dm_search_cb.transport == BTA_TRANSPORT_UNKNOWN)
2234b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora    {
22357fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        tBT_DEVICE_TYPE dev_type;
22367fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        tBLE_ADDR_TYPE  addr_type;
22377fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
22387fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        BTM_ReadDevInfo(remote_bd_addr, &dev_type, &addr_type);
2239b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora        if (dev_type == BT_DEVICE_TYPE_BLE || addr_type == BLE_ADDR_RANDOM)
22407fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            transport = BT_TRANSPORT_LE;
2241b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora    } else {
22427fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        transport = bta_dm_search_cb.transport;
2243b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora    }
22447fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
22457fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
2246b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora    /* Reset transport state for next discovery */
2247b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora    bta_dm_search_cb.transport = BTA_TRANSPORT_UNKNOWN;
22485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2249b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora    APPL_TRACE_DEBUG("%s BDA:0x%02X%02X%02X%02X%02X%02X", __func__,
22505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        remote_bd_addr[0],remote_bd_addr[1],
22515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        remote_bd_addr[2],remote_bd_addr[3],
22525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        remote_bd_addr[4],remote_bd_addr[5]);
22535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bdcpy(bta_dm_search_cb.peer_bdaddr, remote_bd_addr);
22555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2256b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora    APPL_TRACE_DEBUG("%s name_discover_done = %d p_btm_inq_info 0x%x state = %d, transport=%d",
2257b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora                        __func__,
22585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        bta_dm_search_cb.name_discover_done,
2259ddbb20bfa9630bf678919b4d08a3e324bed38d15Nitin Arora                        bta_dm_search_cb.p_btm_inq_info,
2260b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora                        bta_dm_search_cb.state,
2261b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora                        transport);
2262b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora
226376356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    if (bta_dm_search_cb.p_btm_inq_info)
226476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    {
2265b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora        APPL_TRACE_DEBUG("%s appl_knows_rem_name %d", __func__,
2266b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora                            bta_dm_search_cb.p_btm_inq_info->appl_knows_rem_name);
22675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2268dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#if (defined(BLE_INCLUDED) && BLE_INCLUDED == TRUE)
2269ddbb20bfa9630bf678919b4d08a3e324bed38d15Nitin Arora    if((bta_dm_search_cb.p_btm_inq_info)
2270ddbb20bfa9630bf678919b4d08a3e324bed38d15Nitin Arora       && (bta_dm_search_cb.p_btm_inq_info->results.device_type == BT_DEVICE_TYPE_BLE)
2271ddbb20bfa9630bf678919b4d08a3e324bed38d15Nitin Arora       && (bta_dm_search_cb.state == BTA_DM_SEARCH_ACTIVE))
2272ddbb20bfa9630bf678919b4d08a3e324bed38d15Nitin Arora    {
2273ddbb20bfa9630bf678919b4d08a3e324bed38d15Nitin Arora        /* Do not perform RNR for LE devices at inquiry complete*/
2274ddbb20bfa9630bf678919b4d08a3e324bed38d15Nitin Arora        bta_dm_search_cb.name_discover_done = TRUE;
2275ddbb20bfa9630bf678919b4d08a3e324bed38d15Nitin Arora    }
2276dd339ab075d913334c84fe4c817c8ab09f5eda47Scott James Remnant#endif
22775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if name discovery is not done and application needs remote name */
22785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((!bta_dm_search_cb.name_discover_done)
22795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project       && (( bta_dm_search_cb.p_btm_inq_info == NULL )
22805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ||(bta_dm_search_cb.p_btm_inq_info && (!bta_dm_search_cb.p_btm_inq_info->appl_knows_rem_name))))
22815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2282b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora        if (bta_dm_read_remote_device_name(bta_dm_search_cb.peer_bdaddr, transport) == TRUE)
22835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return;
2284b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora
2285b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora        /* starting name discovery failed */
2286b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora        bta_dm_search_cb.name_discover_done = TRUE;
22875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
22885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if application wants to discover service */
22905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( bta_dm_search_cb.services )
22915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
22925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* initialize variables */
22935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.service_index      = 0;
22945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.services_found     = 0;
22955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.services_to_search = bta_dm_search_cb.services;
22965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
22975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.uuid_to_search     = bta_dm_search_cb.num_uuid;
22985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
22995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((bta_dm_search_cb.p_btm_inq_info != NULL) &&
230076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            bta_dm_search_cb.services != BTA_USER_SERVICE_MASK
23015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            &&(bta_dm_search_cb.sdp_search == FALSE))
23025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
23035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* check if EIR provides the information of supported services */
23045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_eir_search_services( &bta_dm_search_cb.p_btm_inq_info->results,
23055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &bta_dm_search_cb.services_to_search,
23065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &bta_dm_search_cb.services_found );
23075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
23085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* if seaching with EIR is not completed */
23105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_dm_search_cb.services_to_search)
23115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
23125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* check whether connection already exists to the device
23135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project               if connection exists, we don't have to wait for ACL
23145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project               link to go down to start search on next device */
23157fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            if (BTM_IsAclConnectionUp(bta_dm_search_cb.peer_bdaddr, BT_TRANSPORT_BR_EDR))
23165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_search_cb.wait_disc = FALSE;
23175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
23185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_search_cb.wait_disc = TRUE;
23195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE && (defined BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE))
23215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( bta_dm_search_cb.p_btm_inq_info )
23225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
2323b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora                APPL_TRACE_DEBUG("%s p_btm_inq_info 0x%x results.device_type 0x%x services_to_search 0x%x",
2324b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora                                    __func__,
23255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    bta_dm_search_cb.p_btm_inq_info,
23265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    bta_dm_search_cb.p_btm_inq_info->results.device_type,
2327b4365c55ccb2e985d00619c30dc14d5c156771b7Nitin Arora                                    bta_dm_search_cb.services_to_search);
23285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
2329e28055315f96c0d06e73a66a9bb06df85247b5a7Chaojing Sun
2330e28055315f96c0d06e73a66a9bb06df85247b5a7Chaojing Sun            if (transport == BT_TRANSPORT_LE)
23315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
23325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (bta_dm_search_cb.services_to_search & BTA_BLE_SERVICE_MASK)
23335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
23345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    //set the raw data buffer here
23355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    memset(g_disc_raw_data_buf, 0, sizeof(g_disc_raw_data_buf));
23365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.p_ble_rawdata = g_disc_raw_data_buf;
23375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.ble_raw_size = MAX_DISC_RAW_DATA_BUF;
23395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.ble_raw_used = 0;
23405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* start GATT for service discovery */
23425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btm_dm_start_gatt_discovery(bta_dm_search_cb.peer_bdaddr);
23435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    return;
23445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
23455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
23465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
23475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
23485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
234976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                bta_dm_search_cb.sdp_results = FALSE;
235076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                bta_dm_find_services(bta_dm_search_cb.peer_bdaddr);
235176356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                return;
23525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
23535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
23545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
23555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* name discovery and service discovery are done for this device */
23575fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_DM_MSG *p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG));
23585fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT;
23595fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    /* initialize the data structure - includes p_raw_data and raw_data_size */
23605fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    memset(&(p_msg->disc_result.result), 0, sizeof(tBTA_DM_DISC_RES));
23615fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->disc_result.result.disc_res.result = BTA_SUCCESS;
23625fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found;
23635fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bdcpy(p_msg->disc_result.result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr);
23645fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    strlcpy((char*)p_msg->disc_result.result.disc_res.bd_name,
23655fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            (char*)bta_dm_search_cb.peer_name, BD_NAME_LEN);
23665fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
23675fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_msg);
23685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
23695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
23715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_sdp_callback
23735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback from sdp with discovery status
23755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
23775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
23795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_sdp_callback (UINT16 sdp_status)
23805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
23815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23825fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_DM_SDP_RESULT *p_msg =
23835fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_DM_SDP_RESULT *)osi_malloc(sizeof(tBTA_DM_SDP_RESULT));
23845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23855fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->hdr.event = BTA_DM_SDP_RESULT_EVT;
23865fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->sdp_result = sdp_status;
23875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23885fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_msg);
23895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
23905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
23925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_inq_results_cb
23945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Inquiry results callback from BTM
23965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
23985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
24005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_inq_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir)
24015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
24025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEARCH     result;
24045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_INQ_INFO      *p_inq_info;
24055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16             service_class;
24065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bdcpy(result.inq_res.bd_addr, p_inq->remote_bd_addr);
24085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memcpy(result.inq_res.dev_class, p_inq->dev_class, DEV_CLASS_LEN);
24095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_COD_SERVICE_CLASS(service_class, p_inq->dev_class);
24105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result.inq_res.is_limited = (service_class & BTM_COD_SERVICE_LMTD_DISCOVER)?TRUE:FALSE;
24115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result.inq_res.rssi = p_inq->rssi;
24125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE)
24145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result.inq_res.ble_addr_type    = p_inq->ble_addr_type;
24155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result.inq_res.inq_result_type  = p_inq->inq_result_type;
24165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result.inq_res.device_type      = p_inq->device_type;
24177fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    result.inq_res.flag             = p_inq->flag;
24185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
24195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* application will parse EIR to find out remote device name */
24215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result.inq_res.p_eir = p_eir;
24225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if((p_inq_info = BTM_InqDbRead(p_inq->remote_bd_addr)) != NULL)
24245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
24255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* initialize remt_name_not_required to FALSE so that we get the name by default */
24265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        result.inq_res.remt_name_not_required = FALSE;
24275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
24295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_search_cb.p_search_cback)
24315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_search_cback(BTA_DM_INQ_RES_EVT, &result);
24325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_inq_info)
24345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
24355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* application indicates if it knows the remote name, inside the callback
24365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         copy that to the inquiry data base*/
24375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(result.inq_res.remt_name_not_required)
24385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_inq_info->appl_knows_rem_name = TRUE;
24395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
24415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
24445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
24475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_inq_cmpl_cb
24495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Inquiry complete callback from BTM
24515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
24535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
24555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_inq_cmpl_cb (void * p_result)
24565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
24575fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_DM_MSG *p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG));
24585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24595fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    APPL_TRACE_DEBUG("%s", __func__);
24605fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
24615fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    if (bta_dm_search_cb.cancel_pending == FALSE) {
24625fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->inq_cmpl.hdr.event = BTA_DM_INQUIRY_CMPL_EVT;
24635fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->inq_cmpl.num = ((tBTM_INQUIRY_CMPL *)p_result)->num_resp;
24645fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    } else {
246576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        bta_dm_search_cb.cancel_pending = FALSE;
246676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        bta_dm_search_cancel_notify(NULL);
24675fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT;
24685fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT;
246976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    }
24705fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
24715fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_msg);
24725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
24735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
24755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_service_search_remname_cback
24775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Remote name call back from BTM during service discovery
24795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
24815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
24825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
24835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_service_search_remname_cback (BD_ADDR bd_addr, DEV_CLASS dc, BD_NAME bd_name)
24845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
24855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_REMOTE_DEV_NAME    rem_name;
24865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS             btm_status;
24875cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(dc);
24885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2489e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_service_search_remname_cback name=<%s>", bd_name);
24905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if this is what we are looking for */
24925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!bdcmp( bta_dm_search_cb.peer_bdaddr, bd_addr))
24935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
24945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        rem_name.length = strlen((char*)bd_name);
24955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (rem_name.length > (BD_NAME_LEN-1))
24965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
24975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            rem_name.length = (BD_NAME_LEN-1);
24985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            rem_name.remote_bd_name[(BD_NAME_LEN-1)] = 0;
24995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
250066209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach        strlcpy((char*)rem_name.remote_bd_name, (char*)bd_name, BD_NAME_LEN);
25015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        rem_name.status = BTM_SUCCESS;
25025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_remname_cback(&rem_name);
25045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
25055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
25065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
25075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* get name of device */
25085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btm_status = BTM_ReadRemoteDeviceName (bta_dm_search_cb.peer_bdaddr,
25097fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                                (tBTM_CMPL_CB *) bta_dm_remname_cback,
25107fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                                BT_TRANSPORT_BR_EDR);
25115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ( btm_status == BTM_BUSY )
25125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
25135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* wait for next chance(notification of remote name discovery done) */
2514e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_DEBUG("bta_dm_service_search_remname_cback: BTM_ReadRemoteDeviceName is busy");
25155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
25165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else if ( btm_status != BTM_CMD_STARTED )
25175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
25185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* if failed to start getting remote name then continue */
2519e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_WARNING("bta_dm_service_search_remname_cback: BTM_ReadRemoteDeviceName returns 0x%02X", btm_status);
25205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            rem_name.length = 0;
25225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            rem_name.remote_bd_name[0] = 0;
25235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            rem_name.status = btm_status;
25245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_remname_cback(&rem_name);
25255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
25265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
25275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
25285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
25315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_remname_cback
25335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Remote name complete call back from BTM
25355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
25375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
25395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_remname_cback (tBTM_REMOTE_DEV_NAME *p_remote_name)
25405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2541e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_remname_cback len = %d name=<%s>", p_remote_name->length,
2542ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                      p_remote_name->remote_bd_name);
25435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* remote name discovery is done but it could be failed */
25455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.name_discover_done = TRUE;
254666209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach    strlcpy((char*)bta_dm_search_cb.peer_name,
254766209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach            (char*)p_remote_name->remote_bd_name, BD_NAME_LEN);
25485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SecDeleteRmtNameNotifyCallback(&bta_dm_service_search_remname_cback);
25507fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
2551ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
25527fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if (bta_dm_search_cb.transport == BT_TRANSPORT_LE )
25537fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    {
255476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        GAP_BleReadPeerPrefConnParams (bta_dm_search_cb.peer_bdaddr);
25557fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    }
2556ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
255776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
25585fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_DM_REM_NAME *p_msg =
25595fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_DM_REM_NAME *)osi_malloc(sizeof(tBTA_DM_REM_NAME));
25605fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bdcpy(p_msg->result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr);
25615fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    strlcpy((char*)p_msg->result.disc_res.bd_name,
25625fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            (char*)p_remote_name->remote_bd_name, BD_NAME_LEN);
25635fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->hdr.event = BTA_DM_REMT_NAME_EVT;
25645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25655fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_msg);
25665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
25675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
25695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_authorize_cback
25715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      cback requesting authorization
25735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
25755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
25775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_authorize_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name,
25785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT8 *service_name, UINT8 service_id, BOOLEAN is_originator)
25795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
25805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
25815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8       index = 1;
25825cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(service_name);
25835cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(is_originator);
25845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bdcpy(sec_event.authorize.bd_addr, bd_addr);
25865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memcpy(sec_event.authorize.dev_class, dev_class, DEV_CLASS_LEN);
258766209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach    strlcpy((char*)sec_event.authorize.bd_name, (char*)bd_name, BD_NAME_LEN);
25885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( defined(BTA_JV_INCLUDED) && BTA_JV_INCLUDED == TRUE )
25905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    sec_event.authorize.service = service_id;
25915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
25925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    while(index < BTA_MAX_SERVICE_ID)
25945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
25955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* get the BTA service id corresponding to BTM id */
25965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_service_id_to_btm_srv_id_lkup_tbl[index] == service_id)
25975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
25985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            sec_event.authorize.service = index;
25995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
26005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
26015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        index++;
26025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
26035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if supported service callback otherwise not authorized */
26065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_cb.p_sec_cback && (index < BTA_MAX_SERVICE_ID
26075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( defined(BTA_JV_INCLUDED) && BTA_JV_INCLUDED == TRUE )
26085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* pass through JV service ID */
26095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        || (service_id >= BTA_FIRST_JV_SERVICE_ID && service_id <= BTA_LAST_JV_SERVICE_ID)
26105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
26115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ))
26125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
26135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(BTA_DM_AUTHORIZE_EVT, &sec_event);
26145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTM_CMD_STARTED;
26155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
26165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
26175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
26185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTM_NOT_AUTHORIZED;
26195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
26205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
26215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
26275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_pinname_cback
26295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback requesting pin_key
26315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
26335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
26355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_pinname_cback (void *p_data)
26365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
26375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_REMOTE_DEV_NAME *p_result = (tBTM_REMOTE_DEV_NAME *)p_data;
26385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC           sec_event;
26395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32                bytes_to_copy;
26405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC_EVT       event = bta_dm_cb.pin_evt;
26415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (BTA_DM_SP_CFM_REQ_EVT == event)
26435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2644181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        /* Retrieved saved device class and bd_addr */
2645181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        bdcpy(sec_event.cfm_req.bd_addr, bta_dm_cb.pin_bd_addr);
2646181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        BTA_COPY_DEVICE_CLASS(sec_event.cfm_req.dev_class, bta_dm_cb.pin_dev_class);
26475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2648181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        if (p_result && p_result->status == BTM_SUCCESS)
2649181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        {
2650181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            bytes_to_copy = (p_result->length < (BD_NAME_LEN-1))
26515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ? p_result->length : (BD_NAME_LEN-1);
2652181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            memcpy(sec_event.cfm_req.bd_name, p_result->remote_bd_name, bytes_to_copy);
2653181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            sec_event.pin_req.bd_name[BD_NAME_LEN-1] = 0;
2654181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        }
2655181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        else    /* No name found */
2656181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            sec_event.cfm_req.bd_name[0] = 0;
26575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2658181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        sec_event.key_notif.passkey    = bta_dm_cb.num_val; /* get PIN code numeric number */
26595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* 1 additional event data fields for this event */
26615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.cfm_req.just_works = bta_dm_cb.just_works;
26625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
26635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
26645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2665181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        /* Retrieved saved device class and bd_addr */
2666181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        bdcpy(sec_event.pin_req.bd_addr, bta_dm_cb.pin_bd_addr);
2667181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        BTA_COPY_DEVICE_CLASS(sec_event.pin_req.dev_class, bta_dm_cb.pin_dev_class);
26685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2669181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        if (p_result && p_result->status == BTM_SUCCESS)
2670181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        {
2671181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            bytes_to_copy = (p_result->length < (BD_NAME_LEN-1))
26725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ? p_result->length : (BD_NAME_LEN-1);
2673181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            memcpy(sec_event.pin_req.bd_name, p_result->remote_bd_name, bytes_to_copy);
2674181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            sec_event.pin_req.bd_name[BD_NAME_LEN-1] = 0;
2675181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        }
2676181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        else    /* No name found */
2677181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            sec_event.pin_req.bd_name[0] = 0;
26785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2679181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        event = bta_dm_cb.pin_evt;
2680181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        sec_event.key_notif.passkey    = bta_dm_cb.num_val; /* get PIN code numeric number */
26815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
26825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( bta_dm_cb.p_sec_cback )
26845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(event, &sec_event);
26855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
26865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
26885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_pin_cback
26905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback requesting pin_key
26925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
26945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2696818d0f2afb10c75125b0df9ea2bce6108268a269Casper Bondestatic UINT8 bta_dm_pin_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name,
2697818d0f2afb10c75125b0df9ea2bce6108268a269Casper Bonde        BOOLEAN min_16_digit)
26985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
26995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
27005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!bta_dm_cb.p_sec_cback)
27025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTM_NOT_AUTHORIZED;
27035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* If the device name is not known, save bdaddr and devclass and initiate a name request */
27055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bd_name[0] == 0)
27065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
27075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.pin_evt = BTA_DM_PIN_REQ_EVT;
27085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy(bta_dm_cb.pin_bd_addr, bd_addr);
27095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, dev_class);
27107fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if ((BTM_ReadRemoteDeviceName(bd_addr, bta_dm_pinname_cback, BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED)
27115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return BTM_CMD_STARTED;
27125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2713e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_WARNING(" bta_dm_pin_cback() -> Failed to start Remote Name Request  ");
27145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
27155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bdcpy(sec_event.pin_req.bd_addr, bd_addr);
27175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_COPY_DEVICE_CLASS(sec_event.pin_req.dev_class, dev_class);
271866209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach    strlcpy((char*)sec_event.pin_req.bd_name, (char*)bd_name, BD_NAME_LEN);
2719818d0f2afb10c75125b0df9ea2bce6108268a269Casper Bonde    sec_event.pin_req.min_16_digit = min_16_digit;
27205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_cb.p_sec_cback(BTA_DM_PIN_REQ_EVT, &sec_event);
27225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return BTM_CMD_STARTED;
27235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
27245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
27265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_new_link_key_cback
27285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback from BTM to notify new link key
27305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
27325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
27345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8  bta_dm_new_link_key_cback(BD_ADDR bd_addr, DEV_CLASS dev_class,
27355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        BD_NAME bd_name, LINK_KEY key, UINT8 key_type)
27365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
27375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
27385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_AUTH_CMPL *p_auth_cmpl;
27395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8             event;
27405cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(dev_class);
27415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset (&sec_event, 0, sizeof(tBTA_DM_SEC));
27435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Not AMP Key type */
27455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (key_type != HCI_LKEY_TYPE_AMP_WIFI && key_type != HCI_LKEY_TYPE_AMP_UWB)
27465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
27475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        event = BTA_DM_AUTH_CMPL_EVT;
27485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_auth_cmpl = &sec_event.auth_cmpl;
27495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy(p_auth_cmpl->bd_addr, bd_addr);
27515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p_auth_cmpl->bd_name, bd_name, (BD_NAME_LEN-1));
27535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_auth_cmpl->bd_name[BD_NAME_LEN-1] = 0;
27545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_auth_cmpl->key_present = TRUE;
27565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_auth_cmpl->key_type = key_type;
27575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_auth_cmpl->success = TRUE;
27585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p_auth_cmpl->key, key, LINK_KEY_LEN);
27605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.auth_cmpl.fail_reason = HCI_SUCCESS;
27615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
276291fbc7e560bb9c9f344980a18983d32e51f0360aAndre Eisenbach#if BLE_INCLUDED == TRUE
2763e28055315f96c0d06e73a66a9bb06df85247b5a7Chaojing Sun        // Report the BR link key based on the BR/EDR address and type
2764e28055315f96c0d06e73a66a9bb06df85247b5a7Chaojing Sun        BTM_ReadDevInfo(bd_addr, &sec_event.auth_cmpl.dev_type, &sec_event.auth_cmpl.addr_type);
276591fbc7e560bb9c9f344980a18983d32e51f0360aAndre Eisenbach#endif
27665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_dm_cb.p_sec_cback)
27675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(event, &sec_event);
276871b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj
276971b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj        // Setting remove_dev_pending flag to FALSE, where it will avoid deleting the
277071b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj        // security device record when the ACL connection link goes down in case of
277171b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj        // reconnection.
277271b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj        if (bta_dm_cb.device_list.count)
277371b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj            bta_dm_reset_sec_dev_pending(p_auth_cmpl->bd_addr);
27745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
27755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
27765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2777e28055315f96c0d06e73a66a9bb06df85247b5a7Chaojing Sun        APPL_TRACE_WARNING("%s() Received AMP Key", __func__);
27785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
27795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return BTM_CMD_STARTED;
27815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
27825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
27855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_authentication_complete_cback
27875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Authentication complete callback from BTM
27895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
27915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
27935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_authentication_complete_cback(BD_ADDR bd_addr, DEV_CLASS dev_class,BD_NAME bd_name, int result)
27945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
27955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
27965cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(dev_class);
27975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(result != BTM_SUCCESS)
27995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
28005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(&sec_event, 0, sizeof(tBTA_DM_SEC));
28015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy(sec_event.auth_cmpl.bd_addr, bd_addr);
28025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(sec_event.auth_cmpl.bd_name, bd_name, (BD_NAME_LEN-1));
28045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.auth_cmpl.bd_name[BD_NAME_LEN-1] = 0;
28055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
280691fbc7e560bb9c9f344980a18983d32e51f0360aAndre Eisenbach#if BLE_INCLUDED == TRUE
2807e28055315f96c0d06e73a66a9bb06df85247b5a7Chaojing Sun        // Report the BR link key based on the BR/EDR address and type
2808e28055315f96c0d06e73a66a9bb06df85247b5a7Chaojing Sun        BTM_ReadDevInfo(bd_addr, &sec_event.auth_cmpl.dev_type, &sec_event.auth_cmpl.addr_type);
280991fbc7e560bb9c9f344980a18983d32e51f0360aAndre Eisenbach#endif
28105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.auth_cmpl.fail_reason = (UINT8)result;
2811e28055315f96c0d06e73a66a9bb06df85247b5a7Chaojing Sun
28125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_dm_cb.p_sec_cback)
28135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_AUTH_CMPL_EVT, &sec_event);
28146975b4d711142b885af479721cada448952c6b41Andre Eisenbach
2815e28055315f96c0d06e73a66a9bb06df85247b5a7Chaojing Sun        bta_dm_remove_sec_dev_entry(bd_addr);
28165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
28175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return BTM_SUCCESS;
28195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
28205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
28225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_sp_cback
28245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      simple pairing callback from BTM
28265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
28285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
28305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_sp_cback (tBTM_SP_EVT event, tBTM_SP_EVT_DATA *p_data)
28315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
28325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS status = BTM_CMD_STARTED;
28335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
28345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC_EVT pin_evt = BTA_DM_SP_KEY_NOTIF_EVT;
28355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2836e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_EVENT("bta_dm_sp_cback: %d", event);
28375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!bta_dm_cb.p_sec_cback)
28385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTM_NOT_AUTHORIZED;
28395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* TODO_SP */
28415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch(event)
28425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
28435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_IO_REQ_EVT:
28445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE)
28455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* translate auth_req */
28465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_co_io_req(p_data->io_req.bd_addr, &p_data->io_req.io_cap,
28475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            &p_data->io_req.oob_data, &p_data->io_req.auth_req, p_data->io_req.is_orig);
28485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2849e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_EVENT("io mitm: %d oob_data:%d", p_data->io_req.auth_req, p_data->io_req.oob_data);
28505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
28515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_IO_RSP_EVT:
28525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE)
28535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_co_io_rsp(p_data->io_rsp.bd_addr, p_data->io_rsp.io_cap,
28545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                         p_data->io_rsp.oob_data, p_data->io_rsp.auth_req );
28555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
28565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
28575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_CFM_REQ_EVT:
28595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        pin_evt = BTA_DM_SP_CFM_REQ_EVT;
28605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.just_works = sec_event.cfm_req.just_works = p_data->cfm_req.just_works;
28615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.cfm_req.loc_auth_req = p_data->cfm_req.loc_auth_req;
28625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.cfm_req.rmt_auth_req = p_data->cfm_req.rmt_auth_req;
28635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.cfm_req.loc_io_caps = p_data->cfm_req.loc_io_caps;
28645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.cfm_req.rmt_io_caps = p_data->cfm_req.rmt_io_caps;
286576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
28665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* continue to next case */
28675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE)
28685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Passkey entry mode, mobile device with output capability is very
28695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        unlikely to receive key request, so skip this event */
28705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /*case BTM_SP_KEY_REQ_EVT: */
28715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_KEY_NOTIF_EVT:
28725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
28737fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if(BTM_SP_CFM_REQ_EVT == event)
28747fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        {
28757fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta          /* Due to the switch case falling through below to BTM_SP_KEY_NOTIF_EVT,
28767fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             call remote name request using values from cfm_req */
28777fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta          if(p_data->cfm_req.bd_name[0] == 0)
28787fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta          {
28797fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta              bta_dm_cb.pin_evt = pin_evt;
28807fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta              bdcpy(bta_dm_cb.pin_bd_addr, p_data->cfm_req.bd_addr);
28817fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta              BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, p_data->cfm_req.dev_class);
28827fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta              if ((BTM_ReadRemoteDeviceName(p_data->cfm_req.bd_addr, bta_dm_pinname_cback,
28837fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                         BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED)
28847fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                  return BTM_CMD_STARTED;
2885e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati              APPL_TRACE_WARNING(" bta_dm_sp_cback() -> Failed to start Remote Name Request  ");
28867fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta          }
28877fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta          else
28887fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta          {
28897fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta              /* Due to the switch case falling through below to BTM_SP_KEY_NOTIF_EVT,
28907fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                 copy these values into key_notif from cfm_req */
28917fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta              bdcpy(sec_event.key_notif.bd_addr, p_data->cfm_req.bd_addr);
28927fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta              BTA_COPY_DEVICE_CLASS(sec_event.key_notif.dev_class, p_data->cfm_req.dev_class);
289366209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach              strlcpy((char*)sec_event.key_notif.bd_name,
289466209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach                      (char*)p_data->cfm_req.bd_name, BD_NAME_LEN);
28957fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta           }
28967fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        }
28977fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
28985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.num_val = sec_event.key_notif.passkey = p_data->key_notif.passkey;
28997fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if (BTM_SP_KEY_NOTIF_EVT == event)
29005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
29017fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            /* If the device name is not known, save bdaddr and devclass
29027fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta               and initiate a name request with values from key_notif */
29037fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            if(p_data->key_notif.bd_name[0] == 0)
29047fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            {
29057fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                bta_dm_cb.pin_evt = pin_evt;
29067fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                bdcpy(bta_dm_cb.pin_bd_addr, p_data->key_notif.bd_addr);
29077fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, p_data->key_notif.dev_class);
29087fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                if ((BTM_ReadRemoteDeviceName(p_data->key_notif.bd_addr, bta_dm_pinname_cback,
29097fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                         BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED)
29105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                return BTM_CMD_STARTED;
2911e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                APPL_TRACE_WARNING(" bta_dm_sp_cback() -> Failed to start Remote Name Request  ");
29127fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            }
29137fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            else
29147fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            {
29157fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                bdcpy(sec_event.key_notif.bd_addr, p_data->key_notif.bd_addr);
29167fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                BTA_COPY_DEVICE_CLASS(sec_event.key_notif.dev_class, p_data->key_notif.dev_class);
291766209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach                strlcpy((char*)sec_event.key_notif.bd_name,
291866209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach                        (char*)p_data->key_notif.bd_name, BD_NAME_LEN);
29197fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                sec_event.key_notif.bd_name[BD_NAME_LEN-1] = 0;
29207fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            }
29215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
29225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(pin_evt, &sec_event);
29245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
29265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_LOC_OOB_EVT:
29285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_co_loc_oob((BOOLEAN)(p_data->loc_oob.status == BTM_SUCCESS),
29295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_data->loc_oob.c, p_data->loc_oob.r);
29305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
29315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_RMT_OOB_EVT:
29335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* If the device name is not known, save bdaddr and devclass and initiate a name request */
29345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_data->rmt_oob.bd_name[0] == 0)
29355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
29367fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             bta_dm_cb.pin_evt = BTA_DM_SP_RMT_OOB_EVT;
29377fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             bdcpy(bta_dm_cb.pin_bd_addr, p_data->rmt_oob.bd_addr);
29387fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, p_data->rmt_oob.dev_class);
29397fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             if ((BTM_ReadRemoteDeviceName(p_data->rmt_oob.bd_addr, bta_dm_pinname_cback,
29407fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                      BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED)
29417fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             return BTM_CMD_STARTED;
2942e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati             APPL_TRACE_WARNING(" bta_dm_sp_cback() -> Failed to start Remote Name Request  ");
294366209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach        }
29445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
294566209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach        bdcpy(sec_event.rmt_oob.bd_addr, p_data->rmt_oob.bd_addr);
294666209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach        BTA_COPY_DEVICE_CLASS(sec_event.rmt_oob.dev_class, p_data->rmt_oob.dev_class);
294766209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach        strlcpy((char*)sec_event.rmt_oob.bd_name, (char*)p_data->rmt_oob.bd_name, BD_NAME_LEN);
29485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(BTA_DM_SP_RMT_OOB_EVT, &sec_event);
29505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_co_rmt_oob(p_data->rmt_oob.bd_addr);
29525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
2953175da70b6d60349dffdee3a9cd13182b293edf4cJakub Pawlowski
29545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_COMPLT_EVT:
29555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* do not report this event - handled by link_key_callback or auth_complete_callback */
29565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
29575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_KEYPRESS_EVT:
29595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&sec_event.key_press, &p_data->key_press, sizeof(tBTM_SP_KEYPRESS));
29605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(BTA_DM_SP_KEYPRESS_EVT, &sec_event);
29615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
29625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_UPGRADE_EVT:
29645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_co_lk_upgrade(p_data->upgrade.bd_addr, &p_data->upgrade.upgrade );
29655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
29665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    default:
29685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status = BTM_NOT_AUTHORIZED;
29695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
29705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2971e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_EVENT("dm status: %d", status);
29725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
29735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
29745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
29765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_local_name_cback
29785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback from btm after local name is read
29805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
29835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
29855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_local_name_cback(UINT8 *p_name)
29865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
29875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
29885cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_name);
29895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    sec_event.enable.status = BTA_SUCCESS;
29915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_cb.p_sec_cback)
29935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(BTA_DM_ENABLE_EVT, &sec_event);
29948d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta
29955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
29965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
29985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_bl_change_cback
30005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback from btm when acl connection goes up or down
30025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
30055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
30075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data)
30085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
30095fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_DM_ACL_CHANGE *p_msg =
30105fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_DM_ACL_CHANGE *)osi_malloc(sizeof(tBTA_DM_ACL_CHANGE));
30115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30125fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->event = p_data->event;
30135fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->is_new = FALSE;
30145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30155fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    switch (p_msg->event) {
30165fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    case BTM_BL_CONN_EVT:
30175fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->is_new = TRUE;
30185fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bdcpy(p_msg->bd_addr, p_data->conn.p_bda);
30197fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
30205fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->transport = p_data->conn.transport;
30215fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->handle = p_data->conn.handle;
30227fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
30235fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        break;
30245fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    case BTM_BL_DISCN_EVT:
30255fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bdcpy(p_msg->bd_addr, p_data->discn.p_bda);
30267fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
30275fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->transport = p_data->discn.transport;
30285fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->handle = p_data->discn.handle;
30297fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
30305fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        break;
30315fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    case BTM_BL_UPDATE_EVT:
30325fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->busy_level = p_data->update.busy_level;
30335fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->busy_level_flags = p_data->update.busy_level_flags;
30345fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        break;
30355fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    case BTM_BL_ROLE_CHG_EVT:
30365fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->new_role = p_data->role_chg.new_role;
30375fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->hci_status = p_data->role_chg.hci_status;
30385fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bdcpy(p_msg->bd_addr, p_data->role_chg.p_bda);
30395fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        break;
30405fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    case BTM_BL_COLLISION_EVT:
30415fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bdcpy(p_msg->bd_addr, p_data->conn.p_bda);
30425fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        break;
30435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
30445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30455fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->hdr.event = BTA_DM_ACL_CHANGE_EVT;
30465fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_msg);
30475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
304876356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
304976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan/*******************************************************************************
305076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan**
30515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_rs_cback
30525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Receives the role switch complete event
30545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns
30565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
30585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_rs_cback (tBTM_ROLE_SWITCH_CMPL *p1)
30595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
30605cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p1);
3061e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_WARNING("bta_dm_rs_cback:%d", bta_dm_cb.rs_event);
30625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_cb.rs_event == BTA_DM_API_SEARCH_EVT)
30635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
30645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.search_msg.rs_res = BTA_DM_RS_OK; /* do not care about the result for now */
30655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.rs_event = 0;
30665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_start((tBTA_DM_MSG *)&bta_dm_cb.search_msg);
30675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
30685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
30695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
30715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_check_av
30735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function checks if AV is active
30755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  if yes, make sure the AV link is master
30765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          BOOLEAN - TRUE, if switch is in progress
30785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
30805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN bta_dm_check_av(UINT16 event)
30815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
30829647e91549368fd44440dd13a854f403feb13ad9Mattias Agren    BOOLEAN avoid_roleswitch = FALSE;
30835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN switching = FALSE;
30845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
30855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_PEER_DEVICE *p_dev;
30865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30879647e91549368fd44440dd13a854f403feb13ad9Mattias Agren#if defined(BTA_DM_AVOID_A2DP_ROLESWITCH_ON_INQUIRY) && (BTA_DM_AVOID_A2DP_ROLESWITCH_ON_INQUIRY == TRUE)
30889647e91549368fd44440dd13a854f403feb13ad9Mattias Agren
30899647e91549368fd44440dd13a854f403feb13ad9Mattias Agren    /* avoid role switch upon inquiry if a2dp is actively streaming as it
30909647e91549368fd44440dd13a854f403feb13ad9Mattias Agren       introduces an audioglitch due to FW scheduling delays (unavoidable) */
30919647e91549368fd44440dd13a854f403feb13ad9Mattias Agren    if (event == BTA_DM_API_SEARCH_EVT)
30929647e91549368fd44440dd13a854f403feb13ad9Mattias Agren    {
30939647e91549368fd44440dd13a854f403feb13ad9Mattias Agren        avoid_roleswitch = TRUE;
30949647e91549368fd44440dd13a854f403feb13ad9Mattias Agren    }
30959647e91549368fd44440dd13a854f403feb13ad9Mattias Agren#endif
30969647e91549368fd44440dd13a854f403feb13ad9Mattias Agren
3097e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_WARNING("bta_dm_check_av:%d", bta_dm_cb.cur_av_count);
30985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_cb.cur_av_count)
30995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
31005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for(i=0; i<bta_dm_cb.device_list.count; i++)
31015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
31025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dev = &bta_dm_cb.device_list.peer_device[i];
3103e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_WARNING("[%d]: state:%d, info:x%x, avoid_rs %d",
31049647e91549368fd44440dd13a854f403feb13ad9Mattias Agren                                i, p_dev->conn_state, p_dev->info, avoid_roleswitch);
31059647e91549368fd44440dd13a854f403feb13ad9Mattias Agren            if((p_dev->conn_state == BTA_DM_CONNECTED) && (p_dev->info & BTA_DM_DI_AV_ACTIVE) &&
31069647e91549368fd44440dd13a854f403feb13ad9Mattias Agren               (avoid_roleswitch == FALSE))
31075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
31085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* make master and take away the role switch policy */
31095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if(BTM_CMD_STARTED == BTM_SwitchRole (p_dev->peer_bdaddr, HCI_ROLE_MASTER, (tBTM_CMPL_CB *)bta_dm_rs_cback))
31105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
31115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* the role switch command is actually sent */
31125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_cb.rs_event = event;
31135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    switching = TRUE;
31145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
31155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* else either already master or can not switch for some reasons */
31165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_policy_cback(BTA_SYS_PLCY_CLR, 0, HCI_ENABLE_MASTER_SLAVE_SWITCH, p_dev->peer_bdaddr);
31175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
31185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
31195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
31205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
31215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return switching;
31225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
31235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
31255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_acl_change
31275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process BTA_DM_ACL_CHANGE_EVT
31295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
31325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
31345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_acl_change(tBTA_DM_MSG *p_data)
31355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
31365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
31385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *p;
31395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC conn;
31405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN is_new = p_data->acl_change.is_new;
31415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BD_ADDR_PTR     p_bda = p_data->acl_change.bd_addr;
31425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN         need_policy_change = FALSE;
31435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN         issue_unpair_cb = FALSE;
31445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_PEER_DEVICE *p_dev;
31467fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    memset(&conn, 0, sizeof(tBTA_DM_SEC));
31475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch(p_data->acl_change.event)
31495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
31505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_BL_UPDATE_EVT:     /* busy level update */
31515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( bta_dm_cb.p_sec_cback )
31525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
31535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            conn.busy_level.level = p_data->acl_change.busy_level;
3154ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            conn.busy_level.level_flags = p_data->acl_change.busy_level_flags;
31555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_BUSY_LEVEL_EVT, &conn);
31565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
31575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
31585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_BL_ROLE_CHG_EVT:   /* role change event */
31605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dev = bta_dm_find_peer_device(p_bda);
31615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(p_dev)
31625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
3163e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_DEBUG("bta_dm_acl_change role chg info:x%x new_role:%d dev count:%d",
31645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dev->info, p_data->acl_change.new_role, bta_dm_cb.device_list.count);
31655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(p_dev->info & BTA_DM_DI_AV_ACTIVE)
31665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
31675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* there's AV activity on this link */
31685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if(p_data->acl_change.new_role == HCI_ROLE_SLAVE && bta_dm_cb.device_list.count > 1
31695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    && p_data->acl_change.hci_status == HCI_SUCCESS)
31705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
31715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* more than one connections and the AV connection is role switched to slave
31725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                     * switch it back to master and remove the switch policy */
31735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTM_SwitchRole(p_bda, BTM_ROLE_MASTER, NULL);
31745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    need_policy_change = TRUE;
31755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
317676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                else if (p_bta_dm_cfg->avoid_scatter && (p_data->acl_change.new_role == HCI_ROLE_MASTER))
31775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
31785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* if the link updated to be master include AV activities, remove the switch policy */
31795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    need_policy_change = TRUE;
31805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
31815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if(need_policy_change)
31835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
31845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_policy_cback(BTA_SYS_PLCY_CLR, 0, HCI_ENABLE_MASTER_SLAVE_SWITCH, p_dev->peer_bdaddr);
31855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
31865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
31875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
31885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
31895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* there's AV no activity on this link and role switch happened
31905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                 * check if AV is active
31915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                 * if so, make sure the AV link is master */
31925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_check_av(0);
31935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
31945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_sys_notify_role_chg(p_data->acl_change.bd_addr, p_data->acl_change.new_role, p_data->acl_change.hci_status);
31955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(conn.role_chg.bd_addr, p_bda);
31965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            conn.role_chg.new_role = (UINT8) p_data->acl_change.new_role;
31975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if( bta_dm_cb.p_sec_cback )
31987fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                bta_dm_cb.p_sec_cback(BTA_DM_ROLE_CHG_EVT, (tBTA_DM_SEC *)&conn);
31995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
32005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
32015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
32025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Collision report from Stack: Notify profiles */
32045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->acl_change.event == BTM_BL_COLLISION_EVT)
32055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
32065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_notify_collision (p_bda);
32075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
32085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
32095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(is_new)
32115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
32125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for(i=0; i<bta_dm_cb.device_list.count; i++)
32135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
32147fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            if (!bdcmp( bta_dm_cb.device_list.peer_device[i].peer_bdaddr, p_bda)
32157fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
32167fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                 && bta_dm_cb.device_list.peer_device[i].conn_handle == p_data->acl_change.handle
32177fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
32187fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                 )
32195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
32205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
32225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(i == bta_dm_cb.device_list.count)
32245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
322576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            if (bta_dm_cb.device_list.count < BTA_DM_NUM_PEER_DEVICE)
322676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            {
322776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                bdcpy(bta_dm_cb.device_list.peer_device[bta_dm_cb.device_list.count].peer_bdaddr, p_bda);
322876356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                bta_dm_cb.device_list.peer_device[bta_dm_cb.device_list.count].link_policy = bta_dm_cb.cur_policy;
322976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                bta_dm_cb.device_list.count++;
32307fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
323176356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                bta_dm_cb.device_list.peer_device[i].conn_handle = p_data->acl_change.handle;
323276356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                if (p_data->acl_change.transport == BT_TRANSPORT_LE)
323376356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                    bta_dm_cb.device_list.le_count++;
32347fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
323576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            } else {
323676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                APPL_TRACE_ERROR("%s max active connection reached, no resources", __func__);
323776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                return;
323876356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            }
32395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
32405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.device_list.peer_device[i].conn_state = BTA_DM_CONNECTED;
32425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.device_list.peer_device[i].pref_role = BTA_ANY_ROLE;
32435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy(conn.link_up.bd_addr, p_bda);
32445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.device_list.peer_device[i].info = BTA_DM_DI_NONE;
32457fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
32467fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        conn.link_up.link_type = p_data->acl_change.transport;
32477fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        bta_dm_cb.device_list.peer_device[i].transport = p_data->acl_change.transport;
32487fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
32497fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
32507fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if (((NULL != (p = BTM_ReadLocalFeatures ())) && HCI_SNIFF_SUB_RATE_SUPPORTED(p)) &&
32517fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            ((NULL != (p = BTM_ReadRemoteFeatures (p_bda))) && HCI_SNIFF_SUB_RATE_SUPPORTED(p)))
32525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
32535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* both local and remote devices support SSR */
32545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.device_list.peer_device[i].info = BTA_DM_DI_USE_SSR;
32555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
325676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        APPL_TRACE_WARNING("%s info: 0x%x", __func__, bta_dm_cb.device_list.peer_device[i].info);
32575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
325876356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        if (bta_dm_cb.p_sec_cback)
325976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            bta_dm_cb.p_sec_cback(BTA_DM_LINK_UP_EVT, (tBTA_DM_SEC *)&conn);
326076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    } else {
32615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for(i=0; i<bta_dm_cb.device_list.count; i++)
32625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
32637fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            if (bdcmp( bta_dm_cb.device_list.peer_device[i].peer_bdaddr, p_bda)
32647fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
32657fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                 ||bta_dm_cb.device_list.peer_device[i].transport != p_data->acl_change.transport
32667fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
32677fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta               )
32685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                continue;
32695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if( bta_dm_cb.device_list.peer_device[i].conn_state == BTA_DM_UNPAIRING )
32715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
32727fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                if (BTM_SecDeleteDevice(bta_dm_cb.device_list.peer_device[i].peer_bdaddr))
32737fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                    issue_unpair_cb = TRUE;
327476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
327576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                APPL_TRACE_DEBUG("%s: Unpairing: issue unpair CB = %d ",__FUNCTION__, issue_unpair_cb);
32765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
32775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3278ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            conn.link_down.is_removed = bta_dm_cb.device_list.peer_device[i].remove_dev_pending;
3279ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
32805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for(; i<bta_dm_cb.device_list.count ; i++)
32815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
32825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memcpy(&bta_dm_cb.device_list.peer_device[i], &bta_dm_cb.device_list.peer_device[i+1], sizeof(bta_dm_cb.device_list.peer_device[i]));
32835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
32845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
32855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
32865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_dm_cb.device_list.count)
32875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.device_list.count--;
32887fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
32897fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if ((p_data->acl_change.transport == BT_TRANSPORT_LE) &&
32907fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             (bta_dm_cb.device_list.le_count))
32917fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bta_dm_cb.device_list.le_count--;
32927fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        conn.link_down.link_type = p_data->acl_change.transport;
32937fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
32945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_dm_search_cb.wait_disc && !bdcmp(bta_dm_search_cb.peer_bdaddr, p_bda))
32965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
32975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_search_cb.wait_disc = FALSE;
32985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(bta_dm_search_cb.sdp_results)
33005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
3301e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                APPL_TRACE_EVENT(" timer stopped  ");
330278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                alarm_cancel(bta_dm_search_cb.search_timer);
33035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_discover_next_device();
33045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
33055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
33075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_dm_cb.disabling)
33095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
33105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(!BTM_GetNumAclLinks())
33115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
331276356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                /*
331376356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                 * Start a timer to make sure that the profiles
331476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                 * get the disconnect event.
331576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                 */
331678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                alarm_set_on_queue(bta_dm_cb.disable_timer,
331778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                   BTA_DM_DISABLE_CONN_DOWN_TIMER_MS,
331878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                   bta_dm_disable_conn_down_timer_cback, NULL,
331978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                   btu_bta_alarm_queue);
33205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
33215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3322ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (conn.link_down.is_removed)
3323ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
3324ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTM_SecDeleteDevice(p_bda);
3325ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
3326ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            /* need to remove all pending background connection */
3327ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_CancelOpen(0, p_bda, FALSE);
3328ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            /* remove all cached GATT information */
3329ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_Refresh(p_bda);
3330ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
3331ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta         }
33325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy(conn.link_down.bd_addr, p_bda);
33345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        conn.link_down.status = (UINT8) btm_get_acl_disc_reason_code();
33355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( bta_dm_cb.p_sec_cback )
33365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
33375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_LINK_DOWN_EVT, &conn);
33385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if( issue_unpair_cb )
33395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_cb.p_sec_cback(BTA_DM_DEV_UNPAIRED_EVT, &conn);
33405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
33415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
33425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_adjust_roles(TRUE);
33445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
33455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
33475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_disable_conn_down_timer_cback
33495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Sends disable event to application
33515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
33545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
335678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovstatic void bta_dm_disable_conn_down_timer_cback(UNUSED_ATTR void *data)
33575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
33585fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_SYS_HW_MSG *sys_enable_event =
33595fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_SYS_HW_MSG *)osi_malloc(sizeof(tBTA_SYS_HW_MSG));
33605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3361ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /* disable the power managment module */
3362ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bta_dm_disable_pm();
3363ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
33645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* register our callback to SYS HW manager */
33655fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_hw_register(BTA_SYS_HW_BLUETOOTH, bta_dm_sys_hw_cback );
33665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* send a message to BTA SYS */
33685fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    sys_enable_event->hdr.event = BTA_SYS_API_DISABLE_EVT;
33695fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    sys_enable_event->hw_module = BTA_SYS_HW_BLUETOOTH;
33705fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(sys_enable_event);
33715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_cb.disabling = FALSE;
33735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
33745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
33765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_rm_cback
33785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Role management callback from sys
33805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
33835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
33855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_rm_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, BD_ADDR peer_addr)
33865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
33875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 j;
33885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_PREF_ROLES role;
33895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_PEER_DEVICE *p_dev;
33905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_dev = bta_dm_find_peer_device(peer_addr);
33925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( status == BTA_SYS_CONN_OPEN)
33935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
33945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(p_dev)
33955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
33965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* Do not set to connected if we are in the middle of unpairing. When AV stream is
33975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             * started it fakes out a SYS_CONN_OPEN to potentially trigger a role switch command.
33985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             * But this should not be done if we are in the middle of unpairing.
33995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             */
34005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_dev->conn_state != BTA_DM_UNPAIRING)
34015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dev->conn_state = BTA_DM_CONNECTED;
34025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for(j=1; j<= p_bta_dm_rm_cfg[0].app_id; j++)
34045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
34055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if(((p_bta_dm_rm_cfg[j].app_id == app_id) || (p_bta_dm_rm_cfg[j].app_id == BTA_ALL_APP_ID))
34065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    && (p_bta_dm_rm_cfg[j].id == id))
34075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
34085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    role = p_bta_dm_rm_cfg[j].cfg;
34095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if(role > p_dev->pref_role )
34115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_dev->pref_role = role;
34125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
34135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
34145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
34155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
34165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
34175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if((BTA_ID_AV == id)||(BTA_ID_AVK ==id))
34195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
34205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( status == BTA_SYS_CONN_BUSY)
34215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
34225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(p_dev)
34235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dev->info |= BTA_DM_DI_AV_ACTIVE;
34245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* AV calls bta_sys_conn_open with the A2DP stream count as app_id */
34255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(BTA_ID_AV == id)
342676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                bta_dm_cb.cur_av_count = bta_dm_get_av_count();
34275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
34285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else if( status == BTA_SYS_CONN_IDLE)
34295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
34305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(p_dev)
34315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dev->info &= ~BTA_DM_DI_AV_ACTIVE;
343276356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
343376356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            /* get cur_av_count from connected services */
34345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(BTA_ID_AV == id)
343576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                bta_dm_cb.cur_av_count = bta_dm_get_av_count();
34365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3437e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_WARNING("bta_dm_rm_cback:%d, status:%d", bta_dm_cb.cur_av_count, status);
34385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
34395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
344077e70b4b2d0b4bf1fc319a705701c1726589b2fcMattias Agren    /* Don't adjust roles for each busy/idle state transition to avoid
344177e70b4b2d0b4bf1fc319a705701c1726589b2fcMattias Agren       excessive switch requests when individual profile busy/idle status
344277e70b4b2d0b4bf1fc319a705701c1726589b2fcMattias Agren       changes */
344377e70b4b2d0b4bf1fc319a705701c1726589b2fcMattias Agren    if ((status != BTA_SYS_CONN_BUSY) && (status != BTA_SYS_CONN_IDLE))
344477e70b4b2d0b4bf1fc319a705701c1726589b2fcMattias Agren        bta_dm_adjust_roles(FALSE);
34455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
34465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
34485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_delay_role_switch_cback
34505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback from btm to delay a role switch
34525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
34545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
345678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovstatic void bta_dm_delay_role_switch_cback(UNUSED_ATTR void *data)
34575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
345878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    APPL_TRACE_EVENT("%s: initiating Delayed RS", __func__);
345978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    bta_dm_adjust_roles(FALSE);
34605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
34615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
34635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
346471b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj** Function         bta_dm_reset_sec_dev_pending
346571b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj**
346671b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj** Description      Setting the remove device pending status to FALSE from
346771b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj**                  security device DB, when the link key notification
346871b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj**                  event comes.
346971b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj**
347071b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj** Returns          void
347171b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj**
347271b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj*******************************************************************************/
347371b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvarajstatic void bta_dm_reset_sec_dev_pending(BD_ADDR remote_bd_addr)
347471b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj{
347571b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj    for (size_t i = 0; i < bta_dm_cb.device_list.count; i++)
347671b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj    {
347771b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj        if (bdcmp(bta_dm_cb.device_list.peer_device[i].peer_bdaddr, remote_bd_addr) == 0)
347871b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj        {
347971b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj            bta_dm_cb.device_list.peer_device[i].remove_dev_pending = FALSE;
348071b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj            return;
348171b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj        }
348271b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj    }
348371b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj}
348471b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj
348571b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj/*******************************************************************************
348671b1a5d84577e5ffe51cbd99b442473465667fdfBalraj Selvaraj**
3487ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         bta_dm_remove_sec_dev_entry
3488ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
3489ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      Removes device entry from Security device DB if ACL connection with
3490ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  remtoe device does not exist, else schedule for dev entry removal upon
3491ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                     ACL close
3492ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
3493ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          void
3494ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
3495ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
3496ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_remove_sec_dev_entry(BD_ADDR remote_bd_addr)
3497ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
34987fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if ( BTM_IsAclConnectionUp(remote_bd_addr, BT_TRANSPORT_LE) ||
34997fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta         BTM_IsAclConnectionUp(remote_bd_addr, BT_TRANSPORT_BR_EDR))
3500ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
3501667e1fe3d7ccc6e2ce11781443f36fc10e47d9a3Andre Eisenbach        APPL_TRACE_DEBUG("%s ACL is not down. Schedule for  Dev Removal when ACL closes",
3502667e1fe3d7ccc6e2ce11781443f36fc10e47d9a3Andre Eisenbach                            __func__);
3503667e1fe3d7ccc6e2ce11781443f36fc10e47d9a3Andre Eisenbach        BTM_SecClearSecurityFlags (remote_bd_addr);
3504667e1fe3d7ccc6e2ce11781443f36fc10e47d9a3Andre Eisenbach        for (int i = 0; i < bta_dm_cb.device_list.count; i++)
3505ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
3506667e1fe3d7ccc6e2ce11781443f36fc10e47d9a3Andre Eisenbach            if (!bdcmp( bta_dm_cb.device_list.peer_device[i].peer_bdaddr, remote_bd_addr))
3507667e1fe3d7ccc6e2ce11781443f36fc10e47d9a3Andre Eisenbach            {
3508667e1fe3d7ccc6e2ce11781443f36fc10e47d9a3Andre Eisenbach                bta_dm_cb.device_list.peer_device[i].remove_dev_pending = TRUE;
3509ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                break;
3510667e1fe3d7ccc6e2ce11781443f36fc10e47d9a3Andre Eisenbach            }
3511ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
3512ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
3513ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    else
3514ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
3515ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        BTM_SecDeleteDevice (remote_bd_addr);
3516bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
3517bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu        /* need to remove all pending background connection */
3518bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu        BTA_GATTC_CancelOpen(0, remote_bd_addr, FALSE);
3519bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu        /* remove all cached GATT information */
3520bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu        BTA_GATTC_Refresh(remote_bd_addr);
3521bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu#endif
3522ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
3523ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
3524ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
35256975b4d711142b885af479721cada448952c6b41Andre Eisenbach
3526ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
3527ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
35285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_adjust_roles
35295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
35305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Adjust roles
35315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
35325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
35335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
35345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
35355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
35365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_adjust_roles(BOOLEAN delay_role_switch)
35375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
35385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
35405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN set_master_role = FALSE;
35417fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
35427fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT8 br_count = bta_dm_cb.device_list.count - bta_dm_cb.device_list.le_count;
35437fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#else
35447fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT8 br_count = bta_dm_cb.device_list.count;
35457fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
35467fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if (br_count)
35475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
35485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* the configuration is no scatternet
35505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         * or AV connection exists and there are more than one ACL link */
35517fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if ( (p_bta_dm_rm_cfg[0].cfg == BTA_DM_NO_SCATTERNET) ||
35527fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             (bta_dm_cb.cur_av_count && br_count > 1) )
35535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
35545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            L2CA_SetDesireRole (HCI_ROLE_MASTER);
35565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            set_master_role = TRUE;
35575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
35595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for(i=0; i<bta_dm_cb.device_list.count; i++)
35615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
35627fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            if (bta_dm_cb.device_list.peer_device[i].conn_state == BTA_DM_CONNECTED
35637fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
35647fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                && bta_dm_cb.device_list.peer_device[i].transport == BT_TRANSPORT_BR_EDR
35657fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
35667fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                )
35675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
35685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if(!set_master_role && (bta_dm_cb.device_list.peer_device[i].pref_role != BTA_ANY_ROLE)
35695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    && (p_bta_dm_rm_cfg[0].cfg == BTA_DM_PARTIAL_SCATTERNET))
35705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
35715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    L2CA_SetDesireRole (HCI_ROLE_MASTER);
35725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    set_master_role = TRUE;
35735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
35745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if((bta_dm_cb.device_list.peer_device[i].pref_role == BTA_MASTER_ROLE_ONLY)
35767f2eed693f328843ed912144ed6ffcab0f2e3e75Nitin Shivpure                    || (br_count > 1))
35775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
35785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* Initiating immediate role switch with certain remote devices
35805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                  has caused issues due to role  switch colliding with link encryption setup and
35815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                  causing encryption (and in turn the link) to fail .  These device . Firmware
35825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                  versions are stored in a blacklist and role switch with these devices are
35835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                  delayed to avoid the collision with link encryption setup */
35845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35856b24485cec18ea111b05bc23f61d9c3f6a6b8747tturney                    if (bta_dm_cb.device_list.peer_device[i].pref_role != BTA_SLAVE_ROLE_ONLY &&
35866b24485cec18ea111b05bc23f61d9c3f6a6b8747tturney                            delay_role_switch == FALSE)
35875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
35885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTM_SwitchRole (bta_dm_cb.device_list.peer_device[i].peer_bdaddr,
35895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        HCI_ROLE_MASTER, NULL);
35905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
35915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    else
35925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
359378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                        alarm_set_on_queue(bta_dm_cb.switch_delay_timer,
359478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                           BTA_DM_SWITCH_DELAY_TIMER_MS,
359578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                           bta_dm_delay_role_switch_cback,
359678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                           NULL, btu_bta_alarm_queue);
35975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
35985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
35995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
36015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(!set_master_role)
36045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
36055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            L2CA_SetDesireRole (L2CAP_DESIRED_LINK_ROLE);
36075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
36095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
36115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
36125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
36135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        L2CA_SetDesireRole (L2CAP_DESIRED_LINK_ROLE);
36145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
36155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
36185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
36205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
36215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_get_remname
36225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
36235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Returns a pointer to the remote name stored in the DM control
36245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  block if it exists, or from the BTM memory.
36255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
36265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          char * - Pointer to the remote device name
36275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
36285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_dm_get_remname(void)
36295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3630ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    char *p_name = (char *)bta_dm_search_cb.peer_name;
36315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char *p_temp;
36325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* If the name isn't already stored, try retrieving from BTM */
36345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (*p_name == '\0')
36355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((p_temp = BTM_SecReadDevName(bta_dm_search_cb.peer_bdaddr)) != NULL)
36365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_name = p_temp;
36375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return p_name;
36395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
36405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
36425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
36435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_bond_cancel_complete_cback
36445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
36455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Authentication complete callback from BTM
36465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
36475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
36485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
36495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
36505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_bond_cancel_complete_cback(tBTM_STATUS result)
36515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
36525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
36545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (result == BTM_SUCCESS)
36565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.bond_cancel_cmpl.result = BTA_SUCCESS;
36575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
36585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.bond_cancel_cmpl.result = BTA_FAILURE;
36595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_cb.p_sec_cback)
36615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
36625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(BTA_DM_BOND_CANCEL_CMPL_EVT, &sec_event);
36635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
36645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
36655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
36675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
36684ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra** Function         find_utf8_char_boundary
36694ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra**
36704ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra** Description      This function checks a UTF8 string |utf8str| starting at
36714ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra**                  |offset|, moving backwards and returns the offset of the
36724ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra**                  next valid UTF8 character boundary found.
36734ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra**
36744ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra** Returns          Offset of UTF8 character boundary
36754ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra**
36764ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra*******************************************************************************/
36774ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishrastatic size_t find_utf8_char_boundary(const char *utf8str, size_t offset)
36784ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra{
36794ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra    assert(utf8str);
36804ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra    assert(offset > 0);
36814ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra
36824ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra    while (--offset)
36834ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra    {
36844ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra        uint8_t ch = (uint8_t)utf8str[offset];
36854ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra        if ((ch & 0x80) == 0x00) // ASCII
36864ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra            return offset + 1;
36874ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra        if ((ch & 0xC0) == 0xC0) // Multi-byte sequence start
36884ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra            return offset;
36894ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra    }
36904ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra
36914ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra    return 0;
36924ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra}
36934ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra
36944ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra/*******************************************************************************
36954ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra**
36965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_set_eir
36975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
36985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function creates EIR tagged data and writes it to controller.
36995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
37015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
37035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_set_eir (char *local_name)
37045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
37055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    *p;
37065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    *p_length;
37075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_EIR_CANNED_UUID_LIST != TRUE)
37085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    *p_type;
37095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    max_num_uuid;
37105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0)
37115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    custom_uuid_idx;
37121e61ce1ae3fe8ef72443b30907f1cf8acae39674Chris Manton#endif  // BTA_EIR_SERVER_NUM_CUSTOM_UUID
37131e61ce1ae3fe8ef72443b30907f1cf8acae39674Chris Manton#endif  // BTA_EIR_CANNED_UUID_LIST
37145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_EIR_DEFAULT_FEC_REQUIRED == FALSE)
37155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    free_eir_length = HCI_EXT_INQ_RESPONSE_LEN;
37161e61ce1ae3fe8ef72443b30907f1cf8acae39674Chris Manton#else  // BTM_EIR_DEFAULT_FEC_REQUIRED
37175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    free_eir_length = HCI_DM5_PACKET_SIZE;
3718818d0f2afb10c75125b0df9ea2bce6108268a269Casper Bonde#endif  // BTM_EIR_DEFAULT_FEC_REQUIRED
37195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    num_uuid;
37205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    data_type;
37215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    local_name_len;
37225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* wait until complete to disable */
372478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    if (alarm_is_scheduled(bta_dm_cb.disable_timer))
37255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
37265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTA_EIR_CANNED_UUID_LIST != TRUE )
37285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if local name is not provided, get it from controller */
37295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( local_name == NULL )
37305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
37315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( BTM_ReadLocalDeviceName( &local_name ) != BTM_SUCCESS )
37325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
3733e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_ERROR("Fail to read local device name for EIR");
37345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
37355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
37361e61ce1ae3fe8ef72443b30907f1cf8acae39674Chris Manton#endif  // BTA_EIR_CANNED_UUID_LIST
37375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Allocate a buffer to hold HCI command */
3739abd70abb5e42c9431df94fe9d2c4a78a0d8d9af9Pavlin Radoslavov    BT_HDR *p_buf = (BT_HDR *)osi_malloc(BTM_CMD_BUF_SIZE);
37405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p = (UINT8 *)p_buf + BTM_HCI_EIR_OFFSET;
37415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p, 0x00, HCI_EXT_INQ_RESPONSE_LEN );
37435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3744e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("BTA is generating EIR");
37455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( local_name )
37475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        local_name_len = strlen( local_name );
37485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
37495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        local_name_len = 0;
37505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    data_type = BTM_EIR_COMPLETE_LOCAL_NAME_TYPE;
37525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if local name is longer than minimum length of shortened name */
37535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* check whether it needs to be shortened or not */
37545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( local_name_len > p_bta_dm_eir_cfg->bta_dm_eir_min_name_len )
37555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
37565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* get number of UUID 16-bit list */
37575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_EIR_CANNED_UUID_LIST == TRUE)
37585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len/LEN_UUID_16;
37591e61ce1ae3fe8ef72443b30907f1cf8acae39674Chris Manton#else  // BTA_EIR_CANNED_UUID_LIST
37605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        max_num_uuid = (free_eir_length - 2)/LEN_UUID_16;
37615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        data_type = BTM_GetEirSupportedServices( bta_dm_cb.eir_uuid, &p,
37625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                 max_num_uuid, &num_uuid );
37635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p = (UINT8 *)p_buf + BTM_HCI_EIR_OFFSET; /* reset p */
37641e61ce1ae3fe8ef72443b30907f1cf8acae39674Chris Manton#endif  // BTA_EIR_CANNED_UUID_LIST
37655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* if UUID doesn't fit remaing space, shorten local name */
37674ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra        if (local_name_len > (free_eir_length - 4 - num_uuid*LEN_UUID_16))
37685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
37694ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra            local_name_len = find_utf8_char_boundary(local_name,
37704ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra                p_bta_dm_eir_cfg->bta_dm_eir_min_name_len);
37714ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra            APPL_TRACE_WARNING("%s local name is shortened (%d)", __func__, local_name_len);
37725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            data_type = BTM_EIR_SHORTENED_LOCAL_NAME_TYPE;
37734ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra        } else {
37745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            data_type = BTM_EIR_COMPLETE_LOCAL_NAME_TYPE;
37754ed0f917b7ab6b46fe2335ac3003fb7c6f428523Matadeen Mishra        }
37765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
37775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM(p, local_name_len + 1);
37795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM(p, data_type);
37803aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach
37813aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach    if (local_name != NULL)
37823aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach    {
37833aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach        memcpy(p, local_name, local_name_len);
37843aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach        p += local_name_len;
37853aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach    }
37865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    free_eir_length -= local_name_len + 2;
37875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_EIR_CANNED_UUID_LIST == TRUE)
37895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if UUID list is provided as static data in configuration */
37905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(( p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len > 0 )
37915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        &&(p_bta_dm_eir_cfg->bta_dm_eir_uuid16))
37925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
37935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( free_eir_length > LEN_UUID_16 + 2)
37945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
37955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            free_eir_length -= 2;
37965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if( free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len)
37985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
37995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len / LEN_UUID_16;
38005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                data_type = BTM_EIR_COMPLETE_16BITS_UUID_TYPE;
38015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
38025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else /* not enough room for all UUIDs */
38035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
3804e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                APPL_TRACE_WARNING("BTA EIR: UUID 16-bit list is truncated");
38055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                num_uuid = free_eir_length / LEN_UUID_16;
38065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                data_type = BTM_EIR_MORE_16BITS_UUID_TYPE;
38075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
38085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            UINT8_TO_STREAM(p, num_uuid * LEN_UUID_16 + 1);
38095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            UINT8_TO_STREAM(p, data_type);
38105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_uuid16, num_uuid * LEN_UUID_16 );
38115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p += num_uuid * LEN_UUID_16;
38125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            free_eir_length -= num_uuid * LEN_UUID_16;
38135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
38145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
38155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else /* (BTA_EIR_CANNED_UUID_LIST == TRUE) */
38165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if UUID list is dynamic */
38175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( free_eir_length >= 2)
38185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
38195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_length = p++;
38205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_type   = p++;
38215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        num_uuid = 0;
38225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        max_num_uuid = (free_eir_length - 2)/LEN_UUID_16;
38245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        data_type = BTM_GetEirSupportedServices( bta_dm_cb.eir_uuid, &p, max_num_uuid, &num_uuid );
38255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( data_type == BTM_EIR_MORE_16BITS_UUID_TYPE )
38275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
3828e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_WARNING("BTA EIR: UUID 16-bit list is truncated");
38295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
38305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0)
38315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
38325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
38335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++)
38345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
38355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_16)
38365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
38375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ( num_uuid < max_num_uuid )
38385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
38395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        UINT16_TO_STREAM(p, bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid16);
38405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        num_uuid++;
38415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
38425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    else
38435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
38445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        data_type = BTM_EIR_MORE_16BITS_UUID_TYPE;
3845e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                        APPL_TRACE_WARNING("BTA EIR: UUID 16-bit list is truncated");
38465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
38475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
38485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
38495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
38505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
38515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */
38525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_16 + 1);
38545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p_type, data_type);
38555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        free_eir_length -= num_uuid * LEN_UUID_16 + 2;
38565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
38575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* (BTA_EIR_CANNED_UUID_LIST == TRUE) */
38585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTA_EIR_CANNED_UUID_LIST != TRUE )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0)
38605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Adding 32-bit UUID list */
38615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( free_eir_length >= 2)
38625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
38635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_length = p++;
38645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_type   = p++;
38655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        num_uuid = 0;
38665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        data_type = BTM_EIR_COMPLETE_32BITS_UUID_TYPE;
38675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        max_num_uuid = (free_eir_length - 2)/LEN_UUID_32;
38695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++)
38715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
38725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_32)
38735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
38745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if ( num_uuid < max_num_uuid )
38755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
38765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    UINT32_TO_STREAM(p, bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid32);
38775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    num_uuid++;
38785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
38795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
38805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
38815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    data_type = BTM_EIR_MORE_32BITS_UUID_TYPE;
3882e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    APPL_TRACE_WARNING("BTA EIR: UUID 32-bit list is truncated");
38835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
38845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
38855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
38865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
38875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_32 + 1);
38895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p_type, data_type);
38905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        free_eir_length -= num_uuid * LEN_UUID_32 + 2;
38915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
38925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Adding 128-bit UUID list */
38945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( free_eir_length >= 2)
38955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
38965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_length = p++;
38975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_type   = p++;
38985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        num_uuid = 0;
38995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        data_type = BTM_EIR_COMPLETE_128BITS_UUID_TYPE;
39005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        max_num_uuid = (free_eir_length - 2)/LEN_UUID_128;
39025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++)
39045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
39055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_128)
39065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
39075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if ( num_uuid < max_num_uuid )
39085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
39095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    ARRAY16_TO_STREAM(p, bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid128);
39105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    num_uuid++;
39115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
39125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
39135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
39145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    data_type = BTM_EIR_MORE_128BITS_UUID_TYPE;
3915e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    APPL_TRACE_WARNING("BTA EIR: UUID 128-bit list is truncated");
39165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
39175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
39185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
39195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
39205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_128 + 1);
39225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p_type, data_type);
39235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        free_eir_length -= num_uuid * LEN_UUID_128 + 2;
39245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
39255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* ( BTA_EIR_CANNED_UUID_LIST != TRUE )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */
39265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if Flags are provided in configuration */
39285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(( p_bta_dm_eir_cfg->bta_dm_eir_flag_len > 0 )
39295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project     &&( p_bta_dm_eir_cfg->bta_dm_eir_flags )
39305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project     &&( free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_flag_len + 2 ))
39315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
39325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p, p_bta_dm_eir_cfg->bta_dm_eir_flag_len + 1);
39335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p, BTM_EIR_FLAGS_TYPE);
39345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_flags,
39355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project               p_bta_dm_eir_cfg->bta_dm_eir_flag_len);
39365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += p_bta_dm_eir_cfg->bta_dm_eir_flag_len;
39375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        free_eir_length -= p_bta_dm_eir_cfg->bta_dm_eir_flag_len + 2;
39385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
39395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if Manufacturer Specific are provided in configuration */
39415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(( p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len > 0 )
39425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project     &&( p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec )
39435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project     &&( free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len + 2 ))
39445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
39455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_length = p;
39465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p, p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len + 1);
39485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p, BTM_EIR_MANUFACTURER_SPECIFIC_TYPE);
39495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec,
39505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project               p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len);
39515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len;
39525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        free_eir_length -= p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len + 2;
39535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
39555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
39565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
39575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_length = NULL;
39585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
39595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3960ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /* if Inquiry Tx Resp Power compiled */
3961ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if ((p_bta_dm_eir_cfg->bta_dm_eir_inq_tx_power) &&
3962ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        (free_eir_length >= 3))
3963ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
3964ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        UINT8_TO_STREAM(p, 2);      /* Length field */
3965ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        UINT8_TO_STREAM(p, BTM_EIR_TX_POWER_LEVEL_TYPE);
3966ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        UINT8_TO_STREAM(p, *(p_bta_dm_eir_cfg->bta_dm_eir_inq_tx_power));
3967ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        free_eir_length -= 3;
3968ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
3969ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
39705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( free_eir_length )
39715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p, 0); /* terminator of significant part */
39725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_WriteEIR( p_buf );
39745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
39765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
39785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_eir_search_services
39805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function searches services in received EIR
39825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
39845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
39865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_eir_search_services( tBTM_INQ_RESULTS  *p_result,
39875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        tBTA_SERVICE_MASK *p_services_to_search,
39885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        tBTA_SERVICE_MASK *p_services_found)
39895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
39905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_SERVICE_MASK       service_index = 0;
39915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_EIR_SEARCH_RESULT  result;
39925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3993e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("BTA searching services in EIR of BDA:0x%02X%02X%02X%02X%02X%02X",
39945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_result->remote_bd_addr[0],p_result->remote_bd_addr[1],
39955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_result->remote_bd_addr[2],p_result->remote_bd_addr[3],
39965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_result->remote_bd_addr[4],p_result->remote_bd_addr[5]);
39975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3998e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("    with services_to_search=0x%08X", *p_services_to_search);
39995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
40015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* always do GATT based service discovery by SDP instead of from EIR    */
40025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if GATT based service is also to be put in EIR, need to modify this  */
40035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    while (service_index < (BTA_MAX_SERVICE_ID - 1))
40045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
40055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    while(service_index < BTA_MAX_SERVICE_ID)
40065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
40075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
40085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( *p_services_to_search
40095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           & (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index)))
40105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
40115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            result = BTM_HasInquiryEirService( p_result,
40125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                               bta_service_id_to_uuid_lkup_tbl[service_index] );
40135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* Searching for HSP v1.2 only device */
40155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ((result != BTM_EIR_FOUND) &&
40165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                (bta_service_id_to_uuid_lkup_tbl[service_index] == UUID_SERVCLASS_HEADSET))
40175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
40185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                result = BTM_HasInquiryEirService (p_result, UUID_SERVCLASS_HEADSET_HS);
40195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
40205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if( result == BTM_EIR_FOUND )
40225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
40235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* If Plug and Play service record, need to check to see if Broadcom stack */
40245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* However, EIR data doesn't have EXT_BRCM_VERSION so just skip it */
40255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if( bta_service_id_to_uuid_lkup_tbl[service_index]
40265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    != UUID_SERVCLASS_PNP_INFORMATION )
40275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
40285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_services_found |=
40305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index));
40315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* remove the service from services to be searched  */
40325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_services_to_search &=
40335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       (tBTA_SERVICE_MASK)(~(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index)));
40345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
40355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
40365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if( result == BTM_EIR_NOT_FOUND )
40375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
40385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* remove the service from services to be searched  */
40395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                *p_services_to_search &=
40405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       (tBTA_SERVICE_MASK)(~(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index)));
40415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
40425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
40435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        service_index++;
40455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
40465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4047e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_ERROR("BTA EIR search result, services_to_search=0x%08X, services_found=0x%08X",
40485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        *p_services_to_search, *p_services_found);
40495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
40505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40511e61ce1ae3fe8ef72443b30907f1cf8acae39674Chris Manton#if (BTA_EIR_CANNED_UUID_LIST != TRUE)
40525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
40535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_eir_update_uuid
40555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function adds or removes service UUID in EIR database.
40575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
40595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
40615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_eir_update_uuid(UINT16 uuid16, BOOLEAN adding)
40625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
40635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if this UUID is not advertised in EIR */
40645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( !BTM_HasEirService( p_bta_dm_eir_cfg->uuid_mask, uuid16 ))
40655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
40665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( adding )
40685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4069e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_EVENT("Adding UUID=0x%04X into EIR", uuid16);
40705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_AddEirService( bta_dm_cb.eir_uuid, uuid16 );
40725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
40735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
40745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4075e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_EVENT("Removing UUID=0x%04X from EIR", uuid16);
40765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_RemoveEirService( bta_dm_cb.eir_uuid, uuid16 );
40785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
40795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_set_eir (NULL);
40815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4082e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_EVENT("bta_dm_eir_update_uuid UUID bit mask=0x%08X %08X",
40835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       bta_dm_cb.eir_uuid[1], bta_dm_cb.eir_uuid[0] );
40845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
40855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
40865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
40885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_enable_test_mode
40905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      enable test mode
40925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
40955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
40975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_enable_test_mode(tBTA_DM_MSG *p_data)
40985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
40995cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
41005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_EnableTestMode();
41015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
41025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
41045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_disable_test_mode
41065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      disable test mode
41085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
41115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
41135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_disable_test_mode(tBTA_DM_MSG *p_data)
41145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
41155cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
41165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_DeviceReset(NULL);
41175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
41185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
41205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_execute_callback
41225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Just execute a generic call back in the context of the BTU/BTA tack
41245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
41275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
41295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_execute_callback(tBTA_DM_MSG *p_data)
41305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
41315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* sanity check */
41325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_data->exec_cback.p_exec_cback == NULL)
41335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
41345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
41355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_data->exec_cback.p_exec_cback(p_data->exec_cback.p_param);
41385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
413976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
41405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
41415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_encrypt_cback
41435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      link encryption complete callback.
41455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         None
41475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
41497fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battavoid bta_dm_encrypt_cback(BD_ADDR bd_addr, tBT_TRANSPORT transport, void *p_ref_data, tBTM_STATUS result)
41505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
41515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_STATUS   bta_status = BTA_SUCCESS;
41527fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    tBTA_DM_ENCRYPT_CBACK *p_callback = NULL;
41537fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT8   i ;
41545cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_ref_data);
41555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41567fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    for (i=0; i<bta_dm_cb.device_list.count; i++)
41577fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    {
41587fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if (bdcmp( bta_dm_cb.device_list.peer_device[i].peer_bdaddr, bd_addr) == 0 &&
41597fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bta_dm_cb.device_list.peer_device[i].conn_state == BTA_DM_CONNECTED)
41607fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            break;
41617fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    }
41627fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
41637fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if (i < bta_dm_cb.device_list.count)
41647fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    {
41657fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        p_callback = bta_dm_cb.device_list.peer_device[i].p_encrypt_cback;
41667fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        bta_dm_cb.device_list.peer_device[i].p_encrypt_cback = NULL;
41677fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    }
41687fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
41695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (result)
41705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
41715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_SUCCESS:
41725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
41735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_WRONG_MODE:
41745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_status = BTA_WRONG_MODE;
41755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
41765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_NO_RESOURCES:
41775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_status = BTA_NO_RESOURCES;
41785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
41795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_BUSY:
41805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_status = BTA_BUSY;
41815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
41825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
41835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_status = BTA_FAILURE;
41845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
41855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4187e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_encrypt_cback status =%d p_callback=0x%x", bta_status, p_callback);
41885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_callback)
41905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
41917fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        (*p_callback)(bd_addr, transport, bta_status);
41925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
419476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
41955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
41965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_set_encryption
41985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function to encrypt the link
42005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
42025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
42035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
42045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_set_encryption (tBTA_DM_MSG *p_data)
42055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
42067fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT8 i ;
42075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4208e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_set_encryption"); //todo
42095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_data->set_encryption.p_callback)
42105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4211e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR("bta_dm_set_encryption callback is not provided");
42125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
42135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
42147fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    for (i=0; i<bta_dm_cb.device_list.count; i++)
42155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
42167fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if (bdcmp( bta_dm_cb.device_list.peer_device[i].peer_bdaddr, p_data->set_encryption.bd_addr) == 0 &&
42177fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bta_dm_cb.device_list.peer_device[i].conn_state == BTA_DM_CONNECTED)
42187fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            break;
42195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
42207fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if (i < bta_dm_cb.device_list.count)
42217fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    {
42227fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if (bta_dm_cb.device_list.peer_device[i].p_encrypt_cback)
42237fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        {
4224e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_ERROR("earlier enc was not done for same device");
42257fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            (*p_data->set_encryption.p_callback)(p_data->set_encryption.bd_addr,
422676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                                             p_data->set_encryption.transport,
422776356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                                             BTA_BUSY);
42287fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            return;
42297fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        }
42305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
423176356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        if (BTM_SetEncryption(p_data->set_encryption.bd_addr, p_data->set_encryption.transport,
4232f40b136e7b943d7e25224817fc47bb5b171479d5Andre Eisenbach                              bta_dm_encrypt_cback, NULL, p_data->set_encryption.sec_act)
42337fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                              == BTM_CMD_STARTED)
42347fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        {
42357fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bta_dm_cb.device_list.peer_device[i].p_encrypt_cback = p_data->set_encryption.p_callback;
42367fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        }
42377fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    }
42385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
42395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE)
4241ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
4242ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4243ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         bta_dm_observe_results_cb
4244ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4245ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      Callback for BLE Observe result
4246ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4247ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4248ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          void
4249ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4250ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
4251ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_observe_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir)
4252ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
4253ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta;
4254ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_DM_SEARCH     result;
4255ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTM_INQ_INFO      *p_inq_info;
4256e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_observe_results_cb")
4257ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4258ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(result.inq_res.bd_addr, p_inq->remote_bd_addr);
4259ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    result.inq_res.rssi = p_inq->rssi;
4260ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    result.inq_res.ble_addr_type    = p_inq->ble_addr_type;
4261ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    result.inq_res.inq_result_type  = p_inq->inq_result_type;
4262ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    result.inq_res.device_type      = p_inq->device_type;
426376356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    result.inq_res.flag             = p_inq->flag;
4264ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4265ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /* application will parse EIR to find out remote device name */
4266ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    result.inq_res.p_eir = p_eir;
4267ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4268ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if((p_inq_info = BTM_InqDbRead(p_inq->remote_bd_addr)) != NULL)
4269ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
4270ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* initialize remt_name_not_required to FALSE so that we get the name by default */
4271ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        result.inq_res.remt_name_not_required = FALSE;
4272ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
4273ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4274ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if(bta_dm_search_cb.p_scan_cback)
4275ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_RES_EVT, &result);
4276ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4277ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if(p_inq_info)
4278ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
4279ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* application indicates if it knows the remote name, inside the callback
4280ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta         copy that to the inquiry data base*/
4281ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if(result.inq_res.remt_name_not_required)
4282ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_inq_info->appl_knows_rem_name = TRUE;
4283ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
4284ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
4285ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4286ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
4287ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4288ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         bta_dm_observe_cmpl_cb
4289ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4290ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      Callback for BLE Observe complete
4291ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4292ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4293ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          void
4294ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4295ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
4296ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_observe_cmpl_cb (void * p_result)
4297ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
4298ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_DM_SEARCH  data;
4299ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4300e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_observe_cmpl_cb");
4301ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4302ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    data.inq_cmpl.num_resps = ((tBTM_INQUIRY_CMPL *)p_result)->num_resp;
4303ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (bta_dm_search_cb.p_scan_cback)
4304ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
4305ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_CMPL_EVT, &data);
4306ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
4307ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
4308ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
43095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (SMP_INCLUDED == TRUE)
43105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
43115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
43125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_ble_smp_cback
43135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
43145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback for BLE SMP
43155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
43165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
43175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
43185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
43195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
43205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_ble_smp_cback (tBTM_LE_EVT event, BD_ADDR bda, tBTM_LE_EVT_DATA *p_data)
43215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
43225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS status = BTM_SUCCESS;
43235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
4324444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    char *p_name = NULL;
43255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!bta_dm_cb.p_sec_cback)
43275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTM_NOT_AUTHORIZED;
43285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(&sec_event, 0, sizeof(tBTA_DM_SEC));
43305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (event)
43315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
43325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_LE_IO_REQ_EVT:
43335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE)
43345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_co_ble_io_req(bda,
43365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 &p_data->io_req.io_cap,
43375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 &p_data->io_req.oob_data,
43385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 &p_data->io_req.auth_req,
43395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 &p_data->io_req.max_key_size,
43405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 &p_data->io_req.init_keys,
43415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 &p_data->io_req.resp_keys);
43425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
4343e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_EVENT("io mitm: %d oob_data:%d", p_data->io_req.auth_req, p_data->io_req.oob_data);
43445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
43465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_LE_SEC_REQUEST_EVT:
43485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(sec_event.ble_req.bd_addr, bda);
4349181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            p_name = BTM_SecReadDevName(bda);
4350181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            if (p_name != NULL)
435166209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach                strlcpy((char*)sec_event.ble_req.bd_name, p_name, BD_NAME_LEN);
4352181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            else
4353181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach                sec_event.ble_req.bd_name[0] = 0;
43545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_BLE_SEC_REQ_EVT, &sec_event);
43555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
43565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_LE_KEY_NOTIF_EVT:
43585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(sec_event.key_notif.bd_addr, bda);
4359181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            p_name = BTM_SecReadDevName(bda);
4360181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            if (p_name != NULL)
436166209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach                strlcpy((char*)sec_event.key_notif.bd_name, p_name, BD_NAME_LEN);
4362181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            else
4363181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach                sec_event.key_notif.bd_name[0] = 0;
436476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            sec_event.key_notif.passkey = p_data->key_notif;
436576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            bta_dm_cb.p_sec_cback(BTA_DM_BLE_PASSKEY_NOTIF_EVT, &sec_event);
436676356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            break;
43675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_LE_KEY_REQ_EVT:
43695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(sec_event.ble_req.bd_addr, bda);
43705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_BLE_PASSKEY_REQ_EVT, &sec_event);
43715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
43725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_LE_OOB_REQ_EVT:
43745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(sec_event.ble_req.bd_addr, bda);
43755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_BLE_OOB_REQ_EVT, &sec_event);
43765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
43775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4378444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji        case BTM_LE_NC_REQ_EVT:
4379444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji            bdcpy(sec_event.key_notif.bd_addr, bda);
438066209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach            strlcpy((char*)sec_event.key_notif.bd_name, bta_dm_get_remname(), (BD_NAME_LEN));
4381444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji            sec_event.key_notif.passkey = p_data->key_notif;
4382444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji            bta_dm_cb.p_sec_cback(BTA_DM_BLE_NC_REQ_EVT, &sec_event);
4383444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji            break;
4384444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
43855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_LE_KEY_EVT:
43865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(sec_event.ble_key.bd_addr, bda);
43875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            sec_event.ble_key.key_type = p_data->key.key_type;
4388444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji            sec_event.ble_key.p_key_value = p_data->key.p_key_value;
43895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_BLE_KEY_EVT, &sec_event);
43905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
43915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_LE_COMPLT_EVT:
43935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(sec_event.auth_cmpl.bd_addr, bda);
439491fbc7e560bb9c9f344980a18983d32e51f0360aAndre Eisenbach#if BLE_INCLUDED == TRUE
4395e28055315f96c0d06e73a66a9bb06df85247b5a7Chaojing Sun            BTM_ReadDevInfo(bda, &sec_event.auth_cmpl.dev_type, &sec_event.auth_cmpl.addr_type);
439691fbc7e560bb9c9f344980a18983d32e51f0360aAndre Eisenbach#endif
4397181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            p_name = BTM_SecReadDevName(bda);
4398181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            if (p_name != NULL)
439966209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach                strlcpy((char*)sec_event.auth_cmpl.bd_name, p_name, (BD_NAME_LEN));
4400181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            else
4401181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach                sec_event.auth_cmpl.bd_name[0] = 0;
440266209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach
44035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->complt.reason != 0)
4404ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
44055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                sec_event.auth_cmpl.fail_reason = BTA_DM_AUTH_CONVERT_SMP_CODE(((UINT8)p_data->complt.reason));
4406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                /* delete this device entry from Sec Dev DB */
4407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                bta_dm_remove_sec_dev_entry (bda);
4408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
44095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
4410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
44115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                sec_event.auth_cmpl.success = TRUE;
4412a250280feff8c8fa28a2e33881a2cdf73540f753Andre Eisenbach                if (!p_data->complt.smp_over_br)
4413a250280feff8c8fa28a2e33881a2cdf73540f753Andre Eisenbach                    GATT_ConfigServiceChangeCCC(bda, TRUE, BT_TRANSPORT_LE);
4414ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
4415444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
44165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (bta_dm_cb.p_sec_cback)
44175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
44185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                //bta_dm_cb.p_sec_cback(BTA_DM_AUTH_CMPL_EVT, &sec_event);
44195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_cb.p_sec_cback(BTA_DM_BLE_AUTH_CMPL_EVT, &sec_event);
44205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
44215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
44225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
44245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = BTM_NOT_AUTHORIZED;
44255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
44265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
44275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
44285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
44295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif  /* SMP_INCLUDED == TRUE */
44305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
44325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_ble_id_key_cback
44345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback for BLE local ID keys
44365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
44395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
44415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_ble_id_key_cback (UINT8 key_type, tBTM_BLE_LOCAL_KEYS *p_key)
44425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
44435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   evt;
44445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC dm_key;
44455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (key_type)
44475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
44485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_BLE_KEY_TYPE_ID:
44495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_BLE_KEY_TYPE_ER:
44505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (bta_dm_cb.p_sec_cback)
44515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
44525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memcpy(&dm_key.ble_id_keys, p_key, sizeof(tBTM_BLE_LOCAL_KEYS));
44535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                evt = (key_type == BTM_BLE_KEY_TYPE_ID) ? BTA_DM_BLE_LOCAL_IR_EVT :\
44555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      BTA_DM_BLE_LOCAL_ER_EVT;
44565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_cb.p_sec_cback(evt, &dm_key);
44575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
44585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
44595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
4461e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_DEBUG("Unknown key type %d", key_type);
44625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
44635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
44645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
44655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
44675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
44695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_add_blekey
44715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function adds an BLE Key to an security database entry.
44735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  This function shall only be called AFTER BTA_DmAddBleDevice has been called.
44745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  It is normally called during host startup to restore all required information
44755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  stored in the NVRAM.
44765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
44785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
44805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_add_blekey (tBTA_DM_MSG *p_data)
44815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
44825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!BTM_SecAddBleKey (p_data->add_ble_key.bd_addr,
44835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           (tBTM_LE_KEY_VALUE *)&p_data->add_ble_key.blekey,
44845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           p_data->add_ble_key.key_type))
44855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4486e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR ("BTA_DM: Error adding BLE Key for device %08x%04x",
44875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           (p_data->add_ble_key.bd_addr[0]<<24)+(p_data->add_ble_key.bd_addr[1]<<16)+\
44885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           (p_data->add_ble_key.bd_addr[2]<<8)+p_data->add_ble_key.bd_addr[3],
44895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           (p_data->add_ble_key.bd_addr[4]<<8)+p_data->add_ble_key.bd_addr[5]);
44905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
44915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
44925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
44945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_add_ble_device
44965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function adds an BLE device to an security database entry.
44985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  It is normally called during host startup to restore all required information
44995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  stored in the NVRAM.
45005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
45025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_add_ble_device (tBTA_DM_MSG *p_data)
45055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
45065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!BTM_SecAddBleDevice (p_data->add_ble_device.bd_addr, NULL,
45075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->add_ble_device.dev_type  ,
45085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->add_ble_device.addr_type))
45095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4510e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR ("BTA_DM: Error adding BLE Device for device %08x%04x",
45115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           (p_data->add_ble_device.bd_addr[0]<<24)+(p_data->add_ble_device.bd_addr[1]<<16)+ \
45125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           (p_data->add_ble_device.bd_addr[2]<<8)+p_data->add_ble_device.bd_addr[3],
45135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           (p_data->add_ble_device.bd_addr[4]<<8)+p_data->add_ble_device.bd_addr[5]);
45145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
45155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_add_ble_device
45205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function adds an BLE device to an security database entry.
45225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  It is normally called during host startup to restore all required information
45235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  stored in the NVRAM.
45245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
45265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ble_passkey_reply (tBTA_DM_MSG *p_data)
45295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
45305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->pin_reply.accept)
45315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
45325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_BlePasskeyReply(p_data->ble_passkey_reply.bd_addr, BTM_SUCCESS, p_data->ble_passkey_reply.passkey);
45335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
45345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
45355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
45365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_BlePasskeyReply(p_data->ble_passkey_reply.bd_addr, BTM_NOT_AUTHORIZED, p_data->ble_passkey_reply.passkey);
45375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
45385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4543444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji** Function         bta_dm_ble_confirm_reply
4544444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji**
4545444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji** Description      This is response to SM numeric comparison request submitted
4546444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji**                  to application.
4547444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji**
4548444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji** Parameters:
4549444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji**
4550444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji*******************************************************************************/
4551444a8da807abaf5f9e813ce70c56a79160495fb3Satya Callojivoid bta_dm_ble_confirm_reply (tBTA_DM_MSG *p_data)
4552444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji{
4553444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    if (p_data->confirm.accept)
4554444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    {
4555444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji        BTM_BleConfirmReply(p_data->confirm.bd_addr, BTM_SUCCESS);
4556444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    }
4557444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    else
4558444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    {
4559444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji        BTM_BleConfirmReply(p_data->ble_passkey_reply.bd_addr, BTM_NOT_AUTHORIZED);
4560444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji    }
4561444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji}
4562444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji
4563444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji/*******************************************************************************
4564444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji**
45655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_security_grant
45665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function grant SMP security request access.
45685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
45705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_security_grant (tBTA_DM_MSG *p_data)
45735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
45745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SecurityGrant(p_data->ble_sec_grant.bd_addr, p_data->ble_sec_grant.res);
45755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_ble_set_bg_conn_type
45805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function set the BLE background connection type
45825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
45845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ble_set_bg_conn_type (tBTA_DM_MSG *p_data)
45875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
45885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_BleSetBgConnType(p_data->ble_set_bd_conn_type.bg_conn_type,
45895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                         p_data->ble_set_bd_conn_type.p_select_cback);
45905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_ble_set_conn_params
45955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function set the preferred connection parameters.
45975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
45995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ble_set_conn_params (tBTA_DM_MSG *p_data)
46025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
46035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_BleSetPrefConnParams(p_data->ble_set_conn_params.peer_bda,
46045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                             p_data->ble_set_conn_params.conn_int_min,
46055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                             p_data->ble_set_conn_params.conn_int_max,
46065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                             p_data->ble_set_conn_params.slave_latency,
46075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                             p_data->ble_set_conn_params.supervision_tout);
46085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
46095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
46115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
461276356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan** Function         bta_dm_ble_set_conn_scan_params
46135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4614979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach** Description      This function sets BLE scan parameters.
4615979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach**
4616979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach** Parameters:
4617979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach**
4618979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach*******************************************************************************/
4619979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbachvoid bta_dm_ble_set_scan_params(tBTA_DM_MSG *p_data)
4620979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach{
4621979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    BTM_BleSetScanParams(p_data->ble_set_scan_params.client_if,
4622979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                         p_data->ble_set_scan_params.scan_int,
4623979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                         p_data->ble_set_scan_params.scan_window,
4624979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                         p_data->ble_set_scan_params.scan_mode,
4625979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                         p_data->ble_set_scan_params.scan_param_setup_cback);
4626979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach}
4627979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
4628979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach/*******************************************************************************
4629979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach**
4630979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach** Function         bta_dm_ble_set_conn_scan_params
4631979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach**
46325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function set the preferred connection scan parameters.
46335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
46355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4637979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbachvoid bta_dm_ble_set_conn_scan_params (tBTA_DM_MSG *p_data)
46385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
463976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    BTM_BleSetConnScanParams(p_data->ble_set_conn_scan_params.scan_int,
464076356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan                             p_data->ble_set_conn_scan_params.scan_window);
46415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
46427fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta/*******************************************************************************
46437fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**
46447fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta** Function         bta_dm_ble_update_conn_params
46457fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**
46467fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta** Description      This function update LE connection parameters.
46477fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**
46487fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta** Parameters:
46497fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**
46507fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta*******************************************************************************/
46517fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battavoid bta_dm_ble_update_conn_params (tBTA_DM_MSG *p_data)
46527fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta{
46537fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if (!L2CA_UpdateBleConnParams(p_data->ble_update_conn_params.bd_addr,
46547fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                 p_data->ble_update_conn_params.min_int,
465516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                 p_data->ble_update_conn_params.max_int,
46567fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                 p_data->ble_update_conn_params.latency,
46577fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                 p_data->ble_update_conn_params.timeout))
46587fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    {
4659e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR("Update connection parameters failed!");
46607fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    }
46617fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta}
46625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46637fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_PRIVACY_SPT == TRUE
46647fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta/*******************************************************************************
46657fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**
46667fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta** Function         bta_dm_ble_config_local_privacy
46677fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**
46687fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta** Description      This function set the local device LE privacy settings.
46697fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**
46707fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta** Parameters:
46717fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**
46727fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta*******************************************************************************/
46737fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battavoid bta_dm_ble_config_local_privacy (tBTA_DM_MSG *p_data)
46747fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta{
46757fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    BTM_BleConfigPrivacy (p_data->ble_local_privacy.privacy_enable);
46767fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta}
46777fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
467876356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
4679ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
4680ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4681ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         bta_dm_ble_observe
4682ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4683ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function set the preferred connection scan parameters.
4684ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4685ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:
4686ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4687ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
4688ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid bta_dm_ble_observe (tBTA_DM_MSG *p_data)
4689ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
4690ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTM_STATUS status;
4691ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (p_data->ble_observe.start)
4692ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
4693ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /*Save the  callback to be called when a scan results are available */
4694ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_dm_search_cb.p_scan_cback = p_data->ble_observe.p_cback;
4695ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if ((status = BTM_BleObserve(TRUE, p_data->ble_observe.duration,
4696b6b14bb541e87d285bd21d43508872c6ca97affbPriti Aghera                            bta_dm_observe_results_cb, bta_dm_observe_cmpl_cb))!= BTM_CMD_STARTED)
4697ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
4698ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            tBTA_DM_SEARCH  data;
4699e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_WARNING(" %s BTM_BleObserve  failed. status %d",__FUNCTION__,status);
4700ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            data.inq_cmpl.num_resps = 0;
4701ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (bta_dm_search_cb.p_scan_cback)
4702ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
4703ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_CMPL_EVT, &data);
4704ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
4705ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
4706ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
4707ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    else
4708ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
4709ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_dm_search_cb.p_scan_cback = NULL;
4710ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        BTM_BleObserve(FALSE, 0, NULL,NULL );
4711ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
4712ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
47135c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach/*******************************************************************************
47145c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
4715979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach** Function         bta_dm_ble_set_adv_params
47165c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
47175c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Description      This function set the adv parameters.
47185c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
47195c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Parameters:
47205c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
47215c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach*******************************************************************************/
47225c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachvoid bta_dm_ble_set_adv_params (tBTA_DM_MSG *p_data)
47235c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
47245c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    BTM_BleSetAdvParams(p_data->ble_set_adv_params.adv_int_min,
47255c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                        p_data->ble_set_adv_params.adv_int_max,
47265c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                        p_data->ble_set_adv_params.p_dir_bda,
47275c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                        BTA_DM_BLE_ADV_CHNL_MAP);
47285c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
4729eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
47305c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach/*******************************************************************************
47315c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
47325c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Function         bta_dm_ble_set_adv_config
47335c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
47345c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Description      This function set the customized ADV data configuration
47355c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
47365c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Parameters:
47375c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
47385c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach*******************************************************************************/
47395c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachvoid bta_dm_ble_set_adv_config (tBTA_DM_MSG *p_data)
47405c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
4741a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    tBTA_STATUS status = BTA_FAILURE;
4742a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
4743a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    if (BTM_BleWriteAdvData(p_data->ble_set_adv_data.data_mask,
4744d4c103624b3d7672110abeb753ed79113ee48989Ian Coolidge                        (tBTM_BLE_ADV_DATA *)&p_data->ble_set_adv_data.adv_cfg) == BTM_SUCCESS)
4745a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    {
4746a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        status = BTA_SUCCESS;
4747a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    }
4748a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
4749a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    if (p_data->ble_set_adv_data.p_adv_data_cback)
4750a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        (*p_data->ble_set_adv_data.p_adv_data_cback)(status);
47515c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
47525c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
4753eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach/*******************************************************************************
4754eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach**
4755eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach** Function         bta_dm_ble_set_scan_rsp
4756eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach**
4757eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach** Description      This function set the customized ADV scan resp. configuration
4758eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach**
4759eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach** Parameters:
4760eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach**
4761eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach*******************************************************************************/
4762eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbachvoid bta_dm_ble_set_scan_rsp (tBTA_DM_MSG *p_data)
4763eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach{
4764a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    tBTA_STATUS status = BTA_FAILURE;
4765a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
4766a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    if(BTM_BleWriteScanRsp(p_data->ble_set_adv_data.data_mask,
4767d4c103624b3d7672110abeb753ed79113ee48989Ian Coolidge                        (tBTM_BLE_ADV_DATA *)&p_data->ble_set_adv_data.adv_cfg) == BTM_SUCCESS)
4768a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    {
4769a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        status = BTA_SUCCESS;
4770a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    }
4771a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
4772a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    if (p_data->ble_set_adv_data.p_adv_data_cback)
4773a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        (*p_data->ble_set_adv_data.p_adv_data_cback)(status);
4774eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach}
4775eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
4776eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach/*******************************************************************************
4777eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach**
4778636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera** Function         bta_dm_ble_set_data_length
4779636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera**
4780636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera** Description      This function set the maximum transmission packet size
4781636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera**
4782636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera** Parameters
4783636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera**
4784636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera*******************************************************************************/
4785636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Agheravoid bta_dm_ble_set_data_length(tBTA_DM_MSG *p_data)
4786636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera{
4787636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera    if (BTM_SetBleDataLength(p_data->ble_set_data_length.remote_bda,
4788636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera                        p_data->ble_set_data_length.tx_data_length) != BTM_SUCCESS)
4789636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera    {
4790636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera        APPL_TRACE_ERROR("%s failed", __FUNCTION__);
4791636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera    }
4792636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera}
4793636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera
4794636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera/*******************************************************************************
4795636d6714a4c08dd99d2147dcce05dc3892e804b4Priti Aghera**
4796eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach** Function         bta_dm_ble_broadcast
4797eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach**
4798eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach** Description      Starts or stops LE broadcasts
4799eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach**
4800eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach** Parameters:
4801eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach**
4802eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach*******************************************************************************/
4803eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbachvoid bta_dm_ble_broadcast (tBTA_DM_MSG *p_data)
4804eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach{
4805eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach    BTM_BleBroadcast(p_data->ble_observe.start);
4806eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach}
4807ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4808a6ce7751d84218c193eb90d390aef23217b1737eWei Wang/*******************************************************************************
4809a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
4810a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Function         bta_dm_ble_multi_adv_enb
4811a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
4812a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Description      This function enables a single advertising instance
4813a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
4814a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Parameters:
4815a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
4816a6ce7751d84218c193eb90d390aef23217b1737eWei Wang*******************************************************************************/
4817a6ce7751d84218c193eb90d390aef23217b1737eWei Wangvoid bta_dm_ble_multi_adv_enb(tBTA_DM_MSG *p_data)
4818a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
481916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_STATUS btm_status = 0;
482016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
482116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    bta_dm_cb.p_multi_adv_cback = p_data->ble_multi_adv_enb.p_cback;
482216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_BleMaxMultiAdvInstanceCount() > 0 && NULL != p_data->ble_multi_adv_enb.p_ref)
482316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
482416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleEnableAdvInstance((tBTM_BLE_ADV_PARAMS*)
482516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_multi_adv_enb.p_params,
482616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_multi_adv_enb.p_cback,
482716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_multi_adv_enb.p_ref);
482816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
482916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
483016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_CMD_STARTED != btm_status)
483116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
483216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        bta_dm_cb.p_multi_adv_cback(BTA_BLE_MULTI_ADV_ENB_EVT, 0xFF,
483316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                    p_data->ble_multi_adv_enb.p_ref, BTA_FAILURE);
483416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
4835a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
4836a6ce7751d84218c193eb90d390aef23217b1737eWei Wang/*******************************************************************************
4837a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
4838a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Function         bta_dm_ble_multi_adv_param_upd
4839a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
4840a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Description      This function updates multiple advertising instance parameters
4841a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
4842a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Parameters:
4843a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
4844a6ce7751d84218c193eb90d390aef23217b1737eWei Wang*******************************************************************************/
4845a6ce7751d84218c193eb90d390aef23217b1737eWei Wangvoid bta_dm_ble_multi_adv_upd_param(tBTA_DM_MSG *p_data)
4846a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
484716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_STATUS btm_status = 0;
484816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    void *p_ref = NULL;
484916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
485016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_BleMaxMultiAdvInstanceCount() > 0 && p_data->ble_multi_adv_param.inst_id > 0
485116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        && p_data->ble_multi_adv_param.inst_id < BTM_BleMaxMultiAdvInstanceCount())
485216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
485316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleUpdateAdvInstParam(p_data->ble_multi_adv_param.inst_id,
485416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                         (tBTM_BLE_ADV_PARAMS*)p_data->ble_multi_adv_param.p_params);
485516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
485616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
485716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_CMD_STARTED != btm_status)
485816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
485916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham       p_ref = btm_ble_multi_adv_get_ref(p_data->ble_multi_adv_param.inst_id);
486016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham       bta_dm_cb.p_multi_adv_cback(BTA_BLE_MULTI_ADV_PARAM_EVT,
486116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                   p_data->ble_multi_adv_param.inst_id, p_ref, BTA_FAILURE);
486216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
4863a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
4864a6ce7751d84218c193eb90d390aef23217b1737eWei Wang/*******************************************************************************
4865a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
4866a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Function         bta_dm_ble_multi_adv_data
4867a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
4868a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Description      This function write multiple advertising instance adv data
4869a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**                  or scan response data
4870a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
4871a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Parameters:
4872a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
4873a6ce7751d84218c193eb90d390aef23217b1737eWei Wang*******************************************************************************/
4874a6ce7751d84218c193eb90d390aef23217b1737eWei Wangvoid bta_dm_ble_multi_adv_data(tBTA_DM_MSG *p_data)
4875a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
487616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_STATUS btm_status = 0;
487716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    void *p_ref = NULL;
487816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
487916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_BleMaxMultiAdvInstanceCount() > 0 && p_data->ble_multi_adv_data.inst_id > 0
488016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        && p_data->ble_multi_adv_data.inst_id < BTM_BleMaxMultiAdvInstanceCount())
488116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
488216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleCfgAdvInstData(p_data->ble_multi_adv_data.inst_id,
488316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                        p_data->ble_multi_adv_data.is_scan_rsp,
488416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                        p_data->ble_multi_adv_data.data_mask,
4885d4c103624b3d7672110abeb753ed79113ee48989Ian Coolidge                        (tBTM_BLE_ADV_DATA*)&p_data->ble_multi_adv_data.data);
488616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
488716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
488816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_CMD_STARTED != btm_status)
488916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
489016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham       p_ref = btm_ble_multi_adv_get_ref(p_data->ble_multi_adv_data.inst_id);
489116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham       bta_dm_cb.p_multi_adv_cback(BTA_BLE_MULTI_ADV_DATA_EVT,
489216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                   p_data->ble_multi_adv_data.inst_id, p_ref, BTA_FAILURE);
489316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
489416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
4895a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
4896a6ce7751d84218c193eb90d390aef23217b1737eWei Wang/*******************************************************************************
4897a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
4898a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Function         btm_dm_ble_multi_adv_disable
4899a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
4900a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Description      This function disable a single adv instance
4901a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
4902a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Parameters:
4903a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
4904a6ce7751d84218c193eb90d390aef23217b1737eWei Wang*******************************************************************************/
4905a6ce7751d84218c193eb90d390aef23217b1737eWei Wangvoid btm_dm_ble_multi_adv_disable(tBTA_DM_MSG *p_data)
4906a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
490716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_STATUS btm_status = 0;
490816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    void *p_ref = NULL;
490916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
491016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_BleMaxMultiAdvInstanceCount() > 0 && p_data->ble_multi_adv_disable.inst_id > 0
491116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        && p_data->ble_multi_adv_disable.inst_id < BTM_BleMaxMultiAdvInstanceCount())
491216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
491316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleDisableAdvInstance(p_data->ble_multi_adv_disable.inst_id);
491416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
491516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
491616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_CMD_STARTED != btm_status)
491716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
491816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham       p_ref = btm_ble_multi_adv_get_ref(p_data->ble_multi_adv_disable.inst_id);
491916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham       bta_dm_cb.p_multi_adv_cback(BTA_BLE_MULTI_ADV_DISABLE_EVT,
492016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                   p_data->ble_multi_adv_disable.inst_id, p_ref, BTA_FAILURE);
492116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
4922a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
4923a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
4924c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji/*******************************************************************************
4925c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
4926c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Function         bta_dm_ble_setup_storage
4927c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
4928c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Description      This function configures up the storage parameters for ADV batch scanning
4929c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
4930c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Parameters:
4931c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
4932c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji*******************************************************************************/
4933c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojivoid bta_dm_ble_setup_storage (tBTA_DM_MSG *p_data)
4934c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
4935c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    tBTM_STATUS btm_status = 0;
493616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_BLE_VSC_CB cmn_ble_vsc_cb;
4937c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
493816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb);
493916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
494016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (0 != cmn_ble_vsc_cb.tot_scan_results_strg)
494116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
494216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleSetStorageConfig(p_data->ble_set_storage.batch_scan_full_max,
494316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                             p_data->ble_set_storage.batch_scan_trunc_max,
494416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                             p_data->ble_set_storage.batch_scan_notify_threshold,
494516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                             p_data->ble_set_storage.p_setup_cback,
494616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                             p_data->ble_set_storage.p_thres_cback,
494716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                             p_data->ble_set_storage.p_read_rep_cback,
494816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                             p_data->ble_set_storage.ref_value);
494916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
4950c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
4951c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    if(BTM_CMD_STARTED != btm_status)
4952c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji       bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_CFG_STRG_EVT, p_data->ble_set_storage.ref_value,
4953c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                             btm_status);
4954c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
4955c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
4956c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji/*******************************************************************************
4957c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
4958c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Function         bta_dm_ble_enable_batch_scan
4959c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
4960c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Description      This function sets up the parameters and enables batch scan
4961c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
4962c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Parameters:
4963c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
4964c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji*******************************************************************************/
4965c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojivoid bta_dm_ble_enable_batch_scan (tBTA_DM_MSG *p_data)
4966c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
4967c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    tBTM_STATUS btm_status = 0;
496816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_BLE_VSC_CB cmn_ble_vsc_cb;
496916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
497016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb);
4971c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
497216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (0 != cmn_ble_vsc_cb.tot_scan_results_strg)
497316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
497416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleEnableBatchScan(p_data->ble_enable_scan.scan_mode,
497516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_enable_scan.scan_int,
497616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_enable_scan.scan_window,
497716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_enable_scan.discard_rule,
497816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_enable_scan.addr_type,
497916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_enable_scan.ref_value);
498016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
4981c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
4982c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    if(BTM_CMD_STARTED != btm_status)
4983c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji       bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_ENABLE_EVT, p_data->ble_enable_scan.ref_value,
498416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                             btm_status);
4985c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
4986c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
4987c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji/*******************************************************************************
4988c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
4989c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Function         bta_dm_ble_disable_batch_scan
4990c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
4991c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Description      This function disables the batch scan
4992c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
4993c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Parameters:
4994c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
4995c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji*******************************************************************************/
4996c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojivoid bta_dm_ble_disable_batch_scan (tBTA_DM_MSG *p_data)
4997c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
4998c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    UNUSED(p_data);
4999c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    tBTM_STATUS btm_status = 0;
500016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_BLE_VSC_CB cmn_ble_vsc_cb;
5001c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
500216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb);
500316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
500416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (0 != cmn_ble_vsc_cb.tot_scan_results_strg)
500516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
500616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleDisableBatchScan(p_data->ble_disable_scan.ref_value);
500716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
5008c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
5009c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    if(BTM_CMD_STARTED != btm_status)
5010c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji       bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_DISABLE_EVT, p_data->ble_enable_scan.ref_value,
5011c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                             btm_status);
5012c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
5013c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
5014c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji/*******************************************************************************
5015c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5016c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Function         bta_dm_ble_read_scan_reports
5017c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5018c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Description      This function reads the batch scan reports
5019c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5020c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Parameters:
5021c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5022c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji*******************************************************************************/
5023c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojivoid bta_dm_ble_read_scan_reports(tBTA_DM_MSG *p_data)
5024c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
5025c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    tBTM_STATUS btm_status = 0;
502616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_BLE_VSC_CB cmn_ble_vsc_cb;
5027c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
502816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb);
502916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
503016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (0 != cmn_ble_vsc_cb.tot_scan_results_strg)
503116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
503216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleReadScanReports(p_data->ble_read_reports.scan_type,
503316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_read_reports.ref_value);
503416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
5035c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
5036c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    if(BTM_CMD_STARTED != btm_status)
5037c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji       bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_READ_REPTS_EVT, p_data->ble_enable_scan.ref_value,
5038c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                             btm_status);
5039c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
5040c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
5041c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji/*******************************************************************************
5042c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
50431acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji** Function         bta_dm_ble_track_advertiser
50441acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji**
50451acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji** Description      This function tracks the specific advertiser
50461acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji**
50471acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji** Parameters:
50481acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji**
50491acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji*******************************************************************************/
50501acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Callojivoid bta_dm_ble_track_advertiser(tBTA_DM_MSG *p_data)
50511acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji{
505216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_STATUS btm_status = 0;
505316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    BD_ADDR bda;
505416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    memset(&bda, 0 , sizeof(BD_ADDR));
505516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_BLE_VSC_CB cmn_ble_vsc_cb;
5056f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    tBTA_DM_BLE_TRACK_ADV_DATA track_adv_data;
505716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
505816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb);
505916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
506016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (0 != cmn_ble_vsc_cb.tot_scan_results_strg)
506116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
5062f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji        btm_status = BTM_BleTrackAdvertiser((tBTM_BLE_TRACK_ADV_CBACK *)
5063f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji                                            p_data->ble_track_advert.p_track_adv_cback,
506416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_track_advert.ref_value);
506516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
506616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
506716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_CMD_STARTED != btm_status)
5068f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    {
5069f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji        memset(&track_adv_data, 0, sizeof(tBTA_DM_BLE_TRACK_ADV_DATA));
5070f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji        track_adv_data.advertiser_info_present = NO_ADV_INFO_PRESENT; /* Indicates failure */
5071f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji        track_adv_data.client_if = (UINT8)p_data->ble_track_advert.ref_value;
5072f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji        p_data->ble_track_advert.p_track_adv_cback(&track_adv_data);
5073f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    }
50741acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji}
50751acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji
50761acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji/*******************************************************************************
50771acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji**
5078c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Function         bta_ble_scan_setup_cb
5079c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5080c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Description      Handle the setup callback from BTM layer and forward it to app layer
5081c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5082c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Parameters:
5083c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5084c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji*******************************************************************************/
5085c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojivoid bta_ble_scan_setup_cb(tBTM_BLE_BATCH_SCAN_EVT evt, tBTM_BLE_REF_VALUE ref_value,
5086c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                  tBTM_STATUS status)
5087c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
5088c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    tBTA_BLE_BATCH_SCAN_EVT bta_evt = 0;
5089c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
5090f1dba910daa5f0ce9ca89f840bb7e6269f07af1dSatya Calloji    APPL_TRACE_DEBUG("bta_ble_scan_setup_cb : evt: %d, ref_value: %d, status:%d", evt,
5091f1dba910daa5f0ce9ca89f840bb7e6269f07af1dSatya Calloji                      ref_value, status);
5092f1dba910daa5f0ce9ca89f840bb7e6269f07af1dSatya Calloji
5093c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    switch(evt)
5094c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    {
5095c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTM_BLE_BATCH_SCAN_ENABLE_EVT:
5096c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           bta_evt = BTA_BLE_BATCH_SCAN_ENB_EVT;
5097c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
5098c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTM_BLE_BATCH_SCAN_CFG_STRG_EVT:
5099c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           bta_evt = BTA_BLE_BATCH_SCAN_CFG_STRG_EVT;
5100c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
5101c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTM_BLE_BATCH_SCAN_DISABLE_EVT:
5102c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            bta_evt = BTA_BLE_BATCH_SCAN_DIS_EVT;
5103c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
5104c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTM_BLE_BATCH_SCAN_PARAM_EVT:
5105c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            bta_evt = BTA_BLE_BATCH_SCAN_PARAM_EVT;
5106c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
5107c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        default:
5108c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
5109c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    }
5110c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
5111c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    if(NULL != bta_dm_cb.p_setup_cback)
5112c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji       bta_dm_cb.p_setup_cback(bta_evt, ref_value, status);
5113c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
5114c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
51151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
51161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji#if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE
51171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji/*******************************************************************************
51181a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
51191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Function         bta_ble_scan_pf_cmpl
51201a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
51211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Description      ADV payload filtering operation complete callback
51221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
51231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
51241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Returns         TRUE if handled, otherwise FALSE.
51251a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
51261a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji*******************************************************************************/
51271a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_ble_scan_cfg_cmpl(tBTM_BLE_PF_ACTION action, tBTM_BLE_SCAN_COND_OP cfg_op,
51281a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 tBTM_BLE_PF_AVBL_SPACE avbl_space, tBTM_STATUS status,
51291a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 tBTM_BLE_REF_VALUE ref_value)
51301a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
51311a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_STATUS st = (status == BTM_SUCCESS) ? BTA_SUCCESS: BTA_FAILURE;
51321a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
51331a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    APPL_TRACE_DEBUG("bta_ble_scan_cfg_cmpl: %d, %d, %d, %d", action, cfg_op, avbl_space, status);
51341a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
51351a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if(bta_dm_cb.p_scan_filt_cfg_cback)
51361a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji       bta_dm_cb.p_scan_filt_cfg_cback(action, cfg_op, avbl_space, st, ref_value);
51371a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
51381a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
51391a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji/*******************************************************************************
51401a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
51411a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Function         bta_dm_cfg_filter_cond
51421a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
51431a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Description      This function configure adv payload filtering condition
51441a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
51451a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Parameters:
51461a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
51471a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji*******************************************************************************/
51481a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojivoid bta_dm_cfg_filter_cond (tBTA_DM_MSG *p_data)
51491a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
51501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTM_STATUS st = BTM_MODE_UNSUPPORTED;
51511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_STATUS status = BTA_FAILURE;
51521a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
51531a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTM_BLE_VSC_CB cmn_vsc_cb;
51541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
51551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    APPL_TRACE_DEBUG("bta_dm_cfg_filter_cond");
51561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTM_BleGetVendorCapabilities(&cmn_vsc_cb);
51571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if(0 != cmn_vsc_cb.filter_support)
51581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    {
51591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        if ((st = BTM_BleCfgFilterCondition(p_data->ble_cfg_filter_cond.action,
51601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                            p_data->ble_cfg_filter_cond.cond_type,
51611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                            (tBTM_BLE_PF_FILT_INDEX)p_data->ble_cfg_filter_cond.filt_index,
51621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                            (tBTM_BLE_PF_COND_PARAM *)p_data->ble_cfg_filter_cond.p_cond_param,
51631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                            bta_ble_scan_cfg_cmpl, p_data->ble_cfg_filter_cond.ref_value))
51641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                == BTM_CMD_STARTED)
51651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
51661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            bta_dm_cb.p_scan_filt_cfg_cback = p_data->ble_cfg_filter_cond.p_filt_cfg_cback;
51671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            return;
51681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
51691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    }
51701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
51711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if (p_data->ble_cfg_filter_cond.p_filt_cfg_cback)
51721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        p_data->ble_cfg_filter_cond.p_filt_cfg_cback(BTA_DM_BLE_PF_CONFIG_EVT,
51731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                            p_data->ble_cfg_filter_cond.cond_type, 0, status,
51741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                            p_data->ble_cfg_filter_cond.ref_value);
51751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return;
51761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
51771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
51781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji/*******************************************************************************
51791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
51801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Function         bta_dm_enable_scan_filter
51811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
51821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Description      This function enable/disable adv payload filtering condition
51831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
51841a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Parameters:
51851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
51861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji*******************************************************************************/
51871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojivoid bta_dm_enable_scan_filter(tBTA_DM_MSG *p_data)
51881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
51891a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTM_STATUS st = BTM_MODE_UNSUPPORTED;
51901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_STATUS status = BTA_FAILURE;
51911a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
51921a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTM_BLE_VSC_CB cmn_vsc_cb;
51931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    APPL_TRACE_DEBUG("bta_dm_enable_scan_filter");
51941a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTM_BleGetVendorCapabilities(&cmn_vsc_cb);
51951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
51961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if(0 != cmn_vsc_cb.filter_support)
51971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    {
51981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        if((st = BTM_BleEnableDisableFilterFeature(p_data->ble_enable_scan_filt.action,
51991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   p_data->ble_enable_scan_filt.p_filt_status_cback,
52001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   (tBTM_BLE_REF_VALUE)p_data->ble_enable_scan_filt.ref_value)) == BTM_CMD_STARTED)
52011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        bta_dm_cb.p_scan_filt_status_cback = p_data->ble_enable_scan_filt.p_filt_status_cback;
52021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        return;
52031a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    }
52041a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
52051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if (p_data->ble_enable_scan_filt.p_filt_status_cback)
52061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        p_data->ble_enable_scan_filt.p_filt_status_cback (BTA_DM_BLE_PF_ENABLE_EVT,
52071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                            p_data->ble_enable_scan_filt.ref_value, status);
52081a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
52091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
5210e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
52111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji/*******************************************************************************
52121a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
52131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Function         bta_dm_scan_filter_param_setup
52141a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
52151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Description      This function sets up scan filter params
52161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
52171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Parameters:
52181a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
52191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji*******************************************************************************/
52201a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojivoid bta_dm_scan_filter_param_setup (tBTA_DM_MSG *p_data)
52211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
52221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTM_STATUS st = BTM_MODE_UNSUPPORTED;
52231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_STATUS status = BTA_FAILURE;
52241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
52251a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTM_BLE_VSC_CB cmn_vsc_cb;
52261a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
52271a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    APPL_TRACE_DEBUG("bta_dm_scan_filter_param_setup");
52281a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTM_BleGetVendorCapabilities(&cmn_vsc_cb);
52291a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if(0 != cmn_vsc_cb.filter_support)
52301a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    {
52311a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        if ((st = BTM_BleAdvFilterParamSetup(p_data->ble_scan_filt_param_setup.action,
52321a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   p_data->ble_scan_filt_param_setup.filt_index,
5233643aea51738e1a472f29354f02b7d941df488a4aNitin Arora                  (tBTM_BLE_PF_FILT_PARAMS *)&p_data->ble_scan_filt_param_setup.filt_params,
52341a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   p_data->ble_scan_filt_param_setup.p_target,
52351a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   p_data->ble_scan_filt_param_setup.p_filt_param_cback,
52361a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   p_data->ble_scan_filt_param_setup.ref_value)) == BTM_CMD_STARTED)
52371a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
52381a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            bta_dm_cb.p_scan_filt_param_cback = p_data->ble_scan_filt_param_setup.p_filt_param_cback;
52391a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            return;
52401a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
52411a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    }
52421a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
52431a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if (p_data->ble_scan_filt_param_setup.p_filt_param_cback)
52441a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        p_data->ble_scan_filt_param_setup.p_filt_param_cback (BTA_DM_BLE_PF_ENABLE_EVT, 0,
52451a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                        p_data->ble_scan_filt_param_setup.ref_value, status);
52461a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
52471a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return;
52481a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
52491a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji#endif
52501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
525116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham/*******************************************************************************
525216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
525316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham** Function         bta_ble_enable_scan_cmpl
525416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
525516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham** Description      ADV payload filtering enable / disable complete callback
525616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
525716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
525816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham** Returns          None
525916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
526016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham*******************************************************************************/
526116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadhamstatic void bta_ble_energy_info_cmpl(tBTM_BLE_TX_TIME_MS tx_time,
526216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                        tBTM_BLE_RX_TIME_MS rx_time,
526316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                        tBTM_BLE_IDLE_TIME_MS idle_time,
526416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                        tBTM_BLE_ENERGY_USED  energy_used,
526516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                        tBTM_STATUS status)
526616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham{
526716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTA_STATUS st = (status == BTM_SUCCESS) ? BTA_SUCCESS: BTA_FAILURE;
526816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTA_DM_CONTRL_STATE ctrl_state = 0;
526916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
527016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (BTA_SUCCESS == st)
527116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham       ctrl_state = bta_dm_pm_obtain_controller_state();
527216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
527316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (bta_dm_cb.p_energy_info_cback)
527416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        bta_dm_cb.p_energy_info_cback(tx_time, rx_time, idle_time, energy_used, ctrl_state, st);
527516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham}
527616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
527716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham/*******************************************************************************
527816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
527916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham** Function         bta_dm_ble_get_energy_info
528016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
528116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham** Description      This function obtains the energy info
528216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
528316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham** Parameters:
528416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
528516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham*******************************************************************************/
528616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadhamvoid bta_dm_ble_get_energy_info(tBTA_DM_MSG *p_data)
528716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham{
528816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_STATUS btm_status = 0;
528916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
529016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    bta_dm_cb.p_energy_info_cback = p_data->ble_energy_info.p_energy_info_cback;
529116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    btm_status = BTM_BleGetEnergyInfo(bta_ble_energy_info_cmpl);
529216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (BTM_CMD_STARTED != btm_status)
529316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        bta_ble_energy_info_cmpl(0, 0, 0, 0, btm_status);
529416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham}
529516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
52965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ((defined BTA_GATT_INCLUDED) &&  (BTA_GATT_INCLUDED == TRUE))
52976975b4d711142b885af479721cada448952c6b41Andre Eisenbach#ifndef BTA_DM_GATT_CLOSE_DELAY_TOUT
52986975b4d711142b885af479721cada448952c6b41Andre Eisenbach#define BTA_DM_GATT_CLOSE_DELAY_TOUT    1000
52996975b4d711142b885af479721cada448952c6b41Andre Eisenbach#endif
53005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
53015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
53025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5303e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach** Function         bta_dm_gattc_register
5304e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach**
5305e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach** Description      Register with GATTC in DM if BLE is needed.
5306e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach**
5307e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach**
5308e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach** Returns          void
5309e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach**
5310e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach*******************************************************************************/
5311e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbachstatic void bta_dm_gattc_register(void)
5312e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach{
5313e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    tBT_UUID                app_uuid = {LEN_UUID_128,{0}};
5314e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach
5315e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    if (bta_dm_search_cb.client_if == BTA_GATTS_INVALID_IF)
5316e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    {
5317e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        memset (&app_uuid.uu.uuid128, 0x87, LEN_UUID_128);
5318e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        BTA_GATTC_AppRegister(&app_uuid, bta_dm_gattc_callback);
5319e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    }
5320e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach}
5321e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach
5322e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach/*******************************************************************************
5323e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach**
53245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btm_dm_start_disc_gatt_services
53255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
53265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function starts a GATT service search request.
53275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
53285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
53295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
53305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
53315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btm_dm_start_disc_gatt_services (UINT16 conn_id)
53325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
53335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBT_UUID    *p_uuid = bta_dm_search_cb.p_srvc_uuid +
53345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search;
53355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
53365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_uuid = bta_dm_search_cb.p_srvc_uuid +
53375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search;
53385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
53395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* always search for all services */
53405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_GATTC_ServiceSearchRequest(conn_id, p_uuid);
53415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
53425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
53435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
53445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
53455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_gatt_disc_result
53465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
53475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function process the GATT service search result.
53485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
53495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
53505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
53515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
53525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_gatt_disc_result(tBTA_GATT_ID service_id)
53535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
53545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEARCH   result;
53555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
53565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /*
53575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        * This logic will not work for gatt case.  We are checking against the bluetooth profiles here
53585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        * just copy the GATTID in raw data field and send it across.
53595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        */
53605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
53615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
53625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( bta_dm_search_cb.ble_raw_used + sizeof(tBTA_GATT_ID) < bta_dm_search_cb.ble_raw_size )
53635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
536476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan        APPL_TRACE_DEBUG("ADDING BLE SERVICE uuid=0x%x, ble_ptr = 0x%x, ble_raw_used = 0x%x",
536576356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            service_id.uuid.uu.uuid16,bta_dm_search_cb.p_ble_rawdata,bta_dm_search_cb.ble_raw_used);
53665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5367ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach        if(bta_dm_search_cb.p_ble_rawdata)
5368ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach        {
5369ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach            memcpy((bta_dm_search_cb.p_ble_rawdata + bta_dm_search_cb.ble_raw_used), &service_id,
5370ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach                   sizeof(service_id) );
53715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5372ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach            bta_dm_search_cb.ble_raw_used += sizeof(service_id);
5373ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach        }
5374ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach        else
5375ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach        {
5376e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_ERROR("p_ble_rawdata is NULL");
5377ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach        }
53785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
53795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
53805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
53815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5382e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR("%s out of room to accomodate more service ids ble_raw_size = %d ble_raw_used = %d", __FUNCTION__,bta_dm_search_cb.ble_raw_size, bta_dm_search_cb.ble_raw_used );
53835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
53845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5385db554581079863974af8e1289646f5deea6fc044Marie Janssen    LOG_INFO(LOG_TAG, "%s service_id_uuid_len=%d ", __func__, service_id.uuid.len);
53865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE)
53875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
53885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
53895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* send result back to app now, one by one */
53905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy (result.disc_ble_res.bd_addr, bta_dm_search_cb.peer_bdaddr);
539166209db61f94128f19ec09891ed99b1d10e4ebfbAndre Eisenbach        strlcpy((char*)result.disc_ble_res.bd_name, bta_dm_get_remname(), BD_NAME_LEN);
53925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&result.disc_ble_res.service, &service_id.uuid, sizeof(tBT_UUID));
53935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
53945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result);
53955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
53965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
53975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
53985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
53995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
54005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_gatt_disc_complete
54015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
54025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function process the GATT service search complete.
54035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
54045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
54055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
54065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
54075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_gatt_disc_complete(UINT16 conn_id, tBTA_GATT_STATUS status)
54085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
54095fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    APPL_TRACE_DEBUG("%s conn_id = %d", __func__, conn_id);
54105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
54115fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    if (bta_dm_search_cb.uuid_to_search > 0)
54125fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bta_dm_search_cb.uuid_to_search --;
54135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
54145fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    if (status == BTA_GATT_OK && bta_dm_search_cb.uuid_to_search > 0) {
54155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btm_dm_start_disc_gatt_services(conn_id);
54165fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    } else {
54175fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        tBTA_DM_MSG *p_msg = (tBTA_DM_MSG *)osi_malloc(sizeof(tBTA_DM_MSG));
54185fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
54195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.uuid_to_search = 0;
54205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
54215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* no more services to be discovered */
54225fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT;
54235fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->disc_result.result.disc_res.result = (status == BTA_GATT_OK) ? BTA_SUCCESS :BTA_FAILURE;
54245fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        APPL_TRACE_DEBUG("%s service found: 0x%08x", __func__,
54255fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                         bta_dm_search_cb.services_found);
54265fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found;
54275fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->disc_result.result.disc_res.num_uuids = 0;
54285fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->disc_result.result.disc_res.p_uuid_list = NULL;
54295fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bdcpy(p_msg->disc_result.result.disc_res.bd_addr,
54305fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov              bta_dm_search_cb.peer_bdaddr);
54315fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        strlcpy((char*)p_msg->disc_result.result.disc_res.bd_name,
54325fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                bta_dm_get_remname(), BD_NAME_LEN);
54335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
54345fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        p_msg->disc_result.result.disc_res.device_type |= BT_DEVICE_TYPE_BLE;
54355fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        if (bta_dm_search_cb.ble_raw_used > 0) {
54365fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            p_msg->disc_result.result.disc_res.p_raw_data =
54375fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                osi_malloc(bta_dm_search_cb.ble_raw_used);
54385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
54395fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            memcpy(p_msg->disc_result.result.disc_res.p_raw_data,
54405fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                   bta_dm_search_cb.p_ble_rawdata,
54415fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                   bta_dm_search_cb.ble_raw_used);
54425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
54435fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            p_msg->disc_result.result.disc_res.raw_data_size =
54445fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                bta_dm_search_cb.ble_raw_used;
54455fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        } else {
54465fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            p_msg->disc_result.result.disc_res.p_raw_data = NULL;
54475fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            bta_dm_search_cb.p_ble_rawdata = 0;
54485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
544976356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan
54505fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        bta_sys_sendmsg(p_msg);
54515fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
54525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (conn_id != BTA_GATT_INVALID_CONN_ID)
54535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
545476356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan            /* start a GATT channel close delay timer */
545578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov            bta_sys_start_timer(bta_dm_search_cb.gatt_close_timer,
545678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                BTA_DM_GATT_CLOSE_DELAY_TOUT,
545778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                BTA_DM_DISC_CLOSE_TOUT_EVT, 0);
545878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov            bdcpy(bta_dm_search_cb.pending_close_bda,
545978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                  bta_dm_search_cb.peer_bdaddr);
54605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
54615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.gatt_disc_active = FALSE;
54625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
54635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
54645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
54655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
54665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
54676975b4d711142b885af479721cada448952c6b41Andre Eisenbach** Function         bta_dm_close_gatt_conn
54686975b4d711142b885af479721cada448952c6b41Andre Eisenbach**
54696975b4d711142b885af479721cada448952c6b41Andre Eisenbach** Description      This function close the GATT connection after delay timeout.
54706975b4d711142b885af479721cada448952c6b41Andre Eisenbach**
54716975b4d711142b885af479721cada448952c6b41Andre Eisenbach** Parameters:
54726975b4d711142b885af479721cada448952c6b41Andre Eisenbach**
54736975b4d711142b885af479721cada448952c6b41Andre Eisenbach*******************************************************************************/
54746975b4d711142b885af479721cada448952c6b41Andre Eisenbachvoid bta_dm_close_gatt_conn(tBTA_DM_MSG *p_data)
54756975b4d711142b885af479721cada448952c6b41Andre Eisenbach{
54765cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
54775cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen
54786975b4d711142b885af479721cada448952c6b41Andre Eisenbach    if (bta_dm_search_cb.conn_id != BTA_GATT_INVALID_CONN_ID)
54796975b4d711142b885af479721cada448952c6b41Andre Eisenbach        BTA_GATTC_Close(bta_dm_search_cb.conn_id);
54806975b4d711142b885af479721cada448952c6b41Andre Eisenbach
548176356aee883af67898ddc1aa3b628195f396d42aVenkatRaghavan VijayaRaghavan    memset(bta_dm_search_cb.pending_close_bda, 0, BD_ADDR_LEN);
54826975b4d711142b885af479721cada448952c6b41Andre Eisenbach    bta_dm_search_cb.conn_id = BTA_GATT_INVALID_CONN_ID;
54836975b4d711142b885af479721cada448952c6b41Andre Eisenbach}
54846975b4d711142b885af479721cada448952c6b41Andre Eisenbach/*******************************************************************************
54856975b4d711142b885af479721cada448952c6b41Andre Eisenbach**
54865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btm_dm_start_gatt_discovery
54875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
54885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This is GATT initiate the service search by open a GATT connection
54895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  first.
54905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
54915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
54925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
54935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
54945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_dm_start_gatt_discovery (BD_ADDR bd_addr)
54955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
54965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.gatt_disc_active = TRUE;
54976975b4d711142b885af479721cada448952c6b41Andre Eisenbach
54986975b4d711142b885af479721cada448952c6b41Andre Eisenbach    /* connection is already open */
54996975b4d711142b885af479721cada448952c6b41Andre Eisenbach    if (bdcmp(bta_dm_search_cb.pending_close_bda, bd_addr) == 0 &&
55006975b4d711142b885af479721cada448952c6b41Andre Eisenbach        bta_dm_search_cb.conn_id != BTA_GATT_INVALID_CONN_ID)
55016975b4d711142b885af479721cada448952c6b41Andre Eisenbach    {
55026975b4d711142b885af479721cada448952c6b41Andre Eisenbach        memset(bta_dm_search_cb.pending_close_bda, 0, BD_ADDR_LEN);
550378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov        alarm_cancel(bta_dm_search_cb.gatt_close_timer);
55046975b4d711142b885af479721cada448952c6b41Andre Eisenbach        btm_dm_start_disc_gatt_services(bta_dm_search_cb.conn_id);
55056975b4d711142b885af479721cada448952c6b41Andre Eisenbach    }
55066975b4d711142b885af479721cada448952c6b41Andre Eisenbach    else
55077fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        BTA_GATTC_Open(bta_dm_search_cb.client_if, bd_addr, TRUE, BTA_GATT_TRANSPORT_LE);
55085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
55095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
55105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
55115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
55125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_cancel_gatt_discovery
55135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
55145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This is GATT cancel the GATT service search.
55155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
55165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
55175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
55185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
55195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_cancel_gatt_discovery(BD_ADDR bd_addr)
55205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
55215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bta_dm_search_cb.conn_id == BTA_GATT_INVALID_CONN_ID)
55225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
55235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_GATTC_CancelOpen(bta_dm_search_cb.client_if, bd_addr, TRUE);
55245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
55255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
55265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_gatt_disc_complete(bta_dm_search_cb.conn_id, (tBTA_GATT_STATUS) BTA_GATT_ERROR);
55275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
55285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
55295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
55305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
55315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_proc_open_evt
55325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
55335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      process BTA_GATTC_OPEN_EVT in DM.
55345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
55355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
55365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
55375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
55385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_proc_open_evt(tBTA_GATTC_OPEN *p_data)
55395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
55405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           *p1;
55415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           *p2;
55425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
55435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p1 = bta_dm_search_cb.peer_bdaddr;
55445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p2 = p_data->remote_bda;
55455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5546e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("DM Search state= %d search_cb.peer_dbaddr: [%08x%04x] connected_bda= [%08x%04x] ",
55475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bta_dm_search_cb.state,
55485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      ((p1[0])<<24)+((p1[1])<<16)+((p1[2])<<8)+(p1[3]),
55495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      ((p1[4])<<8)+ p1[5],
55505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      ((p2[0])<<24)+((p2[1])<<16)+((p2[2])<<8)+(p2[3]),
55515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      ((p2[4])<<8)+ p2[5]);
55525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5553e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("BTA_GATTC_OPEN_EVT conn_id = %d client_if=%d status = %d" ,
55545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_data->conn_id,
55555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_data->client_if,
55565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_data->status);
55575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
55585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.conn_id = p_data->conn_id;
55595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
55605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->status == BTA_GATT_OK)
55615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
55625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btm_dm_start_disc_gatt_services(p_data->conn_id);
55635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
55645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
55655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
55665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_gatt_disc_complete(BTA_GATT_INVALID_CONN_ID, p_data->status);
55675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
55685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
55695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
55705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
55715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
55725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_gattc_callback
55735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
55745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This is GATT client callback function used in DM.
55755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
55765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
55775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
55785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
55795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data)
55805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5581e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_gattc_callback event = %d", event);
55825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
55835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (event)
55845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
55855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_GATTC_REG_EVT:
5586e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_DEBUG("BTA_GATTC_REG_EVT client_if = %d",  p_data->reg_oper.client_if);
55875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->reg_oper.status == BTA_GATT_OK)
55885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_search_cb.client_if = p_data->reg_oper.client_if;
55895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
55905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_search_cb.client_if = BTA_GATTS_INVALID_IF;
55915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
55925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
55935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_GATTC_OPEN_EVT:
55945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_proc_open_evt(&p_data->open);
55955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
55965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
55975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_GATTC_SEARCH_RES_EVT:
559826f8828cdb5f02b0b01bafaccd4ad0b0ba9d57abJakub Pawlowski            bta_dm_gatt_disc_result(p_data->srvc_res.service_uuid);
55995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
56005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
56015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_GATTC_SEARCH_CMPL_EVT:
56025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE)
56035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_gatt_disc_complete(p_data->search_cmpl.conn_id, p_data->search_cmpl.status);
56045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
56055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
56065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_GATTC_CLOSE_EVT:
5607e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_DEBUG("BTA_GATTC_CLOSE_EVT reason = %d", p_data->close.reason);
56085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* in case of disconnect before search is completed */
56095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( (bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) &&
56104e9acf664cef0e245b31ff918a99aaf053546652Nitin Arora                 (bta_dm_search_cb.state != BTA_DM_SEARCH_ACTIVE) &&
56115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                 !memcmp(p_data->close.remote_bda, bta_dm_search_cb.peer_bdaddr, BD_ADDR_LEN))
56125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
56135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_gatt_disc_complete((UINT16)BTA_GATT_INVALID_CONN_ID,  (tBTA_GATT_STATUS) BTA_GATT_ERROR);
56145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
56155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
56165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
56175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
56185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
56195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
56205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5621c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
56225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTA_GATT_INCLUDED */
5623b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
5624104e3f238f500cacdb8afaccdc672dfc34eae7eeBernhard Rosenkränzer#if BLE_VND_INCLUDED == TRUE
56258d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta/*******************************************************************************
56268d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta**
56278d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta** Function         bta_dm_ctrl_features_rd_cmpl_cback
56288d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta**
56298d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta** Description      callback to handle controller feature read complete
56308d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta**
56318d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta** Parameters:
56328d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta**
56338d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta*******************************************************************************/
56348d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Battastatic void bta_dm_ctrl_features_rd_cmpl_cback(tBTM_STATUS result)
56358d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta{
5636e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("%s  status = %d ", __FUNCTION__, result);
56378d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta    if (result == BTM_SUCCESS)
56388d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta    {
56398d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta        if(bta_dm_cb.p_sec_cback)
56408d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta            bta_dm_cb.p_sec_cback(BTA_DM_LE_FEATURES_READ, NULL);
56418d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta    }
56428d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta    else
56438d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta    {
5644e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR("%s Ctrl BLE feature read failed: status :%d",__FUNCTION__, result);
56458d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta    }
56468d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta
56478d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta}
5648104e3f238f500cacdb8afaccdc672dfc34eae7eeBernhard Rosenkränzer#endif /* BLE_VND_INCLUDED */
56498d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta
56505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif  /* BLE_INCLUDED */
5651