btm_devctl.cc revision 9ca07091a1f07ea201cee0504dab6a1d7073d429
15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 1999-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 * This file contains functions that handle BTM interface functions for the 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Bluetooth device including Rest, HCI buffer size and others 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson#include <assert.h> 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdlib.h> 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdio.h> 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stddef.h> 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_types.h" 335cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen#include "bt_utils.h" 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_int.h" 3530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson#include "btu.h" 3679ecab5d0418fde77e9afcdd451bd713af73e180Chris Manton#include "device/include/controller.h" 3730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson#include "hci_layer.h" 3830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson#include "hcimsgs.h" 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "l2c_int.h" 4095b74f252f534ec757aab1fc08e086e02b2cfe8dSharvil Nanavati#include "btcore/include/module.h" 41d7ffd64accbd50a27289a388856e56244ccbb5daMyles Watson#include "osi/include/osi.h" 420f9b91e150e153229235c163861198e23600e636Sharvil Nanavati#include "osi/include/thread.h" 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gatt_int.h" 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovextern fixed_queue_t *btu_general_alarm_queue; 4730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnsonextern thread_t *bt_workqueue_thread; 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 49ee96a3c60fca590d38025925c072d264e06493c4Myles Watson/******************************************************************************/ 509ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* L O C A L D A T A D E F I N I T I O N S */ 51ee96a3c60fca590d38025925c072d264e06493c4Myles Watson/******************************************************************************/ 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTM_DEV_RESET_TIMEOUT 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTM_DEV_RESET_TIMEOUT 4 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov// TODO: Reevaluate this value in the context of timers with ms granularity 5878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#define BTM_DEV_NAME_REPLY_TIMEOUT_MS (2 * 1000) /* 2 seconds for name reply */ 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTM_INFO_TIMEOUT 5 /* 5 seconds for info response */ 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 62ee96a3c60fca590d38025925c072d264e06493c4Myles Watson/******************************************************************************/ 639ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson/* L O C A L F U N C T I O N P R O T O T Y P E S */ 64ee96a3c60fca590d38025925c072d264e06493c4Myles Watson/******************************************************************************/ 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 66d19e0785e662e640191a075eda07acce61c2aedaMarie Janssenstatic void btm_decode_ext_features_page (uint8_t page_number, const BD_FEATURES p_features); 673aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 69ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 70ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btm_dev_init 71ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 72ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function is on the BTM startup 73ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 74ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 75ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 76ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_dev_init (void) 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Initialize nonzero defaults */ 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(btm_cb.cfg.bd_name, 0, sizeof(tBTM_LOC_BD_NAME)); 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btm_cb.devcb.read_local_name_timer = 8378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_new("btm.read_local_name_timer"); 8478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btm_cb.devcb.read_rssi_timer = alarm_new("btm.read_rssi_timer"); 8578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btm_cb.devcb.read_link_quality_timer = 8678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_new("btm.read_link_quality_timer"); 8778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btm_cb.devcb.read_inq_tx_power_timer = 8878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_new("btm.read_inq_tx_power_timer"); 8978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btm_cb.devcb.qos_setup_timer = alarm_new("btm.qos_setup_timer"); 9078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btm_cb.devcb.read_tx_power_timer = alarm_new("btm.read_tx_power_timer"); 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_acl_pkt_types_supported = BTM_ACL_PKT_TYPES_MASK_DH1 + BTM_ACL_PKT_TYPES_MASK_DM1 + 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_ACL_PKT_TYPES_MASK_DH3 + BTM_ACL_PKT_TYPES_MASK_DM3 + 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_ACL_PKT_TYPES_MASK_DH5 + BTM_ACL_PKT_TYPES_MASK_DM5; 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.btm_sco_pkt_types_supported = BTM_SCO_PKT_TYPES_MASK_HV1 + 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SCO_PKT_TYPES_MASK_HV2 + 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SCO_PKT_TYPES_MASK_HV3 + 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SCO_PKT_TYPES_MASK_EV3 + 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SCO_PKT_TYPES_MASK_EV4 + 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTM_SCO_PKT_TYPES_MASK_EV5; 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 106ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 107ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btm_db_reset 108ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 1099ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Description This function is called by BTM_DeviceReset and clears out 1109ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * any pending callbacks for inquiries, discoveries, other 1119ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * pending functions that may be in progress. 112ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 113ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 114ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 115ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btm_db_reset (void) 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_CMPL_CB *p_cb; 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS status = BTM_DEV_RESET; 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_inq_db_reset(); 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.devcb.p_rln_cmpl_cb) 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb = btm_cb.devcb.p_rln_cmpl_cb; 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.devcb.p_rln_cmpl_cb = NULL; 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb) 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_cb)((void *) NULL); 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.devcb.p_rssi_cmpl_cb) 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb = btm_cb.devcb.p_rssi_cmpl_cb; 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.devcb.p_rssi_cmpl_cb = NULL; 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb) 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_cb)((tBTM_RSSI_RESULTS *) &status); 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 142cac784d772db7f42dc93acafb18e5d71617c04f3Jakub Pawlowskibool set_sec_state_idle(void *data, void *context) 143cac784d772db7f42dc93acafb18e5d71617c04f3Jakub Pawlowski{ 144b2a292b5d8df2f359c38b0787bc01181225a9bc9Pavlin Radoslavov tBTM_SEC_DEV_REC *p_dev_rec = static_cast<tBTM_SEC_DEV_REC *>(data); 145cac784d772db7f42dc93acafb18e5d71617c04f3Jakub Pawlowski p_dev_rec->sec_state = BTM_SEC_STATE_IDLE; 146cac784d772db7f42dc93acafb18e5d71617c04f3Jakub Pawlowski return true; 147cac784d772db7f42dc93acafb18e5d71617c04f3Jakub Pawlowski} 148cac784d772db7f42dc93acafb18e5d71617c04f3Jakub Pawlowski 14930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnsonstatic void reset_complete(void *result) { 15030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson assert(result == FUTURE_SUCCESS); 15130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson const controller_t *controller = controller_get_interface(); 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson /* Tell L2CAP that all connections are gone */ 15430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson l2cu_device_reset (); 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson /* Clear current security state */ 157cac784d772db7f42dc93acafb18e5d71617c04f3Jakub Pawlowski list_foreach(btm_cb.sec_dev_rec, set_sec_state_idle, NULL); 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson /* After the reset controller should restore all parameters to defaults. */ 16030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_inq_vars.inq_counter = 1; 16130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_inq_vars.inq_scan_window = HCI_DEF_INQUIRYSCAN_WINDOW; 16230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_inq_vars.inq_scan_period = HCI_DEF_INQUIRYSCAN_INTERVAL; 16330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_inq_vars.inq_scan_type = HCI_DEF_SCAN_TYPE; 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_inq_vars.page_scan_window = HCI_DEF_PAGESCAN_WINDOW; 16630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_inq_vars.page_scan_period = HCI_DEF_PAGESCAN_INTERVAL; 16730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_inq_vars.page_scan_type = HCI_DEF_SCAN_TYPE; 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.ble_ctr_cb.conn_state = BLE_CONN_IDLE; 17030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.ble_ctr_cb.bg_conn_type = BTM_BLE_CONN_NONE; 17130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.ble_ctr_cb.p_select_cback = NULL; 17230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson gatt_reset_bgdev_list(); 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_pm_reset(); 17530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 17630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson l2c_link_processs_num_bufs(controller->get_acl_buffer_count_classic()); 177444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji 178d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BLE_PRIVACY_SPT == TRUE) 179444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji /* Set up the BLE privacy settings */ 180444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji if (controller->supports_ble() && controller->supports_ble_privacy() && 181444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji controller->get_ble_resolving_list_max_size() > 0) { 182b8b3e8070ad027e7a45ca5048ae807c4ec099b15Priti Aghera btm_ble_resolving_list_init(controller->get_ble_resolving_list_max_size()); 183444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji /* set the default random private address timeout */ 18478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btsnd_hcic_ble_set_rand_priv_addr_timeout(BTM_BLE_PRIVATE_ADDR_INT_MS / 1000); 185444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji } 186f88a7a197ab6652988e575ee419f6bc93b8c5b47Andre Eisenbach#endif 187444a8da807abaf5f9e813ce70c56a79160495fb3Satya Calloji 18830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (controller->supports_ble()) { 189b8b3e8070ad027e7a45ca5048ae807c4ec099b15Priti Aghera btm_ble_white_list_init(controller->get_ble_white_list_size()); 19030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson l2c_link_processs_ble_num_bufs(controller->get_acl_buffer_count_ble()); 19130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson } 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_SetPinType (btm_cb.cfg.pin_type, btm_cb.cfg.pin_code, btm_cb.cfg.pin_code_len); 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson for (int i = 0; i <= controller->get_last_features_classic_index(); i++) { 19630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_decode_ext_features_page(i, controller->get_features_classic(i)->as_array); 19730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson } 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_report_device_status(BTM_DEV_STATUS_UP); 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 20230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson// TODO(zachoverflow): remove this function 20330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnsonvoid BTM_DeviceReset (UNUSED_ATTR tBTM_CMPL_CB *p_cb) { 20430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson /* Flush all ACL connections */ 20530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_acl_device_down(); 20630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 20730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson /* Clear the callback, so application would not hang on reset */ 20830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_db_reset(); 20930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson 21030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson module_start_up_callbacked_wrapper( 21130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson get_module(CONTROLLER_MODULE), 21230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson bt_workqueue_thread, 21330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson reset_complete 21430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson ); 21530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson} 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 218ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 219ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function BTM_IsDeviceUp 220ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 221ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function is called to check if the device is up. 222ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 223ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns true if device is up, else false 224ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 225ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 226d19e0785e662e640191a075eda07acce61c2aedaMarie Janssenbool BTM_IsDeviceUp (void) 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 22830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson return controller_get_interface()->get_is_ready(); 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 232ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 233ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btm_read_local_name_timeout 234ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 235ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Callback when reading the local name times out. 236ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 237ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 238ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 239ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 24078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovvoid btm_read_local_name_timeout(UNUSED_ATTR void *data) 2413aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach{ 24278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov tBTM_CMPL_CB *p_cb = btm_cb.devcb.p_rln_cmpl_cb; 24378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btm_cb.devcb.p_rln_cmpl_cb = NULL; 24478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov if (p_cb) 24578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov (*p_cb)((void *) NULL); 2463aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach} 2473aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 2483aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach/******************************************************************************* 249ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 250ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btm_decode_ext_features_page 251ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 252ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function is decodes a features page. 253ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 254ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 255ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 256ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 257d19e0785e662e640191a075eda07acce61c2aedaMarie Janssenstatic void btm_decode_ext_features_page (uint8_t page_number, const uint8_t *p_features) 2583aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach{ 25930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_TRACE_DEBUG ("btm_decode_ext_features_page page: %d", page_number); 26030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson switch (page_number) 26130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson { 26230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson /* Extended (Legacy) Page 0 */ 26330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson case HCI_EXT_FEATURES_PAGE_0: 2643aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 26530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson /* Create ACL supported packet types mask */ 26630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_acl_pkt_types_supported = (BTM_ACL_PKT_TYPES_MASK_DH1 + 26730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_ACL_PKT_TYPES_MASK_DM1); 2683aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 26930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_3_SLOT_PACKETS_SUPPORTED(p_features)) 27030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_acl_pkt_types_supported |= (BTM_ACL_PKT_TYPES_MASK_DH3 + 27130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_ACL_PKT_TYPES_MASK_DM3); 2729d140a9dc432e457a0437920d5f84c22e3baea0dGanesh Ganapathi Batta 27330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_5_SLOT_PACKETS_SUPPORTED(p_features)) 27430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_acl_pkt_types_supported |= (BTM_ACL_PKT_TYPES_MASK_DH5 + 27530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_ACL_PKT_TYPES_MASK_DM5); 2763aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 27730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson /* Add in EDR related ACL types */ 27830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (!HCI_EDR_ACL_2MPS_SUPPORTED(p_features)) 27930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson { 28030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_acl_pkt_types_supported |= (BTM_ACL_PKT_TYPES_MASK_NO_2_DH1 + 28130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_ACL_PKT_TYPES_MASK_NO_2_DH3 + 28230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_ACL_PKT_TYPES_MASK_NO_2_DH5); 28330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson } 2843aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 28530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (!HCI_EDR_ACL_3MPS_SUPPORTED(p_features)) 28630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson { 28730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_acl_pkt_types_supported |= (BTM_ACL_PKT_TYPES_MASK_NO_3_DH1 + 28830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_ACL_PKT_TYPES_MASK_NO_3_DH3 + 28930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_ACL_PKT_TYPES_MASK_NO_3_DH5); 29030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson } 2913aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 29230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson /* Check to see if 3 and 5 slot packets are available */ 29330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_EDR_ACL_2MPS_SUPPORTED(p_features) || 29430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson HCI_EDR_ACL_3MPS_SUPPORTED(p_features)) 29530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson { 29630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (!HCI_3_SLOT_EDR_ACL_SUPPORTED(p_features)) 29730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_acl_pkt_types_supported |= (BTM_ACL_PKT_TYPES_MASK_NO_2_DH3 + 29830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_ACL_PKT_TYPES_MASK_NO_3_DH3); 2993aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 30030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (!HCI_5_SLOT_EDR_ACL_SUPPORTED(p_features)) 30130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_acl_pkt_types_supported |= (BTM_ACL_PKT_TYPES_MASK_NO_2_DH5 + 30230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_ACL_PKT_TYPES_MASK_NO_3_DH5); 30330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson } 3043aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 30530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_TRACE_DEBUG("Local supported ACL packet types: 0x%04x", 30630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_acl_pkt_types_supported); 3079d140a9dc432e457a0437920d5f84c22e3baea0dGanesh Ganapathi Batta 30830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson /* Create (e)SCO supported packet types mask */ 30930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_sco_pkt_types_supported = 0; 310d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BTM_SCO_INCLUDED == TRUE) 311d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen btm_cb.sco_cb.esco_supported = false; 31230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson#endif 31330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_SCO_LINK_SUPPORTED(p_features)) 31430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson { 31530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_sco_pkt_types_supported = BTM_SCO_PKT_TYPES_MASK_HV1; 3169d140a9dc432e457a0437920d5f84c22e3baea0dGanesh Ganapathi Batta 31730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_HV2_PACKETS_SUPPORTED(p_features)) 31830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_sco_pkt_types_supported |= BTM_SCO_PKT_TYPES_MASK_HV2; 3199d140a9dc432e457a0437920d5f84c22e3baea0dGanesh Ganapathi Batta 32030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_HV3_PACKETS_SUPPORTED(p_features)) 32130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_sco_pkt_types_supported |= BTM_SCO_PKT_TYPES_MASK_HV3; 32230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson } 3239d140a9dc432e457a0437920d5f84c22e3baea0dGanesh Ganapathi Batta 32430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_ESCO_EV3_SUPPORTED(p_features)) 32530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_sco_pkt_types_supported |= BTM_SCO_PKT_TYPES_MASK_EV3; 3269d140a9dc432e457a0437920d5f84c22e3baea0dGanesh Ganapathi Batta 32730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_ESCO_EV4_SUPPORTED(p_features)) 32830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_sco_pkt_types_supported |= BTM_SCO_PKT_TYPES_MASK_EV4; 3299d140a9dc432e457a0437920d5f84c22e3baea0dGanesh Ganapathi Batta 33030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_ESCO_EV5_SUPPORTED(p_features)) 33130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_sco_pkt_types_supported |= BTM_SCO_PKT_TYPES_MASK_EV5; 332d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (BTM_SCO_INCLUDED == TRUE) 33330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (btm_cb.btm_sco_pkt_types_supported & BTM_ESCO_LINK_ONLY_MASK) 33430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson { 335d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen btm_cb.sco_cb.esco_supported = true; 3363aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 33730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson /* Add in EDR related eSCO types */ 33830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_EDR_ESCO_2MPS_SUPPORTED(p_features)) 33930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson { 34030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (!HCI_3_SLOT_EDR_ESCO_SUPPORTED(p_features)) 34130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_sco_pkt_types_supported |= BTM_SCO_PKT_TYPES_MASK_NO_2_EV5; 34230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson } 34330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson else 34430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson { 34530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_sco_pkt_types_supported |= (BTM_SCO_PKT_TYPES_MASK_NO_2_EV3 + 34630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_SCO_PKT_TYPES_MASK_NO_2_EV5); 34730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson } 3483aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 34930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_EDR_ESCO_3MPS_SUPPORTED(p_features)) 35030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson { 35130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (!HCI_3_SLOT_EDR_ESCO_SUPPORTED(p_features)) 35230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_sco_pkt_types_supported |= BTM_SCO_PKT_TYPES_MASK_NO_3_EV5; 35330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson } 35430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson else 35530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson { 35630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_sco_pkt_types_supported |= (BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 + 35730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_SCO_PKT_TYPES_MASK_NO_3_EV5); 35830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson } 35930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson } 36030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson#endif 3613aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 36230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_TRACE_DEBUG("Local supported SCO packet types: 0x%04x", 36330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_sco_pkt_types_supported); 3643aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 36530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson /* Create Default Policy Settings */ 36630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_SWITCH_SUPPORTED(p_features)) 36730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_def_link_policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH; 36830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson else 36930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_def_link_policy &= ~HCI_ENABLE_MASTER_SLAVE_SWITCH; 3703aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 37130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_HOLD_MODE_SUPPORTED(p_features)) 37230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_def_link_policy |= HCI_ENABLE_HOLD_MODE; 37330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson else 37430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_def_link_policy &= ~HCI_ENABLE_HOLD_MODE; 3753aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 37630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_SNIFF_MODE_SUPPORTED(p_features)) 37730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_def_link_policy |= HCI_ENABLE_SNIFF_MODE; 37830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson else 37930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_def_link_policy &= ~HCI_ENABLE_SNIFF_MODE; 3803aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 38130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_PARK_MODE_SUPPORTED(p_features)) 38230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_def_link_policy |= HCI_ENABLE_PARK_MODE; 38330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson else 38430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_cb.btm_def_link_policy &= ~HCI_ENABLE_PARK_MODE; 3853aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach 38630e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson btm_sec_dev_reset (); 387fc9c99817a6f3a951e3fc1ccdc48ebd2a54824a7Andre Eisenbach 38830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_LMP_INQ_RSSI_SUPPORTED(p_features)) 3893aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach { 39030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (HCI_EXT_INQ_RSP_SUPPORTED(p_features)) 39130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_SetInquiryMode (BTM_INQ_RESULT_EXTENDED); 39230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson else 39330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_SetInquiryMode (BTM_INQ_RESULT_WITH_RSSI); 3943aa60544585b5fb0f35c1165539a4a859fc0f25cAndre Eisenbach } 395fc9c99817a6f3a951e3fc1ccdc48ebd2a54824a7Andre Eisenbach 396d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen#if (L2CAP_NON_FLUSHABLE_PB_INCLUDED == TRUE) 39730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if( HCI_NON_FLUSHABLE_PB_SUPPORTED(p_features)) 398d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen l2cu_set_non_flushable_pbf(true); 39930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson else 400d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen l2cu_set_non_flushable_pbf(false); 40130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson#endif 40230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_SetPageScanType (BTM_DEFAULT_SCAN_TYPE); 40330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_SetInquiryScanType (BTM_DEFAULT_SCAN_TYPE); 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 40530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson break; 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 40730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson /* Extended Page 1 */ 40830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson case HCI_EXT_FEATURES_PAGE_1: 40930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson /* Nothing to do for page 1 */ 41030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson break; 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 41230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson /* Extended Page 2 */ 41330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson case HCI_EXT_FEATURES_PAGE_2: 41430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson /* Nothing to do for page 2 */ 41530e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson break; 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 41730e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson default: 41830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson BTM_TRACE_ERROR("btm_decode_ext_features_page page=%d unknown", page_number); 41930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson break; 42030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson } 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 424ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 425ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function BTM_SetLocalDeviceName 426ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 427ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function is called to set the local device name. 428ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 429ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns status of the operation 430ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 431ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_SetLocalDeviceName (char *p_name) 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 434d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t *p; 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!p_name || !p_name[0] || (strlen ((char *)p_name) > BD_NAME_LEN)) 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_ILLEGAL_VALUE); 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 43930e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (!controller_get_interface()->get_is_ready()) 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_DEV_RESET); 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Save the device name if local storage is enabled */ 442d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen p = (uint8_t *)btm_cb.cfg.bd_name; 443d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen if (p != (uint8_t *)p_name) 4445b9462d9694bdb9c51130a39a9d85c936ecce46fAndre Eisenbach strlcpy(btm_cb.cfg.bd_name, p_name, BTM_MAX_LOC_BD_NAME_LEN); 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 446b6ab9b3af6b8793ff781e0359a78611726ab2300Jakub Pawlowski btsnd_hcic_change_name(p); 447b6ab9b3af6b8793ff781e0359a78611726ab2300Jakub Pawlowski return (BTM_CMD_STARTED); 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 453ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 454ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function BTM_ReadLocalDeviceName 455ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 456ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function is called to read the local device name. 457ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 458ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns status of the operation 459ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * If success, BTM_SUCCESS is returned and p_name points stored 460ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * local device name 461ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * If BTM doesn't store local device name, BTM_NO_RESOURCES is 462ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * is returned and p_name is set to NULL 463ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 464ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_ReadLocalDeviceName (char **p_name) 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_name = btm_cb.cfg.bd_name; 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(BTM_SUCCESS); 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 473ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 474ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function BTM_ReadLocalDeviceNameFromController 475ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 476ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Get local device name from controller. Do not use cached 477ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * name (used to get chip-id prior to btm reset complete). 478ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 479ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns BTM_CMD_STARTED if successful, otherwise an error 480ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 481ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_ReadLocalDeviceNameFromController (tBTM_CMPL_CB *p_rln_cmpl_cback) 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Check if rln already in progress */ 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.devcb.p_rln_cmpl_cb) 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(BTM_NO_RESOURCES); 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Save callback */ 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.devcb.p_rln_cmpl_cb = p_rln_cmpl_cback; 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btsnd_hcic_read_name(); 49278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_set_on_queue(btm_cb.devcb.read_local_name_timer, 49378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov BTM_DEV_NAME_REPLY_TIMEOUT_MS, 49478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btm_read_local_name_timeout, NULL, 49578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btu_general_alarm_queue); 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_CMD_STARTED; 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 501ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 502ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btm_read_local_name_complete 503ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 504ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function is called when local name read complete. 505ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * message is received from the HCI. 506ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 507ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 508ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 509ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 510d35a648d39710bbc5ac59f8add85166455af5af7Myles Watsonvoid btm_read_local_name_complete (uint8_t *p, 511d35a648d39710bbc5ac59f8add85166455af5af7Myles Watson UNUSED_ATTR uint16_t evt_len) 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_CMPL_CB *p_cb = btm_cb.devcb.p_rln_cmpl_cb; 514d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t status; 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 51678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_cancel(btm_cb.devcb.read_local_name_timer); 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If there was a callback address for read local name, call it */ 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.devcb.p_rln_cmpl_cb = NULL; 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb) 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8 (status, p); 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status == HCI_SUCCESS) 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_cb)(p); 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_cb)(NULL); 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 533ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 534ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function BTM_SetDeviceClass 535ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 536ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function is called to set the local device class 537ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 538ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns status of the operation 539ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 540ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_SetDeviceClass (DEV_CLASS dev_class) 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!memcmp (btm_cb.devcb.dev_class, dev_class, DEV_CLASS_LEN)) 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return(BTM_SUCCESS); 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy (btm_cb.devcb.dev_class, dev_class, DEV_CLASS_LEN); 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 54830e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson if (!controller_get_interface()->get_is_ready()) 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_DEV_RESET); 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 551b6ab9b3af6b8793ff781e0359a78611726ab2300Jakub Pawlowski btsnd_hcic_write_dev_class(dev_class); 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_SUCCESS); 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 558ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 559ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function BTM_ReadDeviceClass 560ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 561ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function is called to read the local device class 562ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 563ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns pointer to the device class 564ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 565ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 566d19e0785e662e640191a075eda07acce61c2aedaMarie Janssenuint8_t *BTM_ReadDeviceClass (void) 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 568d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen return ((uint8_t *)btm_cb.devcb.dev_class); 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 573ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 574ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function BTM_ReadLocalFeatures 575ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 576ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function is called to read the local features 577ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 578ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns pointer to the local features string 579ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 580ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 58130e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson// TODO(zachoverflow): get rid of this function 582d19e0785e662e640191a075eda07acce61c2aedaMarie Janssenuint8_t *BTM_ReadLocalFeatures (void) 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 58430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson // Discarding const modifier for now, until this function dies 585d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen return (uint8_t *)controller_get_interface()->get_features_classic(0)->as_array; 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 589ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 590ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function BTM_RegisterForDeviceStatusNotif 591ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 592ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function is called to register for device status 593ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * change notifications. 594ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 595ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * If one registration is already there calling function should 596ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * save the pointer to the function that is return and 597ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * call it when processing of the event is complete 598ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 599ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns status of the operation 600ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 601ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_DEV_STATUS_CB *BTM_RegisterForDeviceStatusNotif (tBTM_DEV_STATUS_CB *p_cb) 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_DEV_STATUS_CB *p_prev = btm_cb.devcb.p_dev_status_cb; 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.devcb.p_dev_status_cb = p_cb; 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (p_prev); 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 611ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 612ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function BTM_VendorSpecificCommand 613ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 614ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Send a vendor specific HCI command to the controller. 615ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 616ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Notes 617ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Opcode will be OR'd with HCI_GRP_VENDOR_SPECIFIC. 618ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 619ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 6203d5fbcaf9f191737b1c818523e1bf6831c50d586Jakub Pawlowskivoid BTM_VendorSpecificCommand(uint16_t opcode, uint8_t param_len, 621d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t *p_param_buf, tBTM_VSC_CMPL_CB *p_cb) 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 623717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov /* Allocate a buffer to hold HCI command plus the callback function */ 624717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov void *p_buf = osi_malloc(sizeof(BT_HDR) + sizeof(tBTM_CMPL_CB *) + 625717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov param_len + HCIC_PREAMBLE_SIZE); 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 627717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov BTM_TRACE_EVENT("BTM: %s: Opcode: 0x%04X, ParamLen: %i.", __func__, 628717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov opcode, param_len); 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 630717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov /* Send the HCI command (opcode will be OR'd with HCI_GRP_VENDOR_SPECIFIC) */ 631717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov btsnd_hcic_vendor_spec_cmd(p_buf, opcode, param_len, p_param_buf, (void *)p_cb); 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 636ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 637ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btm_vsc_complete 638ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 639ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function is called when local HCI Vendor Specific 640ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Command complete message is received from the HCI. 641ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 642ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 643ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 644ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 645d19e0785e662e640191a075eda07acce61c2aedaMarie Janssenvoid btm_vsc_complete (uint8_t *p, uint16_t opcode, uint16_t evt_len, 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_CMPL_CB *p_vsc_cplt_cback) 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_VSC_CMPL vcs_cplt_params; 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If there was a callback address for vcs complete, call it */ 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_vsc_cplt_cback) 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Pass paramters to the callback function */ 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project vcs_cplt_params.opcode = opcode; /* Number of bytes in return info */ 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project vcs_cplt_params.param_len = evt_len; /* Number of bytes in return info */ 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project vcs_cplt_params.p_param_buf = p; 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_vsc_cplt_cback)(&vcs_cplt_params); /* Call the VSC complete callback function */ 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 662ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 663ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function BTM_RegisterForVSEvents 664ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 665ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function is called to register/deregister for vendor 666ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * specific HCI events. 667ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 668ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * If is_register=true, then the function will be registered; 6699ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * otherwise, the the function will be deregistered. 670ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 671ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns BTM_SUCCESS if successful, 672ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * BTM_BUSY if maximum number of callbacks have already been 673ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * registered. 674ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 675ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 676d19e0785e662e640191a075eda07acce61c2aedaMarie JanssentBTM_STATUS BTM_RegisterForVSEvents (tBTM_VS_EVT_CB *p_cb, bool is_register) 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_STATUS retval = BTM_SUCCESS; 679d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t i, free_idx = BTM_MAX_VSE_CALLBACKS; 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* See if callback is already registered */ 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i=0; i<BTM_MAX_VSE_CALLBACKS; i++) 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.devcb.p_vend_spec_cb[i] == NULL) 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Found a free slot. Store index */ 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project free_idx = i; 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (btm_cb.devcb.p_vend_spec_cb[i] == p_cb) 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Found callback in lookup table. If deregistering, clear the entry. */ 692d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen if (is_register == false) 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.devcb.p_vend_spec_cb[i] = NULL; 6955344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_EVENT("BTM Deregister For VSEvents is successfully"); 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_SUCCESS); 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Didn't find callback. Add callback to free slot if registering */ 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (is_register) 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (free_idx < BTM_MAX_VSE_CALLBACKS) 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.devcb.p_vend_spec_cb[free_idx] = p_cb; 7075344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_EVENT("BTM Register For VSEvents is successfully"); 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* No free entries available */ 7125344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_ERROR ("BTM_RegisterForVSEvents: too many callbacks registered"); 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project retval = BTM_NO_RESOURCES; 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (retval); 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 722ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 723ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btm_vendor_specific_evt 724ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 725ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Process event HCI_VENDOR_SPECIFIC_EVT 726ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 727ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Note: Some controllers do not send command complete, so 728ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * the callback and busy flag are cleared here also. 729ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 730ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 731ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 732ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 733d19e0785e662e640191a075eda07acce61c2aedaMarie Janssenvoid btm_vendor_specific_evt (uint8_t *p, uint8_t evt_len) 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 735d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t i; 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7375344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_DEBUG ("BTM Event: Vendor Specific event from controller"); 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i=0; i<BTM_MAX_VSE_CALLBACKS; i++) 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.devcb.p_vend_spec_cb[i]) 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*btm_cb.devcb.p_vend_spec_cb[i])(evt_len, p); 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/******************************************************************************* 748ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 749ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function BTM_WritePageTimeout 750ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 751ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Send HCI Write Page Timeout. 752ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 753ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 754b6ab9b3af6b8793ff781e0359a78611726ab2300Jakub Pawlowskivoid BTM_WritePageTimeout(uint16_t timeout) 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7565344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_EVENT ("BTM: BTM_WritePageTimeout: Timeout: %d.", timeout); 7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Send the HCI command */ 759b6ab9b3af6b8793ff781e0359a78611726ab2300Jakub Pawlowski btsnd_hcic_write_page_tout(timeout); 7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 763ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 764ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function BTM_WriteVoiceSettings 765ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 766ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Send HCI Write Voice Settings command. 767ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * See hcidefs.h for settings bitmask values. 768ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 769ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 770b6ab9b3af6b8793ff781e0359a78611726ab2300Jakub Pawlowskivoid BTM_WriteVoiceSettings(uint16_t settings) 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7725344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_EVENT ("BTM: BTM_WriteVoiceSettings: Settings: 0x%04x.", settings); 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Send the HCI command */ 775b6ab9b3af6b8793ff781e0359a78611726ab2300Jakub Pawlowski btsnd_hcic_write_voice_settings((uint16_t)(settings & 0x03ff)); 7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 779ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 780ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function BTM_EnableTestMode 781ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 782ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description Send HCI the enable device under test command. 783ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 784ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Note: Controller can only be taken out of this mode by 785ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * resetting the controller. 786ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 787ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns 788ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * BTM_SUCCESS Command sent. 789ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * BTM_NO_RESOURCES If out of resources to send the command. 790ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 791ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 792ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_EnableTestMode(void) 7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 795d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen uint8_t cond; 7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7975344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_EVENT ("BTM: BTM_EnableTestMode"); 7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set auto accept connection as this is needed during test mode */ 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Allocate a buffer to hold HCI command */ 8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cond = HCI_DO_AUTO_ACCEPT_CONNECT; 802b6ab9b3af6b8793ff781e0359a78611726ab2300Jakub Pawlowski btsnd_hcic_set_event_filter(HCI_FILTER_CONNECTION_SETUP, 803b6ab9b3af6b8793ff781e0359a78611726ab2300Jakub Pawlowski HCI_FILTER_COND_NEW_DEVICE, 804b6ab9b3af6b8793ff781e0359a78611726ab2300Jakub Pawlowski &cond, sizeof(cond)); 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* put device to connectable mode */ 8074394720415f45db5caea73e1a05351ff98601fe0Pavlin Radoslavov if (BTM_SetConnectability(BTM_CONNECTABLE, BTM_DEFAULT_CONN_WINDOW, 8084394720415f45db5caea73e1a05351ff98601fe0Pavlin Radoslavov BTM_DEFAULT_CONN_INTERVAL) != BTM_SUCCESS) { 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_NO_RESOURCES; 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* put device to discoverable mode */ 8134394720415f45db5caea73e1a05351ff98601fe0Pavlin Radoslavov if (BTM_SetDiscoverability(BTM_GENERAL_DISCOVERABLE, 8144394720415f45db5caea73e1a05351ff98601fe0Pavlin Radoslavov BTM_DEFAULT_DISC_WINDOW, 8154394720415f45db5caea73e1a05351ff98601fe0Pavlin Radoslavov BTM_DEFAULT_DISC_INTERVAL) != BTM_SUCCESS) { 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTM_NO_RESOURCES; 8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* mask off all of event from controller */ 82030e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson hci_layer_get_interface()->transmit_command( 8211cdde97ec39374873bfd8b592aecc923ea9dd332Zach Johnson hci_packet_factory_get_interface()->make_set_event_mask((const bt_event_mask_t *)("\x00\x00\x00\x00\x00\x00\x00\x00")), 82230e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson NULL, 82330e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson NULL, 82430e58068c1adaac7c5ccb3aa9cfb045d41d2a10eZach Johnson NULL); 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Send the HCI command */ 827b6ab9b3af6b8793ff781e0359a78611726ab2300Jakub Pawlowski btsnd_hcic_enable_test_mode(); 828b6ab9b3af6b8793ff781e0359a78611726ab2300Jakub Pawlowski return (BTM_SUCCESS); 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 832ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 833ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function BTM_DeleteStoredLinkKey 834ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 835ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function is called to delete link key for the specified 8369ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * device addresses from the NVRAM storage attached to the 8379ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Bluetooth controller. 838ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 839ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Parameters: bd_addr - Addresses of the devices 840ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * p_cb - Call back function to be called to return 841ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * the results 842ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 843ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTM_STATUS BTM_DeleteStoredLinkKey(BD_ADDR bd_addr, tBTM_CMPL_CB *p_cb) 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BD_ADDR local_bd_addr; 847d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen bool delete_all_flag = false; 8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Check if the previous command is completed */ 8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (btm_cb.devcb.p_stored_link_key_cmpl_cb) 8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (BTM_BUSY); 8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!bd_addr) 8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* This is to delete all link keys */ 856d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen delete_all_flag = true; 8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* We don't care the BD address. Just pass a non zero pointer */ 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd_addr = local_bd_addr; 8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8625344d6dcb09a184eaf1f9e46cc1ac3962822435cSharvil Nanavati BTM_TRACE_EVENT ("BTM: BTM_DeleteStoredLinkKey: delete_all_flag: %s", 863d19e0785e662e640191a075eda07acce61c2aedaMarie Janssen delete_all_flag ? "true" : "false"); 8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Send the HCI command */ 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.devcb.p_stored_link_key_cmpl_cb = p_cb; 867b6ab9b3af6b8793ff781e0359a78611726ab2300Jakub Pawlowski btsnd_hcic_delete_stored_key(bd_addr, delete_all_flag); 868b6ab9b3af6b8793ff781e0359a78611726ab2300Jakub Pawlowski return (BTM_SUCCESS); 8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 872ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 873ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btm_delete_stored_link_key_complete 874ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 875ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function is called when the command complete message 8769ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * is received from the HCI for the delete stored link key 8779ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * command. 878ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 879ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 880ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 881ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 882d19e0785e662e640191a075eda07acce61c2aedaMarie Janssenvoid btm_delete_stored_link_key_complete (uint8_t *p) 8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_CMPL_CB *p_cb = btm_cb.devcb.p_stored_link_key_cmpl_cb; 8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_DELETE_STORED_LINK_KEY_COMPLETE result; 8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If there was a callback registered for read stored link key, call it */ 8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btm_cb.devcb.p_stored_link_key_cmpl_cb = NULL; 8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb) 8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Set the call back event to indicate command complete */ 8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project result.event = BTM_CB_EVT_DELETE_STORED_LINK_KEYS; 8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Extract the result fields from the HCI event */ 8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT8 (result.status, p); 8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STREAM_TO_UINT16 (result.num_keys, p); 8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Call the call back and pass the result */ 9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_cb)(&result); 9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 905ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 906ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function btm_report_device_status 907ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 908ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description This function is called when there is a change in the device 909ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * status. This function will report the new device status to 910ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * the application 911ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 912ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns void 913ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * 914ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid btm_report_device_status (tBTM_DEV_STATUS status) 9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTM_DEV_STATUS_CB *p_cb = btm_cb.devcb.p_dev_status_cb; 9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Call the call back to pass the device status to application */ 9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb) 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_cb)(status); 9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 925