15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 31025687c6679608fe9df918f37011414ffc72b62Hemant Gupta * Copyright (c) 2014 The Android Open Source Project 45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2009-2012 Broadcom Corporation 55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * you may not use this file except in compliance with the License. 85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * You may obtain a copy of the License at: 95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * See the License for the specific language governing permissions and 165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * limitations under the License. 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 * 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Filename: btif_storage.c 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Description: Stores the local BT adapter and remote device properties in 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * NVRAM storage, typically as xml file in the 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * mobile's filesystem 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdlib.h> 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <time.h> 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <ctype.h> 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <alloca.h> 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <hardware/bluetooth.h> 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_config.h" 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define LOG_TAG "BTIF_STORAGE" 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_api.h" 42377cb1407ee6ee1ff91b15bfa7052abed1023d18Sunny Kapdi#include "btif_storage.h" 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_util.h" 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bd.h" 45479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati#include "config.h" 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h" 47479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati#include "osi.h" 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_hh_api.h" 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_hh.h" 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <cutils/log.h> 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Constants & Macros 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_PATH_BLUEDROID "/data/misc/bluedroid" 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project//#define BTIF_STORAGE_PATH_ADAPTER_INFO "adapter_info" 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project//#define BTIF_STORAGE_PATH_REMOTE_DEVICES "remote_devices" 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_PATH_REMOTE_DEVTIME "Timestamp" 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_PATH_REMOTE_DEVCLASS "DevClass" 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_PATH_REMOTE_DEVTYPE "DevType" 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_PATH_REMOTE_NAME "Name" 65ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_STORAGE_PATH_REMOTE_VER_MFCT "Manufacturer" 66ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_STORAGE_PATH_REMOTE_VER_VER "LmpVer" 67ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_STORAGE_PATH_REMOTE_VER_SUBVER "LmpSubVer" 68ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project//#define BTIF_STORAGE_PATH_REMOTE_LINKKEYS "remote_linkkeys" 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_PATH_REMOTE_ALIASE "Aliase" 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_PATH_REMOTE_SERVICE "Service" 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_PATH_REMOTE_HIDINFO "HidInfo" 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_KEY_ADAPTER_NAME "Name" 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_KEY_ADAPTER_SCANMODE "ScanMode" 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_KEY_ADAPTER_DISC_TIMEOUT "DiscoveryTimeout" 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_AUTO_PAIR_CONF_FILE "/etc/bluetooth/auto_pair_devlist.conf" 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_PATH_AUTOPAIR_BLACKLIST "AutoPairBlacklist" 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_KEY_AUTOPAIR_BLACKLIST_ADDR "AddressBlacklist" 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_KEY_AUTOPAIR_BLACKLIST_EXACTNAME "ExactNameBlacklist" 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_KEY_AUTOPAIR_BLACKLIST_PARTIALNAME "PartialNameBlacklist" 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_KEY_AUTOPAIR_FIXPIN_KBLIST "FixedPinZerosKeyboardBlacklist" 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_KEY_AUTOPAIR_DYNAMIC_BLACKLIST_ADDR "DynamicAddressBlacklist" 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_AUTO_PAIR_CONF_VALUE_SEPARATOR "," 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* This is a local property to add a device found */ 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP 0xFF 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_GET_ADAPTER_PROP(t,v,l,p) \ 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project {p.type=t;p.val=v;p.len=l; btif_storage_get_adapter_property(&p);} 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_GET_REMOTE_PROP(b,t,v,l,p) \ 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project {p.type=t;p.val=v;p.len=l;btif_storage_get_remote_device_property(b,&p);} 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define STORAGE_BDADDR_STRING_SZ (18) /* 00:11:22:33:44:55 */ 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define STORAGE_UUID_STRING_SIZE (36+1) /* 00001200-0000-1000-8000-00805f9b34fb; */ 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define STORAGE_PINLEN_STRING_MAX_SIZE (2) /* ascii pinlen max chars */ 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define STORAGE_KEYTYPE_STRING_MAX_SIZE (1) /* ascii keytype max chars */ 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define STORAGE_KEY_TYPE_MAX (10) 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define STORAGE_HID_ATRR_MASK_SIZE (4) 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define STORAGE_HID_SUB_CLASS_SIZE (2) 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define STORAGE_HID_APP_ID_SIZE (2) 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define STORAGE_HID_VENDOR_ID_SIZE (4) 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define STORAGE_HID_PRODUCT_ID_SIZE (4) 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define STORAGE_HID_VERSION_SIZE (4) 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define STORAGE_HID_CTRY_CODE_SIZE (2) 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define STORAGE_HID_DESC_LEN_SIZE (4) 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define STORAGE_HID_DESC_MAX_SIZE (2*512) 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* <18 char bd addr> <space> LIST< <36 char uuid> <;> > <keytype (dec)> <pinlen> */ 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_REMOTE_SERVICES_ENTRY_SIZE_MAX (STORAGE_BDADDR_STRING_SZ + 1 +\ 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STORAGE_UUID_STRING_SIZE*BT_MAX_NUM_UUIDS + \ 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STORAGE_PINLEN_STRING_MAX_SIZE +\ 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STORAGE_KEYTYPE_STRING_MAX_SIZE) 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define STORAGE_REMOTE_LINKKEYS_ENTRY_SIZE (LINK_KEY_LEN*2 + 1 + 2 + 1 + 2) 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* <18 char bd addr> <space>LIST <attr_mask> <space> > <sub_class> <space> <app_id> <space> 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project <vendor_id> <space> > <product_id> <space> <version> <space> 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project <ctry_code> <space> > <desc_len> <space> <desc_list> <space> */ 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_HID_INFO_ENTRY_SIZE_MAX (STORAGE_BDADDR_STRING_SZ + 1 +\ 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STORAGE_HID_ATRR_MASK_SIZE + 1 +\ 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STORAGE_HID_SUB_CLASS_SIZE + 1 +\ 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STORAGE_HID_APP_ID_SIZE+ 1 +\ 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STORAGE_HID_VENDOR_ID_SIZE+ 1 +\ 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STORAGE_HID_PRODUCT_ID_SIZE+ 1 +\ 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STORAGE_HID_VERSION_SIZE+ 1 +\ 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STORAGE_HID_CTRY_CODE_SIZE+ 1 +\ 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STORAGE_HID_DESC_LEN_SIZE+ 1 +\ 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project STORAGE_HID_DESC_MAX_SIZE+ 1 ) 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* currently remote services is the potentially largest entry */ 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_MAX_LINE_SZ BTIF_REMOTE_SERVICES_ENTRY_SIZE_MAX 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* check against unv max entry size at compile time */ 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTIF_STORAGE_ENTRY_MAX_SIZE > UNV_MAXLINE_LENGTH) 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project #error "btif storage entry size exceeds unv max line size" 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_HL_APP "hl_app" 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_HL_APP_CB "hl_app_cb" 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_HL_APP_DATA "hl_app_data_" 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_STORAGE_HL_APP_MDL_DATA "hl_app_mdl_data_" 1527939ed0c9a50c769e9e648a2d7751e0894b485edzzy 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Local type definitions 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t num_devices; 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t devices[BTM_SEC_MAX_DEVICE_RECORDS]; 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btif_bonded_devices_t; 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 163ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** External variables 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern UINT16 bta_service_id_to_uuid_lkup_tbl [BTA_MAX_SERVICE_ID]; 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern bt_bdaddr_t btif_local_bd_addr; 167ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 168ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/************************************************************************************ 169ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** External functions 170ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta************************************************************************************/ 171ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 172ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern void btif_gatts_add_bonded_dev_from_nv(BD_ADDR bda); 173ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 175ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Internal Functions 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 178ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battabt_status_t btif_in_fetch_bonded_ble_device(char *remote_bd_addr,int add, 179ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_bonded_devices_t *p_bonded_devices); 180ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battabt_status_t btif_storage_get_remote_addr_type(bt_bdaddr_t *remote_bd_addr, 181ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int *addr_type); 182ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Static functions 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 186ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_in_split_uuids_string_to_list 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Internal helper function to split the string of UUIDs 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** read from the NVRAM to an array 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void btif_in_split_uuids_string_to_list(char *str, bt_uuid_t *p_uuid, 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t *p_num_uuid) 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char buf[64]; 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char *p_start = str; 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char *p_needle; 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t num = 0; 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project do 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //p_needle = strchr(p_start, ';'); 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_needle = strchr(p_start, ' '); 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_needle < p_start) break; 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(buf, 0, sizeof(buf)); 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project strncpy(buf, p_start, (p_needle-p_start)); 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project string_to_uuid(buf, p_uuid + num); 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num++; 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_start = ++p_needle; 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } while (*p_start != 0); 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_num_uuid = num; 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int prop2cfg(bt_bdaddr_t *remote_bd_addr, bt_property_t *prop) 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr = {0}; 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(remote_bd_addr) 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(remote_bd_addr, &bdstr); 223e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("in, bd addr:%s, prop type:%d, len:%d", bdstr, prop->type, prop->len); 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char value[1024]; 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(prop->len <= 0 || prop->len > (int)sizeof(value) - 1) 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 227e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("property type:%d, len:%d is invalid", prop->type, prop->len); 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(prop->type) 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP: 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_int("Remote", bdstr, 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_PATH_REMOTE_DEVTIME, (int)time(NULL)); 2357939ed0c9a50c769e9e648a2d7751e0894b485edzzy static const char* exclude_filter[] = 2367939ed0c9a50c769e9e648a2d7751e0894b485edzzy {"LinkKey", "LE_KEY_PENC", "LE_KEY_PID", "LE_KEY_PCSRK", "LE_KEY_LENC", "LE_KEY_LCSRK"}; 2377939ed0c9a50c769e9e648a2d7751e0894b485edzzy btif_config_filter_remove("Remote", exclude_filter, sizeof(exclude_filter)/sizeof(char*), 2387939ed0c9a50c769e9e648a2d7751e0894b485edzzy BTIF_STORAGE_MAX_ALLOWED_REMOTE_DEVICE); 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_BDNAME: 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project strncpy(value, (char*)prop->val, prop->len); 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project value[prop->len]='\0'; 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(remote_bd_addr) 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_str("Remote", bdstr, 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_PATH_REMOTE_NAME, value); 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else btif_config_set_str("Local", "Adapter", 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_KEY_ADAPTER_NAME, value); 248fbf76881316471faf631dc543089efaeaf72df8dHemant Gupta /* save name immediately */ 249fbf76881316471faf631dc543089efaeaf72df8dHemant Gupta btif_config_save(); 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_REMOTE_FRIENDLY_NAME: 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project strncpy(value, (char*)prop->val, prop->len); 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project value[prop->len]='\0'; 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_str("Remote", bdstr, BTIF_STORAGE_PATH_REMOTE_ALIASE, value); 255ed999f5e92ef9e718f4e6a5d6e68caf1001961c8Matthew Xie /* save friendly name immediately */ 256ed999f5e92ef9e718f4e6a5d6e68caf1001961c8Matthew Xie btif_config_save(); 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_ADAPTER_SCAN_MODE: 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_int("Local", "Adapter", 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_KEY_ADAPTER_SCANMODE, *(int*)prop->val); 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT: 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_int("Local", "Adapter", 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_KEY_ADAPTER_DISC_TIMEOUT, *(int*)prop->val); 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_CLASS_OF_DEVICE: 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_int("Remote", bdstr, 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_PATH_REMOTE_DEVCLASS, *(int*)prop->val); 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_TYPE_OF_DEVICE: 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_int("Remote", bdstr, 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_PATH_REMOTE_DEVTYPE, *(int*)prop->val); 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_UUIDS: 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t i; 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char buf[64]; 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project value[0] = 0; 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i=0; i < (prop->len)/sizeof(bt_uuid_t); i++) 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_uuid_t *p_uuid = (bt_uuid_t*)prop->val + i; 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(buf, 0, sizeof(buf)); 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uuid_to_string(p_uuid, buf); 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project strcat(value, buf); 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //strcat(value, ";"); 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project strcat(value, " "); 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_str("Remote", bdstr, BTIF_STORAGE_PATH_REMOTE_SERVICE, value); 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_save(); 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 292ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BT_PROPERTY_REMOTE_VERSION_INFO: 293ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 294ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_remote_version_t *info = (bt_remote_version_t *)prop->val; 295ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 296ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!info) 297ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return FALSE; 298ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 299ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_config_set_int("Remote", bdstr, 300ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_STORAGE_PATH_REMOTE_VER_MFCT, info->manufacturer); 301ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_config_set_int("Remote", bdstr, 302ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_STORAGE_PATH_REMOTE_VER_VER, info->version); 303ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_config_set_int("Remote", bdstr, 304ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_STORAGE_PATH_REMOTE_VER_SUBVER, info->sub_ver); 305ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_config_save(); 306ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } break; 307ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 309e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("Unknow prop type:%d", prop->type); 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic int cfg2prop(bt_bdaddr_t *remote_bd_addr, bt_property_t *prop) 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr = {0}; 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(remote_bd_addr) 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(remote_bd_addr, &bdstr); 319e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("in, bd addr:%s, prop type:%d, len:%d", bdstr, prop->type, prop->len); 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(prop->len <= 0) 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 322e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("property type:%d, len:%d is invalid", prop->type, prop->len); 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int ret = FALSE; 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch(prop->type) 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP: 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(prop->len >= (int)sizeof(int)) 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = btif_config_get_int("Remote", bdstr, 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_PATH_REMOTE_DEVTIME, (int*)prop->val); 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_BDNAME: 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int len = prop->len; 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(remote_bd_addr) 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = btif_config_get_str("Remote", bdstr, 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_PATH_REMOTE_NAME, (char*)prop->val, &len); 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else ret = btif_config_get_str("Local", "Adapter", 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_KEY_ADAPTER_NAME, (char*)prop->val, &len); 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(ret && len && len <= prop->len) 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop->len = len - 1; 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop->len = 0; 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = FALSE; 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_REMOTE_FRIENDLY_NAME: 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int len = prop->len; 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = btif_config_get_str("Remote", bdstr, 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_PATH_REMOTE_ALIASE, (char*)prop->val, &len); 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(ret && len && len <= prop->len) 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop->len = len - 1; 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop->len = 0; 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = FALSE; 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_ADAPTER_SCAN_MODE: 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(prop->len >= (int)sizeof(int)) 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = btif_config_get_int("Local", "Adapter", 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_KEY_ADAPTER_SCANMODE, (int*)prop->val); 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT: 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(prop->len >= (int)sizeof(int)) 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = btif_config_get_int("Local", "Adapter", 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_KEY_ADAPTER_DISC_TIMEOUT, (int*)prop->val); 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_CLASS_OF_DEVICE: 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(prop->len >= (int)sizeof(int)) 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = btif_config_get_int("Remote", bdstr, 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_PATH_REMOTE_DEVCLASS, (int*)prop->val); 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_TYPE_OF_DEVICE: 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(prop->len >= (int)sizeof(int)) 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = btif_config_get_int("Remote", 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr, BTIF_STORAGE_PATH_REMOTE_DEVTYPE, (int*)prop->val); 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BT_PROPERTY_UUIDS: 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char value[1280]; 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int size = sizeof(value); 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(btif_config_get_str("Remote", bdstr, 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_PATH_REMOTE_SERVICE, value, &size)) 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_uuid_t *p_uuid = (bt_uuid_t*)prop->val; 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t num_uuids = 0; 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_in_split_uuids_string_to_list(value, p_uuid, &num_uuids); 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project prop->len = num_uuids * sizeof(bt_uuid_t); 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = TRUE; 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 397ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 398ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 399ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta prop->val = NULL; 400ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta prop->len = 0; 401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 402ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } break; 403ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 404ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BT_PROPERTY_REMOTE_VERSION_INFO: 405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_remote_version_t *info = (bt_remote_version_t *)prop->val; 407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(prop->len >= (int)sizeof(bt_remote_version_t)) 409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ret = btif_config_get_int("Remote", bdstr, 411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_STORAGE_PATH_REMOTE_VER_MFCT, &info->manufacturer); 412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (ret == TRUE) 414ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ret = btif_config_get_int("Remote", bdstr, 415ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_STORAGE_PATH_REMOTE_VER_VER, &info->version); 416ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (ret == TRUE) 418ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ret = btif_config_get_int("Remote", bdstr, 419ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_STORAGE_PATH_REMOTE_VER_SUBVER, &info->sub_ver); 420ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 421ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } break; 422ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 424e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("Unknow prop type:%d", prop->type); 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ret; 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 430f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera/******************************************************************************* 431f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera** 432f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera** Function btif_in_fetch_bonded_devices 433f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera** 434f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera** Description Internal helper function to fetch the bonded devices 435f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera** from NVRAM 436f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera** 437f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera** Returns BT_STATUS_SUCCESS if successful, BT_STATUS_FAIL otherwise 438f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera** 439f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera*******************************************************************************/ 440f281b43fbf6832b80651e0dbf300294ba9808f20Priti Agherastatic bt_status_t btif_in_fetch_bonded_device(char *bdstr) 441f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera{ 442f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera BOOLEAN bt_linkkey_file_found=FALSE; 443f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera int device_type; 444f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera 445f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera int type = BTIF_CFG_TYPE_BIN; 446f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera LINK_KEY link_key; 447f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera int size = sizeof(link_key); 448f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera if(btif_config_get("Remote", bdstr, "LinkKey", (char*)link_key, &size, &type)) 449f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera { 450f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera int linkkey_type; 451f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera if(btif_config_get_int("Remote", bdstr, "LinkKeyType", &linkkey_type)) 452f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera { 453f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera bt_linkkey_file_found = TRUE; 454f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera } 455f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera else 456f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera { 457f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera bt_linkkey_file_found = FALSE; 458f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera } 459f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera } 460d5ebf6b695a5b40563b5fddca97c0591e39557f1Matthew Xie#if (BLE_INCLUDED == TRUE) 461f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera if((btif_in_fetch_bonded_ble_device(bdstr, FALSE, NULL) != BT_STATUS_SUCCESS) 462f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera && (!bt_linkkey_file_found)) 463f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera { 464afa6e1abbedaad8fe854b0f43999b8aeb801af91Matthew Xie BTIF_TRACE_DEBUG("Remote device:%s, no link key or ble key found", bdstr); 465f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera return BT_STATUS_FAIL; 466f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera } 467d5ebf6b695a5b40563b5fddca97c0591e39557f1Matthew Xie#else 468d5ebf6b695a5b40563b5fddca97c0591e39557f1Matthew Xie if((!bt_linkkey_file_found)) 469d5ebf6b695a5b40563b5fddca97c0591e39557f1Matthew Xie { 470afa6e1abbedaad8fe854b0f43999b8aeb801af91Matthew Xie BTIF_TRACE_DEBUG("Remote device:%s, no link key found", bdstr); 471d5ebf6b695a5b40563b5fddca97c0591e39557f1Matthew Xie return BT_STATUS_FAIL; 472d5ebf6b695a5b40563b5fddca97c0591e39557f1Matthew Xie } 473d5ebf6b695a5b40563b5fddca97c0591e39557f1Matthew Xie#endif 474f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera return BT_STATUS_SUCCESS; 475f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera} 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_in_fetch_bonded_devices 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Internal helper function to fetch the bonded devices 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from NVRAM 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS if successful, BT_STATUS_FAIL otherwise 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic bt_status_t btif_in_fetch_bonded_devices(btif_bonded_devices_t *p_bonded_devices, int add) 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 489e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("in add:%d", add); 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(p_bonded_devices, 0, sizeof(btif_bonded_devices_t)); 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char kname[128], vname[128]; 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project short kpos; 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int kname_size; 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project kname_size = sizeof(kname); 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project kname[0] = 0; 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project kpos = 0; 498ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BOOLEAN bt_linkkey_file_found=FALSE; 499ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int device_type; 500ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project do 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project kpos = btif_config_next_key(kpos, "Remote", kname, &kname_size); 504e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("Remote device:%s, size:%d", kname, kname_size); 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int type = BTIF_CFG_TYPE_BIN; 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project LINK_KEY link_key; 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int size = sizeof(link_key); 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(btif_config_get("Remote", kname, "LinkKey", (char*)link_key, &size, &type)) 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int linkkey_type; 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(btif_config_get_int("Remote", kname, "LinkKeyType", &linkkey_type)) 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //int pin_len; 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project //btif_config_get_int("Remote", kname, "PinLength", &pin_len)) 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t bd_addr; 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project str2bd(kname, &bd_addr); 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(add) 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project DEV_CLASS dev_class = {0, 0, 0}; 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int cod; 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(btif_config_get_int("Remote", kname, "DevClass", &cod)) 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint2devclass((UINT32)cod, dev_class); 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_DmAddDevice(bd_addr.address, dev_class, link_key, 0, 0, (UINT8)linkkey_type, 0); 524ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 525fc4b2f1953dbe60464d0f5ef7daaa10001fbc62fMatthew Xie#if BLE_INCLUDED == TRUE 526ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btif_config_get_int("Remote", kname, "DevType", &device_type) && 527ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (device_type == BT_DEVICE_TYPE_DUMO) ) 528ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 529ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gatts_add_bonded_dev_from_nv(bd_addr.address); 530ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 531fc4b2f1953dbe60464d0f5ef7daaa10001fbc62fMatthew Xie#endif 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 533ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_linkkey_file_found = TRUE; 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&p_bonded_devices->devices[p_bonded_devices->num_devices++], &bd_addr, sizeof(bt_bdaddr_t)); 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 536ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 537ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 538ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE) 539ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_linkkey_file_found = FALSE; 540ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#else 541e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("bounded device:%s, LinkKeyType or PinLength is invalid", kname); 542ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 543ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 545ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE) 546ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(!(btif_in_fetch_bonded_ble_device(kname,add, p_bonded_devices)) && (!bt_linkkey_file_found)) 547ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 548e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("Remote device:%s, no link key or ble key found", kname); 549ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 550ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#else 551ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(!bt_linkkey_file_found) 552e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("Remote device:%s, no link key", kname); 553ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project kname_size = sizeof(kname); 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project kname[0] = 0; 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } while(kpos != -1); 557e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("out"); 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Externs 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/************************************************************************************ 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Functions 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project************************************************************************************/ 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/** functions are synchronous. 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * functions can be called by both internal modules such as BTIF_DM and by external entiries from HAL via BTIF_context_switch 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * For OUT parameters, caller is expected to provide the memory. 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Caller is expected to provide a valid pointer to 'property->value' based on the property->type 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_storage_get_adapter_property 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF storage API - Fetches the adapter property->type 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from NVRAM and fills property->val. 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Caller should provide memory for property->val and 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** set the property->val 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS if the fetch was successful, 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BT_STATUS_FAIL otherwise 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_storage_get_adapter_property(bt_property_t *property) 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Special handling for adapter BD_ADDR and BONDED_DEVICES */ 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (property->type == BT_PROPERTY_BDADDR) 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BD_ADDR addr; 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t *bd_addr = (bt_bdaddr_t*)property->val; 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* This has been cached in btif. Just fetch it from there */ 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(bd_addr, &btif_local_bd_addr, sizeof(bt_bdaddr_t)); 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project property->len = sizeof(bt_bdaddr_t); 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (property->type == BT_PROPERTY_ADAPTER_BONDED_DEVICES) 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_bonded_devices_t bonded_devices; 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_in_fetch_bonded_devices(&bonded_devices, 0); 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 606e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s: Number of bonded devices: %d Property:BT_PROPERTY_ADAPTER_BONDED_DEVICES", __FUNCTION__, bonded_devices.num_devices); 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bonded_devices.num_devices > 0) 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project property->len = bonded_devices.num_devices * sizeof(bt_bdaddr_t); 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(property->val, bonded_devices.devices, property->len); 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if there are no bonded_devices, then length shall be 0 */ 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (property->type == BT_PROPERTY_UUIDS) 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* publish list of local supported services */ 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_uuid_t *p_uuid = (bt_uuid_t*)property->val; 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t num_uuids = 0; 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t i; 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_SERVICE_MASK service_mask = btif_get_enabled_services_mask(); 625e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("%s service_mask:0x%x", __FUNCTION__, service_mask); 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i=0; i < BTA_MAX_SERVICE_ID; i++) 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* This should eventually become a function when more services are enabled */ 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (service_mask 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &(tBTA_SERVICE_MASK)(1 << i)) 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (i) 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_HFP_SERVICE_ID: 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uuid16_to_uuid128(UUID_SERVCLASS_AG_HANDSFREE, 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_uuid+num_uuids); 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_uuids++; 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* intentional fall through: Send both BFP & HSP UUIDs if HFP is enabled */ 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_HSP_SERVICE_ID: 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uuid16_to_uuid128(UUID_SERVCLASS_HEADSET_AUDIO_GATEWAY, 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_uuid+num_uuids); 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_uuids++; 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project }break; 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_A2DP_SERVICE_ID: 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uuid16_to_uuid128(UUID_SERVCLASS_AUDIO_SOURCE, 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_uuid+num_uuids); 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_uuids++; 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project }break; 6531025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HFP_HS_SERVICE_ID: 6541025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 6551025687c6679608fe9df918f37011414ffc72b62Hemant Gupta uuid16_to_uuid128(UUID_SERVCLASS_HF_HANDSFREE, 6561025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_uuid+num_uuids); 6571025687c6679608fe9df918f37011414ffc72b62Hemant Gupta num_uuids++; 6581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta }break; 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project property->len = (num_uuids)*sizeof(bt_uuid_t); 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* fall through for other properties */ 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(!cfg2prop(NULL, property)) 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return btif_dm_get_adapter_property(property); 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_storage_set_adapter_property 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF storage API - Stores the adapter property 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** to NVRAM 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS if the store was successful, 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BT_STATUS_FAIL otherwise 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_storage_set_adapter_property(bt_property_t *property) 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return prop2cfg(NULL, property) ? BT_STATUS_SUCCESS : BT_STATUS_FAIL; 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_storage_get_remote_device_property 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF storage API - Fetches the remote device property->type 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** from NVRAM and fills property->val. 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Caller should provide memory for property->val and 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** set the property->val 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS if the fetch was successful, 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BT_STATUS_FAIL otherwise 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_storage_get_remote_device_property(bt_bdaddr_t *remote_bd_addr, 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t *property) 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return cfg2prop(remote_bd_addr, property) ? BT_STATUS_SUCCESS : BT_STATUS_FAIL; 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_storage_set_remote_device_property 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF storage API - Stores the remote device property 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** to NVRAM 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS if the store was successful, 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BT_STATUS_FAIL otherwise 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_storage_set_remote_device_property(bt_bdaddr_t *remote_bd_addr, 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t *property) 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return prop2cfg(remote_bd_addr, property) ? BT_STATUS_SUCCESS : BT_STATUS_FAIL; 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_storage_add_remote_device 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF storage API - Adds a newly discovered device to NVRAM 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** along with the timestamp. Also, stores the various 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** properties - RSSI, BDADDR, NAME (if found in EIR) 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS if the store was successful, 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BT_STATUS_FAIL otherwise 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 737ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battabt_status_t btif_storage_add_remote_device(bt_bdaddr_t *remote_bd_addr, 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t num_properties, 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t *properties) 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t i = 0; 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* TODO: If writing a property, fails do we go back undo the earlier 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * written properties? */ 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i=0; i < num_properties; i++) 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Ignore the RSSI as this is not stored in DB */ 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (properties[i].type == BT_PROPERTY_REMOTE_RSSI) 7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project continue; 7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BD_ADDR for remote device needs special handling as we also store timestamp */ 7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (properties[i].type == BT_PROPERTY_BDADDR) 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t addr_prop; 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&addr_prop, &properties[i], sizeof(bt_property_t)); 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project addr_prop.type = BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP; 756ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_storage_set_remote_device_property(remote_bd_addr, 7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &addr_prop); 7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 761ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_storage_set_remote_device_property(remote_bd_addr, 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &properties[i]); 7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_storage_add_bonded_device 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF storage API - Adds the newly bonded device to NVRAM 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** along with the link-key, Key type and Pin key length 7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS if the store was successful, 7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BT_STATUS_FAIL otherwise 7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_storage_add_bonded_device(bt_bdaddr_t *remote_bd_addr, 7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project LINK_KEY link_key, 7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint8_t key_type, 7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint8_t pin_length) 7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr; 7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(remote_bd_addr, &bdstr); 7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int ret = btif_config_set_int("Remote", bdstr, "LinkKeyType", (int)key_type); 7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret &= btif_config_set_int("Remote", bdstr, "PinLength", (int)pin_length); 7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret &= btif_config_set("Remote", bdstr, "LinkKey", (const char*)link_key, sizeof(LINK_KEY), BTIF_CFG_TYPE_BIN); 7905e08d1ec92555e2cb3d80f1a9a3c746c76ed3e5dSrinu Jella /* write bonded info immediately */ 7915e08d1ec92555e2cb3d80f1a9a3c746c76ed3e5dSrinu Jella btif_config_flush(); 7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ret ? BT_STATUS_SUCCESS : BT_STATUS_FAIL; 7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_storage_remove_bonded_device 7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF storage API - Deletes the bonded device from NVRAM 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS if the deletion was successful, 8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BT_STATUS_FAIL otherwise 8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_storage_remove_bonded_device(bt_bdaddr_t *remote_bd_addr) 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr; 8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(remote_bd_addr, &bdstr); 809e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("in bd addr:%s", bdstr); 810a7ea809912e5a945d657957491753260826422f4Zhihai Xu int ret = 1; 811a7ea809912e5a945d657957491753260826422f4Zhihai Xu if(btif_config_exist("Remote", bdstr, "LinkKeyType")) 812a7ea809912e5a945d657957491753260826422f4Zhihai Xu ret &= btif_config_remove("Remote", bdstr, "LinkKeyType"); 813a7ea809912e5a945d657957491753260826422f4Zhihai Xu if(btif_config_exist("Remote", bdstr, "PinLength")) 814a7ea809912e5a945d657957491753260826422f4Zhihai Xu ret &= btif_config_remove("Remote", bdstr, "PinLength"); 815a7ea809912e5a945d657957491753260826422f4Zhihai Xu if(btif_config_exist("Remote", bdstr, "LinkKey")) 816a7ea809912e5a945d657957491753260826422f4Zhihai Xu ret &= btif_config_remove("Remote", bdstr, "LinkKey"); 8175e08d1ec92555e2cb3d80f1a9a3c746c76ed3e5dSrinu Jella /* write bonded info immediately */ 8185e08d1ec92555e2cb3d80f1a9a3c746c76ed3e5dSrinu Jella btif_config_flush(); 8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ret ? BT_STATUS_SUCCESS : BT_STATUS_FAIL; 8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_storage_load_bonded_devices 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF storage API - Loads all the bonded devices from NVRAM 8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** and adds to the BTA. 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Additionally, this API also invokes the adaper_properties_cb 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** and remote_device_properties_cb for each of the bonded devices. 8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS if successful, BT_STATUS_FAIL otherwise 8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_storage_load_bonded_devices(void) 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char *fname; 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_bonded_devices_t bonded_devices; 8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t i = 0; 8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t adapter_props[6]; 8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t num_props = 0; 8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_property_t remote_properties[8]; 8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t addr; 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdname_t name, alias; 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_scan_mode_t mode; 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t disc_timeout; 8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t *devices_list; 8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_uuid_t local_uuids[BT_MAX_NUM_UUIDS]; 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_uuid_t remote_uuids[BT_MAX_NUM_UUIDS]; 8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t cod, devtype; 8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_in_fetch_bonded_devices(&bonded_devices, 1); 8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Now send the adapter_properties_cb with all adapter_properties */ 8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(adapter_props, 0, sizeof(adapter_props)); 8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BD_ADDR */ 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_GET_ADAPTER_PROP(BT_PROPERTY_BDADDR, &addr, sizeof(addr), 8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project adapter_props[num_props]); 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BD_NAME */ 8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_GET_ADAPTER_PROP(BT_PROPERTY_BDNAME, &name, sizeof(name), 8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project adapter_props[num_props]); 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* SCAN_MODE */ 8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* TODO: At the time of BT on, always report the scan mode as 0 irrespective 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project of the scan_mode during the previous enable cycle. 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project This needs to be re-visited as part of the app/stack enable sequence 8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project synchronization */ 8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project mode = BT_SCAN_MODE_NONE; 8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project adapter_props[num_props].type = BT_PROPERTY_ADAPTER_SCAN_MODE; 8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project adapter_props[num_props].len = sizeof(mode); 8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project adapter_props[num_props].val = &mode; 8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* DISC_TIMEOUT */ 8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_GET_ADAPTER_PROP(BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT, 8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &disc_timeout, sizeof(disc_timeout), 8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project adapter_props[num_props]); 8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BONDED_DEVICES */ 8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project devices_list = (bt_bdaddr_t*)malloc(sizeof(bt_bdaddr_t)*bonded_devices.num_devices); 8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project adapter_props[num_props].type = BT_PROPERTY_ADAPTER_BONDED_DEVICES; 8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project adapter_props[num_props].len = bonded_devices.num_devices * sizeof(bt_bdaddr_t); 8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project adapter_props[num_props].val = devices_list; 8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i=0; i < bonded_devices.num_devices; i++) 8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(devices_list + i, &bonded_devices.devices[i], sizeof(bt_bdaddr_t)); 8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* LOCAL UUIDs */ 8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_GET_ADAPTER_PROP(BT_PROPERTY_UUIDS, 8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project local_uuids, sizeof(local_uuids), 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project adapter_props[num_props]); 9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_adapter_properties_evt(BT_STATUS_SUCCESS, num_props, adapter_props); 9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project free(devices_list); 9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 907e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_EVENT("%s: %d bonded devices found", __FUNCTION__, bonded_devices.num_devices); 9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < bonded_devices.num_devices; i++) 9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t *p_remote_addr; 9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props = 0; 9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_remote_addr = &bonded_devices.devices[i]; 9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(remote_properties, 0, sizeof(remote_properties)); 9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_GET_REMOTE_PROP(p_remote_addr, BT_PROPERTY_BDNAME, 9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &name, sizeof(name), 9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project remote_properties[num_props]); 9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_GET_REMOTE_PROP(p_remote_addr, BT_PROPERTY_REMOTE_FRIENDLY_NAME, 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &alias, sizeof(alias), 9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project remote_properties[num_props]); 9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_GET_REMOTE_PROP(p_remote_addr, BT_PROPERTY_CLASS_OF_DEVICE, 9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &cod, sizeof(cod), 9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project remote_properties[num_props]); 9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_GET_REMOTE_PROP(p_remote_addr, BT_PROPERTY_TYPE_OF_DEVICE, 9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &devtype, sizeof(devtype), 9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project remote_properties[num_props]); 9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_GET_REMOTE_PROP(p_remote_addr, BT_PROPERTY_UUIDS, 9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project remote_uuids, sizeof(remote_uuids), 9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project remote_properties[num_props]); 9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props++; 9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_remote_properties_evt(BT_STATUS_SUCCESS, p_remote_addr, 9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project num_props, remote_properties); 9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 949ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (BLE_INCLUDED == TRUE) 950ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 951ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 952ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 953ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btif_storage_add_ble_bonding_key 954ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 955ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description BTIF storage API - Adds the newly bonded device to NVRAM 956ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** along with the ble-key, Key type and Pin key length 957ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 958ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns BT_STATUS_SUCCESS if the store was successful, 959ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** BT_STATUS_FAIL otherwise 960ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 961ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 962ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 963ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battabt_status_t btif_storage_add_ble_bonding_key(bt_bdaddr_t *remote_bd_addr, 964ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta char *key, 965ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 key_type, 966ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 key_length) 967ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 968ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdstr_t bdstr; 969ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bd2str(remote_bd_addr, &bdstr); 970ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta const char* name; 971ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta switch(key_type) 972ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 973ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_KEY_PENC: 974ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_KEY_PENC"; 975ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 976ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_KEY_PID: 977ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_KEY_PID"; 978ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 979ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_KEY_PCSRK: 980ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_KEY_PCSRK"; 981ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 982ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_KEY_LENC: 983ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_KEY_LENC"; 984ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 985ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_KEY_LCSRK: 986ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_KEY_LCSRK"; 987ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 988ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta default: 989ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return BT_STATUS_FAIL; 990ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 991ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int ret = btif_config_set("Remote", bdstr, name, (const char*)key, (int)key_length, BTIF_CFG_TYPE_BIN); 992ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_config_save(); 993ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return ret ? BT_STATUS_SUCCESS : BT_STATUS_FAIL; 994ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 995ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 996ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 997ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 998ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btif_storage_get_ble_bonding_key 999ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1000ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description 1001ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1002ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns BT_STATUS_SUCCESS if the fetch was successful, 1003ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** BT_STATUS_FAIL otherwise 1004ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1005ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 1006ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battabt_status_t btif_storage_get_ble_bonding_key(bt_bdaddr_t *remote_bd_addr, 1007ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 key_type, 1008ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta char *key_value, 1009ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int key_length) 1010ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1011ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdstr_t bdstr; 1012ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bd2str(remote_bd_addr, &bdstr); 1013ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta const char* name; 1014ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int type = BTIF_CFG_TYPE_BIN; 1015ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta switch(key_type) 1016ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1017ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_KEY_PENC: 1018ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_KEY_PENC"; 1019ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1020ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_KEY_PID: 1021ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_KEY_PID"; 1022ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1023ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_KEY_PCSRK: 1024ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_KEY_PCSRK"; 1025ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1026ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_KEY_LENC: 1027ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_KEY_LENC"; 1028ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1029ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_KEY_LCSRK: 1030ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_KEY_LCSRK"; 1031ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1032ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta default: 1033ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return BT_STATUS_FAIL; 1034ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1035ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int ret = btif_config_get("Remote", bdstr, name, key_value, &key_length, &type); 1036ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return ret ? BT_STATUS_SUCCESS : BT_STATUS_FAIL; 1037ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1038ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1039ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1040ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 1041ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1042ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btif_storage_remove_ble_keys 1043ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1044ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description BTIF storage API - Deletes the bonded device from NVRAM 1045ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1046ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns BT_STATUS_SUCCESS if the deletion was successful, 1047ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** BT_STATUS_FAIL otherwise 1048ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1049ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 1050ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battabt_status_t btif_storage_remove_ble_bonding_keys(bt_bdaddr_t *remote_bd_addr) 1051ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1052ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdstr_t bdstr; 1053ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bd2str(remote_bd_addr, &bdstr); 1054e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG(" %s in bd addr:%s",__FUNCTION__, bdstr); 1055ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int ret = 1; 1056ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(btif_config_exist("Remote", bdstr, "LE_KEY_PENC")) 1057ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ret &= btif_config_remove("Remote", bdstr, "LE_KEY_PENC"); 1058ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(btif_config_exist("Remote", bdstr, "LE_KEY_PID")) 1059ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ret &= btif_config_remove("Remote", bdstr, "LE_KEY_PID"); 1060ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(btif_config_exist("Remote", bdstr, "LE_KEY_PCSRK")) 1061ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ret &= btif_config_remove("Remote", bdstr, "LE_KEY_PCSRK"); 1062ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(btif_config_exist("Remote", bdstr, "LE_KEY_LENC")) 1063ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ret &= btif_config_remove("Remote", bdstr, "LE_KEY_LENC"); 1064ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(btif_config_exist("Remote", bdstr, "LE_KEY_LCSRK")) 1065ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ret &= btif_config_remove("Remote", bdstr, "LE_KEY_LCSRK"); 1066ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_config_save(); 1067ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return ret ? BT_STATUS_SUCCESS : BT_STATUS_FAIL; 1068ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1069ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1070ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 1071ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1072ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btif_storage_add_ble_local_key 1073ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1074ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description BTIF storage API - Adds the ble key to NVRAM 1075ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1076ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns BT_STATUS_SUCCESS if the store was successful, 1077ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** BT_STATUS_FAIL otherwise 1078ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1079ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 1080ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battabt_status_t btif_storage_add_ble_local_key(char *key, 1081ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t key_type, 1082ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t key_length) 1083ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1084ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta const char* name; 1085ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta switch(key_type) 1086ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1087ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_LOCAL_KEY_IR: 1088ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_LOCAL_KEY_IR"; 1089ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1090ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_LOCAL_KEY_IRK: 1091ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_LOCAL_KEY_IRK"; 1092ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1093ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_LOCAL_KEY_DHK: 1094ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_LOCAL_KEY_DHK"; 1095ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1096ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_LOCAL_KEY_ER: 1097ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_LOCAL_KEY_ER"; 1098ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1099ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta default: 1100ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return BT_STATUS_FAIL; 1101ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1102ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int ret = btif_config_set("Local", "Adapter", name, (const char*)key, key_length, BTIF_CFG_TYPE_BIN); 1103ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_config_save(); 1104ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return ret ? BT_STATUS_SUCCESS : BT_STATUS_FAIL; 1105ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1106ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1107ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 1108ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1109ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btif_storage_get_ble_local_key 1110ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1111ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description 1112ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1113ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns BT_STATUS_SUCCESS if the fetch was successful, 1114ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** BT_STATUS_FAIL otherwise 1115ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1116ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 1117ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battabt_status_t btif_storage_get_ble_local_key(UINT8 key_type, 1118ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta char *key_value, 1119ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int key_length) 1120ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1121ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta const char* name; 1122ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int type = BTIF_CFG_TYPE_BIN; 1123ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta switch(key_type) 1124ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1125ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_LOCAL_KEY_IR: 1126ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_LOCAL_KEY_IR"; 1127ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1128ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_LOCAL_KEY_IRK: 1129ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_LOCAL_KEY_IRK"; 1130ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1131ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_LOCAL_KEY_DHK: 1132ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_LOCAL_KEY_DHK"; 1133ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1134ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_DM_LE_LOCAL_KEY_ER: 1135ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta name = "LE_LOCAL_KEY_ER"; 1136ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1137ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta default: 1138ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return BT_STATUS_FAIL; 1139ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1140ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int ret = btif_config_get("Local", "Adapter", name, key_value, &key_length, &type); 1141ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return ret ? BT_STATUS_SUCCESS : BT_STATUS_FAIL; 1142ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1143ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1144ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1145ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 1146ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1147ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btif_storage_remove_ble_local_keys 1148ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1149ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description BTIF storage API - Deletes the bonded device from NVRAM 1150ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1151ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns BT_STATUS_SUCCESS if the deletion was successful, 1152ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** BT_STATUS_FAIL otherwise 1153ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1154ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 1155ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battabt_status_t btif_storage_remove_ble_local_keys(void) 1156ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1157ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int ret = 1; 1158ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(btif_config_exist("Local", "Adapter", "LE_LOCAL_KEY_IR")) 1159ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ret &= btif_config_remove("Local", "Adapter", "LE_LOCAL_KEY_IR"); 1160ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(btif_config_exist("Local", "Adapter", "LE_LOCAL_KEY_IRK")) 1161ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ret &= btif_config_remove("Local", "Adapter", "LE_LOCAL_KEY_IRK"); 1162ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(btif_config_exist("Local", "Adapter", "LE_LOCAL_KEY_DHK")) 1163ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ret &= btif_config_remove("Local", "Adapter", "LE_LOCAL_KEY_DHK"); 1164ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(btif_config_exist("Local", "Adapter", "LE_LOCAL_KEY_ER")) 1165ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ret &= btif_config_remove("Local", "Adapter", "LE_LOCAL_KEY_ER"); 1166ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_config_save(); 1167ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return ret ? BT_STATUS_SUCCESS : BT_STATUS_FAIL; 1168ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1169ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1170ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battabt_status_t btif_in_fetch_bonded_ble_device(char *remote_bd_addr,int add, btif_bonded_devices_t *p_bonded_devices) 1171ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1172ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int device_type; 1173ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int addr_type; 1174ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta char buf[100]; 1175ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT32 i; 1176ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_bdaddr_t bd_addr; 1177ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BD_ADDR bta_bd_addr; 1178ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BOOLEAN is_device_added =FALSE; 1179f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera BOOLEAN key_found = FALSE; 1180ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_LE_KEY_VALUE *p; 1181ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1182ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(!btif_config_get_int("Remote", remote_bd_addr,"DevType", &device_type)) 1183ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return BT_STATUS_FAIL; 1184ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(device_type == BT_DEVICE_TYPE_BLE) 1185ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1186e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s %s found a BLE device", __FUNCTION__,remote_bd_addr); 1187ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta str2bd(remote_bd_addr, &bd_addr); 1188ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(bta_bd_addr, bd_addr.address); 1189ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btif_storage_get_remote_addr_type(&bd_addr, &addr_type) != BT_STATUS_SUCCESS) 1190ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1191ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return BT_STATUS_FAIL; 1192ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1193ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1194ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memset(buf, 0, sizeof(buf)); 1195ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btif_storage_get_ble_bonding_key(&bd_addr, 1196ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_DM_LE_KEY_PENC, 1197ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta buf, 1198ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sizeof(btif_dm_ble_penc_keys_t)) == BT_STATUS_SUCCESS) 1199ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1200ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(add) 1201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1202ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!is_device_added) 1203ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1204ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_DmAddBleDevice(bta_bd_addr, addr_type, BT_DEVICE_TYPE_BLE); 1205ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta is_device_added = TRUE; 1206ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1207ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p = (tBTA_LE_KEY_VALUE *)buf; 1208ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (i=0; i<16; i++) 1209ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1210e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("penc_key.ltk[%d]=0x%02x",i,p->penc_key.ltk[i]); 1211ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1212ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (i=0; i<8; i++) 1213ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1214e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("penc_key.rand[%d]=0x%02x",i,p->penc_key.rand[i]); 1215ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1216e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("p->penc_key.ediv=0x%04x",p->penc_key.ediv); 1217e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("p->penc_key.sec_level=0x%02x",p->penc_key.sec_level); 1218e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("p->penc_key.key_size=0x%02x",p->penc_key.key_size); 1219ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_DmAddBleKey (bta_bd_addr, (tBTA_LE_KEY_VALUE *)buf, BTIF_DM_LE_KEY_PENC); 1220ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1221f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera key_found = TRUE; 1222ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1223ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1224ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memset(buf, 0, sizeof(buf)); 1225ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btif_storage_get_ble_bonding_key(&bd_addr, 1226ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_DM_LE_KEY_PID, 1227ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta buf, 12285e808468e0667a6a2a8a1e6de80efbc4f42fa0f0Andre Eisenbach sizeof(btif_dm_ble_pid_keys_t)) == BT_STATUS_SUCCESS) 1229ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1230ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(add) 1231ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1232ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!is_device_added) 1233ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1234ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_DmAddBleDevice(bta_bd_addr, addr_type, BT_DEVICE_TYPE_BLE); 1235ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta is_device_added = TRUE; 1236ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1237ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p = (tBTA_LE_KEY_VALUE *)buf; 1238ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (i=0; i<16; i++) 1239ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 12405e808468e0667a6a2a8a1e6de80efbc4f42fa0f0Andre Eisenbach BTIF_TRACE_DEBUG("p->pid_key.irk[%d]=0x%02x" 12415e808468e0667a6a2a8a1e6de80efbc4f42fa0f0Andre Eisenbach ,i,p->pid_key.irk[i]); 12425e808468e0667a6a2a8a1e6de80efbc4f42fa0f0Andre Eisenbach } 12435e808468e0667a6a2a8a1e6de80efbc4f42fa0f0Andre Eisenbach BTIF_TRACE_DEBUG("p->pid_key.addr_type=%d",p->pid_key.addr_type); 12445e808468e0667a6a2a8a1e6de80efbc4f42fa0f0Andre Eisenbach for (i=0; i<BD_ADDR_LEN; i++) 12455e808468e0667a6a2a8a1e6de80efbc4f42fa0f0Andre Eisenbach { 12465e808468e0667a6a2a8a1e6de80efbc4f42fa0f0Andre Eisenbach BTIF_TRACE_DEBUG("p->pid_key.static_addr[%d]=%02x" 12475e808468e0667a6a2a8a1e6de80efbc4f42fa0f0Andre Eisenbach ,i,p->pid_key.static_addr[i]); 1248ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1249ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1250ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_DmAddBleKey (bta_bd_addr, (tBTA_LE_KEY_VALUE *)buf, BTIF_DM_LE_KEY_PID); 1251ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1252f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera key_found = TRUE; 1253ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1254ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1255ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memset(buf, 0, sizeof(buf)); 1256ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btif_storage_get_ble_bonding_key(&bd_addr, 1257ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_DM_LE_KEY_PCSRK, 1258ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta buf, 1259ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sizeof(btif_dm_ble_pcsrk_keys_t)) == BT_STATUS_SUCCESS) 1260ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1261ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(add) 1262ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1263ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!is_device_added) 1264ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1265ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_DmAddBleDevice(bta_bd_addr, addr_type, BT_DEVICE_TYPE_BLE); 1266ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta is_device_added = TRUE; 1267ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1268ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1269ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p = (tBTA_LE_KEY_VALUE *)buf; 1270ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (i=0; i<16; i++) 1271ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1272e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("p->pcsrk_key.csrk[%d]=0x%02x",i, p->psrk_key.csrk[i]); 1273ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1274e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("p->pcsrk_key.counter=0x%08x",p->psrk_key.counter); 1275e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("p->pcsrk_key.sec_level=0x%02x",p->psrk_key.sec_level); 1276ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1277ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_DmAddBleKey (bta_bd_addr, (tBTA_LE_KEY_VALUE *)buf, BTIF_DM_LE_KEY_PCSRK); 1278ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1279f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera key_found = TRUE; 1280ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1281ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1282ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memset(buf, 0, sizeof(buf)); 1283ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btif_storage_get_ble_bonding_key(&bd_addr, 1284ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_DM_LE_KEY_LENC, 1285ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta buf, 1286ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sizeof(btif_dm_ble_lenc_keys_t)) == BT_STATUS_SUCCESS) 1287ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1288ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(add) 1289ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1290ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!is_device_added) 1291ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1292ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_DmAddBleDevice(bta_bd_addr, addr_type, BT_DEVICE_TYPE_BLE); 1293ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta is_device_added = TRUE; 1294ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1295ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p = (tBTA_LE_KEY_VALUE *)buf; 1296e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("p->lenc_key.div=0x%04x",p->lenc_key.div); 1297e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("p->lenc_key.key_size=0x%02x",p->lenc_key.key_size); 1298e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("p->lenc_key.sec_level=0x%02x",p->lenc_key.sec_level); 1299ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1300ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_DmAddBleKey (bta_bd_addr, (tBTA_LE_KEY_VALUE *)buf, BTIF_DM_LE_KEY_LENC); 1301ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1302f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera key_found = TRUE; 1303ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1304ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1305ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memset(buf, 0, sizeof(buf)); 1306ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (btif_storage_get_ble_bonding_key(&bd_addr, 1307ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_DM_LE_KEY_LCSRK, 1308ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta buf, 1309ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sizeof(btif_dm_ble_lcsrk_keys_t)) == BT_STATUS_SUCCESS) 1310ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1311ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(add) 1312ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1313ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!is_device_added) 1314ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1315ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_DmAddBleDevice(bta_bd_addr, addr_type, BT_DEVICE_TYPE_BLE); 1316ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta is_device_added = TRUE; 1317ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1318ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p = (tBTA_LE_KEY_VALUE *)buf; 1319e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("p->lcsrk_key.div=0x%04x",p->lcsrk_key.div); 1320e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("p->lcsrk_key.counter=0x%08x",p->lcsrk_key.counter); 1321e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("p->lcsrk_key.sec_level=0x%02x",p->lcsrk_key.sec_level); 1322ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1323ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_DmAddBleKey (bta_bd_addr, (tBTA_LE_KEY_VALUE *)buf, BTIF_DM_LE_KEY_LCSRK); 1324ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1325f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera key_found = TRUE; 1326ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1327ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1328ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* Fill in the bonded devices */ 1329ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (is_device_added) 1330ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1331ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&p_bonded_devices->devices[p_bonded_devices->num_devices++], &bd_addr, sizeof(bt_bdaddr_t)); 1332ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gatts_add_bonded_dev_from_nv(bta_bd_addr); 1333ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1334ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1335f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera if(key_found) 1336f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera return BT_STATUS_SUCCESS; 1337f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera else 1338f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera return BT_STATUS_FAIL; 1339ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1340ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return BT_STATUS_FAIL; 1341ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1342ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1343ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battabt_status_t btif_storage_set_remote_addr_type(bt_bdaddr_t *remote_bd_addr, 1344ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 addr_type) 1345ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1346ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdstr_t bdstr; 1347ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bd2str(remote_bd_addr, &bdstr); 1348ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int ret = btif_config_set_int("Remote", bdstr, "AddrType", (int)addr_type); 1349ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_config_save(); 1350ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return ret ? BT_STATUS_SUCCESS : BT_STATUS_FAIL; 1351ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1352ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1353ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 1354ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1355ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function btif_storage_get_remote_addr_type 1356ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1357ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description BTIF storage API - Fetches the remote addr type 1358ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1359ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns BT_STATUS_SUCCESS if the fetch was successful, 1360ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** BT_STATUS_FAIL otherwise 1361ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1362ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 1363ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battabt_status_t btif_storage_get_remote_addr_type(bt_bdaddr_t *remote_bd_addr, 1364ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int*addr_type) 1365ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1366ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdstr_t bdstr; 1367ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bd2str(remote_bd_addr, &bdstr); 1368ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int ret = btif_config_get_int("Remote", bdstr, "AddrType", addr_type); 1369ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return ret ? BT_STATUS_SUCCESS : BT_STATUS_FAIL; 1370ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1371ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_storage_add_hid_device_info 13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF storage API - Adds the hid information of bonded hid devices-to NVRAM 13775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS if the store was successful, 13795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BT_STATUS_FAIL otherwise 13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_storage_add_hid_device_info(bt_bdaddr_t *remote_bd_addr, 13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 attr_mask, UINT8 sub_class, 13855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 app_id, UINT16 vendor_id, 13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 product_id, UINT16 version, 13876efaf223753108aa84f55332898340db0c9d5ebfZhihai Xu UINT8 ctry_code, UINT16 ssr_max_latency, 13886efaf223753108aa84f55332898340db0c9d5ebfZhihai Xu UINT16 ssr_min_tout, UINT16 dl_len, UINT8 *dsc_list) 13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr; 1391e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("btif_storage_add_hid_device_info:"); 13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(remote_bd_addr, &bdstr); 13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_int("Remote", bdstr, "HidAttrMask", attr_mask); 13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_int("Remote", bdstr, "HidSubClass", sub_class); 13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_int("Remote", bdstr, "HidAppId", app_id); 13965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_int("Remote", bdstr, "HidVendorId", vendor_id); 13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_int("Remote", bdstr, "HidProductId", product_id); 13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_int("Remote", bdstr, "HidVersion", version); 13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_set_int("Remote", bdstr, "HidCountryCode", ctry_code); 14006efaf223753108aa84f55332898340db0c9d5ebfZhihai Xu btif_config_set_int("Remote", bdstr, "HidSSRMaxLatency", ssr_max_latency); 14016efaf223753108aa84f55332898340db0c9d5ebfZhihai Xu btif_config_set_int("Remote", bdstr, "HidSSRMinTimeout", ssr_min_tout); 14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(dl_len > 0) 14037fe56f58c2a3cf0ac80177aaa890c143cd5fd950Priti Aghera btif_config_set("Remote", bdstr, "HidDescriptor", (const char*)dsc_list, dl_len, 14047fe56f58c2a3cf0ac80177aaa890c143cd5fd950Priti Aghera BTIF_CFG_TYPE_BIN); 14057fe56f58c2a3cf0ac80177aaa890c143cd5fd950Priti Aghera btif_config_save(); 14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_storage_load_bonded_hid_info 14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF storage API - Loads hid info for all the bonded devices from NVRAM 14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** and adds those devices to the BTA_HH. 14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS if successful, BT_STATUS_FAIL otherwise 14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_storage_load_bonded_hid_info(void) 14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_bdaddr_t bd_addr; 14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_HH_DEV_DSCP_INFO dscp_info; 14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint32_t i; 14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint16_t attr_mask; 14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint8_t sub_class; 14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint8_t app_id; 14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char kname[128], vname[128]; 14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project short kpos; 14305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int kname_size; 14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project kname_size = sizeof(kname); 14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project kname[0] = 0; 14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project kpos = 0; 14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&dscp_info, 0, sizeof(dscp_info)); 14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project do 14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project kpos = btif_config_next_key(kpos, "Remote", kname, &kname_size); 1438e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("Remote device:%s, size:%d", kname, kname_size); 14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int value; 1440f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera if(btif_in_fetch_bonded_device(kname) == BT_STATUS_SUCCESS) 14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1442f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera if(btif_config_get_int("Remote", kname, "HidAttrMask", &value)) 1443f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera { 1444f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera attr_mask = (uint16_t)value; 14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1446f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera btif_config_get_int("Remote", kname, "HidSubClass", &value); 1447f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera sub_class = (uint8_t)value; 14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1449f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera btif_config_get_int("Remote", kname, "HidAppId", &value); 1450f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera app_id = (uint8_t)value; 14515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1452f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera btif_config_get_int("Remote", kname, "HidVendorId", &value); 1453f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera dscp_info.vendor_id = (uint16_t) value; 14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1455f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera btif_config_get_int("Remote", kname, "HidProductId", &value); 1456f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera dscp_info.product_id = (uint16_t) value; 14575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1458f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera btif_config_get_int("Remote", kname, "HidVersion", &value); 1459f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera dscp_info.version = (uint8_t) value; 14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1461f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera btif_config_get_int("Remote", kname, "HidCountryCode", &value); 1462f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera dscp_info.ctry_code = (uint8_t) value; 14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1464f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera value = 0; 1465f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera btif_config_get_int("Remote", kname, "HidSSRMaxLatency", &value); 1466f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera dscp_info.ssr_max_latency = (uint16_t) value; 14676efaf223753108aa84f55332898340db0c9d5ebfZhihai Xu 1468f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera value = 0; 1469f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera btif_config_get_int("Remote", kname, "HidSSRMinTimeout", &value); 1470f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera dscp_info.ssr_min_tout = (uint16_t) value; 14716efaf223753108aa84f55332898340db0c9d5ebfZhihai Xu 1472f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera int len = 0; 1473f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera int type; 1474f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera btif_config_get("Remote", kname, "HidDescriptor", NULL, &len, &type); 1475f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera if(len > 0) 1476f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera { 1477f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera dscp_info.descriptor.dl_len = (uint16_t)len; 1478f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera dscp_info.descriptor.dsc_list = (uint8_t*)alloca(len); 1479f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera btif_config_get("Remote", kname, "HidDescriptor", (char*)dscp_info.descriptor.dsc_list, &len, &type); 1480f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera } 1481f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera str2bd(kname, &bd_addr); 1482f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera // add extracted information to BTA HH 1483f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera if (btif_hh_add_added_dev(bd_addr,attr_mask)) 1484f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera { 1485f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera BTA_HhAddDev(bd_addr.address, attr_mask, sub_class, 1486f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera app_id, dscp_info); 1487f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera } 14885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1489f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera } 1490f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera else 1491f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera { 1492f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera if(btif_config_get_int("Remote", kname, "HidAttrMask", &value)) 14935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1494f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera btif_storage_remove_hid_info(&bd_addr); 1495f281b43fbf6832b80651e0dbf300294ba9808f20Priti Aghera str2bd(kname, &bd_addr); 14965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } while(kpos != -1); 14995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 15015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 15045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_storage_remove_hid_info 15065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF storage API - Deletes the bonded hid device info from NVRAM 15085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS if the deletion was successful, 15105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BT_STATUS_FAIL otherwise 15115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_storage_remove_hid_info(bt_bdaddr_t *remote_bd_addr) 15145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char *fname; 15165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int ret; 15175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr; 15185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bd2str(remote_bd_addr, &bdstr); 15195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_remove("Remote", bdstr, "HidAttrMask"); 15215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_remove("Remote", bdstr, "HidSubClass"); 15225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_remove("Remote", bdstr, "HidAppId"); 15235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_remove("Remote", bdstr, "HidVendorId"); 15245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_remove("Remote", bdstr, "HidProductId"); 15255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_remove("Remote", bdstr, "HidVersion"); 15265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_remove("Remote", bdstr, "HidCountryCode"); 15276efaf223753108aa84f55332898340db0c9d5ebfZhihai Xu btif_config_remove("Remote", bdstr, "HidSSRMaxLatency"); 15286efaf223753108aa84f55332898340db0c9d5ebfZhihai Xu btif_config_remove("Remote", bdstr, "HidSSRMinTimeout"); 15295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_remove("Remote", bdstr, "HidDescriptor"); 15307fe56f58c2a3cf0ac80177aaa890c143cd5fd950Priti Aghera btif_config_save(); 15315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 15325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 15355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_storage_read_hl_apps_cb 15375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF storage API - Read HL application control block from NVRAM 15395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS if the operation was successful, 15415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BT_STATUS_FAIL otherwise 15425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbt_status_t btif_storage_read_hl_apps_cb(char *value, int value_size) 15455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_status_t bt_status = BT_STATUS_SUCCESS; 15475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int read_size=value_size, read_type=BTIF_CFG_TYPE_BIN; 15485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_config_exist("Local", BTIF_STORAGE_HL_APP, BTIF_STORAGE_HL_APP_CB)) 15505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1551b0a43da3b412f53557125bf352dd9dddfd1a9991Kim Schulz memset(value, 0, value_size); 15525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_config_set("Local", BTIF_STORAGE_HL_APP,BTIF_STORAGE_HL_APP_CB, 15535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project value, value_size, BTIF_CFG_TYPE_BIN)) 15545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_status = BT_STATUS_FAIL; 15565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 15585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btif_config_save(); 15605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 15635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!btif_config_get("Local", BTIF_STORAGE_HL_APP, BTIF_STORAGE_HL_APP_CB, 15655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project value, &read_size, &read_type)) 15665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_status = BT_STATUS_FAIL; 15685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 15705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((read_size != value_size) || (read_type != BTIF_CFG_TYPE_BIN) ) 15725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1573e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("%s value_size=%d read_size=%d read_type=%d", 15745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project __FUNCTION__, value_size, read_size, read_type); 15755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bt_status = BT_STATUS_FAIL; 15765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1581e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s status=%d value_size=%d", __FUNCTION__, bt_status, value_size); 15825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return bt_status; 15835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 15875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_storage_load_autopair_device_list 15895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF storage API - Populates auto pair device list 15915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS if the auto pair blacklist is successfully populated 15935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BT_STATUS_FAIL otherwise 15945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1596479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavatibt_status_t btif_storage_load_autopair_device_list() { 1597479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati // Configuration has already been loaded. No need to reload. 1598479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati if (btif_config_exist("Local", BTIF_STORAGE_PATH_AUTOPAIR_BLACKLIST, NULL)) { 1599479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati return BT_STATUS_SUCCESS; 1600479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati } 16015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1602479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati static const char *key_names[] = { 1603479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati BTIF_STORAGE_KEY_AUTOPAIR_BLACKLIST_ADDR, 1604479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati BTIF_STORAGE_KEY_AUTOPAIR_BLACKLIST_EXACTNAME, 1605479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati BTIF_STORAGE_KEY_AUTOPAIR_FIXPIN_KBLIST, 1606479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati BTIF_STORAGE_KEY_AUTOPAIR_BLACKLIST_PARTIALNAME, 1607479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati BTIF_STORAGE_KEY_AUTOPAIR_DYNAMIC_BLACKLIST_ADDR, 1608479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati }; 1609479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati 1610479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati config_t *config = config_new(BTIF_AUTO_PAIR_CONF_FILE); 1611479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati if (!config) { 1612479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati ALOGE("%s failed to open auto pair blacklist conf file '%s'.", __func__, BTIF_AUTO_PAIR_CONF_FILE); 1613479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati return BT_STATUS_FAIL; 1614479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati } 16155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1616479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati for (size_t i = 0; i < ARRAY_SIZE(key_names); ++i) { 1617479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati const char *value = config_get_string(config, CONFIG_DEFAULT_SECTION, key_names[i], NULL); 1618479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati if (value) { 1619479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati btif_config_set_str("Local", BTIF_STORAGE_PATH_AUTOPAIR_BLACKLIST, key_names[i], value); 16205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1622479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati 1623479a9a3750e243b40663ddbd1ac44d4fc1c3ec4eSharvil Nanavati config_free(config); 16245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BT_STATUS_SUCCESS; 16255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 16285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_storage_is_device_autopair_blacklisted 16305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF storage API Checks if the given device is blacklisted for auto pairing 16325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns TRUE if the device is found in the auto pair blacklist 16345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** FALSE otherwise 16355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1637ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaBOOLEAN btif_storage_is_device_autopair_blacklisted(bt_bdaddr_t *remote_bd_addr) 16385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char *token; 16405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int ret; 16415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr; 16425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char *dev_name_str; 16435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint8_t i = 0; 16445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char value[BTIF_STORAGE_MAX_LINE_SZ]; 16455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int value_size = sizeof(value); 16465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1647ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bd2str(remote_bd_addr, &bdstr); 16485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Consider only Lower Address Part from BD Address */ 16505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr[8] = '\0'; 16515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(btif_config_get_str("Local", BTIF_STORAGE_PATH_AUTOPAIR_BLACKLIST, 16535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_KEY_AUTOPAIR_BLACKLIST_ADDR, value, &value_size)) 16545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (strcasestr(value,bdstr) != NULL) 16565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 16575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1659ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta dev_name_str = BTM_SecReadDevName((remote_bd_addr->address)); 16605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (dev_name_str != NULL) 16625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project value_size = sizeof(value); 16645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(btif_config_get_str("Local", BTIF_STORAGE_PATH_AUTOPAIR_BLACKLIST, 16655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_KEY_AUTOPAIR_BLACKLIST_EXACTNAME, value, &value_size)) 16665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (strstr(value,dev_name_str) != NULL) 16685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 16695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project value_size = sizeof(value); 16715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(btif_config_get_str("Local", BTIF_STORAGE_PATH_AUTOPAIR_BLACKLIST, 16725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_KEY_AUTOPAIR_BLACKLIST_PARTIALNAME, value, &value_size)) 16735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project token = strtok(value, BTIF_AUTO_PAIR_CONF_VALUE_SEPARATOR); 16755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while (token != NULL) 16765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (strstr(dev_name_str, token) != NULL) 16785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 16795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project token = strtok(NULL, BTIF_AUTO_PAIR_CONF_VALUE_SEPARATOR); 16815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(btif_config_get_str("Local", BTIF_STORAGE_PATH_AUTOPAIR_BLACKLIST, 16855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_KEY_AUTOPAIR_DYNAMIC_BLACKLIST_ADDR, value, &value_size)) 16865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (strstr(value,bdstr) != NULL) 16885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 16895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 16915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 16945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_storage_add_device_to_autopair_blacklist 16965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF storage API - Add a remote device to the auto pairing blacklist 16985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BT_STATUS_SUCCESS if the device is successfully added to the auto pair blacklist 17005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** BT_STATUS_FAIL otherwise 17015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1703ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battabt_status_t btif_storage_add_device_to_autopair_blacklist(bt_bdaddr_t *remote_bd_addr) 17045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 17055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int ret; 17065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr; 17075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char linebuf[BTIF_STORAGE_MAX_LINE_SZ+20]; 17085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char input_value [20]; 17095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1710ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bd2str(remote_bd_addr, &bdstr); 17112a2701cdddac0859a95e58aec542742c450145b9Kim Schulz strlcpy(input_value, (char*)bdstr, sizeof(input_value)); 17122a2701cdddac0859a95e58aec542742c450145b9Kim Schulz strlcat(input_value,BTIF_AUTO_PAIR_CONF_VALUE_SEPARATOR, sizeof(input_value)); 17132a2701cdddac0859a95e58aec542742c450145b9Kim Schulz 17145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int line_size = sizeof(linebuf); 17155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(btif_config_get_str("Local", BTIF_STORAGE_PATH_AUTOPAIR_BLACKLIST, 17165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_KEY_AUTOPAIR_DYNAMIC_BLACKLIST_ADDR, linebuf, &line_size)) 17175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Append this address to the dynamic List of BD address */ 17195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project strncat (linebuf, input_value, BTIF_STORAGE_MAX_LINE_SZ); 17205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 17225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project strncpy( linebuf,input_value, BTIF_STORAGE_MAX_LINE_SZ); 17245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Write back the key value */ 17275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ret = btif_config_set_str("Local", BTIF_STORAGE_PATH_AUTOPAIR_BLACKLIST, 17285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_KEY_AUTOPAIR_DYNAMIC_BLACKLIST_ADDR, linebuf); 17295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ret ? BT_STATUS_SUCCESS:BT_STATUS_FAIL; 17315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 17345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function btif_storage_is_fixed_pin_zeros_keyboard 17365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description BTIF storage API - checks if this device has fixed PIN key device list 17385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns TRUE if the device is found in the fixed pin keyboard device list 17405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** FALSE otherwise 17415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1743ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi BattaBOOLEAN btif_storage_is_fixed_pin_zeros_keyboard(bt_bdaddr_t *remote_bd_addr) 17445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 17455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int ret; 17465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdstr_t bdstr; 17475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char *dev_name_str; 17485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project uint8_t i = 0; 17495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project char linebuf[BTIF_STORAGE_MAX_LINE_SZ]; 17505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1751ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bd2str(remote_bd_addr, &bdstr); 17525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17538fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta /*consider on LAP part of BDA string*/ 17548fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta bdstr[8] = '\0'; 17555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int line_size = sizeof(linebuf); 17575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(btif_config_get_str("Local", BTIF_STORAGE_PATH_AUTOPAIR_BLACKLIST, 17585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTIF_STORAGE_KEY_AUTOPAIR_FIXPIN_KBLIST, linebuf, &line_size)) 17595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (strcasestr(linebuf,bdstr) != NULL) 17615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 17625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 17645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17668fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta 17678fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta/******************************************************************************* 17688fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta** 17698fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta** Function btif_storage_set_dmt_support_type 17708fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta** 17718fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta** Description Sets DMT support status for a remote device 17728fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta** 17738fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta** Returns BT_STATUS_SUCCESS if config update is successful 17748fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta** BT_STATUS_FAIL otherwise 17758fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta** 17768fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta*******************************************************************************/ 17778fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta 17788fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Battabt_status_t btif_storage_set_dmt_support_type(const bt_bdaddr_t *remote_bd_addr, 17798fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta BOOLEAN dmt_supported) 17808fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta{ 17818fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta int ret; 17828fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta bdstr_t bdstr = {0}; 17838fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta if(remote_bd_addr) 17848fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta { 17858fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta bd2str(remote_bd_addr, &bdstr); 17868fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta } 17878fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta else 17888fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta { 1789e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("%s NULL BD Address", __FUNCTION__); 17908fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta return BT_STATUS_FAIL; 17918fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta } 17928fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta 17938fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta ret = btif_config_set_int("Remote", bdstr,"DMTSupported", (int)dmt_supported); 17948fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta return ret ? BT_STATUS_SUCCESS:BT_STATUS_FAIL; 17958fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta 17968fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta} 17978fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta 17988fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta/******************************************************************************* 17998fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta** 18008fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta** Function btif_storage_is_dmt_supported_device 18018fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta** 18028fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta** Description checks if a device supports Dual mode topology 18038fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta** 18048fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta** Returns TRUE if remote address is valid and supports DMT else FALSE 18058fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta** 18068fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta*******************************************************************************/ 18078fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta 18088fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi BattaBOOLEAN btif_storage_is_dmt_supported_device(const bt_bdaddr_t *remote_bd_addr) 18098fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta{ 18108fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta int dmt_supported = 0; 18118fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta bdstr_t bdstr = {0}; 18128fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta if(remote_bd_addr) 18138fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta bd2str(remote_bd_addr, &bdstr); 18148fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta 18158fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta if(remote_bd_addr) 18168fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta { 18178fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta bd2str(remote_bd_addr, &bdstr); 18188fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta } 18198fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta else 18208fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta { 1821e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("%s NULL BD Address", __FUNCTION__); 18228fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta return FALSE; 18238fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta } 18248fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta 18258fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta btif_config_get_int("Remote", bdstr,"DMTSupported", &dmt_supported); 18268fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta 18278fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta return dmt_supported == 1 ? TRUE:FALSE; 18288fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta} 18298fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta 18308fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta 1831