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