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