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