btif_core.c revision 6c65c2f3a372885a976c14b3ccacd0b5a5fbb8bd
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 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_VERBOSE0("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 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_VERBOSE2("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; 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG0("btif task starting"); 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_associate_evt(); 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(;;) 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* wait for specified events */ 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event = GKI_wait(0xFFFF, 0); 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Wait for the trigger to init chip and stack. This trigger will 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * be received by btu_task once the UART is opened and ready 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event == BT_EVT_TRIGGER_STACK_INIT) 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG0("btif_task: received trigger stack init event"); 295ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta #if (BLE_INCLUDED == TRUE) 296ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_dm_load_ble_local_keys(); 297ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta #endif 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_EnableBluetooth(bte_dm_evt); 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 30148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao /* 30248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao * Failed to initialize controller hardware, reset state and bring 30348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao * down all threads 30448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao */ 30548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao if (event == BT_EVT_HARDWARE_INIT_FAIL) 30648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao { 30748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao BTIF_TRACE_DEBUG0("btif_task: hardware init failed"); 30848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao bte_main_disable(); 30948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao btif_queue_release(); 31048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao GKI_task_self_cleanup(BTIF_TASK); 31148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao bte_main_shutdown(); 31248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao btif_dut_mode = 0; 31348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao btif_core_state = BTIF_CORE_STATE_DISABLED; 31448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao HAL_CBACK(bt_hal_cbacks,adapter_state_changed_cb,BT_STATE_OFF); 31548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao break; 31648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao } 31748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & EVENT_MASK(GKI_SHUTDOWN_EVT)) 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(event & TASK_MBOX_1_EVT_MASK) 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while((p_msg = GKI_read_mbox(BTU_BTIF_MBOX)) != NULL) 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_VERBOSE1("btif task fetched event %x", p_msg->event); 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (p_msg->event) 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_CONTEXT_SWITCH_EVT: 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_context_switched(p_msg); 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR1("unhandled btif event (%d)", p_msg->event & BT_EVT_MASK); 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_msg); 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_disassociate_evt(); 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG0("btif task exiting"); 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 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** Function btif_sendmsg 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Sends msg to BTIF task 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_sendmsg(void *p_msg) 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_send_msg(BTIF_TASK, BTU_BTIF_MBOX, p_msg); 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_fetch_local_bdaddr(bt_bdaddr_t *local_addr) 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char val[256]; 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint8_t valid_bda = FALSE; 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int val_size = 0; 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const uint8_t null_bdaddr[BD_ADDR_LEN] = {0,0,0,0,0,0}; 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Get local bdaddr storage path from property */ 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (property_get(PROPERTY_BT_BDADDR_PATH, val, NULL)) 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int addr_fd; 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("local bdaddr is stored in %s", val); 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((addr_fd = open(val, O_RDONLY)) != -1) 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(val, 0, sizeof(val)); 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project read(addr_fd, val, FACTORY_BT_BDADDR_STORAGE_LEN); 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project str2bd(val, local_addr); 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If this is not a reserved/special bda, then use it */ 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (memcmp(local_addr->address, null_bdaddr, BD_ADDR_LEN) != 0) 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project valid_bda = TRUE; 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG6("Got Factory BDA %02X:%02X:%02X:%02X:%02X:%02X", 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[0], local_addr->address[1], local_addr->address[2], 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[3], local_addr->address[4], local_addr->address[5]); 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project close(addr_fd); 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!valid_bda) 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project val_size = sizeof(val); 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(btif_config_get_str("Local", "Adapter", "Address", val, &val_size)) 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project str2bd(val, local_addr); 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("local bdaddr from bt_config.xml is %s", val); 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* No factory BDADDR found. Look for previously generated random BDA */ 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((!valid_bda) && \ 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (property_get(PERSIST_BDADDR_PROPERTY, val, NULL))) 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project str2bd(val, local_addr); 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project valid_bda = TRUE; 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG6("Got prior random BDA %02X:%02X:%02X:%02X:%02X:%02X", 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[0], local_addr->address[1], local_addr->address[2], 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[3], local_addr->address[4], local_addr->address[5]); 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Generate new BDA if necessary */ 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!valid_bda) 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr; 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Seed the random number generator */ 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project srand((unsigned int) (time(0))); 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* No autogen BDA. Generate one now. */ 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[0] = 0x22; 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[1] = 0x22; 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[2] = (uint8_t) ((rand() >> 8) & 0xFF); 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[3] = (uint8_t) ((rand() >> 8) & 0xFF); 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[4] = (uint8_t) ((rand() >> 8) & 0xFF); 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[5] = (uint8_t) ((rand() >> 8) & 0xFF); 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Convert to ascii, and store as a persistent property */ 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(local_addr, &bdstr); 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG2("No preset BDA. Generating BDA: %s for prop %s", 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)bdstr, PERSIST_BDADDR_PROPERTY); 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (property_set(PERSIST_BDADDR_PROPERTY, (char*)bdstr) < 0) 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR1("Failed to set random BDA in prop %s",PERSIST_BDADDR_PROPERTY); 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //save the bd address to config file 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr; 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(local_addr, &bdstr); 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project val_size = sizeof(val); 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_config_get_str("Local", "Adapter", "Address", val, &val_size)) 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (strcmp(bdstr, val) ==0) 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project // BDA is already present in the config file. 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_str("Local", "Adapter", "Address", bdstr); 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_save(); 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** btif core api functions 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 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** Function btif_init_bluetooth 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Creates BTIF task and prepares BT scheduler for startup 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_init_bluetooth() 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 status; 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_init(); 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_boot_entry(); 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* As part of the init, fetch the local BD ADDR */ 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&btif_local_bd_addr, 0, sizeof(bt_bdaddr_t)); 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_fetch_local_bdaddr(&btif_local_bd_addr); 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* start btif task */ 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = GKI_create_task(btif_task, BTIF_TASK, BTIF_TASK_STR, 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT16 *) ((UINT8 *)btif_task_stack + BTIF_TASK_STACK_SIZE), 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(btif_task_stack)); 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status != GKI_SUCCESS) 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_FAIL; 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_associate_evt 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Event indicating btif_task is up 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Attach btif_task to JVM 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_associate_evt(void) 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("%s: notify ASSOCIATE_JVM", __FUNCTION__); 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, thread_evt_cb, ASSOCIATE_JVM); 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 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** Function btif_enable_bluetooth 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Performs chip power on and kickstarts OS scheduler 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_enable_bluetooth(void) 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG0("BTIF ENABLE BLUETOOTH"); 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_core_state != BTIF_CORE_STATE_DISABLED) 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ALOGD("not disabled\n"); 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_DONE; 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_ENABLING; 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Create the GKI tasks and run them */ 53848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao bte_main_enable(); 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 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** Function btif_enable_bluetooth_evt 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Event indicating bluetooth enable is completed 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Notifies HAL user with updated adapter state 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_enable_bluetooth_evt(tBTA_STATUS status, BD_ADDR local_bd) 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t bd_addr; 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr; 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(bd_addr.address, local_bd); 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG3("%s: status %d, local bd [%s]", __FUNCTION__, status, 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(&bd_addr, &bdstr)); 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bdcmp(btif_local_bd_addr.address,local_bd)) 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t buf; 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t prop; 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /** 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * The Controller's BDADDR does not match to the BTIF's initial BDADDR! 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * This could be because the factory BDADDR was stored separatley in 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * the Controller's non-volatile memory rather than in device's file 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * system. 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project **/ 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_WARNING0("***********************************************"); 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_WARNING6("BTIF init BDA was %02X:%02X:%02X:%02X:%02X:%02X", 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_local_bd_addr.address[0], btif_local_bd_addr.address[1], 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_local_bd_addr.address[2], btif_local_bd_addr.address[3], 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_local_bd_addr.address[4], btif_local_bd_addr.address[5]); 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_WARNING6("Controller BDA is %02X:%02X:%02X:%02X:%02X:%02X", 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_bd[0], local_bd[1], local_bd[2], 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_bd[3], local_bd[4], local_bd[5]); 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_WARNING0("***********************************************"); 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(btif_local_bd_addr.address, local_bd); 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //save the bd address to config file 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(&btif_local_bd_addr, &buf); 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_str("Local", "Adapter", "Address", buf); 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_save(); 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //fire HAL callback for property change 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(buf, &btif_local_bd_addr, sizeof(bt_bdaddr_t)); 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.type = BT_PROPERTY_BDADDR; 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.val = (void*)buf; 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.len = sizeof(bt_bdaddr_t); 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, BT_STATUS_SUCCESS, 1, &prop); 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_postload_cfg(); 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HCILP_INCLUDED) && HCILP_INCLUDED == TRUE) 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_enable_lpm(TRUE); 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* add passing up bd address as well ? */ 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* callback to HAL */ 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status == BTA_SUCCESS) 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* initialize a2dp service */ 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_av_init(); 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* init rfcomm & l2cap api */ 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_sock_init(); 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* init pan */ 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_pan_init(); 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* load did configuration */ 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_load_did_conf(BTE_DID_CONF_FILE); 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef BTIF_DM_OOB_TEST 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_dm_load_local_oob(); 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* now fully enabled, update state */ 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_ENABLED; 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_state_changed_cb, BT_STATE_ON); 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* cleanup rfcomm & l2cap api */ 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_sock_cleanup(); 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_pan_cleanup(); 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* we failed to enable, reset state */ 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_DISABLED; 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_state_changed_cb, BT_STATE_OFF); 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_disable_bluetooth 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Inititates shutdown of Bluetooth system. 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Any active links will be dropped and device entering 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** non connectable/discoverable mode 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_disable_bluetooth(void) 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_STATUS status; 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR0("btif_disable_bluetooth : not yet enabled"); 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG0("BTIF DISABLE BLUETOOTH"); 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_dm_on_disable(); 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_DISABLING; 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* cleanup rfcomm & l2cap api */ 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_sock_cleanup(); 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_pan_cleanup(); 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTA_DisableBluetooth(); 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_flush(); 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status != BTA_SUCCESS) 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR1("disable bt failed (%d)", status); 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* reset the original state to allow attempting disable again */ 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_ENABLED; 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_FAIL; 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_disable_bluetooth_evt 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Event notifying BT disable is now complete. 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Terminates main stack tasks and notifies HAL 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** user with updated BT state. 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_disable_bluetooth_evt(void) 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("%s", __FUNCTION__); 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HCILP_INCLUDED) && HCILP_INCLUDED == TRUE) 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_enable_lpm(FALSE); 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_disable(); 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* update local state */ 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_DISABLED; 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* callback to HAL */ 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_state_changed_cb, BT_STATE_OFF); 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_shutdown_pending) 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("%s: calling btif_shutdown_bluetooth", __FUNCTION__); 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_shutdown_bluetooth(); 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 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** Function btif_shutdown_bluetooth 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Finalizes BT scheduler shutdown and terminates BTIF 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** task. 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_shutdown_bluetooth(void) 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("%s", __FUNCTION__); 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7416c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu if (btif_core_state == BTIF_CORE_STATE_DISABLING) 7426c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu { 7436c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu BTIF_TRACE_WARNING0("shutdown during disabling"); 7446c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu /* shutdown called before disabling is done */ 7456c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu btif_shutdown_pending = 1; 7466c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu return BT_STATUS_NOT_READY; 7476c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu } 7486c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu 7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_is_enabled()) 7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_WARNING0("shutdown while still enabled, initiate disable"); 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* shutdown called prior to disabling, initiate disable */ 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_disable_bluetooth(); 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_shutdown_pending = 1; 7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_shutdown_pending = 0; 7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 76148ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao if (btif_core_state == BTIF_CORE_STATE_ENABLING) 76248ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao { 76348ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao // Java layer abort BT ENABLING, could be due to ENABLE TIMEOUT 76448ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao // Direct call from cleanup()@bluetooth.c 76548ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao // bring down HCI/Vendor lib 76648ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao bte_main_disable(); 76748ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao btif_core_state = BTIF_CORE_STATE_DISABLED; 76848ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao HAL_CBACK(bt_hal_cbacks, adapter_state_changed_cb, BT_STATE_OFF); 76948ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao } 77048ebe2c6928d8fd4dc97c8adb138c3440714dc89YK Jeffrey Chao 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_destroy_task(BTIF_TASK); 7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_queue_release(); 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_shutdown(); 7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_dut_mode = 0; 7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7776c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu bt_utils_cleanup(); 7786c65c2f3a372885a976c14b3ccacd0b5a5fbb8bdZhihai Xu 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("%s done", __FUNCTION__); 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 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** Function btif_disassociate_evt 7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Event indicating btif_task is going down 7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Detach btif_task to JVM 7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_disassociate_evt(void) 7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("%s: notify DISASSOCIATE_JVM", __FUNCTION__); 7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, thread_evt_cb, DISASSOCIATE_JVM); 8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* shutdown complete, all events notified and we reset HAL callbacks */ 8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hal_cbacks = NULL; 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/**************************************************************************** 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTIF Test Mode APIs 8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_dut_mode_cback 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback invoked on completion of vendor specific test mode command 8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_dut_mode_cback( tBTM_VSC_CMPL *p ) 8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* For now nothing to be done. */ 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_dut_mode_configure 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Configure Test Mode - 'enable' to 1 puts the device in test mode and 0 exits 8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** test mode 8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS on success 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_dut_mode_configure(uint8_t enable) 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("%s", __FUNCTION__); 8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_core_state != BTIF_CORE_STATE_ENABLED) { 8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR0("btif_dut_mode_configure : Bluetooth not enabled"); 8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_dut_mode = enable; 8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (enable == 1) { 8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_EnableTestMode(); 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } else { 8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_DisableTestMode(); 8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_dut_mode_send 8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Sends a HCI Vendor specific command to the controller 8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS on success 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_dut_mode_send(uint16_t opcode, uint8_t *buf, uint8_t len) 8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* TODO: Check that opcode is a vendor command group */ 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("%s", __FUNCTION__); 8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_dut_mode()) { 8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR0("Bluedroid HAL needs to be init with test_mode set to 1."); 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_FAIL; 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_VendorSpecificCommand(opcode, len, buf, btif_dut_mode_cback); 8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 875ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** btif api adapter property functions 8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_in_get_adapter_properties(void) 8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t properties[6]; 8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t num_props; 8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t addr; 8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdname_t name; 8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_scan_mode_t mode; 8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t disc_timeout; 8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t bonded_devices[BTM_SEC_MAX_DEVICE_RECORDS]; 8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_uuid_t local_uuids[BT_MAX_NUM_UUIDS]; 8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props = 0; 8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BD_ADDR */ 8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_BDADDR, 8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(addr), &addr); 8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BD_NAME */ 9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_BDNAME, 9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(name), &name); 9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* SCAN_MODE */ 9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_ADAPTER_SCAN_MODE, 9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(mode), &mode); 9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* DISC_TIMEOUT */ 9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT, 9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(disc_timeout), &disc_timeout); 9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BONDED_DEVICES */ 9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_ADAPTER_BONDED_DEVICES, 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(bonded_devices), bonded_devices); 9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* LOCAL UUIDs */ 9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_UUIDS, 9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(local_uuids), local_uuids); 9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, 9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_STATUS_SUCCESS, num_props, properties); 9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_in_get_remote_device_properties(bt_bdaddr_t *bd_addr) 9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t remote_properties[8]; 9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t num_props = 0; 9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdname_t name, alias; 9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t cod, devtype; 9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_uuid_t remote_uuids[BT_MAX_NUM_UUIDS]; 9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(remote_properties, 0, sizeof(remote_properties)); 9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&remote_properties[num_props], BT_PROPERTY_BDNAME, 9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(name), &name); 9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_remote_device_property(bd_addr, 9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &remote_properties[num_props]); 9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&remote_properties[num_props], BT_PROPERTY_REMOTE_FRIENDLY_NAME, 9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(alias), &alias); 9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_remote_device_property(bd_addr, 9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &remote_properties[num_props]); 9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&remote_properties[num_props], BT_PROPERTY_CLASS_OF_DEVICE, 9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(cod), &cod); 9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_remote_device_property(bd_addr, 9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &remote_properties[num_props]); 9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&remote_properties[num_props], BT_PROPERTY_TYPE_OF_DEVICE, 9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(devtype), &devtype); 9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_remote_device_property(bd_addr, 9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &remote_properties[num_props]); 9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&remote_properties[num_props], BT_PROPERTY_UUIDS, 9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(remote_uuids), remote_uuids); 9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_remote_device_property(bd_addr, 9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &remote_properties[num_props]); 9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, remote_device_properties_cb, 9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_STATUS_SUCCESS, bd_addr, num_props, remote_properties); 9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function execute_storage_request 9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Executes adapter storage request in BTIF context 9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void execute_storage_request(UINT16 event, char *p_param) 9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint8_t is_local; 9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int num_entries = 0; 9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_status_t status = BT_STATUS_SUCCESS; 9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT1("execute storage request event : %d", event); 10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(event) 10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_ADAPTER_WRITE: 10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *p_req = (btif_storage_req_t*)p_param; 10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t *p_prop = &(p_req->write_req.prop); 10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT3("type: %d, len %d, 0x%x", p_prop->type, 10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_prop->len, p_prop->val); 10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = btif_storage_set_adapter_property(p_prop); 10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, status, 1, p_prop); 10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } break; 10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_ADAPTER_READ: 10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *p_req = (btif_storage_req_t*)p_param; 10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char buf[512]; 10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t prop; 10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.type = p_req->read_req.type; 10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.val = (void*)buf; 10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.len = sizeof(buf); 10235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = btif_storage_get_adapter_property(&prop); 10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, status, 1, &prop); 10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } break; 10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_ADAPTER_READ_ALL: 10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = btif_in_get_adapter_properties(); 10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } break; 10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_NOTIFY_STATUS: 10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, status, 0, NULL); 10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } break; 10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR2("%s invalid event id (%d)", __FUNCTION__, event); 10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void execute_storage_remote_request(UINT16 event, char *p_param) 10445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_status_t status = BT_STATUS_FAIL; 10465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t prop; 10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT1("execute storage remote request event : %d", event); 10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (event) 10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_REMOTE_READ: 10535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char buf[1024]; 10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *p_req = (btif_storage_req_t*)p_param; 10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.type = p_req->read_req.type; 10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.val = (void*) buf; 10585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.len = sizeof(buf); 10595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = btif_storage_get_remote_device_property(&(p_req->read_req.bd_addr), 10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &prop); 10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, remote_device_properties_cb, 10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status, &(p_req->read_req.bd_addr), 1, &prop); 10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project }break; 10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_REMOTE_WRITE: 10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *p_req = (btif_storage_req_t*)p_param; 10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = btif_storage_set_remote_device_property(&(p_req->write_req.bd_addr), 10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &(p_req->write_req.prop)); 10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project }break; 10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_REMOTE_READ_ALL: 10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *p_req = (btif_storage_req_t*)p_param; 10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_in_get_remote_device_properties(&p_req->read_req.bd_addr); 10755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project }break; 10765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_adapter_properties_evt(bt_status_t status, uint32_t num_props, 10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t *p_props) 10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, 10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status, num_props, p_props); 10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_remote_properties_evt(bt_status_t status, bt_bdaddr_t *remote_addr, 10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t num_props, bt_property_t *p_props) 10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, remote_device_properties_cb, 10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status, remote_addr, num_props, p_props); 10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_in_storage_request_copy_cb 10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Switch context callback function to perform the deep copy for 10985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** both the adapter and remote_device property API 10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_in_storage_request_copy_cb(UINT16 event, 11045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char *p_new_buf, char *p_old_buf) 11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *new_req = (btif_storage_req_t*)p_new_buf; 11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *old_req = (btif_storage_req_t*)p_old_buf; 11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT1("%s", __FUNCTION__); 11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (event) 11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_REMOTE_WRITE: 11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_ADAPTER_WRITE: 11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(new_req->write_req.bd_addr.address, old_req->write_req.bd_addr.address); 11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Copy the member variables one at a time */ 11175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project new_req->write_req.prop.type = old_req->write_req.prop.type; 11185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project new_req->write_req.prop.len = old_req->write_req.prop.len; 11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project new_req->write_req.prop.val = (UINT8 *)(p_new_buf + sizeof(btif_storage_req_t)); 11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(new_req->write_req.prop.val, old_req->write_req.prop.val, 11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project old_req->write_req.prop.len); 11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project }break; 11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_adapter_properties 11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Fetch all available properties (local & remote) 11325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_get_adapter_properties(void) 11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT1("%s", __FUNCTION__); 11405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 11435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_request, 11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STORAGE_ADAPTER_READ_ALL, 11465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project NULL, 0, NULL); 11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_adapter_property 11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Fetches property value from local cache 11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_get_adapter_property(bt_property_type_t type) 11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t req; 11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT2("%s %d", __FUNCTION__, type); 11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Allow get_adapter_property only for BDADDR and BDNAME if BT is disabled */ 11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled() && (type != BT_PROPERTY_BDADDR) && (type != BT_PROPERTY_BDNAME)) 11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&(req.read_req.bd_addr), 0, sizeof(bt_bdaddr_t)); 11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project req.read_req.type = type; 11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_request, 11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STORAGE_ADAPTER_READ, 11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)&req, sizeof(btif_storage_req_t), NULL); 11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_set_adapter_property 11805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Updates core stack with property value and stores it in 11825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** local cache 11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_set_adapter_property(const bt_property_t *property) 11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t req; 11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_status_t status = BT_STATUS_SUCCESS; 11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int storage_req_id = BTIF_CORE_STORAGE_NOTIFY_STATUS; /* default */ 11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char bd_name[BTM_MAX_LOC_BD_NAME_LEN +1]; 11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 name_len = 0; 11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT3("btif_set_adapter_property type: %d, len %d, 0x%x", 11975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project property->type, property->len, property->val); 11985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 12005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 12015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(property->type) 12035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_BDNAME: 12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project name_len = property->len > BTM_MAX_LOC_BD_NAME_LEN ? BTM_MAX_LOC_BD_NAME_LEN: 12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project property->len; 12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(bd_name,property->val, name_len); 12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd_name[name_len] = '\0'; 12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT1("set property name : %s", (char *)bd_name); 12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_DmSetDeviceName((char *)bd_name); 12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project storage_req_id = BTIF_CORE_STORAGE_ADAPTER_WRITE; 12165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_ADAPTER_SCAN_MODE: 12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_scan_mode_t mode = *(bt_scan_mode_t*)property->val; 12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_DISC disc_mode; 12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_CONN conn_mode; 12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(mode) 12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_SCAN_MODE_NONE: 12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project disc_mode = BTA_DM_NON_DISC; 12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project conn_mode = BTA_DM_NON_CONN; 12305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_SCAN_MODE_CONNECTABLE: 12335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project disc_mode = BTA_DM_NON_DISC; 12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project conn_mode = BTA_DM_CONN; 12355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE: 12385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project disc_mode = BTA_DM_GENERAL_DISC; 12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project conn_mode = BTA_DM_CONN; 12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR1("invalid scan mode (0x%x)", mode); 12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_PARM_INVALID; 12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT1("set property scan mode : %x", mode); 12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_DmSetVisibility(disc_mode, conn_mode, BTA_DM_IGNORE, BTA_DM_IGNORE); 12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project storage_req_id = BTIF_CORE_STORAGE_ADAPTER_WRITE; 12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT: 12555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Nothing to do beside store the value in NV. Java 12575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project will change the SCAN_MODE property after setting timeout, 12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if required */ 12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project storage_req_id = BTIF_CORE_STORAGE_ADAPTER_WRITE; 12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_BDADDR: 12635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_UUIDS: 12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_ADAPTER_BONDED_DEVICES: 12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_REMOTE_FRIENDLY_NAME: 12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* no write support through HAL, these properties are only populated from BTA events */ 12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BT_STATUS_FAIL; 12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR1("btif_get_adapter_property : invalid type %d", 12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project property->type); 12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BT_STATUS_FAIL; 12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (storage_req_id != BTIF_CORE_STORAGE_NO_ACTION) 12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int btif_status; 12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* pass on to storage for updating local database */ 12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&(req.write_req.bd_addr), 0, sizeof(bt_bdaddr_t)); 12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&(req.write_req.prop), property, sizeof(bt_property_t)); 12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_request, 12855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project storage_req_id, 12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)&req, 12875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(btif_storage_req_t)+property->len, 12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_in_storage_request_copy_cb); 12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_remote_device_property 12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Fetches the remote device property from the NVRAM 13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_get_remote_device_property(bt_bdaddr_t *remote_addr, 13055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_type_t type) 13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t req; 13085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 13115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&(req.read_req.bd_addr), remote_addr, sizeof(bt_bdaddr_t)); 13135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project req.read_req.type = type; 13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_remote_request, 13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STORAGE_REMOTE_READ, 13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)&req, sizeof(btif_storage_req_t), 13175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project NULL); 13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_remote_device_properties 13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Fetches all the remote device properties from NVRAM 13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_get_remote_device_properties(bt_bdaddr_t *remote_addr) 13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t req; 13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&(req.read_req.bd_addr), remote_addr, sizeof(bt_bdaddr_t)); 13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_remote_request, 13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STORAGE_REMOTE_READ_ALL, 13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)&req, sizeof(btif_storage_req_t), 13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project NULL); 13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_set_remote_device_property 13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Writes the remote device property to NVRAM. 13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Currently, BT_PROPERTY_REMOTE_FRIENDLY_NAME is the only 13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** remote device property that can be set 13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_set_remote_device_property(bt_bdaddr_t *remote_addr, 13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const bt_property_t *property) 13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t req; 13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&(req.write_req.bd_addr), remote_addr, sizeof(bt_bdaddr_t)); 13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&(req.write_req.prop), property, sizeof(bt_property_t)); 13645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_remote_request, 13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STORAGE_REMOTE_WRITE, 13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)&req, 13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(btif_storage_req_t)+property->len, 13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_in_storage_request_copy_cb); 13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_remote_service_record 13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Looks up the service matching uuid on the remote device 13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** and fetches the SCN and service_name if the UUID is found 13795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_get_remote_service_record(bt_bdaddr_t *remote_addr, 13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_uuid_t *uuid) 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 return btif_dm_get_remote_service_record(remote_addr, uuid); 13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_enabled_services_mask 13965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Fetches currently enabled services 13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns tBTA_SERVICE_MASK 14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_SERVICE_MASK btif_get_enabled_services_mask(void) 14045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_enabled_services; 14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_enable_service 14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Enables the service 'service_ID' to the service_mask. 14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Upon BT enable, BTIF core shall invoke the BTA APIs to 14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** enable the profiles 14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_enable_service(tBTA_SERVICE_ID service_id) 14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_SERVICE_ID *p_id = &service_id; 14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If BT is enabled, we need to switch to BTIF context and trigger the 14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * enable for that profile 14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Otherwise, we just set the flag. On BT_Enable, the DM will trigger 14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * enable for the profiles that have been enabled */ 14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_enabled_services |= (1 << service_id); 14305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1431e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach BTIF_TRACE_DEBUG2("%s: current services:0x%x", __FUNCTION__, btif_enabled_services); 14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_is_enabled()) 14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_transfer_context(btif_dm_execute_service_request, 14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_DM_ENABLE_SERVICE, 14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)p_id, sizeof(tBTA_SERVICE_ID), NULL); 14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_disable_service 14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Disables the service 'service_ID' to the service_mask. 14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Upon BT disable, BTIF core shall invoke the BTA APIs to 14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** disable the profiles 14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 14515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_disable_service(tBTA_SERVICE_ID service_id) 14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_SERVICE_ID *p_id = &service_id; 14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If BT is enabled, we need to switch to BTIF context and trigger the 14585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * disable for that profile so that the appropriate uuid_property_changed will 14595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * be triggerred. Otherwise, we just need to clear the service_id in the mask 14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 14615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_enabled_services &= (tBTA_SERVICE_MASK)(~(1<<service_id)); 14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1464e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach BTIF_TRACE_DEBUG2("%s: Current Services:0x%x", __FUNCTION__, btif_enabled_services); 14655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_is_enabled()) 14675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_transfer_context(btif_dm_execute_service_request, 14695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_DM_DISABLE_SERVICE, 14705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)p_id, sizeof(tBTA_SERVICE_ID), NULL); 14715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 14745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1475bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu 1476bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu/******************************************************************************* 1477bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** 1478bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** Function btif_config_hci_snoop_log 1479bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** 1480bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** Description enable or disable HCI snoop log 1481bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** 1482bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** Returns bt_status_t 1483bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu** 1484bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu*******************************************************************************/ 1485bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xubt_status_t btif_config_hci_snoop_log(uint8_t enable) 1486bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu{ 1487bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu bte_main_config_hci_logging(enable != 0, 1488bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu btif_core_state == BTIF_CORE_STATE_DISABLED); 1489bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu return BT_STATUS_SUCCESS; 1490bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu} 1491