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: bluetooth.c 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Description: Bluetooth HAL implementation 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ***********************************************************************************/ 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdio.h> 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdlib.h> 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <unistd.h> 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <hardware/bluetooth.h> 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <hardware/bt_hf.h> 3341d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta#include <hardware/bt_hf_client.h> 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <hardware/bt_av.h> 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <hardware/bt_sock.h> 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <hardware/bt_hh.h> 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <hardware/bt_hl.h> 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <hardware/bt_pan.h> 392dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta#include <hardware/bt_mce.h> 40ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <hardware/bt_gatt.h> 419adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan#include <hardware/bt_rc.h> 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define LOG_NDDEBUG 0 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define LOG_TAG "bluedroid" 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_api.h" 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_utils.h" 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Constants & Macros 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define is_profile(profile, str) ((strlen(str) == strlen(profile)) && strncmp((const char *)profile, str, strlen(str)) == 0) 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Local type definitions 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Static variables 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_callbacks_t *bt_hal_cbacks = NULL; 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6510aecea0649e523ad9e94b5d0256e72729ec5875Sharvil Nanavati/** Operating System specific callouts for resource management */ 6610aecea0649e523ad9e94b5d0256e72729ec5875Sharvil Nanavatibt_os_callouts_t *bt_os_callouts = NULL; 6710aecea0649e523ad9e94b5d0256e72729ec5875Sharvil Nanavati 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Static functions 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Externs 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* list all extended interfaces here */ 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* handsfree profile */ 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern bthf_interface_t *btif_hf_get_interface(); 8041d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta/* handsfree profile - client */ 8141d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Guptaextern bthf_client_interface_t *btif_hf_client_get_interface(); 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* advanced audio profile */ 833e8a242fcbeebea2857fa964ca48624d8433333eMike Lockwoodextern btav_interface_t *btif_av_get_src_interface(); 843e8a242fcbeebea2857fa964ca48624d8433333eMike Lockwoodextern btav_interface_t *btif_av_get_sink_interface(); 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*rfc l2cap*/ 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern btsock_interface_t *btif_sock_get_interface(); 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* hid host profile */ 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern bthh_interface_t *btif_hh_get_interface(); 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* health device profile */ 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern bthl_interface_t *btif_hl_get_interface(); 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*pan*/ 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern btpan_interface_t *btif_pan_get_interface(); 932dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta/*map client*/ 942dc999935d4c69ae31ea93d9014165965dd373d6Hemant Guptaextern btmce_interface_t *btif_mce_get_interface(); 95bf9a8aa26988aedbc161d75f2688641ce59dc001Mike J. Chen#if BLE_INCLUDED == TRUE 96ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/* gatt */ 97ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern btgatt_interface_t *btif_gatt_get_interface(); 98bf9a8aa26988aedbc161d75f2688641ce59dc001Mike J. Chen#endif 994ad470e33021be4246ae539e1bcb7a346dbb4405Mike Lockwood/* avrc target */ 1009adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajanextern btrc_interface_t *btif_rc_get_interface(); 1014ad470e33021be4246ae539e1bcb7a346dbb4405Mike Lockwood/* avrc controller */ 1024ad470e33021be4246ae539e1bcb7a346dbb4405Mike Lockwoodextern btrc_interface_t *btif_rc_ctrl_get_interface(); 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Functions 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic uint8_t interface_ready(void) 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* add checks here that would prevent API calls other than init to be executed */ 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bt_hal_cbacks == NULL) 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BLUETOOTH HAL INTERFACE FUNCTIONS 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int init(bt_callbacks_t* callbacks ) 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ALOGI("init"); 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == TRUE) 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_DONE; 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* store reference to user callbacks */ 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_hal_cbacks = callbacks; 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* add checks for individual callbacks ? */ 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_utils_init(); 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* init btif */ 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_init_bluetooth(); 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int enable( void ) 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ALOGI("enable"); 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_enable_bluetooth(); 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int disable(void) 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_disable_bluetooth(); 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void cleanup( void ) 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_shutdown_bluetooth(); 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* hal callbacks reset upon shutdown complete callback */ 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int get_adapter_properties(void) 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_get_adapter_properties(); 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int get_adapter_property(bt_property_type_t type) 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_get_adapter_property(type); 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int set_adapter_property(const bt_property_t *property) 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_set_adapter_property(property); 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint get_remote_device_properties(bt_bdaddr_t *remote_addr) 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_get_remote_device_properties(remote_addr); 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint get_remote_device_property(bt_bdaddr_t *remote_addr, bt_property_type_t type) 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_get_remote_device_property(remote_addr, type); 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint set_remote_device_property(bt_bdaddr_t *remote_addr, const bt_property_t *property) 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_set_remote_device_property(remote_addr, property); 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint get_remote_service_record(bt_bdaddr_t *remote_addr, bt_uuid_t *uuid) 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_get_remote_service_record(remote_addr, uuid); 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint get_remote_services(bt_bdaddr_t *remote_addr) 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_dm_get_remote_services(remote_addr); 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int start_discovery(void) 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_dm_start_discovery(); 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int cancel_discovery(void) 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_dm_cancel_discovery(); 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 268b0daa5d79d4e2950701fb9a5f76a306e1da42de0Andre Eisenbachstatic int create_bond(const bt_bdaddr_t *bd_addr, int transport) 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 274b0daa5d79d4e2950701fb9a5f76a306e1da42de0Andre Eisenbach return btif_dm_create_bond(bd_addr, transport); 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int cancel_bond(const bt_bdaddr_t *bd_addr) 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_dm_cancel_bond(bd_addr); 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int remove_bond(const bt_bdaddr_t *bd_addr) 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_dm_remove_bond(bd_addr); 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2955c0b052090a57b3926669c23349b0f0db68853f8Andre Eisenbachstatic int get_connection_state(const bt_bdaddr_t *bd_addr) 2965c0b052090a57b3926669c23349b0f0db68853f8Andre Eisenbach{ 2975c0b052090a57b3926669c23349b0f0db68853f8Andre Eisenbach /* sanity check */ 2985c0b052090a57b3926669c23349b0f0db68853f8Andre Eisenbach if (interface_ready() == FALSE) 2995c0b052090a57b3926669c23349b0f0db68853f8Andre Eisenbach return 0; 3005c0b052090a57b3926669c23349b0f0db68853f8Andre Eisenbach 3015c0b052090a57b3926669c23349b0f0db68853f8Andre Eisenbach return btif_dm_get_connection_state(bd_addr); 3025c0b052090a57b3926669c23349b0f0db68853f8Andre Eisenbach} 3035c0b052090a57b3926669c23349b0f0db68853f8Andre Eisenbach 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int pin_reply(const bt_bdaddr_t *bd_addr, uint8_t accept, 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint8_t pin_len, bt_pin_code_t *pin_code) 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_dm_pin_reply(bd_addr, accept, pin_len, pin_code); 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int ssp_reply(const bt_bdaddr_t *bd_addr, bt_ssp_variant_t variant, 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint8_t accept, uint32_t passkey) 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_dm_ssp_reply(bd_addr, variant, accept, passkey); 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 324e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Callojistatic int read_energy_info() 325e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji{ 326e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji if (interface_ready() == FALSE) 327e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji return BT_STATUS_NOT_READY; 328e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji btif_dm_read_energy_info(); 329e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji return BT_STATUS_SUCCESS; 330e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji} 331e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const void* get_profile_interface (const char *profile_id) 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ALOGI("get_profile_interface %s", profile_id); 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return NULL; 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* check for supported profile interfaces */ 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (is_profile(profile_id, BT_PROFILE_HANDSFREE_ID)) 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_hf_get_interface(); 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 34441d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta if (is_profile(profile_id, BT_PROFILE_HANDSFREE_CLIENT_ID)) 34541d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta return btif_hf_client_get_interface(); 34641d4a266ceca77bb09ab1bf5c04c30d15f3ded3aHemant Gupta 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (is_profile(profile_id, BT_PROFILE_SOCKETS_ID)) 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_sock_get_interface(); 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (is_profile(profile_id, BT_PROFILE_PAN_ID)) 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_pan_get_interface(); 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (is_profile(profile_id, BT_PROFILE_ADVANCED_AUDIO_ID)) 3543e8a242fcbeebea2857fa964ca48624d8433333eMike Lockwood return btif_av_get_src_interface(); 3553e8a242fcbeebea2857fa964ca48624d8433333eMike Lockwood 3563e8a242fcbeebea2857fa964ca48624d8433333eMike Lockwood if (is_profile(profile_id, BT_PROFILE_ADVANCED_AUDIO_SINK_ID)) 3573e8a242fcbeebea2857fa964ca48624d8433333eMike Lockwood return btif_av_get_sink_interface(); 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (is_profile(profile_id, BT_PROFILE_HIDHOST_ID)) 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_hh_get_interface(); 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (is_profile(profile_id, BT_PROFILE_HEALTH_ID)) 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_hl_get_interface(); 3649adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 3652dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta if (is_profile(profile_id, BT_PROFILE_MAP_CLIENT_ID)) 3662dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta return btif_mce_get_interface(); 3672dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta 3682dc999935d4c69ae31ea93d9014165965dd373d6Hemant Gupta#if ( BTA_GATT_INCLUDED == TRUE && BLE_INCLUDED == TRUE) 369ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (is_profile(profile_id, BT_PROFILE_GATT_ID)) 370ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_gatt_get_interface(); 371fc4b2f1953dbe60464d0f5ef7daaa10001fbc62fMatthew Xie#endif 3729adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 3739adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan if (is_profile(profile_id, BT_PROFILE_AV_RC_ID)) 3749adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan return btif_rc_get_interface(); 3759adddf4965e9ddb01e339b934c343fcbd842a977Ravi Nagarajan 3764ad470e33021be4246ae539e1bcb7a346dbb4405Mike Lockwood if (is_profile(profile_id, BT_PROFILE_AV_RC_CTRL_ID)) 3774ad470e33021be4246ae539e1bcb7a346dbb4405Mike Lockwood return btif_rc_ctrl_get_interface(); 3784ad470e33021be4246ae539e1bcb7a346dbb4405Mike Lockwood 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return NULL; 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint dut_mode_configure(uint8_t enable) 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ALOGI("dut_mode_configure"); 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_dut_mode_configure(enable); 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint dut_mode_send(uint16_t opcode, uint8_t* buf, uint8_t len) 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ALOGI("dut_mode_send"); 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sanity check */ 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (interface_ready() == FALSE) 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_NOT_READY; 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_dut_mode_send(opcode, buf, len); 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 403fc4b2f1953dbe60464d0f5ef7daaa10001fbc62fMatthew Xie 404fc4b2f1953dbe60464d0f5ef7daaa10001fbc62fMatthew Xie#if BLE_INCLUDED == TRUE 405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaint le_test_mode(uint16_t opcode, uint8_t* buf, uint8_t len) 406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ALOGI("le_test_mode"); 408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* sanity check */ 410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (interface_ready() == FALSE) 411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return BT_STATUS_NOT_READY; 412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_le_test_mode(opcode, buf, len); 414ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 415fc4b2f1953dbe60464d0f5ef7daaa10001fbc62fMatthew Xie#endif 416ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 417bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xuint config_hci_snoop_log(uint8_t enable) 418bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu{ 419bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu ALOGI("config_hci_snoop_log"); 420bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu 421bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu /* sanity check */ 422bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu if (interface_ready() == FALSE) 423bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu return BT_STATUS_NOT_READY; 424bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu 425bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu return btif_config_hci_snoop_log(enable); 426bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu} 427bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu 42810aecea0649e523ad9e94b5d0256e72729ec5875Sharvil Nanavatistatic int set_os_callouts(bt_os_callouts_t *callouts) { 42910aecea0649e523ad9e94b5d0256e72729ec5875Sharvil Nanavati bt_os_callouts = callouts; 43010aecea0649e523ad9e94b5d0256e72729ec5875Sharvil Nanavati return BT_STATUS_SUCCESS; 43110aecea0649e523ad9e94b5d0256e72729ec5875Sharvil Nanavati} 43210aecea0649e523ad9e94b5d0256e72729ec5875Sharvil Nanavati 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const bt_interface_t bluetoothInterface = { 434ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sizeof(bluetoothInterface), 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project init, 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project enable, 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project disable, 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cleanup, 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project get_adapter_properties, 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project get_adapter_property, 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project set_adapter_property, 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project get_remote_device_properties, 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project get_remote_device_property, 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project set_remote_device_property, 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project get_remote_service_record, 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project get_remote_services, 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project start_discovery, 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cancel_discovery, 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project create_bond, 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project remove_bond, 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cancel_bond, 4525c0b052090a57b3926669c23349b0f0db68853f8Andre Eisenbach get_connection_state, 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project pin_reply, 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ssp_reply, 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project get_profile_interface, 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dut_mode_configure, 457ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta dut_mode_send, 458fc4b2f1953dbe60464d0f5ef7daaa10001fbc62fMatthew Xie#if BLE_INCLUDED == TRUE 459bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu le_test_mode, 460fc4b2f1953dbe60464d0f5ef7daaa10001fbc62fMatthew Xie#else 461bad70b1d0071ee9b16a029ff145e8e53038571ffZhihai Xu NULL, 462fc4b2f1953dbe60464d0f5ef7daaa10001fbc62fMatthew Xie#endif 46310aecea0649e523ad9e94b5d0256e72729ec5875Sharvil Nanavati config_hci_snoop_log, 46410aecea0649e523ad9e94b5d0256e72729ec5875Sharvil Nanavati set_os_callouts, 465e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji read_energy_info, 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst bt_interface_t* bluetooth__get_bluetooth_interface () 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* fixme -- add property to disable bt interface ? */ 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return &bluetoothInterface; 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int close_bluetooth_stack(struct hw_device_t* device) 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4775cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(device); 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cleanup(); 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return 0; 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int open_bluetooth_stack (const struct hw_module_t* module, char const* name, 4835cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen struct hw_device_t** abstraction) 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4855cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(name); 4865cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bluetooth_device_t *stack = malloc(sizeof(bluetooth_device_t) ); 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(stack, 0, sizeof(bluetooth_device_t) ); 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project stack->common.tag = HARDWARE_DEVICE_TAG; 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project stack->common.version = 0; 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project stack->common.module = (struct hw_module_t*)module; 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project stack->common.close = close_bluetooth_stack; 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project stack->get_bluetooth_interface = bluetooth__get_bluetooth_interface; 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *abstraction = (struct hw_device_t*)stack; 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return 0; 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic struct hw_module_methods_t bt_stack_module_methods = { 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project .open = open_bluetooth_stack, 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstruct hw_module_t HAL_MODULE_INFO_SYM = { 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project .tag = HARDWARE_MODULE_TAG, 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project .version_major = 1, 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project .version_minor = 0, 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project .id = BT_HARDWARE_MODULE_ID, 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project .name = "Bluetooth Stack", 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project .author = "The Android Open Source Project", 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project .methods = &bt_stack_module_methods 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 513