15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 32dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta * Copyright (C) 2014 The Android Open Source Project 45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2009-2012 Broadcom Corporation 55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * you may not use this file except in compliance with the License. 85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * You may obtain a copy of the License at: 95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * See the License for the specific language governing permissions and 165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * limitations under the License. 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 * 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Filename: btif_core.c 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Description: Contains core functionality related to interfacing between 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Bluetooth HAL and BTE core stack. 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ***********************************************************************************/ 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdlib.h> 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <hardware/bluetooth.h> 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <sys/types.h> 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <sys/stat.h> 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <fcntl.h> 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <dirent.h> 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <ctype.h> 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <cutils/properties.h> 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define LOG_TAG "BTIF_CORE" 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_api.h" 416c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu#include "bt_utils.h" 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_api.h" 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h" 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h" 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bte.h" 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bd.h" 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_av.h" 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_storage.h" 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_util.h" 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_sock.h" 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_pan.h" 522dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta#include "btif_mce.h" 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_profile_queue.h" 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_config.h" 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Constants & Macros 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTIF_TASK_STACK_SIZE 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_TASK_STACK_SIZE 0x2000 /* In bytes */ 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTE_DID_CONF_FILE 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTE_DID_CONF_FILE "/etc/bluetooth/bt_did.conf" 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_TASK_STR ((INT8 *) "BTIF") 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Local type definitions 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* These type definitions are used when passing data from the HAL to BTIF context 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project* in the downstream path for the adapter and remote_device property APIs */ 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct { 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t bd_addr; 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_type_t type; 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_storage_read_t; 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct { 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t bd_addr; 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t prop; 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_storage_write_t; 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef union { 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_read_t read_req; 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_write_t write_req; 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_storage_req_t; 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef enum { 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STATE_DISABLED = 0, 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STATE_ENABLING, 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STATE_ENABLED, 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STATE_DISABLING 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_core_state_t; 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Static variables 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_bdaddr_t btif_local_bd_addr; 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT32 btif_task_stack[(BTIF_TASK_STACK_SIZE + 3) / 4]; 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* holds main adapter state */ 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic btif_core_state_t btif_core_state = BTIF_CORE_STATE_DISABLED; 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int btif_shutdown_pending = 0; 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic tBTA_SERVICE_MASK btif_enabled_services = 0; 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project* This variable should be set to 1, if the Bluedroid+BTIF libraries are to 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project* function in DUT mode. 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project* 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project* To set this, the btif_init_bluetooth needs to be called with argument as 1 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*/ 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 btif_dut_mode = 0; 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Static functions 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_associate_evt(void); 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_disassociate_evt(void); 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* sends message to btif task */ 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_sendmsg(void *p_msg); 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Externs 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bte_load_did_conf(const char *p_path); 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/** TODO: Move these to _common.h */ 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_boot_entry(void); 13648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chaovoid bte_main_enable(); 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_disable(void); 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_shutdown(void); 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HCILP_INCLUDED) && HCILP_INCLUDED == TRUE) 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_enable_lpm(BOOLEAN enable); 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_postload_cfg(void); 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_dm_execute_service_request(UINT16 event, char *p_param); 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef BTIF_DM_OOB_TEST 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_dm_load_local_oob(void); 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 147bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xuvoid bte_main_config_hci_logging(BOOLEAN enable, BOOLEAN bt_disabled); 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Functions 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Context switching functions 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_context_switched 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback used to execute transferred context callback 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_msg : message to be executed in btif context 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_context_switched(void *p_msg) 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTIF_CONTEXT_SWITCH_CBACK *p; 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 175e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_VERBOSE("btif_context_switched"); 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = (tBTIF_CONTEXT_SWITCH_CBACK *) p_msg; 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* each callback knows how to parse the data */ 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p->p_cb) 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->p_cb(p->event, p->p_param); 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_transfer_context 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function switches context to btif task 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_cback : callback used to process message in btif context 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** event : event id of message 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_params : parameter area passed to callback (copied) 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** param_len : length of parameter area 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_copy_cback : If set this function will be invoked for deep copy 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_transfer_context (tBTIF_CBACK *p_cback, UINT16 event, char* p_params, int param_len, tBTIF_COPY_CBACK *p_copy_cback) 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTIF_CONTEXT_SWITCH_CBACK *p_msg; 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 205e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_VERBOSE("btif_transfer_context event %d, len %d", event, param_len); 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* allocate and send message that will be executed in btif context */ 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTIF_CONTEXT_SWITCH_CBACK *) GKI_getbuf(sizeof(tBTIF_CONTEXT_SWITCH_CBACK) + param_len)) != NULL) 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BT_EVT_CONTEXT_SWITCH_EVT; /* internal event */ 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->p_cb = p_cback; 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->event = event; /* callback event */ 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* check if caller has provided a copy callback to do the deep copy */ 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_copy_cback) 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_copy_cback(event, p_msg->p_param, p_params); 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (p_params) 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p_msg->p_param, p_params, param_len); /* callback parameter data */ 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_sendmsg(p_msg); 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* let caller deal with a failed allocation */ 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOMEM; 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_is_dut_mode 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description checks if BTIF is currently in DUT mode 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 1 if test mode, otherwize 0 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 btif_is_dut_mode(void) 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (btif_dut_mode == 1); 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_is_enabled 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description checks if main adapter is fully enabled 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 1 if fully enabled, otherwize 0 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint btif_is_enabled(void) 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ((!btif_is_dut_mode()) && (btif_core_state == BTIF_CORE_STATE_ENABLED)); 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_task 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF task handler managing all messages being passed 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Bluetooth HAL and BTA. 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_task(UINT32 params) 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 event; 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_msg; 2805cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(params); 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 282e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("btif task starting"); 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_associate_evt(); 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(;;) 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* wait for specified events */ 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event = GKI_wait(0xFFFF, 0); 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Wait for the trigger to init chip and stack. This trigger will 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * be received by btu_task once the UART is opened and ready 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event == BT_EVT_TRIGGER_STACK_INIT) 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 297e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("btif_task: received trigger stack init event"); 298ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta #if (BLE_INCLUDED == TRUE) 299ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_dm_load_ble_local_keys(); 300ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta #endif 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_EnableBluetooth(bte_dm_evt); 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 30448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao /* 30548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao * Failed to initialize controller hardware, reset state and bring 30648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao * down all threads 30748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao */ 30848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao if (event == BT_EVT_HARDWARE_INIT_FAIL) 30948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao { 310e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("btif_task: hardware init failed"); 31148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao bte_main_disable(); 31248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao btif_queue_release(); 31348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao GKI_task_self_cleanup(BTIF_TASK); 31448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao bte_main_shutdown(); 31548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao btif_dut_mode = 0; 31648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao btif_core_state = BTIF_CORE_STATE_DISABLED; 31748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao HAL_CBACK(bt_hal_cbacks,adapter_state_changed_cb,BT_STATE_OFF); 31848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao break; 31948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao } 32048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & EVENT_MASK(GKI_SHUTDOWN_EVT)) 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(event & TASK_MBOX_1_EVT_MASK) 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while((p_msg = GKI_read_mbox(BTU_BTIF_MBOX)) != NULL) 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 328e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_VERBOSE("btif task fetched event %x", p_msg->event); 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (p_msg->event) 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_CONTEXT_SWITCH_EVT: 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_context_switched(p_msg); 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 336e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("unhandled btif event (%d)", p_msg->event & BT_EVT_MASK); 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_msg); 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_disassociate_evt(); 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 347e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("btif task exiting"); 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_sendmsg 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Sends msg to BTIF task 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_sendmsg(void *p_msg) 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_send_msg(BTIF_TASK, BTU_BTIF_MBOX, p_msg); 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_fetch_local_bdaddr(bt_bdaddr_t *local_addr) 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char val[256]; 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint8_t valid_bda = FALSE; 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int val_size = 0; 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const uint8_t null_bdaddr[BD_ADDR_LEN] = {0,0,0,0,0,0}; 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Get local bdaddr storage path from property */ 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (property_get(PROPERTY_BT_BDADDR_PATH, val, NULL)) 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int addr_fd; 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 378e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("local bdaddr is stored in %s", val); 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((addr_fd = open(val, O_RDONLY)) != -1) 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(val, 0, sizeof(val)); 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project read(addr_fd, val, FACTORY_BT_BDADDR_STORAGE_LEN); 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project str2bd(val, local_addr); 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If this is not a reserved/special bda, then use it */ 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (memcmp(local_addr->address, null_bdaddr, BD_ADDR_LEN) != 0) 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project valid_bda = TRUE; 389e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("Got Factory BDA %02X:%02X:%02X:%02X:%02X:%02X", 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[0], local_addr->address[1], local_addr->address[2], 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[3], local_addr->address[4], local_addr->address[5]); 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project close(addr_fd); 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!valid_bda) 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project val_size = sizeof(val); 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(btif_config_get_str("Local", "Adapter", "Address", val, &val_size)) 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project str2bd(val, local_addr); 404e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("local bdaddr from bt_config.xml is %s", val); 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* No factory BDADDR found. Look for previously generated random BDA */ 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((!valid_bda) && \ 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (property_get(PERSIST_BDADDR_PROPERTY, val, NULL))) 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project str2bd(val, local_addr); 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project valid_bda = TRUE; 415e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("Got prior random BDA %02X:%02X:%02X:%02X:%02X:%02X", 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[0], local_addr->address[1], local_addr->address[2], 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[3], local_addr->address[4], local_addr->address[5]); 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Generate new BDA if necessary */ 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!valid_bda) 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr; 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Seed the random number generator */ 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project srand((unsigned int) (time(0))); 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* No autogen BDA. Generate one now. */ 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[0] = 0x22; 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[1] = 0x22; 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[2] = (uint8_t) ((rand() >> 8) & 0xFF); 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[3] = (uint8_t) ((rand() >> 8) & 0xFF); 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[4] = (uint8_t) ((rand() >> 8) & 0xFF); 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[5] = (uint8_t) ((rand() >> 8) & 0xFF); 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Convert to ascii, and store as a persistent property */ 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(local_addr, &bdstr); 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 438e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("No preset BDA. Generating BDA: %s for prop %s", 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)bdstr, PERSIST_BDADDR_PROPERTY); 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (property_set(PERSIST_BDADDR_PROPERTY, (char*)bdstr) < 0) 442e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("Failed to set random BDA in prop %s",PERSIST_BDADDR_PROPERTY); 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //save the bd address to config file 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr; 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(local_addr, &bdstr); 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project val_size = sizeof(val); 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_config_get_str("Local", "Adapter", "Address", val, &val_size)) 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (strcmp(bdstr, val) ==0) 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project // BDA is already present in the config file. 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_str("Local", "Adapter", "Address", bdstr); 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_save(); 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** btif core api functions 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_init_bluetooth 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Creates BTIF task and prepares BT scheduler for startup 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_init_bluetooth() 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 status; 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_init(); 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_boot_entry(); 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* As part of the init, fetch the local BD ADDR */ 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&btif_local_bd_addr, 0, sizeof(bt_bdaddr_t)); 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_fetch_local_bdaddr(&btif_local_bd_addr); 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* start btif task */ 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = GKI_create_task(btif_task, BTIF_TASK, BTIF_TASK_STR, 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT16 *) ((UINT8 *)btif_task_stack + BTIF_TASK_STACK_SIZE), 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(btif_task_stack)); 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status != GKI_SUCCESS) 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_FAIL; 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_associate_evt 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Event indicating btif_task is up 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Attach btif_task to JVM 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_associate_evt(void) 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 511e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s: notify ASSOCIATE_JVM", __FUNCTION__); 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, thread_evt_cb, ASSOCIATE_JVM); 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_enable_bluetooth 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Performs chip power on and kickstarts OS scheduler 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_enable_bluetooth(void) 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 530e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("BTIF ENABLE BLUETOOTH"); 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_core_state != BTIF_CORE_STATE_DISABLED) 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ALOGD("not disabled\n"); 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_DONE; 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_ENABLING; 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Create the GKI tasks and run them */ 54148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao bte_main_enable(); 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_enable_bluetooth_evt 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Event indicating bluetooth enable is completed 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Notifies HAL user with updated adapter state 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_enable_bluetooth_evt(tBTA_STATUS status, BD_ADDR local_bd) 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t bd_addr; 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr; 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(bd_addr.address, local_bd); 564e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s: status %d, local bd [%s]", __FUNCTION__, status, 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(&bd_addr, &bdstr)); 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bdcmp(btif_local_bd_addr.address,local_bd)) 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t buf; 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t prop; 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /** 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * The Controller's BDADDR does not match to the BTIF's initial BDADDR! 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * This could be because the factory BDADDR was stored separatley in 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * the Controller's non-volatile memory rather than in device's file 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * system. 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project **/ 578e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_WARNING("***********************************************"); 579e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_WARNING("BTIF init BDA was %02X:%02X:%02X:%02X:%02X:%02X", 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_local_bd_addr.address[0], btif_local_bd_addr.address[1], 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_local_bd_addr.address[2], btif_local_bd_addr.address[3], 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_local_bd_addr.address[4], btif_local_bd_addr.address[5]); 583e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_WARNING("Controller BDA is %02X:%02X:%02X:%02X:%02X:%02X", 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_bd[0], local_bd[1], local_bd[2], 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_bd[3], local_bd[4], local_bd[5]); 586e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_WARNING("***********************************************"); 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(btif_local_bd_addr.address, local_bd); 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //save the bd address to config file 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(&btif_local_bd_addr, &buf); 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_str("Local", "Adapter", "Address", buf); 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_save(); 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //fire HAL callback for property change 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(buf, &btif_local_bd_addr, sizeof(bt_bdaddr_t)); 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.type = BT_PROPERTY_BDADDR; 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.val = (void*)buf; 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.len = sizeof(bt_bdaddr_t); 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, BT_STATUS_SUCCESS, 1, &prop); 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_postload_cfg(); 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HCILP_INCLUDED) && HCILP_INCLUDED == TRUE) 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_enable_lpm(TRUE); 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* add passing up bd address as well ? */ 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* callback to HAL */ 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status == BTA_SUCCESS) 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6121a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji /* initialize a2dp service */ 6131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_av_init(); 6142d75441cc17236564a431c6a5fc4c9e356fb7294Andre Eisenbach 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* init rfcomm & l2cap api */ 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_sock_init(); 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* init pan */ 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_pan_init(); 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* load did configuration */ 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_load_did_conf(BTE_DID_CONF_FILE); 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef BTIF_DM_OOB_TEST 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_dm_load_local_oob(); 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* now fully enabled, update state */ 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_ENABLED; 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_state_changed_cb, BT_STATE_ON); 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* cleanup rfcomm & l2cap api */ 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_sock_cleanup(); 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_pan_cleanup(); 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* we failed to enable, reset state */ 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_DISABLED; 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_state_changed_cb, BT_STATE_OFF); 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_disable_bluetooth 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Inititates shutdown of Bluetooth system. 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Any active links will be dropped and device entering 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** non connectable/discoverable mode 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_disable_bluetooth(void) 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_STATUS status; 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 663e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("btif_disable_bluetooth : not yet enabled"); 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 667e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("BTIF DISABLE BLUETOOTH"); 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_dm_on_disable(); 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_DISABLING; 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* cleanup rfcomm & l2cap api */ 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_sock_cleanup(); 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_pan_cleanup(); 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTA_DisableBluetooth(); 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_flush(); 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status != BTA_SUCCESS) 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 683e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("disable bt failed (%d)", status); 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* reset the original state to allow attempting disable again */ 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_ENABLED; 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_FAIL; 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_disable_bluetooth_evt 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Event notifying BT disable is now complete. 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Terminates main stack tasks and notifies HAL 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** user with updated BT state. 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_disable_bluetooth_evt(void) 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 707e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s", __FUNCTION__); 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HCILP_INCLUDED) && HCILP_INCLUDED == TRUE) 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_enable_lpm(FALSE); 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 713d5aa24750c2202ce944560c2c27ead0214e8350dSatya Calloji#if (BLE_INCLUDED == TRUE) 714d5aa24750c2202ce944560c2c27ead0214e8350dSatya Calloji BTA_VendorCleanup(); 715d5aa24750c2202ce944560c2c27ead0214e8350dSatya Calloji#endif 716d5aa24750c2202ce944560c2c27ead0214e8350dSatya Calloji 717d5aa24750c2202ce944560c2c27ead0214e8350dSatya Calloji bte_main_disable(); 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* update local state */ 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_DISABLED; 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* callback to HAL */ 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_state_changed_cb, BT_STATE_OFF); 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_shutdown_pending) 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 727e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s: calling btif_shutdown_bluetooth", __FUNCTION__); 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_shutdown_bluetooth(); 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_shutdown_bluetooth 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Finalizes BT scheduler shutdown and terminates BTIF 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** task. 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_shutdown_bluetooth(void) 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 746e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s", __FUNCTION__); 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7486c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu if (btif_core_state == BTIF_CORE_STATE_DISABLING) 7496c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu { 750e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_WARNING("shutdown during disabling"); 7516c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu /* shutdown called before disabling is done */ 7526c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu btif_shutdown_pending = 1; 7536c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu return BT_STATUS_NOT_READY; 7546c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu } 7556c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu 7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_is_enabled()) 7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 758e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_WARNING("shutdown while still enabled, initiate disable"); 7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* shutdown called prior to disabling, initiate disable */ 7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_disable_bluetooth(); 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_shutdown_pending = 1; 7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_shutdown_pending = 0; 7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 76848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao if (btif_core_state == BTIF_CORE_STATE_ENABLING) 76948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao { 77048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao // Java layer abort BT ENABLING, could be due to ENABLE TIMEOUT 77148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao // Direct call from cleanup()@bluetooth.c 77248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao // bring down HCI/Vendor lib 77348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao bte_main_disable(); 77448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao btif_core_state = BTIF_CORE_STATE_DISABLED; 77548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao HAL_CBACK(bt_hal_cbacks, adapter_state_changed_cb, BT_STATE_OFF); 77648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao } 77748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_destroy_task(BTIF_TASK); 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_queue_release(); 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_shutdown(); 7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_dut_mode = 0; 7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7846c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu bt_utils_cleanup(); 7856c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu 786e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s done", __FUNCTION__); 7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_disassociate_evt 7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Event indicating btif_task is going down 7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Detach btif_task to JVM 7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_disassociate_evt(void) 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 805e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s: notify DISASSOCIATE_JVM", __FUNCTION__); 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, thread_evt_cb, DISASSOCIATE_JVM); 8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* shutdown complete, all events notified and we reset HAL callbacks */ 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hal_cbacks = NULL; 8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/**************************************************************************** 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTIF Test Mode APIs 8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_dut_mode_cback 8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback invoked on completion of vendor specific test mode command 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_dut_mode_cback( tBTM_VSC_CMPL *p ) 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8315cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p); 8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* For now nothing to be done. */ 8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_dut_mode_configure 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Configure Test Mode - 'enable' to 1 puts the device in test mode and 0 exits 8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** test mode 8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS on success 8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_dut_mode_configure(uint8_t enable) 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 847e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s", __FUNCTION__); 8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_core_state != BTIF_CORE_STATE_ENABLED) { 850e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("btif_dut_mode_configure : Bluetooth not enabled"); 8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_dut_mode = enable; 8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (enable == 1) { 8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_EnableTestMode(); 8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } else { 8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_DisableTestMode(); 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_dut_mode_send 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Sends a HCI Vendor specific command to the controller 8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS on success 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_dut_mode_send(uint16_t opcode, uint8_t *buf, uint8_t len) 8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* TODO: Check that opcode is a vendor command group */ 875e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s", __FUNCTION__); 8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_dut_mode()) { 877e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("Bluedroid HAL needs to be init with test_mode set to 1."); 8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_FAIL; 8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_VendorSpecificCommand(opcode, len, buf, btif_dut_mode_cback); 8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 883ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** btif api adapter property functions 8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_in_get_adapter_properties(void) 8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t properties[6]; 8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t num_props; 8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t addr; 8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdname_t name; 8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_scan_mode_t mode; 8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t disc_timeout; 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t bonded_devices[BTM_SEC_MAX_DEVICE_RECORDS]; 9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_uuid_t local_uuids[BT_MAX_NUM_UUIDS]; 9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props = 0; 9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BD_ADDR */ 9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_BDADDR, 9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(addr), &addr); 9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BD_NAME */ 9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_BDNAME, 9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(name), &name); 9125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* SCAN_MODE */ 9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_ADAPTER_SCAN_MODE, 9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(mode), &mode); 9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* DISC_TIMEOUT */ 9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT, 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(disc_timeout), &disc_timeout); 9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BONDED_DEVICES */ 9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_ADAPTER_BONDED_DEVICES, 9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(bonded_devices), bonded_devices); 9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* LOCAL UUIDs */ 9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_UUIDS, 9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(local_uuids), local_uuids); 9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, 9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_STATUS_SUCCESS, num_props, properties); 9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_in_get_remote_device_properties(bt_bdaddr_t *bd_addr) 9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t remote_properties[8]; 9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t num_props = 0; 9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdname_t name, alias; 9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t cod, devtype; 9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_uuid_t remote_uuids[BT_MAX_NUM_UUIDS]; 9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(remote_properties, 0, sizeof(remote_properties)); 9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&remote_properties[num_props], BT_PROPERTY_BDNAME, 9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(name), &name); 9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_remote_device_property(bd_addr, 9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &remote_properties[num_props]); 9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&remote_properties[num_props], BT_PROPERTY_REMOTE_FRIENDLY_NAME, 9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(alias), &alias); 9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_remote_device_property(bd_addr, 9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &remote_properties[num_props]); 9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&remote_properties[num_props], BT_PROPERTY_CLASS_OF_DEVICE, 9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(cod), &cod); 9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_remote_device_property(bd_addr, 9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &remote_properties[num_props]); 9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&remote_properties[num_props], BT_PROPERTY_TYPE_OF_DEVICE, 9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(devtype), &devtype); 9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_remote_device_property(bd_addr, 9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &remote_properties[num_props]); 9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&remote_properties[num_props], BT_PROPERTY_UUIDS, 9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(remote_uuids), remote_uuids); 9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_remote_device_property(bd_addr, 9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &remote_properties[num_props]); 9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, remote_device_properties_cb, 9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_STATUS_SUCCESS, bd_addr, num_props, remote_properties); 9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function execute_storage_request 9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Executes adapter storage request in BTIF context 9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void execute_storage_request(UINT16 event, char *p_param) 10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint8_t is_local; 10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int num_entries = 0; 10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_status_t status = BT_STATUS_SUCCESS; 10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1008e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_EVENT("execute storage request event : %d", event); 10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(event) 10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_ADAPTER_WRITE: 10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *p_req = (btif_storage_req_t*)p_param; 10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t *p_prop = &(p_req->write_req.prop); 1016e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_EVENT("type: %d, len %d, 0x%x", p_prop->type, 10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_prop->len, p_prop->val); 10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = btif_storage_set_adapter_property(p_prop); 10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, status, 1, p_prop); 10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } break; 10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_ADAPTER_READ: 10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *p_req = (btif_storage_req_t*)p_param; 10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char buf[512]; 10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t prop; 10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.type = p_req->read_req.type; 10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.val = (void*)buf; 10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.len = sizeof(buf); 10319546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta if (prop.type == BT_PROPERTY_LOCAL_LE_FEATURES) 10329546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta { 10330c4ec0dae97523cadc9207e98c4a1edff7e2e7cfPrerepa Viswanadham #if (BLE_INCLUDED == TRUE) 10349546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta tBTM_BLE_VSC_CB cmn_vsc_cb; 10359546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta bt_local_le_features_t local_le_features; 10369546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta 10379546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta /* LE features are not stored in storage. Should be retrived from stack */ 10389546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta BTM_BleGetVendorCapabilities(&cmn_vsc_cb); 10399546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta local_le_features.local_privacy_enabled = BTM_BleLocalPrivacyEnabled(); 10409546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta 10419546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta prop.len = sizeof (bt_local_le_features_t); 10429546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta if (cmn_vsc_cb.filter_support == 1) 10439546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta local_le_features.max_adv_filter_supported = cmn_vsc_cb.max_filter; 10449546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta else 10459546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta local_le_features.max_adv_filter_supported = 0; 10469546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta local_le_features.max_adv_instance = cmn_vsc_cb.adv_inst_max; 10479546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta local_le_features.max_irk_list_size = cmn_vsc_cb.max_irk_list_sz; 10489546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta local_le_features.rpa_offload_supported = cmn_vsc_cb.rpa_offloading; 1049d773c2cfd3675aaec431a42b79b26b24e0555ed9Satya Calloji local_le_features.scan_result_storage_size_hibyte = 1050d773c2cfd3675aaec431a42b79b26b24e0555ed9Satya Calloji (cmn_vsc_cb.tot_scan_results_strg >> 8) & (0xFF); 1051d773c2cfd3675aaec431a42b79b26b24e0555ed9Satya Calloji local_le_features.scan_result_storage_size_lobyte = 1052d773c2cfd3675aaec431a42b79b26b24e0555ed9Satya Calloji (cmn_vsc_cb.tot_scan_results_strg) & (0xFF); 1053e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji local_le_features.activity_energy_info_supported = cmn_vsc_cb.energy_support; 10549546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta memcpy(prop.val, &local_le_features, prop.len); 10550c4ec0dae97523cadc9207e98c4a1edff7e2e7cfPrerepa Viswanadham #endif 10569546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta } 10579546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta else 10589546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta { 10599546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta status = btif_storage_get_adapter_property(&prop); 10609546abf9fc4400853803ee220482ae63e63f0d9dGanesh Ganapathi Batta } 10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, status, 1, &prop); 10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } break; 10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_ADAPTER_READ_ALL: 10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = btif_in_get_adapter_properties(); 10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } break; 10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_NOTIFY_STATUS: 10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, status, 0, NULL); 10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } break; 10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 1075e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("%s invalid event id (%d)", __FUNCTION__, event); 10765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void execute_storage_remote_request(UINT16 event, char *p_param) 10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_status_t status = BT_STATUS_FAIL; 10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t prop; 10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1085e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_EVENT("execute storage remote request event : %d", event); 10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (event) 10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_REMOTE_READ: 10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char buf[1024]; 10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *p_req = (btif_storage_req_t*)p_param; 10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.type = p_req->read_req.type; 10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.val = (void*) buf; 10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.len = sizeof(buf); 10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = btif_storage_get_remote_device_property(&(p_req->read_req.bd_addr), 10985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &prop); 10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, remote_device_properties_cb, 11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status, &(p_req->read_req.bd_addr), 1, &prop); 11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project }break; 11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_REMOTE_WRITE: 11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *p_req = (btif_storage_req_t*)p_param; 11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = btif_storage_set_remote_device_property(&(p_req->write_req.bd_addr), 11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &(p_req->write_req.prop)); 11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project }break; 11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_REMOTE_READ_ALL: 11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *p_req = (btif_storage_req_t*)p_param; 11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_in_get_remote_device_properties(&p_req->read_req.bd_addr); 11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project }break; 11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_adapter_properties_evt(bt_status_t status, uint32_t num_props, 11175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t *p_props) 11185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, 11205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status, num_props, p_props); 11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_remote_properties_evt(bt_status_t status, bt_bdaddr_t *remote_addr, 11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t num_props, bt_property_t *p_props) 11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, remote_device_properties_cb, 11275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status, remote_addr, num_props, p_props); 11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_in_storage_request_copy_cb 11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Switch context callback function to perform the deep copy for 11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** both the adapter and remote_device property API 11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_in_storage_request_copy_cb(UINT16 event, 11415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char *p_new_buf, char *p_old_buf) 11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *new_req = (btif_storage_req_t*)p_new_buf; 11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *old_req = (btif_storage_req_t*)p_old_buf; 11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1146e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_EVENT("%s", __FUNCTION__); 11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (event) 11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_REMOTE_WRITE: 11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_ADAPTER_WRITE: 11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(new_req->write_req.bd_addr.address, old_req->write_req.bd_addr.address); 11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Copy the member variables one at a time */ 11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project new_req->write_req.prop.type = old_req->write_req.prop.type; 11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project new_req->write_req.prop.len = old_req->write_req.prop.len; 11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project new_req->write_req.prop.val = (UINT8 *)(p_new_buf + sizeof(btif_storage_req_t)); 11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(new_req->write_req.prop.val, old_req->write_req.prop.val, 11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project old_req->write_req.prop.len); 11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project }break; 11615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_adapter_properties 11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Fetch all available properties (local & remote) 11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_get_adapter_properties(void) 11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1176e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_EVENT("%s", __FUNCTION__); 11775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 11795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 11805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_request, 11825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STORAGE_ADAPTER_READ_ALL, 11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project NULL, 0, NULL); 11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_adapter_property 11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Fetches property value from local cache 11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_get_adapter_property(bt_property_type_t type) 11975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t req; 11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1200e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_EVENT("%s %d", __FUNCTION__, type); 12015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Allow get_adapter_property only for BDADDR and BDNAME if BT is disabled */ 12035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled() && (type != BT_PROPERTY_BDADDR) && (type != BT_PROPERTY_BDNAME)) 12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&(req.read_req.bd_addr), 0, sizeof(bt_bdaddr_t)); 12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project req.read_req.type = type; 12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_request, 12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STORAGE_ADAPTER_READ, 12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)&req, sizeof(btif_storage_req_t), NULL); 12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_set_adapter_property 12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Updates core stack with property value and stores it in 12195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** local cache 12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_set_adapter_property(const bt_property_t *property) 12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t req; 12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_status_t status = BT_STATUS_SUCCESS; 12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int storage_req_id = BTIF_CORE_STORAGE_NOTIFY_STATUS; /* default */ 12305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char bd_name[BTM_MAX_LOC_BD_NAME_LEN +1]; 12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 name_len = 0; 12325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1233e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_EVENT("btif_set_adapter_property type: %d, len %d, 0x%x", 12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project property->type, property->len, property->val); 12355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 12385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(property->type) 12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_BDNAME: 12425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project name_len = property->len > BTM_MAX_LOC_BD_NAME_LEN ? BTM_MAX_LOC_BD_NAME_LEN: 12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project property->len; 12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(bd_name,property->val, name_len); 12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd_name[name_len] = '\0'; 12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1248e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_EVENT("set property name : %s", (char *)bd_name); 12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_DmSetDeviceName((char *)bd_name); 12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project storage_req_id = BTIF_CORE_STORAGE_ADAPTER_WRITE; 12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_ADAPTER_SCAN_MODE: 12575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_scan_mode_t mode = *(bt_scan_mode_t*)property->val; 12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_DISC disc_mode; 12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_CONN conn_mode; 12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(mode) 12635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_SCAN_MODE_NONE: 12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project disc_mode = BTA_DM_NON_DISC; 12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project conn_mode = BTA_DM_NON_CONN; 12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_SCAN_MODE_CONNECTABLE: 12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project disc_mode = BTA_DM_NON_DISC; 12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project conn_mode = BTA_DM_CONN; 12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE: 12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project disc_mode = BTA_DM_GENERAL_DISC; 12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project conn_mode = BTA_DM_CONN; 12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 1280e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("invalid scan mode (0x%x)", mode); 12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_PARM_INVALID; 12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1284e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_EVENT("set property scan mode : %x", mode); 12855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_DmSetVisibility(disc_mode, conn_mode, BTA_DM_IGNORE, BTA_DM_IGNORE); 12875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project storage_req_id = BTIF_CORE_STORAGE_ADAPTER_WRITE; 12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT: 12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Nothing to do beside store the value in NV. Java 12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project will change the SCAN_MODE property after setting timeout, 12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if required */ 12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project storage_req_id = BTIF_CORE_STORAGE_ADAPTER_WRITE; 12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_BDADDR: 13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_UUIDS: 13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_ADAPTER_BONDED_DEVICES: 13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_REMOTE_FRIENDLY_NAME: 13035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* no write support through HAL, these properties are only populated from BTA events */ 13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BT_STATUS_FAIL; 13055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 1307e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("btif_get_adapter_property : invalid type %d", 13085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project property->type); 13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BT_STATUS_FAIL; 13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 13115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (storage_req_id != BTIF_CORE_STORAGE_NO_ACTION) 13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int btif_status; 13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* pass on to storage for updating local database */ 13175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&(req.write_req.bd_addr), 0, sizeof(bt_bdaddr_t)); 13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&(req.write_req.prop), property, sizeof(bt_property_t)); 13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_request, 13225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project storage_req_id, 13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)&req, 13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(btif_storage_req_t)+property->len, 13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_in_storage_request_copy_cb); 13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_remote_device_property 13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Fetches the remote device property from the NVRAM 13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_get_remote_device_property(bt_bdaddr_t *remote_addr, 13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_type_t type) 13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t req; 13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&(req.read_req.bd_addr), remote_addr, sizeof(bt_bdaddr_t)); 13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project req.read_req.type = type; 13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_remote_request, 13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STORAGE_REMOTE_READ, 13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)&req, sizeof(btif_storage_req_t), 13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project NULL); 13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_remote_device_properties 13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Fetches all the remote device properties from NVRAM 13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 13645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_get_remote_device_properties(bt_bdaddr_t *remote_addr) 13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t req; 13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&(req.read_req.bd_addr), remote_addr, sizeof(bt_bdaddr_t)); 13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_remote_request, 13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STORAGE_REMOTE_READ_ALL, 13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)&req, sizeof(btif_storage_req_t), 13775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project NULL); 13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_set_remote_device_property 13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Writes the remote device property to NVRAM. 13855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Currently, BT_PROPERTY_REMOTE_FRIENDLY_NAME is the only 13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** remote device property that can be set 13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_set_remote_device_property(bt_bdaddr_t *remote_addr, 13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const bt_property_t *property) 13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t req; 13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&(req.write_req.bd_addr), remote_addr, sizeof(bt_bdaddr_t)); 14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&(req.write_req.prop), property, sizeof(bt_property_t)); 14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_remote_request, 14035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STORAGE_REMOTE_WRITE, 14045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)&req, 14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(btif_storage_req_t)+property->len, 14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_in_storage_request_copy_cb); 14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_remote_service_record 14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Looks up the service matching uuid on the remote device 14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** and fetches the SCN and service_name if the UUID is found 14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_get_remote_service_record(bt_bdaddr_t *remote_addr, 14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_uuid_t *uuid) 14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_dm_get_remote_service_record(remote_addr, uuid); 14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_enabled_services_mask 14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Fetches currently enabled services 14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns tBTA_SERVICE_MASK 14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_SERVICE_MASK btif_get_enabled_services_mask(void) 14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_enabled_services; 14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_enable_service 14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Enables the service 'service_ID' to the service_mask. 14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Upon BT enable, BTIF core shall invoke the BTA APIs to 14515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** enable the profiles 14525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_enable_service(tBTA_SERVICE_ID service_id) 14575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_SERVICE_ID *p_id = &service_id; 14595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If BT is enabled, we need to switch to BTIF context and trigger the 14615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * enable for that profile 14625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Otherwise, we just set the flag. On BT_Enable, the DM will trigger 14645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * enable for the profiles that have been enabled */ 14655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_enabled_services |= (1 << service_id); 14675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1468e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s: current services:0x%x", __FUNCTION__, btif_enabled_services); 14695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_is_enabled()) 14715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_transfer_context(btif_dm_execute_service_request, 14735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_DM_ENABLE_SERVICE, 14745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)p_id, sizeof(tBTA_SERVICE_ID), NULL); 14755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 14785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_disable_service 14825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Disables the service 'service_ID' to the service_mask. 14845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Upon BT disable, BTIF core shall invoke the BTA APIs to 14855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** disable the profiles 14865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 14885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_disable_service(tBTA_SERVICE_ID service_id) 14915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_SERVICE_ID *p_id = &service_id; 14935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If BT is enabled, we need to switch to BTIF context and trigger the 14955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * disable for that profile so that the appropriate uuid_property_changed will 14965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * be triggerred. Otherwise, we just need to clear the service_id in the mask 14975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 14985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_enabled_services &= (tBTA_SERVICE_MASK)(~(1<<service_id)); 15005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1501e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s: Current Services:0x%x", __FUNCTION__, btif_enabled_services); 15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_is_enabled()) 15045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_transfer_context(btif_dm_execute_service_request, 15065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_DM_DISABLE_SERVICE, 15075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)p_id, sizeof(tBTA_SERVICE_ID), NULL); 15085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 15115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1512bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu 1513bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu/******************************************************************************* 1514bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** 1515bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** Function btif_config_hci_snoop_log 1516bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** 1517bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** Description enable or disable HCI snoop log 1518bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** 1519bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** Returns bt_status_t 1520bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** 1521bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu*******************************************************************************/ 1522bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xubt_status_t btif_config_hci_snoop_log(uint8_t enable) 1523bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu{ 1524bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu bte_main_config_hci_logging(enable != 0, 1525bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu btif_core_state == BTIF_CORE_STATE_DISABLED); 1526bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu return BT_STATUS_SUCCESS; 1527bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu} 1528