btif_gatt_client.cc revision db554581079863974af8e1289646f5deea6fc044
1ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************
2ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
3c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji *  Copyright (C) 2009-2014 Broadcom Corporation
4ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
5ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  Licensed under the Apache License, Version 2.0 (the "License");
6ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  you may not use this file except in compliance with the License.
7ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  You may obtain a copy of the License at:
8ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
9ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  http://www.apache.org/licenses/LICENSE-2.0
10ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
11ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  Unless required by applicable law or agreed to in writing, software
12ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  distributed under the License is distributed on an "AS IS" BASIS,
13ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  See the License for the specific language governing permissions and
15ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  limitations under the License.
16ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
17ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ******************************************************************************/
18ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
19ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
20ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
21ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
22ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  Filename:      btif_gatt_client.c
23ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
24ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  Description:   GATT client implementation
25ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
26ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *******************************************************************************/
27ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
28ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <hardware/bluetooth.h>
29ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdio.h>
30ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdlib.h>
31ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <errno.h>
32ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <string.h>
33ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
3495b74f252f534ec757aab1fc08e086e02b2cfe8dSharvil Nanavati#include "btcore/include/bdaddr.h"
35ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_common.h"
36ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_util.h"
37ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
38ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (defined(BLE_INCLUDED) && (BLE_INCLUDED == TRUE))
39ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
406975b4d711142b885af479721cada448952c6b41Andre Eisenbach#include <hardware/bt_gatt.h>
41db554581079863974af8e1289646f5deea6fc044Marie Janssen
42ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_api.h"
43ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_gatt_api.h"
44ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_config.h"
45db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_dm.h"
46ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_gatt.h"
47db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_gatt_multi_adv_util.h"
48ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_gatt_util.h"
49ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_storage.h"
50db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_storage.h"
5144802768c447ab480d4227b3a852a97d923b816dSharvil Nanavati#include "osi/include/log.h"
52b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach#include "vendor_api.h"
53b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
54ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
55ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Constants & Macros
56ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
57ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
58db554581079863974af8e1289646f5deea6fc044Marie Janssen#define LOG_TAG "bt_btif_gattc"
59db554581079863974af8e1289646f5deea6fc044Marie Janssen
60ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define CHECK_BTGATT_INIT() if (bt_gatt_callbacks == NULL)\
61ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {\
62db554581079863974af8e1289646f5deea6fc044Marie Janssen        LOG_WARN(LOG_TAG, "%s: BTGATT not initialized", __FUNCTION__);\
63ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return BT_STATUS_NOT_READY;\
64ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    } else {\
65db554581079863974af8e1289646f5deea6fc044Marie Janssen        LOG_VERBOSE(LOG_TAG, "%s", __FUNCTION__);\
66ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
67ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
68a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BLE_RESOLVE_ADDR_MSB                 0x40   /* bit7, bit6 is 01 to be resolvable random */
69a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BLE_RESOLVE_ADDR_MASK                0xc0   /* bit 6, and bit7 */
70a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BTM_BLE_IS_RESOLVE_BDA(x)           ((x[0] & BLE_RESOLVE_ADDR_MASK) == BLE_RESOLVE_ADDR_MSB)
71ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
72ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef enum {
73ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_REGISTER_APP = 1000,
74ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_UNREGISTER_APP,
75ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_SCAN_START,
76ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_SCAN_STOP,
77ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_OPEN,
78ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_CLOSE,
79ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_SEARCH_SERVICE,
80ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_GET_FIRST_CHAR,
81ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_GET_NEXT_CHAR,
82ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_GET_FIRST_CHAR_DESCR,
83ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_GET_NEXT_CHAR_DESCR,
84ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_GET_FIRST_INCL_SERVICE,
85ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_GET_NEXT_INCL_SERVICE,
86ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_READ_CHAR,
87ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_READ_CHAR_DESCR,
88ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_WRITE_CHAR,
89ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_WRITE_CHAR_DESCR,
90ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_EXECUTE_WRITE,
91ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_REG_FOR_NOTIFICATION,
92ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_DEREG_FOR_NOTIFICATION,
93ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_REFRESH,
945c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    BTIF_GATTC_READ_RSSI,
955c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    BTIF_GATTC_LISTEN,
969426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    BTIF_GATTC_SET_ADV_DATA,
979426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    BTIF_GATTC_CONFIGURE_MTU,
9852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    BTIF_GATTC_CONN_PARAM_UPDT,
991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_GATTC_SCAN_FILTER_PARAM_SETUP,
100b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    BTIF_GATTC_SCAN_FILTER_CONFIG,
1017d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    BTIF_GATTC_SCAN_FILTER_CLEAR,
1021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_GATTC_SCAN_FILTER_ENABLE,
1037d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    BTIF_GATTC_SET_SCAN_PARAMS,
104a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    BTIF_GATTC_ADV_INSTANCE_ENABLE,
105a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    BTIF_GATTC_ADV_INSTANCE_UPDATE,
106a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    BTIF_GATTC_ADV_INSTANCE_SET_DATA,
107c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_ADV_INSTANCE_DISABLE,
108c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_CONFIG_STORAGE_PARAMS,
109c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_ENABLE_BATCH_SCAN,
110c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_READ_BATCH_SCAN_REPORTS,
111c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_DISABLE_BATCH_SCAN
112ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} btif_gattc_event_t;
113ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
114ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATT_MAX_OBSERVED_DEV 40
115ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
116ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATT_OBSERVE_EVT   0x1000
117ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATTC_RSSI_EVT     0x1001
118935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji#define BTIF_GATTC_SCAN_FILTER_EVT  0x1003
119935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji#define BTIF_GATTC_SCAN_PARAM_EVT   0x1004
120ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
121c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji#define ENABLE_BATCH_SCAN 1
122c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji#define DISABLE_BATCH_SCAN 0
123c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
124ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
125ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Local type definitions
126ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
127c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojitypedef struct
128c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
129c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t report_format;
130c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint16_t data_len;
131c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t num_records;
132c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t *p_rep_data;
133c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} btgatt_batch_reports;
134c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
135c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojitypedef struct
136c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
137c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  status;
138c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  client_if;
1391acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    uint8_t  action;
1401acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    uint8_t  avbl_space;
1411acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    uint8_t  lost_timeout;
142f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    tBLE_ADDR_TYPE addr_type;
143c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  batch_scan_full_max;
144c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  batch_scan_trunc_max;
145c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  batch_scan_notify_threshold;
146935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji    tBTA_BLE_BATCH_SCAN_MODE scan_mode;
147c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint32_t scan_interval;
148c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint32_t scan_window;
149c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    tBTA_BLE_DISCARD_RULE discard_rule;
150f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btgatt_batch_reports  read_reports;
151c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} btgatt_batch_track_cb_t;
152ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
153f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji
1541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojitypedef tBTA_DM_BLE_PF_FILT_PARAMS btgatt_adv_filt_param_t;
1551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
1561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojitypedef struct
1571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
1581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     client_if;
1591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     action;
1601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_DM_BLE_PF_COND_TYPE filt_type;
1611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    bt_bdaddr_t bd_addr;
1621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value[BTGATT_MAX_ATTR_LEN];
1631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value_len;
1641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     filt_index;
1651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint16_t    conn_id;
1661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint16_t    company_id_mask;
1671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    bt_uuid_t   uuid;
1681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    bt_uuid_t   uuid_mask;
1691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value_mask[BTGATT_MAX_ATTR_LEN];
1701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value_mask_len;
1711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     has_mask;
1721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     addr_type;
1731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     status;
1741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_DM_BLE_PF_AVBL_SPACE avbl_space;
1751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_DM_BLE_SCAN_COND_OP cond_op;
1761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filt_param_t adv_filt_param;
1771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji} btgatt_adv_filter_cb_t;
1781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
179ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct
180ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
181ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     value[BTGATT_MAX_ATTR_LEN];
182a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    uint8_t     inst_id;
183ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_bdaddr_t bd_addr;
184ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btgatt_srvc_id_t srvc_id;
185ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btgatt_srvc_id_t incl_srvc_id;
1865f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    btgatt_gatt_id_t char_id;
1875f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    btgatt_gatt_id_t descr_id;
188ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_uuid_t   uuid;
189b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    bt_uuid_t   uuid_mask;
190ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint16_t    conn_id;
191ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint16_t    len;
192b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    uint16_t    mask;
193935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji    uint32_t    scan_interval;
194935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji    uint32_t    scan_window;
195ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     client_if;
196ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     action;
197ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     is_direct;
198ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     search_all;
199ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     auth_req;
200ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     write_type;
201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     status;
202ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     addr_type;
2035c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    uint8_t     start;
204b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    uint8_t     has_mask;
205ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    int8_t      rssi;
2067fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    uint8_t     flag;
207ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBT_DEVICE_TYPE device_type;
2087fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    btgatt_transport_t transport;
209ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} __attribute__((packed)) btif_gattc_cb_t;
210ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
211ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct
212ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
213ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_bdaddr_t bd_addr;
21452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    uint16_t    min_interval;
21552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    uint16_t    max_interval;
21652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    uint16_t    timeout;
21752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    uint16_t    latency;
21852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach} btif_conn_param_cb_t;
21952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach
22052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbachtypedef struct
22152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach{
22252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    bt_bdaddr_t bd_addr;
223ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BOOLEAN     in_use;
224ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}__attribute__((packed)) btif_gattc_dev_t;
225ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
226ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct
227ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
228ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_dev_t remote_dev[BTIF_GATT_MAX_OBSERVED_DEV];
2297fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    uint8_t            addr_type;
2307fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    uint8_t            next_storage_idx;
231ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}__attribute__((packed)) btif_gattc_dev_cb_t;
232ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
233ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
234ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Static variables
235ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
236ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
237ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern const btgatt_callbacks_t *bt_gatt_callbacks;
238ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_gattc_dev_cb_t  btif_gattc_dev_cb;
239ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_gattc_dev_cb_t  *p_dev_cb = &btif_gattc_dev_cb;
240ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic uint8_t rssi_request_client_if;
241ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
242ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
243ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Static functions
244ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
245ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2469dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbachstatic bt_status_t btif_gattc_multi_adv_disable(int client_if);
247cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbachstatic void btif_multi_adv_stop_cb(void *p_tle)
2489dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach{
249bb95452741bfd65723ea417c25dbd326c7568ab7Arman Uguray    int client_if = PTR_TO_INT(((TIMER_LIST_ENT*)p_tle)->data);
2509dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach    btif_gattc_multi_adv_disable(client_if); // Does context switch
2519dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach}
2529dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach
253935324abbe8706307297f09cf79bbcd4efb73367Satya Callojistatic btgattc_error_t btif_gattc_translate_btm_status(tBTM_STATUS status)
254935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji{
255935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji    switch(status)
256935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji    {
257935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_SUCCESS:
258935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_SUCCESS_NO_SECURITY:
259935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            return BT_GATTC_COMMAND_SUCCESS;
260935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
261935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_CMD_STARTED:
262935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            return BT_GATTC_COMMAND_STARTED;
263935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
264935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_BUSY:
265935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            return BT_GATTC_COMMAND_BUSY;
266935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
267935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_CMD_STORED:
268935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            return BT_GATTC_COMMAND_STORED;
269935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
270935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_NO_RESOURCES:
271935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            return BT_GATTC_NO_RESOURCES;
272935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
273935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_MODE_UNSUPPORTED:
274935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_WRONG_MODE:
275935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_MODE4_LEVEL4_NOT_SUPPORTED:
276935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            return BT_GATTC_MODE_UNSUPPORTED;
277935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
278935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_ILLEGAL_VALUE:
279935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_SCO_BAD_LENGTH:
280935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            return BT_GATTC_ILLEGAL_VALUE;
281935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
282935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_UNKNOWN_ADDR:
283935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            return BT_GATTC_UNKNOWN_ADDR;
284935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
285935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_DEVICE_TIMEOUT:
286935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            return BT_GATTC_DEVICE_TIMEOUT;
287935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
288935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_FAILED_ON_SECURITY:
289935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_REPEATED_ATTEMPTS:
290935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_NOT_AUTHORIZED:
291935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            return BT_GATTC_SECURITY_ERROR;
292935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
293935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_DEV_RESET:
294935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_ILLEGAL_ACTION:
295935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            return BT_GATTC_INCORRECT_STATE;
296935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
297935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_BAD_VALUE_RET:
298935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            return BT_GATTC_INVALID_CONTROLLER_OUTPUT;
299935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
300935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_DELAY_CHECK:
301935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            return BT_GATTC_DELAYED_ENCRYPTION_CHECK;
302935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
303935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       case BTM_ERR_PROCESSING:
304935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji       default:
305935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji          return BT_GATTC_ERR_PROCESSING;
306935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji    }
307935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji}
308935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
3098444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbachstatic void btapp_gattc_req_data(UINT16 event, char *p_dest, char *p_src)
3108444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach{
31152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    tBTA_GATTC *p_dest_data = (tBTA_GATTC*) p_dest;
31252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    tBTA_GATTC *p_src_data = (tBTA_GATTC*) p_src;
3138444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3148444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    if (!p_src_data || !p_dest_data)
3158444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach       return;
3168444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3178444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    // Copy basic structure first
3188444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    memcpy(p_dest_data, p_src_data, sizeof(tBTA_GATTC));
3198444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3208444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    // Allocate buffer for request data if necessary
3218444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    switch (event)
3228444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    {
3238444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_CHAR_EVT:
3248444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_DESCR_EVT:
3258444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
326e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach            if (p_src_data->read.p_value != NULL)
3278444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            {
328e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                p_dest_data->read.p_value = GKI_getbuf(sizeof(tBTA_GATT_READ_VAL));
3298444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
330e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                if (p_dest_data->read.p_value != NULL)
3318444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                {
332e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                    memcpy(p_dest_data->read.p_value, p_src_data->read.p_value,
333e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                        sizeof(tBTA_GATT_READ_VAL));
334e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach
335e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                    // Allocate buffer for att value if necessary
3366975b4d711142b885af479721cada448952c6b41Andre Eisenbach                    if (get_uuid16(&p_src_data->read.descr_type.uuid) != GATT_UUID_CHAR_AGG_FORMAT
337f052217962d0c06392eb79687820c9469cd6a75aAndre Eisenbach                      && p_src_data->read.p_value->unformat.len > 0
338e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                      && p_src_data->read.p_value->unformat.p_value != NULL)
3398444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                    {
340e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                        p_dest_data->read.p_value->unformat.p_value =
341e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                                       GKI_getbuf(p_src_data->read.p_value->unformat.len);
342e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                        if (p_dest_data->read.p_value->unformat.p_value != NULL)
343e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                        {
344e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                            memcpy(p_dest_data->read.p_value->unformat.p_value,
345e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                                   p_src_data->read.p_value->unformat.p_value,
346e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                                   p_src_data->read.p_value->unformat.len);
347e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                        }
3488444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                    }
3498444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                }
3508444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            }
351e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach            else
352e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach            {
353e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_WARNING("%s :Src read.p_value ptr is NULL for event  0x%x",
354e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                                    __FUNCTION__, event);
355e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                p_dest_data->read.p_value = NULL;
356e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach
357e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach            }
3588444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3598444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3608444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        default:
3618444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3628444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    }
3638444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach}
3648444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3658444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbachstatic void btapp_gattc_free_req_data(UINT16 event, tBTA_GATTC *p_data)
3668444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach{
3678444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    switch (event)
3688444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    {
3698444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_CHAR_EVT:
3708444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_DESCR_EVT:
3718444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            if (p_data != NULL && p_data->read.p_value != NULL)
3728444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            {
3736975b4d711142b885af479721cada448952c6b41Andre Eisenbach                if (get_uuid16 (&p_data->read.descr_type.uuid) != GATT_UUID_CHAR_AGG_FORMAT
374f052217962d0c06392eb79687820c9469cd6a75aAndre Eisenbach                  && p_data->read.p_value->unformat.len > 0
3758444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                  && p_data->read.p_value->unformat.p_value != NULL)
3768444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                {
3778444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                    GKI_freebuf(p_data->read.p_value->unformat.p_value);
3788444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                }
3798444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                GKI_freebuf(p_data->read.p_value);
3808444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            }
3818444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3828444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3838444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        default:
3848444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3858444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    }
3868444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach}
3878444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
388ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_init_dev_cb(void)
389ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
390ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memset(p_dev_cb, 0, sizeof(btif_gattc_dev_cb_t));
391ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
392c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
393ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_add_remote_bdaddr (BD_ADDR p_bda, uint8_t addr_type)
394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
395ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t i;
396ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    for (i = 0; i < BTIF_GATT_MAX_OBSERVED_DEV; i++)
397ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
398ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (!p_dev_cb->remote_dev[i].in_use )
399ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
400ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            memcpy(p_dev_cb->remote_dev[i].bd_addr.address, p_bda, BD_ADDR_LEN);
401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_dev_cb->addr_type = addr_type;
402ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_dev_cb->remote_dev[i].in_use = TRUE;
403db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_VERBOSE(LOG_TAG, "%s device added idx=%d", __FUNCTION__, i  );
404ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if ( i == BTIF_GATT_MAX_OBSERVED_DEV)
409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        i= p_dev_cb->next_storage_idx;
411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memcpy(p_dev_cb->remote_dev[i].bd_addr.address, p_bda, BD_ADDR_LEN);
412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_dev_cb->addr_type = addr_type;
413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_dev_cb->remote_dev[i].in_use = TRUE;
414db554581079863974af8e1289646f5deea6fc044Marie Janssen        LOG_VERBOSE(LOG_TAG, "%s device overwrite idx=%d", __FUNCTION__, i  );
415ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_dev_cb->next_storage_idx++;
41616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        if (p_dev_cb->next_storage_idx >= BTIF_GATT_MAX_OBSERVED_DEV)
417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta               p_dev_cb->next_storage_idx = 0;
418ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
419ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
420ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
421ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic BOOLEAN btif_gattc_find_bdaddr (BD_ADDR p_bda)
422ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
423ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t i;
424ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    for (i = 0; i < BTIF_GATT_MAX_OBSERVED_DEV; i++)
425ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
426ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (p_dev_cb->remote_dev[i].in_use &&
427ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            !memcmp(p_dev_cb->remote_dev[i].bd_addr.address, p_bda, BD_ADDR_LEN))
428ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
429ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            return TRUE;
430ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
431ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
432ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return FALSE;
433ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
434ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
435ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_update_properties ( btif_gattc_cb_t *p_btif_cb )
436ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
437ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t remote_name_len;
438ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t *p_eir_remote_name=NULL;
439ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_bdname_t bdname;
440ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
441a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson    p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
442ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                         BTM_EIR_COMPLETE_LOCAL_NAME_TYPE, &remote_name_len);
443ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
44416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (p_eir_remote_name == NULL)
445ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
446a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson        p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
447ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                BT_EIR_SHORTENED_LOCAL_NAME_TYPE, &remote_name_len);
448ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
449ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
45016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (p_eir_remote_name)
451ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
452bcbf9cd0727f6903f9cf6c165453539fc55b6072Mike J. Chen        memcpy(bdname.name, p_eir_remote_name, remote_name_len);
453bcbf9cd0727f6903f9cf6c165453539fc55b6072Mike J. Chen        bdname.name[remote_name_len]='\0';
454ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
455db554581079863974af8e1289646f5deea6fc044Marie Janssen        LOG_DEBUG(LOG_TAG, "%s BLE device name=%s len=%d dev_type=%d", __FUNCTION__, bdname.name,
456ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta              remote_name_len, p_btif_cb->device_type  );
457ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        btif_dm_update_ble_remote_properties( p_btif_cb->bd_addr.address,   bdname.name,
458ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                               p_btif_cb->device_type);
459ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
460ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
461ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_storage_set_remote_addr_type( &p_btif_cb->bd_addr, p_btif_cb->addr_type);
462ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
463ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
464ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_upstreams_evt(uint16_t event, char* p_param)
465ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
466db554581079863974af8e1289646f5deea6fc044Marie Janssen    LOG_VERBOSE(LOG_TAG, "%s: Event %d", __FUNCTION__, event);
467ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
46852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    tBTA_GATTC *p_data = (tBTA_GATTC*) p_param;
469ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    switch (event)
470ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
471ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_REG_EVT:
472ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
473ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bt_uuid_t app_uuid;
474ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_to_btif_uuid(&app_uuid, &p_data->reg_oper.app_uuid);
475ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->register_client_cb
476ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->reg_oper.status
477ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->reg_oper.client_if
478ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , &app_uuid
479ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            );
480ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
481ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
482ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
483ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_DEREG_EVT:
484ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
485ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
486ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_READ_CHAR_EVT:
487ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
488ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_read_params_t data;
489ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            set_read_value(&data, &p_data->read);
490ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
491ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->read_characteristic_cb
492ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->read.conn_id, p_data->read.status, &data);
493ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
494ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
495ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
496ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_WRITE_CHAR_EVT:
497ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_PREP_WRITE_EVT:
498ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
499ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_write_params_t data;
500ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_to_btif_srvc_id(&data.srvc_id, &p_data->write.srvc_id);
5015f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            bta_to_btif_gatt_id(&data.char_id, &p_data->write.char_id);
502ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
503ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->write_characteristic_cb
504ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->write.conn_id, p_data->write.status, &data
505ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            );
506ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
507ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
508ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
509ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_EXEC_EVT:
510ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
511ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->execute_write_cb
512ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->exec_cmpl.conn_id, p_data->exec_cmpl.status
513ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            );
514ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
515ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
516ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
517ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_SEARCH_CMPL_EVT:
518ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
519ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->search_complete_cb
520ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->search_cmpl.conn_id, p_data->search_cmpl.status);
521ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
522ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
523ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
524ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_SEARCH_RES_EVT:
525ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
526ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_srvc_id_t data;
527ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_to_btif_srvc_id(&data, &(p_data->srvc_res.service_uuid));
528ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->search_result_cb
529ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->srvc_res.conn_id, &data);
530ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
531ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
532ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
533ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_READ_DESCR_EVT:
534ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
535ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_read_params_t data;
536ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            set_read_value(&data, &p_data->read);
537ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
538ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->read_descriptor_cb
539ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->read.conn_id, p_data->read.status, &data);
540ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
541ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
542ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
543ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_WRITE_DESCR_EVT:
544ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
545ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_write_params_t data;
546ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_to_btif_srvc_id(&data.srvc_id, &p_data->write.srvc_id);
5475f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            bta_to_btif_gatt_id(&data.char_id, &p_data->write.char_id);
5485f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            bta_to_btif_gatt_id(&data.descr_id, &p_data->write.descr_type);
549ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
550ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->write_descriptor_cb
551ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->write.conn_id, p_data->write.status, &data);
552ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
553ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
554ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
555ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_NOTIF_EVT:
556ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
557ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_notify_params_t data;
558ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
559ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(data.bda.address, p_data->notify.bda);
560ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
561ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_to_btif_srvc_id(&data.srvc_id, &p_data->notify.char_id.srvc_id);
5625f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            bta_to_btif_gatt_id(&data.char_id, &p_data->notify.char_id.char_id);
563ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            memcpy(data.value, p_data->notify.value, p_data->notify.len);
564ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
565ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            data.is_notify = p_data->notify.is_notify;
566ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            data.len = p_data->notify.len;
567ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
568ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->notify_cb
569ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->notify.conn_id, &data);
570ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
571ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_data->notify.is_notify == FALSE)
572ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
573ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_SendIndConfirm(p_data->notify.conn_id,
574ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                         &p_data->notify.char_id);
575ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
576ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
577ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
578ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
579ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_OPEN_EVT:
580ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
581ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bt_bdaddr_t bda;
582ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(bda.address, p_data->open.remote_bda);
583ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
584ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->open_cb, p_data->open.conn_id
585ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->open.status, p_data->open.client_if, &bda);
5866975b4d711142b885af479721cada448952c6b41Andre Eisenbach
5879426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            if (GATT_DEF_BLE_MTU_SIZE != p_data->open.mtu && p_data->open.mtu)
5889426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            {
5899426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, p_data->open.conn_id
5909426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                    , p_data->open.status , p_data->open.mtu);
5919426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            }
5929426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
5936975b4d711142b885af479721cada448952c6b41Andre Eisenbach            if (p_data->open.status == BTA_GATT_OK)
5946975b4d711142b885af479721cada448952c6b41Andre Eisenbach                btif_gatt_check_encrypted_link(p_data->open.remote_bda);
595ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
596ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
597ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
598ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_CLOSE_EVT:
599ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
600ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bt_bdaddr_t bda;
601ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(bda.address, p_data->close.remote_bda);
602ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->close_cb, p_data->close.conn_id
603ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->status, p_data->close.client_if, &bda);
604ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
605ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
606ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
607ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_ACL_EVT:
608db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_DEBUG(LOG_TAG, "BTA_GATTC_ACL_EVT: status = %d", p_data->status);
609ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            /* Ignore for now */
610ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
611ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
612ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_CANCEL_OPEN_EVT:
613ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
614ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
615ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATT_OBSERVE_EVT:
616ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
61752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
618aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            uint8_t remote_name_len;
619aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            uint8_t *p_eir_remote_name=NULL;
6207fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bt_device_type_t dev_type;
6217fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bt_property_t properties;
622aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi
623a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson            p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
624aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                                         BTM_EIR_COMPLETE_LOCAL_NAME_TYPE, &remote_name_len);
625aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi
62616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (p_eir_remote_name == NULL)
627ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
628a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson                p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
629aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                                BT_EIR_SHORTENED_LOCAL_NAME_TYPE, &remote_name_len);
630aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            }
631aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi
632aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            if ((p_btif_cb->addr_type != BLE_ADDR_RANDOM) || (p_eir_remote_name))
633aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            {
634aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi               if (!btif_gattc_find_bdaddr(p_btif_cb->bd_addr.address))
635aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi               {
636aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                  btif_gattc_add_remote_bdaddr(p_btif_cb->bd_addr.address, p_btif_cb->addr_type);
637aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                  btif_gattc_update_properties(p_btif_cb);
638f6c48a09e398de804f7d563a44904e917afd2c32Brian Carlstrom
639aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi               }
640f6c48a09e398de804f7d563a44904e917afd2c32Brian Carlstrom
641ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
6427fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
6437fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             dev_type =  p_btif_cb->device_type;
6447fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             BTIF_STORAGE_FILL_PROPERTY(&properties,
6457fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                        BT_PROPERTY_TYPE_OF_DEVICE, sizeof(dev_type), &dev_type);
6467fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             btif_storage_set_remote_device_property(&(p_btif_cb->bd_addr), &properties);
6477fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
648ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->scan_result_cb,
649ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                      &p_btif_cb->bd_addr, p_btif_cb->rssi, p_btif_cb->value);
650ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
651ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
652ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
653ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_RSSI_EVT:
654ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
65552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
656ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->read_remote_rssi_cb, p_btif_cb->client_if,
657ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                      &p_btif_cb->bd_addr, p_btif_cb->rssi, p_btif_cb->status);
658ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
659ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
660ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
6615c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        case BTA_GATTC_LISTEN_EVT:
6625c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        {
6635c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->listen_cb
6645c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                , p_data->reg_oper.status
6655c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                , p_data->reg_oper.client_if
6665c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            );
6675c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            break;
6685c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        }
6699426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
6709426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        case BTA_GATTC_CFG_MTU_EVT:
6719426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        {
6729426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, p_data->cfg_mtu.conn_id
6739426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                , p_data->cfg_mtu.status , p_data->cfg_mtu.mtu);
6749426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            break;
6759426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        }
67617b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach
677a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_ENB_EVT:
678a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
67952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
68016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (0xFF != p_btif_cb->inst_id)
68116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                btif_multi_adv_add_instid_map(p_btif_cb->client_if, p_btif_cb->inst_id, false);
682a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_enable_cb
683a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    , p_btif_cb->client_if
684a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    , p_btif_cb->status
685a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                );
6869dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach            btif_multi_adv_timer_ctrl(p_btif_cb->client_if,
6879dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                    (p_btif_cb->status==0 ? btif_multi_adv_stop_cb : NULL));
688a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
689a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
690a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
691a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_UPD_EVT:
692a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
69352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
694a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_update_cb
695a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->client_if
696a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->status
697a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            );
6989dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach            btif_multi_adv_timer_ctrl(p_btif_cb->client_if,
6999dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                    (p_btif_cb->status==0 ? btif_multi_adv_stop_cb : NULL));
700a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
701a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
702a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
703a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_DATA_EVT:
704a6ce7751d84218c193eb90d390aef23217b1737eWei Wang         {
70552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
7063770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_clear_clientif(p_btif_cb->client_if, FALSE);
707a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_data_cb
708a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->client_if
709a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->status
710a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            );
711a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
712a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
713a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
714a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_DIS_EVT:
715a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
71652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
7173770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_clear_clientif(p_btif_cb->client_if, TRUE);
718a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_disable_cb
719a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->client_if
720a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->status
721a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            );
722a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
723a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
724a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
725a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_ADV_DATA_EVT:
726a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
7273770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_cleanup_inst_cb(STD_ADV_INSTID, FALSE);
728a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            /* No HAL callback available */
729a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
730a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
731a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
73217b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach        case BTA_GATTC_CONGEST_EVT:
73317b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->congestion_cb
73417b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach                , p_data->congest.conn_id
73517b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach                , p_data->congest.congested
73617b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach            );
73717b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach            break;
73817b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach
739c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_CFG_EVT:
740c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
74152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
742c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_cfg_storage_cb
743c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                , p_data->client_if
744c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                , p_data->status
745c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            );
746c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
747c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
748c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
749c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_ENB_EVT:
750c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
75152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
752c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_enb_disable_cb
753c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , ENABLE_BATCH_SCAN
754c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->client_if
755c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->status);
756c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
757c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
758c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
759c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_DIS_EVT:
760c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
76152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
762c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_enb_disable_cb
763c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , DISABLE_BATCH_SCAN
764c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->client_if
765c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->status);
766c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
767c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
768c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
769c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_THR_EVT:
770c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
77152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
772c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_threshold_cb
773c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->client_if);
774c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
775c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
776c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
777c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_RD_EVT:
778c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
77952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
780c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            uint8_t *p_rep_data = NULL;
781c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
782adb7bb50469db992969295792a7ba3b73f9e24b3Satya Calloji            if (p_data->read_reports.data_len > 0 && NULL != p_data->read_reports.p_rep_data)
783c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            {
784c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                p_rep_data = GKI_getbuf(p_data->read_reports.data_len);
785c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                memcpy(p_rep_data, p_data->read_reports.p_rep_data, p_data->read_reports.data_len);
786c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            }
787c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
788c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_reports_cb
789c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->client_if, p_data->status, p_data->read_reports.report_format
790c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->read_reports.num_records, p_data->read_reports.data_len, p_rep_data);
791adb7bb50469db992969295792a7ba3b73f9e24b3Satya Calloji            if (NULL != p_rep_data)
792adb7bb50469db992969295792a7ba3b73f9e24b3Satya Calloji                GKI_freebuf(p_rep_data);
793c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
794c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
795c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
7961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTA_GATTC_SCAN_FLT_CFG_EVT:
7971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
79852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_btif_cb = (btgatt_adv_filter_cb_t*) p_param;
7991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->scan_filter_cfg_cb, p_btif_cb->action,
8001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                      p_btif_cb->client_if, p_btif_cb->status, p_btif_cb->cond_op,
8011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                      p_btif_cb->avbl_space);
8021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
8031a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
8041a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
8051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTA_GATTC_SCAN_FLT_PARAM_EVT:
8061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
8071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            btgatt_adv_filter_cb_t *p_data = (btgatt_adv_filter_cb_t*) p_param;
8081a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTIF_TRACE_DEBUG("BTA_GATTC_SCAN_FLT_PARAM_EVT: %d, %d, %d, %d",p_data->client_if,
8091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                p_data->action, p_data->avbl_space, p_data->status);
8101acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->scan_filter_param_cb
8111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    , p_data->action, p_data->client_if, p_data->status
8121a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    , p_data->avbl_space);
8131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
8141a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
8151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
8161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTA_GATTC_SCAN_FLT_STATUS_EVT:
8171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
8181a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            btgatt_adv_filter_cb_t *p_data = (btgatt_adv_filter_cb_t*) p_param;
8191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTIF_TRACE_DEBUG("BTA_GATTC_SCAN_FLT_STATUS_EVT: %d, %d, %d",p_data->client_if,
8201a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                p_data->action, p_data->status);
8211acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->scan_filter_status_cb
8221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    , p_data->action, p_data->client_if, p_data->status);
8231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
8241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
8251a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
8261acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji        case BTA_GATTC_ADV_VSC_EVT:
8271acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji        {
828f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            btgatt_track_adv_info_t *p_data = (btgatt_track_adv_info_t*)p_param;
829f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            btgatt_track_adv_info_t adv_info_data;
830f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji
831f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            memset(&adv_info_data, 0, sizeof(btgatt_track_adv_info_t));
832f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji
833f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            btif_gatt_move_track_adv_data(&adv_info_data, p_data);
834f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            HAL_CBACK(bt_gatt_callbacks, client->track_adv_event_cb, &adv_info_data);
8351acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji            break;
8361acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji        }
8371acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji
838935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji        case BTIF_GATTC_SCAN_PARAM_EVT:
839935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji        {
840935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t *)p_param;
841935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            HAL_CBACK(bt_gatt_callbacks, client->scan_parameter_setup_completed_cb,
842935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji                      p_btif_cb->client_if, btif_gattc_translate_btm_status(p_btif_cb->status));
843935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            break;
844935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji        }
845935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
846ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        default:
847db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_ERROR(LOG_TAG, "%s: Unhandled event (%d)!", __FUNCTION__, event);
848ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
849ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
8508444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
8518444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    btapp_gattc_free_req_data(event, p_data);
852ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
853ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
8546975b4d711142b885af479721cada448952c6b41Andre Eisenbachstatic void bta_gattc_cback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data)
855ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
856ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_status_t status = btif_transfer_context(btif_gattc_upstreams_evt,
85752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                    (uint16_t) event, (void*) p_data, sizeof(tBTA_GATTC), btapp_gattc_req_data);
858ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    ASSERTC(status == BT_STATUS_SUCCESS, "Context transfer failed!", status);
859ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
860ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
861a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic void bta_gattc_multi_adv_cback(tBTA_BLE_MULTI_ADV_EVT event, UINT8 inst_id,
862a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                                    void *p_ref, tBTA_STATUS call_status)
863a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
864a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_cb_t btif_cb;
865a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    tBTA_GATTC_EVT upevt;
866a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    uint8_t client_if = 0;
867a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
86816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (NULL == p_ref)
869a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    {
87016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        BTIF_TRACE_WARNING("%s Invalid p_ref received",__FUNCTION__);
87116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
87216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    else
87316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
87416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        client_if = *(UINT8 *) p_ref;
875a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    }
876a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
877e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s -Inst ID %d, Status:%x, client_if:%d",__FUNCTION__,inst_id, call_status,
878a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                       client_if);
879a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.status = call_status;
880a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.client_if = client_if;
881a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.inst_id = inst_id;
882a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
883a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    switch(event)
884a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    {
885a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_ENB_EVT:
886a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_ENB_EVT;
887a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
888a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
889a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_DISABLE_EVT:
890a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_DIS_EVT;
891a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
892a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
893a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_PARAM_EVT:
894a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_UPD_EVT;
895a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
896a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
897a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_DATA_EVT:
898a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_DATA_EVT;
899a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
900a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
901a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        default:
902a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            return;
903a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    }
904a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
905a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    bt_status_t status = btif_transfer_context(btif_gattc_upstreams_evt, (uint16_t) upevt,
906a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
907a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    ASSERTC(status == BT_STATUS_SUCCESS, "Context transfer failed!", status);
908a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
909a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
910a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic void bta_gattc_set_adv_data_cback(tBTA_STATUS call_status)
911a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
912a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    UNUSED(call_status);
913a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_cb_t btif_cb;
914a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.status = call_status;
915a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.action = 0;
916a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_ADV_DATA_EVT,
917a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                          (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
918a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
919a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
920c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_setup_cb (tBTA_BLE_BATCH_SCAN_EVT evt,
921c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                            tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status)
922c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
923c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    UINT8 upevt = 0;
924c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t btif_scan_track_cb;
925c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
926c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.status = status;
927c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.client_if = ref_value;
9281a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("bta_batch_scan_setup_cb-Status:%x, client_if:%d, evt=%d",
929c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            status, ref_value, evt);
930c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
931c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    switch(evt)
932c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    {
933c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_ENB_EVT:
934c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
935c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_ENB_EVT;
936c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
937c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
938c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
939c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_DIS_EVT:
940c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
941c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_DIS_EVT;
942c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
943c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
944c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
945c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_CFG_STRG_EVT:
946c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
947c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_CFG_EVT;
948c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
949c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
950c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
951c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_DATA_EVT:
952c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
953c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_RD_EVT;
954c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
955c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
956c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
957c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_THRES_EVT:
958c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
959c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_THR_EVT;
960c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
961c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
962c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
963c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        default:
964c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            return;
965c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    }
966c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
967c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, upevt,(char*) &btif_scan_track_cb,
968c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                          sizeof(btgatt_batch_track_cb_t), NULL);
969c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
970c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
971c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
972c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_threshold_cb(tBTA_DM_BLE_REF_VALUE ref_value)
973c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
974c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t btif_scan_track_cb;
975c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.status = 0;
976c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.client_if = ref_value;
977c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
9781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s - client_if:%d",__FUNCTION__, ref_value);
979c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
980c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_BTH_SCAN_THR_EVT,
981c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                          (char*) &btif_scan_track_cb, sizeof(btif_gattc_cb_t), NULL);
982c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
983c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
984c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_reports_cb(tBTA_DM_BLE_REF_VALUE ref_value, UINT8 report_format,
985c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                            UINT8 num_records, UINT16 data_len,
986c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                            UINT8* p_rep_data, tBTA_STATUS status)
987c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
988c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t btif_scan_track_cb;
989adb7bb50469db992969295792a7ba3b73f9e24b3Satya Calloji    memset(&btif_scan_track_cb, 0, sizeof(btgatt_batch_track_cb_t));
9901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s - client_if:%d, %d, %d, %d",__FUNCTION__, ref_value, status, num_records,
991c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                    data_len);
992c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
993c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.status = status;
994c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
995c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.client_if = ref_value;
996c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.read_reports.report_format = report_format;
997c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.read_reports.data_len = data_len;
998c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.read_reports.num_records = num_records;
999c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
100016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (data_len > 0)
1001c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    {
1002c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        btif_scan_track_cb.read_reports.p_rep_data = GKI_getbuf(data_len);
1003c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        memcpy(btif_scan_track_cb.read_reports.p_rep_data, p_rep_data, data_len);
1004f1dba910daa5f0ce9ca89f840bb7e6269f07af1dSatya Calloji        GKI_freebuf(p_rep_data);
1005c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    }
1006c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1007c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_BTH_SCAN_RD_EVT,
1008c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        (char*) &btif_scan_track_cb, sizeof(btgatt_batch_track_cb_t), NULL);
1009c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
101016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (data_len > 0)
1011c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        GKI_freebuf(btif_scan_track_cb.read_reports.p_rep_data);
1012c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
1013c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
10146975b4d711142b885af479721cada448952c6b41Andre Eisenbachstatic void bta_scan_results_cb (tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH *p_data)
1015ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1016ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1017ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t len;
1018ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1019ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    switch (event)
1020ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
1021ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_DM_INQ_RES_EVT:
1022ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
1023ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(btif_cb.bd_addr.address, p_data->inq_res.bd_addr);
1024ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_cb.device_type = p_data->inq_res.device_type;
1025ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_cb.rssi = p_data->inq_res.rssi;
1026ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_cb.addr_type = p_data->inq_res.ble_addr_type;
10277fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            btif_cb.flag = p_data->inq_res.flag;
1028ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_data->inq_res.p_eir)
1029ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
1030ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                memcpy(btif_cb.value, p_data->inq_res.p_eir, 62);
1031a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson                if (BTM_CheckEirData(p_data->inq_res.p_eir, BTM_EIR_COMPLETE_LOCAL_NAME_TYPE,
1032ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                      &len))
1033ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                {
1034ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    p_data->inq_res.remt_name_not_required  = TRUE;
1035ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                }
1036ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
1037ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1038ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        break;
1039ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1040ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_DM_INQ_CMPL_EVT:
1041ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
1042e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("%s  BLE observe complete. Num Resp %d",
1043ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                              __FUNCTION__,p_data->inq_cmpl.num_resps);
1044ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            return;
1045ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1046ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1047ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        default:
1048e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_WARNING("%s : Unknown event 0x%x", __FUNCTION__, event);
1049ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return;
1050ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1051ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATT_OBSERVE_EVT,
1052ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1053ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1054ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1055f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Callojistatic void bta_track_adv_event_cb(tBTA_DM_BLE_TRACK_ADV_DATA *p_track_adv_data)
10561acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji{
1057f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btgatt_track_adv_info_t btif_scan_track_cb;
1058f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    BTIF_TRACE_DEBUG("%s",__FUNCTION__);
1059f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_gatt_move_track_adv_data(&btif_scan_track_cb,
1060f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji                (btgatt_track_adv_info_t*)p_track_adv_data);
1061f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji
10621acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_ADV_VSC_EVT,
1063f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji                          (char*) &btif_scan_track_cb, sizeof(btgatt_track_adv_info_t), NULL);
10641acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji}
10651acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji
1066ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btm_read_rssi_cb (tBTM_RSSI_RESULTS *p_result)
1067ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1068ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1069ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1070ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, p_result->rem_bda);
1071ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.rssi = p_result->rssi;
1072ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.status = p_result->status;
1073ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = rssi_request_client_if;
1074ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATTC_RSSI_EVT,
1075ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1076ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1077ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1078935324abbe8706307297f09cf79bbcd4efb73367Satya Callojistatic void bta_scan_param_setup_cb(tGATT_IF client_if, tBTM_STATUS status)
1079935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji{
1080935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji    btif_gattc_cb_t btif_cb;
1081935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
1082935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji    btif_cb.status = status;
1083935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji    btif_cb.client_if = client_if;
1084935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATTC_SCAN_PARAM_EVT,
1085935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji                          (char *)&btif_cb, sizeof(btif_gattc_cb_t), NULL);
1086935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji}
1087935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji
10881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_cfg_cb(tBTA_DM_BLE_PF_ACTION action, tBTA_DM_BLE_SCAN_COND_OP cfg_op,
10891a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, tBTA_STATUS status,
10901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                tBTA_DM_BLE_REF_VALUE ref_value)
1091b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
10921a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_cb;
1093b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    btif_cb.status = status;
10941a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.action = action;
10951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.cond_op = cfg_op;
10961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.avbl_space = avbl_space;
10971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.client_if = ref_value;
10981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_CFG_EVT,
10991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                          (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
11001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
11011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
11021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_param_setup_cb(UINT8 action_type,
11031a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                        tBTA_DM_BLE_PF_AVBL_SPACE avbl_space,
11041a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                        tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status)
11051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
11061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_cb;
11071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
11081a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.status = status;
11091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.action = action_type;
11101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.client_if = ref_value;
11111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.avbl_space = avbl_space;
11121a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_PARAM_EVT,
11131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                          (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
11141a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
11151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
11161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_status_cb(UINT8 action, tBTA_STATUS status,
11171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                    tBTA_DM_BLE_REF_VALUE ref_value)
11181a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
11191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_cb;
11201a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
11211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.status = status;
11221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.action = action;
11231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.client_if = ref_value;
11241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_STATUS_EVT,
11251a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                          (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
1126b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
1127ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1128484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidgestatic void btgattc_free_event_data(UINT16 event, char *event_data)
1129484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge{
1130484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge    switch (event)
1131484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge    {
1132484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge        case BTIF_GATTC_ADV_INSTANCE_SET_DATA:
1133484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge        case BTIF_GATTC_SET_ADV_DATA:
1134484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge        {
1135484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            const btif_adv_data_t *adv_data = (btif_adv_data_t*) event_data;
1136484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            btif_gattc_adv_data_cleanup(adv_data);
1137484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            break;
1138484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge        }
1139484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge
1140484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge        default:
1141484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            break;
1142484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge    }
1143484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge}
1144484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge
1145ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btgattc_handle_event(uint16_t event, char* p_param)
1146ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1147ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATT_STATUS           status;
1148ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBT_UUID                   uuid;
1149ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATT_SRVC_ID          srvc_id;
1150ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tGATT_CHAR_PROP            out_char_prop;
1151ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATTC_CHAR_ID         in_char_id;
1152ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATTC_CHAR_ID         out_char_id;
1153ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATTC_CHAR_DESCR_ID   in_char_descr_id;
1154ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATTC_CHAR_DESCR_ID   out_char_descr_id;
1155ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATTC_INCL_SVC_ID     in_incl_svc_id;
1156ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATTC_INCL_SVC_ID     out_incl_svc_id;
1157ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATT_UNFMT            descr_val;
1158ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
115952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_gattc_cb_t* p_cb = (btif_gattc_cb_t*) p_param;
116052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    if (!p_cb) return;
1161ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1162db554581079863974af8e1289646f5deea6fc044Marie Janssen    LOG_VERBOSE(LOG_TAG, "%s: Event %d", __FUNCTION__, event);
1163ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1164ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    switch (event)
1165ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
1166ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_REGISTER_APP:
1167ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_uuid(&uuid, &p_cb->uuid);
1168b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji            btif_gattc_incr_app_count();
11696975b4d711142b885af479721cada448952c6b41Andre Eisenbach            BTA_GATTC_AppRegister(&uuid, bta_gattc_cback);
1170ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1171ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1172ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_UNREGISTER_APP:
11733770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_clear_clientif(p_cb->client_if, TRUE);
1174b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji            btif_gattc_decr_app_count();
1175ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_AppDeregister(p_cb->client_if);
1176ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1177ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1178ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_SCAN_START:
1179ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_gattc_init_dev_cb();
11806975b4d711142b885af479721cada448952c6b41Andre Eisenbach            BTA_DmBleObserve(TRUE, 0, bta_scan_results_cb);
1181ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1182ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1183ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_SCAN_STOP:
1184ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_DmBleObserve(FALSE, 0, 0);
1185ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1186ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1187ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_OPEN:
1188306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach        {
1189306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            // Ensure device is in inquiry database
1190306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            int addr_type = 0;
1191306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            int device_type = 0;
11927fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            tBTA_GATT_TRANSPORT transport = BTA_GATT_TRANSPORT_LE;
1193306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach
119486f97eda524568f2d264186844450db5e56dac36Matthew Xie            if (btif_get_address_type(p_cb->bd_addr.address, &addr_type) &&
119586f97eda524568f2d264186844450db5e56dac36Matthew Xie                btif_get_device_type(p_cb->bd_addr.address, &device_type) &&
119686f97eda524568f2d264186844450db5e56dac36Matthew Xie                device_type != BT_DEVICE_TYPE_BREDR)
119786f97eda524568f2d264186844450db5e56dac36Matthew Xie            {
1198306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach                BTA_DmAddBleDevice(p_cb->bd_addr.address, addr_type, device_type);
119986f97eda524568f2d264186844450db5e56dac36Matthew Xie            }
1200306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach
1201306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            // Mark background connections
1202ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (!p_cb->is_direct)
1203a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach            {
1204a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                // Check if RPA offloading is supported, otherwise, do not start
1205a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                // background connection, since it will not connect after address
1206a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                // changes
12072cfcf51ea3447f2b5cf95dbe7515d230de1e7df7Tobias Melin                if ((p_cb->addr_type == BLE_ADDR_RANDOM)
12082cfcf51ea3447f2b5cf95dbe7515d230de1e7df7Tobias Melin                        && BTM_BLE_IS_RESOLVE_BDA(p_cb->bd_addr.address))
1209a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                {
1210a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    tBTM_BLE_VSC_CB vnd_capabilities;
1211a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    BTM_BleGetVendorCapabilities(&vnd_capabilities);
1212a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    if (!vnd_capabilities.rpa_offloading)
1213a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    {
1214a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                        HAL_CBACK(bt_gatt_callbacks, client->open_cb, 0, BT_STATUS_UNSUPPORTED,
1215a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                                        p_cb->client_if, &p_cb->bd_addr);
1216a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                        return;
1217a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    }
1218a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                }
1219ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_DmBleSetBgConnType(BTM_BLE_CONN_AUTO, NULL);
1220a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach            }
1221ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
12227fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            switch(device_type)
12237fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            {
12247fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                case BT_DEVICE_TYPE_BREDR:
12257fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                    transport = BTA_GATT_TRANSPORT_BR_EDR;
12267fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                    break;
12277fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
12287fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                case BT_DEVICE_TYPE_BLE:
12297fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                    transport = BTA_GATT_TRANSPORT_LE;
12307fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                    break;
12317fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
12327fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                case BT_DEVICE_TYPE_DUMO:
1233033edab9780481ca743d1f14cc893dc533c3c3f2Satya Calloji                    if (p_cb->transport == GATT_TRANSPORT_LE)
12347fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                        transport = BTA_GATT_TRANSPORT_LE;
12357fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                    else
12367fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                        transport = BTA_GATT_TRANSPORT_BR_EDR;
12377fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                    break;
12387fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            }
12397fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
1240306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            // Connect!
1241e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG ("BTA_GATTC_Open Transport  = %d, dev type = %d",
12427fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                transport, device_type);
12437fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            BTA_GATTC_Open(p_cb->client_if, p_cb->bd_addr.address, p_cb->is_direct, transport);
1244ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1245306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach        }
1246ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1247ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_CLOSE:
12486975b4d711142b885af479721cada448952c6b41Andre Eisenbach            // Disconnect established connections
1249ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_cb->conn_id != 0)
1250ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_Close(p_cb->conn_id);
1251ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            else
1252ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_CancelOpen(p_cb->client_if, p_cb->bd_addr.address, TRUE);
1253ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1254ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            // Cancel pending background connections (remove from whitelist)
1255ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_CancelOpen(p_cb->client_if, p_cb->bd_addr.address, FALSE);
1256ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1257ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1258ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_SEARCH_SERVICE:
1259ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
1260ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_cb->search_all)
1261ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
1262ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_ServiceSearchRequest(p_cb->conn_id, NULL);
1263ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            } else {
1264ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                btif_to_bta_uuid(&uuid, &p_cb->uuid);
1265ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_ServiceSearchRequest(p_cb->conn_id, &uuid);
1266ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
1267ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1268ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1269ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1270ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_GET_FIRST_CHAR:
1271ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
12725f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btgatt_gatt_id_t char_id;
1273ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&srvc_id, &p_cb->srvc_id);
1274ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            status = BTA_GATTC_GetFirstChar(p_cb->conn_id, &srvc_id, NULL,
1275ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                            &out_char_id, &out_char_prop);
1276ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1277ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (status == 0)
12785f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                bta_to_btif_gatt_id(&char_id, &out_char_id.char_id);
1279ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1280ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->get_characteristic_cb,
1281ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                p_cb->conn_id, status, &p_cb->srvc_id,
1282ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                &char_id, out_char_prop);
1283ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1284ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1285ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1286ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_GET_NEXT_CHAR:
1287ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
12885f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btgatt_gatt_id_t char_id;
1289ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id);
12905f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id);
1291ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1292ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            status = BTA_GATTC_GetNextChar(p_cb->conn_id, &in_char_id, NULL,
1293ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                            &out_char_id, &out_char_prop);
1294ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1295ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (status == 0)
12965f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                bta_to_btif_gatt_id(&char_id, &out_char_id.char_id);
1297ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1298ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->get_characteristic_cb,
1299ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                p_cb->conn_id, status, &p_cb->srvc_id,
1300ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                &char_id, out_char_prop);
1301ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1302ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1303ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1304ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_GET_FIRST_CHAR_DESCR:
1305ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
13065f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btgatt_gatt_id_t descr_id;
1307ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id);
13085f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id);
1309ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1310ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            status = BTA_GATTC_GetFirstCharDescr(p_cb->conn_id, &in_char_id, NULL,
1311ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                                    &out_char_descr_id);
1312ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1313ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (status == 0)
13145f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                bta_to_btif_gatt_id(&descr_id, &out_char_descr_id.descr_id);
1315ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1316ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->get_descriptor_cb,
1317ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                p_cb->conn_id, status, &p_cb->srvc_id,
1318ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                &p_cb->char_id, &descr_id);
1319ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1320ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1321ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1322ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_GET_NEXT_CHAR_DESCR:
1323ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
13245f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btgatt_gatt_id_t descr_id;
1325ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&in_char_descr_id.char_id.srvc_id, &p_cb->srvc_id);
13265f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_descr_id.char_id.char_id, &p_cb->char_id);
13275f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_descr_id.descr_id, &p_cb->descr_id);
1328ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1329ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            status = BTA_GATTC_GetNextCharDescr(p_cb->conn_id, &in_char_descr_id
1330ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                        , NULL, &out_char_descr_id);
1331ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1332ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (status == 0)
13335f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                bta_to_btif_gatt_id(&descr_id, &out_char_descr_id.descr_id);
1334ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1335ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->get_descriptor_cb,
1336ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                p_cb->conn_id, status, &p_cb->srvc_id,
1337ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                &p_cb->char_id, &descr_id);
1338ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1339ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1340ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1341ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_GET_FIRST_INCL_SERVICE:
1342ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
1343ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_srvc_id_t incl_srvc_id;
1344ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&srvc_id, &p_cb->srvc_id);
1345ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1346ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            status = BTA_GATTC_GetFirstIncludedService(p_cb->conn_id,
1347ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                        &srvc_id, NULL, &out_incl_svc_id);
1348ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1349ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_to_btif_srvc_id(&incl_srvc_id, &out_incl_svc_id.incl_svc_id);
1350ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1351ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->get_included_service_cb,
1352ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                p_cb->conn_id, status, &p_cb->srvc_id,
1353ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                &incl_srvc_id);
1354ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1355ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1356ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1357ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_GET_NEXT_INCL_SERVICE:
1358ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
1359ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_srvc_id_t incl_srvc_id;
1360ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&in_incl_svc_id.srvc_id, &p_cb->srvc_id);
1361ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&in_incl_svc_id.incl_svc_id, &p_cb->incl_srvc_id);
1362ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1363ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            status = BTA_GATTC_GetNextIncludedService(p_cb->conn_id,
1364ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                        &in_incl_svc_id, NULL, &out_incl_svc_id);
1365ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1366ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_to_btif_srvc_id(&incl_srvc_id, &out_incl_svc_id.incl_svc_id);
1367ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1368ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->get_included_service_cb,
1369ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                p_cb->conn_id, status, &p_cb->srvc_id,
1370ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                &incl_srvc_id);
1371ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1372ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1373ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1374ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_READ_CHAR:
1375ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id);
13765f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id);
1377ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1378ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_ReadCharacteristic(p_cb->conn_id, &in_char_id, p_cb->auth_req);
1379ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1380ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1381ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_READ_CHAR_DESCR:
1382ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&in_char_descr_id.char_id.srvc_id, &p_cb->srvc_id);
13835f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_descr_id.char_id.char_id, &p_cb->char_id);
13845f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_descr_id.descr_id, &p_cb->descr_id);
1385ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1386ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_ReadCharDescr(p_cb->conn_id, &in_char_descr_id, p_cb->auth_req);
1387ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1388ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1389ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_WRITE_CHAR:
1390ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id);
13915f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id);
1392ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1393ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_WriteCharValue(p_cb->conn_id, &in_char_id,
1394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->write_type,
1395ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->len,
1396ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->value,
1397ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->auth_req);
1398ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1399ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1400ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_WRITE_CHAR_DESCR:
1401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&in_char_descr_id.char_id.srvc_id, &p_cb->srvc_id);
14025f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_descr_id.char_id.char_id, &p_cb->char_id);
14035f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_descr_id.descr_id, &p_cb->descr_id);
1404ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            descr_val.len = p_cb->len;
1406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            descr_val.p_value = p_cb->value;
1407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_WriteCharDescr(p_cb->conn_id, &in_char_descr_id,
1409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->write_type, &descr_val,
1410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->auth_req);
1411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_EXECUTE_WRITE:
1414ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_ExecuteWrite(p_cb->conn_id, p_cb->action);
1415ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1416ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_REG_FOR_NOTIFICATION:
1418ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id);
14195f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id);
1420ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1421ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            status = BTA_GATTC_RegisterForNotifications(p_cb->client_if,
1422ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                    p_cb->bd_addr.address, &in_char_id);
1423ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1424ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->register_for_notification_cb,
1425ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                p_cb->conn_id, 1, status, &p_cb->srvc_id,
1426ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                &p_cb->char_id);
1427ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1428ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1429ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_DEREG_FOR_NOTIFICATION:
1430ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id);
14315f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id);
1432ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1433ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            status = BTA_GATTC_DeregisterForNotifications(p_cb->client_if,
1434ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                        p_cb->bd_addr.address, &in_char_id);
1435ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1436ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->register_for_notification_cb,
1437ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                p_cb->conn_id, 0, status, &p_cb->srvc_id,
1438ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                &p_cb->char_id);
1439ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1440ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1441ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_REFRESH:
1442ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_Refresh(p_cb->bd_addr.address);
1443ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1444ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1445ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_READ_RSSI:
1446ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            rssi_request_client_if = p_cb->client_if;
1447ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTM_ReadRSSI (p_cb->bd_addr.address, (tBTM_CMPL_CB *)btm_read_rssi_cb);
1448ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1449ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
14501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTIF_GATTC_SCAN_FILTER_PARAM_SETUP:
14511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
145252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
145316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (1 == p_adv_filt_cb->adv_filt_param.dely_mode)
14541acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji               BTA_DmBleTrackAdvertiser(p_adv_filt_cb->client_if, bta_track_adv_event_cb);
14551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTA_DmBleScanFilterSetup(p_adv_filt_cb->action, p_adv_filt_cb->filt_index,
14561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                &p_adv_filt_cb->adv_filt_param, NULL, bta_scan_filt_param_setup_cb,
14571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                p_adv_filt_cb->client_if);
1458b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            break;
14591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
1460b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1461b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        case BTIF_GATTC_SCAN_FILTER_CONFIG:
1462b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        {
146352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
1464b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            tBTA_DM_BLE_PF_COND_PARAM cond;
1465b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            memset(&cond, 0, sizeof(cond));
1466b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
14671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            switch (p_adv_filt_cb->filt_type)
1468b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            {
1469b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_ADDR_FILTER: // 0
14701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    bdcpy(cond.target_addr.bda, p_adv_filt_cb->bd_addr.address);
14711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.target_addr.type = p_adv_filt_cb->addr_type;
14721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
14731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
14741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
14751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1476b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1477b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1478b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_SRVC_DATA: // 1
14791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
14801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                            p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
14811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                            NULL, bta_scan_filt_cfg_cb, p_adv_filt_cb->client_if);
1482b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1483b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1484b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_SRVC_UUID: // 2
1485b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
1486b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    tBTA_DM_BLE_PF_COND_MASK uuid_mask;
1487b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1488b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.srvc_uuid.p_target_addr = NULL;
1489b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.srvc_uuid.cond_logic = BTA_DM_BLE_PF_LOGIC_AND;
14901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    btif_to_bta_uuid(&cond.srvc_uuid.uuid, &p_adv_filt_cb->uuid);
1491b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1492b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.srvc_uuid.p_uuid_mask = NULL;
14931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    if (p_adv_filt_cb->has_mask)
1494b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    {
14951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                        btif_to_bta_uuid_mask(&uuid_mask, &p_adv_filt_cb->uuid_mask);
1496b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                        cond.srvc_uuid.p_uuid_mask = &uuid_mask;
1497b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    }
14981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
14991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
15001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
15011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1502b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1503b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1504b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1505b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_SRVC_SOL_UUID: // 3
1506b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
1507b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.solicitate_uuid.p_target_addr = NULL;
1508b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.solicitate_uuid.cond_logic = BTA_DM_BLE_PF_LOGIC_AND;
15091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    btif_to_bta_uuid(&cond.solicitate_uuid.uuid, &p_adv_filt_cb->uuid);
15101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
15111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
15121a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
15131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1514b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1515b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1516b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1517b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_LOCAL_NAME: // 4
1518b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
15191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.local_name.data_len = p_adv_filt_cb->value_len;
15201a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.local_name.p_data = p_adv_filt_cb->value;
15211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
15221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
15231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
15241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1525b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1526b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1527b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1528b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_MANU_DATA: // 5
1529b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
15301a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.company_id = p_adv_filt_cb->conn_id;
15311a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.company_id_mask = p_adv_filt_cb->company_id_mask;
15321a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.data_len = p_adv_filt_cb->value_len;
15331a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.p_pattern = p_adv_filt_cb->value;
15341a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.p_pattern_mask = p_adv_filt_cb->value_mask;
15351a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
15361a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
15371a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
15381a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1539b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1540b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1541b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
15421a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                case BTA_DM_BLE_PF_SRVC_DATA_PATTERN: //6
15431a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                {
15441a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.srvc_data.data_len = p_adv_filt_cb->value_len;
15451a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.srvc_data.p_pattern = p_adv_filt_cb->value;
15461a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.srvc_data.p_pattern_mask = p_adv_filt_cb->value_mask;
15471a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
15481a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                                p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
15491a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                                &cond, bta_scan_filt_cfg_cb,
15501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                                p_adv_filt_cb->client_if);
15511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   break;
15521a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                }
15531a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
1554b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                default:
1555db554581079863974af8e1289646f5deea6fc044Marie Janssen                    LOG_ERROR(LOG_TAG, "%s: Unknown filter type (%d)!", __FUNCTION__, p_cb->action);
1556b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1557b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            }
1558b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            break;
1559b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        }
1560b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1561b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        case BTIF_GATTC_SCAN_FILTER_CLEAR:
1562b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        {
156352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
1564b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            BTA_DmBleCfgFilterCondition(BTA_DM_BLE_SCAN_COND_CLEAR, BTA_DM_BLE_PF_TYPE_ALL,
15656e2d9db5148176d88d7f48c3b2ad5b27c57ca14dSatya Calloji                                        p_adv_filt_cb->filt_index, NULL, bta_scan_filt_cfg_cb,
15666e2d9db5148176d88d7f48c3b2ad5b27c57ca14dSatya Calloji                                        p_adv_filt_cb->client_if);
15671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
15681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
15691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
15701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTIF_GATTC_SCAN_FILTER_ENABLE:
15711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
157252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
15731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTA_DmEnableScanFilter(p_adv_filt_cb->action, bta_scan_filt_status_cb,
15741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                   p_adv_filt_cb->client_if);
1575b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            break;
1576b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        }
1577b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
15785c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        case BTIF_GATTC_LISTEN:
1579602162a13c6ed8abae53aee6deeda48b79f30911Zhihai Xu#if (defined(BLE_PERIPHERAL_MODE_SUPPORT) && (BLE_PERIPHERAL_MODE_SUPPORT == TRUE))
15805c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            BTA_GATTC_Listen(p_cb->client_if, p_cb->start, NULL);
1581eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach#else
1582a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach            BTA_GATTC_Broadcast(p_cb->client_if, p_cb->start);
1583eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach#endif
15845c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            break;
15855c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
15865c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        case BTIF_GATTC_SET_ADV_DATA:
15875c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        {
1588484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            const btif_adv_data_t *p_adv_data = (btif_adv_data_t*) p_param;
1589484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            const int cbindex = CLNT_IF_IDX;
1590484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            if (cbindex >= 0 && btif_gattc_copy_datacb(cbindex, p_adv_data, false))
1591a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            {
1592a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb();
1593a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                if (!p_adv_data->set_scan_rsp)
1594a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                {
1595a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    BTA_DmBleSetAdvConfig(p_multi_adv_data_cb->inst_cb[cbindex].mask,
1596a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        &p_multi_adv_data_cb->inst_cb[cbindex].data, bta_gattc_set_adv_data_cback);
1597a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                }
1598a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                else
1599a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                {
1600a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    BTA_DmBleSetScanRsp(p_multi_adv_data_cb->inst_cb[cbindex].mask,
1601a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        &p_multi_adv_data_cb->inst_cb[cbindex].data, bta_gattc_set_adv_data_cback);
1602a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                }
1603a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            }
1604484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            else
1605484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            {
1606484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                BTIF_TRACE_ERROR("%s:%s: failed to get instance data cbindex: %d",
1607484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                                 __func__, "BTIF_GATTC_SET_ADV_DATA", cbindex);
1608484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            }
1609484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            break;
1610a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1611a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1612a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_ENABLE:
1613a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
161452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param;
161516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
161616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            int cbindex = -1, arrindex = -1;
161716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
161816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            arrindex = btif_multi_adv_add_instid_map(p_inst_cb->client_if,INVALID_ADV_INST, true);
161916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (arrindex >= 0)
162016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                cbindex = btif_gattc_obtain_idx_for_datacb(p_inst_cb->client_if, CLNT_IF_IDX);
162116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
162216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (cbindex >= 0 && arrindex >= 0)
1623a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            {
1624a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb();
1625a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                memcpy(&p_multi_adv_data_cb->inst_cb[cbindex].param,
1626a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                       &p_inst_cb->param, sizeof(tBTA_BLE_ADV_PARAMS));
1627cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach                p_multi_adv_data_cb->inst_cb[cbindex].timeout_s = p_inst_cb->timeout_s;
162816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                BTIF_TRACE_DEBUG("%s, client_if value: %d", __FUNCTION__,
162916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                            p_multi_adv_data_cb->clntif_map[arrindex + arrindex]);
1630a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                BTA_BleEnableAdvInstance(&(p_multi_adv_data_cb->inst_cb[cbindex].param),
1631a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    bta_gattc_multi_adv_cback,
163216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                    &(p_multi_adv_data_cb->clntif_map[arrindex + arrindex]));
1633a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            }
16345c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            else
163516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            {
163616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                /* let the error propagate up from BTA layer */
1637e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("%s invalid index in BTIF_GATTC_ENABLE_ADV",__FUNCTION__);
163816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                BTA_BleEnableAdvInstance(&p_inst_cb->param, bta_gattc_multi_adv_cback, NULL);
163916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            }
1640a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
1641a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1642eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
1643a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_UPDATE:
1644a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
164552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param;
1646a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int inst_id = btif_multi_adv_instid_for_clientif(p_inst_cb->client_if);
1647a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int cbindex = btif_gattc_obtain_idx_for_datacb(p_inst_cb->client_if, CLNT_IF_IDX);
164816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (inst_id >= 0 && cbindex >= 0 && NULL != p_inst_cb)
1649a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            {
1650a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb();
1651a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                memcpy(&p_multi_adv_data_cb->inst_cb[cbindex].param, &p_inst_cb->param,
1652a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        sizeof(tBTA_BLE_ADV_PARAMS));
1653a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                BTA_BleUpdateAdvInstParam((UINT8)inst_id,
1654a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    &(p_multi_adv_data_cb->inst_cb[cbindex].param));
1655a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            }
1656a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            else
1657e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("%s invalid index in BTIF_GATTC_UPDATE_ADV", __FUNCTION__);
1658a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
1659a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1660a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1661a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_SET_DATA:
1662a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
166352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_adv_data_t *p_adv_data = (btif_adv_data_t*) p_param;
1664a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int cbindex = btif_gattc_obtain_idx_for_datacb(p_adv_data->client_if, CLNT_IF_IDX);
1665a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int inst_id = btif_multi_adv_instid_for_clientif(p_adv_data->client_if);
1666484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            if (inst_id >= 0 && cbindex >= 0 && btif_gattc_copy_datacb(cbindex, p_adv_data, true))
1667eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach            {
1668484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                btgatt_multi_adv_common_data *p_multi_adv_data_cb =
1669484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                    btif_obtain_multi_adv_data_cb();
1670484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                BTA_BleCfgAdvInstData(
1671484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                    (UINT8)inst_id,
1672484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                    p_multi_adv_data_cb->inst_cb[cbindex].is_scan_rsp,
1673484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                    p_multi_adv_data_cb->inst_cb[cbindex].mask,
1674484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                    &p_multi_adv_data_cb->inst_cb[cbindex].data);
1675484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            }
1676484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            else
1677484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            {
1678484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                BTIF_TRACE_ERROR(
1679484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                    "%s:%s: failed to get invalid instance data: inst_id:%d "
1680484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                    "cbindex:%d",
1681484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                    __func__, "BTIF_GATTC_ADV_INSTANCE_SET_DATA", inst_id, cbindex);
1682eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach            }
1683a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
1684a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1685a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1686a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_DISABLE:
1687a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
168852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param;
1689a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int inst_id = btif_multi_adv_instid_for_clientif(p_inst_cb->client_if);
169016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (inst_id >=0)
1691a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                BTA_BleDisableAdvInstance((UINT8)inst_id);
1692a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            else
1693e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("%s invalid instance ID in BTIF_GATTC_DISABLE_ADV",__FUNCTION__);
16945c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            break;
16955c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        }
1696a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
16979426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        case BTIF_GATTC_CONFIGURE_MTU:
16989426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            BTA_GATTC_ConfigureMTU(p_cb->conn_id, p_cb->len);
16999426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            break;
17005c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
170152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach        case BTIF_GATTC_CONN_PARAM_UPDT:
170252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach        {
170352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_conn_param_cb_t *p_conn_param_cb = (btif_conn_param_cb_t*) p_param;
170452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            if (BTA_DmGetConnectionState(p_conn_param_cb->bd_addr.address))
170552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            {
170652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                BTA_DmBleUpdateConnectionParams(p_conn_param_cb->bd_addr.address,
170752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->min_interval, p_conn_param_cb->max_interval,
170852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->latency, p_conn_param_cb->timeout);
170952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            } else {
171052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                BTA_DmSetBlePrefConnParams(p_conn_param_cb->bd_addr.address,
171152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->min_interval, p_conn_param_cb->max_interval,
171252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->latency, p_conn_param_cb->timeout);
171352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            }
171452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            break;
171552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach        }
171652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach
17177d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham        case BTIF_GATTC_SET_SCAN_PARAMS:
1718935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji        {
1719935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji            BTA_DmSetBleScanParams(p_cb->client_if, p_cb->scan_interval, p_cb->scan_window,
1720935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji                                   BTM_BLE_SCAN_MODE_ACTI, bta_scan_param_setup_cb);
17217d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham            break;
1722935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji        }
17237d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham
1724c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_CONFIG_STORAGE_PARAMS:
1725c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
172652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1727c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleSetStorageParams(p_scan_track_cb->batch_scan_full_max,
1728c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               p_scan_track_cb->batch_scan_trunc_max, p_scan_track_cb->batch_scan_notify_threshold,
1729c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               bta_batch_scan_setup_cb, bta_batch_scan_threshold_cb, bta_batch_scan_reports_cb,
173052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach               (tBTA_DM_BLE_REF_VALUE) p_scan_track_cb->client_if);
1731c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1732c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1733c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1734c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_ENABLE_BATCH_SCAN:
1735c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
173652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1737c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleEnableBatchScan(p_scan_track_cb->scan_mode, p_scan_track_cb->scan_interval,
1738c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               p_scan_track_cb->scan_window, p_scan_track_cb->discard_rule,
1739c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               p_scan_track_cb->addr_type, p_scan_track_cb->client_if);
1740c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1741c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1742c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1743c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_DISABLE_BATCH_SCAN:
1744c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
174552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1746c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleDisableBatchScan(p_scan_track_cb->client_if);
1747c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1748c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1749c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1750c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_READ_BATCH_SCAN_REPORTS:
1751c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
175252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1753c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleReadScanReports(p_scan_track_cb->scan_mode, p_scan_track_cb->client_if);
1754c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1755c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1756c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1757ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        default:
1758db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_ERROR(LOG_TAG, "%s: Unknown event (%d)!", __FUNCTION__, event);
1759ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1760ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1761484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge
1762484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge    btgattc_free_event_data(event, p_param);
1763ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1764ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1765ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
1766ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Client API Functions
1767ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
1768ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1769ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_register_app(bt_uuid_t *uuid)
1770ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1771ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1772ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1773ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.uuid, uuid, sizeof(bt_uuid_t));
1774ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REGISTER_APP,
1775ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1776ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1777ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1778ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_unregister_app(int client_if )
1779ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1780ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1781ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1782ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1783ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_UNREGISTER_APP,
1784ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1785ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1786ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
17877d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadhamstatic bt_status_t btif_gattc_scan( bool start )
1788ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1789ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1790ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1791ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, start ? BTIF_GATTC_SCAN_START : BTIF_GATTC_SCAN_STOP,
1792ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1793ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1794ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
17957fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battastatic bt_status_t btif_gattc_open(int client_if, const bt_bdaddr_t *bd_addr,
17967fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                        bool is_direct,int transport)
1797ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1798ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1799ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1800ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1801ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.is_direct = is_direct ? 1 : 0;
18027fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    btif_cb.transport = (btgatt_transport_t)transport;
1803ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
1804ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_OPEN,
1805ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1806ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1807ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1808ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_close( int client_if, const bt_bdaddr_t *bd_addr, int conn_id)
1809ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1810ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1811ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1812ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1813ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1814ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
1815ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CLOSE,
1816ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1817ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1818ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
18195c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachstatic bt_status_t btif_gattc_listen(int client_if, bool start)
18205c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
18215c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    CHECK_BTGATT_INIT();
18225c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_gattc_cb_t btif_cb;
18235c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_cb.client_if = (uint8_t) client_if;
18245c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_cb.start = start ? 1 : 0;
18255c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_LISTEN,
18265c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
18275c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
18285c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
1829484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidgestatic void btif_gattc_deep_copy(UINT16 event, char *p_dest, char *p_src)
1830484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge{
1831484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge    switch (event)
1832484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge    {
1833484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge        case BTIF_GATTC_ADV_INSTANCE_SET_DATA:
1834484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge        case BTIF_GATTC_SET_ADV_DATA:
1835484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge        {
1836484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            const btif_adv_data_t *src = (btif_adv_data_t*) p_src;
1837484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            btif_adv_data_t *dst = (btif_adv_data_t*) p_dest;
1838484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            memcpy(dst, src, sizeof(*src));
1839484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge
1840484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            if (src->p_manufacturer_data)
1841484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            {
1842484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                dst->p_manufacturer_data = GKI_getbuf(src->manufacturer_len);
1843484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                memcpy(dst->p_manufacturer_data, src->p_manufacturer_data,
1844484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                       src->manufacturer_len);
1845484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            }
1846484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge
1847484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            if (src->p_service_data)
1848484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            {
1849484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                dst->p_service_data = GKI_getbuf(src->service_data_len);
1850484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                memcpy(dst->p_service_data, src->p_service_data, src->service_data_len);
1851484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            }
1852484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge
1853484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            if (src->p_service_uuid)
1854484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            {
1855484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                dst->p_service_uuid = GKI_getbuf(src->service_uuid_len);
1856484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                memcpy(dst->p_service_uuid, src->p_service_uuid, src->service_uuid_len);
1857484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            }
1858484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            break;
1859484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge        }
1860484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge
1861484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge        default:
1862484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            ASSERTC(false, "Unhandled deep copy", event);
1863484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge            break;
1864484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge    }
1865484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge}
1866484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge
18675c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachstatic bt_status_t btif_gattc_set_adv_data(int client_if, bool set_scan_rsp, bool include_name,
18685c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                bool include_txpower, int min_interval, int max_interval, int appearance,
1869eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach                uint16_t manufacturer_len, char* manufacturer_data,
1870eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach                uint16_t service_data_len, char* service_data,
1871eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach                uint16_t service_uuid_len, char* service_uuid)
18725c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
18735c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    CHECK_BTGATT_INIT();
1874a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_adv_data_t adv_data;
1875eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
1876a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_adv_data_packager(client_if, set_scan_rsp, include_name,
1877a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        include_txpower, min_interval, max_interval, appearance, manufacturer_len,
1878a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        manufacturer_data, service_data_len, service_data, service_uuid_len, service_uuid,
1879a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        &adv_data);
1880eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
1881484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge    bt_status_t status = btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SET_ADV_DATA,
1882484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge                       (char*) &adv_data, sizeof(adv_data), btif_gattc_deep_copy);
1883484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge    btif_gattc_adv_data_cleanup(&adv_data);
1884a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return status;
18855c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
18865c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
1887ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_refresh( int client_if, const bt_bdaddr_t *bd_addr )
1888ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1889ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1890ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1891ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1892ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
1893ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REFRESH,
1894ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1895ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1896ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1897ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_search_service(int conn_id, bt_uuid_t *filter_uuid )
1898ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1899ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1900ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1901ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1902ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.search_all = filter_uuid ? 0 : 1;
1903ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (filter_uuid)
1904ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memcpy(&btif_cb.uuid, filter_uuid, sizeof(bt_uuid_t));
1905ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SEARCH_SERVICE,
1906ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1907ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1908ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1909ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_get_characteristic( int conn_id
19105f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach        , btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *start_char_id)
1911ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1912ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1913ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1914ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1915ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
1916ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (start_char_id)
1917ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
19185f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach        memcpy(&btif_cb.char_id, start_char_id, sizeof(btgatt_gatt_id_t));
1919ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_NEXT_CHAR,
1920ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1921ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1922ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_FIRST_CHAR,
1923ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1924ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1925ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1926ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_get_descriptor( int conn_id
19275f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach        , btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id
19285f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach        , btgatt_gatt_id_t *start_descr_id)
1929ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1930ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1931ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1932ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1933ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
19345f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t));
1935ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (start_descr_id)
1936ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
19375f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach        memcpy(&btif_cb.descr_id, start_descr_id, sizeof(btgatt_gatt_id_t));
1938ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_NEXT_CHAR_DESCR,
1939ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1940ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1941ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1942ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_FIRST_CHAR_DESCR,
1943ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1944ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1945ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1946ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_get_included_service(int conn_id, btgatt_srvc_id_t *srvc_id,
1947ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                                   btgatt_srvc_id_t *start_incl_srvc_id)
1948ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1949ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1950ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1951ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1952ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
1953ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (start_incl_srvc_id)
1954ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
1955ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memcpy(&btif_cb.incl_srvc_id, start_incl_srvc_id, sizeof(btgatt_srvc_id_t));
1956ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_NEXT_INCL_SERVICE,
1957ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1958ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1959ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_FIRST_INCL_SERVICE,
1960ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1961ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1962ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1963ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_read_char(int conn_id, btgatt_srvc_id_t* srvc_id,
19645f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                                        btgatt_gatt_id_t* char_id, int auth_req )
1965ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1966ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1967ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1968ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1969ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
1970ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
19715f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t));
1972ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_CHAR,
1973ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1974ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1975ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1976ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_read_char_descr(int conn_id, btgatt_srvc_id_t* srvc_id,
19775f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                                              btgatt_gatt_id_t* char_id,
19785f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                                              btgatt_gatt_id_t* descr_id,
1979ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                              int auth_req )
1980ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1981ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1982ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1983ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1984ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
1985ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
19865f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t));
19875f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.descr_id, descr_id, sizeof(btgatt_gatt_id_t));
1988ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_CHAR_DESCR,
1989ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1990ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1991ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1992ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_write_char(int conn_id, btgatt_srvc_id_t* srvc_id,
19935f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                                         btgatt_gatt_id_t* char_id, int write_type,
1994ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                         int len, int auth_req, char* p_value)
1995ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1996ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1997ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1998ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1999ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
2000ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.write_type = (uint8_t) write_type;
2001ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.len = len > BTGATT_MAX_ATTR_LEN ? BTGATT_MAX_ATTR_LEN : len;
2002ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
20035f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t));
2004ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(btif_cb.value, p_value, btif_cb.len);
2005ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_WRITE_CHAR,
2006ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
2007ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2008ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2009ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_write_char_descr(int conn_id, btgatt_srvc_id_t* srvc_id,
20105f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                                               btgatt_gatt_id_t* char_id,
20115f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                                               btgatt_gatt_id_t* descr_id,
2012ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                               int write_type, int len, int auth_req,
2013ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                               char* p_value)
2014ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2015ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
2016ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
2017ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
2018ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
2019ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.write_type = (uint8_t) write_type;
2020ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.len = len > BTGATT_MAX_ATTR_LEN ? BTGATT_MAX_ATTR_LEN : len;
2021ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
20225f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t));
20235f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.descr_id, descr_id, sizeof(btgatt_gatt_id_t));
2024ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(btif_cb.value, p_value, btif_cb.len);
2025ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_WRITE_CHAR_DESCR,
2026ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
2027ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2028ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2029ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_execute_write(int conn_id, int execute)
2030ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2031ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
2032ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
2033ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
2034ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.action = (uint8_t) execute;
2035ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_EXECUTE_WRITE,
2036ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
2037ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2038ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2039ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_reg_for_notification(int client_if, const bt_bdaddr_t *bd_addr,
2040ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                                   btgatt_srvc_id_t* srvc_id,
20415f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                                                   btgatt_gatt_id_t* char_id)
2042ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2043ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
2044ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
2045ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
2046ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
2047ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
20485f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t));
2049ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REG_FOR_NOTIFICATION,
2050ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
2051ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2052ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2053ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_dereg_for_notification(int client_if, const bt_bdaddr_t *bd_addr,
2054ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                                     btgatt_srvc_id_t* srvc_id,
20555f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                                                     btgatt_gatt_id_t* char_id)
2056ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2057ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
2058ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
2059ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
2060ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
2061ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
20625f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t));
2063ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_DEREG_FOR_NOTIFICATION,
2064ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
2065ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2066ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2067ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_read_remote_rssi(int client_if, const bt_bdaddr_t *bd_addr)
2068ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2069ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
2070ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
2071ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
2072ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
2073ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_RSSI,
2074ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
2075ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2076ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
20779426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbachstatic bt_status_t btif_gattc_configure_mtu(int conn_id, int mtu)
20789426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach{
20799426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    CHECK_BTGATT_INIT();
20809426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_gattc_cb_t btif_cb;
20819426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_cb.conn_id = conn_id;
20829426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_cb.len = mtu; // Re-use len field
20839426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONFIGURE_MTU,
20849426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
20859426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach}
20869426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
208752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbachstatic bt_status_t btif_gattc_conn_parameter_update(const bt_bdaddr_t *bd_addr, int min_interval,
208852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                    int max_interval, int latency, int timeout)
208952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach{
209052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    CHECK_BTGATT_INIT();
209152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_conn_param_cb_t btif_cb;
209252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.min_interval = min_interval;
209352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.max_interval = max_interval;
209452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.latency = latency;
209552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.timeout = timeout;
209652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
209752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONN_PARAM_UPDT,
209852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                                 (char*) &btif_cb, sizeof(btif_conn_param_cb_t), NULL);
209952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach}
210052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach
2101f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Callojistatic bt_status_t btif_gattc_scan_filter_param_setup(btgatt_filt_param_setup_t
2102f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji                                                      filt_param)
2103b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
2104b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    CHECK_BTGATT_INIT();
21051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
21061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
21076cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
2108f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.client_if = filt_param.client_if;
2109f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.action = filt_param.action;
2110f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.filt_index = filt_param.filt_index;
2111f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.feat_seln = filt_param.feat_seln;
2112f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.list_logic_type = filt_param.list_logic_type;
2113f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.filt_logic_type = filt_param.filt_logic_type;
2114f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.rssi_high_thres = filt_param.rssi_high_thres;
2115f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.rssi_low_thres = filt_param.rssi_low_thres;
2116f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.dely_mode = filt_param.dely_mode;
2117f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.found_timeout = filt_param.found_timeout;
2118f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.lost_timeout = filt_param.lost_timeout;
2119f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.found_timeout_cnt = filt_param.found_timeout_cnt;
2120f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.num_of_tracking_entries = filt_param.num_of_tracking_entries;
21211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_PARAM_SETUP,
21221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
2123b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
2124b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
21251a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_add_remove(int client_if, int action,
21261a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              int filt_type, int filt_index, int company_id,
21271a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              int company_id_mask, const bt_uuid_t *p_uuid,
21281a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              const bt_uuid_t *p_uuid_mask, const bt_bdaddr_t *bd_addr,
21291a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              char addr_type, int data_len, char* p_data, int mask_len,
21301a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              char* p_mask)
2131b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
2132b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    CHECK_BTGATT_INIT();
21331a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
21346cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
21351a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s, %d, %d", __FUNCTION__, action, filt_type);
21361a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
21371a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    /* If data is passed, both mask and data have to be the same length */
213816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (data_len != mask_len && NULL != p_data && NULL != p_mask)
21391a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        return BT_STATUS_PARM_INVALID;
21401a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
21411a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.client_if = client_if;
21421a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.action = action;
21431a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.filt_index = filt_index;
21441a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.filt_type = filt_type;
21451a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.conn_id = company_id;
21461a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.company_id_mask = company_id_mask ? company_id_mask : 0xFFFF;
214716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (bd_addr)
214816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        bdcpy(btif_filt_cb.bd_addr.address, bd_addr->address);
21491a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
21501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.addr_type = addr_type;
21511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.has_mask = (p_uuid_mask != NULL);
2152b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
2153b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    if (p_uuid != NULL)
21541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(&btif_filt_cb.uuid, p_uuid, sizeof(bt_uuid_t));
2155b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    if (p_uuid_mask != NULL)
21561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(&btif_filt_cb.uuid_mask, p_uuid_mask, sizeof(bt_uuid_t));
21571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if (p_data != NULL && data_len != 0)
21581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    {
21591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(btif_filt_cb.value, p_data, data_len);
21601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        btif_filt_cb.value_len = data_len;
21611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(btif_filt_cb.value_mask, p_mask, mask_len);
21621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        btif_filt_cb.value_mask_len = mask_len;
21631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    }
2164b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_CONFIG,
21651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
2166b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
2167b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
21681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_clear(int client_if, int filt_index)
2169b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
2170b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    CHECK_BTGATT_INIT();
21711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s, %d", __FUNCTION__, filt_index);
21721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
21731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
21746cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
21751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.client_if = client_if;
21761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.filt_index = filt_index;
21771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.action = BTA_DM_BLE_SCAN_COND_CLEAR;
21781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_CONFIG,
21791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
21801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
21811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
21821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_enable(int client_if, bool enable)
21831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
21841a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    int action = 0;
21851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    CHECK_BTGATT_INIT();
21861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s, %d", __FUNCTION__, enable);
21871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
21881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
21896cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
21901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.client_if = client_if;
219116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (true == enable)
21921a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        action = 1;
21931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.action = action;
21941a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_ENABLE,
21951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
2196b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
2197b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
2198935324abbe8706307297f09cf79bbcd4efb73367Satya Callojistatic bt_status_t btif_gattc_set_scan_parameters(int client_if, int scan_interval,
2199935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji                                                  int scan_window)
22007d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham{
22017d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    CHECK_BTGATT_INIT();
22027d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_gattc_cb_t btif_cb;
2203935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji    btif_cb.client_if = client_if;
22047d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_cb.scan_interval = scan_interval;
22057d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_cb.scan_window = scan_window;
22067d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SET_SCAN_PARAMS,
22077d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
22087d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham}
22097d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham
2210ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic int btif_gattc_get_device_type( const bt_bdaddr_t *bd_addr )
2211ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2212ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    int device_type = 0;
2213ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    char bd_addr_str[18] = {0};
2214ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
22158a6a89faa942aed4f176b0c98402d01c8bdd6aa6Sharvil Nanavati    bdaddr_to_string(bd_addr, bd_addr_str, sizeof(bd_addr_str));
22169d52f88bfc07556cb01ab3055f5b1242c9b467aaSharvil Nanavati    if (btif_config_get_int(bd_addr_str, "DevType", &device_type))
2217ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return device_type;
2218ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return 0;
2219ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2220ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2221a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_enable(int client_if, int min_interval, int max_interval,
22229dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                                            int adv_type, int chnl_map, int tx_power, int timeout_s)
2223a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
2224a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
2225a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btgatt_multi_adv_inst_cb adv_cb;
22266cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
2227a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.client_if = (uint8_t) client_if;
2228a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2229a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_min = min_interval;
2230a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_max = max_interval;
2231a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_type = adv_type;
2232a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.channel_map = chnl_map;
2233a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_filter_policy = 0;
2234a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.tx_power = tx_power;
22359dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach    adv_cb.timeout_s = timeout_s;
2236a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_ENABLE,
2237a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                             (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL);
2238a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
2239a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2240a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_update(int client_if, int min_interval, int max_interval,
22419dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                                            int adv_type, int chnl_map,int tx_power, int timeout_s)
2242a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
2243a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
2244a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btgatt_multi_adv_inst_cb adv_cb;
22456cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
2246a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.client_if = (uint8_t) client_if;
2247a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2248a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_min = min_interval;
2249a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_max = max_interval;
2250a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_type = adv_type;
2251a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.channel_map = chnl_map;
2252a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_filter_policy = 0;
2253a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.tx_power = tx_power;
22549dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach    adv_cb.timeout_s = timeout_s;
2255a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_UPDATE,
2256a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                         (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL);
2257a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
2258a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2259a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_setdata(int client_if, bool set_scan_rsp,
22609dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                bool include_name, bool incl_txpower, int appearance,
22619dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                int manufacturer_len, char* manufacturer_data,
22629dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                int service_data_len, char* service_data,
22639dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                int service_uuid_len, char* service_uuid)
2264a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
2265a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
2266a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2267a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_adv_data_t multi_adv_data_inst;
2268484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge    memset(&multi_adv_data_inst, 0, sizeof(multi_adv_data_inst));
2269484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge
2270484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge    const int min_interval = 0;
2271484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge    const int max_interval = 0;
2272a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2273a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_adv_data_packager(client_if, set_scan_rsp, include_name, incl_txpower,
2274a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        min_interval, max_interval, appearance, manufacturer_len, manufacturer_data,
2275a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        service_data_len, service_data, service_uuid_len, service_uuid, &multi_adv_data_inst);
2276a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2277484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge    bt_status_t status = btif_transfer_context(
2278484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge        btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_SET_DATA,
2279484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge        (char *)&multi_adv_data_inst, sizeof(multi_adv_data_inst),
2280484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge        btif_gattc_deep_copy);
2281484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge    btif_gattc_adv_data_cleanup(&multi_adv_data_inst);
2282a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return status;
2283a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
2284a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2285a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_disable(int client_if)
2286a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
2287a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
2288a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btgatt_multi_adv_inst_cb adv_cb;
22896cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
2290a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.client_if = (uint8_t) client_if;
2291a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2292a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_DISABLE,
2293a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                           (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL);
2294a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
2295a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2296c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_cfg_storage(int client_if,int batch_scan_full_max,
2297c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    int batch_scan_trunc_max, int batch_scan_notify_threshold)
2298c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2299c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2300c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
23016cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2302c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2303c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.batch_scan_full_max = batch_scan_full_max;
2304c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.batch_scan_trunc_max = batch_scan_trunc_max;
2305c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.batch_scan_notify_threshold = batch_scan_notify_threshold;
2306c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONFIG_STORAGE_PARAMS,
2307c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2308c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2309c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2310c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_enb_batch_scan(int client_if,int scan_mode, int scan_interval,
2311c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                int scan_window, int addr_type, int discard_rule)
2312c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2313c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2314c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
23156cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2316c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2317c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_mode = scan_mode;
2318c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_interval = scan_interval;
2319c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_window = scan_window;
2320c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.discard_rule = discard_rule;
2321c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.addr_type = addr_type;
2322c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ENABLE_BATCH_SCAN,
2323c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2324c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2325c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2326c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_dis_batch_scan(int client_if)
2327c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2328c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2329c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
23306cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2331c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2332c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_DISABLE_BATCH_SCAN,
2333c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2334c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2335c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2336c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_read_batch_scan_reports(int client_if, int scan_mode)
2337c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2338c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2339c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
23406cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2341c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2342c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_mode = scan_mode;
2343c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_BATCH_SCAN_REPORTS,
2344c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2345c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2346c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2347ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern bt_status_t btif_gattc_test_command_impl(int command, btgatt_test_params_t* params);
2348ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2349ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_test_command(int command, btgatt_test_params_t* params)
2350ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2351ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_gattc_test_command_impl(command, params);
2352ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2353ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2354ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2355ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaconst btgatt_client_interface_t btgattClientInterface = {
2356ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_register_app,
2357ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_unregister_app,
2358ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_scan,
2359ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_open,
2360ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_close,
23615c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_gattc_listen,
2362ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_refresh,
2363ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_search_service,
2364ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_get_included_service,
2365ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_get_characteristic,
2366ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_get_descriptor,
2367ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_read_char,
2368ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_write_char,
2369ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_read_char_descr,
2370ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_write_char_descr,
2371ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_execute_write,
2372ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_reg_for_notification,
2373ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_dereg_for_notification,
2374ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_read_remote_rssi,
23751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_gattc_scan_filter_param_setup,
23761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_gattc_scan_filter_add_remove,
2377b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    btif_gattc_scan_filter_clear,
23781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_gattc_scan_filter_enable,
2379ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_get_device_type,
23805c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_gattc_set_adv_data,
23819426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_gattc_configure_mtu,
238252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_gattc_conn_parameter_update,
23837d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_gattc_set_scan_parameters,
2384a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_enable,
2385a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_update,
2386a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_setdata,
2387a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_disable,
2388c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_cfg_storage,
2389c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_enb_batch_scan,
2390c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_dis_batch_scan,
2391c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_read_batch_scan_reports,
2392ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_test_command
2393ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta};
2394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2395ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
2396