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
26597c5778ca69fec26c96bda48b83935c1a90660dMike J. Chen#include "bt_target.h"
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_types.h"
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h"
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bd.h"
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_sys.h"
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_api.h"
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_dm_int.h"
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_dm_co.h"
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_api.h"
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_int.h"
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h"
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "sdp_api.h"
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "l2c_api.h"
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "wbt_api.h"
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "utl.h"
4122c6e505dc65ab3d624e4ccd7c48c95fe2128703Kévin PETIT#include "gap_api.h"    /* For GAP_BleReadPeerPrefConnParams */
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h>
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44a02a48c2f2aece8b173a25e88a0f00d2e2f78c48Mike J. Chen#if (GAP_INCLUDED == TRUE)
45a02a48c2f2aece8b173a25e88a0f00d2e2f78c48Mike J. Chen#include "gap_api.h"
46a02a48c2f2aece8b173a25e88a0f00d2e2f78c48Mike J. Chen#endif
47a02a48c2f2aece8b173a25e88a0f00d2e2f78c48Mike J. Chen
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_inq_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir);
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_inq_cmpl_cb (void * p_result);
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_service_search_remname_cback (BD_ADDR bd_addr, DEV_CLASS dc, BD_NAME bd_name);
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_remname_cback (tBTM_REMOTE_DEV_NAME *p_remote_name);
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_find_services ( BD_ADDR bd_addr);
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_discover_next_device(void);
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_sdp_callback (UINT16 sdp_status);
555738f83aeb59361a0a2eda2460113f6dc919427The 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);
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_pin_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name);
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_link_key_request_cback (BD_ADDR bd_addr, LINK_KEY key);
585738f83aeb59361a0a2eda2460113f6dc919427The 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);
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_authentication_complete_cback(BD_ADDR bd_addr, DEV_CLASS dev_class,BD_NAME bd_name, int result);
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_local_name_cback(BD_ADDR bd_addr);
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN bta_dm_check_av(UINT16 event);
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_BUSY_LEVEL_CHANGE_INCLUDED == TRUE)
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data);
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
653aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbachstatic void bta_dm_acl_change_cback (BD_ADDR p_bda, DEV_CLASS p_dc, BD_NAME p_bdn, UINT8 *features, BOOLEAN is_new);
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
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 Project#if (BTM_EIR_SERVER_INCLUDED == TRUE)
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_set_eir (char *local_name);
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTM_EIR_SERVER_INCLUDED */
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_EIR_CLIENT_INCLUDED == TRUE)
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_eir_search_services( tBTM_INQ_RESULTS  *p_result,
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        tBTA_SERVICE_MASK *p_services_to_search,
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        tBTA_SERVICE_MASK *p_services_found);
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTM_EIR_CLIENT_INCLUDED */
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_rssi_cback (tBTM_RSSI_RESULTS *p_result);
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_signal_strength_timer_cback (TIMER_LIST_ENT *p_tle);
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_link_quality_cback (tBTM_LINK_QUALITY_RESULTS *p_result);
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_search_timer_cback (TIMER_LIST_ENT *p_tle);
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_disable_timer_cback (TIMER_LIST_ENT *p_tle);
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_disable_conn_down_timer_cback (TIMER_LIST_ENT *p_tle);
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_rm_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, BD_ADDR peer_addr);
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_adjust_roles(BOOLEAN delay_role_switch);
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_dm_get_remname(void);
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_bond_cancel_complete_cback(tBTM_STATUS result);
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
937fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battastatic BOOLEAN bta_dm_read_remote_device_name (BD_ADDR bd_addr,tBT_TRANSPORT transport);
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_discover_device(BD_ADDR remote_bd_addr);
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_sys_hw_cback( tBTA_SYS_HW_EVT status );
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN bta_dm_dev_blacklisted_for_switch (BD_ADDR remote_bd_addr);
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_delay_role_switch_cback (TIMER_LIST_ENT *p_tle);
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
101ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_disable_search_and_disc(void);
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ((defined BLE_INCLUDED) && (BLE_INCLUDED == TRUE))
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    #if ((defined SMP_INCLUDED) && (SMP_INCLUDED == TRUE))
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_ble_smp_cback (tBTM_LE_EVT event, BD_ADDR bda, tBTM_LE_EVT_DATA *p_data);
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    #endif
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_ble_id_key_cback (UINT8 key_type, tBTM_BLE_LOCAL_KEYS *p_key);
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    #if ((defined BTA_GATT_INCLUDED) &&  (BTA_GATT_INCLUDED == TRUE))
108e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbachstatic void bta_dm_gattc_register(void);
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btm_dm_start_gatt_discovery ( BD_ADDR bd_addr);
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_cancel_gatt_discovery(BD_ADDR bd_addr);
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data);
11281b03192d4284acc7c9903f5b183927797dceca4Prerepa Viswanadhamextern tBTA_DM_CONTRL_STATE bta_dm_pm_obtain_controller_state(void);
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    #endif
114ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_observe_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir);
115ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_observe_cmpl_cb (void * p_result);
1168d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Battastatic void bta_dm_ctrl_features_rd_cmpl_cback(tBTM_STATUS result);
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
118ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#ifndef BTA_DM_BLE_ADV_CHNL_MAP
119ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTA_DM_BLE_ADV_CHNL_MAP (BTM_BLE_ADV_CHNL_37|BTM_BLE_ADV_CHNL_38|BTM_BLE_ADV_CHNL_39)
120ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
121ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
122f751b01146d81fd70645907f5fd3a4cc3a7acc02Matthew Xiestatic void bta_dm_remove_sec_dev_entry(BD_ADDR remote_bd_addr);
123f751b01146d81fd70645907f5fd3a4cc3a7acc02Matthew Xie
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void sdpu_uuid16_to_uuid128(UINT16 uuid16, UINT8* p_uuid128);
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT16 bta_service_id_to_uuid_lkup_tbl [BTA_MAX_SERVICE_ID] =
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_PNP_INFORMATION,         /* Reserved */
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_SERIAL_PORT,             /* BTA_SPP_SERVICE_ID */
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_DIALUP_NETWORKING,       /* BTA_DUN_SERVICE_ID */
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_AUDIO_SOURCE,            /* BTA_A2DP_SOURCE_SERVICE_ID */
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_LAN_ACCESS_USING_PPP,    /* BTA_LAP_SERVICE_ID */
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_HEADSET,                 /* BTA_HSP_HS_SERVICE_ID */
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_HF_HANDSFREE,            /* BTA_HFP_HS_SERVICE_ID */
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_OBEX_OBJECT_PUSH,        /* BTA_OPP_SERVICE_ID */
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_OBEX_FILE_TRANSFER,      /* BTA_FTP_SERVICE_ID */
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_CORDLESS_TELEPHONY,      /* BTA_CTP_SERVICE_ID */
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_INTERCOM,                /* BTA_ICP_SERVICE_ID */
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_IRMC_SYNC,               /* BTA_SYNC_SERVICE_ID */
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_DIRECT_PRINTING,         /* BTA_BPP_SERVICE_ID */
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_IMAGING_RESPONDER,       /* BTA_BIP_SERVICE_ID */
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_PANU,                    /* BTA_PANU_SERVICE_ID */
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_NAP,                     /* BTA_NAP_SERVICE_ID */
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_GN,                      /* BTA_GN_SERVICE_ID */
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_SAP,                     /* BTA_SAP_SERVICE_ID */
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_AUDIO_SINK,              /* BTA_A2DP_SERVICE_ID */
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_AV_REMOTE_CONTROL,       /* BTA_AVRCP_SERVICE_ID */
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_HUMAN_INTERFACE,         /* BTA_HID_SERVICE_ID */
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_VIDEO_SINK,              /* BTA_VDP_SERVICE_ID */
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_PBAP_PSE,                /* BTA_PBAP_SERVICE_ID */
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_HEADSET_AUDIO_GATEWAY,   /* BTA_HSP_SERVICE_ID */
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_AG_HANDSFREE,            /* BTA_HFP_SERVICE_ID */
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_MESSAGE_ACCESS,          /* BTA_MAP_SERVICE_ID */
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_MESSAGE_NOTIFICATION,    /* BTA_MN_SERVICE_ID */
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_HDP_PROFILE,             /* BTA_HDP_SERVICE_ID */
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UUID_SERVCLASS_PBAP_PCE                 /* BTA_PCE_SERVICE_ID */
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED && BTA_GATT_INCLUDED
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ,UUID_PROTOCOL_ATT                       /* BTA_GATT_SERVICE_ID */
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * NOTE : The number of element in bta_service_id_to_btm_srv_id_lkup_tbl should be matching with
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *        the value BTA_MAX_SERVICE_ID in bta_api.h
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *        i.e., If you add new Service ID for BTA, the correct security ID of the new service
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *              from Security service definitions (btm_api.h) should be added to this lookup table.
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT32 bta_service_id_to_btm_srv_id_lkup_tbl [BTA_MAX_SERVICE_ID] =
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    0,                                      /* Reserved */
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_SERIAL_PORT,            /* BTA_SPP_SERVICE_ID */
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_DUN,                    /* BTA_DUN_SERVICE_ID */
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_AVDTP,                  /* BTA_AUDIO_SOURCE_SERVICE_ID */
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_LAN_ACCESS,             /* BTA_LAP_SERVICE_ID */
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_HEADSET_AG,             /* BTA_HSP_SERVICE_ID */
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_AG_HANDSFREE,           /* BTA_HFP_SERVICE_ID */
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_OBEX,                   /* BTA_OPP_SERVICE_ID */
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_OBEX_FTP,               /* BTA_FTP_SERVICE_ID */
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_CORDLESS,               /* BTA_CTP_SERVICE_ID */
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_INTERCOM,               /* BTA_ICP_SERVICE_ID */
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_IRMC_SYNC,              /* BTA_SYNC_SERVICE_ID */
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_BPP_JOB,                /* BTA_BPP_SERVICE_ID */
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_BIP,                    /* BTA_BIP_SERVICE_ID */
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_BNEP_PANU,              /* BTA_PANU_SERVICE_ID */
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_BNEP_NAP,               /* BTA_NAP_SERVICE_ID */
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_BNEP_GN,                /* BTA_GN_SERVICE_ID */
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_SAP,                    /* BTA_SAP_SERVICE_ID */
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_AVDTP,                  /* BTA_A2DP_SERVICE_ID */
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_AVCTP,                  /* BTA_AVRCP_SERVICE_ID */
1912e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach    BTM_SEC_SERVICE_HIDH_SEC_CTRL,          /* BTA_HID_SERVICE_ID */
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_AVDTP,                  /* BTA_VDP_SERVICE_ID */
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_PBAP,                   /* BTA_PBAP_SERVICE_ID */
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_HEADSET,                /* BTA_HSP_HS_SERVICE_ID */
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_HF_HANDSFREE,           /* BTA_HFP_HS_SERVICE_ID */
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_MAP,                    /* BTA_MAP_SERVICE_ID */
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_MAP,                    /* BTA_MN_SERVICE_ID */
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_HDP_SNK,                /* BTA_HDP_SERVICE_ID */
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SEC_SERVICE_PBAP                    /* BTA_PCE_SERVICE_ID */
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED && BTA_GATT_INCLUDED
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ,BTM_SEC_SERVICE_ATT                    /* BTA_GATT_SERVICE_ID */
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2036975b4d711142b885af479721cada448952c6b41Andre Eisenbach
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* bta security callback */
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tBTM_APPL_INFO bta_security =
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    &bta_dm_authorize_cback,
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    &bta_dm_pin_cback,
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    &bta_dm_new_link_key_cback,
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    &bta_dm_link_key_request_cback,
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    &bta_dm_authentication_complete_cback,
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    NULL,
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    &bta_dm_bond_cancel_complete_cback,
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE)
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    &bta_dm_sp_cback
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    NULL
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if SMP_INCLUDED == TRUE
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ,&bta_dm_ble_smp_cback
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ,&bta_dm_ble_id_key_cback
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* TBD... To be moved to some conf file..? */
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_DM_MAX_ROLE_SWITCH_BLACKLIST_COUNT   5
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tBTA_DM_LMP_VER_INFO bta_role_switch_blacklist[BTA_DM_MAX_ROLE_SWITCH_BLACKLIST_COUNT] =
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {0x000F,0x2000,0x04},
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {0x00,0x00,0x00},
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {0x00,0x00,0x00},
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {0x00,0x00,0x00},
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {0x00,0x00,0x00}
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MAX_DISC_RAW_DATA_BUF       (4096)
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 g_disc_raw_data_buf[MAX_DISC_RAW_DATA_BUF];
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_enable
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Initialises the BT device manager
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_enable(tBTA_DM_MSG *p_data)
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_SYS_HW_MSG *sys_enable_event;
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if already in use, return an error */
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( bta_dm_cb.is_bta_dm_active == TRUE  )
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
262e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_WARNING("bta_dm_enable - device already started by another application");
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(&sec_event.enable, 0, sizeof ( tBTA_DM_ENABLE ));
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.enable.status = BTA_FAILURE;
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( p_data->enable.p_sec_cback != NULL  )
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_data->enable.p_sec_cback (BTA_DM_ENABLE_EVT, &sec_event);
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* first, register our callback to SYS HW manager */
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_sys_hw_register( BTA_SYS_HW_BLUETOOTH, bta_dm_sys_hw_cback );
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* make sure security callback is saved - if no callback, do not erase the previous one,
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    it could be an error recovery mechanism */
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( p_data->enable.p_sec_cback != NULL  )
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_cb.p_sec_cback = p_data->enable.p_sec_cback;
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* notify BTA DM is now active */
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_cb.is_bta_dm_active = TRUE;
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* send a message to BTA SYS */
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((sys_enable_event = (tBTA_SYS_HW_MSG *) GKI_getbuf(sizeof(tBTA_SYS_HW_MSG))) != NULL)
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sys_enable_event->hdr.event = BTA_SYS_API_ENABLE_EVT;
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sys_enable_event->hw_module = BTA_SYS_HW_BLUETOOTH;
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(sys_enable_event);
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_sys_hw_cback
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description     callback register to SYS to get HW status updates
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_sys_hw_cback( tBTA_SYS_HW_EVT status )
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    DEV_CLASS   dev_class;
3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC_CBACK           *temp_cback;
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE
3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8                   key_mask = 0;
3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_OCTET16              er;
3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_BLE_LOCAL_ID_KEYS  id_key;
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBT_UUID                app_uuid = {LEN_UUID_128,{0}};
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
316e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG(" bta_dm_sys_hw_cback with event: %i" , status );
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* On H/W error evt, report to the registered DM application callback */
3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (status == BTA_SYS_HW_ERROR_EVT) {
3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project          if( bta_dm_cb.p_sec_cback != NULL )
3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_cb.p_sec_cback(BTA_DM_HW_ERROR_EVT, NULL);
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project          return;
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( status == BTA_SYS_HW_OFF_EVT )
3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( bta_dm_cb.p_sec_cback != NULL )
3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_DISABLE_EVT, NULL);
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* reinitialize the control block */
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(&bta_dm_cb, 0, sizeof(bta_dm_cb));
3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* unregister from SYS */
3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_hw_unregister( BTA_SYS_HW_BLUETOOTH );
3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* notify BTA DM is now unactive */
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.is_bta_dm_active = FALSE;
3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( status == BTA_SYS_HW_ON_EVT )
3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* FIXME: We should not unregister as the SYS shall invoke this callback on a H/W error.
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        * We need to revisit when this platform has more than one BLuetooth H/W chip */
3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        //bta_sys_hw_unregister( BTA_SYS_HW_BLUETOOTH);
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* save security callback */
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        temp_cback = bta_dm_cb.p_sec_cback;
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* make sure the control block is properly initialized */
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(&bta_dm_cb, 0, sizeof(bta_dm_cb));
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* and retrieve the callback */
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback=temp_cback;
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.is_bta_dm_active = TRUE;
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* hw is ready, go on with BTA DM initialization */
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(&bta_dm_search_cb, 0x00, sizeof(bta_dm_search_cb));
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(&bta_dm_conn_srvcs, 0x00, sizeof(bta_dm_conn_srvcs));
3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(&bta_dm_di_cb, 0, sizeof(tBTA_DM_DI_CB));
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(dev_class, bta_dm_cfg.dev_class, sizeof(dev_class));
3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetDeviceClass (dev_class);
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined BLE_INCLUDED && BLE_INCLUDED == TRUE)
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* load BLE local information: ID keys, ER if available */
3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_co_ble_load_local_keys(&key_mask, er, &id_key);
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (key_mask & BTA_BLE_LOCAL_KEY_TYPE_ER)
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTM_BleLoadLocalKeys(BTA_BLE_LOCAL_KEY_TYPE_ER, (tBTM_BLE_LOCAL_KEYS *)&er);
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (key_mask & BTA_BLE_LOCAL_KEY_TYPE_ID)
3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTM_BleLoadLocalKeys(BTA_BLE_LOCAL_KEY_TYPE_ID, (tBTM_BLE_LOCAL_KEYS *)&id_key);
3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
372597c5778ca69fec26c96bda48b83935c1a90660dMike J. Chen#if ((defined BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE))
3736975b4d711142b885af479721cada448952c6b41Andre Eisenbach        bta_dm_search_cb.conn_id = BTA_GATT_INVALID_CONN_ID;
3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
375597c5778ca69fec26c96bda48b83935c1a90660dMike J. Chen#endif
3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SecRegister((tBTM_APPL_INFO*)&bta_security);
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetDefaultLinkSuperTout(bta_dm_cfg.link_timeout);
3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_WritePageTimeout(bta_dm_cfg.page_timeout);
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.cur_policy = bta_dm_cfg.policy_settings;
3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetDefaultLinkPolicy(bta_dm_cb.cur_policy);
3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BTM_BUSY_LEVEL_CHANGE_INCLUDED) && BTM_BUSY_LEVEL_CHANGE_INCLUDED == TRUE)
3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_RegBusyLevelNotif (bta_dm_bl_change_cback, NULL, BTM_BL_UPDATE_MASK|BTM_BL_ROLE_CHG_MASK);
3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_AclRegisterForChanges(bta_dm_acl_change_cback);
3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
3873f24f460ec3efedde25723e6a4297efc10873cd2Satya Calloji
3883f24f460ec3efedde25723e6a4297efc10873cd2Satya Calloji#if BLE_VND_INCLUDED == TRUE
3893f24f460ec3efedde25723e6a4297efc10873cd2Satya Calloji        BTM_BleReadControllerFeatures (bta_dm_ctrl_features_rd_cmpl_cback);
3903f24f460ec3efedde25723e6a4297efc10873cd2Satya Calloji#endif
3913f24f460ec3efedde25723e6a4297efc10873cd2Satya Calloji
3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Earlier, we used to invoke BTM_ReadLocalAddr which was just copying the bd_addr
3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           from the control block and invoking the callback which was sending the DM_ENABLE_EVT.
3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           But then we have a few HCI commands being invoked above which were still in progress
3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           when the ENABLE_EVT was sent. So modified this to fetch the local name which forces
3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           the DM_ENABLE_EVT to be sent only after all the init steps are complete */
3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_ReadLocalDeviceNameFromController((tBTM_CMPL_CB *)bta_dm_local_name_cback);
3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_rm_register((tBTA_SYS_CONN_CBACK*)bta_dm_rm_cback);
4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* initialize bluetooth low power manager */
4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_init_pm();
4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_policy_register((tBTA_SYS_CONN_CBACK*)bta_dm_policy_cback);
4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
406e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
407e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        memset (&app_uuid.uu.uuid128, 0x87, LEN_UUID_128);
408e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        bta_dm_gattc_register();
409e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach#endif
410e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach
4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
413e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_DEBUG(" --- ignored event");
4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_disable
4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Disables the BT device manager
4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_disable (tBTA_DM_MSG *p_data)
4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4305cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
4315cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen
4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Set l2cap idle timeout to 0 (so BTE immediately disconnects ACL link after last channel is closed) */
4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    L2CA_SetIdleTimeoutByBdAddr((UINT8 *)BT_BD_ANY, 0);
4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* disable all active subsystems */
4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_sys_disable(BTA_SYS_HW_BLUETOOTH);
4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SetDiscoverability(BTM_NON_DISCOVERABLE, 0, 0);
4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SetConnectability(BTM_NON_CONNECTABLE, 0, 0);
4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_disable_pm();
442ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bta_dm_disable_search_and_disc();
4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_cb.disabling = TRUE;
4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
445021e17a641e61e3f139717cd755bf6f9b9b9eb12Nitin Arora#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
446021e17a641e61e3f139717cd755bf6f9b9b9eb12Nitin Arora    BTM_BleClearBgConnDev();
447021e17a641e61e3f139717cd755bf6f9b9b9eb12Nitin Arora#endif
4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(BTM_GetNumAclLinks()==0)
4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BTA_DISABLE_DELAY) && BTA_DISABLE_DELAY > 0)
4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* If BTA_DISABLE_DELAY is defined and greater than zero, then delay the shutdown by
4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         * BTA_DISABLE_DELAY milliseconds
4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         */
455e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_WARNING("%s BTA_DISABLE_DELAY set to %d ms",
4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            __FUNCTION__, BTA_DISABLE_DELAY);
4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_stop_timer(&bta_dm_cb.disable_timer);
4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.disable_timer.p_cback = (TIMER_CBACK*)&bta_dm_disable_conn_down_timer_cback;
4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_start_timer(&bta_dm_cb.disable_timer, 0, BTA_DISABLE_DELAY);
4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_disable_conn_down_timer_cback(NULL);
4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.disable_timer.p_cback = (TIMER_CBACK*)&bta_dm_disable_timer_cback;
467d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin        bta_dm_cb.disable_timer.param = 0;
4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_start_timer(&bta_dm_cb.disable_timer, 0, 5000);
4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_disable_timer_cback
4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Called if the disable timer expires
4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  Used to close ACL connections which are still active
4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_disable_timer_cback (TIMER_LIST_ENT *p_tle)
4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4875cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_tle);
4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
4897fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR;
490d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin    BOOLEAN trigger_disc = FALSE;
4917fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
493d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin    APPL_TRACE_EVENT(" bta_dm_disable_timer_cback trial %d ", p_tle->param);
4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
495d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin    if(BTM_GetNumAclLinks() && p_tle->param == 0)
4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for(i=0; i<bta_dm_cb.device_list.count; i++)
4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
4997fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE)
5007fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            transport = bta_dm_cb.device_list.peer_device[i].transport;
5017fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
5027fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            btm_remove_acl(bta_dm_cb.device_list.peer_device[i].peer_bdaddr, transport);
503d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin            trigger_disc = TRUE;
5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
506d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin        /* Retrigger disable timer in case ACL disconnect failed, DISABLE_EVT still need
507d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin            to be sent out to avoid jave layer disable timeout */
508d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin        if (trigger_disc)
509d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin        {
510d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin            bta_dm_cb.disable_timer.p_cback = (TIMER_CBACK*)&bta_dm_disable_timer_cback;
511d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin            bta_dm_cb.disable_timer.param = 1;
512d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin            bta_sys_start_timer(&bta_dm_cb.disable_timer, 0, 1500);
513d6fc0515124cf5b7ebc93d926565a10295548de5lungtsai_lin        }
5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.disabling = FALSE;
5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_remove_uuid(UUID_SERVCLASS_PNP_INFORMATION);
5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(BTA_DM_DISABLE_EVT, NULL);
5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_set_dev_name
5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Sets local device name
5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_set_dev_name (tBTA_DM_MSG *p_data)
5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SetLocalDeviceName((char*)p_data->set_name.name);
5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_EIR_SERVER_INCLUDED == TRUE)
5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_set_eir ((char*)p_data->set_name.name);
5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_set_visibility
5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Sets discoverability, connectability and pairability
5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_set_visibility (tBTA_DM_MSG *p_data)
5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* set modes for Discoverability and connectability if not ignore */
5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->set_visibility.disc_mode != BTA_DM_IGNORE)
5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetDiscoverability((UINT8)p_data->set_visibility.disc_mode,
5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                bta_dm_cb.inquiry_scan_window,
5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                bta_dm_cb.inquiry_scan_interval);
5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->set_visibility.conn_mode != BTA_DM_IGNORE)
5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetConnectability((UINT8)p_data->set_visibility.conn_mode,
5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                bta_dm_cb.page_scan_window,
5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                bta_dm_cb.page_scan_interval);
5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Send False or True if not ignore */
5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->set_visibility.pair_mode != BTA_DM_IGNORE )
5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_data->set_visibility.pair_mode == BTA_DM_NON_PAIRABLE)
5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.disable_pair_mode = TRUE;
5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.disable_pair_mode = FALSE;
5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Send False or True if not ignore */
5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->set_visibility.conn_paired_only != BTA_DM_IGNORE)
5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_data->set_visibility.conn_paired_only == BTA_DM_CONN_ALL)
5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.conn_paired_only = FALSE;
5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.conn_paired_only = TRUE;
5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Change mode if either mode is not ignore */
5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->set_visibility.pair_mode != BTA_DM_IGNORE || p_data->set_visibility.conn_paired_only != BTA_DM_IGNORE)
5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetPairableMode((BOOLEAN)(!(bta_dm_cb.disable_pair_mode)),bta_dm_cb.conn_paired_only);
5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_set_afhchannels
6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function sets the AFH first and
6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  last disable channel, so channels within
6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  that range are disabled.
6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_set_afhchannels (tBTA_DM_MSG *p_data)
6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SetAfhChannels(p_data->set_afhchannels.first,p_data->set_afhchannels.last);
6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_vendor_spec_command
6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Send a vendor specific command to the controller
6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_vendor_spec_command (tBTA_DM_MSG *p_data)
6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS status;
6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    status = BTM_VendorSpecificCommand(p_data->vendor_command.opcode,p_data->vendor_command.param_len,p_data->vendor_command.p_param_buf, p_data->vendor_command.p_cback);
6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_tx_inqpower
6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      write inquiry tx power.
6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_tx_inqpower(tBTA_DM_MSG *p_data)
6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (BTM_WriteInquiryTxPower (p_data->tx_inq_pwr.tx_power) == BTM_ILLEGAL_VALUE)
6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
652e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR("Invalid Inquiry Tx Power: %d", p_data->tx_inq_pwr.tx_power);
6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_remove_device
6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Removes device, Disconnects ACL link if required.
6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project****
6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_remove_device (tBTA_DM_MSG *p_data)
6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_API_REMOVE_DEVICE *p_dev = &p_data->remove_dev;
6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    int i;
6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
670bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
671bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu    /* need to remove all pending background connection before unpair */
672bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu    BTA_GATTC_CancelOpen(0, p_dev->bd_addr, FALSE);
673bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu#endif
674bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu
6757fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if ( BTM_IsAclConnectionUp(p_dev->bd_addr, BT_TRANSPORT_LE) ||
6767fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta         BTM_IsAclConnectionUp(p_dev->bd_addr, BT_TRANSPORT_BR_EDR))
6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
678e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati           APPL_TRACE_DEBUG("%s: ACL Up count  %d", __FUNCTION__,bta_dm_cb.device_list.count);
6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Take the link down first, and mark the device for removal when disconnected */
6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for(i=0; i<bta_dm_cb.device_list.count; i++)
6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(!bdcmp( bta_dm_cb.device_list.peer_device[i].peer_bdaddr, p_dev->bd_addr))
6847fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            {
6857fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                bta_dm_cb.device_list.peer_device[i].conn_state = BTA_DM_UNPAIRING;
6867fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                btm_remove_acl( p_dev->bd_addr,bta_dm_cb.device_list.peer_device[i].transport);
687e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                APPL_TRACE_DEBUG("%s:transport = %d", __FUNCTION__,
6887fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                   bta_dm_cb.device_list.peer_device[i].transport);
6897fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                break;
6907fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            }
6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6937fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else    /* Ok to remove the device in application layer */
6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SecDeleteDevice(p_dev->bd_addr);
697bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
698bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu        /* remove all cached GATT information */
699bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu        BTA_GATTC_Refresh(p_dev->bd_addr);
700bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu#endif
701bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu
7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( bta_dm_cb.p_sec_cback )
7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(sec_event.link_down.bd_addr, p_dev->bd_addr);
7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* No connection, set status to success (acl disc code not valid) */
7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            sec_event.link_down.status = HCI_SUCCESS;
7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_DEV_UNPAIRED_EVT, &sec_event);
7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_add_device
7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function adds a Link Key to an security database entry.
7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  It is normally called during host startup to restore all required information
7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  stored in the NVRAM.
7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project****
7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_add_device (tBTA_DM_MSG *p_data)
7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_API_ADD_DEVICE *p_dev = &p_data->add_dev;
7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   *p_dc = NULL;
7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   *p_lc = NULL;
7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32  trusted_services_mask[BTM_SEC_SERVICE_ARRAY_SIZE];
7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   index = 0;
7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   btm_mask_index = 0;
7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset (trusted_services_mask, 0, sizeof(trusted_services_mask));
7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* If not all zeros, the device class has been specified */
7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_dev->dc_known)
7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dc = (UINT8 *)p_dev->dc;
7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_dev->link_key_known)
7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_lc = (UINT8 *)p_dev->link_key;
7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_dev->is_trusted)
7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* covert BTA service mask to BTM mask */
7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while (p_dev->tm && (index < BTA_MAX_SERVICE_ID))
7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_dev->tm & (UINT32)(1<<index))
7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btm_mask_index =  bta_service_id_to_btm_srv_id_lkup_tbl[index] / BTM_SEC_ARRAY_BITS;
7485738f83aeb59361a0a2eda2460113f6dc919427The 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)));
7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dev->tm &= (UINT32)(~(1<<index));
7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            index++;
7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!BTM_SecAddDevice (p_dev->bd_addr, p_dc, p_dev->bd_name, p_dev->features,
7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           trusted_services_mask, p_lc, p_dev->key_type, p_dev->io_cap))
7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
760e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR ("BTA_DM: Error adding device %08x%04x",
7615738f83aeb59361a0a2eda2460113f6dc919427The 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],
7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                (p_dev->bd_addr[4]<<8)+p_dev->bd_addr[5]);
7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
768ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         bta_dm_close_acl
769ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
770ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function forces to close the connection to a remote device
771ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  and optionaly remove the device from security database if
772ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  required.
773ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta****
774ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
775ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid bta_dm_close_acl(tBTA_DM_MSG *p_data)
776ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
777ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_DM_API_REMOVE_ACL *p_remove_acl = &p_data->remove_acl;
778ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8   index;
7797fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR;
780ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
781e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_close_acl");
782ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
7837fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if ( BTM_IsAclConnectionUp(p_remove_acl->bd_addr, BT_TRANSPORT_LE) ||
7847fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta         BTM_IsAclConnectionUp(p_remove_acl->bd_addr, BT_TRANSPORT_BR_EDR))
7857fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
786ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
787ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        for (index = 0; index < bta_dm_cb.device_list.count; index ++)
788ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
789ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (!bdcmp( bta_dm_cb.device_list.peer_device[index].peer_bdaddr, p_remove_acl->bd_addr))
7907fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            {
7917fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if defined (BLE_INCLUDED) && (BLE_INCLUDED == TRUE)
7927fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                transport = bta_dm_cb.device_list.peer_device[index].transport;
7937fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
794ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                break;
7957fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            }
796ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
797ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (index != bta_dm_cb.device_list.count)
798ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
799ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_remove_acl->remove_dev)
800ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                bta_dm_cb.device_list.peer_device[index].remove_dev_pending = TRUE;
801ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
802ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        else
803ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
804e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_ERROR("unknown device, remove ACL failed");
805ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
806ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* Disconnect the ACL link */
8077fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        btm_remove_acl(p_remove_acl->bd_addr, transport);
808ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
809ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /* if to remove the device from security database ? do it now */
810ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    else if (p_remove_acl->remove_dev)
811ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
812ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (!BTM_SecDeleteDevice(p_remove_acl->bd_addr))
813ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
814e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_ERROR("delete device from security database failed.");
815ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
816ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
817ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* need to remove all pending background connection if any */
818ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        BTA_GATTC_CancelOpen(0, p_remove_acl->bd_addr, FALSE);
819ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* remove all cached GATT information */
820ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        BTA_GATTC_Refresh(p_remove_acl->bd_addr);
821ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
822ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
823ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /* otherwise, no action needed */
824ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
825ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
826ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
827ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_bond
8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Bonds with peer device
8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_bond (tBTA_DM_MSG *p_data)
8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS status;
8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char        *p_name;
8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8427fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if (p_data->bond.transport == BTA_TRANSPORT_UNKNOWN)
8437fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        status = BTM_SecBond ( p_data->bond.bd_addr, 0, NULL, 0 );
8447fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    else
8457fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        status = BTM_SecBondByTransport ( p_data->bond.bd_addr, p_data->bond.transport, 0, NULL, 0 );
8467fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bta_dm_cb.p_sec_cback && (status != BTM_CMD_STARTED))
8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(&sec_event, 0, sizeof(tBTA_DM_SEC));
8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy(sec_event.auth_cmpl.bd_addr, p_data->bond.bd_addr);
8532a2701cdddac0859a95e58aec542742c450145b9Kim Schulz        p_name = BTM_SecReadDevName(p_data->bond.bd_addr);
8542a2701cdddac0859a95e58aec542742c450145b9Kim Schulz        if (p_name != NULL)
8552a2701cdddac0859a95e58aec542742c450145b9Kim Schulz        {
8562a2701cdddac0859a95e58aec542742c450145b9Kim Schulz            memcpy(sec_event.auth_cmpl.bd_name, p_name, (BD_NAME_LEN-1));
8572a2701cdddac0859a95e58aec542742c450145b9Kim Schulz            sec_event.auth_cmpl.bd_name[BD_NAME_LEN-1] = 0;
8582a2701cdddac0859a95e58aec542742c450145b9Kim Schulz        }
8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*      taken care of by memset [above]
8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.auth_cmpl.key_present = FALSE;
8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.auth_cmpl.success = FALSE;
8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*/
8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.auth_cmpl.fail_reason = HCI_ERR_ILLEGAL_COMMAND;
8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (status == BTM_SUCCESS)
866ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            sec_event.auth_cmpl.success = TRUE;
868ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
869ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        else
870ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
871ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            /* delete this device entry from Sec Dev DB */
872ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_dm_remove_sec_dev_entry(p_data->bond.bd_addr);
873ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(BTA_DM_AUTH_CMPL_EVT, &sec_event);
8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_bond_cancel
8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Cancels bonding with a peer device
8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_bond_cancel (tBTA_DM_MSG *p_data)
8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS status;
8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
894e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_EVENT(" bta_dm_bond_cancel ");
8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    status = BTM_SecBondCancel ( p_data->bond_cancel.bd_addr );
8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bta_dm_cb.p_sec_cback && (status != BTM_CMD_STARTED && status != BTM_SUCCESS))
8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.bond_cancel_cmpl.result = BTA_FAILURE;
9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(BTA_DM_BOND_CANCEL_CMPL_EVT, &sec_event);
9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_pin_reply
9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Send the pin_reply to a request from BTM
9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_pin_reply (tBTA_DM_MSG *p_data)
9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32  trusted_mask[BTM_SEC_SERVICE_ARRAY_SIZE];
9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32  * current_trusted_mask;
9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    current_trusted_mask = BTM_ReadTrustedMask(p_data->pin_reply.bd_addr);
9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(current_trusted_mask)
9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(trusted_mask, current_trusted_mask, sizeof(trusted_mask));
9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(trusted_mask, 0, sizeof(trusted_mask));
9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_data->pin_reply.accept)
9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9355738f83aeb59361a0a2eda2460113f6dc919427The 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 );
9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_PINCodeReply(p_data->pin_reply.bd_addr, BTM_NOT_AUTHORIZED, 0, NULL, trusted_mask );
9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_link_policy
9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      remove/set link policy mask.
9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  wake the link, is sniff/park is removed
9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_link_policy (tBTA_DM_MSG *p_data)
9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_PEER_DEVICE *p_dev;
9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_dev = bta_dm_find_peer_device(p_data->link_policy.bd_addr);
9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(!p_dev)
9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
962e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG(" bta_dm_link_policy set:%d, policy:0x%x",
9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_data->link_policy.set, p_data->link_policy.policy_mask);
9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_data->link_policy.set)
9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* restore the default link policy */
9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dev->link_policy |= p_data->link_policy.policy_mask;
9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetLinkPolicy(p_dev->peer_bdaddr, &(p_dev->link_policy));
9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* clear the policy from the default link policy */
9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dev->link_policy &= (~p_data->link_policy.policy_mask);
9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetLinkPolicy(p_dev->peer_bdaddr, &(p_dev->link_policy));
9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(p_data->link_policy.policy_mask & (HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_PARK_MODE))
9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* if clearing sniff/park, wake the link */
9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_pm_active(p_dev->peer_bdaddr);
9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_policy_cback
9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      process the link policy changes
9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_policy_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, BD_ADDR peer_addr)
9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_PEER_DEVICE *p_dev = NULL;
9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16  policy = app_id;
9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32  mask = (UINT32)(1 << id);
9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(peer_addr)
10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dev = bta_dm_find_peer_device(peer_addr);
10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1002e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG(" bta_dm_policy_cback cmd:%d, policy:0x%x",
10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status, policy);
10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch(status)
10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_SYS_PLCY_SET:
10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(!p_dev)
10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return;
10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* restore the default link policy */
10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dev->link_policy |= policy;
10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetLinkPolicy(p_dev->peer_bdaddr, &(p_dev->link_policy));
10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_SYS_PLCY_CLR:
10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(!p_dev)
10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return;
10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* clear the policy from the default link policy */
10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dev->link_policy &= (~policy);
10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetLinkPolicy(p_dev->peer_bdaddr, &(p_dev->link_policy));
10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(policy & (HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_PARK_MODE))
10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
10235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* if clearing sniff/park, wake the link */
10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_pm_active(p_dev->peer_bdaddr);
10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_SYS_PLCY_DEF_SET:
10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* want to restore/set the role switch policy */
10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.role_policy_mask &= ~mask;
10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(0 == bta_dm_cb.role_policy_mask)
10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* if nobody wants to insist on the role */
10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.cur_policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH;
10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTM_SetDefaultLinkPolicy(bta_dm_cb.cur_policy);
10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
10375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTA_SYS_PLCY_DEF_CLR:
10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* want to remove the role switch policy */
10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.role_policy_mask |= mask;
10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.cur_policy &= ~HCI_ENABLE_MASTER_SLAVE_SWITCH;
10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SetDefaultLinkPolicy(bta_dm_cb.cur_policy);
10445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
10465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_auth_reply
10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Send the authorization reply to a request from BTM
10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
10595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_auth_reply (tBTA_DM_MSG *p_data)
10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32  trusted_mask[BTM_SEC_SERVICE_ARRAY_SIZE];
10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   btm_mask_index = 0;
10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32  * current_trusted_mask;
10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    current_trusted_mask = BTM_ReadTrustedMask(p_data->auth_reply.bd_addr);
10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(current_trusted_mask)
10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(trusted_mask, current_trusted_mask, sizeof(trusted_mask));
10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(trusted_mask, 0, sizeof(trusted_mask));
10755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
10765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_data->auth_reply.response != BTA_DM_NOT_AUTH)
10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(p_data->auth_reply.response == BTA_DM_AUTH_PERM)
10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(p_data->auth_reply.service < BTA_MAX_SERVICE_ID)
10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* convert BTA service id to BTM mask */
10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                btm_mask_index =  bta_service_id_to_btm_srv_id_lkup_tbl[p_data->auth_reply.service] / 32;
10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                trusted_mask[btm_mask_index] |= (UINT32)(1 << (bta_service_id_to_btm_srv_id_lkup_tbl[p_data->auth_reply.service] - (UINT32)(btm_mask_index * 32)));
10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_DeviceAuthorized (p_data->auth_reply.bd_addr, BTM_SUCCESS,trusted_mask);
10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_DeviceAuthorized (p_data->auth_reply.bd_addr, BTM_NOT_AUTHORIZED,trusted_mask);
10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_confirm
11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Send the user confirm request reply in response to a
11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  request from BTM
11045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_confirm(tBTA_DM_MSG *p_data)
11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS res = BTM_NOT_AUTHORIZED;
11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_data->confirm.accept == TRUE)
11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        res = BTM_SUCCESS;
11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_ConfirmReqReply(res, p_data->confirm.bd_addr);
11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
11185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_passkey_cancel
11205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Send the passkey cancel from SP initiator by sending a negative
11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  passkey request replyreply.
11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE)
11275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_passkey_cancel(tBTA_DM_MSG *p_data)
11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_PasskeyReqReply(BTM_NOT_AUTHORIZED, p_data->passkey_cancel.bd_addr, 0);
11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
11325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_loc_oob
11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Retrieve the OOB data from the local LM
11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
11405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_OOB_INCLUDED == TRUE)
11435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_loc_oob(tBTA_DM_MSG *p_data)
11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
11455cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
11465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_ReadLocalOobData();
11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_ci_io_req_act
11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      respond to the IO capabilities request from BTM
11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ci_io_req_act(tBTA_DM_MSG *p_data)
11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_AUTH_REQ   auth_req = BTM_AUTH_AP_NO;
11615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_data->ci_io_req.auth_req)
11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        auth_req = BTM_AUTH_AP_YES;
11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_IoCapRsp(p_data->ci_io_req.bd_addr, p_data->ci_io_req.io_cap,
11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_data->ci_io_req.oob_data, auth_req);
11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_ci_rmt_oob_act
11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      respond to the OOB data request for the remote device from BTM
11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
11775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ci_rmt_oob_act(tBTA_DM_MSG *p_data)
11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
11795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS res = BTM_NOT_AUTHORIZED;
11805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_data->ci_rmt_oob.accept == TRUE)
11825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        res = BTM_SUCCESS;
11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_RemoteOobDataReply(res, p_data->ci_rmt_oob.bd_addr,
11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_data->ci_rmt_oob.c, p_data->ci_rmt_oob.r );
11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTM_OOB_INCLUDED */
11875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_start
11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Starts an inquiry
11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
11985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_start (tBTA_DM_MSG *p_data)
11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
12005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_INQUIRY_CMPL result;
12015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1202e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
12035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 len = (UINT16)(sizeof(tBT_UUID) * p_data->search.num_uuid);
12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1206e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_search_start avoid_scatter=%d", bta_dm_cfg.avoid_scatter);
12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bta_dm_cfg.avoid_scatter &&
12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (p_data->search.rs_res == BTA_DM_RS_NONE) && bta_dm_check_av(BTA_DM_API_SEARCH_EVT))
12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&bta_dm_cb.search_msg, &p_data->search, sizeof(tBTA_DM_API_SEARCH));
12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_ClearInqDb(NULL);
12155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* save search params */
12165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.p_search_cback = p_data->search.p_cback;
12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.services = p_data->search.services;
12185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    utl_freebuf((void **)&bta_dm_search_cb.p_srvc_uuid);
12215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((bta_dm_search_cb.num_uuid = p_data->search.num_uuid) != 0 &&
12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         p_data->search.p_uuid != NULL)
12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((bta_dm_search_cb.p_srvc_uuid = (tBT_UUID *)GKI_getbuf(len)) == NULL)
12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1227e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_ERROR("bta_dm_search_start no resources");
12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            result.status = BTA_FAILURE;
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            return;
12335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project//        bta_dm_search_cb.p_srvc_uuid = (tBT_UUID *)GKI_getbuf(len);
12355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(bta_dm_search_cb.p_srvc_uuid, p_data->search.p_uuid, len);
12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
12385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result.status = BTM_StartInquiry(   (tBTM_INQ_PARMS*)&p_data->search.inq_params,
12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        bta_dm_inq_results_cb,
12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        (tBTM_CMPL_CB*) bta_dm_inq_cmpl_cb);
12415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1242e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_EVENT("bta_dm_search_start status=%d", result.status);
12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (result.status != BTM_CMD_STARTED)
12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        result.num_resp = 0;
12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_inq_cmpl_cb ((void *)&result);
12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_cancel
12545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Cancels an ongoing search for devices
12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_cancel (tBTA_DM_MSG *p_data)
12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
12635cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_MSG * p_msg;
12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(BTM_IsInquiryActive())
12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_CancelInquiry();
12695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cancel_notify(NULL);
12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL)
12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT;
12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT;
12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_sys_sendmsg(p_msg);
12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* If no Service Search going on then issue cancel remote name in case it is active */
12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else if (!bta_dm_search_cb.name_discover_done)
12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_CancelRemoteDeviceName();
1282c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie
1283c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie        if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL)
1284c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie        {
1285c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie            p_msg->hdr.event = BTA_DM_REMT_NAME_EVT;
1286c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie            p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT;
1287c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie            bta_sys_sendmsg(p_msg);
1288c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie        }
12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1290c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie    else {
1291c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie        if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL)
1292c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie        {
1293c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie            p_msg->hdr.event = BTA_DM_INQUIRY_CMPL_EVT;
1294c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie            p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT;
1295c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie            bta_sys_sendmsg(p_msg);
1296c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie        }
1297c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie    }
1298c358eed353e80c388ce0424d8cc89d148390ffb1Matthew Xie
1299ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bta_dm_search_cb.gatt_disc_active)
13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cancel_gatt_discovery(bta_dm_search_cb.peer_bdaddr);
13035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
13055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_discover
13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Discovers services on a remote device
13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_discover (tBTA_DM_MSG *p_data)
13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 len = (UINT16)(sizeof(tBT_UUID) * p_data->discover.num_uuid);
13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1322e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_EVENT("bta_dm_discover services_to_search=0x%04X, sdp_search=%d",
13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_data->discover.services, p_data->discover.sdp_search);
13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* save the search condition */
13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.services = p_data->discover.services;
13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    utl_freebuf((void **)&bta_dm_search_cb.p_srvc_uuid);
13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((bta_dm_search_cb.num_uuid = p_data->discover.num_uuid) != 0 &&
13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_data->discover.p_uuid != NULL)
13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((bta_dm_search_cb.p_srvc_uuid = (tBT_UUID *)GKI_getbuf(len)) == NULL)
13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_data->discover.p_cback(BTA_DM_DISC_CMPL_EVT, NULL);
13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return;
13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(bta_dm_search_cb.p_srvc_uuid, p_data->discover.p_uuid, len);
13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.uuid_to_search = bta_dm_search_cb.num_uuid;
13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.p_search_cback = p_data->discover.p_cback;
13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.sdp_search = p_data->discover.sdp_search;
13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.services_to_search = bta_dm_search_cb.services;
13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.service_index = 0;
13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.services_found = 0;
13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.peer_name[0] = 0;
13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.sdp_search = p_data->discover.sdp_search;
13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.p_btm_inq_info = BTM_InqDbRead (p_data->discover.bd_addr);
13517fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    bta_dm_search_cb.transport = p_data->discover.transport;
13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.name_discover_done = FALSE;
13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memcpy(&bta_dm_search_cb.uuid, &p_data->discover.uuid, sizeof(tSDP_UUID));
13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_discover_device(p_data->discover.bd_addr);
13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_di_disc_cmpl
13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Sends event to application when DI discovery complete
13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_di_disc_cmpl(tBTA_DM_MSG *p_data)
13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_DI_DISC_CMPL    di_disc;
13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(&di_disc, 0, sizeof(tBTA_DM_DI_DISC_CMPL));
13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bdcpy(di_disc.bd_addr, bta_dm_search_cb.peer_bdaddr);
13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if((p_data->hdr.offset == SDP_SUCCESS)
13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        || (p_data->hdr.offset == SDP_DB_FULL))
13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
13775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        di_disc.num_record  = SDP_GetNumDiRecords(bta_dm_di_cb.p_di_db);
13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        di_disc.result      = BTA_FAILURE;
13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_di_cb.p_di_db = NULL;
13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.p_search_cback(BTA_DM_DI_DISC_CMPL_EVT, (tBTA_DM_SEARCH *) &di_disc);
13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_di_disc_callback
13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function queries a remote device for DI information.
13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_di_disc_callback(UINT16 result)
13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_MSG * p_msg;
13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL)
14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->hdr.event            = BTA_DM_SEARCH_CMPL_EVT;
14035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->hdr.layer_specific   = BTA_DM_API_DI_DISCOVER_EVT;
14045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->hdr.offset           = result;
14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_msg);
14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         bta_dm_disable_search_and_disc
1412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
1413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      Cancels an ongoing search or discovery for devices in case of
1414ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  a Bluetooth disable
1415ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
1416ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
1417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          void
1418ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
1419ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
1420ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_disable_search_and_disc (void)
1421ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1422ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_DM_DI_DISC_CMPL    di_disc;
1423ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_DM_MSG * p_msg;
1424ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1425ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if(BTM_IsInquiryActive()||(bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE))
1426ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
1427ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        BTM_CancelInquiry();
1428ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_dm_search_cancel_notify(NULL);
1429ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1430ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL)
1431ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
1432ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT;
1433ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT;
1434ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_sys_sendmsg(p_msg);
1435ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1436ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1437ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1438ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /* If no Service Search going on then issue cancel remote name in case it is active */
1439ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    else if (!bta_dm_search_cb.name_discover_done)
1440ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
1441ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        BTM_CancelRemoteDeviceName();
1442ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1443ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL)
1444ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
1445ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT;
1446ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT;
1447ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_sys_sendmsg(p_msg);
1448ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1449ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1450ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    else if(bta_dm_di_cb.p_di_db != NULL)
1451ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
1452ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memset(&di_disc, 0, sizeof(tBTA_DM_DI_DISC_CMPL));
1453ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bdcpy(di_disc.bd_addr, bta_dm_search_cb.peer_bdaddr);
1454ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        di_disc.result      = BTA_FAILURE;
1455ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1456ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_dm_di_cb.p_di_db = NULL;
1457ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_dm_search_cb.p_search_cback(BTA_DM_DI_DISC_CMPL_EVT, NULL);
1458ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1459ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1460ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE) && (BTA_GATT_INCLUDED == TRUE)
1461ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (bta_dm_search_cb.gatt_disc_active)
1462ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
1463ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_dm_cancel_gatt_discovery(bta_dm_search_cb.peer_bdaddr);
1464ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1465ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
1466ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1467ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1468ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
1469ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
14705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_di_disc
14715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function queries a remote device for DI information.
14735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
14765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_di_disc (tBTA_DM_MSG *p_data)
14795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
14805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16  result = BTA_FAILURE;
14815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_MSG *p_msg;
14825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.p_search_cback = p_data->di_disc.p_cback;
14845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bdcpy(bta_dm_search_cb.peer_bdaddr, p_data->di_disc.bd_addr);
14855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_di_cb.p_di_db = p_data->di_disc.p_sdp_db;
14865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if((bta_dm_search_cb.p_sdp_db = (tSDP_DISCOVERY_DB *)GKI_getbuf(BTA_DM_SDP_DB_SIZE)) != NULL)
14885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
14895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ( SDP_DiDiscover(bta_dm_search_cb.peer_bdaddr, p_data->di_disc.p_sdp_db,
14905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_data->di_disc.len, bta_dm_di_disc_callback) == SDP_SUCCESS)
14915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
14925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            result = BTA_SUCCESS;
14935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
14945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
14965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1497e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR("No buffer to start DI discovery");
14985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( result == BTA_FAILURE &&
15015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL)
15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->hdr.event            = BTA_DM_SEARCH_CMPL_EVT;
15045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->hdr.layer_specific   = BTA_DM_API_DI_DISCOVER_EVT;
15055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_data->hdr.offset          = result;
15065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_msg);
15075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
15095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
15115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_read_remote_device_name
15135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Initiate to get remote device name
15155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          TRUE if started to get remote name
15175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
15197fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battastatic BOOLEAN bta_dm_read_remote_device_name (BD_ADDR bd_addr,tBT_TRANSPORT transport)
15205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
15215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS  btm_status;
15225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1523e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_read_remote_device_name");
15245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bdcpy(bta_dm_search_cb.peer_bdaddr, bd_addr);
15265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.peer_name[0] = 0;
15275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btm_status = BTM_ReadRemoteDeviceName (bta_dm_search_cb.peer_bdaddr,
15297fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                           (tBTM_CMPL_CB *) bta_dm_remname_cback,
15307fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                           transport);
15315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( btm_status == BTM_CMD_STARTED )
15335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1534e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_DEBUG("bta_dm_read_remote_device_name: BTM_ReadRemoteDeviceName is started");
15355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (TRUE);
15375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else if ( btm_status == BTM_BUSY )
15395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1540e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_DEBUG("bta_dm_read_remote_device_name: BTM_ReadRemoteDeviceName is busy");
15415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Remote name discovery is on going now so BTM cannot notify through "bta_dm_remname_cback" */
15435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* adding callback to get notified that current reading remore name done */
15445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SecAddRmtNameNotifyCallback(&bta_dm_service_search_remname_cback);
15455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (TRUE);
15475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
15495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1550e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_WARNING("bta_dm_read_remote_device_name: BTM_ReadRemoteDeviceName returns 0x%02X", btm_status);
15515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (FALSE);
15535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
15555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
15575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_inq_cmpl
15595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the inquiry complete event from BTM
15615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
15635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
15655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_inq_cmpl (tBTA_DM_MSG *p_data)
15665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
15675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_MSG * p_msg;
15685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEARCH  data;
15695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1570e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_inq_cmpl");
15715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    data.inq_cmpl.num_resps = p_data->inq_cmpl.num;
15735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.p_search_cback(BTA_DM_INQ_CMPL_EVT, &data);
15745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if((bta_dm_search_cb.p_btm_inq_info = BTM_InqDbFirst()) != NULL)
15765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* start name and service discovery from the first device on inquiry result */
15785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.name_discover_done = FALSE;
15795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.peer_name[0]       = 0;
15805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_discover_device(bta_dm_search_cb.p_btm_inq_info->results.remote_bd_addr);
15815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
15835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
15845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* no devices, search complete */
15855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.services = 0;
15865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL)
15885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
15895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->hdr.event          = BTA_DM_SEARCH_CMPL_EVT;
15905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT;
15915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_sys_sendmsg(p_msg);
15925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
15945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
15955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
15965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
15975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
15985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_rmt_name
15995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the remote name result from BTM
16015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
16035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_rmt_name (tBTA_DM_MSG *p_data)
16065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1607e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_rmt_name");
16085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( p_data->rem_name.result.disc_res.bd_name[0] && bta_dm_search_cb.p_btm_inq_info)
16105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
16115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_btm_inq_info->appl_knows_rem_name = TRUE;
16125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
16135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_discover_device(bta_dm_search_cb.peer_bdaddr);
16155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_disc_rmt_name
16205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the remote name result from BTM when application
16225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  wants to find the name for a bdaddr
16235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
16255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_disc_rmt_name (tBTA_DM_MSG *p_data)
16285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
16295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_INQ_INFO *p_btm_inq_info;
16305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1631e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_disc_rmt_name");
16325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_btm_inq_info = BTM_InqDbRead (p_data->rem_name.result.disc_res.bd_addr);
16345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( p_btm_inq_info )
16355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
16365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( p_data->rem_name.result.disc_res.bd_name[0] )
16375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
16385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_btm_inq_info->appl_knows_rem_name = TRUE;
16395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
16405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
16415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_discover_device(p_data->rem_name.result.disc_res.bd_addr);
16435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
16445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
16465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_sdp_result
16485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process the discovery result from sdp
16505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
16525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
16535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
16545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_sdp_result (tBTA_DM_MSG *p_data)
16555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
16565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tSDP_DISC_REC   *p_sdp_rec = NULL;
16585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_MSG     *p_msg;
16595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN          service_found = FALSE;
16605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN          scn_found = FALSE;
16615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16           service = 0xFFFF;
16625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tSDP_PROTOCOL_ELEM  pe;
16635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
16655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBT_UUID           *p_uuid = bta_dm_search_cb.p_srvc_uuid;
16665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEARCH      result;
16675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBT_UUID            service_uuid;
16685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
16695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32 num_uuids = 0;
16715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8  uuid_list[32][MAX_UUID_SIZE]; // assuming a max of 32 services
16725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if((p_data->sdp_event.sdp_result == SDP_SUCCESS)
16745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        || (p_data->sdp_event.sdp_result == SDP_NO_RECS_MATCH)
16755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        || (p_data->sdp_event.sdp_result == SDP_DB_FULL))
16765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1677e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_DEBUG("sdp_result::0x%x", p_data->sdp_event.sdp_result);
16785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        do
16795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
16805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            service_found = FALSE;
16825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_sdp_rec = NULL;
16835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if( bta_dm_search_cb.service_index == (BTA_USER_SERVICE_ID+1) )
16845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
16855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_sdp_rec = SDP_FindServiceUUIDInDb(bta_dm_search_cb.p_sdp_db, &bta_dm_search_cb.uuid, p_sdp_rec);
16865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
16875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_sdp_rec && SDP_FindProtocolListElemInRec(p_sdp_rec, UUID_PROTOCOL_RFCOMM, &pe))
16885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
16895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.peer_scn = (UINT8) pe.params[0];
16905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    scn_found = TRUE;
16915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
16925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
16935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
16945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
16955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                service = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index-1];
16965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_sdp_rec = SDP_FindServiceInDb(bta_dm_search_cb.p_sdp_db, service, p_sdp_rec);
16975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
16985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
16995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* finished with BR/EDR services, now we check the result for GATT based service UUID */
17005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (bta_dm_search_cb.service_index == BTA_MAX_SERVICE_ID)
17015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
17025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (bta_dm_search_cb.uuid_to_search != 0 && p_uuid != NULL)
17035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
17045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_uuid +=  (bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search);
17055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* only support 16 bits UUID for now */
17065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    service = p_uuid->uu.uuid16;
17075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
17095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* all GATT based services */
17105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                do
17115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
17125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* find a service record, report it */
17135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_sdp_rec = SDP_FindServiceInDb(bta_dm_search_cb.p_sdp_db,
17145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                0, p_sdp_rec);
17155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_sdp_rec)
17165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
17175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if (SDP_FindServiceUUIDInRec(p_sdp_rec, &service_uuid))
17185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
17195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            /* send result back to app now, one by one */
17205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            bdcpy (result.disc_ble_res.bd_addr, bta_dm_search_cb.peer_bdaddr);
1721ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                            BCM_STRNCPY_S((char*)result.disc_ble_res.bd_name, sizeof(BD_NAME), bta_dm_get_remname(), (BD_NAME_LEN));
1722ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                            result.disc_ble_res.bd_name[BD_NAME_LEN] = 0;
17235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            result.disc_ble_res.service.len = service_uuid.len;
17245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            result.disc_ble_res.service.uu.uuid16 = service_uuid.uu.uuid16;
17255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result);
17275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
17285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
17295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (bta_dm_search_cb.uuid_to_search > 0)
17315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
17325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                } while (p_sdp_rec);
17345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
17355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
17365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
17375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
17385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* SDP_DB_FULL means some records with the
17395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project               required attributes were received */
17405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(((p_data->sdp_event.sdp_result == SDP_DB_FULL) &&
17415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.services != BTA_ALL_SERVICE_MASK) ||
17425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    (p_sdp_rec  != NULL))
17435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
17445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* If Plug and Play service record, check to see if Broadcom stack */
17455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (service == UUID_SERVCLASS_PNP_INFORMATION)
17465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
17475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_sdp_rec)
17485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
17495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if (SDP_FindAttributeInRec (p_sdp_rec, ATTR_ID_EXT_BRCM_VERSION))
17505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
17515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            service_found = TRUE;
17525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
17535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
17545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
17555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
17565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
17575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    service_found = TRUE;
17585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
17595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (service_found)
17615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
17625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    UINT16 tmp_svc = 0xFFFF;
17635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.services_found |=
17645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index-1));
17655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    tmp_svc = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index-1];
17665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* Add to the list of UUIDs */
17675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    sdpu_uuid16_to_uuid128(tmp_svc, uuid_list[num_uuids]);
17685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    num_uuids++;
17695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
17705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
17715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
17725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK &&
17745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_search_cb.services_to_search == 0)
17755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
17765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
17775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if ( bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID &&
17785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.uuid_to_search > 0)
17795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.uuid_to_search --;
17805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (bta_dm_search_cb.uuid_to_search == 0 ||
17825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.service_index != BTA_BLE_SERVICE_ID)
17835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
17845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.service_index++;
17855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
17865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else /* regular one service per search or PNP search */
17875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
17885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
17905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        while(bta_dm_search_cb.service_index <= BTA_MAX_SERVICE_ID);
17915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project//        GKI_freebuf(bta_dm_search_cb.p_sdp_db);
17935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project//        bta_dm_search_cb.p_sdp_db = NULL;
1794e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_DEBUG("bta_dm_sdp_result services_found = %04x", bta_dm_search_cb.services_found);
17955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
17965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Collect the 128-bit services here and put them into the list */
17975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK)
17985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
17995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_sdp_rec = NULL;
18005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            do
18015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
18025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                tBT_UUID temp_uuid;
18035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* find a service record, report it */
18045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_sdp_rec = SDP_FindServiceInDb_128bit(bta_dm_search_cb.p_sdp_db, p_sdp_rec);
18055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (p_sdp_rec)
18065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
18075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (SDP_FindServiceUUIDInRec_128bit(p_sdp_rec, &temp_uuid))
18085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
18095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        memcpy(uuid_list[num_uuids], temp_uuid.uu.uuid128, MAX_UUID_SIZE);
18105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        num_uuids++;
18115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
18125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
18135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            } while (p_sdp_rec);
18145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
18155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* if there are more services to search for */
18165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_dm_search_cb.services_to_search)
18175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
18185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* Free up the p_sdp_db before checking the next one */
18195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_free_sdp_db(NULL);
18205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_find_services(bta_dm_search_cb.peer_bdaddr);
18215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
18225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
18235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
18245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* callbacks */
18255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* start next bd_addr if necessary */
18265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTM_SecDeleteRmtNameNotifyCallback(&bta_dm_service_search_remname_cback);
18285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL)
18315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
18325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT;
18335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_msg->disc_result.result.disc_res.result = BTA_SUCCESS;
18345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_msg->disc_result.result.disc_res.p_raw_data = NULL;
18355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_msg->disc_result.result.disc_res.raw_data_size = 0;
18365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_msg->disc_result.result.disc_res.num_uuids = num_uuids;
18375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_msg->disc_result.result.disc_res.p_uuid_list = NULL;
18385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (num_uuids > 0) {
18395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_msg->disc_result.result.disc_res.p_uuid_list = (UINT8*)GKI_getbuf(num_uuids*MAX_UUID_SIZE);
18405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (p_msg->disc_result.result.disc_res.p_uuid_list) {
18415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        memcpy(p_msg->disc_result.result.disc_res.p_uuid_list, uuid_list,
18425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               num_uuids*MAX_UUID_SIZE);
18435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    } else {
18445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       p_msg->disc_result.result.disc_res.num_uuids = 0;
1845e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                       APPL_TRACE_ERROR("%s: Unable to allocate memory for uuid_list", __FUNCTION__);
18465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
18475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
18485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                //copy the raw_data to the discovery result  structure
18495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                //
1850e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                APPL_TRACE_DEBUG("bta_dm_sdp_result (raw_data used = 0x%x raw_data_ptr = 0x%x)\r\n",bta_dm_search_cb.p_sdp_db->raw_used, bta_dm_search_cb.p_sdp_db->raw_data);
18515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (  bta_dm_search_cb.p_sdp_db != NULL && bta_dm_search_cb.p_sdp_db->raw_used != 0   &&
18535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.p_sdp_db->raw_data != NULL) {
18545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_msg->disc_result.result.disc_res.p_raw_data = GKI_getbuf(bta_dm_search_cb.p_sdp_db->raw_used);
18565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ( NULL != p_msg->disc_result.result.disc_res.p_raw_data  ) {
18575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        memcpy(     p_msg->disc_result.result.disc_res.p_raw_data,
18585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    bta_dm_search_cb.p_sdp_db->raw_data,
18595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    bta_dm_search_cb.p_sdp_db->raw_used );
18605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_msg->disc_result.result.disc_res.raw_data_size =
18625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            bta_dm_search_cb.p_sdp_db->raw_used;
18635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    } else {
1865e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                        APPL_TRACE_DEBUG("bta_dm_sdp_result GKI Alloc failed to allocate %d bytes !!\r\n",bta_dm_search_cb.p_sdp_db->raw_used);
18665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
18675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.p_sdp_db->raw_data = NULL;     //no need to free this - it is a global assigned.
18695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.p_sdp_db->raw_used = 0;
18705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.p_sdp_db->raw_size = 0;
18715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
18725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else {
1873e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    APPL_TRACE_DEBUG("bta_dm_sdp_result raw data size is 0 or raw_data is null!!\r\n");
18745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
18755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* Done with p_sdp_db. Free it */
18765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_free_sdp_db(NULL);
18775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found;
18785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                //Piggy back the SCN over result field
18805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if( scn_found )
18815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
18825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                  p_msg->disc_result.result.disc_res.result = (3 + bta_dm_search_cb.peer_scn);
18835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                  p_msg->disc_result.result.disc_res.services |= BTA_USER_SERVICE_MASK;
18845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1885e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                  APPL_TRACE_EVENT(" Piggy back the SCN over result field  SCN=%d", bta_dm_search_cb.peer_scn);
18865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
18885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bdcpy (p_msg->disc_result.result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr);
18895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                BCM_STRNCPY_S((char*)p_msg->disc_result.result.disc_res.bd_name, sizeof(BD_NAME),
18905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        bta_dm_get_remname(), (BD_NAME_LEN-1));
18915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* make sure the string is null terminated */
18935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_msg->disc_result.result.disc_res.bd_name[BD_NAME_LEN-1] = 0;
18945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_sys_sendmsg(p_msg);
18965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
18975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
18985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
18995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
19015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
19025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
19035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* conn failed. No need for timer */
19045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(p_data->sdp_event.sdp_result == SDP_CONN_FAILED || p_data->sdp_event.sdp_result == SDP_CONN_REJECTED
19055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           || p_data->sdp_event.sdp_result == SDP_SECURITY_ERR)
19065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_search_cb.wait_disc = FALSE;
19075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* not able to connect go to next device */
19095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        GKI_freebuf(bta_dm_search_cb.p_sdp_db);
19105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_sdp_db = NULL;
19115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_SecDeleteRmtNameNotifyCallback(&bta_dm_service_search_remname_cback);
19135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL)
19155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
19165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT;
19175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->disc_result.result.disc_res.result = BTA_FAILURE;
19185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found;
19195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy (p_msg->disc_result.result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr);
19205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BCM_STRNCPY_S((char*)p_msg->disc_result.result.disc_res.bd_name, sizeof(BD_NAME),
19215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_get_remname(), (BD_NAME_LEN-1));
19225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* make sure the string is null terminated */
19245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->disc_result.result.disc_res.bd_name[BD_NAME_LEN-1] = 0;
19255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_sys_sendmsg(p_msg);
19275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
19285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
19295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
19325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_cmpl
19345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Sends event to application
19365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
19385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
19405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_cmpl (tBTA_DM_MSG *p_data)
19415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1942e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_search_cmpl");
19435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
19455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    utl_freebuf((void **)&bta_dm_search_cb.p_srvc_uuid);
19465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
19475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->hdr.layer_specific == BTA_DM_API_DI_DISCOVER_EVT)
19495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_di_disc_cmpl(p_data);
19505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
19515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_search_cback(BTA_DM_DISC_CMPL_EVT, NULL);
19525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
19555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_disc_result
19575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Service discovery result when discovering services on a device
19595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
19615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
19635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_disc_result (tBTA_DM_MSG *p_data)
19645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
19655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_MSG *      p_msg;
19665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1967e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_disc_result");
19685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
19705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if any BR/EDR service discovery has been done, report the event */
19715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((bta_dm_search_cb.services & ((BTA_ALL_SERVICE_MASK | BTA_USER_SERVICE_MASK ) & ~BTA_BLE_SERVICE_MASK)))
19725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
19735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.p_search_cback(BTA_DM_DISC_RES_EVT, &p_data->disc_result.result);
19745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* send a message to change state */
19765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL)
19775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
19785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT;
19795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT;
19805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_msg);
19815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
19825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
19835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
19855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_result
19875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Service discovery result while searching for devices
19895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
19915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
19925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
19935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_result (tBTA_DM_MSG *p_data)
19945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1995e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_search_result searching:0x%04x, result:0x%04x",
19965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       bta_dm_search_cb.services,
19975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       p_data->disc_result.result.disc_res.services);
19985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
19995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* call back if application wants name discovery or found services that application is searching */
20005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (( !bta_dm_search_cb.services )
20015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project      ||(( bta_dm_search_cb.services ) && ( p_data->disc_result.result.disc_res.services )))
20025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
20035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_search_cback(BTA_DM_DISC_RES_EVT, &p_data->disc_result.result);
20045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
20055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if searching did not initiate to create link */
20075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(!bta_dm_search_cb.wait_disc )
20085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
20095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTM_EIR_CLIENT_INCLUDED == TRUE )
20105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* if service searching is done with EIR, don't search next device */
20115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( bta_dm_search_cb.p_btm_inq_info )
20125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
20135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_discover_next_device();
20145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
20155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
20165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
20175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* wait until link is disconnected or timeout */
20185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.sdp_results = TRUE;
20195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.search_timer.p_cback = (TIMER_CBACK*)&bta_dm_search_timer_cback;
20205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_start_timer(&bta_dm_search_cb.search_timer, 0, 1000*(L2CAP_LINK_INACTIVITY_TOUT+1) );
20215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
20225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
20245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
20265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_timer_cback
20285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Called when ACL disconnect time is over
20305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
20335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
20355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_search_timer_cback (TIMER_LIST_ENT *p_tle)
20365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
20375cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_tle);
20385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2039e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_EVENT(" bta_dm_search_timer_cback  ");
20405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.wait_disc = FALSE;
20415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* proceed with next device */
20435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_discover_next_device();
20445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
20465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
20495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_free_sdp_db
20515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Frees SDP data base
20535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
20555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
20575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_free_sdp_db (tBTA_DM_MSG *p_data)
20585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
20595cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
20605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_search_cb.p_sdp_db)
20615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
20625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        GKI_freebuf(bta_dm_search_cb.p_sdp_db);
20635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_sdp_db = NULL;
20645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
20655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
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** Function         bta_dm_queue_search
20715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Queues search command while search is being cancelled
20735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
20755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
20775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_queue_search (tBTA_DM_MSG *p_data)
20785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2079b69a17518356f4ed0cd320441d67c22e2f6de6a1Zhihai Xu    if(bta_dm_search_cb.p_search_queue)
2080b69a17518356f4ed0cd320441d67c22e2f6de6a1Zhihai Xu    {
2081b69a17518356f4ed0cd320441d67c22e2f6de6a1Zhihai Xu        GKI_freebuf(bta_dm_search_cb.p_search_queue);
2082b69a17518356f4ed0cd320441d67c22e2f6de6a1Zhihai Xu    }
20835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.p_search_queue = (tBTA_DM_MSG *)GKI_getbuf(sizeof(tBTA_DM_API_SEARCH));
20855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memcpy(bta_dm_search_cb.p_search_queue, p_data, sizeof(tBTA_DM_API_SEARCH));
20865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
20885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
20895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
20905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_queue_disc
20925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Queues discovery command while search is being cancelled
20945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
20965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
20975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
20985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_queue_disc (tBTA_DM_MSG *p_data)
20995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2100b69a17518356f4ed0cd320441d67c22e2f6de6a1Zhihai Xu    if(bta_dm_search_cb.p_search_queue)
2101b69a17518356f4ed0cd320441d67c22e2f6de6a1Zhihai Xu    {
2102b69a17518356f4ed0cd320441d67c22e2f6de6a1Zhihai Xu        GKI_freebuf(bta_dm_search_cb.p_search_queue);
2103b69a17518356f4ed0cd320441d67c22e2f6de6a1Zhihai Xu    }
21045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.p_search_queue = (tBTA_DM_MSG *)GKI_getbuf(sizeof(tBTA_DM_API_DISCOVER));
21065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memcpy(bta_dm_search_cb.p_search_queue, p_data, sizeof(tBTA_DM_API_DISCOVER));
21075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
21095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
21115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_clear_queue
21135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Clears the queue if API search cancel is called
21155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
21175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
21195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_clear_queue (tBTA_DM_MSG *p_data)
21205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
21215cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
21225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_search_cb.p_search_queue)
21235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
21245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        GKI_freebuf(bta_dm_search_cb.p_search_queue);
21255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_search_queue = NULL;
21265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
21275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
21305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
21325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_cancel_cmpl
21345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Search cancel is complete
21365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
21385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
21405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_cancel_cmpl (tBTA_DM_MSG *p_data)
21415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
21425cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
21435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_search_cb.p_search_queue)
21445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
21455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(bta_dm_search_cb.p_search_queue);
21465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_search_queue = NULL;
21475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
21485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
21505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
21525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_cancel_transac_cmpl
21545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Current Service Discovery or remote name procedure is
21565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  completed after search cancellation
21575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
21595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
21615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_cancel_transac_cmpl(tBTA_DM_MSG *p_data)
21625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
21635cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
21645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_search_cb.p_sdp_db)
21655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
21665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        GKI_freebuf(bta_dm_search_cb.p_sdp_db);
21675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_sdp_db = NULL;
21685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
21695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cancel_notify(NULL);
21715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
21725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
21745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
21755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_search_cancel_notify
21775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Notify application that search has been cancelled
21795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
21815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
21825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
21835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_cancel_notify (tBTA_DM_MSG *p_data)
21845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
21855cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
21865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bta_dm_search_cb.p_search_cback)
21875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
21885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_search_cback(BTA_DM_SEARCH_CANCEL_CMPL_EVT, NULL);
21895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
21905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!bta_dm_search_cb.name_discover_done)
21915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
21925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_CancelRemoteDeviceName();
21935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2194ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE) && (BTA_GATT_INCLUDED == TRUE)
21955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bta_dm_search_cb.gatt_disc_active)
21965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
21975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cancel_gatt_discovery(bta_dm_search_cb.peer_bdaddr);
21985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
21995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
22005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
22025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
22045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_find_services
22065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Starts discovery on a device
22085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
22105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
22115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
22125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_find_services ( BD_ADDR bd_addr)
22135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
22145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tSDP_UUID    uuid;
22165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16       attr_list[] = {ATTR_ID_SERVICE_CLASS_ID_LIST, ATTR_ID_EXT_BRCM_VERSION};
22175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16       num_attrs = 1;
22185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_MSG *p_msg;
22195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset (&uuid, 0, sizeof(tSDP_UUID));
22215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    while(bta_dm_search_cb.service_index < BTA_MAX_SERVICE_ID)
22235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
22245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( bta_dm_search_cb.services_to_search
22255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            & (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index)))
22265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
22275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if((bta_dm_search_cb.p_sdp_db = (tSDP_DISCOVERY_DB *)GKI_getbuf(BTA_DM_SDP_DB_SIZE)) != NULL)
22285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
2229e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                APPL_TRACE_DEBUG("bta_dm_search_cb.services = %04x***********", bta_dm_search_cb.services);
22305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* try to search all services by search based on L2CAP UUID */
22315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if(bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK )
22325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
2233e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    APPL_TRACE_ERROR("services_to_search = %08x",bta_dm_search_cb.services_to_search);
22345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (bta_dm_search_cb.services_to_search & BTA_RES_SERVICE_MASK)
22355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
22365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        uuid.uu.uuid16 = bta_service_id_to_uuid_lkup_tbl[0];
22375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        bta_dm_search_cb.services_to_search &= ~BTA_RES_SERVICE_MASK;
22385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
22395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    else
22405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
22415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        uuid.uu.uuid16 = UUID_PROTOCOL_L2CAP;
22425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        bta_dm_search_cb.services_to_search = 0;
22435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
22445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
22455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
22465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
22475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
22485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* for LE only profile */
22495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID)
22505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
22515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if (bta_dm_search_cb.uuid_to_search > 0 && bta_dm_search_cb.p_srvc_uuid)
22525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        {
22535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            memcpy(&uuid,
22545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                   (const void *)(bta_dm_search_cb.p_srvc_uuid + \
22555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                  bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search),
22565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                   sizeof(tBT_UUID));
22575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            bta_dm_search_cb.uuid_to_search -- ;
22595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        }
22605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        else
22615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            uuid.uu.uuid16 = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index];
22625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        /* last one? clear the BLE service bit if all discovery has been done */
22645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        if (bta_dm_search_cb.uuid_to_search == 0)
22655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            bta_dm_search_cb.services_to_search &=
22665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            (tBTA_SERVICE_MASK)(~(BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index)));
22675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
22695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    else
22705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
22715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
22725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        /* remove the service from services to be searched  */
22735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        bta_dm_search_cb.services_to_search &=
22745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        (tBTA_SERVICE_MASK)(~(BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index)));
22755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        uuid.uu.uuid16 = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index];
22765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
22775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
22785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (uuid.len == 0)
22805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                uuid.len = LEN_UUID_16;
22815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0
22835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (uuid.uu.uuid16 == UUID_SERVCLASS_PNP_INFORMATION)
22845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
22855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    num_attrs = 2;
22865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
22875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
22885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (bta_dm_search_cb.service_index == BTA_USER_SERVICE_ID)
22905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
22915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    memcpy(&uuid, &bta_dm_search_cb.uuid, sizeof(tSDP_UUID));
22925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
22935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2295e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                APPL_TRACE_ERROR("****************search UUID = %04x***********", uuid.uu.uuid16);
22965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                //SDP_InitDiscoveryDb (bta_dm_search_cb.p_sdp_db, BTA_DM_SDP_DB_SIZE, 1, &uuid, num_attrs, attr_list);
22975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                SDP_InitDiscoveryDb (bta_dm_search_cb.p_sdp_db, BTA_DM_SDP_DB_SIZE, 1, &uuid, 0, NULL);
22985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
22995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memset(g_disc_raw_data_buf, 0, sizeof(g_disc_raw_data_buf));
23015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_search_cb.p_sdp_db->raw_data = g_disc_raw_data_buf;
23025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_search_cb.p_sdp_db->raw_size = MAX_DISC_RAW_DATA_BUF;
23045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (!SDP_ServiceSearchAttributeRequest (bd_addr, bta_dm_search_cb.p_sdp_db, &bta_dm_sdp_callback))
23065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
23075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* if discovery not successful with this device
23085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    proceed to next one */
23095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    GKI_freebuf(bta_dm_search_cb.p_sdp_db);
23105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.p_sdp_db = NULL;
23115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.service_index = BTA_MAX_SERVICE_ID;
23125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
23145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
23155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
23165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
23175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ((bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID &&
23185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                         bta_dm_search_cb.uuid_to_search == 0) ||
23195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                         bta_dm_search_cb.service_index != BTA_BLE_SERVICE_ID)
23205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
23215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.service_index++;
23225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    return;
23235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
23245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
23255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
23265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
2327e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                APPL_TRACE_ERROR("#### Failed to allocate SDP DB buffer! ####");
23285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
23295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
23305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.service_index++;
23325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
23335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* no more services to be discovered */
23355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_search_cb.service_index >= BTA_MAX_SERVICE_ID)
23365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
23375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL)
23385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
23395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT;
23405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found;
23415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy (p_msg->disc_result.result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr);
23425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BCM_STRNCPY_S((char*)p_msg->disc_result.result.disc_res.bd_name, sizeof(BD_NAME),
23435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_get_remname(), (BD_NAME_LEN-1));
23445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* make sure the string is terminated */
23465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->disc_result.result.disc_res.bd_name[BD_NAME_LEN-1] = 0;
23475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_sys_sendmsg(p_msg);
23495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
23505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
23515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
23525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
23545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_discover_next_device
23565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Starts discovery on the next device in Inquiry data base
23585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
23605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
23625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_discover_next_device(void)
23635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
23645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_MSG * p_msg;
23665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2367e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_discover_next_device");
23685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* searching next device on inquiry result */
23705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if((bta_dm_search_cb.p_btm_inq_info = BTM_InqDbNext(bta_dm_search_cb.p_btm_inq_info)) != NULL)
23715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
23725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.name_discover_done = FALSE;
23735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.peer_name[0]       = 0;
23745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_discover_device(bta_dm_search_cb.p_btm_inq_info->results.remote_bd_addr);
23755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
23765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
23775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
23785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* no devices, search complete */
23795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.services = 0;
23805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL)
23825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
23835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->hdr.event          = BTA_DM_SEARCH_CMPL_EVT;
23845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT;
23855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_sys_sendmsg(p_msg);
23865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
23875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
23885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
23895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
23905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
23915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_discover_device
23935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Starts name and service discovery on the device
23955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
23975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
23985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
23995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_discover_device(BD_ADDR remote_bd_addr)
24005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
24015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_MSG * p_msg;
24027fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR;
24037fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
24047fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        tBT_DEVICE_TYPE dev_type;
24057fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        tBLE_ADDR_TYPE  addr_type;
24067fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
24077fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if (bta_dm_search_cb.transport == BTA_TRANSPORT_UNKNOWN)
24087fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    {
24097fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        BTM_ReadDevInfo(remote_bd_addr, &dev_type, &addr_type);
24107fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if (dev_type == BT_DEVICE_TYPE_BLE || addr_type == BLE_ADDR_RANDOM )
24117fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            transport = BT_TRANSPORT_LE;
24127fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    }
24137fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    else
24147fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        transport = bta_dm_search_cb.transport;
24157fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
24167fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
24175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2418e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_discover_device, BDA:0x%02X%02X%02X%02X%02X%02X",
24195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        remote_bd_addr[0],remote_bd_addr[1],
24205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        remote_bd_addr[2],remote_bd_addr[3],
24215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        remote_bd_addr[4],remote_bd_addr[5]);
24225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bdcpy(bta_dm_search_cb.peer_bdaddr, remote_bd_addr);
24245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2425e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_discover_device name_discover_done = %d p_btm_inq_info 0x%x ",
24265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        bta_dm_search_cb.name_discover_done,
24275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        bta_dm_search_cb.p_btm_inq_info
24285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        );
24295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( bta_dm_search_cb.p_btm_inq_info ) {
24305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2431e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_DEBUG("bta_dm_discover_device appl_knows_rem_name %d",
24325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            bta_dm_search_cb.p_btm_inq_info->appl_knows_rem_name
24335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            );
24345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
24355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if name discovery is not done and application needs remote name */
24375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((!bta_dm_search_cb.name_discover_done)
24385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project       && (( bta_dm_search_cb.p_btm_inq_info == NULL )
24395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ||(bta_dm_search_cb.p_btm_inq_info && (!bta_dm_search_cb.p_btm_inq_info->appl_knows_rem_name))))
24405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
24417fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            if(bta_dm_read_remote_device_name(bta_dm_search_cb.peer_bdaddr, transport) == TRUE)
24425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
24435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return;
24445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
24455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
24465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
24475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* starting name discovery failed */
24485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_search_cb.name_discover_done = TRUE;
24495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
24505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
24515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if application wants to discover service */
24535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( bta_dm_search_cb.services )
24545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
24555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* initialize variables */
24565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.service_index      = 0;
24575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.services_found     = 0;
24585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.services_to_search = bta_dm_search_cb.services;
24595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
24605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.uuid_to_search     = bta_dm_search_cb.num_uuid;
24615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
24625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTM_EIR_CLIENT_INCLUDED == TRUE )
24635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((bta_dm_search_cb.p_btm_inq_info != NULL) &&
24645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project			bta_dm_search_cb.services != BTA_USER_SERVICE_MASK
24655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            &&(bta_dm_search_cb.sdp_search == FALSE))
24665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
24675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* check if EIR provides the information of supported services */
24685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_eir_search_services( &bta_dm_search_cb.p_btm_inq_info->results,
24695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &bta_dm_search_cb.services_to_search,
24705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        &bta_dm_search_cb.services_found );
24715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
24725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* if seaching with EIR is not completed */
24745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_dm_search_cb.services_to_search)
24755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
24765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
24775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* check whether connection already exists to the device
24785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project               if connection exists, we don't have to wait for ACL
24795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project               link to go down to start search on next device */
24807fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            if (BTM_IsAclConnectionUp(bta_dm_search_cb.peer_bdaddr, BT_TRANSPORT_BR_EDR))
24815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_search_cb.wait_disc = FALSE;
24825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
24835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_search_cb.wait_disc = TRUE;
24845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
24855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE && (defined BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE))
24865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( bta_dm_search_cb.p_btm_inq_info )
24875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
2488e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                APPL_TRACE_DEBUG("bta_dm_discover_device p_btm_inq_info 0x%x results.device_type 0x%x services_to_search 0x%x",
24895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    bta_dm_search_cb.p_btm_inq_info,
24905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    bta_dm_search_cb.p_btm_inq_info->results.device_type,
24915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    bta_dm_search_cb.services_to_search
24925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    );
24935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
24947fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            if (transport == BT_TRANSPORT_LE)            /*
24955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( bta_dm_search_cb.p_btm_inq_info != NULL &&
24965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                 bta_dm_search_cb.p_btm_inq_info->results.device_type == BT_DEVICE_TYPE_BLE &&
24975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                 (bta_dm_search_cb.services_to_search & BTA_BLE_SERVICE_MASK))*/
24985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
24995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (bta_dm_search_cb.services_to_search & BTA_BLE_SERVICE_MASK)
25005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
25015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    //set the raw data buffer here
25025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    memset(g_disc_raw_data_buf, 0, sizeof(g_disc_raw_data_buf));
25035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.p_ble_rawdata = g_disc_raw_data_buf;
25045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.ble_raw_size = MAX_DISC_RAW_DATA_BUF;
25065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_search_cb.ble_raw_used = 0;
25075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* start GATT for service discovery */
25095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    btm_dm_start_gatt_discovery(bta_dm_search_cb.peer_bdaddr);
25105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    return;
25115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
25125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
25135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
25145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
25155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
25165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_search_cb.sdp_results = FALSE;
25175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_find_services(bta_dm_search_cb.peer_bdaddr);
25185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return;
25205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
25215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
25225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
25235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* name discovery and service discovery are done for this device */
25255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL)
25265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
25275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT;
25285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* initialize the data structure - includes p_raw_data and raw_data_size */
25295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(&(p_msg->disc_result.result), 0, sizeof(tBTA_DM_DISC_RES));
25305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->disc_result.result.disc_res.result = BTA_SUCCESS;
25315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found;
25325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy (p_msg->disc_result.result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr);
25335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BCM_STRNCPY_S((char*)p_msg->disc_result.result.disc_res.bd_name,  sizeof(BD_NAME),
25345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      (char*)bta_dm_search_cb.peer_name, (BD_NAME_LEN-1));
25355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* make sure the string is terminated */
25375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->disc_result.result.disc_res.bd_name[BD_NAME_LEN-1] = 0;
25385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_msg);
25405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
25415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
25425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
25445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_sdp_callback
25465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback from sdp with discovery status
25485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
25505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
25525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_sdp_callback (UINT16 sdp_status)
25535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
25545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SDP_RESULT * p_msg;
25565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_msg = (tBTA_DM_SDP_RESULT *) GKI_getbuf(sizeof(tBTA_DM_SDP_RESULT))) != NULL)
25585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
25595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->hdr.event = BTA_DM_SDP_RESULT_EVT;
25605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->sdp_result = sdp_status;
25615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_msg);
25625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
25645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
25655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
25675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_inq_results_cb
25695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Inquiry results callback from BTM
25715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
25735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
25745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
25755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_inq_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir)
25765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
25775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEARCH     result;
25795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_INQ_INFO      *p_inq_info;
25805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16             service_class;
25815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bdcpy(result.inq_res.bd_addr, p_inq->remote_bd_addr);
25835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memcpy(result.inq_res.dev_class, p_inq->dev_class, DEV_CLASS_LEN);
25845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_COD_SERVICE_CLASS(service_class, p_inq->dev_class);
25855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result.inq_res.is_limited = (service_class & BTM_COD_SERVICE_LMTD_DISCOVER)?TRUE:FALSE;
25865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result.inq_res.rssi = p_inq->rssi;
25875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE)
25895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result.inq_res.ble_addr_type    = p_inq->ble_addr_type;
25905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result.inq_res.inq_result_type  = p_inq->inq_result_type;
25915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result.inq_res.device_type      = p_inq->device_type;
25927fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    result.inq_res.flag             = p_inq->flag;
25935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
25945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* application will parse EIR to find out remote device name */
25965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result.inq_res.p_eir = p_eir;
25975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
25985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if((p_inq_info = BTM_InqDbRead(p_inq->remote_bd_addr)) != NULL)
25995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
26005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* initialize remt_name_not_required to FALSE so that we get the name by default */
26015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        result.inq_res.remt_name_not_required = FALSE;
26025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
26045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_search_cb.p_search_cback)
26065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_search_cback(BTA_DM_INQ_RES_EVT, &result);
26075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_inq_info)
26095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
26105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* application indicates if it knows the remote name, inside the callback
26115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         copy that to the inquiry data base*/
26125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(result.inq_res.remt_name_not_required)
26135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_inq_info->appl_knows_rem_name = TRUE;
26145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
26165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
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** Function         bta_dm_inq_cmpl_cb
26245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Inquiry complete callback from BTM
26265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
26285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
26305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_inq_cmpl_cb (void * p_result)
26315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
26325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_MSG * p_msg;
26345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2635e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_inq_cmpl_cb");
26365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL)
26375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
26385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->inq_cmpl.hdr.event = BTA_DM_INQUIRY_CMPL_EVT;
26395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->inq_cmpl.num = ((tBTM_INQUIRY_CMPL *)p_result)->num_resp;
26405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_msg);
26415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
26435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
26465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
26485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_service_search_remname_cback
26505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Remote name call back from BTM during service discovery
26525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
26545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
26555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
26565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_service_search_remname_cback (BD_ADDR bd_addr, DEV_CLASS dc, BD_NAME bd_name)
26575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
26585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_REMOTE_DEV_NAME    rem_name;
26595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS             btm_status;
26605cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(dc);
26615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2662e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_service_search_remname_cback name=<%s>", bd_name);
26635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if this is what we are looking for */
26655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!bdcmp( bta_dm_search_cb.peer_bdaddr, bd_addr))
26665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
26675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        rem_name.length = strlen((char*)bd_name);
26685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (rem_name.length > (BD_NAME_LEN-1))
26695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
26705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            rem_name.length = (BD_NAME_LEN-1);
26715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            rem_name.remote_bd_name[(BD_NAME_LEN-1)] = 0;
26725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
26735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BCM_STRNCPY_S((char*)rem_name.remote_bd_name,  sizeof(BD_NAME), (char*)bd_name, (BD_NAME_LEN-1));
26745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        rem_name.status = BTM_SUCCESS;
26755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_remname_cback(&rem_name);
26775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
26785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
26795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
26805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* get name of device */
26815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btm_status = BTM_ReadRemoteDeviceName (bta_dm_search_cb.peer_bdaddr,
26827fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                                (tBTM_CMPL_CB *) bta_dm_remname_cback,
26837fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                                BT_TRANSPORT_BR_EDR);
26845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ( btm_status == BTM_BUSY )
26855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
26865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* wait for next chance(notification of remote name discovery done) */
2687e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_DEBUG("bta_dm_service_search_remname_cback: BTM_ReadRemoteDeviceName is busy");
26885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
26895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else if ( btm_status != BTM_CMD_STARTED )
26905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
26915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* if failed to start getting remote name then continue */
2692e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_WARNING("bta_dm_service_search_remname_cback: BTM_ReadRemoteDeviceName returns 0x%02X", btm_status);
26935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
26945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            rem_name.length = 0;
26955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            rem_name.remote_bd_name[0] = 0;
26965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            rem_name.status = btm_status;
26975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_remname_cback(&rem_name);
26985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
26995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
27005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
27015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
27045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_remname_cback
27065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Remote name complete call back from BTM
27085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
27105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
27125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_remname_cback (tBTM_REMOTE_DEV_NAME *p_remote_name)
27135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
27145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_REM_NAME * p_msg;
27155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2716e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_remname_cback len = %d name=<%s>", p_remote_name->length,
2717ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                      p_remote_name->remote_bd_name);
27185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* remote name discovery is done but it could be failed */
27205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.name_discover_done = TRUE;
2721ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BCM_STRNCPY_S((char*)bta_dm_search_cb.peer_name, sizeof(BD_NAME), (char*)p_remote_name->remote_bd_name, (BD_NAME_LEN));
2722ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bta_dm_search_cb.peer_name[BD_NAME_LEN]=0;
27235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SecDeleteRmtNameNotifyCallback(&bta_dm_service_search_remname_cback);
27257fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
2726ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
27277fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if (bta_dm_search_cb.transport == BT_TRANSPORT_LE )
27287fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    {
27297fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta       GAP_BleReadPeerPrefConnParams (bta_dm_search_cb.peer_bdaddr);
27307fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    }
2731ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
27325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_msg = (tBTA_DM_REM_NAME *) GKI_getbuf(sizeof(tBTA_DM_REM_NAME))) != NULL)
27335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
27345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy (p_msg->result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr);
2735ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        BCM_STRNCPY_S((char*)p_msg->result.disc_res.bd_name, sizeof(BD_NAME), (char*)p_remote_name->remote_bd_name, (BD_NAME_LEN));
27365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* make sure the string is null terminated */
2738ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_msg->result.disc_res.bd_name[BD_NAME_LEN] = 0;
27395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->hdr.event = BTA_DM_REMT_NAME_EVT;
27415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_msg);
27425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
27445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
27455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
27475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_authorize_cback
27495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      cback requesting authorization
27515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
27535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
27545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
27555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_authorize_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name,
27565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT8 *service_name, UINT8 service_id, BOOLEAN is_originator)
27575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
27585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
27595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8       index = 1;
27605cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(service_name);
27615cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(is_originator);
27625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bdcpy(sec_event.authorize.bd_addr, bd_addr);
27645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memcpy(sec_event.authorize.dev_class, dev_class, DEV_CLASS_LEN);
27655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BCM_STRNCPY_S((char*)sec_event.authorize.bd_name, sizeof(BD_NAME), (char*)bd_name, (BD_NAME_LEN-1));
27675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* make sure the string is null terminated */
27695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    sec_event.authorize.bd_name[BD_NAME_LEN-1] = 0;
27705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( defined(BTA_JV_INCLUDED) && BTA_JV_INCLUDED == TRUE )
27725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    sec_event.authorize.service = service_id;
27735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
27745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    while(index < BTA_MAX_SERVICE_ID)
27765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
27775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* get the BTA service id corresponding to BTM id */
27785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_service_id_to_btm_srv_id_lkup_tbl[index] == service_id)
27795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
27805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            sec_event.authorize.service = index;
27815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
27825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
27835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        index++;
27845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
27855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
27875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if supported service callback otherwise not authorized */
27885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_cb.p_sec_cback && (index < BTA_MAX_SERVICE_ID
27895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( defined(BTA_JV_INCLUDED) && BTA_JV_INCLUDED == TRUE )
27905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* pass through JV service ID */
27915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        || (service_id >= BTA_FIRST_JV_SERVICE_ID && service_id <= BTA_LAST_JV_SERVICE_ID)
27925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
27935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ))
27945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
27955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(BTA_DM_AUTHORIZE_EVT, &sec_event);
27965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTM_CMD_STARTED;
27975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
27985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
27995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
28005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTM_NOT_AUTHORIZED;
28015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
28025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
28035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
28095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_pinname_cback
28115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback requesting pin_key
28135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
28155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
28175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_pinname_cback (void *p_data)
28185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
28195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_REMOTE_DEV_NAME *p_result = (tBTM_REMOTE_DEV_NAME *)p_data;
28205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC           sec_event;
28215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32                bytes_to_copy;
28225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC_EVT       event = bta_dm_cb.pin_evt;
28235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (BTA_DM_SP_CFM_REQ_EVT == event)
28255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2826181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        /* Retrieved saved device class and bd_addr */
2827181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        bdcpy(sec_event.cfm_req.bd_addr, bta_dm_cb.pin_bd_addr);
2828181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        BTA_COPY_DEVICE_CLASS(sec_event.cfm_req.dev_class, bta_dm_cb.pin_dev_class);
28295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2830181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        if (p_result && p_result->status == BTM_SUCCESS)
2831181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        {
2832181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            bytes_to_copy = (p_result->length < (BD_NAME_LEN-1))
28335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ? p_result->length : (BD_NAME_LEN-1);
2834181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            memcpy(sec_event.cfm_req.bd_name, p_result->remote_bd_name, bytes_to_copy);
2835181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            sec_event.pin_req.bd_name[BD_NAME_LEN-1] = 0;
2836181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        }
2837181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        else    /* No name found */
2838181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            sec_event.cfm_req.bd_name[0] = 0;
28395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2840181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        sec_event.key_notif.passkey    = bta_dm_cb.num_val; /* get PIN code numeric number */
28415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* 1 additional event data fields for this event */
28435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.cfm_req.just_works = bta_dm_cb.just_works;
28445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
28455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
28465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2847181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        /* Retrieved saved device class and bd_addr */
2848181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        bdcpy(sec_event.pin_req.bd_addr, bta_dm_cb.pin_bd_addr);
2849181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        BTA_COPY_DEVICE_CLASS(sec_event.pin_req.dev_class, bta_dm_cb.pin_dev_class);
28505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2851181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        if (p_result && p_result->status == BTM_SUCCESS)
2852181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        {
2853181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            bytes_to_copy = (p_result->length < (BD_NAME_LEN-1))
28545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ? p_result->length : (BD_NAME_LEN-1);
2855181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            memcpy(sec_event.pin_req.bd_name, p_result->remote_bd_name, bytes_to_copy);
2856181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            sec_event.pin_req.bd_name[BD_NAME_LEN-1] = 0;
2857181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        }
2858181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        else    /* No name found */
2859181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            sec_event.pin_req.bd_name[0] = 0;
28605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2861181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        event = bta_dm_cb.pin_evt;
2862181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach        sec_event.key_notif.passkey    = bta_dm_cb.num_val; /* get PIN code numeric number */
28635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
28645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( bta_dm_cb.p_sec_cback )
28665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(event, &sec_event);
28675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
28685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
28725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_pin_cback
28745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback requesting pin_key
28765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
28785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
28795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
28805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_pin_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name)
28815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
28825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
28835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!bta_dm_cb.p_sec_cback)
28855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTM_NOT_AUTHORIZED;
28865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* If the device name is not known, save bdaddr and devclass and initiate a name request */
28885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bd_name[0] == 0)
28895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
28905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.pin_evt = BTA_DM_PIN_REQ_EVT;
28915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy(bta_dm_cb.pin_bd_addr, bd_addr);
28925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, dev_class);
28937fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if ((BTM_ReadRemoteDeviceName(bd_addr, bta_dm_pinname_cback, BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED)
28945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return BTM_CMD_STARTED;
28955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2896e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_WARNING(" bta_dm_pin_cback() -> Failed to start Remote Name Request  ");
28975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
28985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
28995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bdcpy(sec_event.pin_req.bd_addr, bd_addr);
29005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_COPY_DEVICE_CLASS(sec_event.pin_req.dev_class, dev_class);
29015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BCM_STRNCPY_S((char*)sec_event.pin_req.bd_name, sizeof(BD_NAME), (char*)bd_name, (BD_NAME_LEN-1));
29025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    sec_event.pin_req.bd_name[BD_NAME_LEN-1] = 0;
29035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_cb.p_sec_cback(BTA_DM_PIN_REQ_EVT, &sec_event);
29055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return BTM_CMD_STARTED;
29065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
29075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
29115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_link_key_request_cback
29135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback requesting linkkey
29155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
29175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
29195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8  bta_dm_link_key_request_cback (BD_ADDR bd_addr, LINK_KEY key)
29205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
29215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Application passes all link key to
29225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM during initialization using add_device
29235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    API. If BTM doesn't have the link key in it's
29245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    data base, that's because application doesn't
29255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    it */
29265cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(bd_addr);
29275cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(key);
29285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return BTM_NOT_AUTHORIZED;
29305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
29315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
29375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_new_link_key_cback
29395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback from BTM to notify new link key
29415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
29435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
29455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8  bta_dm_new_link_key_cback(BD_ADDR bd_addr, DEV_CLASS dev_class,
29465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        BD_NAME bd_name, LINK_KEY key, UINT8 key_type)
29475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
29485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
29495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_AUTH_CMPL *p_auth_cmpl;
29505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8             event;
29515cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(dev_class);
29525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset (&sec_event, 0, sizeof(tBTA_DM_SEC));
29545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Not AMP Key type */
29565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (key_type != HCI_LKEY_TYPE_AMP_WIFI && key_type != HCI_LKEY_TYPE_AMP_UWB)
29575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
29585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        event = BTA_DM_AUTH_CMPL_EVT;
29595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_auth_cmpl = &sec_event.auth_cmpl;
29605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy(p_auth_cmpl->bd_addr, bd_addr);
29625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p_auth_cmpl->bd_name, bd_name, (BD_NAME_LEN-1));
29645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_auth_cmpl->bd_name[BD_NAME_LEN-1] = 0;
29655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_auth_cmpl->key_present = TRUE;
29675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_auth_cmpl->key_type = key_type;
29685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_auth_cmpl->success = TRUE;
29695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p_auth_cmpl->key, key, LINK_KEY_LEN);
29715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.auth_cmpl.fail_reason = HCI_SUCCESS;
29725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_dm_cb.p_sec_cback)
29745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
29755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(event, &sec_event);
29765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
29775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
29785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
29795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2980e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_WARNING(" bta_dm_new_link_key_cback() Received AMP Key??  ");
29815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
29825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return BTM_CMD_STARTED;
29845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
29855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
29875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
29885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_authentication_complete_cback
29905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Authentication complete callback from BTM
29925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
29945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
29955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
29965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_authentication_complete_cback(BD_ADDR bd_addr, DEV_CLASS dev_class,BD_NAME bd_name, int result)
29975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
29985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
29995cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(dev_class);
30005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(result != BTM_SUCCESS)
30025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
30035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memset(&sec_event, 0, sizeof(tBTA_DM_SEC));
30045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy(sec_event.auth_cmpl.bd_addr, bd_addr);
30055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(sec_event.auth_cmpl.bd_name, bd_name, (BD_NAME_LEN-1));
30075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.auth_cmpl.bd_name[BD_NAME_LEN-1] = 0;
30085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*      taken care of by memset [above]
30105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.auth_cmpl.key_present = FALSE;
30115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.auth_cmpl.success = FALSE;
30125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*/
30135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.auth_cmpl.fail_reason = (UINT8)result;
30145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_dm_cb.p_sec_cback)
30155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
30165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_AUTH_CMPL_EVT, &sec_event);
30175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3018ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* delete this device entry from Sec Dev DB */
3019ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_dm_remove_sec_dev_entry(bd_addr);
30206975b4d711142b885af479721cada448952c6b41Andre Eisenbach
30215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
30225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return BTM_SUCCESS;
30245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
30255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
30275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_sp_cback
30295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      simple pairing callback from BTM
30315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
30335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
30345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
30355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_sp_cback (tBTM_SP_EVT event, tBTM_SP_EVT_DATA *p_data)
30365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
30375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS status = BTM_CMD_STARTED;
30385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
30395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC_EVT pin_evt = BTA_DM_SP_KEY_NOTIF_EVT;
30405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3041e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_EVENT("bta_dm_sp_cback: %d", event);
30425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!bta_dm_cb.p_sec_cback)
30435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTM_NOT_AUTHORIZED;
30445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* TODO_SP */
30465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch(event)
30475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
30485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_IO_REQ_EVT:
30495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE)
30505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* translate auth_req */
30515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_co_io_req(p_data->io_req.bd_addr, &p_data->io_req.io_cap,
30525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            &p_data->io_req.oob_data, &p_data->io_req.auth_req, p_data->io_req.is_orig);
30535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
30545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_OOB_INCLUDED == FALSE
30555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status = BTM_SUCCESS;
30565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
30575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3058e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_EVENT("io mitm: %d oob_data:%d", p_data->io_req.auth_req, p_data->io_req.oob_data);
30595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
30605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_IO_RSP_EVT:
30615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE)
30625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_co_io_rsp(p_data->io_rsp.bd_addr, p_data->io_rsp.io_cap,
30635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                         p_data->io_rsp.oob_data, p_data->io_rsp.auth_req );
30645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
30655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
30665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
30675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_CFM_REQ_EVT:
30685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        pin_evt = BTA_DM_SP_CFM_REQ_EVT;
30695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.just_works = sec_event.cfm_req.just_works = p_data->cfm_req.just_works;
30705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.cfm_req.loc_auth_req = p_data->cfm_req.loc_auth_req;
30715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.cfm_req.rmt_auth_req = p_data->cfm_req.rmt_auth_req;
30725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.cfm_req.loc_io_caps = p_data->cfm_req.loc_io_caps;
30735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.cfm_req.rmt_io_caps = p_data->cfm_req.rmt_io_caps;
30745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* continue to next case */
30755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE)
30765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Passkey entry mode, mobile device with output capability is very
30775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        unlikely to receive key request, so skip this event */
30785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /*case BTM_SP_KEY_REQ_EVT: */
30795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_KEY_NOTIF_EVT:
30805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
30817fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if(BTM_SP_CFM_REQ_EVT == event)
30827fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        {
30837fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta          /* Due to the switch case falling through below to BTM_SP_KEY_NOTIF_EVT,
30847fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             call remote name request using values from cfm_req */
30857fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta          if(p_data->cfm_req.bd_name[0] == 0)
30867fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta          {
30877fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta              bta_dm_cb.pin_evt = pin_evt;
30887fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta              bdcpy(bta_dm_cb.pin_bd_addr, p_data->cfm_req.bd_addr);
30897fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta              BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, p_data->cfm_req.dev_class);
30907fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta              if ((BTM_ReadRemoteDeviceName(p_data->cfm_req.bd_addr, bta_dm_pinname_cback,
30917fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                         BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED)
30927fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                  return BTM_CMD_STARTED;
3093e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati              APPL_TRACE_WARNING(" bta_dm_sp_cback() -> Failed to start Remote Name Request  ");
30947fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta          }
30957fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta          else
30967fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta          {
30977fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta              /* Due to the switch case falling through below to BTM_SP_KEY_NOTIF_EVT,
30987fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                 copy these values into key_notif from cfm_req */
30997fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta              bdcpy(sec_event.key_notif.bd_addr, p_data->cfm_req.bd_addr);
31007fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta              BTA_COPY_DEVICE_CLASS(sec_event.key_notif.dev_class, p_data->cfm_req.dev_class);
31017fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta              BCM_STRNCPY_S((char*)sec_event.key_notif.bd_name, sizeof(BD_NAME),
31027fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                   (char*)p_data->cfm_req.bd_name, (BD_NAME_LEN-1));
31037fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta              sec_event.key_notif.bd_name[BD_NAME_LEN-1] = 0;
31047fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta           }
31057fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        }
31067fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
31075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.num_val = sec_event.key_notif.passkey = p_data->key_notif.passkey;
31087fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if (BTM_SP_KEY_NOTIF_EVT == event)
31095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
31107fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            /* If the device name is not known, save bdaddr and devclass
31117fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta               and initiate a name request with values from key_notif */
31127fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            if(p_data->key_notif.bd_name[0] == 0)
31137fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            {
31147fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                bta_dm_cb.pin_evt = pin_evt;
31157fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                bdcpy(bta_dm_cb.pin_bd_addr, p_data->key_notif.bd_addr);
31167fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, p_data->key_notif.dev_class);
31177fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                if ((BTM_ReadRemoteDeviceName(p_data->key_notif.bd_addr, bta_dm_pinname_cback,
31187fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                         BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED)
31195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                return BTM_CMD_STARTED;
3120e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                APPL_TRACE_WARNING(" bta_dm_sp_cback() -> Failed to start Remote Name Request  ");
31217fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            }
31227fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            else
31237fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            {
31247fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                bdcpy(sec_event.key_notif.bd_addr, p_data->key_notif.bd_addr);
31257fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                BTA_COPY_DEVICE_CLASS(sec_event.key_notif.dev_class, p_data->key_notif.dev_class);
31267fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                BCM_STRNCPY_S((char*)sec_event.key_notif.bd_name, sizeof(BD_NAME),
31277fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                    (char*)p_data->key_notif.bd_name, (BD_NAME_LEN-1));
31287fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                sec_event.key_notif.bd_name[BD_NAME_LEN-1] = 0;
31297fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            }
31305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
31315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(pin_evt, &sec_event);
31335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
31355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_OOB_INCLUDED == TRUE
31375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_LOC_OOB_EVT:
31385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_co_loc_oob((BOOLEAN)(p_data->loc_oob.status == BTM_SUCCESS),
31395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_data->loc_oob.c, p_data->loc_oob.r);
31405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
31415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_RMT_OOB_EVT:
31435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* If the device name is not known, save bdaddr and devclass and initiate a name request */
31445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_data->rmt_oob.bd_name[0] == 0)
31455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
31467fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             bta_dm_cb.pin_evt = BTA_DM_SP_RMT_OOB_EVT;
31477fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             bdcpy(bta_dm_cb.pin_bd_addr, p_data->rmt_oob.bd_addr);
31487fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, p_data->rmt_oob.dev_class);
31497fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             if ((BTM_ReadRemoteDeviceName(p_data->rmt_oob.bd_addr, bta_dm_pinname_cback,
31507fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                      BT_TRANSPORT_BR_EDR)) == BTM_CMD_STARTED)
31517fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             return BTM_CMD_STARTED;
3152e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati             APPL_TRACE_WARNING(" bta_dm_sp_cback() -> Failed to start Remote Name Request  ");
31537fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta         }
31545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31557fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta         bdcpy(sec_event.rmt_oob.bd_addr, p_data->rmt_oob.bd_addr);
31567fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta         BTA_COPY_DEVICE_CLASS(sec_event.rmt_oob.dev_class, p_data->rmt_oob.dev_class);
31577fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta         BCM_STRNCPY_S((char*)sec_event.rmt_oob.bd_name, sizeof(BD_NAME), (char*)p_data->rmt_oob.bd_name, (BD_NAME_LEN-1));
31585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            sec_event.rmt_oob.bd_name[BD_NAME_LEN-1] = 0;
31595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(BTA_DM_SP_RMT_OOB_EVT, &sec_event);
31615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_co_rmt_oob(p_data->rmt_oob.bd_addr);
31635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
31645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
31655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_COMPLT_EVT:
31665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* do not report this event - handled by link_key_callback or auth_complete_callback */
31675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
31685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_KEYPRESS_EVT:
31705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&sec_event.key_press, &p_data->key_press, sizeof(tBTM_SP_KEYPRESS));
31715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(BTA_DM_SP_KEYPRESS_EVT, &sec_event);
31725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
31735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_SP_UPGRADE_EVT:
31755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_co_lk_upgrade(p_data->upgrade.bd_addr, &p_data->upgrade.upgrade );
31765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
31775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    default:
31795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        status = BTM_NOT_AUTHORIZED;
31805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
31815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3182e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_EVENT("dm status: %d", status);
31835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
31845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
31855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
31865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
31875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_local_name_cback
31895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback from btm after local name is read
31915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
31945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
31955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
31965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_local_name_cback(UINT8 *p_name)
31975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
31985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
31995cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_name);
32005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_GetLocalDeviceAddr(sec_event.enable.bd_addr);
32025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    sec_event.enable.status = BTA_SUCCESS;
32035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_cb.p_sec_cback)
32055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(BTA_DM_ENABLE_EVT, &sec_event);
32068d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta
32075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
32085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
32105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_signal_strength
32125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback from btm after local bdaddr is read
32145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
32175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
32195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_signal_strength(tBTA_DM_MSG *p_data)
32205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
32215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_data->sig_strength.start)
32235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
32245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.signal_strength_mask = p_data->sig_strength.mask;
32255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.signal_strength_period = p_data->sig_strength.period;
32265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_signal_strength_timer_cback(NULL);
32275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
32285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
32295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
32305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_stop_timer(&bta_dm_cb.signal_strength_timer);
32315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
32325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
32345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
32355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_signal_strength_timer_cback
32375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Periodic timer callback to read signal strength
32395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
32425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
32445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_signal_strength_timer_cback (TIMER_LIST_ENT *p_tle)
32455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
32465cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_tle);
32475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
32485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_cb.signal_strength_mask & BTA_SIG_STRENGTH_RSSI_MASK)
32505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
32515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for(i=0; i<bta_dm_cb.device_list.count; i++)
32525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
32535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTM_ReadRSSI (bta_dm_cb.device_list.peer_device[i].peer_bdaddr, (tBTM_CMPL_CB *)bta_dm_rssi_cback);
32545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
32565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
32575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_cb.signal_strength_mask & BTA_SIG_STRENGTH_LINK_QUALITY_MASK)
32585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
32595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for(i=0; i<bta_dm_cb.device_list.count; i++)
32615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
32625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BTM_ReadLinkQuality (bta_dm_cb.device_list.peer_device[i].peer_bdaddr, (tBTM_CMPL_CB *)bta_dm_link_quality_cback);
32635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
32645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
32665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_cb.signal_strength_period)
32685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
32695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.signal_strength_timer.p_cback = (TIMER_CBACK*)&bta_dm_signal_strength_timer_cback;
32705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_start_timer(&bta_dm_cb.signal_strength_timer, 0, (UINT32)1000*bta_dm_cb.signal_strength_period);
32715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
32725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
32735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BTM_BUSY_LEVEL_CHANGE_INCLUDED) && BTM_BUSY_LEVEL_CHANGE_INCLUDED == TRUE)
32765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
32775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_bl_change_cback
32795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback from btm when acl connection goes up or down
32815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
32845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
32855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
32865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data)
32875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
32885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_ACL_CHANGE * p_msg;
32895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_msg = (tBTA_DM_ACL_CHANGE *) GKI_getbuf(sizeof(tBTA_DM_ACL_CHANGE))) != NULL)
32915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
32925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->event = p_data->event;
32935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->is_new = FALSE;
32945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        switch(p_msg->event)
32965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
32975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_BL_CONN_EVT:
32985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->is_new = TRUE;
32995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(p_msg->bd_addr, p_data->conn.p_bda);
33007fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
33017fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            p_msg->transport = p_data->conn.transport;
33027fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            p_msg->handle = p_data->conn.handle;
33037fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
33045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
33055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_BL_DISCN_EVT:
33065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(p_msg->bd_addr, p_data->discn.p_bda);
33077fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
33087fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            p_msg->transport = p_data->discn.transport;
33097fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            p_msg->handle = p_data->discn.handle;
33107fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
33115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
33125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_BL_UPDATE_EVT:
33135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->busy_level = p_data->update.busy_level;
3314ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_msg->busy_level_flags = p_data->update.busy_level_flags;
33155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
33165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_BL_ROLE_CHG_EVT:
33175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->new_role = p_data->role_chg.new_role;
33185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->hci_status = p_data->role_chg.hci_status;
33195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(p_msg->bd_addr, p_data->role_chg.p_bda);
33205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
33217fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        case BTM_BL_COLLISION_EVT:
33227fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bdcpy(p_msg->bd_addr, p_data->conn.p_bda);
33237fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            break;
33245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
33255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->hdr.event = BTA_DM_ACL_CHANGE_EVT;
33275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_msg);
33285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
33305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
33325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
33335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
33355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_acl_change_cback
33375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback from btm when acl connection goes up or down
33395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
33425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
33445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_acl_change_cback (BD_ADDR p_bda, DEV_CLASS p_dc, BD_NAME p_bdn,
33457fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                     UINT8 *features, BOOLEAN is_new,UINT16 handle,
33467fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                     tBT_TRANSPORT transport)
33475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
33485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_ACL_CHANGE * p_msg;
33505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_msg = (tBTA_DM_ACL_CHANGE *) GKI_getbuf(sizeof(tBTA_DM_ACL_CHANGE))) != NULL)
33525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
33535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy (p_msg->bd_addr, p_bda);
33545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->is_new = is_new;
33557fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
33567fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        p_msg->handle   = handle;
33577fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        p_msg->transport = transport;
33587fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
33595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* This is collision case */
33605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (features != NULL)
33615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
33625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ((features[0] == 0xFF) && !is_new)
33635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_msg->event = BTM_BL_COLLISION_EVT;
33645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
33655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_msg->hdr.event = BTA_DM_ACL_CHANGE_EVT;
33675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(p_msg);
33685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
33705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
33725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
33735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
33745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_rs_cback
33765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Receives the role switch complete event
33785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns
33805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
33825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_rs_cback (tBTM_ROLE_SWITCH_CMPL *p1)
33835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
33845cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p1);
3385e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_WARNING("bta_dm_rs_cback:%d", bta_dm_cb.rs_event);
33865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_cb.rs_event == BTA_DM_API_SEARCH_EVT)
33875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
33885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.search_msg.rs_res = BTA_DM_RS_OK; /* do not care about the result for now */
33895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.rs_event = 0;
33905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_start((tBTA_DM_MSG *)&bta_dm_cb.search_msg);
33915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
33925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
33935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
33945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
33955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_check_av
33975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
33985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function checks if AV is active
33995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  if yes, make sure the AV link is master
34005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          BOOLEAN - TRUE, if switch is in progress
34025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
34045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN bta_dm_check_av(UINT16 event)
34055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
34069647e91549368fd44440dd13a854f403feb13ad9Mattias Agren    BOOLEAN avoid_roleswitch = FALSE;
34075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN switching = FALSE;
34085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
34095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_PEER_DEVICE *p_dev;
34105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34119647e91549368fd44440dd13a854f403feb13ad9Mattias Agren#if defined(BTA_DM_AVOID_A2DP_ROLESWITCH_ON_INQUIRY) && (BTA_DM_AVOID_A2DP_ROLESWITCH_ON_INQUIRY == TRUE)
34129647e91549368fd44440dd13a854f403feb13ad9Mattias Agren
34139647e91549368fd44440dd13a854f403feb13ad9Mattias Agren    /* avoid role switch upon inquiry if a2dp is actively streaming as it
34149647e91549368fd44440dd13a854f403feb13ad9Mattias Agren       introduces an audioglitch due to FW scheduling delays (unavoidable) */
34159647e91549368fd44440dd13a854f403feb13ad9Mattias Agren    if (event == BTA_DM_API_SEARCH_EVT)
34169647e91549368fd44440dd13a854f403feb13ad9Mattias Agren    {
34179647e91549368fd44440dd13a854f403feb13ad9Mattias Agren        avoid_roleswitch = TRUE;
34189647e91549368fd44440dd13a854f403feb13ad9Mattias Agren    }
34199647e91549368fd44440dd13a854f403feb13ad9Mattias Agren#endif
34209647e91549368fd44440dd13a854f403feb13ad9Mattias Agren
3421e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_WARNING("bta_dm_check_av:%d", bta_dm_cb.cur_av_count);
34225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_cb.cur_av_count)
34235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
34245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for(i=0; i<bta_dm_cb.device_list.count; i++)
34255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
34265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_dev = &bta_dm_cb.device_list.peer_device[i];
3427e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_WARNING("[%d]: state:%d, info:x%x, avoid_rs %d",
34289647e91549368fd44440dd13a854f403feb13ad9Mattias Agren                                i, p_dev->conn_state, p_dev->info, avoid_roleswitch);
34299647e91549368fd44440dd13a854f403feb13ad9Mattias Agren            if((p_dev->conn_state == BTA_DM_CONNECTED) && (p_dev->info & BTA_DM_DI_AV_ACTIVE) &&
34309647e91549368fd44440dd13a854f403feb13ad9Mattias Agren               (avoid_roleswitch == FALSE))
34315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
34325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* make master and take away the role switch policy */
34335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if(BTM_CMD_STARTED == BTM_SwitchRole (p_dev->peer_bdaddr, HCI_ROLE_MASTER, (tBTM_CMPL_CB *)bta_dm_rs_cback))
34345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
34355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* the role switch command is actually sent */
34365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_cb.rs_event = event;
34375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    switching = TRUE;
34385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
34395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* else either already master or can not switch for some reasons */
34405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_policy_cback(BTA_SYS_PLCY_CLR, 0, HCI_ENABLE_MASTER_SLAVE_SWITCH, p_dev->peer_bdaddr);
34415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
34425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
34435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
34445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
34455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return switching;
34465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
34475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
34495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_acl_change
34515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Process BTA_DM_ACL_CHANGE_EVT
34535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
34565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
34575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
34585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_acl_change(tBTA_DM_MSG *p_data)
34595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
34605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
34625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 *p;
34635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC conn;
34645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN is_new = p_data->acl_change.is_new;
34655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BD_ADDR_PTR     p_bda = p_data->acl_change.bd_addr;
34665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN         need_policy_change = FALSE;
34675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN         issue_unpair_cb = FALSE;
34685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BTM_BUSY_LEVEL_CHANGE_INCLUDED) && BTM_BUSY_LEVEL_CHANGE_INCLUDED == TRUE)
34705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_PEER_DEVICE *p_dev;
34717fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    memset(&conn, 0, sizeof(tBTA_DM_SEC));
34725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch(p_data->acl_change.event)
34745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
34755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_BL_UPDATE_EVT:     /* busy level update */
34765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( bta_dm_cb.p_sec_cback )
34775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
34785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            conn.busy_level.level = p_data->acl_change.busy_level;
3479ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            conn.busy_level.level_flags = p_data->acl_change.busy_level_flags;
34805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_BUSY_LEVEL_EVT, &conn);
34815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
34825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
34835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
34845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BTM_BL_ROLE_CHG_EVT:   /* role change event */
34855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_dev = bta_dm_find_peer_device(p_bda);
34865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(p_dev)
34875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
3488e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_DEBUG("bta_dm_acl_change role chg info:x%x new_role:%d dev count:%d",
34895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dev->info, p_data->acl_change.new_role, bta_dm_cb.device_list.count);
34905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(p_dev->info & BTA_DM_DI_AV_ACTIVE)
34915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
34925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* there's AV activity on this link */
34935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if(p_data->acl_change.new_role == HCI_ROLE_SLAVE && bta_dm_cb.device_list.count > 1
34945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    && p_data->acl_change.hci_status == HCI_SUCCESS)
34955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
34965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* more than one connections and the AV connection is role switched to slave
34975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                     * switch it back to master and remove the switch policy */
34985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    BTM_SwitchRole(p_bda, BTM_ROLE_MASTER, NULL);
34995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    need_policy_change = TRUE;
35005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
35015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else if (bta_dm_cfg.avoid_scatter && (p_data->acl_change.new_role == HCI_ROLE_MASTER))
35025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
35035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* if the link updated to be master include AV activities, remove the switch policy */
35045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    need_policy_change = TRUE;
35055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
35065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if(need_policy_change)
35085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
35095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_policy_cback(BTA_SYS_PLCY_CLR, 0, HCI_ENABLE_MASTER_SLAVE_SWITCH, p_dev->peer_bdaddr);
35105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
35115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
35125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
35135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
35145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* there's AV no activity on this link and role switch happened
35155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                 * check if AV is active
35165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                 * if so, make sure the AV link is master */
35175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_check_av(0);
35185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
35195738f83aeb59361a0a2eda2460113f6dc919427The 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);
35205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(conn.role_chg.bd_addr, p_bda);
35215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            conn.role_chg.new_role = (UINT8) p_data->acl_change.new_role;
35225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if( bta_dm_cb.p_sec_cback )
35237fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                bta_dm_cb.p_sec_cback(BTA_DM_ROLE_CHG_EVT, (tBTA_DM_SEC *)&conn);
35245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
35255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
35265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
35275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
35285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Collision report from Stack: Notify profiles */
35305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->acl_change.event == BTM_BL_COLLISION_EVT)
35315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
35325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_notify_collision (p_bda);
35335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
35345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
35355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(is_new)
35375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
35385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for(i=0; i<bta_dm_cb.device_list.count; i++)
35395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
35407fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            if (!bdcmp( bta_dm_cb.device_list.peer_device[i].peer_bdaddr, p_bda)
35417fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
35427fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                 && bta_dm_cb.device_list.peer_device[i].conn_handle == p_data->acl_change.handle
35437fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
35447fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                 )
35455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
35465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
35485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(i == bta_dm_cb.device_list.count)
35505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
35515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(bta_dm_cb.device_list.peer_device[bta_dm_cb.device_list.count].peer_bdaddr, p_bda);
35525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.device_list.peer_device[bta_dm_cb.device_list.count].link_policy = bta_dm_cb.cur_policy;
35535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.device_list.count++;
35547fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
35557fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bta_dm_cb.device_list.peer_device[i].conn_handle = p_data->acl_change.handle;
35567fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            if (p_data->acl_change.transport == BT_TRANSPORT_LE)
35577fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                bta_dm_cb.device_list.le_count++;
35587fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
35595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
35605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.device_list.peer_device[i].conn_state = BTA_DM_CONNECTED;
35625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.device_list.peer_device[i].pref_role = BTA_ANY_ROLE;
35635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy(conn.link_up.bd_addr, p_bda);
35645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.device_list.peer_device[i].info = BTA_DM_DI_NONE;
35657fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
35667fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        conn.link_up.link_type = p_data->acl_change.transport;
35677fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        bta_dm_cb.device_list.peer_device[i].transport = p_data->acl_change.transport;
35687fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
35697fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
35707fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if (((NULL != (p = BTM_ReadLocalFeatures ())) && HCI_SNIFF_SUB_RATE_SUPPORTED(p)) &&
35717fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            ((NULL != (p = BTM_ReadRemoteFeatures (p_bda))) && HCI_SNIFF_SUB_RATE_SUPPORTED(p)))
35725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
35735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* both local and remote devices support SSR */
35745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.device_list.peer_device[i].info = BTA_DM_DI_USE_SSR;
35755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3576e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_WARNING("info:x%x", bta_dm_cb.device_list.peer_device[i].info);
35775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( bta_dm_cb.p_sec_cback )
35785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_LINK_UP_EVT, &conn);
35795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
35815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
35825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
35835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for(i=0; i<bta_dm_cb.device_list.count; i++)
35845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
35857fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            if (bdcmp( bta_dm_cb.device_list.peer_device[i].peer_bdaddr, p_bda)
35867fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
35877fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                 ||bta_dm_cb.device_list.peer_device[i].transport != p_data->acl_change.transport
35887fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
35897fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta               )
35905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                continue;
35915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
35925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if( bta_dm_cb.device_list.peer_device[i].conn_state == BTA_DM_UNPAIRING )
35935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
35947fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                if (BTM_SecDeleteDevice(bta_dm_cb.device_list.peer_device[i].peer_bdaddr))
35957fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                {
3596bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
35977fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                    /* remove all cached GATT information */
35987fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                    BTA_GATTC_Refresh(p_bda);
3599bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu#endif
36007fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                    issue_unpair_cb = TRUE;
36017fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                }
36025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3604ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            conn.link_down.is_removed = bta_dm_cb.device_list.peer_device[i].remove_dev_pending;
3605ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
36065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for(; i<bta_dm_cb.device_list.count ; i++)
36075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
36085738f83aeb59361a0a2eda2460113f6dc919427The 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]));
36095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
36115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
36125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_dm_cb.device_list.count)
36135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.device_list.count--;
36147fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
36157fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if ((p_data->acl_change.transport == BT_TRANSPORT_LE) &&
36167fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             (bta_dm_cb.device_list.le_count))
36177fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bta_dm_cb.device_list.le_count--;
36187fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        conn.link_down.link_type = p_data->acl_change.transport;
36197fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
36205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_dm_search_cb.wait_disc && !bdcmp(bta_dm_search_cb.peer_bdaddr, p_bda))
36225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
36235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_search_cb.wait_disc = FALSE;
36245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(bta_dm_search_cb.sdp_results)
36265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
3627e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                APPL_TRACE_EVENT(" timer stopped  ");
36285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_sys_stop_timer(&bta_dm_search_cb.search_timer);
36295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_discover_next_device();
36305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
36335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(bta_dm_cb.disabling)
36355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
36365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(!BTM_GetNumAclLinks())
36375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
36385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_sys_stop_timer(&bta_dm_cb.disable_timer);
36395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_cb.disable_timer.p_cback = (TIMER_CBACK*)&bta_dm_disable_conn_down_timer_cback;
36405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* start a timer to make sure that the profiles get the disconnect event */
36415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_sys_start_timer(&bta_dm_cb.disable_timer, 0, 1000);
36425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
36435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3644ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (conn.link_down.is_removed)
3645ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
3646ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTM_SecDeleteDevice(p_bda);
3647ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
3648ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            /* need to remove all pending background connection */
3649ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_CancelOpen(0, p_bda, FALSE);
3650ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            /* remove all cached GATT information */
3651ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_Refresh(p_bda);
3652ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
3653ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta         }
36545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy(conn.link_down.bd_addr, p_bda);
36565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        conn.link_down.status = (UINT8) btm_get_acl_disc_reason_code();
36575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( bta_dm_cb.p_sec_cback )
36585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
36595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_LINK_DOWN_EVT, &conn);
36605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if( issue_unpair_cb )
36615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_cb.p_sec_cback(BTA_DM_DEV_UNPAIRED_EVT, &conn);
36625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
36635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
36645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_adjust_roles(TRUE);
36665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
36675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
36695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
36705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_disable_conn_down_timer_cback
36715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
36725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Sends disable event to application
36735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
36745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
36755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
36765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
36775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
36785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_disable_conn_down_timer_cback (TIMER_LIST_ENT *p_tle)
36795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
36805cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_tle);
36815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_SYS_HW_MSG *sys_enable_event;
36825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3683ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /* disable the power managment module */
3684ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bta_dm_disable_pm();
3685ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
36865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* register our callback to SYS HW manager */
36875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_sys_hw_register( BTA_SYS_HW_BLUETOOTH, bta_dm_sys_hw_cback );
36885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* send a message to BTA SYS */
36905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((sys_enable_event = (tBTA_SYS_HW_MSG *) GKI_getbuf(sizeof(tBTA_SYS_HW_MSG))) != NULL)
36915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
36925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sys_enable_event->hdr.event = BTA_SYS_API_DISABLE_EVT;
36935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sys_enable_event->hw_module = BTA_SYS_HW_BLUETOOTH;
36945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_sys_sendmsg(sys_enable_event);
36955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
36965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_cb.disabling = FALSE;
36985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
36995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
37005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
37025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_rssi_cback
37045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback from btm with rssi values
37065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
37095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
37115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_rssi_cback (tBTM_RSSI_RESULTS *p_result)
37125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
37135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
37145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_result->status == BTM_SUCCESS)
37165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
37175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy(sec_event.sig_strength.bd_addr, p_result->rem_bda);
37195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.sig_strength.mask = BTA_SIG_STRENGTH_RSSI_MASK;
37205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.sig_strength.rssi_value = p_result->rssi;
37215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( bta_dm_cb.p_sec_cback!= NULL )
37225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_SIG_STRENGTH_EVT, &sec_event);
37235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
37255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
37265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
37285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_link_quality_cback
37305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback from btm with link quality value
37325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
37355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
37375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_link_quality_cback (tBTM_LINK_QUALITY_RESULTS *p_result)
37385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
37395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
37415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_result->status == BTM_SUCCESS)
37435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
37445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy(sec_event.sig_strength.bd_addr, p_result->rem_bda);
37465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.sig_strength.mask = BTA_SIG_STRENGTH_LINK_QUALITY_MASK;
37475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.sig_strength.link_quality_value = p_result->link_quality;
37485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( bta_dm_cb.p_sec_cback!= NULL )
37495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_SIG_STRENGTH_EVT, &sec_event);
37505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
37525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
37535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
37555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_rm_cback
37575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Role management callback from sys
37595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
37625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
37635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
37645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_rm_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, BD_ADDR peer_addr)
37655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
37665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 j;
37685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_PREF_ROLES role;
37695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_PEER_DEVICE *p_dev;
37705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_dev = bta_dm_find_peer_device(peer_addr);
37725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( status == BTA_SYS_CONN_OPEN)
37735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
37745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(p_dev)
37755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
37765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* Do not set to connected if we are in the middle of unpairing. When AV stream is
37775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             * started it fakes out a SYS_CONN_OPEN to potentially trigger a role switch command.
37785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             * But this should not be done if we are in the middle of unpairing.
37795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             */
37805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_dev->conn_state != BTA_DM_UNPAIRING)
37815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dev->conn_state = BTA_DM_CONNECTED;
37825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for(j=1; j<= p_bta_dm_rm_cfg[0].app_id; j++)
37845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
37855738f83aeb59361a0a2eda2460113f6dc919427The 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))
37865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    && (p_bta_dm_rm_cfg[j].id == id))
37875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
37885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    role = p_bta_dm_rm_cfg[j].cfg;
37895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if(role > p_dev->pref_role )
37915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_dev->pref_role = role;
37925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
37935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
37945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
37955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
37975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
37985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
37995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if((BTA_ID_AV == id)||(BTA_ID_AVK ==id))
38015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
38025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( status == BTA_SYS_CONN_BUSY)
38035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
38045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(p_dev)
38055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dev->info |= BTA_DM_DI_AV_ACTIVE;
38065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* AV calls bta_sys_conn_open with the A2DP stream count as app_id */
38075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(BTA_ID_AV == id)
38085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_cb.cur_av_count = app_id;
38095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
38105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else if( status == BTA_SYS_CONN_IDLE)
38115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
38125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(p_dev)
38135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dev->info &= ~BTA_DM_DI_AV_ACTIVE;
38145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* AV calls bta_sys_conn_open with the A2DP stream count as app_id */
38155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if(BTA_ID_AV == id)
38165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_cb.cur_av_count = app_id;
38175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
3818e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_WARNING("bta_dm_rm_cback:%d, status:%d", bta_dm_cb.cur_av_count, status);
38195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3820ed049d78633d33d4fbb3178dacfa6edbb756ae45Ganesh Ganapathi Batta    else if ((status == BTA_SYS_CONN_BUSY) || (status == BTA_SYS_CONN_IDLE))
3821ed049d78633d33d4fbb3178dacfa6edbb756ae45Ganesh Ganapathi Batta    {
3822ed049d78633d33d4fbb3178dacfa6edbb756ae45Ganesh Ganapathi Batta        /* Do not do role switch management for non-AV profiles when data flow starts/stops */
3823ed049d78633d33d4fbb3178dacfa6edbb756ae45Ganesh Ganapathi Batta        return;
3824ed049d78633d33d4fbb3178dacfa6edbb756ae45Ganesh Ganapathi Batta    }
38255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_adjust_roles(FALSE);
38275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
38295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
38315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
38325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_dev_blacklisted_for_switch
38335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
38345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Checks if the device is blacklisted for immediate role switch after connection.
38355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
38365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          TRUE if dev is blacklisted else FALSE
38375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
38385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
38395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN bta_dm_dev_blacklisted_for_switch (BD_ADDR remote_bd_addr)
38405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
38415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 manufacturer = 0;
38425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16  lmp_sub_version = 0;
38435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 lmp_version = 0;
38445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i = 0;
38455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (BTM_ReadRemoteVersion(remote_bd_addr, &lmp_version,
38475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        &manufacturer, &lmp_sub_version) == BTM_SUCCESS)
38485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
38495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Check if this device version info matches with is
38505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           blacklisted versions for role switch  */
38515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (i = 0; i < BTA_DM_MAX_ROLE_SWITCH_BLACKLIST_COUNT; i++)
38525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
38535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             if ((bta_role_switch_blacklist[i].lmp_version == lmp_version) &&
38545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                 (bta_role_switch_blacklist[i].manufacturer == manufacturer)&&
38555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                 ((bta_role_switch_blacklist[i].lmp_sub_version & lmp_sub_version) ==
38565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                     bta_role_switch_blacklist[i].lmp_sub_version))
38575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
3858e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    APPL_TRACE_EVENT("Black list F/W version matches.. Delay Role Switch...");
38595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    return TRUE;
38605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
38615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
38635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
38645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return FALSE;
38655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
38665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
38685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
38695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_delay_role_switch_cback
38705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
38715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback from btm to delay a role switch
38725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
38735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
38745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
38755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
38765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_delay_role_switch_cback(TIMER_LIST_ENT *p_tle)
38775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
38785cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_tle);
3879e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_EVENT("bta_dm_delay_role_switch_cback: initiating Delayed RS");
38805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_adjust_roles (FALSE);
38815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
38825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
38835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
38845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3885ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         bta_dm_remove_sec_dev_entry
3886ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
3887ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      Removes device entry from Security device DB if ACL connection with
3888ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**                  remtoe device does not exist, else schedule for dev entry removal upon
3889ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                     ACL close
3890ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
3891ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          void
3892ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
3893ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
3894ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_remove_sec_dev_entry(BD_ADDR remote_bd_addr)
3895ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
3896ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT16 index = 0;
38977fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if ( BTM_IsAclConnectionUp(remote_bd_addr, BT_TRANSPORT_LE) ||
38987fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta         BTM_IsAclConnectionUp(remote_bd_addr, BT_TRANSPORT_BR_EDR))
3899ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
3900e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati         APPL_TRACE_DEBUG("%s ACL is not down. Schedule for  Dev Removal when ACL closes",
3901ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                            __FUNCTION__);
3902ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        for (index = 0; index < bta_dm_cb.device_list.count; index ++)
3903ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
3904ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (!bdcmp( bta_dm_cb.device_list.peer_device[index].peer_bdaddr, remote_bd_addr))
3905ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                break;
3906ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
3907ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (index != bta_dm_cb.device_list.count)
3908ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
3909ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_dm_cb.device_list.peer_device[index].remove_dev_pending = TRUE;
3910ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
3911ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        else
3912ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
3913e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_ERROR(" %s Device does not exist in DB", __FUNCTION__);
3914ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
3915ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
3916ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    else
3917ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
3918ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        BTM_SecDeleteDevice (remote_bd_addr);
3919bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
3920bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu        /* need to remove all pending background connection */
3921bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu        BTA_GATTC_CancelOpen(0, remote_bd_addr, FALSE);
3922bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu        /* remove all cached GATT information */
3923bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu        BTA_GATTC_Refresh(remote_bd_addr);
3924bd68d683bce9e64bba6ac561e432da9d7bbab671Zhihai Xu#endif
3925ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
3926ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
3927ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
39286975b4d711142b885af479721cada448952c6b41Andre Eisenbach
3929ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
3930ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
39315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_adjust_roles
39325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Adjust roles
39345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
39375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
39385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
39395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_adjust_roles(BOOLEAN delay_role_switch)
39405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
39415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 i;
39435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN set_master_role = FALSE;
39447fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
39457fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT8 br_count = bta_dm_cb.device_list.count - bta_dm_cb.device_list.le_count;
39467fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#else
39477fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT8 br_count = bta_dm_cb.device_list.count;
39487fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
39497fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if (br_count)
39505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
39515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* the configuration is no scatternet
39535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project         * or AV connection exists and there are more than one ACL link */
39547fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if ( (p_bta_dm_rm_cfg[0].cfg == BTA_DM_NO_SCATTERNET) ||
39557fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             (bta_dm_cb.cur_av_count && br_count > 1) )
39565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
39575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            L2CA_SetDesireRole (HCI_ROLE_MASTER);
39595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            set_master_role = TRUE;
39605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
39625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for(i=0; i<bta_dm_cb.device_list.count; i++)
39645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
39657fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            if (bta_dm_cb.device_list.peer_device[i].conn_state == BTA_DM_CONNECTED
39667fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE
39677fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                && bta_dm_cb.device_list.peer_device[i].transport == BT_TRANSPORT_BR_EDR
39687fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
39697fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                )
39705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
39715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if(!set_master_role && (bta_dm_cb.device_list.peer_device[i].pref_role != BTA_ANY_ROLE)
39725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    && (p_bta_dm_rm_cfg[0].cfg == BTA_DM_PARTIAL_SCATTERNET))
39735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
39745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    L2CA_SetDesireRole (HCI_ROLE_MASTER);
39755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    set_master_role = TRUE;
39765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
39775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if((bta_dm_cb.device_list.peer_device[i].pref_role == BTA_MASTER_ROLE_ONLY)
39797fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                    || (br_count > 1))
39805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
39815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* Initiating immediate role switch with certain remote devices
39835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                  has caused issues due to role  switch colliding with link encryption setup and
39845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                  causing encryption (and in turn the link) to fail .  These device . Firmware
39855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                  versions are stored in a blacklist and role switch with these devices are
39865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                  delayed to avoid the collision with link encryption setup */
39875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
39885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ((delay_role_switch == FALSE) ||
39895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       (bta_dm_dev_blacklisted_for_switch(
39905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                       bta_dm_cb.device_list.peer_device[i].peer_bdaddr) == FALSE))
39915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
39925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        BTM_SwitchRole (bta_dm_cb.device_list.peer_device[i].peer_bdaddr,
39935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        HCI_ROLE_MASTER, NULL);
39945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
39955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    else
39965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
39975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        bta_dm_cb.switch_delay_timer.p_cback =
39985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            (TIMER_CBACK*)&bta_dm_delay_role_switch_cback;
39995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        bta_sys_start_timer(&bta_dm_cb.switch_delay_timer, 0, 500);
40005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
40015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
40025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
40045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
40055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(!set_master_role)
40085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
40095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            L2CA_SetDesireRole (L2CAP_DESIRED_LINK_ROLE);
40115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
40135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
40155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
40165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
40175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        L2CA_SetDesireRole (L2CAP_DESIRED_LINK_ROLE);
40185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
40195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
40225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
40245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_get_remname
40265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Returns a pointer to the remote name stored in the DM control
40285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  block if it exists, or from the BTM memory.
40295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          char * - Pointer to the remote device name
40315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
40325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_dm_get_remname(void)
40335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4034ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    char *p_name = (char *)bta_dm_search_cb.peer_name;
40355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char *p_temp;
40365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* If the name isn't already stored, try retrieving from BTM */
40385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (*p_name == '\0')
40395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((p_temp = BTM_SecReadDevName(bta_dm_search_cb.peer_bdaddr)) != NULL)
40405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_name = p_temp;
40415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return p_name;
40435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
40445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
40465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_bond_cancel_complete_cback
40485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Authentication complete callback from BTM
40505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
40525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
40545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_bond_cancel_complete_cback(tBTM_STATUS result)
40555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
40565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
40585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (result == BTM_SUCCESS)
40605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.bond_cancel_cmpl.result = BTA_SUCCESS;
40615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
40625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sec_event.bond_cancel_cmpl.result = BTA_FAILURE;
40635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(bta_dm_cb.p_sec_cback)
40655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
40665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_cb.p_sec_cback(BTA_DM_BOND_CANCEL_CMPL_EVT, &sec_event);
40675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
40685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
40695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTM_EIR_SERVER_INCLUDED == TRUE )
40715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    #if ( BTA_EIR_CANNED_UUID_LIST != TRUE )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0)
40725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
40735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_update_eir_uuid
40755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description
40775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
40795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
40805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_update_eir_uuid (tBTA_DM_MSG *p_data)
40815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
40825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_API_UPDATE_EIR_UUID *p_msg = (tBTA_DM_API_UPDATE_EIR_UUID *)p_data;
40835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 xx;
40845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 empty_slot = BTA_EIR_SERVER_NUM_CUSTOM_UUID;
40855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8 match_slot = BTA_EIR_SERVER_NUM_CUSTOM_UUID;
40865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
40875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (xx = 0; xx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; xx++)
40885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
40895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (bta_dm_cb.custom_uuid[xx].len == 0)
40905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
40915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (empty_slot == BTA_EIR_SERVER_NUM_CUSTOM_UUID)
40925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                empty_slot = xx;
40935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
40945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else if (match_slot == BTA_EIR_SERVER_NUM_CUSTOM_UUID)
40955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
40965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!memcmp (bta_dm_cb.custom_uuid[xx].uu.uuid128, p_msg->uuid.uu.uuid128, p_msg->uuid.len))
40975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
40985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                match_slot = xx;;
40995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
41005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
41015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_msg->is_add)
41045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
41055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (match_slot == BTA_EIR_SERVER_NUM_CUSTOM_UUID)
41065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
41075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (empty_slot == BTA_EIR_SERVER_NUM_CUSTOM_UUID)
41085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
4109e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                APPL_TRACE_ERROR("No space to add UUID for EIR");
41105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                return;
41115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
41125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
41135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
41145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memcpy (&(bta_dm_cb.custom_uuid[empty_slot]), &(p_msg->uuid), sizeof(tBT_UUID));
41155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
41165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
41175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
41185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
4119e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_ERROR("UUID is already added for EIR");
41205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return;
41215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
41225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
41245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
41255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (match_slot == BTA_EIR_SERVER_NUM_CUSTOM_UUID)
41265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
4127e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_ERROR("UUID is not found for EIR");
41285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return;
41295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
41305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
41315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
41325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memset (&(bta_dm_cb.custom_uuid[match_slot]), 0, sizeof(tBT_UUID));
41335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
41345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_set_eir (NULL);
41375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
41385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    #endif
41395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
41415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_set_eir_config
41435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description
41455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
41485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_set_eir_config (tBTA_DM_MSG *p_data)
41495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
41505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->set_eir_cfg.p_eir_cfg)
41515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
41525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* User defined config */
41535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_bta_dm_eir_cfg = p_data->set_eir_cfg.p_eir_cfg;
41545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
41565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
41575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Back to default config */
41585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_bta_dm_eir_cfg = (tBTA_DM_EIR_CONF*)&bta_dm_eir_cfg;
41595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
41605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_set_eir (NULL);
41625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
41635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
41655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_set_eir
41675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function creates EIR tagged data and writes it to controller.
41695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
41715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
41725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
41735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_set_eir (char *local_name)
41745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
41755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR   *p_buf;
41765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    *p;
41775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    *p_length;
41785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_EIR_CANNED_UUID_LIST != TRUE)
41795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    *p_type;
41805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    max_num_uuid;
41815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0)
41825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    custom_uuid_idx;
41835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
41845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
41855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_EIR_DEFAULT_FEC_REQUIRED == FALSE)
41865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    free_eir_length = HCI_EXT_INQ_RESPONSE_LEN;
41875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
41885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    free_eir_length = HCI_DM5_PACKET_SIZE;
41895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
41905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    num_uuid;
41915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    data_type;
41925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    local_name_len;
41935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* wait until complete to disable */
41955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bta_dm_cb.disable_timer.in_use)
41965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
41975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
41985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTA_EIR_CANNED_UUID_LIST != TRUE )
41995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* wait until App is ready */
42005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bta_dm_cb.app_ready_timer.in_use)
42015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
42025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if local name is not provided, get it from controller */
42045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( local_name == NULL )
42055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
42065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( BTM_ReadLocalDeviceName( &local_name ) != BTM_SUCCESS )
42075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
4208e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_ERROR("Fail to read local device name for EIR");
42095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
42105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
42115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
42125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Allocate a buffer to hold HCI command */
42145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (BT_HDR *)GKI_getpoolbuf(BTM_CMD_POOL_ID)) == NULL)
42155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4216e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR("bta_dm_set_eir couldn't allocate buffer");
42175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
42185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
42195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p = (UINT8 *)p_buf + BTM_HCI_EIR_OFFSET;
42205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(p, 0x00, HCI_EXT_INQ_RESPONSE_LEN );
42225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4223e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("BTA is generating EIR");
42245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( local_name )
42265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        local_name_len = strlen( local_name );
42275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
42285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        local_name_len = 0;
42295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    data_type = BTM_EIR_COMPLETE_LOCAL_NAME_TYPE;
42315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if local name is longer than minimum length of shortened name */
42325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* check whether it needs to be shortened or not */
42335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( local_name_len > p_bta_dm_eir_cfg->bta_dm_eir_min_name_len )
42345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
42355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* get number of UUID 16-bit list */
42365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_EIR_CANNED_UUID_LIST == TRUE)
42375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len/LEN_UUID_16;
42385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
42395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        max_num_uuid = (free_eir_length - 2)/LEN_UUID_16;
42405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        data_type = BTM_GetEirSupportedServices( bta_dm_cb.eir_uuid, &p,
42415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                 max_num_uuid, &num_uuid );
42425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p = (UINT8 *)p_buf + BTM_HCI_EIR_OFFSET; /* reset p */
42435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
42445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* if UUID doesn't fit remaing space, shorten local name */
42465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ( local_name_len > (free_eir_length - 4 - num_uuid*LEN_UUID_16))
42475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
4248e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_WARNING("BTA EIR: local name is shortened");
42495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            local_name_len = p_bta_dm_eir_cfg->bta_dm_eir_min_name_len;
42505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            data_type = BTM_EIR_SHORTENED_LOCAL_NAME_TYPE;
42515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
42525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
42535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            data_type = BTM_EIR_COMPLETE_LOCAL_NAME_TYPE;
42545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
42555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM(p, local_name_len + 1);
42575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_STREAM(p, data_type);
42583aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach
42593aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach    if (local_name != NULL)
42603aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach    {
42613aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach        memcpy(p, local_name, local_name_len);
42623aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach        p += local_name_len;
42633aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach    }
42645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    free_eir_length -= local_name_len + 2;
42655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_EIR_CANNED_UUID_LIST == TRUE)
42675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if UUID list is provided as static data in configuration */
42685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(( p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len > 0 )
42695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        &&(p_bta_dm_eir_cfg->bta_dm_eir_uuid16))
42705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
42715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( free_eir_length > LEN_UUID_16 + 2)
42725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
42735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            free_eir_length -= 2;
42745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
42755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if( free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len)
42765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
42775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len / LEN_UUID_16;
42785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                data_type = BTM_EIR_COMPLETE_16BITS_UUID_TYPE;
42795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
42805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else /* not enough room for all UUIDs */
42815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
4282e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                APPL_TRACE_WARNING("BTA EIR: UUID 16-bit list is truncated");
42835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                num_uuid = free_eir_length / LEN_UUID_16;
42845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                data_type = BTM_EIR_MORE_16BITS_UUID_TYPE;
42855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
42865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            UINT8_TO_STREAM(p, num_uuid * LEN_UUID_16 + 1);
42875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            UINT8_TO_STREAM(p, data_type);
42885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_uuid16, num_uuid * LEN_UUID_16 );
42895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p += num_uuid * LEN_UUID_16;
42905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            free_eir_length -= num_uuid * LEN_UUID_16;
42915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
42925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
42935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else /* (BTA_EIR_CANNED_UUID_LIST == TRUE) */
42945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if UUID list is dynamic */
42955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( free_eir_length >= 2)
42965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
42975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_length = p++;
42985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_type   = p++;
42995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        num_uuid = 0;
43005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        max_num_uuid = (free_eir_length - 2)/LEN_UUID_16;
43025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        data_type = BTM_GetEirSupportedServices( bta_dm_cb.eir_uuid, &p, max_num_uuid, &num_uuid );
43035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( data_type == BTM_EIR_MORE_16BITS_UUID_TYPE )
43055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
4306e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_WARNING("BTA EIR: UUID 16-bit list is truncated");
43075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
43085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0)
43095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
43105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
43115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++)
43125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
43135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_16)
43145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
43155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if ( num_uuid < max_num_uuid )
43165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
43175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        UINT16_TO_STREAM(p, bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid16);
43185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        num_uuid++;
43195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
43205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    else
43215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    {
43225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        data_type = BTM_EIR_MORE_16BITS_UUID_TYPE;
4323e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                        APPL_TRACE_WARNING("BTA EIR: UUID 16-bit list is truncated");
43245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        break;
43255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    }
43265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
43275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
43285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
43295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */
43305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_16 + 1);
43325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p_type, data_type);
43335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        free_eir_length -= num_uuid * LEN_UUID_16 + 2;
43345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
43355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* (BTA_EIR_CANNED_UUID_LIST == TRUE) */
43365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTA_EIR_CANNED_UUID_LIST != TRUE )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0)
43385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Adding 32-bit UUID list */
43395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( free_eir_length >= 2)
43405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
43415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_length = p++;
43425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_type   = p++;
43435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        num_uuid = 0;
43445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        data_type = BTM_EIR_COMPLETE_32BITS_UUID_TYPE;
43455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        max_num_uuid = (free_eir_length - 2)/LEN_UUID_32;
43475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++)
43495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
43505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_32)
43515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
43525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if ( num_uuid < max_num_uuid )
43535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
43545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    UINT32_TO_STREAM(p, bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid32);
43555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    num_uuid++;
43565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
43575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
43585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
43595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    data_type = BTM_EIR_MORE_32BITS_UUID_TYPE;
4360e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    APPL_TRACE_WARNING("BTA EIR: UUID 32-bit list is truncated");
43615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
43625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
43635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
43645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
43655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_32 + 1);
43675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p_type, data_type);
43685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        free_eir_length -= num_uuid * LEN_UUID_32 + 2;
43695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
43705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Adding 128-bit UUID list */
43725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( free_eir_length >= 2)
43735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
43745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_length = p++;
43755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_type   = p++;
43765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        num_uuid = 0;
43775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        data_type = BTM_EIR_COMPLETE_128BITS_UUID_TYPE;
43785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        max_num_uuid = (free_eir_length - 2)/LEN_UUID_128;
43805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++)
43825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
43835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_128)
43845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
43855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if ( num_uuid < max_num_uuid )
43865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
43875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    ARRAY16_TO_STREAM(p, bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid128);
43885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    num_uuid++;
43895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
43905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
43915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
43925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    data_type = BTM_EIR_MORE_128BITS_UUID_TYPE;
4393e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                    APPL_TRACE_WARNING("BTA EIR: UUID 128-bit list is truncated");
43945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
43955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
43965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
43975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
43985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
43995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_128 + 1);
44005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p_type, data_type);
44015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        free_eir_length -= num_uuid * LEN_UUID_128 + 2;
44025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
44035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* ( BTA_EIR_CANNED_UUID_LIST != TRUE )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */
44045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if Flags are provided in configuration */
44065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(( p_bta_dm_eir_cfg->bta_dm_eir_flag_len > 0 )
44075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project     &&( p_bta_dm_eir_cfg->bta_dm_eir_flags )
44085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project     &&( free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_flag_len + 2 ))
44095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
44105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p, p_bta_dm_eir_cfg->bta_dm_eir_flag_len + 1);
44115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p, BTM_EIR_FLAGS_TYPE);
44125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_flags,
44135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project               p_bta_dm_eir_cfg->bta_dm_eir_flag_len);
44145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += p_bta_dm_eir_cfg->bta_dm_eir_flag_len;
44155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        free_eir_length -= p_bta_dm_eir_cfg->bta_dm_eir_flag_len + 2;
44165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
44175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if Manufacturer Specific are provided in configuration */
44195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(( p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len > 0 )
44205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project     &&( p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec )
44215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project     &&( free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len + 2 ))
44225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
44235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_length = p;
44245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p, p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len + 1);
44265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p, BTM_EIR_MANUFACTURER_SPECIFIC_TYPE);
44275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec,
44285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project               p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len);
44295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len;
44305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        free_eir_length -= p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len + 2;
44315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
44335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
44345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
44355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_length = NULL;
44365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
44375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4438ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /* if Inquiry Tx Resp Power compiled */
4439ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if ((p_bta_dm_eir_cfg->bta_dm_eir_inq_tx_power) &&
4440ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        (free_eir_length >= 3))
4441ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
4442ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        UINT8_TO_STREAM(p, 2);      /* Length field */
4443ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        UINT8_TO_STREAM(p, BTM_EIR_TX_POWER_LEVEL_TYPE);
4444ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        UINT8_TO_STREAM(p, *(p_bta_dm_eir_cfg->bta_dm_eir_inq_tx_power));
4445ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        free_eir_length -= 3;
4446ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
4447ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
44485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( free_eir_length )
44495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT8_TO_STREAM(p, 0); /* terminator of significant part */
44505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_WriteEIR( p_buf );
44525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
44545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
44555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTM_EIR_CLIENT_INCLUDED == TRUE )
44575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
44585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_eir_search_services
44605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function searches services in received EIR
44625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
44645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
44655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
44665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_eir_search_services( tBTM_INQ_RESULTS  *p_result,
44675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        tBTA_SERVICE_MASK *p_services_to_search,
44685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        tBTA_SERVICE_MASK *p_services_found)
44695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
44705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_SERVICE_MASK       service_index = 0;
44715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_EIR_SEARCH_RESULT  result;
44725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4473e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("BTA searching services in EIR of BDA:0x%02X%02X%02X%02X%02X%02X",
44745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_result->remote_bd_addr[0],p_result->remote_bd_addr[1],
44755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_result->remote_bd_addr[2],p_result->remote_bd_addr[3],
44765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        p_result->remote_bd_addr[4],p_result->remote_bd_addr[5]);
44775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4478e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("    with services_to_search=0x%08X", *p_services_to_search);
44795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
44815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* always do GATT based service discovery by SDP instead of from EIR    */
44825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if GATT based service is also to be put in EIR, need to modify this  */
44835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    while (service_index < (BTA_MAX_SERVICE_ID - 1))
44845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
44855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    while(service_index < BTA_MAX_SERVICE_ID)
44865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
44875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
44885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if( *p_services_to_search
44895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project           & (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index)))
44905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
44915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            result = BTM_HasInquiryEirService( p_result,
44925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                               bta_service_id_to_uuid_lkup_tbl[service_index] );
44935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
44945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* Searching for HSP v1.2 only device */
44955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ((result != BTM_EIR_FOUND) &&
44965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                (bta_service_id_to_uuid_lkup_tbl[service_index] == UUID_SERVCLASS_HEADSET))
44975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
44985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                result = BTM_HasInquiryEirService (p_result, UUID_SERVCLASS_HEADSET_HS);
44995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
45005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if( result == BTM_EIR_FOUND )
45025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
45035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* If Plug and Play service record, need to check to see if Broadcom stack */
45045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* However, EIR data doesn't have EXT_BRCM_VERSION so just skip it */
45055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if( bta_service_id_to_uuid_lkup_tbl[service_index]
45065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    != UUID_SERVCLASS_PNP_INFORMATION )
45075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
45085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_services_found |=
45105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index));
45115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    /* remove the service from services to be searched  */
45125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *p_services_to_search &=
45135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       (tBTA_SERVICE_MASK)(~(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index)));
45145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
45155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
45165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else if( result == BTM_EIR_NOT_FOUND )
45175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
45185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* remove the service from services to be searched  */
45195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                *p_services_to_search &=
45205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       (tBTA_SERVICE_MASK)(~(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index)));
45215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
45225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
45235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        service_index++;
45255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
45265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4527e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_ERROR("BTA EIR search result, services_to_search=0x%08X, services_found=0x%08X",
45285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        *p_services_to_search, *p_services_found);
45295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
45315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTM_EIR_SERVER_INCLUDED == TRUE )&&(BTA_EIR_CANNED_UUID_LIST != TRUE)
45335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_eir_update_uuid
45365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function adds or removes service UUID in EIR database.
45385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
45405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_eir_update_uuid(UINT16 uuid16, BOOLEAN adding)
45435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
45445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if this UUID is not advertised in EIR */
45455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( !BTM_HasEirService( p_bta_dm_eir_cfg->uuid_mask, uuid16 ))
45465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
45475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if( adding )
45495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4550e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_EVENT("Adding UUID=0x%04X into EIR", uuid16);
45515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_AddEirService( bta_dm_cb.eir_uuid, uuid16 );
45535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
45545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
45555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4556e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_EVENT("Removing UUID=0x%04X from EIR", uuid16);
45575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_RemoveEirService( bta_dm_cb.eir_uuid, uuid16 );
45595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
45605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_set_eir (NULL);
45625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4563e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_EVENT("bta_dm_eir_update_uuid UUID bit mask=0x%08X %08X",
45645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                       bta_dm_cb.eir_uuid[1], bta_dm_cb.eir_uuid[0] );
45655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
45675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_enable_test_mode
45715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      enable test mode
45735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
45765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_enable_test_mode(tBTA_DM_MSG *p_data)
45795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
45805cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
45815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_EnableTestMode();
45825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
45845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
45855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_disable_test_mode
45875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      disable test mode
45895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
45925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
45935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
45945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_disable_test_mode(tBTA_DM_MSG *p_data)
45955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
45965cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
45975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_DeviceReset(NULL);
45985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
45995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
46015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_execute_callback
46035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Just execute a generic call back in the context of the BTU/BTA tack
46055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
46085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_execute_callback(tBTA_DM_MSG *p_data)
46115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
46125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* sanity check */
46135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if(p_data->exec_cback.p_exec_cback == NULL)
46145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
46155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
46165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
46175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_data->exec_cback.p_exec_cback(p_data->exec_cback.p_param);
46195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
46205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
46215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_encrypt_cback
46235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      link encryption complete callback.
46255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns         None
46275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46297fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battavoid bta_dm_encrypt_cback(BD_ADDR bd_addr, tBT_TRANSPORT transport, void *p_ref_data, tBTM_STATUS result)
46305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
46315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_STATUS   bta_status = BTA_SUCCESS;
46327fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    tBTA_DM_ENCRYPT_CBACK *p_callback = NULL;
46337fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT8   i ;
46345cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_ref_data);
46355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46367fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    for (i=0; i<bta_dm_cb.device_list.count; i++)
46377fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    {
46387fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if (bdcmp( bta_dm_cb.device_list.peer_device[i].peer_bdaddr, bd_addr) == 0 &&
46397fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bta_dm_cb.device_list.peer_device[i].conn_state == BTA_DM_CONNECTED)
46407fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            break;
46417fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    }
46427fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
46437fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if (i < bta_dm_cb.device_list.count)
46447fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    {
46457fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        p_callback = bta_dm_cb.device_list.peer_device[i].p_encrypt_cback;
46467fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        bta_dm_cb.device_list.peer_device[i].p_encrypt_cback = NULL;
46477fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    }
46487fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
46495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (result)
46505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
46515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_SUCCESS:
46525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
46535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_WRONG_MODE:
46545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_status = BTA_WRONG_MODE;
46555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
46565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_NO_RESOURCES:
46575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_status = BTA_NO_RESOURCES;
46585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
46595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_BUSY:
46605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_status = BTA_BUSY;
46615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
46625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
46635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_status = BTA_FAILURE;
46645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
46655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
46665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4667e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_encrypt_cback status =%d p_callback=0x%x", bta_status, p_callback);
46685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_callback)
46705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
46717fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        (*p_callback)(bd_addr, transport, bta_status);
46725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
46735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
46745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
46755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_set_encryption
46775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function to encrypt the link
46795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
46815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
46825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
46835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_set_encryption (tBTA_DM_MSG *p_data)
46845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
46857fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    UINT8 i ;
46865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4687e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_set_encryption"); //todo
46885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_data->set_encryption.p_callback)
46895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4690e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR("bta_dm_set_encryption callback is not provided");
46915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
46925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
46935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
46947fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    for (i=0; i<bta_dm_cb.device_list.count; i++)
46955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
46967fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if (bdcmp( bta_dm_cb.device_list.peer_device[i].peer_bdaddr, p_data->set_encryption.bd_addr) == 0 &&
46977fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bta_dm_cb.device_list.peer_device[i].conn_state == BTA_DM_CONNECTED)
46987fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            break;
46995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
47007fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if (i < bta_dm_cb.device_list.count)
47017fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    {
47027fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if (bta_dm_cb.device_list.peer_device[i].p_encrypt_cback)
47037fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        {
4704e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_ERROR("earlier enc was not done for same device");
47057fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            (*p_data->set_encryption.p_callback)(p_data->set_encryption.bd_addr,
47067fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                p_data->set_encryption.transport, BTA_BUSY);
47077fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            return;
47087fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        }
47095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47107fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        if (BTM_SetEncryption(p_data->set_encryption.bd_addr,
47117fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                              p_data->set_encryption.transport,
47127fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                              bta_dm_encrypt_cback,
47137fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                              &p_data->set_encryption.sec_act)
47147fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                              == BTM_CMD_STARTED)
47157fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        {
47167fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bta_dm_cb.device_list.peer_device[i].p_encrypt_cback = p_data->set_encryption.p_callback;
47177fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        }
47187fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    }
47197fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    else
47207fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    {
4721e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR(" %s Device not found/not connected", __FUNCTION__);
47227fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    }
47235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
47245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
47265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_set_afh_channels
47285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      set afh channels
47305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
47335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
47355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_set_afh_channels(tBTA_DM_MSG * p_data)
47365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
47375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SetAfhChannels(p_data->set_afhchannels.first,p_data->set_afhchannels.last);
47395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
47405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
47425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_set_afh_channel_assesment
47445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      set afh channel assesment
47465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
47495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
47505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
47515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_set_afh_channel_assesment (tBTA_DM_MSG * p_data)
47535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
47545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SetAfhChannelAssessment(p_data->set_afh_channel_assessment.enable_or_disable);
47555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
47565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
47575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE)
4758ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
4759ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4760ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         bta_dm_observe_results_cb
4761ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4762ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      Callback for BLE Observe result
4763ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4764ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4765ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          void
4766ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4767ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
4768ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_observe_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir)
4769ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
4770ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta;
4771ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_DM_SEARCH     result;
4772ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTM_INQ_INFO      *p_inq_info;
4773ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT16             service_class;
4774e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_observe_results_cb")
4775ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4776ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(result.inq_res.bd_addr, p_inq->remote_bd_addr);
4777ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    result.inq_res.rssi = p_inq->rssi;
4778ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    result.inq_res.ble_addr_type    = p_inq->ble_addr_type;
4779ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    result.inq_res.inq_result_type  = p_inq->inq_result_type;
4780ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    result.inq_res.device_type      = p_inq->device_type;
4781ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4782ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    /* application will parse EIR to find out remote device name */
4783ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    result.inq_res.p_eir = p_eir;
4784ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4785ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if((p_inq_info = BTM_InqDbRead(p_inq->remote_bd_addr)) != NULL)
4786ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
4787ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* initialize remt_name_not_required to FALSE so that we get the name by default */
4788ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        result.inq_res.remt_name_not_required = FALSE;
4789ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
4790ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4791ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if(bta_dm_search_cb.p_scan_cback)
4792ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_RES_EVT, &result);
4793ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4794ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if(p_inq_info)
4795ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
4796ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /* application indicates if it knows the remote name, inside the callback
4797ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta         copy that to the inquiry data base*/
4798ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if(result.inq_res.remt_name_not_required)
4799ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_inq_info->appl_knows_rem_name = TRUE;
4800ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
4801ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
4802ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4803ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
4804ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4805ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         bta_dm_observe_cmpl_cb
4806ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4807ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      Callback for BLE Observe complete
4808ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4809ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4810ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns          void
4811ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
4812ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
4813ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_observe_cmpl_cb (void * p_result)
4814ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
4815ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_DM_SEARCH  data;
4816ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4817e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_observe_cmpl_cb");
4818ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4819ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    data.inq_cmpl.num_resps = ((tBTM_INQUIRY_CMPL *)p_result)->num_resp;
4820ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (bta_dm_search_cb.p_scan_cback)
4821ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
4822ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_CMPL_EVT, &data);
4823ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
4824ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
4825ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
48265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (SMP_INCLUDED == TRUE)
48275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
48285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_ble_smp_cback
48305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback for BLE SMP
48325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
48355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
48365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
48375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_ble_smp_cback (tBTM_LE_EVT event, BD_ADDR bda, tBTM_LE_EVT_DATA *p_data)
48385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
48395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTM_STATUS status = BTM_SUCCESS;
48405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC sec_event;
4841181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach    char* p_name = NULL;
4842ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    UINT8 i;
4843ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4844e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_ble_smp_cback");
48455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!bta_dm_cb.p_sec_cback)
48475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return BTM_NOT_AUTHORIZED;
48485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    memset(&sec_event, 0, sizeof(tBTA_DM_SEC));
48505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (event)
48515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
48525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_LE_IO_REQ_EVT:
48535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE)
48545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_co_ble_io_req(bda,
48565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 &p_data->io_req.io_cap,
48575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 &p_data->io_req.oob_data,
48585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 &p_data->io_req.auth_req,
48595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 &p_data->io_req.max_key_size,
48605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 &p_data->io_req.init_keys,
48615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                 &p_data->io_req.resp_keys);
48625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
48635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_OOB_INCLUDED == FALSE
48645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = BTM_SUCCESS;
48655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
4866e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_EVENT("io mitm: %d oob_data:%d", p_data->io_req.auth_req, p_data->io_req.oob_data);
48675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
48695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_LE_SEC_REQUEST_EVT:
48715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(sec_event.ble_req.bd_addr, bda);
4872181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            p_name = BTM_SecReadDevName(bda);
4873181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            if (p_name != NULL)
4874181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            {
4875181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach                BCM_STRNCPY_S((char*)sec_event.ble_req.bd_name,
4876181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach                               sizeof(BD_NAME), p_name, (BD_NAME_LEN));
4877181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            }
4878181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            else
4879181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            {
4880181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach                sec_event.ble_req.bd_name[0] = 0;
4881181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            }
48825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_BLE_SEC_REQ_EVT, &sec_event);
48835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
48845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
48855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_LE_KEY_NOTIF_EVT:
48865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(sec_event.key_notif.bd_addr, bda);
4887181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            p_name = BTM_SecReadDevName(bda);
4888181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            if (p_name != NULL)
4889181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            {
4890181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach                BCM_STRNCPY_S((char*)sec_event.key_notif.bd_name,
4891181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach                               sizeof(BD_NAME), p_name, (BD_NAME_LEN));
4892181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            }
4893181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            else
4894181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            {
4895181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach                sec_event.key_notif.bd_name[0] = 0;
4896181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            }
4897181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach           sec_event.key_notif.passkey = p_data->key_notif;
4898181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach           bta_dm_cb.p_sec_cback(BTA_DM_BLE_PASSKEY_NOTIF_EVT, &sec_event);
4899181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach           break;
49005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_LE_KEY_REQ_EVT:
49025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(sec_event.ble_req.bd_addr, bda);
49035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_BLE_PASSKEY_REQ_EVT, &sec_event);
49045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
49055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_LE_OOB_REQ_EVT:
49075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(sec_event.ble_req.bd_addr, bda);
49085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_BLE_OOB_REQ_EVT, &sec_event);
49095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
49105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_LE_KEY_EVT:
49125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(sec_event.ble_key.bd_addr, bda);
49135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            sec_event.ble_key.key_type = p_data->key.key_type;
4914ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4915ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_data->key.key_type == BTM_LE_KEY_PID)
4916ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
4917ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                for (i=0; i<BT_OCTET16_LEN; i++ )
4918ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                {
4919ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    sec_event.ble_key.key_value.pid_key.irk[i] = p_data->key.p_key_value->pid_key.irk[i];
4920ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                }
4921ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                sec_event.ble_key.key_value.pid_key.addr_type = p_data->key.p_key_value->pid_key.addr_type;
4922ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                memcpy( &(sec_event.ble_key.key_value.pid_key.static_addr),
4923ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                        &(p_data->key.p_key_value->pid_key.static_addr),
4924ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                        sizeof (BD_ADDR));
4925ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
4926ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            else
4927ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
4928ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                memcpy(&sec_event.ble_key.key_value, p_data->key.p_key_value, sizeof(tBTM_LE_KEY_VALUE));
4929ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
4930ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            // memcpy(&sec_event.ble_key.key_value, p_data->key.p_key_value, sizeof(tBTM_LE_KEY_VALUE)); todo will crash
49315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_cb.p_sec_cback(BTA_DM_BLE_KEY_EVT, &sec_event);
49325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
49335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_LE_COMPLT_EVT:
49355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy(sec_event.auth_cmpl.bd_addr, bda);
4936181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            p_name = BTM_SecReadDevName(bda);
4937181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            if (p_name != NULL)
4938181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            {
4939181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach                BCM_STRNCPY_S((char*)sec_event.auth_cmpl.bd_name,
4940181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach                               sizeof(BD_NAME), p_name, (BD_NAME_LEN));
4941181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            }
4942181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            else
4943181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            {
4944181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach                sec_event.auth_cmpl.bd_name[0] = 0;
4945181d075dac97efec96390db3b27db50861af5e7aAndre Eisenbach            }
49465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->complt.reason != 0)
4947ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
49485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                sec_event.auth_cmpl.fail_reason = BTA_DM_AUTH_CONVERT_SMP_CODE(((UINT8)p_data->complt.reason));
4949ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                /* delete this device entry from Sec Dev DB */
4950ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                bta_dm_remove_sec_dev_entry (bda);
4951ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
49525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
4953ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
49545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                sec_event.auth_cmpl.success = TRUE;
4955adc9f28ad418356cb81640059b59eee4d862e6b4Chaojing Sun                GATT_ConfigServiceChangeCCC(bda, TRUE, BT_TRANSPORT_LE);
4956ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
49575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (bta_dm_cb.p_sec_cback)
49585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
49595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                //bta_dm_cb.p_sec_cback(BTA_DM_AUTH_CMPL_EVT, &sec_event);
49605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_cb.p_sec_cback(BTA_DM_BLE_AUTH_CMPL_EVT, &sec_event);
49615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
49625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
49645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
49665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            status = BTM_NOT_AUTHORIZED;
49675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
49685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
49695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return status;
49705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
49715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif  /* SMP_INCLUDED == TRUE */
49725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
49745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_ble_id_key_cback
49765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      Callback for BLE local ID keys
49785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
49815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
49825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
49835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_ble_id_key_cback (UINT8 key_type, tBTM_BLE_LOCAL_KEYS *p_key)
49845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
49855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   evt;
49865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEC dm_key;
49875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (key_type)
49895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
49905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_BLE_KEY_TYPE_ID:
49915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTM_BLE_KEY_TYPE_ER:
49925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (bta_dm_cb.p_sec_cback)
49935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
49945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memcpy(&dm_key.ble_id_keys, p_key, sizeof(tBTM_BLE_LOCAL_KEYS));
49955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
49965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                evt = (key_type == BTM_BLE_KEY_TYPE_ID) ? BTA_DM_BLE_LOCAL_IR_EVT :\
49975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      BTA_DM_BLE_LOCAL_ER_EVT;
49985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_cb.p_sec_cback(evt, &dm_key);
49995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
50005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
50015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
5003e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_DEBUG("Unknown key type %d", key_type);
50045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
50055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
50065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
50075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_add_blekey
50135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function adds an BLE Key to an security database entry.
50155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  This function shall only be called AFTER BTA_DmAddBleDevice has been called.
50165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  It is normally called during host startup to restore all required information
50175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  stored in the NVRAM.
50185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
50205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_add_blekey (tBTA_DM_MSG *p_data)
50235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
50245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!BTM_SecAddBleKey (p_data->add_ble_key.bd_addr,
50255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           (tBTM_LE_KEY_VALUE *)&p_data->add_ble_key.blekey,
50265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           p_data->add_ble_key.key_type))
50275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5028e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR ("BTA_DM: Error adding BLE Key for device %08x%04x",
50295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           (p_data->add_ble_key.bd_addr[0]<<24)+(p_data->add_ble_key.bd_addr[1]<<16)+\
50305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           (p_data->add_ble_key.bd_addr[2]<<8)+p_data->add_ble_key.bd_addr[3],
50315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           (p_data->add_ble_key.bd_addr[4]<<8)+p_data->add_ble_key.bd_addr[5]);
50325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
50335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_add_ble_device
50385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function adds an BLE device to an security database entry.
50405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  It is normally called during host startup to restore all required information
50415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  stored in the NVRAM.
50425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
50445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_add_ble_device (tBTA_DM_MSG *p_data)
50475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
50485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!BTM_SecAddBleDevice (p_data->add_ble_device.bd_addr, NULL,
50495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->add_ble_device.dev_type  ,
50505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                              p_data->add_ble_device.addr_type))
50515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5052e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR ("BTA_DM: Error adding BLE Device for device %08x%04x",
50535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           (p_data->add_ble_device.bd_addr[0]<<24)+(p_data->add_ble_device.bd_addr[1]<<16)+ \
50545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           (p_data->add_ble_device.bd_addr[2]<<8)+p_data->add_ble_device.bd_addr[3],
50555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           (p_data->add_ble_device.bd_addr[4]<<8)+p_data->add_ble_device.bd_addr[5]);
50565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
50575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_add_ble_device
50625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function adds an BLE device to an security database entry.
50645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  It is normally called during host startup to restore all required information
50655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  stored in the NVRAM.
50665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
50685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ble_passkey_reply (tBTA_DM_MSG *p_data)
50715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
50725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->pin_reply.accept)
50735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
50745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_BlePasskeyReply(p_data->ble_passkey_reply.bd_addr, BTM_SUCCESS, p_data->ble_passkey_reply.passkey);
50755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
50765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
50775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
50785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTM_BlePasskeyReply(p_data->ble_passkey_reply.bd_addr, BTM_NOT_AUTHORIZED, p_data->ble_passkey_reply.passkey);
50795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
50805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_security_grant
50865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function grant SMP security request access.
50885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
50905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
50925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_security_grant (tBTA_DM_MSG *p_data)
50935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
50945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_SecurityGrant(p_data->ble_sec_grant.bd_addr, p_data->ble_sec_grant.res);
50955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
50965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
50975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
50985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
50995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_ble_set_bg_conn_type
51005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function set the BLE background connection type
51025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
51045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
51065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ble_set_bg_conn_type (tBTA_DM_MSG *p_data)
51075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
51085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_BleSetBgConnType(p_data->ble_set_bd_conn_type.bg_conn_type,
51095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                         p_data->ble_set_bd_conn_type.p_select_cback);
51105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
51115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
51135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_ble_set_conn_params
51155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function set the preferred connection parameters.
51175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
51195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
51215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ble_set_conn_params (tBTA_DM_MSG *p_data)
51225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
51235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_BleSetPrefConnParams(p_data->ble_set_conn_params.peer_bda,
51245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                             p_data->ble_set_conn_params.conn_int_min,
51255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                             p_data->ble_set_conn_params.conn_int_max,
51265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                             p_data->ble_set_conn_params.slave_latency,
51275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                             p_data->ble_set_conn_params.supervision_tout);
51285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
51295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
51315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_ble_set_scan_params
51335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function set the preferred connection scan parameters.
51355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
51375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
51385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
51395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ble_set_scan_params (tBTA_DM_MSG *p_data)
51405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
51415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTM_BleSetConnScanParams(p_data->ble_set_scan_params.scan_int,
51425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                             p_data->ble_set_scan_params.scan_window);
51435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
51447fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta/*******************************************************************************
51457fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**
51467fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta** Function         bta_dm_ble_update_conn_params
51477fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**
51487fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta** Description      This function update LE connection parameters.
51497fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**
51507fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta** Parameters:
51517fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**
51527fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta*******************************************************************************/
51537fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battavoid bta_dm_ble_update_conn_params (tBTA_DM_MSG *p_data)
51547fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta{
51557fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    if (!L2CA_UpdateBleConnParams(p_data->ble_update_conn_params.bd_addr,
51567fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                 p_data->ble_update_conn_params.min_int,
515716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                 p_data->ble_update_conn_params.max_int,
51587fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                 p_data->ble_update_conn_params.latency,
51597fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                 p_data->ble_update_conn_params.timeout))
51607fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    {
5161e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR("Update connection parameters failed!");
51627fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    }
51637fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta}
51645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
51657fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#if BLE_PRIVACY_SPT == TRUE
51667fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta/*******************************************************************************
51677fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**
51687fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta** Function         bta_dm_ble_config_local_privacy
51697fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**
51707fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta** Description      This function set the local device LE privacy settings.
51717fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**
51727fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta** Parameters:
51737fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta**
51747fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta*******************************************************************************/
51757fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battavoid bta_dm_ble_config_local_privacy (tBTA_DM_MSG *p_data)
51767fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta{
51777fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    BTM_BleConfigPrivacy (p_data->ble_local_privacy.privacy_enable);
51787fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta}
51797fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta#endif
5180ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
5181ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
5182ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function         bta_dm_ble_observe
5183ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
5184ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description      This function set the preferred connection scan parameters.
5185ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
5186ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters:
5187ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**
5188ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/
5189ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid bta_dm_ble_observe (tBTA_DM_MSG *p_data)
5190ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
5191ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTM_STATUS status;
5192ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (p_data->ble_observe.start)
5193ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
5194ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        /*Save the  callback to be called when a scan results are available */
5195ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_dm_search_cb.p_scan_cback = p_data->ble_observe.p_cback;
5196ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if ((status = BTM_BleObserve(TRUE, p_data->ble_observe.duration,
5197b6b14bb541e87d285bd21d43508872c6ca97affbPriti Aghera                            bta_dm_observe_results_cb, bta_dm_observe_cmpl_cb))!= BTM_CMD_STARTED)
5198ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
5199ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            tBTA_DM_SEARCH  data;
5200e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_WARNING(" %s BTM_BleObserve  failed. status %d",__FUNCTION__,status);
5201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            data.inq_cmpl.num_resps = 0;
5202ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (bta_dm_search_cb.p_scan_cback)
5203ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
5204ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_CMPL_EVT, &data);
5205ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
5206ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
5207ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
5208ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    else
5209ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
5210ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        bta_dm_search_cb.p_scan_cback = NULL;
5211ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        BTM_BleObserve(FALSE, 0, NULL,NULL );
5212ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
5213ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
52145c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach/*******************************************************************************
52155c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
52165c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Function         bta_dm_ble_set_scan_params
52175c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
52185c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Description      This function set the adv parameters.
52195c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
52205c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Parameters:
52215c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
52225c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach*******************************************************************************/
52235c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachvoid bta_dm_ble_set_adv_params (tBTA_DM_MSG *p_data)
52245c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
52255c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    BTM_BleSetAdvParams(p_data->ble_set_adv_params.adv_int_min,
52265c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                        p_data->ble_set_adv_params.adv_int_max,
52275c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                        p_data->ble_set_adv_params.p_dir_bda,
52285c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                        BTA_DM_BLE_ADV_CHNL_MAP);
52295c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
5230eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
52315c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach/*******************************************************************************
52325c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
52335c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Function         bta_dm_ble_set_adv_config
52345c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
52355c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Description      This function set the customized ADV data configuration
52365c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
52375c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach** Parameters:
52385c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach**
52395c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach*******************************************************************************/
52405c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachvoid bta_dm_ble_set_adv_config (tBTA_DM_MSG *p_data)
52415c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
5242a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    tBTA_STATUS status = BTA_FAILURE;
5243a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
5244a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    if (BTM_BleWriteAdvData(p_data->ble_set_adv_data.data_mask,
5245a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        (tBTM_BLE_ADV_DATA *)p_data->ble_set_adv_data.p_adv_cfg) == BTM_SUCCESS)
5246a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    {
5247a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        status = BTA_SUCCESS;
5248a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    }
5249a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
5250a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    if (p_data->ble_set_adv_data.p_adv_data_cback)
5251a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        (*p_data->ble_set_adv_data.p_adv_data_cback)(status);
52525c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
52535c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
5254eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach/*******************************************************************************
5255eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach**
5256eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach** Function         bta_dm_ble_set_scan_rsp
5257eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach**
5258eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach** Description      This function set the customized ADV scan resp. configuration
5259eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach**
5260eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach** Parameters:
5261eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach**
5262eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach*******************************************************************************/
5263eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbachvoid bta_dm_ble_set_scan_rsp (tBTA_DM_MSG *p_data)
5264eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach{
5265a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    tBTA_STATUS status = BTA_FAILURE;
5266a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
5267a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    if(BTM_BleWriteScanRsp(p_data->ble_set_adv_data.data_mask,
5268a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        (tBTM_BLE_ADV_DATA *)p_data->ble_set_adv_data.p_adv_cfg) == BTM_SUCCESS)
5269a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    {
5270a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        status = BTA_SUCCESS;
5271a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    }
5272a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
5273a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    if (p_data->ble_set_adv_data.p_adv_data_cback)
5274a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        (*p_data->ble_set_adv_data.p_adv_data_cback)(status);
5275eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach}
5276eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
5277eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach/*******************************************************************************
5278eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach**
5279eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach** Function         bta_dm_ble_broadcast
5280eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach**
5281eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach** Description      Starts or stops LE broadcasts
5282eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach**
5283eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach** Parameters:
5284eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach**
5285eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach*******************************************************************************/
5286eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbachvoid bta_dm_ble_broadcast (tBTA_DM_MSG *p_data)
5287eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach{
5288eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach    BTM_BleBroadcast(p_data->ble_observe.start);
5289eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach}
5290ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
5291a6ce7751d84218c193eb90d390aef23217b1737eWei Wang/*******************************************************************************
5292a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
5293a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Function         bta_dm_ble_multi_adv_enb
5294a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
5295a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Description      This function enables a single advertising instance
5296a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
5297a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Parameters:
5298a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
5299a6ce7751d84218c193eb90d390aef23217b1737eWei Wang*******************************************************************************/
5300a6ce7751d84218c193eb90d390aef23217b1737eWei Wangvoid bta_dm_ble_multi_adv_enb(tBTA_DM_MSG *p_data)
5301a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
530216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_STATUS btm_status = 0;
530316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    void *p_ref = NULL;
530416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
530516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    bta_dm_cb.p_multi_adv_cback = p_data->ble_multi_adv_enb.p_cback;
530616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_BleMaxMultiAdvInstanceCount() > 0 && NULL != p_data->ble_multi_adv_enb.p_ref)
530716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
530816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleEnableAdvInstance((tBTM_BLE_ADV_PARAMS*)
530916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_multi_adv_enb.p_params,
531016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_multi_adv_enb.p_cback,
531116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_multi_adv_enb.p_ref);
531216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
531316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
531416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_CMD_STARTED != btm_status)
531516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
531616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        bta_dm_cb.p_multi_adv_cback(BTA_BLE_MULTI_ADV_ENB_EVT, 0xFF,
531716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                    p_data->ble_multi_adv_enb.p_ref, BTA_FAILURE);
531816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
5319a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
5320a6ce7751d84218c193eb90d390aef23217b1737eWei Wang/*******************************************************************************
5321a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
5322a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Function         bta_dm_ble_multi_adv_param_upd
5323a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
5324a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Description      This function updates multiple advertising instance parameters
5325a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
5326a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Parameters:
5327a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
5328a6ce7751d84218c193eb90d390aef23217b1737eWei Wang*******************************************************************************/
5329a6ce7751d84218c193eb90d390aef23217b1737eWei Wangvoid bta_dm_ble_multi_adv_upd_param(tBTA_DM_MSG *p_data)
5330a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
533116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_STATUS btm_status = 0;
533216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    void *p_ref = NULL;
533316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
533416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_BleMaxMultiAdvInstanceCount() > 0 && p_data->ble_multi_adv_param.inst_id > 0
533516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        && p_data->ble_multi_adv_param.inst_id < BTM_BleMaxMultiAdvInstanceCount())
533616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
533716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleUpdateAdvInstParam(p_data->ble_multi_adv_param.inst_id,
533816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                         (tBTM_BLE_ADV_PARAMS*)p_data->ble_multi_adv_param.p_params);
533916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
534016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
534116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_CMD_STARTED != btm_status)
534216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
534316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham       p_ref = btm_ble_multi_adv_get_ref(p_data->ble_multi_adv_param.inst_id);
534416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham       bta_dm_cb.p_multi_adv_cback(BTA_BLE_MULTI_ADV_PARAM_EVT,
534516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                   p_data->ble_multi_adv_param.inst_id, p_ref, BTA_FAILURE);
534616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
5347a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
5348a6ce7751d84218c193eb90d390aef23217b1737eWei Wang/*******************************************************************************
5349a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
5350a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Function         bta_dm_ble_multi_adv_data
5351a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
5352a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Description      This function write multiple advertising instance adv data
5353a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**                  or scan response data
5354a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
5355a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Parameters:
5356a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
5357a6ce7751d84218c193eb90d390aef23217b1737eWei Wang*******************************************************************************/
5358a6ce7751d84218c193eb90d390aef23217b1737eWei Wangvoid bta_dm_ble_multi_adv_data(tBTA_DM_MSG *p_data)
5359a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
536016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_STATUS btm_status = 0;
536116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    void *p_ref = NULL;
536216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
536316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_BleMaxMultiAdvInstanceCount() > 0 && p_data->ble_multi_adv_data.inst_id > 0
536416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        && p_data->ble_multi_adv_data.inst_id < BTM_BleMaxMultiAdvInstanceCount())
536516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
536616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleCfgAdvInstData(p_data->ble_multi_adv_data.inst_id,
536716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                        p_data->ble_multi_adv_data.is_scan_rsp,
536816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                        p_data->ble_multi_adv_data.data_mask,
536916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                        (tBTM_BLE_ADV_DATA*)p_data->ble_multi_adv_data.p_data);
537016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
537116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
537216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_CMD_STARTED != btm_status)
537316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
537416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham       p_ref = btm_ble_multi_adv_get_ref(p_data->ble_multi_adv_data.inst_id);
537516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham       bta_dm_cb.p_multi_adv_cback(BTA_BLE_MULTI_ADV_DATA_EVT,
537616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                   p_data->ble_multi_adv_data.inst_id, p_ref, BTA_FAILURE);
537716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
537816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
5379a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
5380a6ce7751d84218c193eb90d390aef23217b1737eWei Wang/*******************************************************************************
5381a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
5382a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Function         btm_dm_ble_multi_adv_disable
5383a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
5384a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Description      This function disable a single adv instance
5385a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
5386a6ce7751d84218c193eb90d390aef23217b1737eWei Wang** Parameters:
5387a6ce7751d84218c193eb90d390aef23217b1737eWei Wang**
5388a6ce7751d84218c193eb90d390aef23217b1737eWei Wang*******************************************************************************/
5389a6ce7751d84218c193eb90d390aef23217b1737eWei Wangvoid btm_dm_ble_multi_adv_disable(tBTA_DM_MSG *p_data)
5390a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
539116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_STATUS btm_status = 0;
539216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    void *p_ref = NULL;
539316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
539416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_BleMaxMultiAdvInstanceCount() > 0 && p_data->ble_multi_adv_disable.inst_id > 0
539516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        && p_data->ble_multi_adv_disable.inst_id < BTM_BleMaxMultiAdvInstanceCount())
539616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
539716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleDisableAdvInstance(p_data->ble_multi_adv_disable.inst_id);
539816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
539916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
540016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_CMD_STARTED != btm_status)
540116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
540216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham       p_ref = btm_ble_multi_adv_get_ref(p_data->ble_multi_adv_disable.inst_id);
540316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham       bta_dm_cb.p_multi_adv_cback(BTA_BLE_MULTI_ADV_DISABLE_EVT,
540416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                   p_data->ble_multi_adv_disable.inst_id, p_ref, BTA_FAILURE);
540516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
5406a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
5407a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
5408c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji/*******************************************************************************
5409c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5410c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Function         bta_dm_ble_setup_storage
5411c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5412c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Description      This function configures up the storage parameters for ADV batch scanning
5413c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5414c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Parameters:
5415c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5416c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji*******************************************************************************/
5417c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojivoid bta_dm_ble_setup_storage (tBTA_DM_MSG *p_data)
5418c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
5419c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    tBTM_STATUS btm_status = 0;
542016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_BLE_VSC_CB cmn_ble_vsc_cb;
5421c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
542216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb);
542316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
542416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (0 != cmn_ble_vsc_cb.tot_scan_results_strg)
542516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
542616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleSetStorageConfig(p_data->ble_set_storage.batch_scan_full_max,
542716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                             p_data->ble_set_storage.batch_scan_trunc_max,
542816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                             p_data->ble_set_storage.batch_scan_notify_threshold,
542916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                             p_data->ble_set_storage.p_setup_cback,
543016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                             p_data->ble_set_storage.p_thres_cback,
543116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                             p_data->ble_set_storage.p_read_rep_cback,
543216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                             p_data->ble_set_storage.ref_value);
543316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
5434c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
5435c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    if(BTM_CMD_STARTED != btm_status)
5436c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji       bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_CFG_STRG_EVT, p_data->ble_set_storage.ref_value,
5437c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                             btm_status);
5438c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
5439c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
5440c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji/*******************************************************************************
5441c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5442c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Function         bta_dm_ble_enable_batch_scan
5443c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5444c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Description      This function sets up the parameters and enables batch scan
5445c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5446c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Parameters:
5447c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5448c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji*******************************************************************************/
5449c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojivoid bta_dm_ble_enable_batch_scan (tBTA_DM_MSG *p_data)
5450c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
5451c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    tBTM_STATUS btm_status = 0;
545216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_BLE_VSC_CB cmn_ble_vsc_cb;
545316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
545416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb);
5455c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
545616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (0 != cmn_ble_vsc_cb.tot_scan_results_strg)
545716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
545816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleEnableBatchScan(p_data->ble_enable_scan.scan_mode,
545916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_enable_scan.scan_int,
546016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_enable_scan.scan_window,
546116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_enable_scan.discard_rule,
546216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_enable_scan.addr_type,
546316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_enable_scan.ref_value);
546416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
5465c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
5466c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    if(BTM_CMD_STARTED != btm_status)
5467c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji       bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_ENABLE_EVT, p_data->ble_enable_scan.ref_value,
546816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                             btm_status);
5469c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
5470c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
5471c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji/*******************************************************************************
5472c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5473c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Function         bta_dm_ble_disable_batch_scan
5474c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5475c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Description      This function disables the batch scan
5476c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5477c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Parameters:
5478c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5479c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji*******************************************************************************/
5480c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojivoid bta_dm_ble_disable_batch_scan (tBTA_DM_MSG *p_data)
5481c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
5482c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    UNUSED(p_data);
5483c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    tBTM_STATUS btm_status = 0;
548416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_BLE_VSC_CB cmn_ble_vsc_cb;
5485c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
548616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb);
548716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
548816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (0 != cmn_ble_vsc_cb.tot_scan_results_strg)
548916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
549016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleDisableBatchScan(p_data->ble_disable_scan.ref_value);
549116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
5492c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
5493c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    if(BTM_CMD_STARTED != btm_status)
5494c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji       bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_DISABLE_EVT, p_data->ble_enable_scan.ref_value,
5495c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                             btm_status);
5496c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
5497c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
5498c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji/*******************************************************************************
5499c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5500c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Function         bta_dm_ble_read_scan_reports
5501c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5502c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Description      This function reads the batch scan reports
5503c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5504c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Parameters:
5505c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5506c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji*******************************************************************************/
5507c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojivoid bta_dm_ble_read_scan_reports(tBTA_DM_MSG *p_data)
5508c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
5509c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    tBTM_STATUS btm_status = 0;
551016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_BLE_VSC_CB cmn_ble_vsc_cb;
5511c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
551216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb);
551316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
551416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (0 != cmn_ble_vsc_cb.tot_scan_results_strg)
551516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
551616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleReadScanReports(p_data->ble_read_reports.scan_type,
551716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_read_reports.ref_value);
551816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
5519c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
5520c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    if(BTM_CMD_STARTED != btm_status)
5521c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji       bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_READ_REPTS_EVT, p_data->ble_enable_scan.ref_value,
5522c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                             btm_status);
5523c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
5524c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
5525c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji/*******************************************************************************
5526c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
55271acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji** Function         bta_dm_ble_track_advertiser
55281acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji**
55291acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji** Description      This function tracks the specific advertiser
55301acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji**
55311acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji** Parameters:
55321acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji**
55331acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji*******************************************************************************/
55341acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Callojivoid bta_dm_ble_track_advertiser(tBTA_DM_MSG *p_data)
55351acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji{
553616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_STATUS btm_status = 0;
553716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    BD_ADDR bda;
553816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    memset(&bda, 0 , sizeof(BD_ADDR));
553916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_BLE_VSC_CB cmn_ble_vsc_cb;
554016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
554116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb);
554216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
554316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (0 != cmn_ble_vsc_cb.tot_scan_results_strg)
554416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
554516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        btm_status = BTM_BleTrackAdvertiser(p_data->ble_track_advert.p_track_adv_cback,
554616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                            p_data->ble_track_advert.ref_value);
554716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
554816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
554916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if(BTM_CMD_STARTED != btm_status)
555016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham       p_data->ble_track_advert.p_track_adv_cback(0, 0, bda, 0, p_data->ble_track_advert.ref_value);
55511acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji}
55521acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji
55531acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji/*******************************************************************************
55541acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji**
5555c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Function         bta_ble_scan_setup_cb
5556c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5557c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Description      Handle the setup callback from BTM layer and forward it to app layer
5558c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5559c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji** Parameters:
5560c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji**
5561c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji*******************************************************************************/
5562c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojivoid bta_ble_scan_setup_cb(tBTM_BLE_BATCH_SCAN_EVT evt, tBTM_BLE_REF_VALUE ref_value,
5563c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                  tBTM_STATUS status)
5564c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
5565c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    tBTA_BLE_BATCH_SCAN_EVT bta_evt = 0;
5566c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
5567f1dba910daa5f0ce9ca89f840bb7e6269f07af1dSatya Calloji    APPL_TRACE_DEBUG("bta_ble_scan_setup_cb : evt: %d, ref_value: %d, status:%d", evt,
5568f1dba910daa5f0ce9ca89f840bb7e6269f07af1dSatya Calloji                      ref_value, status);
5569f1dba910daa5f0ce9ca89f840bb7e6269f07af1dSatya Calloji
5570c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    switch(evt)
5571c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    {
5572c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTM_BLE_BATCH_SCAN_ENABLE_EVT:
5573c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           bta_evt = BTA_BLE_BATCH_SCAN_ENB_EVT;
5574c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
5575c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTM_BLE_BATCH_SCAN_CFG_STRG_EVT:
5576c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           bta_evt = BTA_BLE_BATCH_SCAN_CFG_STRG_EVT;
5577c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
5578c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTM_BLE_BATCH_SCAN_DISABLE_EVT:
5579c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            bta_evt = BTA_BLE_BATCH_SCAN_DIS_EVT;
5580c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
5581c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTM_BLE_BATCH_SCAN_PARAM_EVT:
5582c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            bta_evt = BTA_BLE_BATCH_SCAN_PARAM_EVT;
5583c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
5584c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        default:
5585c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
5586c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    }
5587c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
5588c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    if(NULL != bta_dm_cb.p_setup_cback)
5589c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji       bta_dm_cb.p_setup_cback(bta_evt, ref_value, status);
5590c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
5591c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
55921a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
55931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji#if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE
55941a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji/*******************************************************************************
55951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
55961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Function         bta_ble_scan_pf_cmpl
55971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
55981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Description      ADV payload filtering operation complete callback
55991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
56001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
56011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Returns         TRUE if handled, otherwise FALSE.
56021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
56031a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji*******************************************************************************/
56041a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_ble_scan_cfg_cmpl(tBTM_BLE_PF_ACTION action, tBTM_BLE_SCAN_COND_OP cfg_op,
56051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 tBTM_BLE_PF_AVBL_SPACE avbl_space, tBTM_STATUS status,
56061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 tBTM_BLE_REF_VALUE ref_value)
56071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
56081a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_STATUS st = (status == BTM_SUCCESS) ? BTA_SUCCESS: BTA_FAILURE;
56091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
56101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    APPL_TRACE_DEBUG("bta_ble_scan_cfg_cmpl: %d, %d, %d, %d", action, cfg_op, avbl_space, status);
56111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
56121a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if(bta_dm_cb.p_scan_filt_cfg_cback)
56131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji       bta_dm_cb.p_scan_filt_cfg_cback(action, cfg_op, avbl_space, st, ref_value);
56141a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
56151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
56161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji/*******************************************************************************
56171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
5618e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji** Function         bta_ble_status_cmpl
56191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
56201a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Description      ADV payload filtering enable / disable complete callback
56211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
56221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
56231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Returns          None
56241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
56251a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji*******************************************************************************/
56261a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_ble_status_cmpl(tBTM_BLE_PF_ACTION action, tBTM_BLE_REF_VALUE ref_value,
56271a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                    tBTM_STATUS status)
56281a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
56291a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_STATUS st = (status == BTM_SUCCESS) ? BTA_SUCCESS: BTA_FAILURE;
56301a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
56311a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    APPL_TRACE_DEBUG("bta_ble_status_cmpl: %d, %d", action, status);
56321a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
56331a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if(bta_dm_cb.p_scan_filt_status_cback)
56341a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji       bta_dm_cb.p_scan_filt_status_cback(action, ref_value, st);
56351a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
56361a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
56371a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji/*******************************************************************************
56381a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
56391a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Function         bta_dm_cfg_filter_cond
56401a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
56411a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Description      This function configure adv payload filtering condition
56421a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
56431a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Parameters:
56441a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
56451a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji*******************************************************************************/
56461a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojivoid bta_dm_cfg_filter_cond (tBTA_DM_MSG *p_data)
56471a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
56481a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTM_STATUS st = BTM_MODE_UNSUPPORTED;
56491a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_STATUS status = BTA_FAILURE;
56501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
56511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTM_BLE_VSC_CB cmn_vsc_cb;
56521a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
56531a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    APPL_TRACE_DEBUG("bta_dm_cfg_filter_cond");
56541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTM_BleGetVendorCapabilities(&cmn_vsc_cb);
56551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if(0 != cmn_vsc_cb.filter_support)
56561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    {
56571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        if ((st = BTM_BleCfgFilterCondition(p_data->ble_cfg_filter_cond.action,
56581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                            p_data->ble_cfg_filter_cond.cond_type,
56591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                            (tBTM_BLE_PF_FILT_INDEX)p_data->ble_cfg_filter_cond.filt_index,
56601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                            (tBTM_BLE_PF_COND_PARAM *)p_data->ble_cfg_filter_cond.p_cond_param,
56611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                            bta_ble_scan_cfg_cmpl, p_data->ble_cfg_filter_cond.ref_value))
56621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                == BTM_CMD_STARTED)
56631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
56641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            bta_dm_cb.p_scan_filt_cfg_cback = p_data->ble_cfg_filter_cond.p_filt_cfg_cback;
56651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            return;
56661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
56671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    }
56681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
56691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if (p_data->ble_cfg_filter_cond.p_filt_cfg_cback)
56701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        p_data->ble_cfg_filter_cond.p_filt_cfg_cback(BTA_DM_BLE_PF_CONFIG_EVT,
56711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                            p_data->ble_cfg_filter_cond.cond_type, 0, status,
56721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                            p_data->ble_cfg_filter_cond.ref_value);
56731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return;
56741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
56751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
56761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji/*******************************************************************************
56771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
56781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Function         bta_dm_enable_scan_filter
56791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
56801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Description      This function enable/disable adv payload filtering condition
56811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
56821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Parameters:
56831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
56841a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji*******************************************************************************/
56851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojivoid bta_dm_enable_scan_filter(tBTA_DM_MSG *p_data)
56861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
56871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTM_STATUS st = BTM_MODE_UNSUPPORTED;
56881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_STATUS status = BTA_FAILURE;
56891a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
56901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTM_BLE_VSC_CB cmn_vsc_cb;
56911a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    APPL_TRACE_DEBUG("bta_dm_enable_scan_filter");
56921a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTM_BleGetVendorCapabilities(&cmn_vsc_cb);
56931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
56941a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if(0 != cmn_vsc_cb.filter_support)
56951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    {
56961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        if((st = BTM_BleEnableDisableFilterFeature(p_data->ble_enable_scan_filt.action,
56971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   p_data->ble_enable_scan_filt.p_filt_status_cback,
56981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   (tBTM_BLE_REF_VALUE)p_data->ble_enable_scan_filt.ref_value)) == BTM_CMD_STARTED)
56991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        bta_dm_cb.p_scan_filt_status_cback = p_data->ble_enable_scan_filt.p_filt_status_cback;
57001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        return;
57011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    }
57021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
57031a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if (p_data->ble_enable_scan_filt.p_filt_status_cback)
57041a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        p_data->ble_enable_scan_filt.p_filt_status_cback (BTA_DM_BLE_PF_ENABLE_EVT,
57051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                            p_data->ble_enable_scan_filt.ref_value, status);
57061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
57071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
5708e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
57091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji/*******************************************************************************
57101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
57111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Function         bta_dm_scan_filter_param_setup
57121a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
57131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Description      This function sets up scan filter params
57141a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
57151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji** Parameters:
57161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji**
57171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji*******************************************************************************/
57181a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojivoid bta_dm_scan_filter_param_setup (tBTA_DM_MSG *p_data)
57191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
57201a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTM_STATUS st = BTM_MODE_UNSUPPORTED;
57211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_STATUS status = BTA_FAILURE;
57221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
57231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTM_BLE_VSC_CB cmn_vsc_cb;
57241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
57251a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    APPL_TRACE_DEBUG("bta_dm_scan_filter_param_setup");
57261a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTM_BleGetVendorCapabilities(&cmn_vsc_cb);
57271a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if(0 != cmn_vsc_cb.filter_support)
57281a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    {
57291a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        if ((st = BTM_BleAdvFilterParamSetup(p_data->ble_scan_filt_param_setup.action,
57301a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   p_data->ble_scan_filt_param_setup.filt_index,
57311a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                  (tBTM_BLE_PF_FILT_PARAMS *)p_data->ble_scan_filt_param_setup.p_filt_params,
57321a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   p_data->ble_scan_filt_param_setup.p_target,
57331a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   p_data->ble_scan_filt_param_setup.p_filt_param_cback,
57341a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   p_data->ble_scan_filt_param_setup.ref_value)) == BTM_CMD_STARTED)
57351a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
57361a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            bta_dm_cb.p_scan_filt_param_cback = p_data->ble_scan_filt_param_setup.p_filt_param_cback;
57371a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            return;
57381a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
57391a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    }
57401a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
57411a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if (p_data->ble_scan_filt_param_setup.p_filt_param_cback)
57421a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        p_data->ble_scan_filt_param_setup.p_filt_param_cback (BTA_DM_BLE_PF_ENABLE_EVT, 0,
57431a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                        p_data->ble_scan_filt_param_setup.ref_value, status);
57441a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
57451a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return;
57461a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
57471a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji#endif
57481a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
574916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham/*******************************************************************************
575016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
575116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham** Function         bta_ble_enable_scan_cmpl
575216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
575316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham** Description      ADV payload filtering enable / disable complete callback
575416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
575516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
575616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham** Returns          None
575716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
575816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham*******************************************************************************/
575916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadhamstatic void bta_ble_energy_info_cmpl(tBTM_BLE_TX_TIME_MS tx_time,
576016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                        tBTM_BLE_RX_TIME_MS rx_time,
576116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                        tBTM_BLE_IDLE_TIME_MS idle_time,
576216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                        tBTM_BLE_ENERGY_USED  energy_used,
576316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                                        tBTM_STATUS status)
576416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham{
576516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTA_STATUS st = (status == BTM_SUCCESS) ? BTA_SUCCESS: BTA_FAILURE;
576616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTA_DM_CONTRL_STATE ctrl_state = 0;
576716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
576816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (BTA_SUCCESS == st)
576916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham       ctrl_state = bta_dm_pm_obtain_controller_state();
577016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
577116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (bta_dm_cb.p_energy_info_cback)
577216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        bta_dm_cb.p_energy_info_cback(tx_time, rx_time, idle_time, energy_used, ctrl_state, st);
577316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham}
577416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
577516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham/*******************************************************************************
577616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
577716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham** Function         bta_dm_ble_get_energy_info
577816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
577916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham** Description      This function obtains the energy info
578016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
578116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham** Parameters:
578216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham**
578316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham*******************************************************************************/
578416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadhamvoid bta_dm_ble_get_energy_info(tBTA_DM_MSG *p_data)
578516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham{
578616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    tBTM_STATUS btm_status = 0;
578716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
578816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    bta_dm_cb.p_energy_info_cback = p_data->ble_energy_info.p_energy_info_cback;
578916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    btm_status = BTM_BleGetEnergyInfo(bta_ble_energy_info_cmpl);
579016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (BTM_CMD_STARTED != btm_status)
579116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        bta_ble_energy_info_cmpl(0, 0, 0, 0, btm_status);
579216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham}
579316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
57945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ((defined BTA_GATT_INCLUDED) &&  (BTA_GATT_INCLUDED == TRUE))
57956975b4d711142b885af479721cada448952c6b41Andre Eisenbach#ifndef BTA_DM_GATT_CLOSE_DELAY_TOUT
57966975b4d711142b885af479721cada448952c6b41Andre Eisenbach#define BTA_DM_GATT_CLOSE_DELAY_TOUT    1000
57976975b4d711142b885af479721cada448952c6b41Andre Eisenbach#endif
57985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
57995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
58005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5801e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach** Function         bta_dm_gattc_register
5802e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach**
5803e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach** Description      Register with GATTC in DM if BLE is needed.
5804e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach**
5805e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach**
5806e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach** Returns          void
5807e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach**
5808e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach*******************************************************************************/
5809e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbachstatic void bta_dm_gattc_register(void)
5810e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach{
5811e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    tBT_UUID                app_uuid = {LEN_UUID_128,{0}};
5812e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach
5813e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    if (bta_dm_search_cb.client_if == BTA_GATTS_INVALID_IF)
5814e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    {
5815e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        memset (&app_uuid.uu.uuid128, 0x87, LEN_UUID_128);
5816e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach        BTA_GATTC_AppRegister(&app_uuid, bta_dm_gattc_callback);
5817e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach    }
5818e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach}
5819e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach
5820e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach/*******************************************************************************
5821e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach**
58225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btm_dm_start_disc_gatt_services
58235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
58245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function starts a GATT service search request.
58255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
58265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
58275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
58285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
58295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btm_dm_start_disc_gatt_services (UINT16 conn_id)
58305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
58315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBT_UUID    *p_uuid = bta_dm_search_cb.p_srvc_uuid +
58325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                          bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search;
58335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
58345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_uuid = bta_dm_search_cb.p_srvc_uuid +
58355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project             bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search;
58365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
58375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* always search for all services */
58385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BTA_GATTC_ServiceSearchRequest(conn_id, p_uuid);
58395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
58405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
58415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
58425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
58435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_gatt_disc_result
58445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
58455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function process the GATT service search result.
58465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
58475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
58485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
58495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
58505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_gatt_disc_result(tBTA_GATT_ID service_id)
58515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
58525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_SEARCH   result;
58535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
58545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /*
58555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        * This logic will not work for gatt case.  We are checking against the bluetooth profiles here
58565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        * just copy the GATTID in raw data field and send it across.
58575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        */
58585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
58595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
58605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( bta_dm_search_cb.ble_raw_used + sizeof(tBTA_GATT_ID) < bta_dm_search_cb.ble_raw_size )
58615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5862e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_DEBUG("ADDING BLE SERVICE uuid=0x%x, ble_ptr = 0x%x, ble_raw_used = 0x%x", service_id.uuid.uu.uuid16,bta_dm_search_cb.p_ble_rawdata,bta_dm_search_cb.ble_raw_used);
58635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5864ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach        if(bta_dm_search_cb.p_ble_rawdata)
5865ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach        {
5866ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach            memcpy((bta_dm_search_cb.p_ble_rawdata + bta_dm_search_cb.ble_raw_used), &service_id,
5867ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach                   sizeof(service_id) );
58685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5869ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach            bta_dm_search_cb.ble_raw_used += sizeof(service_id);
5870ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach        }
5871ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach        else
5872ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach        {
5873e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_ERROR("p_ble_rawdata is NULL");
5874ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach        }
58755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
58765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
58775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
58785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5879e8c3d75b75493911ebf0f99c83676359657178f7Sharvil 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 );
58805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
58815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5882e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_ERROR("bta_dm_gatt_disc_result serivce_id len=%d ", service_id.uuid.len);
58835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ( bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE)
58845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
58855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
58865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* send result back to app now, one by one */
58875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bdcpy (result.disc_ble_res.bd_addr, bta_dm_search_cb.peer_bdaddr);
58885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BCM_STRNCPY_S((char*)result.disc_ble_res.bd_name, sizeof(BD_NAME), bta_dm_get_remname(), (BD_NAME_LEN-1));
5889ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        result.disc_ble_res.bd_name[BD_NAME_LEN] = 0;
58905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy(&result.disc_ble_res.service, &service_id.uuid, sizeof(tBT_UUID));
58915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
58925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result);
58935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
58945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
58955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
58965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
58975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
58985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_gatt_disc_complete
58995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
59005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function process the GATT service search complete.
59015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
59025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
59035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
59045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
59055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_gatt_disc_complete(UINT16 conn_id, tBTA_GATT_STATUS status)
59065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
59075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBTA_DM_MSG *p_msg;
59085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5909e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_gatt_disc_complete conn_id = %d",conn_id);
59105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
59115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bta_dm_search_cb.uuid_to_search > 0) bta_dm_search_cb.uuid_to_search --;
59125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
59135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (status == BTA_GATT_OK && bta_dm_search_cb.uuid_to_search > 0)
59145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
59155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btm_dm_start_disc_gatt_services(conn_id);
59165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
59175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
59185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
59195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.uuid_to_search = 0;
59205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
59215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* no more services to be discovered */
59225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL)
59235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
59245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT;
59255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->disc_result.result.disc_res.result = (status == BTA_GATT_OK) ? BTA_SUCCESS :BTA_FAILURE;
59265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found;
5927ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_msg->disc_result.result.disc_res.num_uuids = 0;
5928ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_msg->disc_result.result.disc_res.p_uuid_list = NULL;
59295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bdcpy (p_msg->disc_result.result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr);
59305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BCM_STRNCPY_S((char*)p_msg->disc_result.result.disc_res.bd_name, sizeof(BD_NAME),
59315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    bta_dm_get_remname(), (BD_NAME_LEN-1));
59325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
59335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* make sure the string is terminated */
59345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->disc_result.result.disc_res.bd_name[BD_NAME_LEN-1] = 0;
59355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
59365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_msg->disc_result.result.disc_res.device_type = BT_DEVICE_TYPE_BLE;
59375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( bta_dm_search_cb.ble_raw_used > 0 )
59385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
59395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_msg->disc_result.result.disc_res.p_raw_data = GKI_getbuf(bta_dm_search_cb.ble_raw_used);
59405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
59415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memcpy( p_msg->disc_result.result.disc_res.p_raw_data,
59425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            bta_dm_search_cb.p_ble_rawdata,
59435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                            bta_dm_search_cb.ble_raw_used );
59445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
59455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_msg->disc_result.result.disc_res.raw_data_size = bta_dm_search_cb.ble_raw_used;
59465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
59475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
59485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
59495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_msg->disc_result.result.disc_res.p_raw_data = NULL;
59505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_search_cb.p_ble_rawdata = 0;
59515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
59525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
59535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_sys_sendmsg(p_msg);
59545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
59555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (conn_id != BTA_GATT_INVALID_CONN_ID)
59565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
59576975b4d711142b885af479721cada448952c6b41Andre Eisenbach            if (BTA_DM_GATT_CLOSE_DELAY_TOUT != 0)
59586975b4d711142b885af479721cada448952c6b41Andre Eisenbach            {
59596975b4d711142b885af479721cada448952c6b41Andre Eisenbach                bta_sys_start_timer(&bta_dm_search_cb.gatt_close_timer, BTA_DM_DISC_CLOSE_TOUT_EVT,
59606975b4d711142b885af479721cada448952c6b41Andre Eisenbach                                     BTA_DM_GATT_CLOSE_DELAY_TOUT);
59616975b4d711142b885af479721cada448952c6b41Andre Eisenbach            }
59626975b4d711142b885af479721cada448952c6b41Andre Eisenbach            else
59636975b4d711142b885af479721cada448952c6b41Andre Eisenbach            {
59646975b4d711142b885af479721cada448952c6b41Andre Eisenbach                BTA_GATTC_Close(conn_id);
59656975b4d711142b885af479721cada448952c6b41Andre Eisenbach                bta_dm_search_cb.conn_id = BTA_GATT_INVALID_CONN_ID;
59666975b4d711142b885af479721cada448952c6b41Andre Eisenbach            }
59675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
59686975b4d711142b885af479721cada448952c6b41Andre Eisenbach
59695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_search_cb.gatt_disc_active = FALSE;
59705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
59715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
59725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
59735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
59745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
59756975b4d711142b885af479721cada448952c6b41Andre Eisenbach** Function         bta_dm_close_gatt_conn
59766975b4d711142b885af479721cada448952c6b41Andre Eisenbach**
59776975b4d711142b885af479721cada448952c6b41Andre Eisenbach** Description      This function close the GATT connection after delay timeout.
59786975b4d711142b885af479721cada448952c6b41Andre Eisenbach**
59796975b4d711142b885af479721cada448952c6b41Andre Eisenbach** Parameters:
59806975b4d711142b885af479721cada448952c6b41Andre Eisenbach**
59816975b4d711142b885af479721cada448952c6b41Andre Eisenbach*******************************************************************************/
59826975b4d711142b885af479721cada448952c6b41Andre Eisenbachvoid bta_dm_close_gatt_conn(tBTA_DM_MSG *p_data)
59836975b4d711142b885af479721cada448952c6b41Andre Eisenbach{
59845cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(p_data);
59855cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen
59866975b4d711142b885af479721cada448952c6b41Andre Eisenbach    if (bta_dm_search_cb.conn_id != BTA_GATT_INVALID_CONN_ID)
59876975b4d711142b885af479721cada448952c6b41Andre Eisenbach        BTA_GATTC_Close(bta_dm_search_cb.conn_id);
59886975b4d711142b885af479721cada448952c6b41Andre Eisenbach
59896975b4d711142b885af479721cada448952c6b41Andre Eisenbach    bta_dm_search_cb.conn_id = BTA_GATT_INVALID_CONN_ID;
59906975b4d711142b885af479721cada448952c6b41Andre Eisenbach}
59916975b4d711142b885af479721cada448952c6b41Andre Eisenbach
59926975b4d711142b885af479721cada448952c6b41Andre Eisenbach/*******************************************************************************
59936975b4d711142b885af479721cada448952c6b41Andre Eisenbach**
59945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         btm_dm_start_gatt_discovery
59955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
59965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This is GATT initiate the service search by open a GATT connection
59975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  first.
59985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
59995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
60005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
60015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
60025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_dm_start_gatt_discovery (BD_ADDR bd_addr)
60035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
60045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.gatt_disc_active = TRUE;
60056975b4d711142b885af479721cada448952c6b41Andre Eisenbach
60066975b4d711142b885af479721cada448952c6b41Andre Eisenbach    /* connection is already open */
60076975b4d711142b885af479721cada448952c6b41Andre Eisenbach    if (bdcmp(bta_dm_search_cb.pending_close_bda, bd_addr) == 0 &&
60086975b4d711142b885af479721cada448952c6b41Andre Eisenbach        bta_dm_search_cb.conn_id != BTA_GATT_INVALID_CONN_ID)
60096975b4d711142b885af479721cada448952c6b41Andre Eisenbach    {
60106975b4d711142b885af479721cada448952c6b41Andre Eisenbach        memset(bta_dm_search_cb.pending_close_bda, 0, BD_ADDR_LEN);
60116975b4d711142b885af479721cada448952c6b41Andre Eisenbach        bta_sys_stop_timer(&bta_dm_search_cb.gatt_close_timer);
60126975b4d711142b885af479721cada448952c6b41Andre Eisenbach        btm_dm_start_disc_gatt_services(bta_dm_search_cb.conn_id);
60136975b4d711142b885af479721cada448952c6b41Andre Eisenbach    }
60146975b4d711142b885af479721cada448952c6b41Andre Eisenbach    else
60157fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta        BTA_GATTC_Open(bta_dm_search_cb.client_if, bd_addr, TRUE, BTA_GATT_TRANSPORT_LE);
60165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
60175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
60185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
60195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
60205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_cancel_gatt_discovery
60215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
60225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This is GATT cancel the GATT service search.
60235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
60245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
60255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
60265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
60275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_cancel_gatt_discovery(BD_ADDR bd_addr)
60285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
60295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bta_dm_search_cb.conn_id == BTA_GATT_INVALID_CONN_ID)
60305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
60315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BTA_GATTC_CancelOpen(bta_dm_search_cb.client_if, bd_addr, TRUE);
60325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
60335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
60345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_gatt_disc_complete(bta_dm_search_cb.conn_id, (tBTA_GATT_STATUS) BTA_GATT_ERROR);
60355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
60365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
60375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
60385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
60395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_proc_open_evt
60405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
60415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      process BTA_GATTC_OPEN_EVT in DM.
60425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
60435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
60445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
60455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
60465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_proc_open_evt(tBTA_GATTC_OPEN *p_data)
60475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
60485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           *p1;
60495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           *p2;
60505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
60515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p1 = bta_dm_search_cb.peer_bdaddr;
60525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p2 = p_data->remote_bda;
60535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6054e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("DM Search state= %d search_cb.peer_dbaddr: [%08x%04x] connected_bda= [%08x%04x] ",
60555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      bta_dm_search_cb.state,
60565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      ((p1[0])<<24)+((p1[1])<<16)+((p1[2])<<8)+(p1[3]),
60575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      ((p1[4])<<8)+ p1[5],
60585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      ((p2[0])<<24)+((p2[1])<<16)+((p2[2])<<8)+(p2[3]),
60595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      ((p2[4])<<8)+ p2[5]);
60605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6061e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("BTA_GATTC_OPEN_EVT conn_id = %d client_if=%d status = %d" ,
60625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_data->conn_id,
60635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_data->client_if,
60645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                      p_data->status);
60655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
60665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bta_dm_search_cb.conn_id = p_data->conn_id;
60675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
60685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_data->status == BTA_GATT_OK)
60695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
60705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btm_dm_start_disc_gatt_services(p_data->conn_id);
60715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
60725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
60735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
60745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bta_dm_gatt_disc_complete(BTA_GATT_INVALID_CONN_ID, p_data->status);
60755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
60765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
60775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
60785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
60795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
60805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bta_dm_gattc_callback
60815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
60825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This is GATT client callback function used in DM.
60835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
60845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:
60855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
60865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
60875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data)
60885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6089e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("bta_dm_gattc_callback event = %d", event);
60905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
60915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (event)
60925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
60935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_GATTC_REG_EVT:
6094e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_DEBUG("BTA_GATTC_REG_EVT client_if = %d",  p_data->reg_oper.client_if);
60955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_data->reg_oper.status == BTA_GATT_OK)
60965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_search_cb.client_if = p_data->reg_oper.client_if;
60975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
60985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_search_cb.client_if = BTA_GATTS_INVALID_IF;
60995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
61005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
61015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_GATTC_OPEN_EVT:
61025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_proc_open_evt(&p_data->open);
61035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
61045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
61055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_GATTC_SEARCH_RES_EVT:
61065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bta_dm_gatt_disc_result(p_data->srvc_res.service_uuid.id);
61075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
61085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
61095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_GATTC_SEARCH_CMPL_EVT:
61105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE)
61115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_gatt_disc_complete(p_data->search_cmpl.conn_id, p_data->search_cmpl.status);
61125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
61135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
61145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        case BTA_GATTC_CLOSE_EVT:
6115e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            APPL_TRACE_DEBUG("BTA_GATTC_CLOSE_EVT reason = %d", p_data->close.reason);
61165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* in case of disconnect before search is completed */
61175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( (bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) &&
61185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                 !memcmp(p_data->close.remote_bda, bta_dm_search_cb.peer_bdaddr, BD_ADDR_LEN))
61195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
61205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bta_dm_gatt_disc_complete((UINT16)BTA_GATT_INVALID_CONN_ID,  (tBTA_GATT_STATUS) BTA_GATT_ERROR);
61215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
61225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
61235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
61245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        default:
61255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
61265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
61275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6128c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
61295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTA_GATT_INCLUDED */
6130b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
61318d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta/*******************************************************************************
61328d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta**
61338d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta** Function         bta_dm_ctrl_features_rd_cmpl_cback
61348d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta**
61358d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta** Description      callback to handle controller feature read complete
61368d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta**
61378d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta** Parameters:
61388d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta**
61398d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta*******************************************************************************/
61408d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Battastatic void bta_dm_ctrl_features_rd_cmpl_cback(tBTM_STATUS result)
61418d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta{
6142e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    APPL_TRACE_DEBUG("%s  status = %d ", __FUNCTION__, result);
61438d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta    if (result == BTM_SUCCESS)
61448d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta    {
61458d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta        if(bta_dm_cb.p_sec_cback)
61468d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta            bta_dm_cb.p_sec_cback(BTA_DM_LE_FEATURES_READ, NULL);
61478d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta    }
61488d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta    else
61498d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta    {
6150e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        APPL_TRACE_ERROR("%s Ctrl BLE feature read failed: status :%d",__FUNCTION__, result);
61518d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta    }
61528d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta
61538d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta}
61548d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta
61558d41691e6b16ba945711e8c3846df1ec70fdb724Ganesh Ganapathi Batta
61565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif  /* BLE_INCLUDED */
6157