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