btif_core.c revision ead3cde4bac0c3e32cd31f149093f004eef8ceeb
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" 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_api.h" 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h" 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h" 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bte.h" 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bd.h" 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_av.h" 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_storage.h" 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_util.h" 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_sock.h" 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_pan.h" 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_profile_queue.h" 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_config.h" 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Constants & Macros 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTIF_TASK_STACK_SIZE 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_TASK_STACK_SIZE 0x2000 /* In bytes */ 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTE_DID_CONF_FILE 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTE_DID_CONF_FILE "/etc/bluetooth/bt_did.conf" 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_TASK_STR ((INT8 *) "BTIF") 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Local type definitions 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* These type definitions are used when passing data from the HAL to BTIF context 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project* in the downstream path for the adapter and remote_device property APIs */ 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct { 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t bd_addr; 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_type_t type; 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_storage_read_t; 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct { 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t bd_addr; 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t prop; 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_storage_write_t; 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef union { 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_read_t read_req; 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_write_t write_req; 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_storage_req_t; 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef enum { 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STATE_DISABLED = 0, 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STATE_ENABLING, 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STATE_ENABLED, 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STATE_DISABLING 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_core_state_t; 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Static variables 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_bdaddr_t btif_local_bd_addr; 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT32 btif_task_stack[(BTIF_TASK_STACK_SIZE + 3) / 4]; 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* holds main adapter state */ 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic btif_core_state_t btif_core_state = BTIF_CORE_STATE_DISABLED; 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int btif_shutdown_pending = 0; 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic tBTA_SERVICE_MASK btif_enabled_services = 0; 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project* This variable should be set to 1, if the Bluedroid+BTIF libraries are to 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project* function in DUT mode. 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project* 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project* To set this, the btif_init_bluetooth needs to be called with argument as 1 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*/ 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 btif_dut_mode = 0; 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Static functions 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_associate_evt(void); 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_disassociate_evt(void); 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* sends message to btif task */ 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_sendmsg(void *p_msg); 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Externs 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern void bte_load_did_conf(const char *p_path); 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/** TODO: Move these to _common.h */ 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_boot_entry(void); 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_enable(uint8_t *local_addr); 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_disable(void); 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_shutdown(void); 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HCILP_INCLUDED) && HCILP_INCLUDED == TRUE) 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_enable_lpm(BOOLEAN enable); 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bte_main_postload_cfg(void); 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_dm_execute_service_request(UINT16 event, char *p_param); 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef BTIF_DM_OOB_TEST 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_dm_load_local_oob(void); 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Functions 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Context switching functions 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_context_switched 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback used to execute transferred context callback 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_msg : message to be executed in btif context 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_context_switched(void *p_msg) 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTIF_CONTEXT_SWITCH_CBACK *p; 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_VERBOSE0("btif_context_switched"); 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = (tBTIF_CONTEXT_SWITCH_CBACK *) p_msg; 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* each callback knows how to parse the data */ 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p->p_cb) 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p->p_cb(p->event, p->p_param); 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_transfer_context 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function switches context to btif task 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_cback : callback used to process message in btif context 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** event : event id of message 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_params : parameter area passed to callback (copied) 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** param_len : length of parameter area 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_copy_cback : If set this function will be invoked for deep copy 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1975738f83aeb59361a0a2eda2460113f6dc919427The 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) 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTIF_CONTEXT_SWITCH_CBACK *p_msg; 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_VERBOSE2("btif_transfer_context event %d, len %d", event, param_len); 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* allocate and send message that will be executed in btif context */ 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_msg = (tBTIF_CONTEXT_SWITCH_CBACK *) GKI_getbuf(sizeof(tBTIF_CONTEXT_SWITCH_CBACK) + param_len)) != NULL) 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->hdr.event = BT_EVT_CONTEXT_SWITCH_EVT; /* internal event */ 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->p_cb = p_cback; 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->event = event; /* callback event */ 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* check if caller has provided a copy callback to do the deep copy */ 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_copy_cback) 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_copy_cback(event, p_msg->p_param, p_params); 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (p_params) 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p_msg->p_param, p_params, param_len); /* callback parameter data */ 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_sendmsg(p_msg); 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* let caller deal with a failed allocation */ 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOMEM; 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_is_dut_mode 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description checks if BTIF is currently in DUT mode 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 1 if test mode, otherwize 0 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 btif_is_dut_mode(void) 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (btif_dut_mode == 1); 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_is_enabled 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description checks if main adapter is fully enabled 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 1 if fully enabled, otherwize 0 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint btif_is_enabled(void) 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ((!btif_is_dut_mode()) && (btif_core_state == BTIF_CORE_STATE_ENABLED)); 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_task 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF task handler managing all messages being passed 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Bluetooth HAL and BTA. 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_task(UINT32 params) 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 event; 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_msg; 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG0("btif task starting"); 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_associate_evt(); 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(;;) 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* wait for specified events */ 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event = GKI_wait(0xFFFF, 0); 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Wait for the trigger to init chip and stack. This trigger will 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * be received by btu_task once the UART is opened and ready 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event == BT_EVT_TRIGGER_STACK_INIT) 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG0("btif_task: received trigger stack init event"); 293ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta #if (BLE_INCLUDED == TRUE) 294ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_dm_load_ble_local_keys(); 295ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta #endif 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_EnableBluetooth(bte_dm_evt); 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event & EVENT_MASK(GKI_SHUTDOWN_EVT)) 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(event & TASK_MBOX_1_EVT_MASK) 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while((p_msg = GKI_read_mbox(BTU_BTIF_MBOX)) != NULL) 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_VERBOSE1("btif task fetched event %x", p_msg->event); 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (p_msg->event) 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_EVT_CONTEXT_SWITCH_EVT: 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_context_switched(p_msg); 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR1("unhandled btif event (%d)", p_msg->event & BT_EVT_MASK); 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_freebuf(p_msg); 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_disassociate_evt(); 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG0("btif task exiting"); 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_sendmsg 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Sends msg to BTIF task 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_sendmsg(void *p_msg) 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_send_msg(BTIF_TASK, BTU_BTIF_MBOX, p_msg); 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_fetch_local_bdaddr(bt_bdaddr_t *local_addr) 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char val[256]; 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint8_t valid_bda = FALSE; 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int val_size = 0; 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const uint8_t null_bdaddr[BD_ADDR_LEN] = {0,0,0,0,0,0}; 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Get local bdaddr storage path from property */ 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (property_get(PROPERTY_BT_BDADDR_PATH, val, NULL)) 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int addr_fd; 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("local bdaddr is stored in %s", val); 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((addr_fd = open(val, O_RDONLY)) != -1) 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(val, 0, sizeof(val)); 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project read(addr_fd, val, FACTORY_BT_BDADDR_STORAGE_LEN); 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project str2bd(val, local_addr); 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If this is not a reserved/special bda, then use it */ 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (memcmp(local_addr->address, null_bdaddr, BD_ADDR_LEN) != 0) 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project valid_bda = TRUE; 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG6("Got Factory BDA %02X:%02X:%02X:%02X:%02X:%02X", 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[0], local_addr->address[1], local_addr->address[2], 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[3], local_addr->address[4], local_addr->address[5]); 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project close(addr_fd); 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!valid_bda) 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project val_size = sizeof(val); 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(btif_config_get_str("Local", "Adapter", "Address", val, &val_size)) 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project str2bd(val, local_addr); 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("local bdaddr from bt_config.xml is %s", val); 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* No factory BDADDR found. Look for previously generated random BDA */ 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((!valid_bda) && \ 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (property_get(PERSIST_BDADDR_PROPERTY, val, NULL))) 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project str2bd(val, local_addr); 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project valid_bda = TRUE; 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG6("Got prior random BDA %02X:%02X:%02X:%02X:%02X:%02X", 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[0], local_addr->address[1], local_addr->address[2], 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[3], local_addr->address[4], local_addr->address[5]); 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Generate new BDA if necessary */ 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!valid_bda) 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr; 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Seed the random number generator */ 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project srand((unsigned int) (time(0))); 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* No autogen BDA. Generate one now. */ 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[0] = 0x22; 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[1] = 0x22; 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[2] = (uint8_t) ((rand() >> 8) & 0xFF); 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[3] = (uint8_t) ((rand() >> 8) & 0xFF); 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[4] = (uint8_t) ((rand() >> 8) & 0xFF); 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_addr->address[5] = (uint8_t) ((rand() >> 8) & 0xFF); 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Convert to ascii, and store as a persistent property */ 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(local_addr, &bdstr); 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG2("No preset BDA. Generating BDA: %s for prop %s", 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)bdstr, PERSIST_BDADDR_PROPERTY); 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (property_set(PERSIST_BDADDR_PROPERTY, (char*)bdstr) < 0) 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR1("Failed to set random BDA in prop %s",PERSIST_BDADDR_PROPERTY); 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //save the bd address to config file 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr; 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(local_addr, &bdstr); 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project val_size = sizeof(val); 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_config_get_str("Local", "Adapter", "Address", val, &val_size)) 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (strcmp(bdstr, val) ==0) 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project // BDA is already present in the config file. 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_str("Local", "Adapter", "Address", bdstr); 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_save(); 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** btif core api functions 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_init_bluetooth 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Creates BTIF task and prepares BT scheduler for startup 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_init_bluetooth() 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 status; 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_init(); 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_boot_entry(); 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* As part of the init, fetch the local BD ADDR */ 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&btif_local_bd_addr, 0, sizeof(bt_bdaddr_t)); 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_fetch_local_bdaddr(&btif_local_bd_addr); 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* start btif task */ 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = GKI_create_task(btif_task, BTIF_TASK, BTIF_TASK_STR, 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (UINT16 *) ((UINT8 *)btif_task_stack + BTIF_TASK_STACK_SIZE), 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(btif_task_stack)); 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status != GKI_SUCCESS) 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_FAIL; 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_associate_evt 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Event indicating btif_task is up 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Attach btif_task to JVM 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_associate_evt(void) 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("%s: notify ASSOCIATE_JVM", __FUNCTION__); 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, thread_evt_cb, ASSOCIATE_JVM); 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** 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_enable_bluetooth 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Performs chip power on and kickstarts OS scheduler 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_enable_bluetooth(void) 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG0("BTIF ENABLE BLUETOOTH"); 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_core_state != BTIF_CORE_STATE_DISABLED) 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ALOGD("not disabled\n"); 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_DONE; 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_ENABLING; 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Create the GKI tasks and run them */ 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_enable(btif_local_bd_addr.address); 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_enable_bluetooth_evt 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Event indicating bluetooth enable is completed 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Notifies HAL user with updated adapter state 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_enable_bluetooth_evt(tBTA_STATUS status, BD_ADDR local_bd) 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t bd_addr; 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr; 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(bd_addr.address, local_bd); 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG3("%s: status %d, local bd [%s]", __FUNCTION__, status, 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(&bd_addr, &bdstr)); 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bdcmp(btif_local_bd_addr.address,local_bd)) 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t buf; 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t prop; 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /** 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * The Controller's BDADDR does not match to the BTIF's initial BDADDR! 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * This could be because the factory BDADDR was stored separatley in 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * the Controller's non-volatile memory rather than in device's file 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * system. 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project **/ 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_WARNING0("***********************************************"); 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_WARNING6("BTIF init BDA was %02X:%02X:%02X:%02X:%02X:%02X", 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_local_bd_addr.address[0], btif_local_bd_addr.address[1], 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_local_bd_addr.address[2], btif_local_bd_addr.address[3], 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_local_bd_addr.address[4], btif_local_bd_addr.address[5]); 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_WARNING6("Controller BDA is %02X:%02X:%02X:%02X:%02X:%02X", 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_bd[0], local_bd[1], local_bd[2], 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_bd[3], local_bd[4], local_bd[5]); 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_WARNING0("***********************************************"); 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(btif_local_bd_addr.address, local_bd); 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //save the bd address to config file 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(&btif_local_bd_addr, &buf); 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_str("Local", "Adapter", "Address", buf); 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_save(); 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //fire HAL callback for property change 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(buf, &btif_local_bd_addr, sizeof(bt_bdaddr_t)); 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.type = BT_PROPERTY_BDADDR; 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.val = (void*)buf; 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.len = sizeof(bt_bdaddr_t); 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, BT_STATUS_SUCCESS, 1, &prop); 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_postload_cfg(); 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HCILP_INCLUDED) && HCILP_INCLUDED == TRUE) 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_enable_lpm(TRUE); 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* add passing up bd address as well ? */ 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* callback to HAL */ 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status == BTA_SUCCESS) 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* initialize a2dp service */ 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_av_init(); 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* init rfcomm & l2cap api */ 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_sock_init(); 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* init pan */ 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_pan_init(); 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* load did configuration */ 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_load_did_conf(BTE_DID_CONF_FILE); 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef BTIF_DM_OOB_TEST 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_dm_load_local_oob(); 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* now fully enabled, update state */ 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_ENABLED; 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_state_changed_cb, BT_STATE_ON); 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* cleanup rfcomm & l2cap api */ 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_sock_cleanup(); 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_pan_cleanup(); 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* we failed to enable, reset state */ 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_DISABLED; 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_state_changed_cb, BT_STATE_OFF); 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_disable_bluetooth 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Inititates shutdown of Bluetooth system. 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Any active links will be dropped and device entering 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** non connectable/discoverable mode 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_disable_bluetooth(void) 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_STATUS status; 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR0("btif_disable_bluetooth : not yet enabled"); 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG0("BTIF DISABLE BLUETOOTH"); 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_dm_on_disable(); 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_DISABLING; 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* cleanup rfcomm & l2cap api */ 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_sock_cleanup(); 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_pan_cleanup(); 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTA_DisableBluetooth(); 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_flush(); 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status != BTA_SUCCESS) 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR1("disable bt failed (%d)", status); 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* reset the original state to allow attempting disable again */ 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_ENABLED; 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_FAIL; 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_disable_bluetooth_evt 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Event notifying BT disable is now complete. 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Terminates main stack tasks and notifies HAL 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** user with updated BT state. 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_disable_bluetooth_evt(void) 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("%s", __FUNCTION__); 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined(HCILP_INCLUDED) && HCILP_INCLUDED == TRUE) 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_enable_lpm(FALSE); 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_disable(); 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* update local state */ 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_core_state = BTIF_CORE_STATE_DISABLED; 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* callback to HAL */ 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_state_changed_cb, BT_STATE_OFF); 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_shutdown_pending) 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("%s: calling btif_shutdown_bluetooth", __FUNCTION__); 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_shutdown_bluetooth(); 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_shutdown_bluetooth 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Finalizes BT scheduler shutdown and terminates BTIF 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** task. 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_shutdown_bluetooth(void) 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("%s", __FUNCTION__); 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_is_enabled()) 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_WARNING0("shutdown while still enabled, initiate disable"); 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* shutdown called prior to disabling, initiate disable */ 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_disable_bluetooth(); 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_shutdown_pending = 1; 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_shutdown_pending = 0; 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GKI_destroy_task(BTIF_TASK); 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_queue_release(); 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bte_main_shutdown(); 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_dut_mode = 0; 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("%s done", __FUNCTION__); 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_disassociate_evt 7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Event indicating btif_task is going down 7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Detach btif_task to JVM 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_disassociate_evt(void) 7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("%s: notify DISASSOCIATE_JVM", __FUNCTION__); 7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, thread_evt_cb, DISASSOCIATE_JVM); 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* shutdown complete, all events notified and we reset HAL callbacks */ 7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hal_cbacks = NULL; 7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/**************************************************************************** 7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BTIF Test Mode APIs 7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_dut_mode_cback 7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Callback invoked on completion of vendor specific test mode command 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_dut_mode_cback( tBTM_VSC_CMPL *p ) 7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* For now nothing to be done. */ 7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_dut_mode_configure 7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Configure Test Mode - 'enable' to 1 puts the device in test mode and 0 exits 7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** test mode 7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS on success 7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_dut_mode_configure(uint8_t enable) 7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("%s", __FUNCTION__); 8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_core_state != BTIF_CORE_STATE_ENABLED) { 8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR0("btif_dut_mode_configure : Bluetooth not enabled"); 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_dut_mode = enable; 8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (enable == 1) { 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_EnableTestMode(); 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } else { 8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_DisableTestMode(); 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_dut_mode_send 8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Sends a HCI Vendor specific command to the controller 8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS on success 8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_dut_mode_send(uint16_t opcode, uint8_t *buf, uint8_t len) 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* TODO: Check that opcode is a vendor command group */ 8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_DEBUG1("%s", __FUNCTION__); 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_dut_mode()) { 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR0("Bluedroid HAL needs to be init with test_mode set to 1."); 8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_FAIL; 8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_VendorSpecificCommand(opcode, len, buf, btif_dut_mode_cback); 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 836ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** btif api adapter property functions 8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_in_get_adapter_properties(void) 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t properties[6]; 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t num_props; 8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t addr; 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdname_t name; 8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_scan_mode_t mode; 8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t disc_timeout; 8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t bonded_devices[BTM_SEC_MAX_DEVICE_RECORDS]; 8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_uuid_t local_uuids[BT_MAX_NUM_UUIDS]; 8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props = 0; 8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BD_ADDR */ 8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_BDADDR, 8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(addr), &addr); 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BD_NAME */ 8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_BDNAME, 8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(name), &name); 8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* SCAN_MODE */ 8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_ADAPTER_SCAN_MODE, 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(mode), &mode); 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* DISC_TIMEOUT */ 8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT, 8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(disc_timeout), &disc_timeout); 8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BONDED_DEVICES */ 8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_ADAPTER_BONDED_DEVICES, 8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(bonded_devices), bonded_devices); 8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* LOCAL UUIDs */ 8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&properties[num_props], BT_PROPERTY_UUIDS, 8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(local_uuids), local_uuids); 8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_adapter_property(&properties[num_props]); 8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, 8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_STATUS_SUCCESS, num_props, properties); 8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_in_get_remote_device_properties(bt_bdaddr_t *bd_addr) 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t remote_properties[8]; 9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t num_props = 0; 9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdname_t name, alias; 9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t cod, devtype; 9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_uuid_t remote_uuids[BT_MAX_NUM_UUIDS]; 9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(remote_properties, 0, sizeof(remote_properties)); 9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&remote_properties[num_props], BT_PROPERTY_BDNAME, 9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(name), &name); 9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_remote_device_property(bd_addr, 9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &remote_properties[num_props]); 9125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&remote_properties[num_props], BT_PROPERTY_REMOTE_FRIENDLY_NAME, 9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(alias), &alias); 9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_remote_device_property(bd_addr, 9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &remote_properties[num_props]); 9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&remote_properties[num_props], BT_PROPERTY_CLASS_OF_DEVICE, 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(cod), &cod); 9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_remote_device_property(bd_addr, 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &remote_properties[num_props]); 9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&remote_properties[num_props], BT_PROPERTY_TYPE_OF_DEVICE, 9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(devtype), &devtype); 9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_remote_device_property(bd_addr, 9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &remote_properties[num_props]); 9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_FILL_PROPERTY(&remote_properties[num_props], BT_PROPERTY_UUIDS, 9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(remote_uuids), remote_uuids); 9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_get_remote_device_property(bd_addr, 9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &remote_properties[num_props]); 9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, remote_device_properties_cb, 9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_STATUS_SUCCESS, bd_addr, num_props, remote_properties); 9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function execute_storage_request 9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Executes adapter storage request in BTIF context 9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void execute_storage_request(UINT16 event, char *p_param) 9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint8_t is_local; 9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int num_entries = 0; 9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_status_t status = BT_STATUS_SUCCESS; 9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT1("execute storage request event : %d", event); 9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(event) 9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_ADAPTER_WRITE: 9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *p_req = (btif_storage_req_t*)p_param; 9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t *p_prop = &(p_req->write_req.prop); 9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT3("type: %d, len %d, 0x%x", p_prop->type, 9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_prop->len, p_prop->val); 9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = btif_storage_set_adapter_property(p_prop); 9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, status, 1, p_prop); 9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } break; 9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_ADAPTER_READ: 9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *p_req = (btif_storage_req_t*)p_param; 9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char buf[512]; 9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t prop; 9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.type = p_req->read_req.type; 9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.val = (void*)buf; 9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.len = sizeof(buf); 9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = btif_storage_get_adapter_property(&prop); 9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, status, 1, &prop); 9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } break; 9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_ADAPTER_READ_ALL: 9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = btif_in_get_adapter_properties(); 9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } break; 9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_NOTIFY_STATUS: 9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, status, 0, NULL); 9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } break; 9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR2("%s invalid event id (%d)", __FUNCTION__, event); 10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void execute_storage_remote_request(UINT16 event, char *p_param) 10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_status_t status = BT_STATUS_FAIL; 10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t prop; 10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT1("execute storage remote request event : %d", event); 10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (event) 10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_REMOTE_READ: 10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char buf[1024]; 10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *p_req = (btif_storage_req_t*)p_param; 10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.type = p_req->read_req.type; 10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.val = (void*) buf; 10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop.len = sizeof(buf); 10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = btif_storage_get_remote_device_property(&(p_req->read_req.bd_addr), 10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &prop); 10235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, remote_device_properties_cb, 10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status, &(p_req->read_req.bd_addr), 1, &prop); 10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project }break; 10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_REMOTE_WRITE: 10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *p_req = (btif_storage_req_t*)p_param; 10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = btif_storage_set_remote_device_property(&(p_req->write_req.bd_addr), 10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &(p_req->write_req.prop)); 10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project }break; 10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_REMOTE_READ_ALL: 10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *p_req = (btif_storage_req_t*)p_param; 10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_in_get_remote_device_properties(&p_req->read_req.bd_addr); 10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project }break; 10375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_adapter_properties_evt(bt_status_t status, uint32_t num_props, 10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t *p_props) 10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, adapter_properties_cb, 10445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status, num_props, p_props); 10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btif_remote_properties_evt(bt_status_t status, bt_bdaddr_t *remote_addr, 10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t num_props, bt_property_t *p_props) 10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HAL_CBACK(bt_hal_cbacks, remote_device_properties_cb, 10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status, remote_addr, num_props, p_props); 10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_in_storage_request_copy_cb 10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Switch context callback function to perform the deep copy for 10595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** both the adapter and remote_device property API 10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_in_storage_request_copy_cb(UINT16 event, 10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char *p_new_buf, char *p_old_buf) 10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *new_req = (btif_storage_req_t*)p_new_buf; 10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t *old_req = (btif_storage_req_t*)p_old_buf; 10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT1("%s", __FUNCTION__); 10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (event) 10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_REMOTE_WRITE: 10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTIF_CORE_STORAGE_ADAPTER_WRITE: 10755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(new_req->write_req.bd_addr.address, old_req->write_req.bd_addr.address); 10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Copy the member variables one at a time */ 10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project new_req->write_req.prop.type = old_req->write_req.prop.type; 10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project new_req->write_req.prop.len = old_req->write_req.prop.len; 10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project new_req->write_req.prop.val = (UINT8 *)(p_new_buf + sizeof(btif_storage_req_t)); 10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(new_req->write_req.prop.val, old_req->write_req.prop.val, 10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project old_req->write_req.prop.len); 10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project }break; 10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_adapter_properties 10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Fetch all available properties (local & remote) 10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_get_adapter_properties(void) 10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT1("%s", __FUNCTION__); 11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 11045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_request, 11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STORAGE_ADAPTER_READ_ALL, 11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project NULL, 0, NULL); 11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_adapter_property 11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Fetches property value from local cache 11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 11175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_get_adapter_property(bt_property_type_t type) 11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t req; 11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT2("%s %d", __FUNCTION__, type); 11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Allow get_adapter_property only for BDADDR and BDNAME if BT is disabled */ 11275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled() && (type != BT_PROPERTY_BDADDR) && (type != BT_PROPERTY_BDNAME)) 11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&(req.read_req.bd_addr), 0, sizeof(bt_bdaddr_t)); 11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project req.read_req.type = type; 11325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_request, 11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STORAGE_ADAPTER_READ, 11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)&req, sizeof(btif_storage_req_t), NULL); 11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_set_adapter_property 11415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Updates core stack with property value and stores it in 11435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** local cache 11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 11465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_set_adapter_property(const bt_property_t *property) 11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t req; 11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_status_t status = BT_STATUS_SUCCESS; 11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int storage_req_id = BTIF_CORE_STORAGE_NOTIFY_STATUS; /* default */ 11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char bd_name[BTM_MAX_LOC_BD_NAME_LEN +1]; 11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 name_len = 0; 11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT3("btif_set_adapter_property type: %d, len %d, 0x%x", 11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project property->type, property->len, property->val); 11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 11615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(property->type) 11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_BDNAME: 11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project name_len = property->len > BTM_MAX_LOC_BD_NAME_LEN ? BTM_MAX_LOC_BD_NAME_LEN: 11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project property->len; 11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(bd_name,property->val, name_len); 11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd_name[name_len] = '\0'; 11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT1("set property name : %s", (char *)bd_name); 11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_DmSetDeviceName((char *)bd_name); 11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project storage_req_id = BTIF_CORE_STORAGE_ADAPTER_WRITE; 11775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 11795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_ADAPTER_SCAN_MODE: 11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_scan_mode_t mode = *(bt_scan_mode_t*)property->val; 11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_DISC disc_mode; 11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_DM_CONN conn_mode; 11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(mode) 11875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_SCAN_MODE_NONE: 11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project disc_mode = BTA_DM_NON_DISC; 11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project conn_mode = BTA_DM_NON_CONN; 11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_SCAN_MODE_CONNECTABLE: 11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project disc_mode = BTA_DM_NON_DISC; 11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project conn_mode = BTA_DM_CONN; 11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 11975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE: 11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project disc_mode = BTA_DM_GENERAL_DISC; 12005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project conn_mode = BTA_DM_CONN; 12015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR1("invalid scan mode (0x%x)", mode); 12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_PARM_INVALID; 12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_EVENT1("set property scan mode : %x", mode); 12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_DmSetVisibility(disc_mode, conn_mode, BTA_DM_IGNORE, BTA_DM_IGNORE); 12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project storage_req_id = BTIF_CORE_STORAGE_ADAPTER_WRITE; 12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT: 12165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Nothing to do beside store the value in NV. Java 12185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project will change the SCAN_MODE property after setting timeout, 12195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if required */ 12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project storage_req_id = BTIF_CORE_STORAGE_ADAPTER_WRITE; 12215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_BDADDR: 12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_UUIDS: 12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_ADAPTER_BONDED_DEVICES: 12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_REMOTE_FRIENDLY_NAME: 12275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* no write support through HAL, these properties are only populated from BTA events */ 12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BT_STATUS_FAIL; 12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR1("btif_get_adapter_property : invalid type %d", 12325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project property->type); 12335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BT_STATUS_FAIL; 12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 12355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (storage_req_id != BTIF_CORE_STORAGE_NO_ACTION) 12385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int btif_status; 12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* pass on to storage for updating local database */ 12415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&(req.write_req.bd_addr), 0, sizeof(bt_bdaddr_t)); 12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&(req.write_req.prop), property, sizeof(bt_property_t)); 12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_request, 12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project storage_req_id, 12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)&req, 12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(btif_storage_req_t)+property->len, 12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_in_storage_request_copy_cb); 12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_remote_device_property 12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Fetches the remote device property from the NVRAM 12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 12635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_get_remote_device_property(bt_bdaddr_t *remote_addr, 12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_type_t type) 12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t req; 12695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&(req.read_req.bd_addr), remote_addr, sizeof(bt_bdaddr_t)); 12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project req.read_req.type = type; 12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_remote_request, 12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STORAGE_REMOTE_READ, 12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)&req, sizeof(btif_storage_req_t), 12785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project NULL); 12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_remote_device_properties 12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Fetches all the remote device properties from NVRAM 12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 12905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_get_remote_device_properties(bt_bdaddr_t *remote_addr) 12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t req; 12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&(req.read_req.bd_addr), remote_addr, sizeof(bt_bdaddr_t)); 12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_remote_request, 12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STORAGE_REMOTE_READ_ALL, 13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)&req, sizeof(btif_storage_req_t), 13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project NULL); 13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_set_remote_device_property 13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Writes the remote device property to NVRAM. 13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Currently, BT_PROPERTY_REMOTE_FRIENDLY_NAME is the only 13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** remote device property that can be set 13115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 13135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_set_remote_device_property(bt_bdaddr_t *remote_addr, 13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const bt_property_t *property) 13175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_storage_req_t req; 13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 13225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&(req.write_req.bd_addr), remote_addr, sizeof(bt_bdaddr_t)); 13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&(req.write_req.prop), property, sizeof(bt_property_t)); 13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_transfer_context(execute_storage_remote_request, 13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_CORE_STORAGE_REMOTE_WRITE, 13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)&req, 13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project sizeof(btif_storage_req_t)+property->len, 13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_in_storage_request_copy_cb); 13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_remote_service_record 13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Looks up the service matching uuid on the remote device 13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** and fetches the SCN and service_name if the UUID is found 13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_get_remote_service_record(bt_bdaddr_t *remote_addr, 13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_uuid_t *uuid) 13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_is_enabled()) 13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_dm_get_remote_service_record(remote_addr, uuid); 13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_get_enabled_services_mask 13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Fetches currently enabled services 13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns tBTA_SERVICE_MASK 13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_SERVICE_MASK btif_get_enabled_services_mask(void) 13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_enabled_services; 13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_enable_service 13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Enables the service 'service_ID' to the service_mask. 13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Upon BT enable, BTIF core shall invoke the BTA APIs to 13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** enable the profiles 13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_enable_service(tBTA_SERVICE_ID service_id) 13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_SERVICE_ID *p_id = &service_id; 13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If BT is enabled, we need to switch to BTIF context and trigger the 13855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * enable for that profile 13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Otherwise, we just set the flag. On BT_Enable, the DM will trigger 13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * enable for the profiles that have been enabled */ 13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_enabled_services |= (1 << service_id); 13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR2("%s: current services:0x%x", __FUNCTION__, btif_enabled_services); 13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_is_enabled()) 13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_transfer_context(btif_dm_execute_service_request, 13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_DM_ENABLE_SERVICE, 13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)p_id, sizeof(tBTA_SERVICE_ID), NULL); 13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_disable_service 14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Disables the service 'service_ID' to the service_mask. 14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Upon BT disable, BTIF core shall invoke the BTA APIs to 14095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** disable the profiles 14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns bt_status_t 14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_disable_service(tBTA_SERVICE_ID service_id) 14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_SERVICE_ID *p_id = &service_id; 14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If BT is enabled, we need to switch to BTIF context and trigger the 14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * disable for that profile so that the appropriate uuid_property_changed will 14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * be triggerred. Otherwise, we just need to clear the service_id in the mask 14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_enabled_services &= (tBTA_SERVICE_MASK)(~(1<<service_id)); 14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_TRACE_ERROR2("%s: Current Services:0x%x", __FUNCTION__, btif_enabled_services); 14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btif_is_enabled()) 14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_transfer_context(btif_dm_execute_service_request, 14305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_DM_DISABLE_SERVICE, 14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (char*)p_id, sizeof(tBTA_SERVICE_ID), NULL); 14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1436