bta_dm_act.c revision ca22ac493ab777199084d87b3c7627e7f27555af
15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2003-2012 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 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_types.h" 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h" 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bd.h" 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_sys.h" 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_api.h" 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_dm_int.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_dm_co.h" 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_api.h" 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_int.h" 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h" 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "sdp_api.h" 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "l2c_api.h" 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "wbt_api.h" 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "utl.h" 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_inq_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir); 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_inq_cmpl_cb (void * p_result); 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_service_search_remname_cback (BD_ADDR bd_addr, DEV_CLASS dc, BD_NAME bd_name); 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_remname_cback (tBTM_REMOTE_DEV_NAME *p_remote_name); 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_find_services ( BD_ADDR bd_addr); 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_discover_next_device(void); 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_sdp_callback (UINT16 sdp_status); 495738f83aeb59361a0a2eda2460113f6dc919427The 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); 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_pin_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name); 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_link_key_request_cback (BD_ADDR bd_addr, LINK_KEY key); 525738f83aeb59361a0a2eda2460113f6dc919427The 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); 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_authentication_complete_cback(BD_ADDR bd_addr, DEV_CLASS dev_class,BD_NAME bd_name, int result); 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_local_name_cback(BD_ADDR bd_addr); 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN bta_dm_check_av(UINT16 event); 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_BUSY_LEVEL_CHANGE_INCLUDED == TRUE) 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data); 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_acl_change_cback (BD_ADDR p_bda, DEV_CLASS p_dc, BD_NAME p_bdn, BD_FEATURES features, BOOLEAN is_new); 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_policy_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, BD_ADDR peer_addr); 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Extended Inquiry Response */ 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_sp_cback (tBTM_SP_EVT event, tBTM_SP_EVT_DATA *p_data); 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_EIR_SERVER_INCLUDED == TRUE) 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_set_eir (char *local_name); 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTM_EIR_SERVER_INCLUDED */ 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_EIR_CLIENT_INCLUDED == TRUE) 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_eir_search_services( tBTM_INQ_RESULTS *p_result, 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_SERVICE_MASK *p_services_to_search, 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_SERVICE_MASK *p_services_found); 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTM_EIR_CLIENT_INCLUDED */ 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_rssi_cback (tBTM_RSSI_RESULTS *p_result); 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_signal_strength_timer_cback (TIMER_LIST_ENT *p_tle); 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_link_quality_cback (tBTM_LINK_QUALITY_RESULTS *p_result); 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_search_timer_cback (TIMER_LIST_ENT *p_tle); 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_disable_timer_cback (TIMER_LIST_ENT *p_tle); 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_disable_conn_down_timer_cback (TIMER_LIST_ENT *p_tle); 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_rm_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, BD_ADDR peer_addr); 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_adjust_roles(BOOLEAN delay_role_switch); 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_dm_get_remname(void); 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_bond_cancel_complete_cback(tBTM_STATUS result); 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN bta_dm_read_remote_device_name (BD_ADDR bd_addr); 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_discover_device(BD_ADDR remote_bd_addr); 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_sys_hw_cback( tBTA_SYS_HW_EVT status ); 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN bta_dm_dev_blacklisted_for_switch (BD_ADDR remote_bd_addr); 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_delay_role_switch_cback (TIMER_LIST_ENT *p_tle); 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 95ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_remove_sec_dev_entry(BD_ADDR remote_bd_addr); 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 97ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 98ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_disable_search_and_disc(void); 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ((defined BLE_INCLUDED) && (BLE_INCLUDED == TRUE)) 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project #if ((defined SMP_INCLUDED) && (SMP_INCLUDED == TRUE)) 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_ble_smp_cback (tBTM_LE_EVT event, BD_ADDR bda, tBTM_LE_EVT_DATA *p_data); 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project #endif 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_ble_id_key_cback (UINT8 key_type, tBTM_BLE_LOCAL_KEYS *p_key); 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project #if ((defined BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE)) 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btm_dm_start_gatt_discovery ( BD_ADDR bd_addr); 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_cancel_gatt_discovery(BD_ADDR bd_addr); 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data); 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project #endif 109ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_observe_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir); 110ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_observe_cmpl_cb (void * p_result); 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 112ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#ifndef BTA_DM_BLE_ADV_CHNL_MAP 113ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTA_DM_BLE_ADV_CHNL_MAP (BTM_BLE_ADV_CHNL_37|BTM_BLE_ADV_CHNL_38|BTM_BLE_ADV_CHNL_39) 114ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 115ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void sdpu_uuid16_to_uuid128(UINT16 uuid16, UINT8* p_uuid128); 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT16 bta_service_id_to_uuid_lkup_tbl [BTA_MAX_SERVICE_ID] = 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_PNP_INFORMATION, /* Reserved */ 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_SERIAL_PORT, /* BTA_SPP_SERVICE_ID */ 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_DIALUP_NETWORKING, /* BTA_DUN_SERVICE_ID */ 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_AUDIO_SOURCE, /* BTA_A2DP_SOURCE_SERVICE_ID */ 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_LAN_ACCESS_USING_PPP, /* BTA_LAP_SERVICE_ID */ 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_HEADSET, /* BTA_HSP_HS_SERVICE_ID */ 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_HF_HANDSFREE, /* BTA_HFP_HS_SERVICE_ID */ 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_OBEX_OBJECT_PUSH, /* BTA_OPP_SERVICE_ID */ 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_OBEX_FILE_TRANSFER, /* BTA_FTP_SERVICE_ID */ 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_CORDLESS_TELEPHONY, /* BTA_CTP_SERVICE_ID */ 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_INTERCOM, /* BTA_ICP_SERVICE_ID */ 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_IRMC_SYNC, /* BTA_SYNC_SERVICE_ID */ 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_DIRECT_PRINTING, /* BTA_BPP_SERVICE_ID */ 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_IMAGING_RESPONDER, /* BTA_BIP_SERVICE_ID */ 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_PANU, /* BTA_PANU_SERVICE_ID */ 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_NAP, /* BTA_NAP_SERVICE_ID */ 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_GN, /* BTA_GN_SERVICE_ID */ 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_SAP, /* BTA_SAP_SERVICE_ID */ 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_AUDIO_SINK, /* BTA_A2DP_SERVICE_ID */ 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_AV_REMOTE_CONTROL, /* BTA_AVRCP_SERVICE_ID */ 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_HUMAN_INTERFACE, /* BTA_HID_SERVICE_ID */ 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_VIDEO_SINK, /* BTA_VDP_SERVICE_ID */ 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_PBAP_PSE, /* BTA_PBAP_SERVICE_ID */ 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_HEADSET_AUDIO_GATEWAY, /* BTA_HSP_SERVICE_ID */ 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_AG_HANDSFREE, /* BTA_HFP_SERVICE_ID */ 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_MESSAGE_ACCESS, /* BTA_MAP_SERVICE_ID */ 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_MESSAGE_NOTIFICATION, /* BTA_MN_SERVICE_ID */ 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_HDP_PROFILE, /* BTA_HDP_SERVICE_ID */ 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UUID_SERVCLASS_PBAP_PCE /* BTA_PCE_SERVICE_ID */ 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED && BTA_GATT_INCLUDED 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ,UUID_PROTOCOL_ATT /* BTA_GATT_SERVICE_ID */ 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * NOTE : The number of element in bta_service_id_to_btm_srv_id_lkup_tbl should be matching with 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * the value BTA_MAX_SERVICE_ID in bta_api.h 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * i.e., If you add new Service ID for BTA, the correct security ID of the new service 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * from Security service definitions (btm_api.h) should be added to this lookup table. 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT32 bta_service_id_to_btm_srv_id_lkup_tbl [BTA_MAX_SERVICE_ID] = 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 0, /* Reserved */ 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_SERIAL_PORT, /* BTA_SPP_SERVICE_ID */ 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_DUN, /* BTA_DUN_SERVICE_ID */ 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_AVDTP, /* BTA_AUDIO_SOURCE_SERVICE_ID */ 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_LAN_ACCESS, /* BTA_LAP_SERVICE_ID */ 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_HEADSET_AG, /* BTA_HSP_SERVICE_ID */ 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_AG_HANDSFREE, /* BTA_HFP_SERVICE_ID */ 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_OBEX, /* BTA_OPP_SERVICE_ID */ 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_OBEX_FTP, /* BTA_FTP_SERVICE_ID */ 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_CORDLESS, /* BTA_CTP_SERVICE_ID */ 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_INTERCOM, /* BTA_ICP_SERVICE_ID */ 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_IRMC_SYNC, /* BTA_SYNC_SERVICE_ID */ 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_BPP_JOB, /* BTA_BPP_SERVICE_ID */ 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_BIP, /* BTA_BIP_SERVICE_ID */ 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_BNEP_PANU, /* BTA_PANU_SERVICE_ID */ 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_BNEP_NAP, /* BTA_NAP_SERVICE_ID */ 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_BNEP_GN, /* BTA_GN_SERVICE_ID */ 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_SAP, /* BTA_SAP_SERVICE_ID */ 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_AVDTP, /* BTA_A2DP_SERVICE_ID */ 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_AVCTP, /* BTA_AVRCP_SERVICE_ID */ 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_HID_SEC_CTRL, /* BTA_HID_SERVICE_ID */ 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_AVDTP, /* BTA_VDP_SERVICE_ID */ 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_PBAP, /* BTA_PBAP_SERVICE_ID */ 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_HEADSET, /* BTA_HSP_HS_SERVICE_ID */ 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_HF_HANDSFREE, /* BTA_HFP_HS_SERVICE_ID */ 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_MAP, /* BTA_MAP_SERVICE_ID */ 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_MAP, /* BTA_MN_SERVICE_ID */ 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_HDP_SNK, /* BTA_HDP_SERVICE_ID */ 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SEC_SERVICE_PBAP /* BTA_PCE_SERVICE_ID */ 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED && BTA_GATT_INCLUDED 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ,BTM_SEC_SERVICE_ATT /* BTA_GATT_SERVICE_ID */ 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* bta security callback */ 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tBTM_APPL_INFO bta_security = 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &bta_dm_authorize_cback, 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &bta_dm_pin_cback, 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &bta_dm_new_link_key_cback, 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &bta_dm_link_key_request_cback, 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &bta_dm_authentication_complete_cback, 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project NULL, 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &bta_dm_bond_cancel_complete_cback, 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE) 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &bta_dm_sp_cback 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project NULL 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if SMP_INCLUDED == TRUE 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ,&bta_dm_ble_smp_cback 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ,&bta_dm_ble_id_key_cback 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* TBD... To be moved to some conf file..? */ 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_DM_MAX_ROLE_SWITCH_BLACKLIST_COUNT 5 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tBTA_DM_LMP_VER_INFO bta_role_switch_blacklist[BTA_DM_MAX_ROLE_SWITCH_BLACKLIST_COUNT] = 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project {0x000F,0x2000,0x04}, 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project {0x00,0x00,0x00}, 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project {0x00,0x00,0x00}, 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project {0x00,0x00,0x00}, 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project {0x00,0x00,0x00} 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MAX_DISC_RAW_DATA_BUF (4096) 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 g_disc_raw_data_buf[MAX_DISC_RAW_DATA_BUF]; 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_app_ready_timer_cback 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description allow sending EIR to controller 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTM_EIR_SERVER_INCLUDED == TRUE )&&(BTA_EIR_CANNED_UUID_LIST != TRUE) 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_app_ready_timer_cback (TIMER_LIST_ENT *p_tle) 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_set_eir (NULL); 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define bta_dm_app_ready_timer_cback (x) 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_enable 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Initialises the BT device manager 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_enable(tBTA_DM_MSG *p_data) 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_SYS_HW_MSG *sys_enable_event; 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC sec_event; 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if already in use, return an error */ 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_dm_cb.is_bta_dm_active == TRUE ) 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING0("bta_dm_enable - device already started by another application"); 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&sec_event.enable, 0, sizeof ( tBTA_DM_ENABLE )); 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.enable.status = BTA_FAILURE; 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( p_data->enable.p_sec_cback != NULL ) 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->enable.p_sec_cback (BTA_DM_ENABLE_EVT, &sec_event); 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* first, register our callback to SYS HW manager */ 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_hw_register( BTA_SYS_HW_BLUETOOTH, bta_dm_sys_hw_cback ); 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* make sure security callback is saved - if no callback, do not erase the previous one, 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project it could be an error recovery mechanism */ 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( p_data->enable.p_sec_cback != NULL ) 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback = p_data->enable.p_sec_cback; 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* notify BTA DM is now active */ 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.is_bta_dm_active = TRUE; 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send a message to BTA SYS */ 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((sys_enable_event = (tBTA_SYS_HW_MSG *) GKI_getbuf(sizeof(tBTA_SYS_HW_MSG))) != NULL) 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sys_enable_event->hdr.event = BTA_SYS_API_ENABLE_EVT; 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sys_enable_event->hw_module = BTA_SYS_HW_BLUETOOTH; 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(sys_enable_event); 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_sys_hw_cback 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description callback register to SYS to get HW status updates 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_sys_hw_cback( tBTA_SYS_HW_EVT status ) 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project DEV_CLASS dev_class; 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC_CBACK *temp_cback; 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 key_mask = 0; 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_OCTET16 er; 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_BLE_LOCAL_ID_KEYS id_key; 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBT_UUID app_uuid = {LEN_UUID_128,{0}}; 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1(" bta_dm_sys_hw_cback with event: %i" , status ); 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* On H/W error evt, report to the registered DM application callback */ 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status == BTA_SYS_HW_ERROR_EVT) { 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_dm_cb.p_sec_cback != NULL ) 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_HW_ERROR_EVT, NULL); 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( status == BTA_SYS_HW_OFF_EVT ) 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_dm_cb.p_sec_cback != NULL ) 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_DISABLE_EVT, NULL); 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* reinitialize the control block */ 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&bta_dm_cb, 0, sizeof(bta_dm_cb)); 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* unregister from SYS */ 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_hw_unregister( BTA_SYS_HW_BLUETOOTH ); 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* notify BTA DM is now unactive */ 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.is_bta_dm_active = FALSE; 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( status == BTA_SYS_HW_ON_EVT ) 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* FIXME: We should not unregister as the SYS shall invoke this callback on a H/W error. 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * We need to revisit when this platform has more than one BLuetooth H/W chip */ 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //bta_sys_hw_unregister( BTA_SYS_HW_BLUETOOTH); 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* save security callback */ 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project temp_cback = bta_dm_cb.p_sec_cback; 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* make sure the control block is properly initialized */ 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&bta_dm_cb, 0, sizeof(bta_dm_cb)); 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* and retrieve the callback */ 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback=temp_cback; 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.is_bta_dm_active = TRUE; 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* hw is ready, go on with BTA DM initialization */ 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&bta_dm_search_cb, 0x00, sizeof(bta_dm_search_cb)); 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&bta_dm_conn_srvcs, 0x00, sizeof(bta_dm_conn_srvcs)); 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&bta_dm_di_cb, 0, sizeof(tBTA_DM_DI_CB)); 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(dev_class, bta_dm_cfg.dev_class, sizeof(dev_class)); 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetDeviceClass (dev_class); 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined BLE_INCLUDED && BLE_INCLUDED == TRUE) 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* load BLE local information: ID keys, ER if available */ 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_co_ble_load_local_keys(&key_mask, er, &id_key); 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (key_mask & BTA_BLE_LOCAL_KEY_TYPE_ER) 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_BleLoadLocalKeys(BTA_BLE_LOCAL_KEY_TYPE_ER, (tBTM_BLE_LOCAL_KEYS *)&er); 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (key_mask & BTA_BLE_LOCAL_KEY_TYPE_ID) 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_BleLoadLocalKeys(BTA_BLE_LOCAL_KEY_TYPE_ID, (tBTM_BLE_LOCAL_KEYS *)&id_key); 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ((defined BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE)) 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset (&app_uuid.uu.uuid128, 0x87, LEN_UUID_128); 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_GATTC_AppRegister(&app_uuid, bta_dm_gattc_callback); 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SecRegister((tBTM_APPL_INFO*)&bta_security); 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetDefaultLinkSuperTout(bta_dm_cfg.link_timeout); 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_WritePageTimeout(bta_dm_cfg.page_timeout); 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.cur_policy = bta_dm_cfg.policy_settings; 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetDefaultLinkPolicy(bta_dm_cb.cur_policy); 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BTM_BUSY_LEVEL_CHANGE_INCLUDED) && BTM_BUSY_LEVEL_CHANGE_INCLUDED == TRUE) 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_RegBusyLevelNotif (bta_dm_bl_change_cback, NULL, BTM_BL_UPDATE_MASK|BTM_BL_ROLE_CHG_MASK); 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_AclRegisterForChanges(bta_dm_acl_change_cback); 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Earlier, we used to invoke BTM_ReadLocalAddr which was just copying the bd_addr 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project from the control block and invoking the callback which was sending the DM_ENABLE_EVT. 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project But then we have a few HCI commands being invoked above which were still in progress 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project when the ENABLE_EVT was sent. So modified this to fetch the local name which forces 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project the DM_ENABLE_EVT to be sent only after all the init steps are complete */ 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_ReadLocalDeviceNameFromController((tBTM_CMPL_CB *)bta_dm_local_name_cback); 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_rm_register((tBTA_SYS_CONN_CBACK*)bta_dm_rm_cback); 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* initialize bluetooth low power manager */ 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_init_pm(); 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_policy_register((tBTA_SYS_CONN_CBACK*)bta_dm_policy_cback); 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project // BLUEDROID REMOVE ?? 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 1 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Create broadcom primary DI record */ 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(WBT_ExtCreateRecord()) 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTM_EIR_SERVER_INCLUDED == TRUE )&&( BTA_EIR_CANNED_UUID_LIST != TRUE ) 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* while app_ready_timer is running, BTA DM doesn't send EIR to controller */ 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.app_ready_timer.p_cback = (TIMER_CBACK*)&bta_dm_app_ready_timer_cback; 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_start_timer(&bta_dm_cb.app_ready_timer, 0, 100); 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_add_uuid(UUID_SERVCLASS_PNP_INFORMATION); 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_di_cb.di_handle[bta_dm_di_cb.di_num] = 0; /* primary DI record */ 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_di_cb.di_num ++; 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else /* Eventually implement pin code */ 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (WBT_ExtCreateRecord()) 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project WBT_ExtAddPinCode(); 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG0(" --- ignored event"); 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_disable 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Disables the BT device manager 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_disable (tBTA_DM_MSG *p_data) 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Set l2cap idle timeout to 0 (so BTE immediately disconnects ACL link after last channel is closed) */ 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project L2CA_SetIdleTimeoutByBdAddr((UINT8 *)BT_BD_ANY, 0); 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* disable all active subsystems */ 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_disable(BTA_SYS_HW_BLUETOOTH); 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetDiscoverability(BTM_NON_DISCOVERABLE, 0, 0); 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetConnectability(BTM_NON_CONNECTABLE, 0, 0); 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_disable_pm(); 465ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_disable_search_and_disc(); 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.disabling = TRUE; 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(BTM_GetNumAclLinks()==0) 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BTA_DISABLE_DELAY) && BTA_DISABLE_DELAY > 0) 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If BTA_DISABLE_DELAY is defined and greater than zero, then delay the shutdown by 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * BTA_DISABLE_DELAY milliseconds 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING2("%s BTA_DISABLE_DELAY set to %d ms", 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project __FUNCTION__, BTA_DISABLE_DELAY); 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_stop_timer(&bta_dm_cb.disable_timer); 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.disable_timer.p_cback = (TIMER_CBACK*)&bta_dm_disable_conn_down_timer_cback; 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_start_timer(&bta_dm_cb.disable_timer, 0, BTA_DISABLE_DELAY); 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_disable_conn_down_timer_cback(NULL); 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.disable_timer.p_cback = (TIMER_CBACK*)&bta_dm_disable_timer_cback; 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_start_timer(&bta_dm_cb.disable_timer, 0, 5000); 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_disable_timer_cback 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Called if the disable timer expires 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Used to close ACL connections which are still active 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_disable_timer_cback (TIMER_LIST_ENT *p_tle) 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i; 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT0(" bta_dm_disable_timer_cback "); 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(BTM_GetNumAclLinks()) 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i<bta_dm_cb.device_list.count; i++) 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_remove_acl(bta_dm_cb.device_list.peer_device[i].peer_bdaddr); 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.disabling = FALSE; 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_remove_uuid(UUID_SERVCLASS_PNP_INFORMATION); 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_DISABLE_EVT, NULL); 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_set_dev_name 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Sets local device name 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_set_dev_name (tBTA_DM_MSG *p_data) 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetLocalDeviceName((char*)p_data->set_name.name); 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_EIR_SERVER_INCLUDED == TRUE) 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_set_eir ((char*)p_data->set_name.name); 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_set_visibility 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Sets discoverability, connectability and pairability 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_set_visibility (tBTA_DM_MSG *p_data) 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set modes for Discoverability and connectability if not ignore */ 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->set_visibility.disc_mode != BTA_DM_IGNORE) 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetDiscoverability((UINT8)p_data->set_visibility.disc_mode, 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.inquiry_scan_window, 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.inquiry_scan_interval); 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->set_visibility.conn_mode != BTA_DM_IGNORE) 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetConnectability((UINT8)p_data->set_visibility.conn_mode, 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.page_scan_window, 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.page_scan_interval); 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Send False or True if not ignore */ 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->set_visibility.pair_mode != BTA_DM_IGNORE ) 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->set_visibility.pair_mode == BTA_DM_NON_PAIRABLE) 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.disable_pair_mode = TRUE; 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.disable_pair_mode = FALSE; 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Send False or True if not ignore */ 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->set_visibility.conn_paired_only != BTA_DM_IGNORE) 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->set_visibility.conn_paired_only == BTA_DM_CONN_ALL) 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.conn_paired_only = FALSE; 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.conn_paired_only = TRUE; 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Change mode if either mode is not ignore */ 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->set_visibility.pair_mode != BTA_DM_IGNORE || p_data->set_visibility.conn_paired_only != BTA_DM_IGNORE) 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetPairableMode((BOOLEAN)(!(bta_dm_cb.disable_pair_mode)),bta_dm_cb.conn_paired_only); 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_set_afhchannels 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function sets the AFH first and 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** last disable channel, so channels within 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** that range are disabled. 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_set_afhchannels (tBTA_DM_MSG *p_data) 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetAfhChannels(p_data->set_afhchannels.first,p_data->set_afhchannels.last); 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_vendor_spec_command 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Send a vendor specific command to the controller 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_vendor_spec_command (tBTA_DM_MSG *p_data) 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status; 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6385738f83aeb59361a0a2eda2460113f6dc919427The 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); 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_tx_inqpower 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description write inquiry tx power. 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_tx_inqpower(tBTA_DM_MSG *p_data) 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (BTM_WriteInquiryTxPower (p_data->tx_inq_pwr.tx_power) == BTM_ILLEGAL_VALUE) 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR1("Invalid Inquiry Tx Power: %d", p_data->tx_inq_pwr.tx_power); 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_remove_device 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Removes device, Disconnects ACL link if required. 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**** 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_remove_device (tBTA_DM_MSG *p_data) 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_API_REMOVE_DEVICE *p_dev = &p_data->remove_dev; 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC sec_event; 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (BTM_IsAclConnectionUp(p_dev->bd_addr)) 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Take the link down first, and mark the device for removal when disconnected */ 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_remove_acl( p_dev->bd_addr) ; 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i<bta_dm_cb.device_list.count; i++) 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!bdcmp( bta_dm_cb.device_list.peer_device[i].peer_bdaddr, p_dev->bd_addr)) 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(i < bta_dm_cb.device_list.count) 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.device_list.peer_device[i].conn_state = BTA_DM_UNPAIRING; 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* Ok to remove the device in application layer */ 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SecDeleteDevice(p_dev->bd_addr); 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_dm_cb.p_sec_cback ) 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.link_down.bd_addr, p_dev->bd_addr); 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* No connection, set status to success (acl disc code not valid) */ 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.link_down.status = HCI_SUCCESS; 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_DEV_UNPAIRED_EVT, &sec_event); 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_add_device 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function adds a Link Key to an security database entry. 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** It is normally called during host startup to restore all required information 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** stored in the NVRAM. 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**** 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_add_device (tBTA_DM_MSG *p_data) 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_API_ADD_DEVICE *p_dev = &p_data->add_dev; 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_dc = NULL; 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_lc = NULL; 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 trusted_services_mask[BTM_SEC_SERVICE_ARRAY_SIZE]; 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 index = 0; 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 btm_mask_index = 0; 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset (trusted_services_mask, 0, sizeof(trusted_services_mask)); 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If not all zeros, the device class has been specified */ 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_dev->dc_known) 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dc = (UINT8 *)p_dev->dc; 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_dev->link_key_known) 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_lc = (UINT8 *)p_dev->link_key; 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_dev->is_trusted) 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* covert BTA service mask to BTM mask */ 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while (p_dev->tm && (index < BTA_MAX_SERVICE_ID)) 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_dev->tm & (UINT32)(1<<index)) 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_mask_index = bta_service_id_to_btm_srv_id_lkup_tbl[index] / BTM_SEC_ARRAY_BITS; 7405738f83aeb59361a0a2eda2460113f6dc919427The 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))); 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev->tm &= (UINT32)(~(1<<index)); 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project index++; 7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!BTM_SecAddDevice (p_dev->bd_addr, p_dc, p_dev->bd_name, p_dev->features, 7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project trusted_services_mask, p_lc, p_dev->key_type, p_dev->io_cap)) 7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR2 ("BTA_DM: Error adding device %08x%04x", 7535738f83aeb59361a0a2eda2460113f6dc919427The 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], 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_dev->bd_addr[4]<<8)+p_dev->bd_addr[5]); 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 760ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function bta_dm_close_acl 761ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 762ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description This function forces to close the connection to a remote device 763ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** and optionaly remove the device from security database if 764ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** required. 765ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**** 766ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 767ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid bta_dm_close_acl(tBTA_DM_MSG *p_data) 768ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 769ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_DM_API_REMOVE_ACL *p_remove_acl = &p_data->remove_acl; 770ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 index; 771ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 772ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta APPL_TRACE_DEBUG0("bta_dm_close_acl"); 773ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 774ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (BTM_IsAclConnectionUp(p_remove_acl->bd_addr)) 775ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 776ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (index = 0; index < bta_dm_cb.device_list.count; index ++) 777ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 778ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!bdcmp( bta_dm_cb.device_list.peer_device[index].peer_bdaddr, p_remove_acl->bd_addr)) 779ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 780ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 781ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (index != bta_dm_cb.device_list.count) 782ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 783ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_remove_acl->remove_dev) 784ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_cb.device_list.peer_device[index].remove_dev_pending = TRUE; 785ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 786ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 787ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 788ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta APPL_TRACE_ERROR0("unknown device, remove ACL failed"); 789ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 790ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* Disconnect the ACL link */ 791ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btm_remove_acl(p_remove_acl->bd_addr); 792ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 793ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* if to remove the device from security database ? do it now */ 794ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else if (p_remove_acl->remove_dev) 795ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 796ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!BTM_SecDeleteDevice(p_remove_acl->bd_addr)) 797ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 798ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta APPL_TRACE_ERROR0("delete device from security database failed."); 799ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 800ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) 801ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* need to remove all pending background connection if any */ 802ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_CancelOpen(0, p_remove_acl->bd_addr, FALSE); 803ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* remove all cached GATT information */ 804ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_Refresh(p_remove_acl->bd_addr); 805ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 806ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 807ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* otherwise, no action needed */ 808ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 809ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 810ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 811ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_bond 8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Bonds with peer device 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_bond (tBTA_DM_MSG *p_data) 8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status; 8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC sec_event; 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char *p_name; 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_SecBond ( p_data->bond.bd_addr, 0, NULL, 0 ); 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_cb.p_sec_cback && (status != BTM_CMD_STARTED)) 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_name = BTM_SecReadDevName(p_data->bond.bd_addr); 8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!p_name) 8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_name = ""; 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&sec_event, 0, sizeof(tBTA_DM_SEC)); 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.auth_cmpl.bd_addr, p_data->bond.bd_addr); 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(sec_event.auth_cmpl.bd_name, p_name, (BD_NAME_LEN-1)); 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.auth_cmpl.bd_name[BD_NAME_LEN-1] = 0; 8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* taken care of by memset [above] 8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.auth_cmpl.key_present = FALSE; 8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.auth_cmpl.success = FALSE; 8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*/ 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.auth_cmpl.fail_reason = HCI_ERR_ILLEGAL_COMMAND; 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status == BTM_SUCCESS) 846ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.auth_cmpl.success = TRUE; 848ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 849ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 850ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 851ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* delete this device entry from Sec Dev DB */ 852ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_remove_sec_dev_entry(p_data->bond.bd_addr); 853ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_AUTH_CMPL_EVT, &sec_event); 8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_bond_cancel 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Cancels bonding with a peer device 8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_bond_cancel (tBTA_DM_MSG *p_data) 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status; 8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC sec_event; 8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT0(" bta_dm_bond_cancel "); 8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_SecBondCancel ( p_data->bond_cancel.bd_addr ); 8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_cb.p_sec_cback && (status != BTM_CMD_STARTED && status != BTM_SUCCESS)) 8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.bond_cancel_cmpl.result = BTA_FAILURE; 8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_BOND_CANCEL_CMPL_EVT, &sec_event); 8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_pin_reply 8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Send the pin_reply to a request from BTM 8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_pin_reply (tBTA_DM_MSG *p_data) 8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 trusted_mask[BTM_SEC_SERVICE_ARRAY_SIZE]; 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 * current_trusted_mask; 9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project current_trusted_mask = BTM_ReadTrustedMask(p_data->pin_reply.bd_addr); 9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(current_trusted_mask) 9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(trusted_mask, current_trusted_mask, sizeof(trusted_mask)); 9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(trusted_mask, 0, sizeof(trusted_mask)); 9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_data->pin_reply.accept) 9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9155738f83aeb59361a0a2eda2460113f6dc919427The 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 ); 9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_PINCodeReply(p_data->pin_reply.bd_addr, BTM_NOT_AUTHORIZED, 0, NULL, trusted_mask ); 9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_link_policy 9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description remove/set link policy mask. 9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** wake the link, is sniff/park is removed 9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_link_policy (tBTA_DM_MSG *p_data) 9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_PEER_DEVICE *p_dev; 9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev = bta_dm_find_peer_device(p_data->link_policy.bd_addr); 9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!p_dev) 9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG2(" bta_dm_link_policy set:%d, policy:0x%x", 9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->link_policy.set, p_data->link_policy.policy_mask); 9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_data->link_policy.set) 9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* restore the default link policy */ 9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev->link_policy |= p_data->link_policy.policy_mask; 9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetLinkPolicy(p_dev->peer_bdaddr, &(p_dev->link_policy)); 9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* clear the policy from the default link policy */ 9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev->link_policy &= (~p_data->link_policy.policy_mask); 9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetLinkPolicy(p_dev->peer_bdaddr, &(p_dev->link_policy)); 9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_data->link_policy.policy_mask & (HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_PARK_MODE)) 9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if clearing sniff/park, wake the link */ 9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_pm_active(p_dev->peer_bdaddr); 9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_policy_cback 9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description process the link policy changes 9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_policy_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, BD_ADDR peer_addr) 9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_PEER_DEVICE *p_dev = NULL; 9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 policy = app_id; 9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 mask = (UINT32)(1 << id); 9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(peer_addr) 9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev = bta_dm_find_peer_device(peer_addr); 9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG2(" bta_dm_policy_cback cmd:%d, policy:0x%x", 9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status, policy); 9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(status) 9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_SYS_PLCY_SET: 9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!p_dev) 9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* restore the default link policy */ 9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev->link_policy |= policy; 9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetLinkPolicy(p_dev->peer_bdaddr, &(p_dev->link_policy)); 9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_SYS_PLCY_CLR: 9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!p_dev) 9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* clear the policy from the default link policy */ 9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev->link_policy &= (~policy); 9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetLinkPolicy(p_dev->peer_bdaddr, &(p_dev->link_policy)); 10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(policy & (HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_PARK_MODE)) 10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if clearing sniff/park, wake the link */ 10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_pm_active(p_dev->peer_bdaddr); 10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_SYS_PLCY_DEF_SET: 10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* want to restore/set the role switch policy */ 10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.role_policy_mask &= ~mask; 10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(0 == bta_dm_cb.role_policy_mask) 10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if nobody wants to insist on the role */ 10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.cur_policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH; 10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetDefaultLinkPolicy(bta_dm_cb.cur_policy); 10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_SYS_PLCY_DEF_CLR: 10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* want to remove the role switch policy */ 10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.role_policy_mask |= mask; 10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.cur_policy &= ~HCI_ENABLE_MASTER_SLAVE_SWITCH; 10235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetDefaultLinkPolicy(bta_dm_cb.cur_policy); 10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_auth_reply 10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Send the authorization reply to a request from BTM 10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 10375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_auth_reply (tBTA_DM_MSG *p_data) 10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 trusted_mask[BTM_SEC_SERVICE_ARRAY_SIZE]; 10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 btm_mask_index = 0; 10445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 * current_trusted_mask; 10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project current_trusted_mask = BTM_ReadTrustedMask(p_data->auth_reply.bd_addr); 10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(current_trusted_mask) 10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(trusted_mask, current_trusted_mask, sizeof(trusted_mask)); 10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 10535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(trusted_mask, 0, sizeof(trusted_mask)); 10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_data->auth_reply.response != BTA_DM_NOT_AUTH) 10585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_data->auth_reply.response == BTA_DM_AUTH_PERM) 10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_data->auth_reply.service < BTA_MAX_SERVICE_ID) 10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* convert BTA service id to BTM mask */ 10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_mask_index = bta_service_id_to_btm_srv_id_lkup_tbl[p_data->auth_reply.service] / 32; 10655738f83aeb59361a0a2eda2460113f6dc919427The 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))); 10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_DeviceAuthorized (p_data->auth_reply.bd_addr, BTM_SUCCESS,trusted_mask); 10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_DeviceAuthorized (p_data->auth_reply.bd_addr, BTM_NOT_AUTHORIZED,trusted_mask); 10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_confirm 10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Send the user confirm request reply in response to a 10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** request from BTM 10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_confirm(tBTA_DM_MSG *p_data) 10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS res = BTM_NOT_AUTHORIZED; 10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_data->confirm.accept == TRUE) 10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project res = BTM_SUCCESS; 10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_ConfirmReqReply(res, p_data->confirm.bd_addr); 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** Function bta_dm_passkey_cancel 11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Send the passkey cancel from SP initiator by sending a negative 11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** passkey request replyreply. 11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 11045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE) 11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_passkey_cancel(tBTA_DM_MSG *p_data) 11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_PasskeyReqReply(BTM_NOT_AUTHORIZED, p_data->passkey_cancel.bd_addr, 0); 11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_loc_oob 11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Retrieve the OOB data from the local LM 11185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 11205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_OOB_INCLUDED == TRUE) 11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_loc_oob(tBTA_DM_MSG *p_data) 11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_ReadLocalOobData(); 11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_ci_io_req_act 11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description respond to the IO capabilities request from BTM 11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ci_io_req_act(tBTA_DM_MSG *p_data) 11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_AUTH_REQ auth_req = BTM_AUTH_AP_NO; 11405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_data->ci_io_req.auth_req) 11415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project auth_req = BTM_AUTH_AP_YES; 11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_IoCapRsp(p_data->ci_io_req.bd_addr, p_data->ci_io_req.io_cap, 11435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->ci_io_req.oob_data, auth_req); 11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_ci_rmt_oob_act 11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description respond to the OOB data request for the remote device from BTM 11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ci_rmt_oob_act(tBTA_DM_MSG *p_data) 11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS res = BTM_NOT_AUTHORIZED; 11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_data->ci_rmt_oob.accept == TRUE) 11615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project res = BTM_SUCCESS; 11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_RemoteOobDataReply(res, p_data->ci_rmt_oob.bd_addr, 11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->ci_rmt_oob.c, p_data->ci_rmt_oob.r ); 11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTM_OOB_INCLUDED */ 11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_search_start 11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Starts an inquiry 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_search_start (tBTA_DM_MSG *p_data) 11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQUIRY_CMPL result; 11805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE 11825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 len = (UINT16)(sizeof(tBT_UUID) * p_data->search.num_uuid); 11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_dm_search_start avoid_scatter=%d", bta_dm_cfg.avoid_scatter); 11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_cfg.avoid_scatter && 11875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_data->search.rs_res == BTA_DM_RS_NONE) && bta_dm_check_av(BTA_DM_API_SEARCH_EVT)) 11885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&bta_dm_cb.search_msg, &p_data->search, sizeof(tBTA_DM_API_SEARCH)); 11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_ClearInqDb(NULL); 11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* save search params */ 11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_search_cback = p_data->search.p_cback; 11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services = p_data->search.services; 11975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) 11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project utl_freebuf((void **)&bta_dm_search_cb.p_srvc_uuid); 12005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((bta_dm_search_cb.num_uuid = p_data->search.num_uuid) != 0 && 12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->search.p_uuid != NULL) 12035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((bta_dm_search_cb.p_srvc_uuid = (tBT_UUID *)GKI_getbuf(len)) == NULL) 12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("bta_dm_search_start no resources"); 12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result.status = BTA_FAILURE; 12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result.num_resp = 0; 12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_inq_cmpl_cb ((void *)&result); 12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// bta_dm_search_cb.p_srvc_uuid = (tBT_UUID *)GKI_getbuf(len); 12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(bta_dm_search_cb.p_srvc_uuid, p_data->search.p_uuid, len); 12155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result.status = BTM_StartInquiry( (tBTM_INQ_PARMS*)&p_data->search.inq_params, 12185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_inq_results_cb, 12195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (tBTM_CMPL_CB*) bta_dm_inq_cmpl_cb); 12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT1("bta_dm_search_start status=%d", result.status); 12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (result.status != BTM_CMD_STARTED) 12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result.num_resp = 0; 12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_inq_cmpl_cb ((void *)&result); 12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_search_cancel 12335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Cancels an ongoing search for devices 12355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 12385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_cancel (tBTA_DM_MSG *p_data) 12415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_MSG * p_msg; 12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(BTM_IsInquiryActive()) 12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_CancelInquiry(); 12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cancel_notify(NULL); 12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL) 12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; 12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; 12545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_msg); 12555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If no Service Search going on then issue cancel remote name in case it is active */ 12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (!bta_dm_search_cb.name_discover_done) 12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_CancelRemoteDeviceName(); 12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1263ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE 12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_search_cb.gatt_disc_active) 12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cancel_gatt_discovery(bta_dm_search_cb.peer_bdaddr); 12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 12695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_discover 12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Discovers services on a remote device 12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_discover (tBTA_DM_MSG *p_data) 12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE 12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 len = (UINT16)(sizeof(tBT_UUID) * p_data->discover.num_uuid); 12855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT2("bta_dm_discover services_to_search=0x%04X, sdp_search=%d", 12875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->discover.services, p_data->discover.sdp_search); 12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* save the search condition */ 12905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services = p_data->discover.services; 12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE 12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project utl_freebuf((void **)&bta_dm_search_cb.p_srvc_uuid); 12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((bta_dm_search_cb.num_uuid = p_data->discover.num_uuid) != 0 && 12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->discover.p_uuid != NULL) 12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((bta_dm_search_cb.p_srvc_uuid = (tBT_UUID *)GKI_getbuf(len)) == NULL) 12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->discover.p_cback(BTA_DM_DISC_CMPL_EVT, NULL); 13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(bta_dm_search_cb.p_srvc_uuid, p_data->discover.p_uuid, len); 13035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.uuid_to_search = bta_dm_search_cb.num_uuid; 13055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_search_cback = p_data->discover.p_cback; 13085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.sdp_search = p_data->discover.sdp_search; 13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services_to_search = bta_dm_search_cb.services; 13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.service_index = 0; 13115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services_found = 0; 13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.peer_name[0] = 0; 13135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.sdp_search = p_data->discover.sdp_search; 13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_btm_inq_info = BTM_InqDbRead (p_data->discover.bd_addr); 13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.name_discover_done = FALSE; 13175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&bta_dm_search_cb.uuid, &p_data->discover.uuid, sizeof(tSDP_UUID)); 13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_discover_device(p_data->discover.bd_addr); 13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_di_disc_cmpl 13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Sends event to application when DI discovery complete 13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_di_disc_cmpl(tBTA_DM_MSG *p_data) 13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_DI_DISC_CMPL di_disc; 13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&di_disc, 0, sizeof(tBTA_DM_DI_DISC_CMPL)); 13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(di_disc.bd_addr, bta_dm_search_cb.peer_bdaddr); 13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if((p_data->hdr.offset == SDP_SUCCESS) 13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project || (p_data->hdr.offset == SDP_DB_FULL)) 13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project di_disc.num_record = SDP_GetNumDiRecords(bta_dm_di_cb.p_di_db); 13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project di_disc.result = BTA_FAILURE; 13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_di_cb.p_di_db = NULL; 13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_search_cback(BTA_DM_DI_DISC_CMPL_EVT, (tBTA_DM_SEARCH *) &di_disc); 13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_di_disc_callback 13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function queries a remote device for DI information. 13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_di_disc_callback(UINT16 result) 13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_MSG * p_msg; 13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL) 13645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; 13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.layer_specific = BTA_DM_API_DI_DISCOVER_EVT; 13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.offset = result; 13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_msg); 13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1374ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function bta_dm_disable_search_and_disc 1375ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1376ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description Cancels an ongoing search or discovery for devices in case of 1377ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** a Bluetooth disable 1378ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1379ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1380ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns void 1381ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1382ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 1383ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_disable_search_and_disc (void) 1384ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1385ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_DM_DI_DISC_CMPL di_disc; 1386ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_DM_MSG * p_msg; 1387ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1388ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(BTM_IsInquiryActive()||(bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE)) 1389ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1390ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_CancelInquiry(); 1391ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_search_cancel_notify(NULL); 1392ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1393ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL) 1394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1395ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; 1396ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; 1397ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_sys_sendmsg(p_msg); 1398ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1399ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1400ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* If no Service Search going on then issue cancel remote name in case it is active */ 1402ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else if (!bta_dm_search_cb.name_discover_done) 1403ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1404ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_CancelRemoteDeviceName(); 1405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL) 1407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; 1409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; 1410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_sys_sendmsg(p_msg); 1411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else if(bta_dm_di_cb.p_di_db != NULL) 1414ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1415ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memset(&di_disc, 0, sizeof(tBTA_DM_DI_DISC_CMPL)); 1416ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(di_disc.bd_addr, bta_dm_search_cb.peer_bdaddr); 1417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta di_disc.result = BTA_FAILURE; 1418ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1419ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_di_cb.p_di_db = NULL; 1420ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_search_cb.p_search_cback(BTA_DM_DI_DISC_CMPL_EVT, NULL); 1421ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1422ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1423ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE) && (BTA_GATT_INCLUDED == TRUE) 1424ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (bta_dm_search_cb.gatt_disc_active) 1425ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1426ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_cancel_gatt_discovery(bta_dm_search_cb.peer_bdaddr); 1427ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1428ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 1429ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1430ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1431ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 1432ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_di_disc 14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function queries a remote device for DI information. 14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_di_disc (tBTA_DM_MSG *p_data) 14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 result = BTA_FAILURE; 14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_MSG *p_msg; 14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_search_cback = p_data->di_disc.p_cback; 14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(bta_dm_search_cb.peer_bdaddr, p_data->di_disc.bd_addr); 14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_di_cb.p_di_db = p_data->di_disc.p_sdp_db; 14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if((bta_dm_search_cb.p_sdp_db = (tSDP_DISCOVERY_DB *)GKI_getbuf(BTA_DM_SDP_DB_SIZE)) != NULL) 14515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( SDP_DiDiscover(bta_dm_search_cb.peer_bdaddr, p_data->di_disc.p_sdp_db, 14535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->di_disc.len, bta_dm_di_disc_callback) == SDP_SUCCESS) 14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result = BTA_SUCCESS; 14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 14595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("No buffer to start DI discovery"); 14615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( result == BTA_FAILURE && 14645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL) 14655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; 14675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.layer_specific = BTA_DM_API_DI_DISCOVER_EVT; 14685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->hdr.offset = result; 14695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_msg); 14705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_read_remote_device_name 14765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Initiate to get remote device name 14785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns TRUE if started to get remote name 14805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN bta_dm_read_remote_device_name (BD_ADDR bd_addr) 14835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS btm_status; 14855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG0("bta_dm_read_remote_device_name"); 14875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(bta_dm_search_cb.peer_bdaddr, bd_addr); 14895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.peer_name[0] = 0; 14905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_status = BTM_ReadRemoteDeviceName (bta_dm_search_cb.peer_bdaddr, 14925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (tBTM_CMPL_CB *) bta_dm_remname_cback); 14935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( btm_status == BTM_CMD_STARTED ) 14955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG0("bta_dm_read_remote_device_name: BTM_ReadRemoteDeviceName is started"); 14975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 14995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ( btm_status == BTM_BUSY ) 15015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG0("bta_dm_read_remote_device_name: BTM_ReadRemoteDeviceName is busy"); 15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Remote name discovery is on going now so BTM cannot notify through "bta_dm_remname_cback" */ 15055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* adding callback to get notified that current reading remore name done */ 15065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SecAddRmtNameNotifyCallback(&bta_dm_service_search_remname_cback); 15075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (TRUE); 15095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 15115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING1("bta_dm_read_remote_device_name: BTM_ReadRemoteDeviceName returns 0x%02X", btm_status); 15135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (FALSE); 15155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 15195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_inq_cmpl 15215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Process the inquiry complete event from BTM 15235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 15255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_inq_cmpl (tBTA_DM_MSG *p_data) 15285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_MSG * p_msg; 15305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEARCH data; 15315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG0("bta_dm_inq_cmpl"); 15335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data.inq_cmpl.num_resps = p_data->inq_cmpl.num; 15355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_search_cback(BTA_DM_INQ_CMPL_EVT, &data); 15365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if((bta_dm_search_cb.p_btm_inq_info = BTM_InqDbFirst()) != NULL) 15385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* start name and service discovery from the first device on inquiry result */ 15405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.name_discover_done = FALSE; 15415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.peer_name[0] = 0; 15425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_discover_device(bta_dm_search_cb.p_btm_inq_info->results.remote_bd_addr); 15435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 15455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* no devices, search complete */ 15475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services = 0; 15485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL) 15505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; 15525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; 15535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_msg); 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/******************************************************************************* 15595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_rmt_name 15615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Process the remote name result from BTM 15635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 15655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_rmt_name (tBTA_DM_MSG *p_data) 15685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG0("bta_dm_rmt_name"); 15705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( p_data->rem_name.result.disc_res.bd_name[0] && bta_dm_search_cb.p_btm_inq_info) 15725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_btm_inq_info->appl_knows_rem_name = TRUE; 15745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_discover_device(bta_dm_search_cb.peer_bdaddr); 15775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 15805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_disc_rmt_name 15825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Process the remote name result from BTM when application 15845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** wants to find the name for a bdaddr 15855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 15875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_disc_rmt_name (tBTA_DM_MSG *p_data) 15905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQ_INFO *p_btm_inq_info; 15925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG0("bta_dm_disc_rmt_name"); 15945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_btm_inq_info = BTM_InqDbRead (p_data->rem_name.result.disc_res.bd_addr); 15965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( p_btm_inq_info ) 15975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( p_data->rem_name.result.disc_res.bd_name[0] ) 15995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_btm_inq_info->appl_knows_rem_name = TRUE; 16015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_discover_device(p_data->rem_name.result.disc_res.bd_addr); 16055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 16085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_sdp_result 16105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Process the discovery result from sdp 16125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 16145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 16165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_sdp_result (tBTA_DM_MSG *p_data) 16175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSDP_DISC_REC *p_sdp_rec = NULL; 16205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_MSG *p_msg; 16215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN service_found = FALSE; 16225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN scn_found = FALSE; 16235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 service = 0xFFFF; 16245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSDP_PROTOCOL_ELEM pe; 16255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE 16275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBT_UUID *p_uuid = bta_dm_search_cb.p_srvc_uuid; 16285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEARCH result; 16295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBT_UUID service_uuid; 16305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 16315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 num_uuids = 0; 16335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 uuid_list[32][MAX_UUID_SIZE]; // assuming a max of 32 services 16345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if((p_data->sdp_event.sdp_result == SDP_SUCCESS) 16365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project || (p_data->sdp_event.sdp_result == SDP_NO_RECS_MATCH) 16375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project || (p_data->sdp_event.sdp_result == SDP_DB_FULL)) 16385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("sdp_result::0x%x", p_data->sdp_event.sdp_result); 16405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project do 16415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project service_found = FALSE; 16445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_sdp_rec = NULL; 16455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_dm_search_cb.service_index == (BTA_USER_SERVICE_ID+1) ) 16465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_sdp_rec = SDP_FindServiceUUIDInDb(bta_dm_search_cb.p_sdp_db, &bta_dm_search_cb.uuid, p_sdp_rec); 16485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_sdp_rec && SDP_FindProtocolListElemInRec(p_sdp_rec, UUID_PROTOCOL_RFCOMM, &pe)) 16505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.peer_scn = (UINT8) pe.params[0]; 16525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project scn_found = TRUE; 16535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 16565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project service = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index-1]; 16585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_sdp_rec = SDP_FindServiceInDb(bta_dm_search_cb.p_sdp_db, service, p_sdp_rec); 16595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE 16615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* finished with BR/EDR services, now we check the result for GATT based service UUID */ 16625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_search_cb.service_index == BTA_MAX_SERVICE_ID) 16635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_search_cb.uuid_to_search != 0 && p_uuid != NULL) 16655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_uuid += (bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search); 16675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* only support 16 bits UUID for now */ 16685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project service = p_uuid->uu.uuid16; 16695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* all GATT based services */ 16725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project do 16735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* find a service record, report it */ 16755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_sdp_rec = SDP_FindServiceInDb(bta_dm_search_cb.p_sdp_db, 16765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 0, p_sdp_rec); 16775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_sdp_rec) 16785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (SDP_FindServiceUUIDInRec(p_sdp_rec, &service_uuid)) 16805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send result back to app now, one by one */ 16825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy (result.disc_ble_res.bd_addr, bta_dm_search_cb.peer_bdaddr); 1683ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BCM_STRNCPY_S((char*)result.disc_ble_res.bd_name, sizeof(BD_NAME), bta_dm_get_remname(), (BD_NAME_LEN)); 1684ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta result.disc_ble_res.bd_name[BD_NAME_LEN] = 0; 16855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result.disc_ble_res.service.len = service_uuid.len; 16865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result.disc_ble_res.service.uu.uuid16 = service_uuid.uu.uuid16; 16875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result); 16895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_search_cb.uuid_to_search > 0) 16935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 16945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } while (p_sdp_rec); 16965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 16985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 16995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* SDP_DB_FULL means some records with the 17015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project required attributes were received */ 17025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(((p_data->sdp_event.sdp_result == SDP_DB_FULL) && 17035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services != BTA_ALL_SERVICE_MASK) || 17045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_sdp_rec != NULL)) 17055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If Plug and Play service record, check to see if Broadcom stack */ 17075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (service == UUID_SERVCLASS_PNP_INFORMATION) 17085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_sdp_rec) 17105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (SDP_FindAttributeInRec (p_sdp_rec, ATTR_ID_EXT_BRCM_VERSION)) 17125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project service_found = TRUE; 17145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 17185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project service_found = TRUE; 17205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (service_found) 17235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 tmp_svc = 0xFFFF; 17255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services_found |= 17265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index-1)); 17275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tmp_svc = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index-1]; 17285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Add to the list of UUIDs */ 17295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sdpu_uuid16_to_uuid128(tmp_svc, uuid_list[num_uuids]); 17305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_uuids++; 17315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK && 17365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services_to_search == 0) 17375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE 17395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID && 17405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.uuid_to_search > 0) 17415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.uuid_to_search --; 17425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_search_cb.uuid_to_search == 0 || 17445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.service_index != BTA_BLE_SERVICE_ID) 17455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 17465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.service_index++; 17475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* regular one service per search or PNP search */ 17495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 17505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while(bta_dm_search_cb.service_index <= BTA_MAX_SERVICE_ID); 17535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// GKI_freebuf(bta_dm_search_cb.p_sdp_db); 17555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// bta_dm_search_cb.p_sdp_db = NULL; 17565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_dm_sdp_result services_found = %04x", bta_dm_search_cb.services_found); 17575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Collect the 128-bit services here and put them into the list */ 17595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK) 17605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_sdp_rec = NULL; 17625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project do 17635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBT_UUID temp_uuid; 17655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* find a service record, report it */ 17665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_sdp_rec = SDP_FindServiceInDb_128bit(bta_dm_search_cb.p_sdp_db, p_sdp_rec); 17675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_sdp_rec) 17685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (SDP_FindServiceUUIDInRec_128bit(p_sdp_rec, &temp_uuid)) 17705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(uuid_list[num_uuids], temp_uuid.uu.uuid128, MAX_UUID_SIZE); 17725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_uuids++; 17735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } while (p_sdp_rec); 17765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if there are more services to search for */ 17785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_search_cb.services_to_search) 17795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Free up the p_sdp_db before checking the next one */ 17815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_free_sdp_db(NULL); 17825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_find_services(bta_dm_search_cb.peer_bdaddr); 17835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 17855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* callbacks */ 17875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* start next bd_addr if necessary */ 17885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SecDeleteRmtNameNotifyCallback(&bta_dm_service_search_remname_cback); 17905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL) 17935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT; 17955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.result = BTA_SUCCESS; 17965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.p_raw_data = NULL; 17975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.raw_data_size = 0; 17985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.num_uuids = num_uuids; 17995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.p_uuid_list = NULL; 18005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (num_uuids > 0) { 18015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.p_uuid_list = (UINT8*)GKI_getbuf(num_uuids*MAX_UUID_SIZE); 18025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_msg->disc_result.result.disc_res.p_uuid_list) { 18035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p_msg->disc_result.result.disc_res.p_uuid_list, uuid_list, 18045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_uuids*MAX_UUID_SIZE); 18055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } else { 18065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.num_uuids = 0; 18075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR1("%s: Unable to allocate memory for uuid_list", __FUNCTION__); 18085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //copy the raw_data to the discovery result structure 18115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project // 18125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG2("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); 18135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( bta_dm_search_cb.p_sdp_db != NULL && bta_dm_search_cb.p_sdp_db->raw_used != 0 && 18155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_sdp_db->raw_data != NULL) { 18165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18175738f83aeb59361a0a2eda2460113f6dc919427The 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); 18185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( NULL != p_msg->disc_result.result.disc_res.p_raw_data ) { 18195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy( p_msg->disc_result.result.disc_res.p_raw_data, 18205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_sdp_db->raw_data, 18215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_sdp_db->raw_used ); 18225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.raw_data_size = 18245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_sdp_db->raw_used; 18255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } else { 18275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_dm_sdp_result GKI Alloc failed to allocate %d bytes !!\r\n",bta_dm_search_cb.p_sdp_db->raw_used); 18285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_sdp_db->raw_data = NULL; //no need to free this - it is a global assigned. 18315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_sdp_db->raw_used = 0; 18325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_sdp_db->raw_size = 0; 18335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else { 18355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG0("bta_dm_sdp_result raw data size is 0 or raw_data is null!!\r\n"); 18365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Done with p_sdp_db. Free it */ 18385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_free_sdp_db(NULL); 18395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found; 18405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //Piggy back the SCN over result field 18425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( scn_found ) 18435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.result = (3 + bta_dm_search_cb.peer_scn); 18455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.services |= BTA_USER_SERVICE_MASK; 18465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT1(" Piggy back the SCN over result field SCN=%d", bta_dm_search_cb.peer_scn); 18485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy (p_msg->disc_result.result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr); 18515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BCM_STRNCPY_S((char*)p_msg->disc_result.result.disc_res.bd_name, sizeof(BD_NAME), 18525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_get_remname(), (BD_NAME_LEN-1)); 18535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* make sure the string is null terminated */ 18555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.bd_name[BD_NAME_LEN-1] = 0; 18565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_msg); 18585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 18645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* conn failed. No need for timer */ 18665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_data->sdp_event.sdp_result == SDP_CONN_FAILED || p_data->sdp_event.sdp_result == SDP_CONN_REJECTED 18675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project || p_data->sdp_event.sdp_result == SDP_SECURITY_ERR) 18685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.wait_disc = FALSE; 18695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* not able to connect go to next device */ 18715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(bta_dm_search_cb.p_sdp_db); 18725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_sdp_db = NULL; 18735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SecDeleteRmtNameNotifyCallback(&bta_dm_service_search_remname_cback); 18755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL) 18775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT; 18795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.result = BTA_FAILURE; 18805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found; 18815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy (p_msg->disc_result.result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr); 18825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BCM_STRNCPY_S((char*)p_msg->disc_result.result.disc_res.bd_name, sizeof(BD_NAME), 18835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_get_remname(), (BD_NAME_LEN-1)); 18845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* make sure the string is null terminated */ 18865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.bd_name[BD_NAME_LEN-1] = 0; 18875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_msg); 18895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 18925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 18945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_search_cmpl 18965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Sends event to application 18985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 19005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 19025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_cmpl (tBTA_DM_MSG *p_data) 19035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 19045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG0("bta_dm_search_cmpl"); 19055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) 19075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project utl_freebuf((void **)&bta_dm_search_cb.p_srvc_uuid); 19085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 19095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->hdr.layer_specific == BTA_DM_API_DI_DISCOVER_EVT) 19115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_di_disc_cmpl(p_data); 19125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 19135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_search_cback(BTA_DM_DISC_CMPL_EVT, NULL); 19145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 19155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 19175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_disc_result 19195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Service discovery result when discovering services on a device 19215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 19235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 19255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_disc_result (tBTA_DM_MSG *p_data) 19265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 19275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_MSG * p_msg; 19285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG0("bta_dm_disc_result"); 19305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE 19325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if any BR/EDR service discovery has been done, report the event */ 19335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((bta_dm_search_cb.services & ((BTA_ALL_SERVICE_MASK | BTA_USER_SERVICE_MASK ) & ~BTA_BLE_SERVICE_MASK))) 19345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 19355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_search_cback(BTA_DM_DISC_RES_EVT, &p_data->disc_result.result); 19365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send a message to change state */ 19385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL) 19395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; 19415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; 19425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_msg); 19435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 19455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 19475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_search_result 19495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Service discovery result while searching for devices 19515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 19535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 19555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_result (tBTA_DM_MSG *p_data) 19565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 19575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG2("bta_dm_search_result searching:0x%04x, result:0x%04x", 19585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services, 19595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->disc_result.result.disc_res.services); 19605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* call back if application wants name discovery or found services that application is searching */ 19625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (( !bta_dm_search_cb.services ) 19635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ||(( bta_dm_search_cb.services ) && ( p_data->disc_result.result.disc_res.services ))) 19645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_search_cback(BTA_DM_DISC_RES_EVT, &p_data->disc_result.result); 19665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if searching did not initiate to create link */ 19695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!bta_dm_search_cb.wait_disc ) 19705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTM_EIR_CLIENT_INCLUDED == TRUE ) 19725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if service searching is done with EIR, don't search next device */ 19735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_dm_search_cb.p_btm_inq_info ) 19745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 19755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_discover_next_device(); 19765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 19785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 19795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* wait until link is disconnected or timeout */ 19805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.sdp_results = TRUE; 19815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.search_timer.p_cback = (TIMER_CBACK*)&bta_dm_search_timer_cback; 19825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_start_timer(&bta_dm_search_cb.search_timer, 0, 1000*(L2CAP_LINK_INACTIVITY_TOUT+1) ); 19835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 19865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 19885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_search_timer_cback 19905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Called when ACL disconnect time is over 19925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 19955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 19965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 19975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_search_timer_cback (TIMER_LIST_ENT *p_tle) 19985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 19995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT0(" bta_dm_search_timer_cback "); 20015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.wait_disc = FALSE; 20025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* proceed with next device */ 20045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_discover_next_device(); 20055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 20075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 20105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_free_sdp_db 20125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Frees SDP data base 20145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 20165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 20185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_free_sdp_db (tBTA_DM_MSG *p_data) 20195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 20205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_search_cb.p_sdp_db) 20215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 20225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(bta_dm_search_cb.p_sdp_db); 20235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_sdp_db = NULL; 20245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 20275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 20295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_queue_search 20315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Queues search command while search is being cancelled 20335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 20355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 20375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_queue_search (tBTA_DM_MSG *p_data) 20385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 20395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_search_queue = (tBTA_DM_MSG *)GKI_getbuf(sizeof(tBTA_DM_API_SEARCH)); 20415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(bta_dm_search_cb.p_search_queue, p_data, sizeof(tBTA_DM_API_SEARCH)); 20425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 20445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 20465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_queue_disc 20485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Queues discovery command while search is being cancelled 20505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 20525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 20545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_queue_disc (tBTA_DM_MSG *p_data) 20555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 20565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_search_queue = (tBTA_DM_MSG *)GKI_getbuf(sizeof(tBTA_DM_API_DISCOVER)); 20585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(bta_dm_search_cb.p_search_queue, p_data, sizeof(tBTA_DM_API_DISCOVER)); 20595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 20615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 20635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_search_clear_queue 20655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Clears the queue if API search cancel is called 20675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 20695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 20715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_clear_queue (tBTA_DM_MSG *p_data) 20725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 20735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_search_cb.p_search_queue) 20755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 20765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(bta_dm_search_cb.p_search_queue); 20775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_search_queue = NULL; 20785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 20795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 20825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 20845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_search_cancel_cmpl 20865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Search cancel is complete 20885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 20905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 20915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 20925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_cancel_cmpl (tBTA_DM_MSG *p_data) 20935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 20945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_search_cb.p_search_queue) 20965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 20975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(bta_dm_search_cb.p_search_queue); 20985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_search_queue = NULL; 20995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 21005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 21025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 21045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_search_cancel_transac_cmpl 21065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Current Service Discovery or remote name procedure is 21085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** completed after search cancellation 21095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 21115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 21135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_cancel_transac_cmpl(tBTA_DM_MSG *p_data) 21145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 21155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_search_cb.p_sdp_db) 21175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(bta_dm_search_cb.p_sdp_db); 21195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_sdp_db = NULL; 21205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 21215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cancel_notify(NULL); 21235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 21245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 21275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_search_cancel_notify 21295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Notify application that search has been cancelled 21315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 21335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 21355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_search_cancel_notify (tBTA_DM_MSG *p_data) 21365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 21375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_search_cb.p_search_cback) 21385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_search_cback(BTA_DM_SEARCH_CANCEL_CMPL_EVT, NULL); 21405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 21415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!bta_dm_search_cb.name_discover_done) 21425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_CancelRemoteDeviceName(); 21445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2145ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE) && (BTA_GATT_INCLUDED == TRUE) 21465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_search_cb.gatt_disc_active) 21475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cancel_gatt_discovery(bta_dm_search_cb.peer_bdaddr); 21495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 21505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 21515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 21535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 21555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_find_services 21575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Starts discovery on a device 21595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 21615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 21625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 21635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_find_services ( BD_ADDR bd_addr) 21645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 21655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tSDP_UUID uuid; 21675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 attr_list[] = {ATTR_ID_SERVICE_CLASS_ID_LIST, ATTR_ID_EXT_BRCM_VERSION}; 21685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 num_attrs = 1; 21695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_MSG *p_msg; 21705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset (&uuid, 0, sizeof(tSDP_UUID)); 21725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 21735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while(bta_dm_search_cb.service_index < BTA_MAX_SERVICE_ID) 21745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_dm_search_cb.services_to_search 21765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project & (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))) 21775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if((bta_dm_search_cb.p_sdp_db = (tSDP_DISCOVERY_DB *)GKI_getbuf(BTA_DM_SDP_DB_SIZE)) != NULL) 21795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_dm_search_cb.services = %04x***********", bta_dm_search_cb.services); 21815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* try to search all services by search based on L2CAP UUID */ 21825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK ) 21835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR1("services_to_search = %08x",bta_dm_search_cb.services_to_search); 21855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_search_cb.services_to_search & BTA_RES_SERVICE_MASK) 21865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uuid.uu.uuid16 = bta_service_id_to_uuid_lkup_tbl[0]; 21885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services_to_search &= ~BTA_RES_SERVICE_MASK; 21895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 21905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 21915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uuid.uu.uuid16 = UUID_PROTOCOL_L2CAP; 21935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services_to_search = 0; 21945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 21955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 21965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 21975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 21985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE 21995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* for LE only profile */ 22005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID) 22015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_search_cb.uuid_to_search > 0 && bta_dm_search_cb.p_srvc_uuid) 22035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&uuid, 22055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (const void *)(bta_dm_search_cb.p_srvc_uuid + \ 22065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search), 22075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(tBT_UUID)); 22085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.uuid_to_search -- ; 22105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 22125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uuid.uu.uuid16 = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index]; 22135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* last one? clear the BLE service bit if all discovery has been done */ 22155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_search_cb.uuid_to_search == 0) 22165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services_to_search &= 22175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (tBTA_SERVICE_MASK)(~(BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))); 22185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 22215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 22225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* remove the service from services to be searched */ 22245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 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 uuid.uu.uuid16 = bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index]; 22275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (uuid.len == 0) 22315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uuid.len = LEN_UUID_16; 22325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if 0 22345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (uuid.uu.uuid16 == UUID_SERVCLASS_PNP_INFORMATION) 22355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_attrs = 2; 22375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 22395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_search_cb.service_index == BTA_USER_SERVICE_ID) 22415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&uuid, &bta_dm_search_cb.uuid, sizeof(tSDP_UUID)); 22435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR1("****************search UUID = %04x***********", uuid.uu.uuid16); 22475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //SDP_InitDiscoveryDb (bta_dm_search_cb.p_sdp_db, BTA_DM_SDP_DB_SIZE, 1, &uuid, num_attrs, attr_list); 22485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SDP_InitDiscoveryDb (bta_dm_search_cb.p_sdp_db, BTA_DM_SDP_DB_SIZE, 1, &uuid, 0, NULL); 22495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(g_disc_raw_data_buf, 0, sizeof(g_disc_raw_data_buf)); 22525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_sdp_db->raw_data = g_disc_raw_data_buf; 22535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_sdp_db->raw_size = MAX_DISC_RAW_DATA_BUF; 22555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!SDP_ServiceSearchAttributeRequest (bd_addr, bta_dm_search_cb.p_sdp_db, &bta_dm_sdp_callback)) 22575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if discovery not successful with this device 22595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project proceed to next one */ 22605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(bta_dm_search_cb.p_sdp_db); 22615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_sdp_db = NULL; 22625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.service_index = BTA_MAX_SERVICE_ID; 22635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 22665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE 22685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID && 22695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.uuid_to_search == 0) || 22705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.service_index != BTA_BLE_SERVICE_ID) 22715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 22725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.service_index++; 22735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 22745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 22775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("#### Failed to allocate SDP DB buffer! ####"); 22795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.service_index++; 22835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 22845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* no more services to be discovered */ 22865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_search_cb.service_index >= BTA_MAX_SERVICE_ID) 22875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL) 22895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 22905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT; 22915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found; 22925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy (p_msg->disc_result.result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr); 22935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BCM_STRNCPY_S((char*)p_msg->disc_result.result.disc_res.bd_name, sizeof(BD_NAME), 22945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_get_remname(), (BD_NAME_LEN-1)); 22955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* make sure the string is terminated */ 22975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.bd_name[BD_NAME_LEN-1] = 0; 22985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 22995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_msg); 23005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 23035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 23055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_discover_next_device 23075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Starts discovery on the next device in Inquiry data base 23095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 23115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 23135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_discover_next_device(void) 23145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 23155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_MSG * p_msg; 23175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG0("bta_dm_discover_next_device"); 23195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* searching next device on inquiry result */ 23215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if((bta_dm_search_cb.p_btm_inq_info = BTM_InqDbNext(bta_dm_search_cb.p_btm_inq_info)) != NULL) 23225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 23235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.name_discover_done = FALSE; 23245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.peer_name[0] = 0; 23255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_discover_device(bta_dm_search_cb.p_btm_inq_info->results.remote_bd_addr); 23265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 23285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 23295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* no devices, search complete */ 23305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services = 0; 23315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL) 23335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 23345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BTA_DM_SEARCH_CMPL_EVT; 23355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.layer_specific = BTA_DM_API_DISCOVER_EVT; 23365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_msg); 23375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 23405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 23425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_discover_device 23445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Starts name and service discovery on the device 23465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 23485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 23495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 23505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_discover_device(BD_ADDR remote_bd_addr) 23515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 23525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_MSG * p_msg; 23535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE 23555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBT_DEVICE_TYPE dev_type; 23565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBLE_ADDR_TYPE addr_type; 23575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 23585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG6("bta_dm_discover_device, BDA:0x%02X%02X%02X%02X%02X%02X", 23605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project remote_bd_addr[0],remote_bd_addr[1], 23615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project remote_bd_addr[2],remote_bd_addr[3], 23625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project remote_bd_addr[4],remote_bd_addr[5]); 23635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(bta_dm_search_cb.peer_bdaddr, remote_bd_addr); 23655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG2("bta_dm_discover_device name_discover_done = %d p_btm_inq_info 0x%x ", 23675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.name_discover_done, 23685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_btm_inq_info 23695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ); 23705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( bta_dm_search_cb.p_btm_inq_info ) { 23715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_dm_discover_device appl_knows_rem_name %d", 23735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_btm_inq_info->appl_knows_rem_name 23745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ); 23755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if name discovery is not done and application needs remote name */ 23785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((!bta_dm_search_cb.name_discover_done) 23795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project && (( bta_dm_search_cb.p_btm_inq_info == NULL ) 23805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ||(bta_dm_search_cb.p_btm_inq_info && (!bta_dm_search_cb.p_btm_inq_info->appl_knows_rem_name)))) 23815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 23825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_dm_read_remote_device_name(bta_dm_search_cb.peer_bdaddr) == TRUE ) 23835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 23845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 23855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 23875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 23885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* starting name discovery failed */ 23895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.name_discover_done = TRUE; 23905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 23925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 23935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if application wants to discover service */ 23945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( bta_dm_search_cb.services ) 23955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 23965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* initialize variables */ 23975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.service_index = 0; 23985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services_found = 0; 23995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services_to_search = bta_dm_search_cb.services; 24005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE 24015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.uuid_to_search = bta_dm_search_cb.num_uuid; 24025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 24035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTM_EIR_CLIENT_INCLUDED == TRUE ) 24045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((bta_dm_search_cb.p_btm_inq_info != NULL) && 24055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services != BTA_USER_SERVICE_MASK 24065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &&(bta_dm_search_cb.sdp_search == FALSE)) 24075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 24085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* check if EIR provides the information of supported services */ 24095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_eir_search_services( &bta_dm_search_cb.p_btm_inq_info->results, 24105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &bta_dm_search_cb.services_to_search, 24115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &bta_dm_search_cb.services_found ); 24125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 24135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if seaching with EIR is not completed */ 24155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_search_cb.services_to_search) 24165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 24175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 24185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* check whether connection already exists to the device 24195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if connection exists, we don't have to wait for ACL 24205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project link to go down to start search on next device */ 24215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(BTM_IsAclConnectionUp(bta_dm_search_cb.peer_bdaddr)) 24225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.wait_disc = FALSE; 24235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 24245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.wait_disc = TRUE; 24255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE && (defined BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE)) 24275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( bta_dm_search_cb.p_btm_inq_info ) 24285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 24295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG3("bta_dm_discover_device p_btm_inq_info 0x%x results.device_type 0x%x services_to_search 0x%x", 24305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_btm_inq_info, 24315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_btm_inq_info->results.device_type, 24325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.services_to_search 24335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ); 24345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 24355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_ReadDevInfo(remote_bd_addr, &dev_type, &addr_type); 24365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (dev_type == BT_DEVICE_TYPE_BLE) 24385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* 24395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( bta_dm_search_cb.p_btm_inq_info != NULL && 24405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_btm_inq_info->results.device_type == BT_DEVICE_TYPE_BLE && 24415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (bta_dm_search_cb.services_to_search & BTA_BLE_SERVICE_MASK))*/ 24425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 24435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_search_cb.services_to_search & BTA_BLE_SERVICE_MASK) 24445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 24455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //set the raw data buffer here 24465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(g_disc_raw_data_buf, 0, sizeof(g_disc_raw_data_buf)); 24475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_ble_rawdata = g_disc_raw_data_buf; 24485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.ble_raw_size = MAX_DISC_RAW_DATA_BUF; 24505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.ble_raw_used = 0; 24515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* start GATT for service discovery */ 24535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_dm_start_gatt_discovery(bta_dm_search_cb.peer_bdaddr); 24545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 24555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 24565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 24575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 24585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 24595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 24605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.sdp_results = FALSE; 24615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_find_services(bta_dm_search_cb.peer_bdaddr); 24625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 24645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 24655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 24665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 24675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* name discovery and service discovery are done for this device */ 24695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL) 24705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 24715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT; 24725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* initialize the data structure - includes p_raw_data and raw_data_size */ 24735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&(p_msg->disc_result.result), 0, sizeof(tBTA_DM_DISC_RES)); 24745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.result = BTA_SUCCESS; 24755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found; 24765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy (p_msg->disc_result.result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr); 24775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BCM_STRNCPY_S((char*)p_msg->disc_result.result.disc_res.bd_name, sizeof(BD_NAME), 24785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)bta_dm_search_cb.peer_name, (BD_NAME_LEN-1)); 24795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* make sure the string is terminated */ 24815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.bd_name[BD_NAME_LEN-1] = 0; 24825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_msg); 24845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 24855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 24865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 24885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_sdp_callback 24905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback from sdp with discovery status 24925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 24945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 24955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 24965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_sdp_callback (UINT16 sdp_status) 24975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 24985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 24995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SDP_RESULT * p_msg; 25005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTA_DM_SDP_RESULT *) GKI_getbuf(sizeof(tBTA_DM_SDP_RESULT))) != NULL) 25025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 25035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BTA_DM_SDP_RESULT_EVT; 25045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->sdp_result = sdp_status; 25055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_msg); 25065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 25085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 25095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 25115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_inq_results_cb 25135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Inquiry results callback from BTM 25155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 25175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 25195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_inq_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir) 25205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 25215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEARCH result; 25235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_INQ_INFO *p_inq_info; 25245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 service_class; 25255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(result.inq_res.bd_addr, p_inq->remote_bd_addr); 25275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(result.inq_res.dev_class, p_inq->dev_class, DEV_CLASS_LEN); 25285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_COD_SERVICE_CLASS(service_class, p_inq->dev_class); 25295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result.inq_res.is_limited = (service_class & BTM_COD_SERVICE_LMTD_DISCOVER)?TRUE:FALSE; 25305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result.inq_res.rssi = p_inq->rssi; 25315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE) 25335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result.inq_res.ble_addr_type = p_inq->ble_addr_type; 25345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result.inq_res.inq_result_type = p_inq->inq_result_type; 25355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result.inq_res.device_type = p_inq->device_type; 25365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 25385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* application will parse EIR to find out remote device name */ 25405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result.inq_res.p_eir = p_eir; 25415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if((p_inq_info = BTM_InqDbRead(p_inq->remote_bd_addr)) != NULL) 25435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 25445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* initialize remt_name_not_required to FALSE so that we get the name by default */ 25455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result.inq_res.remt_name_not_required = FALSE; 25465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 25485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_search_cb.p_search_cback) 25505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_search_cback(BTA_DM_INQ_RES_EVT, &result); 25515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_inq_info) 25535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 25545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* application indicates if it knows the remote name, inside the callback 25555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project copy that to the inquiry data base*/ 25565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(result.inq_res.remt_name_not_required) 25575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_inq_info->appl_knows_rem_name = TRUE; 25585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 25605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 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** Function bta_dm_inq_cmpl_cb 25685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Inquiry complete callback from BTM 25705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 25725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 25745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_inq_cmpl_cb (void * p_result) 25755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 25765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_MSG * p_msg; 25785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG0("bta_dm_inq_cmpl_cb"); 25805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL) 25815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 25825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->inq_cmpl.hdr.event = BTA_DM_INQUIRY_CMPL_EVT; 25835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->inq_cmpl.num = ((tBTM_INQUIRY_CMPL *)p_result)->num_resp; 25845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_msg); 25855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 25875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 25905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 25915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 25925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_service_search_remname_cback 25945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Remote name call back from BTM during service discovery 25965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 25985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 25995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 26005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_service_search_remname_cback (BD_ADDR bd_addr, DEV_CLASS dc, BD_NAME bd_name) 26015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 26025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_REMOTE_DEV_NAME rem_name; 26035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS btm_status; 26045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_dm_service_search_remname_cback name=<%s>", bd_name); 26065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if this is what we are looking for */ 26085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!bdcmp( bta_dm_search_cb.peer_bdaddr, bd_addr)) 26095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 26105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rem_name.length = strlen((char*)bd_name); 26115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (rem_name.length > (BD_NAME_LEN-1)) 26125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 26135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rem_name.length = (BD_NAME_LEN-1); 26145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rem_name.remote_bd_name[(BD_NAME_LEN-1)] = 0; 26155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 26165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BCM_STRNCPY_S((char*)rem_name.remote_bd_name, sizeof(BD_NAME), (char*)bd_name, (BD_NAME_LEN-1)); 26175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rem_name.status = BTM_SUCCESS; 26185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_remname_cback(&rem_name); 26205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 26215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 26225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 26235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get name of device */ 26245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_status = BTM_ReadRemoteDeviceName (bta_dm_search_cb.peer_bdaddr, 26255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (tBTM_CMPL_CB *) bta_dm_remname_cback); 26265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( btm_status == BTM_BUSY ) 26275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 26285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* wait for next chance(notification of remote name discovery done) */ 26295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG0("bta_dm_service_search_remname_cback: BTM_ReadRemoteDeviceName is busy"); 26305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 26315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ( btm_status != BTM_CMD_STARTED ) 26325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 26335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if failed to start getting remote name then continue */ 26345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING1("bta_dm_service_search_remname_cback: BTM_ReadRemoteDeviceName returns 0x%02X", btm_status); 26355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rem_name.length = 0; 26375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rem_name.remote_bd_name[0] = 0; 26385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project rem_name.status = btm_status; 26395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_remname_cback(&rem_name); 26405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 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** Function bta_dm_remname_cback 26485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Remote name complete call back from BTM 26505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 26525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 26545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_remname_cback (tBTM_REMOTE_DEV_NAME *p_remote_name) 26555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 26565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_REM_NAME * p_msg; 26575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2658ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta APPL_TRACE_DEBUG2("bta_dm_remname_cback len = %d name=<%s>", p_remote_name->length, 2659ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_remote_name->remote_bd_name); 26605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* remote name discovery is done but it could be failed */ 26625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.name_discover_done = TRUE; 2663ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh 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)); 2664ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_search_cb.peer_name[BD_NAME_LEN]=0; 26655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SecDeleteRmtNameNotifyCallback(&bta_dm_service_search_remname_cback); 2667ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE 2668ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GAP_BleReadPeerPrefConnParams (bta_dm_search_cb.peer_bdaddr); 2669ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 26705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTA_DM_REM_NAME *) GKI_getbuf(sizeof(tBTA_DM_REM_NAME))) != NULL) 26715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 26725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy (p_msg->result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr); 2673ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh 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)); 26745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* make sure the string is null terminated */ 2676ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_msg->result.disc_res.bd_name[BD_NAME_LEN] = 0; 26775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BTA_DM_REMT_NAME_EVT; 26795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_msg); 26805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 26825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 26835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 26855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_authorize_cback 26875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description cback requesting authorization 26895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 26915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 26925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 26935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_authorize_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name, 26945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *service_name, UINT8 service_id, BOOLEAN is_originator) 26955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 26965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC sec_event; 26975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 index = 1; 26985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 26995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.authorize.bd_addr, bd_addr); 27005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(sec_event.authorize.dev_class, dev_class, DEV_CLASS_LEN); 27015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BCM_STRNCPY_S((char*)sec_event.authorize.bd_name, sizeof(BD_NAME), (char*)bd_name, (BD_NAME_LEN-1)); 27035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* make sure the string is null terminated */ 27055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.authorize.bd_name[BD_NAME_LEN-1] = 0; 27065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( defined(BTA_JV_INCLUDED) && BTA_JV_INCLUDED == TRUE ) 27085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.authorize.service = service_id; 27095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 27105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while(index < BTA_MAX_SERVICE_ID) 27125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get the BTA service id corresponding to BTM id */ 27145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_service_id_to_btm_srv_id_lkup_tbl[index] == service_id) 27155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.authorize.service = index; 27175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 27185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project index++; 27205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if supported service callback otherwise not authorized */ 27245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_cb.p_sec_cback && (index < BTA_MAX_SERVICE_ID 27255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( defined(BTA_JV_INCLUDED) && BTA_JV_INCLUDED == TRUE ) 27265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* pass through JV service ID */ 27275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project || (service_id >= BTA_FIRST_JV_SERVICE_ID && service_id <= BTA_LAST_JV_SERVICE_ID) 27285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 27295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project )) 27305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_AUTHORIZE_EVT, &sec_event); 27325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_CMD_STARTED; 27335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 27355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_NOT_AUTHORIZED; 27375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 27395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 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** Function bta_dm_pinname_cback 27475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 27485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback requesting pin_key 27495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 27505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 27515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 27525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 27535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_pinname_cback (void *p_data) 27545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 27555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_REMOTE_DEV_NAME *p_result = (tBTM_REMOTE_DEV_NAME *)p_data; 27565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC sec_event; 27575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 bytes_to_copy; 27585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC_EVT event = bta_dm_cb.pin_evt; 27595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (BTA_DM_SP_CFM_REQ_EVT == event) 27615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Retrieved saved device class and bd_addr */ 27635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.cfm_req.bd_addr, bta_dm_cb.pin_bd_addr); 27645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_COPY_DEVICE_CLASS(sec_event.cfm_req.dev_class, bta_dm_cb.pin_dev_class); 27655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_result && p_result->status == BTM_SUCCESS) 27675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bytes_to_copy = (p_result->length < (BD_NAME_LEN-1)) 27695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ? p_result->length : (BD_NAME_LEN-1); 27705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(sec_event.cfm_req.bd_name, p_result->remote_bd_name, bytes_to_copy); 27715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.pin_req.bd_name[BD_NAME_LEN-1] = 0; 27725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* No name found */ 27745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.cfm_req.bd_name[0] = 0; 27755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.key_notif.passkey = bta_dm_cb.num_val; /* get PIN code numeric number */ 27775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* 1 additional event data fields for this event */ 27795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.cfm_req.just_works = bta_dm_cb.just_works; 27805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 27825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Retrieved saved device class and bd_addr */ 27845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.pin_req.bd_addr, bta_dm_cb.pin_bd_addr); 27855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_COPY_DEVICE_CLASS(sec_event.pin_req.dev_class, bta_dm_cb.pin_dev_class); 27865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_result && p_result->status == BTM_SUCCESS) 27885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 27895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bytes_to_copy = (p_result->length < (BD_NAME_LEN-1)) 27905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ? p_result->length : (BD_NAME_LEN-1); 27915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(sec_event.pin_req.bd_name, p_result->remote_bd_name, bytes_to_copy); 27925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.pin_req.bd_name[BD_NAME_LEN-1] = 0; 27935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 27945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* No name found */ 27955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.pin_req.bd_name[0] = 0; 27965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 27975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event = bta_dm_cb.pin_evt; 27985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.key_notif.passkey = bta_dm_cb.num_val; /* get PIN code numeric number */ 27995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 28005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_dm_cb.p_sec_cback ) 28025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(event, &sec_event); 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** Function bta_dm_pin_cback 28105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 28115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback requesting pin_key 28125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 28135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 28145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 28155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 28165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_pin_cback (BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name) 28175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 28185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC sec_event; 28195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!bta_dm_cb.p_sec_cback) 28215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_NOT_AUTHORIZED; 28225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If the device name is not known, save bdaddr and devclass and initiate a name request */ 28245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bd_name[0] == 0) 28255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 28265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.pin_evt = BTA_DM_PIN_REQ_EVT; 28275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(bta_dm_cb.pin_bd_addr, bd_addr); 28285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, dev_class); 28295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((BTM_ReadRemoteDeviceName(bd_addr, bta_dm_pinname_cback)) == BTM_CMD_STARTED) 28305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_CMD_STARTED; 28315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING0(" bta_dm_pin_cback() -> Failed to start Remote Name Request "); 28335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 28345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.pin_req.bd_addr, bd_addr); 28365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_COPY_DEVICE_CLASS(sec_event.pin_req.dev_class, dev_class); 28375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BCM_STRNCPY_S((char*)sec_event.pin_req.bd_name, sizeof(BD_NAME), (char*)bd_name, (BD_NAME_LEN-1)); 28385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.pin_req.bd_name[BD_NAME_LEN-1] = 0; 28395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_PIN_REQ_EVT, &sec_event); 28415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_CMD_STARTED; 28425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 28435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 28475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 28485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_link_key_request_cback 28495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 28505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback requesting linkkey 28515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 28525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 28535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 28545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 28555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_link_key_request_cback (BD_ADDR bd_addr, LINK_KEY key) 28565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 28575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Application passes all link key to 28585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM during initialization using add_device 28595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project API. If BTM doesn't have the link key in it's 28605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data base, that's because application doesn't 28615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project it */ 28625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_NOT_AUTHORIZED; 28645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 28655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 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** Function bta_dm_new_link_key_cback 28735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 28745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback from BTM to notify new link key 28755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 28765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 28775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 28785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 28795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_new_link_key_cback(BD_ADDR bd_addr, DEV_CLASS dev_class, 28805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BD_NAME bd_name, LINK_KEY key, UINT8 key_type) 28815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 28825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC sec_event; 28835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_AUTH_CMPL *p_auth_cmpl; 28845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 event; 28855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset (&sec_event, 0, sizeof(tBTA_DM_SEC)); 28875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Not AMP Key type */ 28895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (key_type != HCI_LKEY_TYPE_AMP_WIFI && key_type != HCI_LKEY_TYPE_AMP_UWB) 28905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 28915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event = BTA_DM_AUTH_CMPL_EVT; 28925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_auth_cmpl = &sec_event.auth_cmpl; 28935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(p_auth_cmpl->bd_addr, bd_addr); 28955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p_auth_cmpl->bd_name, bd_name, (BD_NAME_LEN-1)); 28975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_auth_cmpl->bd_name[BD_NAME_LEN-1] = 0; 28985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 28995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_auth_cmpl->key_present = TRUE; 29005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_auth_cmpl->key_type = key_type; 29015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_auth_cmpl->success = TRUE; 29025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p_auth_cmpl->key, key, LINK_KEY_LEN); 29045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.auth_cmpl.fail_reason = HCI_SUCCESS; 29055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_cb.p_sec_cback) 29075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 29085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(event, &sec_event); 29095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 29105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 29115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 29125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 29135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING0(" bta_dm_new_link_key_cback() Received AMP Key?? "); 29145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 29155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_CMD_STARTED; 29175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 29185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 29215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 29225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_authentication_complete_cback 29235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 29245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Authentication complete callback from BTM 29255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 29265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 29275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 29285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 29295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_authentication_complete_cback(BD_ADDR bd_addr, DEV_CLASS dev_class,BD_NAME bd_name, int result) 29305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 29315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC sec_event; 29335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(result != BTM_SUCCESS) 29355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 29365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&sec_event, 0, sizeof(tBTA_DM_SEC)); 29375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.auth_cmpl.bd_addr, bd_addr); 29385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(sec_event.auth_cmpl.bd_name, bd_name, (BD_NAME_LEN-1)); 29405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.auth_cmpl.bd_name[BD_NAME_LEN-1] = 0; 29415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* taken care of by memset [above] 29435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.auth_cmpl.key_present = FALSE; 29445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.auth_cmpl.success = FALSE; 29455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*/ 29465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.auth_cmpl.fail_reason = (UINT8)result; 29475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_cb.p_sec_cback) 29485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 29495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_AUTH_CMPL_EVT, &sec_event); 29505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2951ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* delete this device entry from Sec Dev DB */ 2952ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_remove_sec_dev_entry(bd_addr); 29535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 29545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_SUCCESS; 29565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 29575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 29595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 29605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_sp_cback 29615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 29625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description simple pairing callback from BTM 29635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 29645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 29655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 29665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 29675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_sp_cback (tBTM_SP_EVT event, tBTM_SP_EVT_DATA *p_data) 29685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 29695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status = BTM_CMD_STARTED; 29705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC sec_event; 29715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC_EVT pin_evt = BTA_DM_SP_KEY_NOTIF_EVT; 29725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT1("bta_dm_sp_cback: %d", event); 29745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!bta_dm_cb.p_sec_cback) 29755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_NOT_AUTHORIZED; 29765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* TODO_SP */ 29785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(event) 29795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 29805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_SP_IO_REQ_EVT: 29815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE) 29825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* translate auth_req */ 29835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_co_io_req(p_data->io_req.bd_addr, &p_data->io_req.io_cap, 29845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_data->io_req.oob_data, &p_data->io_req.auth_req, p_data->io_req.is_orig); 29855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 29865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_OOB_INCLUDED == FALSE 29875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_SUCCESS; 29885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 29895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT2("io mitm: %d oob_data:%d", p_data->io_req.auth_req, p_data->io_req.oob_data); 29915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 29925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_SP_IO_RSP_EVT: 29935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE) 29945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_co_io_rsp(p_data->io_rsp.bd_addr, p_data->io_rsp.io_cap, 29955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->io_rsp.oob_data, p_data->io_rsp.auth_req ); 29965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 29975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 29985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 29995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_SP_CFM_REQ_EVT: 30005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pin_evt = BTA_DM_SP_CFM_REQ_EVT; 30015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.just_works = sec_event.cfm_req.just_works = p_data->cfm_req.just_works; 30025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.cfm_req.loc_auth_req = p_data->cfm_req.loc_auth_req; 30035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.cfm_req.rmt_auth_req = p_data->cfm_req.rmt_auth_req; 30045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.cfm_req.loc_io_caps = p_data->cfm_req.loc_io_caps; 30055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.cfm_req.rmt_io_caps = p_data->cfm_req.rmt_io_caps; 30065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* continue to next case */ 30075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE) 30085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Passkey entry mode, mobile device with output capability is very 30095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project unlikely to receive key request, so skip this event */ 30105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /*case BTM_SP_KEY_REQ_EVT: */ 30115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_SP_KEY_NOTIF_EVT: 30125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 30135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.num_val = sec_event.key_notif.passkey = p_data->key_notif.passkey; 30145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If the device name is not known, save bdaddr and devclass and initiate a name request */ 30155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->key_notif.bd_name[0] == 0) 30165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 30175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.pin_evt = pin_evt; 30185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(bta_dm_cb.pin_bd_addr, p_data->key_notif.bd_addr); 30195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, p_data->key_notif.dev_class); 30205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((BTM_ReadRemoteDeviceName(p_data->key_notif.bd_addr, bta_dm_pinname_cback)) == BTM_CMD_STARTED) 30215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_CMD_STARTED; 30225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 30235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING0(" bta_dm_sp_cback() -> Failed to start Remote Name Request "); 30245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 30255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.key_notif.bd_addr, p_data->key_notif.bd_addr); 30265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_COPY_DEVICE_CLASS(sec_event.key_notif.dev_class, p_data->key_notif.dev_class); 30275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BCM_STRNCPY_S((char*)sec_event.key_notif.bd_name, sizeof(BD_NAME), (char*)p_data->key_notif.bd_name, (BD_NAME_LEN-1)); 30285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.key_notif.bd_name[BD_NAME_LEN-1] = 0; 30295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 30305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(pin_evt, &sec_event); 30315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 30325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 30335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 30345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_OOB_INCLUDED == TRUE 30355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_SP_LOC_OOB_EVT: 30365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_co_loc_oob((BOOLEAN)(p_data->loc_oob.status == BTM_SUCCESS), 30375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->loc_oob.c, p_data->loc_oob.r); 30385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 30395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 30405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_SP_RMT_OOB_EVT: 30415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If the device name is not known, save bdaddr and devclass and initiate a name request */ 30425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->rmt_oob.bd_name[0] == 0) 30435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 30445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.pin_evt = BTA_DM_SP_RMT_OOB_EVT; 30455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(bta_dm_cb.pin_bd_addr, p_data->rmt_oob.bd_addr); 30465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_COPY_DEVICE_CLASS(bta_dm_cb.pin_dev_class, p_data->rmt_oob.dev_class); 30475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((BTM_ReadRemoteDeviceName(p_data->rmt_oob.bd_addr, bta_dm_pinname_cback)) == BTM_CMD_STARTED) 30485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_CMD_STARTED; 30495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 30505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING0(" bta_dm_sp_cback() -> Failed to start Remote Name Request "); 30515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 30525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.rmt_oob.bd_addr, p_data->rmt_oob.bd_addr); 30535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_COPY_DEVICE_CLASS(sec_event.rmt_oob.dev_class, p_data->rmt_oob.dev_class); 30545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BCM_STRNCPY_S((char*)sec_event.rmt_oob.bd_name, sizeof(BD_NAME), (char*)p_data->rmt_oob.bd_name, (BD_NAME_LEN-1)); 30555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.rmt_oob.bd_name[BD_NAME_LEN-1] = 0; 30565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 30575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_SP_RMT_OOB_EVT, &sec_event); 30585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 30595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_co_rmt_oob(p_data->rmt_oob.bd_addr); 30605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 30615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 30625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_SP_COMPLT_EVT: 30635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* do not report this event - handled by link_key_callback or auth_complete_callback */ 30645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 30655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 30665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_SP_KEYPRESS_EVT: 30675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&sec_event.key_press, &p_data->key_press, sizeof(tBTM_SP_KEYPRESS)); 30685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_SP_KEYPRESS_EVT, &sec_event); 30695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 30705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 30715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_SP_UPGRADE_EVT: 30725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_co_lk_upgrade(p_data->upgrade.bd_addr, &p_data->upgrade.upgrade ); 30735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 30745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 30755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 30765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_NOT_AUTHORIZED; 30775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 30785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 30795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT1("dm status: %d", status); 30805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 30815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 30825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 30835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 30845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 30855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_local_name_cback 30865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 30875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback from btm after local name is read 30885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 30895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 30905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 30915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 30925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 30935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_local_name_cback(UINT8 *p_name) 30945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 30955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC sec_event; 30965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 30975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_GetLocalDeviceAddr(sec_event.enable.bd_addr); 30985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.enable.status = BTA_SUCCESS; 30995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 31005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_cb.p_sec_cback) 31015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_ENABLE_EVT, &sec_event); 31025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 31035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 31045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 31055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 31065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_signal_strength 31075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 31085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback from btm after local bdaddr is read 31095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 31105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 31115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 31125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 31135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 31145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_signal_strength(tBTA_DM_MSG *p_data) 31155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 31165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 31175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_data->sig_strength.start) 31185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 31195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.signal_strength_mask = p_data->sig_strength.mask; 31205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.signal_strength_period = p_data->sig_strength.period; 31215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_signal_strength_timer_cback(NULL); 31225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 31235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 31245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 31255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_stop_timer(&bta_dm_cb.signal_strength_timer); 31265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 31275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 31285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 31295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 31305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 31315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_signal_strength_timer_cback 31325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 31335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Periodic timer callback to read signal strength 31345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 31355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 31365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 31375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 31385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 31395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_signal_strength_timer_cback (TIMER_LIST_ENT *p_tle) 31405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 31415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 31425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i; 31435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 31445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_cb.signal_strength_mask & BTA_SIG_STRENGTH_RSSI_MASK) 31455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 31465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i<bta_dm_cb.device_list.count; i++) 31475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 31485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_ReadRSSI (bta_dm_cb.device_list.peer_device[i].peer_bdaddr, (tBTM_CMPL_CB *)bta_dm_rssi_cback); 31495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 31505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 31515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 31525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_cb.signal_strength_mask & BTA_SIG_STRENGTH_LINK_QUALITY_MASK) 31535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 31545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 31555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i<bta_dm_cb.device_list.count; i++) 31565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 31575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_ReadLinkQuality (bta_dm_cb.device_list.peer_device[i].peer_bdaddr, (tBTM_CMPL_CB *)bta_dm_link_quality_cback); 31585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 31595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 31605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 31615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 31625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_cb.signal_strength_period) 31635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 31645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.signal_strength_timer.p_cback = (TIMER_CBACK*)&bta_dm_signal_strength_timer_cback; 31655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_start_timer(&bta_dm_cb.signal_strength_timer, 0, (UINT32)1000*bta_dm_cb.signal_strength_period); 31665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 31675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 31685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 31695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 31705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BTM_BUSY_LEVEL_CHANGE_INCLUDED) && BTM_BUSY_LEVEL_CHANGE_INCLUDED == TRUE) 31715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 31725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 31735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_bl_change_cback 31745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 31755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback from btm when acl connection goes up or down 31765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 31775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 31785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 31795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 31805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 31815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data) 31825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 31835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 31845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_ACL_CHANGE * p_msg; 31855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 31865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTA_DM_ACL_CHANGE *) GKI_getbuf(sizeof(tBTA_DM_ACL_CHANGE))) != NULL) 31875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 31885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->event = p_data->event; 31895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->is_new = FALSE; 31905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 31915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(p_msg->event) 31925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 31935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BL_CONN_EVT: 31945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->is_new = TRUE; 31955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(p_msg->bd_addr, p_data->conn.p_bda); 31965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 31975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BL_DISCN_EVT: 31985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(p_msg->bd_addr, p_data->discn.p_bda); 31995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 32005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BL_UPDATE_EVT: 32015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->busy_level = p_data->update.busy_level; 3202ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_msg->busy_level_flags = p_data->update.busy_level_flags; 32035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 32045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BL_ROLE_CHG_EVT: 32055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->new_role = p_data->role_chg.new_role; 32065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hci_status = p_data->role_chg.hci_status; 32075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(p_msg->bd_addr, p_data->role_chg.p_bda); 32085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 32095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BL_COLLISION_EVT: 32105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(p_msg->bd_addr, p_data->conn.p_bda); 32115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break;; 32125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 32135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 32145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BTA_DM_ACL_CHANGE_EVT; 32155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_msg); 32165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 32175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 32185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 32195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 32205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 32215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 32225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 32235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 32245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_acl_change_cback 32255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 32265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback from btm when acl connection goes up or down 32275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 32285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 32295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 32305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 32315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 32325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_acl_change_cback (BD_ADDR p_bda, DEV_CLASS p_dc, BD_NAME p_bdn, 32335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BD_FEATURES features, BOOLEAN is_new) 32345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 32355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 32365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_ACL_CHANGE * p_msg; 32375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 32385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTA_DM_ACL_CHANGE *) GKI_getbuf(sizeof(tBTA_DM_ACL_CHANGE))) != NULL) 32395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 32405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy (p_msg->bd_addr, p_bda); 32415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->is_new = is_new; 32425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 32435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* This is collision case */ 32445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (features != NULL) 32455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 32465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((features[0] == 0xFF) && !is_new) 32475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->event = BTM_BL_COLLISION_EVT; 32485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 32495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 32505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BTA_DM_ACL_CHANGE_EVT; 32515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_msg); 32525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 32535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 32545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 32555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 32565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 32575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 32585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 32595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_rs_cback 32605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 32615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Receives the role switch complete event 32625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 32635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 32645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 32655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 32665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_rs_cback (tBTM_ROLE_SWITCH_CMPL *p1) 32675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 32685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING1("bta_dm_rs_cback:%d", bta_dm_cb.rs_event); 32695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_cb.rs_event == BTA_DM_API_SEARCH_EVT) 32705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 32715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.search_msg.rs_res = BTA_DM_RS_OK; /* do not care about the result for now */ 32725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.rs_event = 0; 32735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_start((tBTA_DM_MSG *)&bta_dm_cb.search_msg); 32745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 32755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 32765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 32775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 32785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 32795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_check_av 32805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 32815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function checks if AV is active 32825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** if yes, make sure the AV link is master 32835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 32845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BOOLEAN - TRUE, if switch is in progress 32855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 32865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 32875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN bta_dm_check_av(UINT16 event) 32885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 32895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN switching = FALSE; 32905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i; 32915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_PEER_DEVICE *p_dev; 32925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 32935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING1("bta_dm_check_av:%d", bta_dm_cb.cur_av_count); 32945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_cb.cur_av_count) 32955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 32965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i<bta_dm_cb.device_list.count; i++) 32975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 32985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev = &bta_dm_cb.device_list.peer_device[i]; 32995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING3("[%d]: state:%d, info:x%x", i, p_dev->conn_state, p_dev->info); 33005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if((p_dev->conn_state == BTA_DM_CONNECTED) && (p_dev->info & BTA_DM_DI_AV_ACTIVE)) 33015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 33025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* make master and take away the role switch policy */ 33035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(BTM_CMD_STARTED == BTM_SwitchRole (p_dev->peer_bdaddr, HCI_ROLE_MASTER, (tBTM_CMPL_CB *)bta_dm_rs_cback)) 33045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 33055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* the role switch command is actually sent */ 33065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.rs_event = event; 33075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switching = TRUE; 33085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 33095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* else either already master or can not switch for some reasons */ 33105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_policy_cback(BTA_SYS_PLCY_CLR, 0, HCI_ENABLE_MASTER_SLAVE_SWITCH, p_dev->peer_bdaddr); 33115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 33125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 33135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 33145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 33155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return switching; 33165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 33175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 33185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 33195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 33205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_acl_change 33215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 33225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Process BTA_DM_ACL_CHANGE_EVT 33235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 33245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 33255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 33265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 33275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 33285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_acl_change(tBTA_DM_MSG *p_data) 33295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 33305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 33315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i; 33325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p; 33335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC conn; 33345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN is_new = p_data->acl_change.is_new; 33355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BD_ADDR_PTR p_bda = p_data->acl_change.bd_addr; 33365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN need_policy_change = FALSE; 33375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN issue_unpair_cb = FALSE; 33385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 33395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(BTM_BUSY_LEVEL_CHANGE_INCLUDED) && BTM_BUSY_LEVEL_CHANGE_INCLUDED == TRUE) 33405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_PEER_DEVICE *p_dev; 33415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 33425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(p_data->acl_change.event) 33435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 33445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BL_UPDATE_EVT: /* busy level update */ 33455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_dm_cb.p_sec_cback ) 33465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 33475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project conn.busy_level.level = p_data->acl_change.busy_level; 3348ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta conn.busy_level.level_flags = p_data->acl_change.busy_level_flags; 33495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_BUSY_LEVEL_EVT, &conn); 33505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 33515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 33525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 33535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BL_ROLE_CHG_EVT: /* role change event */ 33545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev = bta_dm_find_peer_device(p_bda); 33555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_dev) 33565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 33575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG3("bta_dm_acl_change role chg info:x%x new_role:%d dev count:%d", 33585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev->info, p_data->acl_change.new_role, bta_dm_cb.device_list.count); 33595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_dev->info & BTA_DM_DI_AV_ACTIVE) 33605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 33615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* there's AV activity on this link */ 33625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_data->acl_change.new_role == HCI_ROLE_SLAVE && bta_dm_cb.device_list.count > 1 33635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project && p_data->acl_change.hci_status == HCI_SUCCESS) 33645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 33655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* more than one connections and the AV connection is role switched to slave 33665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * switch it back to master and remove the switch policy */ 33675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SwitchRole(p_bda, BTM_ROLE_MASTER, NULL); 33685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project need_policy_change = TRUE; 33695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 33705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (bta_dm_cfg.avoid_scatter && (p_data->acl_change.new_role == HCI_ROLE_MASTER)) 33715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 33725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if the link updated to be master include AV activities, remove the switch policy */ 33735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project need_policy_change = TRUE; 33745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 33755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 33765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(need_policy_change) 33775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 33785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_policy_cback(BTA_SYS_PLCY_CLR, 0, HCI_ENABLE_MASTER_SLAVE_SWITCH, p_dev->peer_bdaddr); 33795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 33805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 33815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 33825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 33835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* there's AV no activity on this link and role switch happened 33845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * check if AV is active 33855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * if so, make sure the AV link is master */ 33865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_check_av(0); 33875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 33885738f83aeb59361a0a2eda2460113f6dc919427The 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); 33895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(conn.role_chg.bd_addr, p_bda); 33905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project conn.role_chg.new_role = (UINT8) p_data->acl_change.new_role; 33915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_dm_cb.p_sec_cback ) 33925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_ROLE_CHG_EVT, &conn); 33935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 33945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 33955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 33965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 33975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 33985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Collision report from Stack: Notify profiles */ 33995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->acl_change.event == BTM_BL_COLLISION_EVT) 34005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 34015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_notify_collision (p_bda); 34025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 34035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 34045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 34055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(is_new) 34065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 34075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i<bta_dm_cb.device_list.count; i++) 34085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 34095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!bdcmp( bta_dm_cb.device_list.peer_device[i].peer_bdaddr, p_bda)) 34105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 34115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 34125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 34135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 34145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(i == bta_dm_cb.device_list.count) 34155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 34165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(bta_dm_cb.device_list.peer_device[bta_dm_cb.device_list.count].peer_bdaddr, p_bda); 34175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.device_list.peer_device[bta_dm_cb.device_list.count].link_policy = bta_dm_cb.cur_policy; 34185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.device_list.count++; 34195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 34205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 34215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.device_list.peer_device[i].conn_state = BTA_DM_CONNECTED; 34225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.device_list.peer_device[i].pref_role = BTA_ANY_ROLE; 34235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(conn.link_up.bd_addr, p_bda); 34245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.device_list.peer_device[i].info = BTA_DM_DI_NONE; 34255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( ((NULL != (p = BTM_ReadLocalFeatures ())) && HCI_SNIFF_SUB_RATE_SUPPORTED(p)) && 34265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ((NULL != (p = BTM_ReadRemoteFeatures (p_bda))) && HCI_SNIFF_SUB_RATE_SUPPORTED(p)) ) 34275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 34285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* both local and remote devices support SSR */ 34295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.device_list.peer_device[i].info = BTA_DM_DI_USE_SSR; 34305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 34315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING1("info:x%x", bta_dm_cb.device_list.peer_device[i].info); 34325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_dm_cb.p_sec_cback ) 34335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_LINK_UP_EVT, &conn); 34345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 34355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 34365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 34375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 34385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i<bta_dm_cb.device_list.count; i++) 34395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 34405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bdcmp( bta_dm_cb.device_list.peer_device[i].peer_bdaddr, p_bda)) 34415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project continue; 34425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 34435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_dm_cb.device_list.peer_device[i].conn_state == BTA_DM_UNPAIRING ) 34445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 34455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SecDeleteDevice(bta_dm_cb.device_list.peer_device[i].peer_bdaddr); 34465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project issue_unpair_cb = TRUE; 34475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 34485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3449ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta conn.link_down.is_removed = bta_dm_cb.device_list.peer_device[i].remove_dev_pending; 3450ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 34515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(; i<bta_dm_cb.device_list.count ; i++) 34525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 34535738f83aeb59361a0a2eda2460113f6dc919427The 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])); 34545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 34555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 34565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 34575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_cb.device_list.count) 34585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.device_list.count--; 34595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 34605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_search_cb.wait_disc && !bdcmp(bta_dm_search_cb.peer_bdaddr, p_bda)) 34615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 34625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.wait_disc = FALSE; 34635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 34645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_search_cb.sdp_results) 34655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 34665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT0(" timer stopped "); 34675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_stop_timer(&bta_dm_search_cb.search_timer); 34685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_discover_next_device(); 34695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 34705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 34715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 34725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 34735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_cb.disabling) 34745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 34755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!BTM_GetNumAclLinks()) 34765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 34775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_stop_timer(&bta_dm_cb.disable_timer); 34785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.disable_timer.p_cback = (TIMER_CBACK*)&bta_dm_disable_conn_down_timer_cback; 34795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* start a timer to make sure that the profiles get the disconnect event */ 34805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_start_timer(&bta_dm_cb.disable_timer, 0, 1000); 34815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 34825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3483ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (conn.link_down.is_removed) 3484ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 3485ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_SecDeleteDevice(p_bda); 3486ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE) 3487ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* need to remove all pending background connection */ 3488ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_CancelOpen(0, p_bda, FALSE); 3489ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* remove all cached GATT information */ 3490ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_Refresh(p_bda); 3491ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 3492ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 34935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 34945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(conn.link_down.bd_addr, p_bda); 34955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project conn.link_down.status = (UINT8) btm_get_acl_disc_reason_code(); 34965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_dm_cb.p_sec_cback ) 34975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 34985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_LINK_DOWN_EVT, &conn); 34995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( issue_unpair_cb ) 35005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_DEV_UNPAIRED_EVT, &conn); 35015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 35025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 35035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 35045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_adjust_roles(TRUE); 35055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 35065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 35075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 35085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_disable_conn_down_timer_cback 35105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Sends disable event to application 35125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 35155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 35175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_disable_conn_down_timer_cback (TIMER_LIST_ENT *p_tle) 35185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 35195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_SYS_HW_MSG *sys_enable_event; 35205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3521ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* disable the power managment module */ 3522ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_disable_pm(); 3523ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 35245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* register our callback to SYS HW manager */ 35255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_hw_register( BTA_SYS_HW_BLUETOOTH, bta_dm_sys_hw_cback ); 35265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 35275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send a message to BTA SYS */ 35285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((sys_enable_event = (tBTA_SYS_HW_MSG *) GKI_getbuf(sizeof(tBTA_SYS_HW_MSG))) != NULL) 35295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 35305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sys_enable_event->hdr.event = BTA_SYS_API_DISABLE_EVT; 35315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sys_enable_event->hw_module = BTA_SYS_HW_BLUETOOTH; 35325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(sys_enable_event); 35335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 35345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 35355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.disabling = FALSE; 35365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 35375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 35385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 35395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 35405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_rssi_cback 35425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback from btm with rssi values 35445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 35475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 35495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_rssi_cback (tBTM_RSSI_RESULTS *p_result) 35505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 35515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC sec_event; 35525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 35535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_result->status == BTM_SUCCESS) 35545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 35555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 35565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.sig_strength.bd_addr, p_result->rem_bda); 35575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.sig_strength.mask = BTA_SIG_STRENGTH_RSSI_MASK; 35585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.sig_strength.rssi_value = p_result->rssi; 35595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_dm_cb.p_sec_cback!= NULL ) 35605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_SIG_STRENGTH_EVT, &sec_event); 35615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 35625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 35635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 35645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 35655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 35665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_link_quality_cback 35685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback from btm with link quality value 35705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 35735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 35755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_link_quality_cback (tBTM_LINK_QUALITY_RESULTS *p_result) 35765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 35775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 35785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC sec_event; 35795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 35805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_result->status == BTM_SUCCESS) 35815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 35825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 35835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.sig_strength.bd_addr, p_result->rem_bda); 35845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.sig_strength.mask = BTA_SIG_STRENGTH_LINK_QUALITY_MASK; 35855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.sig_strength.link_quality_value = p_result->link_quality; 35865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_dm_cb.p_sec_cback!= NULL ) 35875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_SIG_STRENGTH_EVT, &sec_event); 35885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 35895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 35905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 35915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 35925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 35935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_rm_cback 35955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Role management callback from sys 35975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 35995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 36005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 36015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 36025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_rm_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, BD_ADDR peer_addr) 36035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 36045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 36055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 j; 36065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_PREF_ROLES role; 36075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_PEER_DEVICE *p_dev; 36085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 36095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev = bta_dm_find_peer_device(peer_addr); 36105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( status == BTA_SYS_CONN_OPEN) 36115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 36125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_dev) 36135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 36145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Do not set to connected if we are in the middle of unpairing. When AV stream is 36155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * started it fakes out a SYS_CONN_OPEN to potentially trigger a role switch command. 36165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * But this should not be done if we are in the middle of unpairing. 36175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 36185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_dev->conn_state != BTA_DM_UNPAIRING) 36195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev->conn_state = BTA_DM_CONNECTED; 36205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 36215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(j=1; j<= p_bta_dm_rm_cfg[0].app_id; j++) 36225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 36235738f83aeb59361a0a2eda2460113f6dc919427The 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)) 36245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project && (p_bta_dm_rm_cfg[j].id == id)) 36255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 36265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project role = p_bta_dm_rm_cfg[j].cfg; 36275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 36285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(role > p_dev->pref_role ) 36295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev->pref_role = role; 36305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 36315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 36325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 36335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 36345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 36355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 36365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 36375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 36385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if((BTA_ID_AV == id)||(BTA_ID_AVK ==id)) 36395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 36405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( status == BTA_SYS_CONN_BUSY) 36415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 36425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_dev) 36435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev->info |= BTA_DM_DI_AV_ACTIVE; 36445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* AV calls bta_sys_conn_open with the A2DP stream count as app_id */ 36455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(BTA_ID_AV == id) 36465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.cur_av_count = app_id; 36475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 36485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if( status == BTA_SYS_CONN_IDLE) 36495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 36505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_dev) 36515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_dev->info &= ~BTA_DM_DI_AV_ACTIVE; 36525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* AV calls bta_sys_conn_open with the A2DP stream count as app_id */ 36535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(BTA_ID_AV == id) 36545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.cur_av_count = app_id; 36555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 36565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING2("bta_dm_rm_cback:%d, status:%d", bta_dm_cb.cur_av_count, status); 36575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 36585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 36595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 36605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_adjust_roles(FALSE); 36615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 36625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 36635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 36645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 36655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 36665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_dev_blacklisted_for_switch 36675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 36685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Checks if the device is blacklisted for immediate role switch after connection. 36695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 36705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns TRUE if dev is blacklisted else FALSE 36715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 36725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 36735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic BOOLEAN bta_dm_dev_blacklisted_for_switch (BD_ADDR remote_bd_addr) 36745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 36755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 manufacturer = 0; 36765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 lmp_sub_version = 0; 36775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 lmp_version = 0; 36785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i = 0; 36795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 36805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (BTM_ReadRemoteVersion(remote_bd_addr, &lmp_version, 36815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &manufacturer, &lmp_sub_version) == BTM_SUCCESS) 36825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 36835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Check if this device version info matches with is 36845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project blacklisted versions for role switch */ 36855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < BTA_DM_MAX_ROLE_SWITCH_BLACKLIST_COUNT; i++) 36865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 36875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((bta_role_switch_blacklist[i].lmp_version == lmp_version) && 36885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (bta_role_switch_blacklist[i].manufacturer == manufacturer)&& 36895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ((bta_role_switch_blacklist[i].lmp_sub_version & lmp_sub_version) == 36905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_role_switch_blacklist[i].lmp_sub_version)) 36915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 36925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT0("Black list F/W version matches.. Delay Role Switch..."); 36935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 36945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 36955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 36965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 36975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 36985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 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_delay_role_switch_cback 37045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 37055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback from btm to delay a role switch 37065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 37075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 37085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 37095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 37105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_delay_role_switch_cback(TIMER_LIST_ENT *p_tle) 37115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 37125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT0("bta_dm_delay_role_switch_cback: initiating Delayed RS"); 37135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_adjust_roles (FALSE); 37145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 37155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 37165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 37175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3718ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function bta_dm_remove_sec_dev_entry 3719ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 3720ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description Removes device entry from Security device DB if ACL connection with 3721ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** remtoe device does not exist, else schedule for dev entry removal upon 3722ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ACL close 3723ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 3724ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns void 3725ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 3726ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 3727ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_remove_sec_dev_entry(BD_ADDR remote_bd_addr) 3728ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 3729ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT16 index = 0; 3730ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (BTM_IsAclConnectionUp(remote_bd_addr)) 3731ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 3732ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta APPL_TRACE_DEBUG1("%s ACL is not down. Schedule for Dev Removal when ACL closes", 3733ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta __FUNCTION__); 3734ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (index = 0; index < bta_dm_cb.device_list.count; index ++) 3735ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 3736ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!bdcmp( bta_dm_cb.device_list.peer_device[index].peer_bdaddr, remote_bd_addr)) 3737ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 3738ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 3739ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (index != bta_dm_cb.device_list.count) 3740ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 3741ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_cb.device_list.peer_device[index].remove_dev_pending = TRUE; 3742ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 3743ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 3744ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 3745ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta APPL_TRACE_ERROR1(" %s Device does not exist in DB", __FUNCTION__); 3746ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 3747ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 3748ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 3749ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 3750ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_SecDeleteDevice (remote_bd_addr); 3751ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 3752ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 3753ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 3754ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 3755ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 37565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_adjust_roles 37575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 37585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Adjust roles 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_adjust_roles(BOOLEAN delay_role_switch) 37655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 37665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 37675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i; 37685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN set_master_role = FALSE; 37695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 37705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_cb.device_list.count) 37715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 37725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 37735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* the configuration is no scatternet 37745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * or AV connection exists and there are more than one ACL link */ 37755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( (p_bta_dm_rm_cfg[0].cfg == BTA_DM_NO_SCATTERNET) || 37765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (bta_dm_cb.cur_av_count && bta_dm_cb.device_list.count > 1) ) 37775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 37785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 37795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project L2CA_SetDesireRole (HCI_ROLE_MASTER); 37805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project set_master_role = TRUE; 37815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 37825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 37835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 37845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i=0; i<bta_dm_cb.device_list.count; i++) 37855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 37865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_cb.device_list.peer_device[i].conn_state == BTA_DM_CONNECTED) 37875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 37885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!set_master_role && (bta_dm_cb.device_list.peer_device[i].pref_role != BTA_ANY_ROLE) 37895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project && (p_bta_dm_rm_cfg[0].cfg == BTA_DM_PARTIAL_SCATTERNET)) 37905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 37915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project L2CA_SetDesireRole (HCI_ROLE_MASTER); 37925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project set_master_role = TRUE; 37935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 37945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 37955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if((bta_dm_cb.device_list.peer_device[i].pref_role == BTA_MASTER_ROLE_ONLY) 37965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project || (bta_dm_cb.device_list.count > 1)) 37975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 37985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 37995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Initiating immediate role switch with certain remote devices 38005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project has caused issues due to role switch colliding with link encryption setup and 38015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project causing encryption (and in turn the link) to fail . These device . Firmware 38025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project versions are stored in a blacklist and role switch with these devices are 38035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project delayed to avoid the collision with link encryption setup */ 38045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 38055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((delay_role_switch == FALSE) || 38065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (bta_dm_dev_blacklisted_for_switch( 38075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.device_list.peer_device[i].peer_bdaddr) == FALSE)) 38085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 38095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SwitchRole (bta_dm_cb.device_list.peer_device[i].peer_bdaddr, 38105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HCI_ROLE_MASTER, NULL); 38115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 38125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 38135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 38145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.switch_delay_timer.p_cback = 38155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (TIMER_CBACK*)&bta_dm_delay_role_switch_cback; 38165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_start_timer(&bta_dm_cb.switch_delay_timer, 0, 500); 38175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 38185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 38195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 38205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 38215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 38225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 38235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 38245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!set_master_role) 38255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 38265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 38275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project L2CA_SetDesireRole (L2CAP_DESIRED_LINK_ROLE); 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 else 38335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 38345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project L2CA_SetDesireRole (L2CAP_DESIRED_LINK_ROLE); 38355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 38365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 38375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 38385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 38395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 38405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 38415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 38425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_get_remname 38435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 38445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Returns a pointer to the remote name stored in the DM control 38455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** block if it exists, or from the BTM memory. 38465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 38475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns char * - Pointer to the remote device name 38485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 38495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_dm_get_remname(void) 38505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3851ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta char *p_name = (char *)bta_dm_search_cb.peer_name; 38525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char *p_temp; 38535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 38545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If the name isn't already stored, try retrieving from BTM */ 38555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (*p_name == '\0') 38565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_temp = BTM_SecReadDevName(bta_dm_search_cb.peer_bdaddr)) != NULL) 38575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_name = p_temp; 38585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 38595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return p_name; 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** Function bta_dm_bond_cancel_complete_cback 38655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 38665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Authentication complete callback from BTM 38675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 38685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 38695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 38705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 38715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_bond_cancel_complete_cback(tBTM_STATUS result) 38725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 38735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 38745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC sec_event; 38755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 38765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (result == BTM_SUCCESS) 38775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.bond_cancel_cmpl.result = BTA_SUCCESS; 38785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 38795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.bond_cancel_cmpl.result = BTA_FAILURE; 38805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 38815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_dm_cb.p_sec_cback) 38825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 38835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_BOND_CANCEL_CMPL_EVT, &sec_event); 38845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 38855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 38865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 38875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTM_EIR_SERVER_INCLUDED == TRUE ) 38885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project #if ( BTA_EIR_CANNED_UUID_LIST != TRUE )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) 38895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 38905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 38915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_update_eir_uuid 38925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 38935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description 38945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 38955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 38965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 38975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_update_eir_uuid (tBTA_DM_MSG *p_data) 38985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 38995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_API_UPDATE_EIR_UUID *p_msg = (tBTA_DM_API_UPDATE_EIR_UUID *)p_data; 39005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 xx; 39015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 empty_slot = BTA_EIR_SERVER_NUM_CUSTOM_UUID; 39025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 match_slot = BTA_EIR_SERVER_NUM_CUSTOM_UUID; 39035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 39045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (xx = 0; xx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; xx++) 39055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 39065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_cb.custom_uuid[xx].len == 0) 39075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 39085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (empty_slot == BTA_EIR_SERVER_NUM_CUSTOM_UUID) 39095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project empty_slot = xx; 39105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 39115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (match_slot == BTA_EIR_SERVER_NUM_CUSTOM_UUID) 39125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 39135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!memcmp (bta_dm_cb.custom_uuid[xx].uu.uuid128, p_msg->uuid.uu.uuid128, p_msg->uuid.len)) 39145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 39155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project match_slot = xx;; 39165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 39175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 39185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 39195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 39205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_msg->is_add) 39215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 39225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (match_slot == BTA_EIR_SERVER_NUM_CUSTOM_UUID) 39235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 39245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (empty_slot == BTA_EIR_SERVER_NUM_CUSTOM_UUID) 39255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 39265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("No space to add UUID for EIR"); 39275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 39285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 39295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 39305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 39315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy (&(bta_dm_cb.custom_uuid[empty_slot]), &(p_msg->uuid), sizeof(tBT_UUID)); 39325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 39335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 39345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 39355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 39365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("UUID is already added for EIR"); 39375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 39385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 39395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 39405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 39415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 39425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (match_slot == BTA_EIR_SERVER_NUM_CUSTOM_UUID) 39435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 39445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("UUID is not found for EIR"); 39455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 39465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 39475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 39485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 39495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset (&(bta_dm_cb.custom_uuid[match_slot]), 0, sizeof(tBT_UUID)); 39505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 39515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 39525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 39535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_set_eir (NULL); 39545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 39555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project #endif 39565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 39575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 39585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 39595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_set_eir_config 39605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 39615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description 39625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 39635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 39645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 39655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_set_eir_config (tBTA_DM_MSG *p_data) 39665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 39675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->set_eir_cfg.p_eir_cfg) 39685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 39695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* User defined config */ 39705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_bta_dm_eir_cfg = p_data->set_eir_cfg.p_eir_cfg; 39715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 39725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 39735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 39745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Back to default config */ 39755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_bta_dm_eir_cfg = (tBTA_DM_EIR_CONF*)&bta_dm_eir_cfg; 39765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 39775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 39785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_set_eir (NULL); 39795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 39805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 39815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 39825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 39835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_set_eir 39845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 39855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function creates EIR tagged data and writes it to controller. 39865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 39875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 39885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 39895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 39905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_set_eir (char *local_name) 39915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 39925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_buf; 39935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p; 39945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_length; 39955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_EIR_CANNED_UUID_LIST != TRUE) 39965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_type; 39975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 max_num_uuid; 39985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) 39995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 custom_uuid_idx; 40005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 40015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 40025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_EIR_DEFAULT_FEC_REQUIRED == FALSE) 40035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 free_eir_length = HCI_EXT_INQ_RESPONSE_LEN; 40045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 40055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 free_eir_length = HCI_DM5_PACKET_SIZE; 40065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 40075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 num_uuid; 40085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 data_type; 40095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 local_name_len; 40105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 40115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* wait until complete to disable */ 40125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_cb.disable_timer.in_use) 40135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 40145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 40155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTA_EIR_CANNED_UUID_LIST != TRUE ) 40165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* wait until App is ready */ 40175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_cb.app_ready_timer.in_use) 40185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 40195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 40205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if local name is not provided, get it from controller */ 40215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( local_name == NULL ) 40225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 40235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( BTM_ReadLocalDeviceName( &local_name ) != BTM_SUCCESS ) 40245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 40255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("Fail to read local device name for EIR"); 40265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 40275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 40285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 40295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 40305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Allocate a buffer to hold HCI command */ 40315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_buf = (BT_HDR *)GKI_getpoolbuf(BTM_CMD_POOL_ID)) == NULL) 40325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 40335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("bta_dm_set_eir couldn't allocate buffer"); 40345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 40355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 40365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = (UINT8 *)p_buf + BTM_HCI_EIR_OFFSET; 40375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 40385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(p, 0x00, HCI_EXT_INQ_RESPONSE_LEN ); 40395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 40405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG0("BTA is generating EIR"); 40415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 40425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( local_name ) 40435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_name_len = strlen( local_name ); 40445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 40455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_name_len = 0; 40465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 40475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_type = BTM_EIR_COMPLETE_LOCAL_NAME_TYPE; 40485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if local name is longer than minimum length of shortened name */ 40495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* check whether it needs to be shortened or not */ 40505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( local_name_len > p_bta_dm_eir_cfg->bta_dm_eir_min_name_len ) 40515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 40525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get number of UUID 16-bit list */ 40535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_EIR_CANNED_UUID_LIST == TRUE) 40545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len/LEN_UUID_16; 40555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 40565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project max_num_uuid = (free_eir_length - 2)/LEN_UUID_16; 40575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_type = BTM_GetEirSupportedServices( bta_dm_cb.eir_uuid, &p, 40585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project max_num_uuid, &num_uuid ); 40595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = (UINT8 *)p_buf + BTM_HCI_EIR_OFFSET; /* reset p */ 40605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 40615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 40625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if UUID doesn't fit remaing space, shorten local name */ 40635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( local_name_len > (free_eir_length - 4 - num_uuid*LEN_UUID_16)) 40645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 40655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING0("BTA EIR: local name is shortened"); 40665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_name_len = p_bta_dm_eir_cfg->bta_dm_eir_min_name_len; 40675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_type = BTM_EIR_SHORTENED_LOCAL_NAME_TYPE; 40685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 40695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 40705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_type = BTM_EIR_COMPLETE_LOCAL_NAME_TYPE; 40715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 40725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 40735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM(p, local_name_len + 1); 40745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM(p, data_type); 40755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p, local_name, local_name_len); 40765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p += local_name_len; 40775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project free_eir_length -= local_name_len + 2; 40785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 40795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_EIR_CANNED_UUID_LIST == TRUE) 40805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if UUID list is provided as static data in configuration */ 40815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(( p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len > 0 ) 40825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &&(p_bta_dm_eir_cfg->bta_dm_eir_uuid16)) 40835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 40845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( free_eir_length > LEN_UUID_16 + 2) 40855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 40865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project free_eir_length -= 2; 40875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 40885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len) 40895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 40905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_uuid = p_bta_dm_eir_cfg->bta_dm_eir_uuid16_len / LEN_UUID_16; 40915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_type = BTM_EIR_COMPLETE_16BITS_UUID_TYPE; 40925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 40935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* not enough room for all UUIDs */ 40945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 40955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING0("BTA EIR: UUID 16-bit list is truncated"); 40965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_uuid = free_eir_length / LEN_UUID_16; 40975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_type = BTM_EIR_MORE_16BITS_UUID_TYPE; 40985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 40995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM(p, num_uuid * LEN_UUID_16 + 1); 41005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM(p, data_type); 41015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_uuid16, num_uuid * LEN_UUID_16 ); 41025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p += num_uuid * LEN_UUID_16; 41035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project free_eir_length -= num_uuid * LEN_UUID_16; 41045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 41055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 41065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else /* (BTA_EIR_CANNED_UUID_LIST == TRUE) */ 41075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if UUID list is dynamic */ 41085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( free_eir_length >= 2) 41095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 41105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_length = p++; 41115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_type = p++; 41125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_uuid = 0; 41135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 41145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project max_num_uuid = (free_eir_length - 2)/LEN_UUID_16; 41155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_type = BTM_GetEirSupportedServices( bta_dm_cb.eir_uuid, &p, max_num_uuid, &num_uuid ); 41165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 41175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( data_type == BTM_EIR_MORE_16BITS_UUID_TYPE ) 41185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 41195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING0("BTA EIR: UUID 16-bit list is truncated"); 41205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 41215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) 41225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 41235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 41245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++) 41255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 41265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_16) 41275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 41285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( num_uuid < max_num_uuid ) 41295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 41305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16_TO_STREAM(p, bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid16); 41315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_uuid++; 41325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 41335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 41345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 41355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_type = BTM_EIR_MORE_16BITS_UUID_TYPE; 41365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING0("BTA EIR: UUID 16-bit list is truncated"); 41375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 41385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 41395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 41405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 41415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 41425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */ 41435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 41445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_16 + 1); 41455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM(p_type, data_type); 41465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project free_eir_length -= num_uuid * LEN_UUID_16 + 2; 41475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 41485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* (BTA_EIR_CANNED_UUID_LIST == TRUE) */ 41495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 41505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTA_EIR_CANNED_UUID_LIST != TRUE )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) 41515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Adding 32-bit UUID list */ 41525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( free_eir_length >= 2) 41535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 41545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_length = p++; 41555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_type = p++; 41565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_uuid = 0; 41575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_type = BTM_EIR_COMPLETE_32BITS_UUID_TYPE; 41585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 41595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project max_num_uuid = (free_eir_length - 2)/LEN_UUID_32; 41605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 41615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++) 41625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 41635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_32) 41645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 41655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( num_uuid < max_num_uuid ) 41665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 41675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32_TO_STREAM(p, bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid32); 41685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_uuid++; 41695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 41705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 41715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 41725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_type = BTM_EIR_MORE_32BITS_UUID_TYPE; 41735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING0("BTA EIR: UUID 32-bit list is truncated"); 41745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 41755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 41765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 41775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 41785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 41795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_32 + 1); 41805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM(p_type, data_type); 41815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project free_eir_length -= num_uuid * LEN_UUID_32 + 2; 41825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 41835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 41845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Adding 128-bit UUID list */ 41855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( free_eir_length >= 2) 41865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 41875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_length = p++; 41885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_type = p++; 41895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_uuid = 0; 41905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_type = BTM_EIR_COMPLETE_128BITS_UUID_TYPE; 41915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 41925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project max_num_uuid = (free_eir_length - 2)/LEN_UUID_128; 41935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 41945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (custom_uuid_idx = 0; custom_uuid_idx < BTA_EIR_SERVER_NUM_CUSTOM_UUID; custom_uuid_idx++) 41955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 41965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_cb.custom_uuid[custom_uuid_idx].len == LEN_UUID_128) 41975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 41985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( num_uuid < max_num_uuid ) 41995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 42005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ARRAY16_TO_STREAM(p, bta_dm_cb.custom_uuid[custom_uuid_idx].uu.uuid128); 42015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_uuid++; 42025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 42035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 42045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 42055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project data_type = BTM_EIR_MORE_128BITS_UUID_TYPE; 42065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_WARNING0("BTA EIR: UUID 128-bit list is truncated"); 42075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 42085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 42095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 42105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 42115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 42125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM(p_length, num_uuid * LEN_UUID_128 + 1); 42135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM(p_type, data_type); 42145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project free_eir_length -= num_uuid * LEN_UUID_128 + 2; 42155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 42165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* ( BTA_EIR_CANNED_UUID_LIST != TRUE )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) */ 42175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 42185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if Flags are provided in configuration */ 42195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(( p_bta_dm_eir_cfg->bta_dm_eir_flag_len > 0 ) 42205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &&( p_bta_dm_eir_cfg->bta_dm_eir_flags ) 42215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &&( free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_flag_len + 2 )) 42225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 42235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM(p, p_bta_dm_eir_cfg->bta_dm_eir_flag_len + 1); 42245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM(p, BTM_EIR_FLAGS_TYPE); 42255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_flags, 42265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_bta_dm_eir_cfg->bta_dm_eir_flag_len); 42275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p += p_bta_dm_eir_cfg->bta_dm_eir_flag_len; 42285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project free_eir_length -= p_bta_dm_eir_cfg->bta_dm_eir_flag_len + 2; 42295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 42305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 42315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if Manufacturer Specific are provided in configuration */ 42325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(( p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len > 0 ) 42335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &&( p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec ) 42345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &&( free_eir_length >= p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len + 2 )) 42355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 42365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_length = p; 42375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 42385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM(p, p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len + 1); 42395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM(p, BTM_EIR_MANUFACTURER_SPECIFIC_TYPE); 42405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p, p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec, 42415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len); 42425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p += p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len; 42435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project free_eir_length -= p_bta_dm_eir_cfg->bta_dm_eir_manufac_spec_len + 2; 42445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 42455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 42465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 42475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 42485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_length = NULL; 42495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 42505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4251ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* if Inquiry Tx Resp Power compiled */ 4252ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((p_bta_dm_eir_cfg->bta_dm_eir_inq_tx_power) && 4253ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (free_eir_length >= 3)) 4254ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 4255ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8_TO_STREAM(p, 2); /* Length field */ 4256ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8_TO_STREAM(p, BTM_EIR_TX_POWER_LEVEL_TYPE); 4257ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8_TO_STREAM(p, *(p_bta_dm_eir_cfg->bta_dm_eir_inq_tx_power)); 4258ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta free_eir_length -= 3; 4259ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 4260ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 42615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( free_eir_length ) 42625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8_TO_STREAM(p, 0); /* terminator of significant part */ 42635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 42645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_WriteEIR( p_buf ); 42655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 42665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 42675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 42685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 42695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTM_EIR_CLIENT_INCLUDED == TRUE ) 42705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 42715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 42725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_eir_search_services 42735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 42745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function searches services in received EIR 42755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 42765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 42775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 42785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 42795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_eir_search_services( tBTM_INQ_RESULTS *p_result, 42805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_SERVICE_MASK *p_services_to_search, 42815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_SERVICE_MASK *p_services_found) 42825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 42835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_SERVICE_MASK service_index = 0; 42845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_EIR_SEARCH_RESULT result; 42855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 42865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG6("BTA searching services in EIR of BDA:0x%02X%02X%02X%02X%02X%02X", 42875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_result->remote_bd_addr[0],p_result->remote_bd_addr[1], 42885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_result->remote_bd_addr[2],p_result->remote_bd_addr[3], 42895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_result->remote_bd_addr[4],p_result->remote_bd_addr[5]); 42905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 42915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1(" with services_to_search=0x%08X", *p_services_to_search); 42925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 42935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE 42945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* always do GATT based service discovery by SDP instead of from EIR */ 42955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if GATT based service is also to be put in EIR, need to modify this */ 42965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while (service_index < (BTA_MAX_SERVICE_ID - 1)) 42975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 42985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while(service_index < BTA_MAX_SERVICE_ID) 42995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 43005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 43015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( *p_services_to_search 43025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project & (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index))) 43035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 43045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result = BTM_HasInquiryEirService( p_result, 43055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_service_id_to_uuid_lkup_tbl[service_index] ); 43065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 43075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Searching for HSP v1.2 only device */ 43085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((result != BTM_EIR_FOUND) && 43095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (bta_service_id_to_uuid_lkup_tbl[service_index] == UUID_SERVCLASS_HEADSET)) 43105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 43115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result = BTM_HasInquiryEirService (p_result, UUID_SERVCLASS_HEADSET_HS); 43125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 43135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 43145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( result == BTM_EIR_FOUND ) 43155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 43165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If Plug and Play service record, need to check to see if Broadcom stack */ 43175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* However, EIR data doesn't have EXT_BRCM_VERSION so just skip it */ 43185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( bta_service_id_to_uuid_lkup_tbl[service_index] 43195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project != UUID_SERVCLASS_PNP_INFORMATION ) 43205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 43215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 43225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_services_found |= 43235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index)); 43245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* remove the service from services to be searched */ 43255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_services_to_search &= 43265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (tBTA_SERVICE_MASK)(~(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index))); 43275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 43285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 43295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if( result == BTM_EIR_NOT_FOUND ) 43305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 43315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* remove the service from services to be searched */ 43325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_services_to_search &= 43335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (tBTA_SERVICE_MASK)(~(BTA_SERVICE_ID_TO_SERVICE_MASK(service_index))); 43345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 43355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 43365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 43375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project service_index++; 43385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 43395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 43405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR2("BTA EIR search result, services_to_search=0x%08X, services_found=0x%08X", 43415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_services_to_search, *p_services_found); 43425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 43435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 43445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 43455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ( BTM_EIR_SERVER_INCLUDED == TRUE )&&(BTA_EIR_CANNED_UUID_LIST != TRUE) 43465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 43475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 43485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_eir_update_uuid 43495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 43505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function adds or removes service UUID in EIR database. 43515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 43525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 43535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 43545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 43555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_eir_update_uuid(UINT16 uuid16, BOOLEAN adding) 43565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 43575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if this UUID is not advertised in EIR */ 43585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( !BTM_HasEirService( p_bta_dm_eir_cfg->uuid_mask, uuid16 )) 43595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 43605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 43615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if( adding ) 43625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 43635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT1("Adding UUID=0x%04X into EIR", uuid16); 43645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 43655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_AddEirService( bta_dm_cb.eir_uuid, uuid16 ); 43665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 43675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 43685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 43695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT1("Removing UUID=0x%04X from EIR", uuid16); 43705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 43715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_RemoveEirService( bta_dm_cb.eir_uuid, uuid16 ); 43725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 43735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 43745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_set_eir (NULL); 43755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 43765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT2("bta_dm_eir_update_uuid UUID bit mask=0x%08X %08X", 43775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.eir_uuid[1], bta_dm_cb.eir_uuid[0] ); 43785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 43795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 43805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 43815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 43825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 43835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_enable_test_mode 43845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 43855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description enable test mode 43865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 43875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 43885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 43895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 43905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 43915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_enable_test_mode(tBTA_DM_MSG *p_data) 43925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 43935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_EnableTestMode(); 43945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 43955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 43965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 43975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 43985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_disable_test_mode 43995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description disable test mode 44015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 44045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 44065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_disable_test_mode(tBTA_DM_MSG *p_data) 44075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 44085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_DeviceReset(NULL); 44095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 44105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 44115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 44125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_execute_callback 44145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Just execute a generic call back in the context of the BTU/BTA tack 44165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 44195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 44215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_execute_callback(tBTA_DM_MSG *p_data) 44225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 44235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 44245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_data->exec_cback.p_exec_cback == NULL) 44255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 44265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 44275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 44285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 44295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->exec_cback.p_exec_cback(p_data->exec_cback.p_param); 44305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 44315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 44325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_encrypt_cback 44345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description link encryption complete callback. 44365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 44385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 44405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_encrypt_cback(BD_ADDR bd_addr, void *p_ref_data, tBTM_STATUS result) 44415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 44425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_STATUS bta_status = BTA_SUCCESS; 44435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_ENCRYPT_CBACK *p_callback = bta_dm_cb.p_encrypt_cback; 44445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 44455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_encrypt_cback = NULL; 44465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (result) 44475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 44485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_SUCCESS: 44495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 44505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_WRONG_MODE: 44515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_status = BTA_WRONG_MODE; 44525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 44535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_NO_RESOURCES: 44545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_status = BTA_NO_RESOURCES; 44555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 44565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BUSY: 44575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_status = BTA_BUSY; 44585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 44595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 44605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_status = BTA_FAILURE; 44615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 44625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 44635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 44645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG2("bta_dm_encrypt_cback status =%d p_callback=0x%x", bta_status, p_callback); 44655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 44665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_callback) 44675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 44685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_callback)(bd_addr, bta_status); 44695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 44705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 44715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 44725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_set_encryption 44745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function to encrypt the link 44765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 44785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 44795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 44805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_set_encryption (tBTA_DM_MSG *p_data) 44815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 44825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 44835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG0("bta_dm_set_encryption"); //todo 44845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!p_data->set_encryption.p_callback) 44855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 44865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("bta_dm_set_encryption callback is not provided"); 44875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 44885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 44895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 44905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_cb.p_encrypt_cback) 44915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 44925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_data->set_encryption.p_callback)(p_data->set_encryption.bd_addr, BTA_BUSY); 44935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 44945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 44955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 44965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 44975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_encrypt_cback = p_data->set_encryption.p_callback; 44985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.sec_act = p_data->set_encryption.sec_act; 44995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetEncryption(p_data->set_encryption.bd_addr, bta_dm_encrypt_cback, &bta_dm_cb.sec_act); 45005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 45015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 45025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 45035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 45045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_set_afh_channels 45055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 45065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description set afh channels 45075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 45085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 45095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 45105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 45115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 45125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_set_afh_channels(tBTA_DM_MSG * p_data) 45135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 45145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 45155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetAfhChannels(p_data->set_afhchannels.first,p_data->set_afhchannels.last); 45165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 45175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 45185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 45195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 45205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_set_afh_channel_assesment 45215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 45225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description set afh channel assesment 45235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 45245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 45255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 45265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 45275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 45285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 45295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_set_afh_channel_assesment (tBTA_DM_MSG * p_data) 45305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 45315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SetAfhChannelAssessment(p_data->set_afh_channel_assessment.enable_or_disable); 45325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 45335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 45345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BLE_INCLUDED == TRUE) 4535ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 4536ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 4537ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function bta_dm_observe_results_cb 4538ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 4539ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description Callback for BLE Observe result 4540ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 4541ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 4542ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns void 4543ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 4544ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 4545ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_observe_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir) 4546ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 4547ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta; 4548ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_DM_SEARCH result; 4549ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_INQ_INFO *p_inq_info; 4550ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT16 service_class; 4551ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta APPL_TRACE_DEBUG0("bta_dm_observe_results_cb") 4552ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 4553ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(result.inq_res.bd_addr, p_inq->remote_bd_addr); 4554ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta result.inq_res.rssi = p_inq->rssi; 4555ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta result.inq_res.ble_addr_type = p_inq->ble_addr_type; 4556ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta result.inq_res.inq_result_type = p_inq->inq_result_type; 4557ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta result.inq_res.device_type = p_inq->device_type; 4558ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 4559ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* application will parse EIR to find out remote device name */ 4560ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta result.inq_res.p_eir = p_eir; 4561ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 4562ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if((p_inq_info = BTM_InqDbRead(p_inq->remote_bd_addr)) != NULL) 4563ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 4564ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* initialize remt_name_not_required to FALSE so that we get the name by default */ 4565ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta result.inq_res.remt_name_not_required = FALSE; 4566ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 4567ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 4568ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(bta_dm_search_cb.p_scan_cback) 4569ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_RES_EVT, &result); 4570ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 4571ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(p_inq_info) 4572ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 4573ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* application indicates if it knows the remote name, inside the callback 4574ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta copy that to the inquiry data base*/ 4575ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(result.inq_res.remt_name_not_required) 4576ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_inq_info->appl_knows_rem_name = TRUE; 4577ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 4578ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 4579ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 4580ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 4581ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 4582ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function bta_dm_observe_cmpl_cb 4583ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 4584ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description Callback for BLE Observe complete 4585ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 4586ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 4587ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns void 4588ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 4589ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 4590ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void bta_dm_observe_cmpl_cb (void * p_result) 4591ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 4592ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_DM_SEARCH data; 4593ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 4594ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta APPL_TRACE_DEBUG0("bta_dm_observe_cmpl_cb"); 4595ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 4596ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta data.inq_cmpl.num_resps = ((tBTM_INQUIRY_CMPL *)p_result)->num_resp; 4597ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (bta_dm_search_cb.p_scan_cback) 4598ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 4599ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_CMPL_EVT, &data); 4600ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 4601ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 4602ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 46035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (SMP_INCLUDED == TRUE) 46045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 46055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 46065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_ble_smp_cback 46075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 46085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback for BLE SMP 46095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 46105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 46115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 46125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 46135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 46145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 bta_dm_ble_smp_cback (tBTM_LE_EVT event, BD_ADDR bda, tBTM_LE_EVT_DATA *p_data) 46155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 46165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status = BTM_SUCCESS; 46175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC sec_event; 4618ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 i; 4619ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 4620ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta APPL_TRACE_DEBUG0("bta_dm_ble_smp_cback"); 46215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 46225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!bta_dm_cb.p_sec_cback) 46235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_NOT_AUTHORIZED; 46245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 46255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&sec_event, 0, sizeof(tBTA_DM_SEC)); 46265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (event) 46275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 46285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_LE_IO_REQ_EVT: 46295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE) 46305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 46315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_co_ble_io_req(bda, 46325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_data->io_req.io_cap, 46335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_data->io_req.oob_data, 46345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_data->io_req.auth_req, 46355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_data->io_req.max_key_size, 46365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_data->io_req.init_keys, 46375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_data->io_req.resp_keys); 46385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 46395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTM_OOB_INCLUDED == FALSE 46405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_SUCCESS; 46415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 46425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_EVENT2("io mitm: %d oob_data:%d", p_data->io_req.auth_req, p_data->io_req.oob_data); 46435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 46445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 46455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 46465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_LE_SEC_REQUEST_EVT: 46475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.ble_req.bd_addr, bda); 4648ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BCM_STRNCPY_S((char*)sec_event.ble_req.bd_name, sizeof(BD_NAME), bta_dm_get_remname(), (BD_NAME_LEN)); 4649ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sec_event.ble_req.bd_name[BD_NAME_LEN] = 0; 46505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_BLE_SEC_REQ_EVT, &sec_event); 46515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 46525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 46535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_LE_KEY_NOTIF_EVT: 46545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.key_notif.bd_addr, bda); 4655ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BCM_STRNCPY_S((char*)sec_event.key_notif.bd_name, sizeof(BD_NAME), bta_dm_get_remname(), (BD_NAME_LEN)); 4656ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sec_event.ble_req.bd_name[BD_NAME_LEN] = 0; 46575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.key_notif.passkey = p_data->key_notif; 46585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_BLE_PASSKEY_NOTIF_EVT, &sec_event); 46595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 46605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 46615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_LE_KEY_REQ_EVT: 46625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.ble_req.bd_addr, bda); 46635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_BLE_PASSKEY_REQ_EVT, &sec_event); 46645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 46655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 46665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_LE_OOB_REQ_EVT: 46675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.ble_req.bd_addr, bda); 46685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_BLE_OOB_REQ_EVT, &sec_event); 46695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 46705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 46715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_LE_KEY_EVT: 46725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.ble_key.bd_addr, bda); 46735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.ble_key.key_type = p_data->key.key_type; 4674ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 4675ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_data->key.key_type == BTM_LE_KEY_PID) 4676ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 4677ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (i=0; i<BT_OCTET16_LEN; i++ ) 4678ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 4679ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sec_event.ble_key.key_value.pid_key.irk[i] = p_data->key.p_key_value->pid_key.irk[i]; 4680ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 4681ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sec_event.ble_key.key_value.pid_key.addr_type = p_data->key.p_key_value->pid_key.addr_type; 4682ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy( &(sec_event.ble_key.key_value.pid_key.static_addr), 4683ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &(p_data->key.p_key_value->pid_key.static_addr), 4684ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sizeof (BD_ADDR)); 4685ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 4686ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 4687ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 4688ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&sec_event.ble_key.key_value, p_data->key.p_key_value, sizeof(tBTM_LE_KEY_VALUE)); 4689ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 4690ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta // memcpy(&sec_event.ble_key.key_value, p_data->key.p_key_value, sizeof(tBTM_LE_KEY_VALUE)); todo will crash 46915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_BLE_KEY_EVT, &sec_event); 46925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 46935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 46945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_LE_COMPLT_EVT: 46955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(sec_event.auth_cmpl.bd_addr, bda); 4696ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BCM_STRNCPY_S((char*)sec_event.auth_cmpl.bd_name, sizeof(BD_NAME), bta_dm_get_remname(), (BD_NAME_LEN)); 4697ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 46985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->complt.reason != 0) 4699ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 47005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.auth_cmpl.fail_reason = BTA_DM_AUTH_CONVERT_SMP_CODE(((UINT8)p_data->complt.reason)); 4701ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* delete this device entry from Sec Dev DB */ 4702ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_remove_sec_dev_entry (bda); 4703ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 47045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 4705ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 47065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sec_event.auth_cmpl.success = TRUE; 4707ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 4708ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sec_event.auth_cmpl.privacy_enabled = p_data->complt.privacy_supported; 47095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_cb.p_sec_cback) 47105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 47115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //bta_dm_cb.p_sec_cback(BTA_DM_AUTH_CMPL_EVT, &sec_event); 47125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(BTA_DM_BLE_AUTH_CMPL_EVT, &sec_event); 47135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 47145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 47155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 47165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 47175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 47185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTM_NOT_AUTHORIZED; 47195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 47205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 47215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 47225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 47235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* SMP_INCLUDED == TRUE */ 47245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 47255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 47265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 47275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_ble_id_key_cback 47285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 47295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback for BLE local ID keys 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 Projectstatic void bta_dm_ble_id_key_cback (UINT8 key_type, tBTM_BLE_LOCAL_KEYS *p_key) 47365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 47375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 evt; 47385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEC dm_key; 47395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 47405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (key_type) 47415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 47425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BLE_KEY_TYPE_ID: 47435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTM_BLE_KEY_TYPE_ER: 47445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_cb.p_sec_cback) 47455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 47465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&dm_key.ble_id_keys, p_key, sizeof(tBTM_BLE_LOCAL_KEYS)); 47475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 47485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project evt = (key_type == BTM_BLE_KEY_TYPE_ID) ? BTA_DM_BLE_LOCAL_IR_EVT :\ 47495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_DM_BLE_LOCAL_ER_EVT; 47505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_cb.p_sec_cback(evt, &dm_key); 47515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 47525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 47535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 47545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 47555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("Unknown key type %d", key_type); 47565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 47575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 47585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 47595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 47605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 47615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 47625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 47635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 47645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_add_blekey 47655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 47665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function adds an BLE Key to an security database entry. 47675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** This function shall only be called AFTER BTA_DmAddBleDevice has been called. 47685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** It is normally called during host startup to restore all required information 47695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** stored in the NVRAM. 47705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 47715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: 47725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 47735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 47745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_add_blekey (tBTA_DM_MSG *p_data) 47755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 47765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!BTM_SecAddBleKey (p_data->add_ble_key.bd_addr, 47775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (tBTM_LE_KEY_VALUE *)&p_data->add_ble_key.blekey, 47785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->add_ble_key.key_type)) 47795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 47805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR2 ("BTA_DM: Error adding BLE Key for device %08x%04x", 47815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_data->add_ble_key.bd_addr[0]<<24)+(p_data->add_ble_key.bd_addr[1]<<16)+\ 47825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_data->add_ble_key.bd_addr[2]<<8)+p_data->add_ble_key.bd_addr[3], 47835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_data->add_ble_key.bd_addr[4]<<8)+p_data->add_ble_key.bd_addr[5]); 47845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 47855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 47865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 47875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 47885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 47895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_add_ble_device 47905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 47915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function adds an BLE device to an security database entry. 47925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** It is normally called during host startup to restore all required information 47935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** stored in the NVRAM. 47945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 47955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: 47965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 47975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 47985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_add_ble_device (tBTA_DM_MSG *p_data) 47995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 48005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!BTM_SecAddBleDevice (p_data->add_ble_device.bd_addr, NULL, 48015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->add_ble_device.dev_type , 48025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->add_ble_device.addr_type)) 48035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 48045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR2 ("BTA_DM: Error adding BLE Device for device %08x%04x", 48055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_data->add_ble_device.bd_addr[0]<<24)+(p_data->add_ble_device.bd_addr[1]<<16)+ \ 48065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_data->add_ble_device.bd_addr[2]<<8)+p_data->add_ble_device.bd_addr[3], 48075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (p_data->add_ble_device.bd_addr[4]<<8)+p_data->add_ble_device.bd_addr[5]); 48085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 48095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 48105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 48115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 48125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_add_ble_device 48145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function adds an BLE device to an security database entry. 48165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** It is normally called during host startup to restore all required information 48175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** stored in the NVRAM. 48185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: 48205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 48225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ble_passkey_reply (tBTA_DM_MSG *p_data) 48235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 48245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->pin_reply.accept) 48255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 48265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 48275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_BlePasskeyReply(p_data->ble_passkey_reply.bd_addr, BTM_SUCCESS, p_data->ble_passkey_reply.passkey); 48285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 48295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 48305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 48315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_BlePasskeyReply(p_data->ble_passkey_reply.bd_addr, BTM_NOT_AUTHORIZED, p_data->ble_passkey_reply.passkey); 48325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 48335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 48345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 48355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 48365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 48375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_security_grant 48395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function grant SMP security request access. 48415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: 48435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 48455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_security_grant (tBTA_DM_MSG *p_data) 48465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 48475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SecurityGrant(p_data->ble_sec_grant.bd_addr, p_data->ble_sec_grant.res); 48485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 48495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 48505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 48515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_ble_set_bg_conn_type 48535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function set the BLE background connection type 48555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: 48575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 48595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ble_set_bg_conn_type (tBTA_DM_MSG *p_data) 48605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 48615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_BleSetBgConnType(p_data->ble_set_bd_conn_type.bg_conn_type, 48625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->ble_set_bd_conn_type.p_select_cback); 48635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 48645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 48655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 48665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_ble_set_conn_params 48685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function set the preferred connection parameters. 48705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: 48725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 48745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ble_set_conn_params (tBTA_DM_MSG *p_data) 48755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 48765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_BleSetPrefConnParams(p_data->ble_set_conn_params.peer_bda, 48775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->ble_set_conn_params.conn_int_min, 48785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->ble_set_conn_params.conn_int_max, 48795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->ble_set_conn_params.slave_latency, 48805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->ble_set_conn_params.supervision_tout); 48815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 48825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 48835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 48845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_ble_set_scan_params 48865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function set the preferred connection scan parameters. 48885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: 48905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 48915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 48925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_ble_set_scan_params (tBTA_DM_MSG *p_data) 48935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 48945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_BleSetConnScanParams(p_data->ble_set_scan_params.scan_int, 48955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->ble_set_scan_params.scan_window); 48965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 48975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4898ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 4899ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 4900ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 4901ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function bta_dm_ble_observe 4902ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 4903ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description This function set the preferred connection scan parameters. 4904ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 4905ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Parameters: 4906ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 4907ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 4908ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid bta_dm_ble_observe (tBTA_DM_MSG *p_data) 4909ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 4910ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 4911ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTM_STATUS status; 4912ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_data->ble_observe.start) 4913ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 4914ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /*Save the callback to be called when a scan results are available */ 4915ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_search_cb.p_scan_cback = p_data->ble_observe.p_cback; 4916ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((status = BTM_BleObserve(TRUE, p_data->ble_observe.duration, 4917ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_observe_results_cb, bta_dm_observe_cmpl_cb))!= BTM_SUCCESS) 4918ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 4919ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_DM_SEARCH data; 4920ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta APPL_TRACE_WARNING2(" %s BTM_BleObserve failed. status %d",__FUNCTION__,status); 4921ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta data.inq_cmpl.num_resps = 0; 4922ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (bta_dm_search_cb.p_scan_cback) 4923ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 4924ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_CMPL_EVT, &data); 4925ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 4926ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 4927ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 4928ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 4929ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 4930ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_dm_search_cb.p_scan_cback = NULL; 4931ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_BleObserve(FALSE, 0, NULL,NULL ); 4932ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 4933ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 4934ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 49355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if ((defined BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE)) 49365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 49375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 49385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 49395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btm_dm_start_disc_gatt_services 49405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 49415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function starts a GATT service search request. 49425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 49435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: 49445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 49455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 49465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btm_dm_start_disc_gatt_services (UINT16 conn_id) 49475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 49485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBT_UUID *p_uuid = bta_dm_search_cb.p_srvc_uuid + 49495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search; 49505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 49515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_uuid = bta_dm_search_cb.p_srvc_uuid + 49525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.num_uuid - bta_dm_search_cb.uuid_to_search; 49535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 49545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* always search for all services */ 49555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_GATTC_ServiceSearchRequest(conn_id, p_uuid); 49565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 49575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 49585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 49595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 49605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_gatt_disc_result 49615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 49625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function process the GATT service search result. 49635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 49645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: 49655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 49665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 49675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_gatt_disc_result(tBTA_GATT_ID service_id) 49685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 49695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_SEARCH result; 49705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 49715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* 49725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * This logic will not work for gatt case. We are checking against the bluetooth profiles here 49735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * just copy the GATTID in raw data field and send it across. 49745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 49755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 49765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 49775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( bta_dm_search_cb.ble_raw_used + sizeof(tBTA_GATT_ID) < bta_dm_search_cb.ble_raw_size ) 49785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 49795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG3("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); 49805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4981ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach if(bta_dm_search_cb.p_ble_rawdata) 4982ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach { 4983ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach memcpy((bta_dm_search_cb.p_ble_rawdata + bta_dm_search_cb.ble_raw_used), &service_id, 4984ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach sizeof(service_id) ); 49855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4986ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach bta_dm_search_cb.ble_raw_used += sizeof(service_id); 4987ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach } 4988ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach else 4989ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach { 4990ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach APPL_TRACE_ERROR0("p_ble_rawdata is NULL"); 4991ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach } 49925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 49935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 49945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 49955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 49965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR3("%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 ); 49975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 49985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 49995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR1("bta_dm_gatt_disc_result serivce_id len=%d ", service_id.uuid.len); 50005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) 50015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 50025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 50035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send result back to app now, one by one */ 50045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy (result.disc_ble_res.bd_addr, bta_dm_search_cb.peer_bdaddr); 50055738f83aeb59361a0a2eda2460113f6dc919427The 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)); 5006ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta result.disc_ble_res.bd_name[BD_NAME_LEN] = 0; 50075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&result.disc_ble_res.service, &service_id.uuid, sizeof(tBT_UUID)); 50085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 50095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_search_cback(BTA_DM_DISC_BLE_RES_EVT, &result); 50105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 50115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 50125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 50135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 50145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 50155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_gatt_disc_complete 50165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 50175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function process the GATT service search complete. 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 Projectstatic void bta_dm_gatt_disc_complete(UINT16 conn_id, tBTA_GATT_STATUS status) 50235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 50245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_MSG *p_msg; 50255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 50265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_dm_gatt_disc_complete conn_id = %d",conn_id); 50275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 50285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_search_cb.uuid_to_search > 0) bta_dm_search_cb.uuid_to_search --; 50295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 50305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status == BTA_GATT_OK && bta_dm_search_cb.uuid_to_search > 0) 50315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 50325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_dm_start_disc_gatt_services(conn_id); 50335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 50345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 50355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 50365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.uuid_to_search = 0; 50375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 50385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* no more services to be discovered */ 50395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTA_DM_MSG *) GKI_getbuf(sizeof(tBTA_DM_MSG))) != NULL) 50405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 50415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BTA_DM_DISCOVERY_RESULT_EVT; 50425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.result = (status == BTA_GATT_OK) ? BTA_SUCCESS :BTA_FAILURE; 50435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.services = bta_dm_search_cb.services_found; 5044ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_msg->disc_result.result.disc_res.num_uuids = 0; 5045ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_msg->disc_result.result.disc_res.p_uuid_list = NULL; 50465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy (p_msg->disc_result.result.disc_res.bd_addr, bta_dm_search_cb.peer_bdaddr); 50475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BCM_STRNCPY_S((char*)p_msg->disc_result.result.disc_res.bd_name, sizeof(BD_NAME), 50485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_get_remname(), (BD_NAME_LEN-1)); 50495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 50505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* make sure the string is terminated */ 50515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.bd_name[BD_NAME_LEN-1] = 0; 50525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 50535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.device_type = BT_DEVICE_TYPE_BLE; 50545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( bta_dm_search_cb.ble_raw_used > 0 ) 50555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 50565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.p_raw_data = GKI_getbuf(bta_dm_search_cb.ble_raw_used); 50575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 50585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy( p_msg->disc_result.result.disc_res.p_raw_data, 50595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_ble_rawdata, 50605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.ble_raw_used ); 50615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 50625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.raw_data_size = bta_dm_search_cb.ble_raw_used; 50635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 50645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 50655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 50665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->disc_result.result.disc_res.p_raw_data = NULL; 50675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.p_ble_rawdata = 0; 50685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 50695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 50705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_msg); 50715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 50725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (conn_id != BTA_GATT_INVALID_CONN_ID) 50735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 50745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_GATTC_Close(conn_id); 50755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 50765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.conn_id = BTA_GATT_INVALID_CONN_ID; 50775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.gatt_disc_active = FALSE; 50785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 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** Function btm_dm_start_gatt_discovery 50845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 50855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This is GATT initiate the service search by open a GATT connection 50865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** first. 50875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 50885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: 50895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 50905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 50915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_dm_start_gatt_discovery (BD_ADDR bd_addr) 50925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 50935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.gatt_disc_active = TRUE; 50945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_GATTC_Open(bta_dm_search_cb.client_if, bd_addr, TRUE); 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_cancel_gatt_discovery 51005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 51015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This is GATT cancel the GATT service search. 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 Projectstatic void bta_dm_cancel_gatt_discovery(BD_ADDR bd_addr) 51075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 51085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_dm_search_cb.conn_id == BTA_GATT_INVALID_CONN_ID) 51095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 51105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_GATTC_CancelOpen(bta_dm_search_cb.client_if, bd_addr, TRUE); 51115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 51125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 51135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_gatt_disc_complete(bta_dm_search_cb.conn_id, (tBTA_GATT_STATUS) BTA_GATT_ERROR); 51145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 51155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 51165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 51175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 51185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_proc_open_evt 51195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 51205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description process BTA_GATTC_OPEN_EVT in DM. 51215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 51225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: 51235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 51245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 51255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_dm_proc_open_evt(tBTA_GATTC_OPEN *p_data) 51265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 51275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p1; 51285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p2; 51295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 51305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p1 = bta_dm_search_cb.peer_bdaddr; 51315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p2 = p_data->remote_bda; 51325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 51335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG5("DM Search state= %d search_cb.peer_dbaddr: [%08x%04x] connected_bda= [%08x%04x] ", 51345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.state, 51355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ((p1[0])<<24)+((p1[1])<<16)+((p1[2])<<8)+(p1[3]), 51365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ((p1[4])<<8)+ p1[5], 51375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ((p2[0])<<24)+((p2[1])<<16)+((p2[2])<<8)+(p2[3]), 51385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ((p2[4])<<8)+ p2[5]); 51395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 51405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG3("BTA_GATTC_OPEN_EVT conn_id = %d client_if=%d status = %d" , 51415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->conn_id, 51425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->client_if, 51435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->status); 51445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 51455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.conn_id = p_data->conn_id; 51465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 51475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->status == BTA_GATT_OK) 51485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 51495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_dm_start_disc_gatt_services(p_data->conn_id); 51505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 51515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 51525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 51535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_gatt_disc_complete(BTA_GATT_INVALID_CONN_ID, p_data->status); 51545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 51555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 51565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 51575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 51585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 51595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_dm_gattc_callback 51605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 51615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This is GATT client callback function used in DM. 51625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 51635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters: 51645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 51655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 51665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_dm_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data) 51675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 51685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_dm_gattc_callback event = %d", event); 51695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 51705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (event) 51715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 51725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTC_REG_EVT: 51735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("BTA_GATTC_REG_EVT client_if = %d", p_data->reg_oper.client_if); 51745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->reg_oper.status == BTA_GATT_OK) 51755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.client_if = p_data->reg_oper.client_if; 51765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 51775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_search_cb.client_if = BTA_GATTS_INVALID_IF; 51785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 51795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 51805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTC_OPEN_EVT: 51815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_proc_open_evt(&p_data->open); 51825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 51835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 51845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTC_SEARCH_RES_EVT: 51855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_gatt_disc_result(p_data->srvc_res.service_uuid.id); 51865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 51875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 51885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTC_SEARCH_CMPL_EVT: 51895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) 51905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_gatt_disc_complete(p_data->search_cmpl.conn_id, p_data->search_cmpl.status); 51915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 51925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 51935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_GATTC_CLOSE_EVT: 51945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("BTA_GATTC_CLOSE_EVT reason = %d", p_data->close.reason); 51955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* in case of disconnect before search is completed */ 51965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( (bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) && 51975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project !memcmp(p_data->close.remote_bda, bta_dm_search_cb.peer_bdaddr, BD_ADDR_LEN)) 51985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 51995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_dm_gatt_disc_complete((UINT16)BTA_GATT_INVALID_CONN_ID, (tBTA_GATT_STATUS) BTA_GATT_ERROR); 52005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 52015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 52025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 52035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 52045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 52055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 52065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 52075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 52085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTA_GATT_INCLUDED */ 52095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BLE_INCLUDED */ 5210