btif_gatt_client.cc revision 6ed1548be2295fc1bec14f10cd0fade4f63daa6a
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 *  Filename:      btif_gatt_client.c
22ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
23ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  Description:   GATT client implementation
24ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
25ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *******************************************************************************/
26ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2749120dc867c7818511b5afec461dfc97d17eef58Marie Janssen#define LOG_TAG "bt_btif_gattc"
2849120dc867c7818511b5afec461dfc97d17eef58Marie Janssen
2949a86709488e5cfd5e23759da18bf9613e15b04dMarie Janssen#include <errno.h>
30ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <hardware/bluetooth.h>
31ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdio.h>
32ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdlib.h>
33ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <string.h>
346ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji#include "device/include/controller.h"
356ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji
36ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
3795b74f252f534ec757aab1fc08e086e02b2cfe8dSharvil Nanavati#include "btcore/include/bdaddr.h"
38ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_common.h"
39ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_util.h"
40ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
41ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (defined(BLE_INCLUDED) && (BLE_INCLUDED == TRUE))
42ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
436975b4d711142b885af479721cada448952c6b41Andre Eisenbach#include <hardware/bt_gatt.h>
44db554581079863974af8e1289646f5deea6fc044Marie Janssen
45ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_api.h"
46ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_gatt_api.h"
47ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_config.h"
48db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_dm.h"
49ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_gatt.h"
50db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_gatt_multi_adv_util.h"
51ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_gatt_util.h"
52ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_storage.h"
53db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_storage.h"
5444802768c447ab480d4227b3a852a97d923b816dSharvil Nanavati#include "osi/include/log.h"
55b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach#include "vendor_api.h"
56b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
57ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
58ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Constants & Macros
59ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
60ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
61ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define CHECK_BTGATT_INIT() if (bt_gatt_callbacks == NULL)\
62ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {\
63db554581079863974af8e1289646f5deea6fc044Marie Janssen        LOG_WARN(LOG_TAG, "%s: BTGATT not initialized", __FUNCTION__);\
64ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return BT_STATUS_NOT_READY;\
65ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    } else {\
66db554581079863974af8e1289646f5deea6fc044Marie Janssen        LOG_VERBOSE(LOG_TAG, "%s", __FUNCTION__);\
67ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
68ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
69a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BLE_RESOLVE_ADDR_MSB                 0x40   /* bit7, bit6 is 01 to be resolvable random */
70a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BLE_RESOLVE_ADDR_MASK                0xc0   /* bit 6, and bit7 */
71a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BTM_BLE_IS_RESOLVE_BDA(x)           ((x[0] & BLE_RESOLVE_ADDR_MASK) == BLE_RESOLVE_ADDR_MSB)
72ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
73ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef enum {
74ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_REGISTER_APP = 1000,
75ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_UNREGISTER_APP,
76ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_SCAN_START,
77ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_SCAN_STOP,
78ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_OPEN,
79ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_CLOSE,
80ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_SEARCH_SERVICE,
81ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_GET_FIRST_CHAR,
82ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_GET_NEXT_CHAR,
83ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_GET_FIRST_CHAR_DESCR,
84ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_GET_NEXT_CHAR_DESCR,
85ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_GET_FIRST_INCL_SERVICE,
86ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_GET_NEXT_INCL_SERVICE,
87ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_READ_CHAR,
88ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_READ_CHAR_DESCR,
89ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_WRITE_CHAR,
90ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_WRITE_CHAR_DESCR,
91ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_EXECUTE_WRITE,
92ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_REG_FOR_NOTIFICATION,
93ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_DEREG_FOR_NOTIFICATION,
94ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_REFRESH,
955c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    BTIF_GATTC_READ_RSSI,
965c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    BTIF_GATTC_LISTEN,
979426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    BTIF_GATTC_SET_ADV_DATA,
989426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    BTIF_GATTC_CONFIGURE_MTU,
9952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    BTIF_GATTC_CONN_PARAM_UPDT,
1001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_GATTC_SCAN_FILTER_PARAM_SETUP,
101b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    BTIF_GATTC_SCAN_FILTER_CONFIG,
1027d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    BTIF_GATTC_SCAN_FILTER_CLEAR,
1031a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_GATTC_SCAN_FILTER_ENABLE,
1047d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    BTIF_GATTC_SET_SCAN_PARAMS,
105a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    BTIF_GATTC_ADV_INSTANCE_ENABLE,
106a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    BTIF_GATTC_ADV_INSTANCE_UPDATE,
107a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    BTIF_GATTC_ADV_INSTANCE_SET_DATA,
108c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_ADV_INSTANCE_DISABLE,
109c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_CONFIG_STORAGE_PARAMS,
110c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_ENABLE_BATCH_SCAN,
111c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_READ_BATCH_SCAN_REPORTS,
112533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    BTIF_GATTC_DISABLE_BATCH_SCAN,
113533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    BTIF_GATTC_GET_GATT_DB
114ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} btif_gattc_event_t;
115ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
116ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATT_MAX_OBSERVED_DEV 40
117ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
118ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATT_OBSERVE_EVT   0x1000
119ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATTC_RSSI_EVT     0x1001
120979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach#define BTIF_GATTC_SCAN_FILTER_EVT  0x1003
121979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach#define BTIF_GATTC_SCAN_PARAM_EVT   0x1004
122ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
123c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji#define ENABLE_BATCH_SCAN 1
124c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji#define DISABLE_BATCH_SCAN 0
125c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
126ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
127ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Local type definitions
128ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
129c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojitypedef struct
130c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
131c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t report_format;
132c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint16_t data_len;
133c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t num_records;
134c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t *p_rep_data;
135c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} btgatt_batch_reports;
136c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
137c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojitypedef struct
138c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
139c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  status;
140c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  client_if;
1411acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    uint8_t  action;
1421acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    uint8_t  avbl_space;
1431acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    uint8_t  lost_timeout;
144f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    tBLE_ADDR_TYPE addr_type;
145c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  batch_scan_full_max;
146c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  batch_scan_trunc_max;
147c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  batch_scan_notify_threshold;
148979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    tBTA_BLE_BATCH_SCAN_MODE scan_mode;
149c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint32_t scan_interval;
150c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint32_t scan_window;
151c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    tBTA_BLE_DISCARD_RULE discard_rule;
152f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btgatt_batch_reports  read_reports;
153c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} btgatt_batch_track_cb_t;
154ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojitypedef tBTA_DM_BLE_PF_FILT_PARAMS btgatt_adv_filt_param_t;
1561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
1571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojitypedef struct
1581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
1591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     client_if;
1601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     action;
1611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_DM_BLE_PF_COND_TYPE filt_type;
1621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    bt_bdaddr_t bd_addr;
1631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value[BTGATT_MAX_ATTR_LEN];
1641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value_len;
1651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     filt_index;
1661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint16_t    conn_id;
1671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint16_t    company_id_mask;
1681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    bt_uuid_t   uuid;
1691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    bt_uuid_t   uuid_mask;
1701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value_mask[BTGATT_MAX_ATTR_LEN];
1711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value_mask_len;
1721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     has_mask;
1731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     addr_type;
1741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     status;
1751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_DM_BLE_PF_AVBL_SPACE avbl_space;
1761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_DM_BLE_SCAN_COND_OP cond_op;
1771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filt_param_t adv_filt_param;
1781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji} btgatt_adv_filter_cb_t;
1791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
180ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct
181ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
182ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     value[BTGATT_MAX_ATTR_LEN];
183a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    uint8_t     inst_id;
184ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_bdaddr_t bd_addr;
185ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btgatt_srvc_id_t srvc_id;
186ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btgatt_srvc_id_t incl_srvc_id;
1875f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    btgatt_gatt_id_t char_id;
1885f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    btgatt_gatt_id_t descr_id;
189ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_uuid_t   uuid;
190b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    bt_uuid_t   uuid_mask;
191ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint16_t    conn_id;
192ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint16_t    len;
193b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    uint16_t    mask;
194979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    uint32_t    scan_interval;
195979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    uint32_t    scan_window;
196ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     client_if;
197ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     action;
198ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     is_direct;
199ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     search_all;
200ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     auth_req;
201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     write_type;
202ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     status;
203ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     addr_type;
2045c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    uint8_t     start;
205b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    uint8_t     has_mask;
206ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    int8_t      rssi;
2077fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    uint8_t     flag;
208ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBT_DEVICE_TYPE device_type;
2097fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    btgatt_transport_t transport;
210ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} __attribute__((packed)) btif_gattc_cb_t;
211ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
212ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct
213ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
214ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_bdaddr_t bd_addr;
21552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    uint16_t    min_interval;
21652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    uint16_t    max_interval;
21752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    uint16_t    timeout;
21852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    uint16_t    latency;
21952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach} btif_conn_param_cb_t;
22052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach
22152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbachtypedef struct
22252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach{
22352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    bt_bdaddr_t bd_addr;
224ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BOOLEAN     in_use;
225ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}__attribute__((packed)) btif_gattc_dev_t;
226ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
227ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct
228ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
229ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_dev_t remote_dev[BTIF_GATT_MAX_OBSERVED_DEV];
2307fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    uint8_t            addr_type;
2317fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    uint8_t            next_storage_idx;
232ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}__attribute__((packed)) btif_gattc_dev_cb_t;
233ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
234ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
235ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Static variables
236ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
237ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
238ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern const btgatt_callbacks_t *bt_gatt_callbacks;
239ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_gattc_dev_cb_t  btif_gattc_dev_cb;
240ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_gattc_dev_cb_t  *p_dev_cb = &btif_gattc_dev_cb;
241ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic uint8_t rssi_request_client_if;
242ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
243ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
244ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Static functions
245ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
246ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2479dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbachstatic bt_status_t btif_gattc_multi_adv_disable(int client_if);
24878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovstatic void btif_multi_adv_stop_cb(void *data)
2499dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach{
25078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    int client_if = PTR_TO_INT(data);
2519dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach    btif_gattc_multi_adv_disable(client_if); // Does context switch
2529dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach}
2539dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach
254979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbachstatic btgattc_error_t btif_gattc_translate_btm_status(tBTM_STATUS status)
255979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach{
256979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    switch(status)
257979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    {
258979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_SUCCESS:
259979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_SUCCESS_NO_SECURITY:
260979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_COMMAND_SUCCESS;
261979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
262979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_CMD_STARTED:
263979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_COMMAND_STARTED;
264979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
265979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_BUSY:
266979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_COMMAND_BUSY;
267979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
268979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_CMD_STORED:
269979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_COMMAND_STORED;
270979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
271979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_NO_RESOURCES:
272979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_NO_RESOURCES;
273979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
274979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_MODE_UNSUPPORTED:
275979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_WRONG_MODE:
276979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_MODE4_LEVEL4_NOT_SUPPORTED:
277979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_MODE_UNSUPPORTED;
278979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
279979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_ILLEGAL_VALUE:
280979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_SCO_BAD_LENGTH:
281979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_ILLEGAL_VALUE;
282979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
283979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_UNKNOWN_ADDR:
284979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_UNKNOWN_ADDR;
285979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
286979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_DEVICE_TIMEOUT:
287979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_DEVICE_TIMEOUT;
288979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
289979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_FAILED_ON_SECURITY:
290979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_REPEATED_ATTEMPTS:
291979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_NOT_AUTHORIZED:
292979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_SECURITY_ERROR;
293979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
294979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_DEV_RESET:
295979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_ILLEGAL_ACTION:
296979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_INCORRECT_STATE;
297979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
298979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_BAD_VALUE_RET:
299979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_INVALID_CONTROLLER_OUTPUT;
300979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
301979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_DELAY_CHECK:
302979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_DELAYED_ENCRYPTION_CHECK;
303979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
304979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_ERR_PROCESSING:
305979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       default:
306979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach          return BT_GATTC_ERR_PROCESSING;
307979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    }
308979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach}
309979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
3108444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbachstatic void btapp_gattc_req_data(UINT16 event, char *p_dest, char *p_src)
3118444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach{
31252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    tBTA_GATTC *p_dest_data = (tBTA_GATTC*) p_dest;
31352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    tBTA_GATTC *p_src_data = (tBTA_GATTC*) p_src;
3148444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3158444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    if (!p_src_data || !p_dest_data)
3168444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach       return;
3178444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3188444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    // Copy basic structure first
3193f06e14fddc0e674347ae28ea4a25218d4ce1d2aPavlin Radoslavov    maybe_non_aligned_memcpy(p_dest_data, p_src_data, sizeof(*p_src_data));
3208444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3218444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    // Allocate buffer for request data if necessary
3228444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    switch (event)
3238444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    {
3248444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_CHAR_EVT:
3258444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_DESCR_EVT:
3268444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
327e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach            if (p_src_data->read.p_value != NULL)
3288444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            {
329cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov                p_dest_data->read.p_value = osi_malloc(sizeof(tBTA_GATT_READ_VAL));
3308444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
331e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                if (p_dest_data->read.p_value != NULL)
3328444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                {
333e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                    memcpy(p_dest_data->read.p_value, p_src_data->read.p_value,
334e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                        sizeof(tBTA_GATT_READ_VAL));
335e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach
336e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                    // Allocate buffer for att value if necessary
3376975b4d711142b885af479721cada448952c6b41Andre Eisenbach                    if (get_uuid16(&p_src_data->read.descr_type.uuid) != GATT_UUID_CHAR_AGG_FORMAT
338f052217962d0c06392eb79687820c9469cd6a75aAndre Eisenbach                      && p_src_data->read.p_value->unformat.len > 0
339e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                      && p_src_data->read.p_value->unformat.p_value != NULL)
3408444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                    {
341e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                        p_dest_data->read.p_value->unformat.p_value =
342cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov                                       osi_malloc(p_src_data->read.p_value->unformat.len);
343e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                        if (p_dest_data->read.p_value->unformat.p_value != NULL)
344e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                        {
345e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                            memcpy(p_dest_data->read.p_value->unformat.p_value,
346e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                                   p_src_data->read.p_value->unformat.p_value,
347e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                                   p_src_data->read.p_value->unformat.len);
348e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                        }
3498444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                    }
3508444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                }
3518444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            }
352e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach            else
353e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach            {
354e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_WARNING("%s :Src read.p_value ptr is NULL for event  0x%x",
355e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                                    __FUNCTION__, event);
356e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                p_dest_data->read.p_value = NULL;
357e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach
358e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach            }
3598444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3608444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3618444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        default:
3628444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3638444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    }
3648444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach}
3658444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3668444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbachstatic void btapp_gattc_free_req_data(UINT16 event, tBTA_GATTC *p_data)
3678444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach{
3688444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    switch (event)
3698444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    {
3708444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_CHAR_EVT:
3718444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_DESCR_EVT:
3728444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            if (p_data != NULL && p_data->read.p_value != NULL)
3738444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            {
37420524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavov                if ((get_uuid16(&p_data->read.descr_type.uuid) !=
37520524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavov                     GATT_UUID_CHAR_AGG_FORMAT) &&
37620524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavov                    (p_data->read.p_value->unformat.len > 0)) {
377cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov                    osi_free_and_reset((void **)&p_data->read.p_value->unformat.p_value);
3788444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                }
379cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov                osi_free_and_reset((void **)&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
462ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_upstreams_evt(uint16_t event, char* p_param)
463ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
464db554581079863974af8e1289646f5deea6fc044Marie Janssen    LOG_VERBOSE(LOG_TAG, "%s: Event %d", __FUNCTION__, event);
465ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
46652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    tBTA_GATTC *p_data = (tBTA_GATTC*) p_param;
467ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    switch (event)
468ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
469ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_REG_EVT:
470ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
471ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bt_uuid_t app_uuid;
472ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_to_btif_uuid(&app_uuid, &p_data->reg_oper.app_uuid);
473ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->register_client_cb
474ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->reg_oper.status
475ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->reg_oper.client_if
476ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , &app_uuid
477ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            );
478ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
479ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
480ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
481ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_DEREG_EVT:
482ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
483ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
484ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_READ_CHAR_EVT:
485ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
486ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_read_params_t data;
487ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            set_read_value(&data, &p_data->read);
488ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
489ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->read_characteristic_cb
490ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->read.conn_id, p_data->read.status, &data);
491ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
492ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
493ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
494ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_WRITE_CHAR_EVT:
495ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_PREP_WRITE_EVT:
496ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
497ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_write_params_t data;
498ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_to_btif_srvc_id(&data.srvc_id, &p_data->write.srvc_id);
4995f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            bta_to_btif_gatt_id(&data.char_id, &p_data->write.char_id);
500ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
501ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->write_characteristic_cb
502ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->write.conn_id, p_data->write.status, &data
503ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            );
504ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
505ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
506ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
507ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_EXEC_EVT:
508ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
509ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->execute_write_cb
510ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->exec_cmpl.conn_id, p_data->exec_cmpl.status
511ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            );
512ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
513ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
514ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
515ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_SEARCH_CMPL_EVT:
516ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
517ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->search_complete_cb
518ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->search_cmpl.conn_id, p_data->search_cmpl.status);
519ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
520ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
521ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
522ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_SEARCH_RES_EVT:
523ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
524ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_srvc_id_t data;
525ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_to_btif_srvc_id(&data, &(p_data->srvc_res.service_uuid));
526ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->search_result_cb
527ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->srvc_res.conn_id, &data);
528ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
529ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
530ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
531ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_READ_DESCR_EVT:
532ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
533ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_read_params_t data;
534ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            set_read_value(&data, &p_data->read);
535ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
536ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->read_descriptor_cb
537ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->read.conn_id, p_data->read.status, &data);
538ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
539ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
540ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
541ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_WRITE_DESCR_EVT:
542ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
543ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_write_params_t data;
544ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_to_btif_srvc_id(&data.srvc_id, &p_data->write.srvc_id);
5455f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            bta_to_btif_gatt_id(&data.char_id, &p_data->write.char_id);
5465f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            bta_to_btif_gatt_id(&data.descr_id, &p_data->write.descr_type);
547ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
548ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->write_descriptor_cb
549ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->write.conn_id, p_data->write.status, &data);
550ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
551ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
552ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
553ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_NOTIF_EVT:
554ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
555ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_notify_params_t data;
556ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
557ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(data.bda.address, p_data->notify.bda);
558ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
559ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_to_btif_srvc_id(&data.srvc_id, &p_data->notify.char_id.srvc_id);
5605f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            bta_to_btif_gatt_id(&data.char_id, &p_data->notify.char_id.char_id);
561ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            memcpy(data.value, p_data->notify.value, p_data->notify.len);
562ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
563ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            data.is_notify = p_data->notify.is_notify;
564ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            data.len = p_data->notify.len;
565ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
566ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->notify_cb
567ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->notify.conn_id, &data);
568ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
569ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_data->notify.is_notify == FALSE)
570ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
571ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_SendIndConfirm(p_data->notify.conn_id,
572ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                         &p_data->notify.char_id);
573ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
574ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
575ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
576ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
577ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_OPEN_EVT:
578ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
579ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bt_bdaddr_t bda;
580ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(bda.address, p_data->open.remote_bda);
581ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
582ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->open_cb, p_data->open.conn_id
583ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->open.status, p_data->open.client_if, &bda);
5846975b4d711142b885af479721cada448952c6b41Andre Eisenbach
5859426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            if (GATT_DEF_BLE_MTU_SIZE != p_data->open.mtu && p_data->open.mtu)
5869426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            {
5879426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, p_data->open.conn_id
5889426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                    , p_data->open.status , p_data->open.mtu);
5899426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            }
5909426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
5916975b4d711142b885af479721cada448952c6b41Andre Eisenbach            if (p_data->open.status == BTA_GATT_OK)
5924f6c9b4f68d152baf7aa029cbe9b570994584101Nitin Arora                btif_gatt_check_encrypted_link(p_data->open.remote_bda, p_data->open.transport);
593ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
594ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
595ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
596ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_CLOSE_EVT:
597ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
598ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bt_bdaddr_t bda;
599ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(bda.address, p_data->close.remote_bda);
600ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->close_cb, p_data->close.conn_id
601ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->status, p_data->close.client_if, &bda);
602ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
603ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
604ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
605ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_ACL_EVT:
606db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_DEBUG(LOG_TAG, "BTA_GATTC_ACL_EVT: status = %d", p_data->status);
607ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            /* Ignore for now */
608ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
609ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
610ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_CANCEL_OPEN_EVT:
611ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
612ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
613ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATT_OBSERVE_EVT:
614ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
61552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
616aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            uint8_t remote_name_len;
617aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            uint8_t *p_eir_remote_name=NULL;
6187fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bt_device_type_t dev_type;
6197fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bt_property_t properties;
620aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi
621a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson            p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
622aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                                         BTM_EIR_COMPLETE_LOCAL_NAME_TYPE, &remote_name_len);
623aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi
62416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (p_eir_remote_name == NULL)
625ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
626a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson                p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
627aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                                BT_EIR_SHORTENED_LOCAL_NAME_TYPE, &remote_name_len);
628aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            }
629aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi
630aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            if ((p_btif_cb->addr_type != BLE_ADDR_RANDOM) || (p_eir_remote_name))
631aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            {
632aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi               if (!btif_gattc_find_bdaddr(p_btif_cb->bd_addr.address))
633aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi               {
634aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                  btif_gattc_add_remote_bdaddr(p_btif_cb->bd_addr.address, p_btif_cb->addr_type);
635aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                  btif_gattc_update_properties(p_btif_cb);
636aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi               }
637ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
6387fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
6397fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             dev_type =  p_btif_cb->device_type;
6407fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             BTIF_STORAGE_FILL_PROPERTY(&properties,
6417fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                        BT_PROPERTY_TYPE_OF_DEVICE, sizeof(dev_type), &dev_type);
6427fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             btif_storage_set_remote_device_property(&(p_btif_cb->bd_addr), &properties);
6437fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
6447b9fe757f5df8c529c506b1c41403f2f3f204f9eAndre Eisenbach            btif_storage_set_remote_addr_type( &p_btif_cb->bd_addr, p_btif_cb->addr_type);
6457b9fe757f5df8c529c506b1c41403f2f3f204f9eAndre Eisenbach
646ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->scan_result_cb,
647ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                      &p_btif_cb->bd_addr, p_btif_cb->rssi, p_btif_cb->value);
648ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
649ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
650ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
651ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_RSSI_EVT:
652ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
65352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
654ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->read_remote_rssi_cb, p_btif_cb->client_if,
655ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                      &p_btif_cb->bd_addr, p_btif_cb->rssi, p_btif_cb->status);
656ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
657ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
658ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
6595c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        case BTA_GATTC_LISTEN_EVT:
6605c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        {
6615c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->listen_cb
6625c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                , p_data->reg_oper.status
6635c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                , p_data->reg_oper.client_if
6645c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            );
6655c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            break;
6665c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        }
6679426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
6689426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        case BTA_GATTC_CFG_MTU_EVT:
6699426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        {
6709426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, p_data->cfg_mtu.conn_id
6719426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                , p_data->cfg_mtu.status , p_data->cfg_mtu.mtu);
6729426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            break;
6739426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        }
67417b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach
675a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_ENB_EVT:
676a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
67752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
67816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (0xFF != p_btif_cb->inst_id)
67916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                btif_multi_adv_add_instid_map(p_btif_cb->client_if, p_btif_cb->inst_id, false);
680a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_enable_cb
681a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    , p_btif_cb->client_if
682a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    , p_btif_cb->status
683a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                );
6849dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach            btif_multi_adv_timer_ctrl(p_btif_cb->client_if,
68578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                      (p_btif_cb->status == BTA_GATT_OK) ?
68678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                      btif_multi_adv_stop_cb : NULL);
687a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
688a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
689a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
690a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_UPD_EVT:
691a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
69252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
693a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_update_cb
694a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->client_if
695a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->status
696a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            );
6979dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach            btif_multi_adv_timer_ctrl(p_btif_cb->client_if,
69878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                      (p_btif_cb->status == BTA_GATT_OK) ?
69978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                      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            {
784cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov                p_rep_data = osi_malloc(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);
791cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov            osi_free(p_rep_data);
792c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
793c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
794c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
7951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTA_GATTC_SCAN_FLT_CFG_EVT:
7961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
79752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_btif_cb = (btgatt_adv_filter_cb_t*) p_param;
7981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->scan_filter_cfg_cb, p_btif_cb->action,
7991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                      p_btif_cb->client_if, p_btif_cb->status, p_btif_cb->cond_op,
8001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                      p_btif_cb->avbl_space);
8011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
8021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
8031a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
8041a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTA_GATTC_SCAN_FLT_PARAM_EVT:
8051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
8061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            btgatt_adv_filter_cb_t *p_data = (btgatt_adv_filter_cb_t*) p_param;
8071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTIF_TRACE_DEBUG("BTA_GATTC_SCAN_FLT_PARAM_EVT: %d, %d, %d, %d",p_data->client_if,
8081a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                p_data->action, p_data->avbl_space, p_data->status);
8091acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->scan_filter_param_cb
8101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    , p_data->action, p_data->client_if, p_data->status
8111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    , p_data->avbl_space);
8121a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
8131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
8141a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
8151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTA_GATTC_SCAN_FLT_STATUS_EVT:
8161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
8171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            btgatt_adv_filter_cb_t *p_data = (btgatt_adv_filter_cb_t*) p_param;
8181a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTIF_TRACE_DEBUG("BTA_GATTC_SCAN_FLT_STATUS_EVT: %d, %d, %d",p_data->client_if,
8191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                p_data->action, p_data->status);
8201acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->scan_filter_status_cb
8211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    , p_data->action, p_data->client_if, p_data->status);
8221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
8231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
8241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
8251acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji        case BTA_GATTC_ADV_VSC_EVT:
8261acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji        {
827f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            btgatt_track_adv_info_t *p_data = (btgatt_track_adv_info_t*)p_param;
828f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            btgatt_track_adv_info_t adv_info_data;
829f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji
830f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            memset(&adv_info_data, 0, sizeof(btgatt_track_adv_info_t));
831f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji
832f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            btif_gatt_move_track_adv_data(&adv_info_data, p_data);
833f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            HAL_CBACK(bt_gatt_callbacks, client->track_adv_event_cb, &adv_info_data);
8341acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji            break;
8351acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji        }
8361acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji
837979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        case BTIF_GATTC_SCAN_PARAM_EVT:
838979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        {
839979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t *)p_param;
840979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->scan_parameter_setup_completed_cb,
841979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                      p_btif_cb->client_if, btif_gattc_translate_btm_status(p_btif_cb->status));
842979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            break;
843979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        }
844979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
845ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        default:
846db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_ERROR(LOG_TAG, "%s: Unhandled event (%d)!", __FUNCTION__, event);
847ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
848ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
8498444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
8508444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    btapp_gattc_free_req_data(event, p_data);
851ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
852ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
8536975b4d711142b885af479721cada448952c6b41Andre Eisenbachstatic void bta_gattc_cback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data)
854ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
855ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_status_t status = btif_transfer_context(btif_gattc_upstreams_evt,
85652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                    (uint16_t) event, (void*) p_data, sizeof(tBTA_GATTC), btapp_gattc_req_data);
857ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    ASSERTC(status == BT_STATUS_SUCCESS, "Context transfer failed!", status);
858ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
859ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
860a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic void bta_gattc_multi_adv_cback(tBTA_BLE_MULTI_ADV_EVT event, UINT8 inst_id,
861a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                                    void *p_ref, tBTA_STATUS call_status)
862a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
863a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_cb_t btif_cb;
864a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    tBTA_GATTC_EVT upevt;
865a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    uint8_t client_if = 0;
866a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
86716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (NULL == p_ref)
868a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    {
86916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        BTIF_TRACE_WARNING("%s Invalid p_ref received",__FUNCTION__);
87016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
87116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    else
87216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
87316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        client_if = *(UINT8 *) p_ref;
874a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    }
875a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
876e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s -Inst ID %d, Status:%x, client_if:%d",__FUNCTION__,inst_id, call_status,
877a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                       client_if);
878a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.status = call_status;
879a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.client_if = client_if;
880a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.inst_id = inst_id;
881a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
882a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    switch(event)
883a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    {
884a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_ENB_EVT:
885a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_ENB_EVT;
886a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
887a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
888a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_DISABLE_EVT:
889a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_DIS_EVT;
890a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
891a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
892a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_PARAM_EVT:
893a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_UPD_EVT;
894a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
895a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
896a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_DATA_EVT:
897a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_DATA_EVT;
898a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
899a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
900a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        default:
901a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            return;
902a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    }
903a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
904a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    bt_status_t status = btif_transfer_context(btif_gattc_upstreams_evt, (uint16_t) upevt,
905a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
906a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    ASSERTC(status == BT_STATUS_SUCCESS, "Context transfer failed!", status);
907a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
908a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
909a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic void bta_gattc_set_adv_data_cback(tBTA_STATUS call_status)
910a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
911a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    UNUSED(call_status);
912a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_cb_t btif_cb;
913a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.status = call_status;
914a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.action = 0;
915a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_ADV_DATA_EVT,
916a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                          (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
917a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
918a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
919c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_setup_cb (tBTA_BLE_BATCH_SCAN_EVT evt,
920c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                            tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status)
921c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
922c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    UINT8 upevt = 0;
923c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t btif_scan_track_cb;
924c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
925c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.status = status;
926c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.client_if = ref_value;
9271a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("bta_batch_scan_setup_cb-Status:%x, client_if:%d, evt=%d",
928c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            status, ref_value, evt);
929c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
930c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    switch(evt)
931c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    {
932c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_ENB_EVT:
933c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
934c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_ENB_EVT;
935c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
936c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
937c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
938c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_DIS_EVT:
939c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
940c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_DIS_EVT;
941c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
942c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
943c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
944c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_CFG_STRG_EVT:
945c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
946c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_CFG_EVT;
947c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
948c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
949c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
950c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_DATA_EVT:
951c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
952c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_RD_EVT;
953c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
954c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
955c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
956c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_THRES_EVT:
957c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
958c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_THR_EVT;
959c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
960c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
961c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
962c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        default:
963c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            return;
964c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    }
965c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
966c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, upevt,(char*) &btif_scan_track_cb,
967c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                          sizeof(btgatt_batch_track_cb_t), NULL);
968c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
969c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
970c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
971c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_threshold_cb(tBTA_DM_BLE_REF_VALUE ref_value)
972c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
973c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t btif_scan_track_cb;
974c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.status = 0;
975c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.client_if = ref_value;
976c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
9771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s - client_if:%d",__FUNCTION__, ref_value);
978c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
979c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_BTH_SCAN_THR_EVT,
980c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                          (char*) &btif_scan_track_cb, sizeof(btif_gattc_cb_t), NULL);
981c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
982c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
983c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_reports_cb(tBTA_DM_BLE_REF_VALUE ref_value, UINT8 report_format,
984c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                            UINT8 num_records, UINT16 data_len,
985c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                            UINT8* p_rep_data, tBTA_STATUS status)
986c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
987c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t btif_scan_track_cb;
988adb7bb50469db992969295792a7ba3b73f9e24b3Satya Calloji    memset(&btif_scan_track_cb, 0, sizeof(btgatt_batch_track_cb_t));
9891a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s - client_if:%d, %d, %d, %d",__FUNCTION__, ref_value, status, num_records,
990c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                    data_len);
991c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
992c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.status = status;
993c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
994c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.client_if = ref_value;
995c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.read_reports.report_format = report_format;
996c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.read_reports.data_len = data_len;
997c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.read_reports.num_records = num_records;
998c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
99916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (data_len > 0)
1000c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    {
1001cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov        btif_scan_track_cb.read_reports.p_rep_data = osi_malloc(data_len);
1002c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        memcpy(btif_scan_track_cb.read_reports.p_rep_data, p_rep_data, data_len);
1003cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov        osi_free(p_rep_data);
1004c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    }
1005c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1006c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_BTH_SCAN_RD_EVT,
1007c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        (char*) &btif_scan_track_cb, sizeof(btgatt_batch_track_cb_t), NULL);
1008c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
100916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (data_len > 0)
1010cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov        osi_free_and_reset((void **)&btif_scan_track_cb.read_reports.p_rep_data);
1011c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
1012c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
10136975b4d711142b885af479721cada448952c6b41Andre Eisenbachstatic void bta_scan_results_cb (tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH *p_data)
1014ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1015ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1016ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t len;
1017ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1018ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    switch (event)
1019ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
1020ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_DM_INQ_RES_EVT:
1021ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
1022ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(btif_cb.bd_addr.address, p_data->inq_res.bd_addr);
1023ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_cb.device_type = p_data->inq_res.device_type;
1024ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_cb.rssi = p_data->inq_res.rssi;
1025ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_cb.addr_type = p_data->inq_res.ble_addr_type;
10267fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            btif_cb.flag = p_data->inq_res.flag;
1027ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_data->inq_res.p_eir)
1028ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
1029ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                memcpy(btif_cb.value, p_data->inq_res.p_eir, 62);
1030a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson                if (BTM_CheckEirData(p_data->inq_res.p_eir, BTM_EIR_COMPLETE_LOCAL_NAME_TYPE,
1031ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                      &len))
1032ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                {
1033ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    p_data->inq_res.remt_name_not_required  = TRUE;
1034ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                }
1035ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
1036ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1037ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        break;
1038ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1039ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_DM_INQ_CMPL_EVT:
1040ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
1041e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("%s  BLE observe complete. Num Resp %d",
1042ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                              __FUNCTION__,p_data->inq_cmpl.num_resps);
1043ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            return;
1044ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1045ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1046ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        default:
1047e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_WARNING("%s : Unknown event 0x%x", __FUNCTION__, event);
1048ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return;
1049ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1050ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATT_OBSERVE_EVT,
1051ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1052ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1053ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1054f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Callojistatic void bta_track_adv_event_cb(tBTA_DM_BLE_TRACK_ADV_DATA *p_track_adv_data)
10551acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji{
1056f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btgatt_track_adv_info_t btif_scan_track_cb;
1057f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    BTIF_TRACE_DEBUG("%s",__FUNCTION__);
1058f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_gatt_move_track_adv_data(&btif_scan_track_cb,
1059f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji                (btgatt_track_adv_info_t*)p_track_adv_data);
1060f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji
10611acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_ADV_VSC_EVT,
1062f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji                          (char*) &btif_scan_track_cb, sizeof(btgatt_track_adv_info_t), NULL);
10631acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji}
10641acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji
1065ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btm_read_rssi_cb (tBTM_RSSI_RESULTS *p_result)
1066ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1067ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1068ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1069ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, p_result->rem_bda);
1070ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.rssi = p_result->rssi;
1071ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.status = p_result->status;
1072ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = rssi_request_client_if;
1073ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATTC_RSSI_EVT,
1074ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1075ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1076ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1077979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbachstatic void bta_scan_param_setup_cb(tGATT_IF client_if, tBTM_STATUS status)
1078979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach{
1079979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_gattc_cb_t btif_cb;
1080979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
1081979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_cb.status = status;
1082979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_cb.client_if = client_if;
1083979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATTC_SCAN_PARAM_EVT,
1084979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                          (char *)&btif_cb, sizeof(btif_gattc_cb_t), NULL);
1085979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach}
1086979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
10871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_cfg_cb(tBTA_DM_BLE_PF_ACTION action, tBTA_DM_BLE_SCAN_COND_OP cfg_op,
10881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, tBTA_STATUS status,
10891a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                tBTA_DM_BLE_REF_VALUE ref_value)
1090b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
10911a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_cb;
1092b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    btif_cb.status = status;
10931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.action = action;
10941a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.cond_op = cfg_op;
10951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.avbl_space = avbl_space;
10961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.client_if = ref_value;
10971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_CFG_EVT,
10981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                          (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
10991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
11001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
11011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_param_setup_cb(UINT8 action_type,
11021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                        tBTA_DM_BLE_PF_AVBL_SPACE avbl_space,
11031a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                        tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status)
11041a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
11051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_cb;
11061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
11071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.status = status;
11081a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.action = action_type;
11091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.client_if = ref_value;
11101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.avbl_space = avbl_space;
11111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_PARAM_EVT,
11121a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                          (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
11131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
11141a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
11151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_status_cb(UINT8 action, tBTA_STATUS status,
11161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                    tBTA_DM_BLE_REF_VALUE ref_value)
11171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
11181a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_cb;
11191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
11201a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.status = status;
11211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.action = action;
11221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.client_if = ref_value;
11231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_STATUS_EVT,
11241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                          (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
1125b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
1126ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
11270d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidgestatic void btgattc_free_event_data(UINT16 event, char *event_data)
11280d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge{
11290d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    switch (event)
11300d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    {
11310d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        case BTIF_GATTC_ADV_INSTANCE_SET_DATA:
11320d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        case BTIF_GATTC_SET_ADV_DATA:
11330d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        {
113420524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavov            btif_adv_data_t *adv_data = (btif_adv_data_t *)event_data;
11350d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            btif_gattc_adv_data_cleanup(adv_data);
11360d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            break;
11370d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        }
11380d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
11390d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        default:
11400d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            break;
11410d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    }
11420d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge}
11430d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
1144ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btgattc_handle_event(uint16_t event, char* p_param)
1145ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1146ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATT_STATUS           status;
1147ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBT_UUID                   uuid;
1148ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATT_SRVC_ID          srvc_id;
1149ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tGATT_CHAR_PROP            out_char_prop;
1150ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATTC_CHAR_ID         in_char_id;
1151ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATTC_CHAR_ID         out_char_id;
1152ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATTC_CHAR_DESCR_ID   in_char_descr_id;
1153ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATTC_CHAR_DESCR_ID   out_char_descr_id;
1154ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATTC_INCL_SVC_ID     in_incl_svc_id;
1155ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATTC_INCL_SVC_ID     out_incl_svc_id;
1156ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATT_UNFMT            descr_val;
1157ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
115852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_gattc_cb_t* p_cb = (btif_gattc_cb_t*) p_param;
115952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    if (!p_cb) return;
1160ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1161db554581079863974af8e1289646f5deea6fc044Marie Janssen    LOG_VERBOSE(LOG_TAG, "%s: Event %d", __FUNCTION__, event);
1162ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1163ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    switch (event)
1164ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
1165ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_REGISTER_APP:
1166ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_uuid(&uuid, &p_cb->uuid);
1167b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji            btif_gattc_incr_app_count();
11686975b4d711142b885af479721cada448952c6b41Andre Eisenbach            BTA_GATTC_AppRegister(&uuid, bta_gattc_cback);
1169ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1170ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1171ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_UNREGISTER_APP:
11723770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_clear_clientif(p_cb->client_if, TRUE);
1173b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji            btif_gattc_decr_app_count();
1174ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_AppDeregister(p_cb->client_if);
1175ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1176ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1177ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_SCAN_START:
1178ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_gattc_init_dev_cb();
11796975b4d711142b885af479721cada448952c6b41Andre Eisenbach            BTA_DmBleObserve(TRUE, 0, bta_scan_results_cb);
1180ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1181ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1182ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_SCAN_STOP:
1183ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_DmBleObserve(FALSE, 0, 0);
1184ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1185ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1186ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_OPEN:
1187306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach        {
1188306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            // Ensure device is in inquiry database
1189306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            int addr_type = 0;
1190306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            int device_type = 0;
11917fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            tBTA_GATT_TRANSPORT transport = BTA_GATT_TRANSPORT_LE;
1192306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach
119386f97eda524568f2d264186844450db5e56dac36Matthew Xie            if (btif_get_address_type(p_cb->bd_addr.address, &addr_type) &&
119486f97eda524568f2d264186844450db5e56dac36Matthew Xie                btif_get_device_type(p_cb->bd_addr.address, &device_type) &&
119586f97eda524568f2d264186844450db5e56dac36Matthew Xie                device_type != BT_DEVICE_TYPE_BREDR)
119686f97eda524568f2d264186844450db5e56dac36Matthew Xie            {
1197306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach                BTA_DmAddBleDevice(p_cb->bd_addr.address, addr_type, device_type);
119886f97eda524568f2d264186844450db5e56dac36Matthew Xie            }
1199306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach
12006ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji            // Check for background connections
1201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (!p_cb->is_direct)
1202a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach            {
12036ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                // Check for privacy 1.0 and 1.1 controller and do not start background
12046ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                // connection if RPA offloading is not supported, since it will not
12056ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                // connect after change of random address
12066ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                if (!controller_get_interface()->supports_ble_privacy() &&
12076ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                   (p_cb->addr_type == BLE_ADDR_RANDOM) &&
12086ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                   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:
12337cb76b4277d603e5abfe7f9222a45ebdf7a715e2Satya 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
1374533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski        case BTIF_GATTC_GET_GATT_DB:
1375533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski        {
1376533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            btgatt_db_element_t *db = NULL;
1377533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            int count = 0;
1378533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            BTA_GATTC_GetGattDb(p_cb->conn_id, &db, &count);
1379533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
1380533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            HAL_CBACK(bt_gatt_callbacks, client->get_gatt_db_cb,
1381533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski                p_cb->conn_id, db, count);
1382533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            osi_free(db);
1383533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            break;
1384533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski        }
1385533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
1386ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_READ_CHAR:
1387ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id);
13885f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id);
1389ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1390ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_ReadCharacteristic(p_cb->conn_id, &in_char_id, p_cb->auth_req);
1391ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1392ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1393ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_READ_CHAR_DESCR:
1394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&in_char_descr_id.char_id.srvc_id, &p_cb->srvc_id);
13955f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_descr_id.char_id.char_id, &p_cb->char_id);
13965f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_descr_id.descr_id, &p_cb->descr_id);
1397ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1398ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_ReadCharDescr(p_cb->conn_id, &in_char_descr_id, p_cb->auth_req);
1399ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1400ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_WRITE_CHAR:
1402ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id);
14035f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id);
1404ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_WriteCharValue(p_cb->conn_id, &in_char_id,
1406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->write_type,
1407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->len,
1408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->value,
1409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->auth_req);
1410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_WRITE_CHAR_DESCR:
1413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&in_char_descr_id.char_id.srvc_id, &p_cb->srvc_id);
14145f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_descr_id.char_id.char_id, &p_cb->char_id);
14155f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_descr_id.descr_id, &p_cb->descr_id);
1416ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            descr_val.len = p_cb->len;
1418ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            descr_val.p_value = p_cb->value;
1419ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1420ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_WriteCharDescr(p_cb->conn_id, &in_char_descr_id,
1421ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->write_type, &descr_val,
1422ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->auth_req);
1423ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1424ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1425ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_EXECUTE_WRITE:
1426ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_ExecuteWrite(p_cb->conn_id, p_cb->action);
1427ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1428ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1429ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_REG_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_RegisterForNotifications(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, 1, 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_DEREG_FOR_NOTIFICATION:
1442ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id);
14435f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach            btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id);
1444ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1445ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            status = BTA_GATTC_DeregisterForNotifications(p_cb->client_if,
1446ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                        p_cb->bd_addr.address, &in_char_id);
1447ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1448ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->register_for_notification_cb,
1449ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                p_cb->conn_id, 0, status, &p_cb->srvc_id,
1450ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                &p_cb->char_id);
1451ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1452ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1453ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_REFRESH:
1454ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_Refresh(p_cb->bd_addr.address);
1455ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1456ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1457ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_READ_RSSI:
1458ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            rssi_request_client_if = p_cb->client_if;
1459ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTM_ReadRSSI (p_cb->bd_addr.address, (tBTM_CMPL_CB *)btm_read_rssi_cb);
1460ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1461ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
14621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTIF_GATTC_SCAN_FILTER_PARAM_SETUP:
14631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
146452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
146516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (1 == p_adv_filt_cb->adv_filt_param.dely_mode)
14661acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji               BTA_DmBleTrackAdvertiser(p_adv_filt_cb->client_if, bta_track_adv_event_cb);
14671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTA_DmBleScanFilterSetup(p_adv_filt_cb->action, p_adv_filt_cb->filt_index,
14681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                &p_adv_filt_cb->adv_filt_param, NULL, bta_scan_filt_param_setup_cb,
14691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                p_adv_filt_cb->client_if);
1470b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            break;
14711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
1472b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1473b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        case BTIF_GATTC_SCAN_FILTER_CONFIG:
1474b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        {
147552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
1476b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            tBTA_DM_BLE_PF_COND_PARAM cond;
1477b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            memset(&cond, 0, sizeof(cond));
1478b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
14791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            switch (p_adv_filt_cb->filt_type)
1480b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            {
1481b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_ADDR_FILTER: // 0
14821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    bdcpy(cond.target_addr.bda, p_adv_filt_cb->bd_addr.address);
14831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.target_addr.type = p_adv_filt_cb->addr_type;
14841a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
14851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
14861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
14871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1488b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1489b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1490b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_SRVC_DATA: // 1
14911a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
14921a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                            p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
14931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                            NULL, bta_scan_filt_cfg_cb, p_adv_filt_cb->client_if);
1494b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1495b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1496b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_SRVC_UUID: // 2
1497b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
1498b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    tBTA_DM_BLE_PF_COND_MASK uuid_mask;
1499b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1500b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.srvc_uuid.p_target_addr = NULL;
1501b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.srvc_uuid.cond_logic = BTA_DM_BLE_PF_LOGIC_AND;
15021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    btif_to_bta_uuid(&cond.srvc_uuid.uuid, &p_adv_filt_cb->uuid);
1503b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1504b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.srvc_uuid.p_uuid_mask = NULL;
15051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    if (p_adv_filt_cb->has_mask)
1506b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    {
15071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                        btif_to_bta_uuid_mask(&uuid_mask, &p_adv_filt_cb->uuid_mask);
1508b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                        cond.srvc_uuid.p_uuid_mask = &uuid_mask;
1509b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    }
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_SRVC_SOL_UUID: // 3
1518b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
1519b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.solicitate_uuid.p_target_addr = NULL;
1520b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.solicitate_uuid.cond_logic = BTA_DM_BLE_PF_LOGIC_AND;
15211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    btif_to_bta_uuid(&cond.solicitate_uuid.uuid, &p_adv_filt_cb->uuid);
15221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
15231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
15241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
15251a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1526b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1527b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1528b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1529b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_LOCAL_NAME: // 4
1530b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
15311a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.local_name.data_len = p_adv_filt_cb->value_len;
15321a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.local_name.p_data = p_adv_filt_cb->value;
15331a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
15341a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
15351a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
15361a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1537b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1538b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1539b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1540b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_MANU_DATA: // 5
1541b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
15421a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.company_id = p_adv_filt_cb->conn_id;
15431a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.company_id_mask = p_adv_filt_cb->company_id_mask;
15441a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.data_len = p_adv_filt_cb->value_len;
15451a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.p_pattern = p_adv_filt_cb->value;
15461a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_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);
1551b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1552b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1553b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
15541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                case BTA_DM_BLE_PF_SRVC_DATA_PATTERN: //6
15551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                {
15561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.srvc_data.data_len = p_adv_filt_cb->value_len;
15571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.srvc_data.p_pattern = p_adv_filt_cb->value;
15581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.srvc_data.p_pattern_mask = p_adv_filt_cb->value_mask;
15591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
15601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                                p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
15611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                                &cond, bta_scan_filt_cfg_cb,
15621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                                p_adv_filt_cb->client_if);
15631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   break;
15641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                }
15651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
1566b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                default:
1567db554581079863974af8e1289646f5deea6fc044Marie Janssen                    LOG_ERROR(LOG_TAG, "%s: Unknown filter type (%d)!", __FUNCTION__, p_cb->action);
1568b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1569b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            }
1570b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            break;
1571b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        }
1572b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1573b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        case BTIF_GATTC_SCAN_FILTER_CLEAR:
1574b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        {
157552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
1576b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            BTA_DmBleCfgFilterCondition(BTA_DM_BLE_SCAN_COND_CLEAR, BTA_DM_BLE_PF_TYPE_ALL,
15776e2d9db5148176d88d7f48c3b2ad5b27c57ca14dSatya Calloji                                        p_adv_filt_cb->filt_index, NULL, bta_scan_filt_cfg_cb,
15786e2d9db5148176d88d7f48c3b2ad5b27c57ca14dSatya Calloji                                        p_adv_filt_cb->client_if);
15791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
15801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
15811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
15821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTIF_GATTC_SCAN_FILTER_ENABLE:
15831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
158452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
15851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTA_DmEnableScanFilter(p_adv_filt_cb->action, bta_scan_filt_status_cb,
15861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                   p_adv_filt_cb->client_if);
1587b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            break;
1588b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        }
1589b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
15905c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        case BTIF_GATTC_LISTEN:
1591602162a13c6ed8abae53aee6deeda48b79f30911Zhihai Xu#if (defined(BLE_PERIPHERAL_MODE_SUPPORT) && (BLE_PERIPHERAL_MODE_SUPPORT == TRUE))
15925c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            BTA_GATTC_Listen(p_cb->client_if, p_cb->start, NULL);
1593eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach#else
1594a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach            BTA_GATTC_Broadcast(p_cb->client_if, p_cb->start);
1595eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach#endif
15965c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            break;
15975c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
15985c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        case BTIF_GATTC_SET_ADV_DATA:
15995c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        {
16000d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            const btif_adv_data_t *p_adv_data = (btif_adv_data_t*) p_param;
16010d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            const int cbindex = CLNT_IF_IDX;
16020d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            if (cbindex >= 0 && btif_gattc_copy_datacb(cbindex, p_adv_data, false))
1603a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            {
1604a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb();
1605a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                if (!p_adv_data->set_scan_rsp)
1606a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                {
1607a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    BTA_DmBleSetAdvConfig(p_multi_adv_data_cb->inst_cb[cbindex].mask,
1608a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        &p_multi_adv_data_cb->inst_cb[cbindex].data, bta_gattc_set_adv_data_cback);
1609a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                }
1610a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                else
1611a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                {
1612a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    BTA_DmBleSetScanRsp(p_multi_adv_data_cb->inst_cb[cbindex].mask,
1613a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        &p_multi_adv_data_cb->inst_cb[cbindex].data, bta_gattc_set_adv_data_cback);
1614a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                }
1615a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            }
16160d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            else
16170d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            {
16180d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                BTIF_TRACE_ERROR("%s:%s: failed to get instance data cbindex: %d",
16190d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                                 __func__, "BTIF_GATTC_SET_ADV_DATA", cbindex);
16200d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            }
16210d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            break;
1622a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1623a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1624a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_ENABLE:
1625a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
162652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param;
162716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
162816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            int cbindex = -1, arrindex = -1;
162916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
163016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            arrindex = btif_multi_adv_add_instid_map(p_inst_cb->client_if,INVALID_ADV_INST, true);
163116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (arrindex >= 0)
163216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                cbindex = btif_gattc_obtain_idx_for_datacb(p_inst_cb->client_if, CLNT_IF_IDX);
163316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
163416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (cbindex >= 0 && arrindex >= 0)
1635a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            {
1636a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb();
1637a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                memcpy(&p_multi_adv_data_cb->inst_cb[cbindex].param,
1638a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                       &p_inst_cb->param, sizeof(tBTA_BLE_ADV_PARAMS));
1639cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach                p_multi_adv_data_cb->inst_cb[cbindex].timeout_s = p_inst_cb->timeout_s;
164016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                BTIF_TRACE_DEBUG("%s, client_if value: %d", __FUNCTION__,
164116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                            p_multi_adv_data_cb->clntif_map[arrindex + arrindex]);
1642a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                BTA_BleEnableAdvInstance(&(p_multi_adv_data_cb->inst_cb[cbindex].param),
1643a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    bta_gattc_multi_adv_cback,
164416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                    &(p_multi_adv_data_cb->clntif_map[arrindex + arrindex]));
1645a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            }
16465c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            else
164716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            {
164816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                /* let the error propagate up from BTA layer */
1649e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("%s invalid index in BTIF_GATTC_ENABLE_ADV",__FUNCTION__);
165016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                BTA_BleEnableAdvInstance(&p_inst_cb->param, bta_gattc_multi_adv_cback, NULL);
165116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            }
1652a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
1653a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1654eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
1655a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_UPDATE:
1656a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
165752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param;
1658a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int inst_id = btif_multi_adv_instid_for_clientif(p_inst_cb->client_if);
1659a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int cbindex = btif_gattc_obtain_idx_for_datacb(p_inst_cb->client_if, CLNT_IF_IDX);
166016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (inst_id >= 0 && cbindex >= 0 && NULL != p_inst_cb)
1661a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            {
1662a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb();
1663a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                memcpy(&p_multi_adv_data_cb->inst_cb[cbindex].param, &p_inst_cb->param,
1664a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        sizeof(tBTA_BLE_ADV_PARAMS));
1665a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                BTA_BleUpdateAdvInstParam((UINT8)inst_id,
1666a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    &(p_multi_adv_data_cb->inst_cb[cbindex].param));
1667a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            }
1668a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            else
1669e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("%s invalid index in BTIF_GATTC_UPDATE_ADV", __FUNCTION__);
1670a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
1671a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1672a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1673a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_SET_DATA:
1674a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
167552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_adv_data_t *p_adv_data = (btif_adv_data_t*) p_param;
1676a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int cbindex = btif_gattc_obtain_idx_for_datacb(p_adv_data->client_if, CLNT_IF_IDX);
1677a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int inst_id = btif_multi_adv_instid_for_clientif(p_adv_data->client_if);
16780d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            if (inst_id >= 0 && cbindex >= 0 && btif_gattc_copy_datacb(cbindex, p_adv_data, true))
1679eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach            {
16800d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                btgatt_multi_adv_common_data *p_multi_adv_data_cb =
16810d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    btif_obtain_multi_adv_data_cb();
16820d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                BTA_BleCfgAdvInstData(
16830d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    (UINT8)inst_id,
1684d4c103624b3d7672110abeb753ed79113ee48989Ian Coolidge                    p_adv_data->set_scan_rsp,
16850d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    p_multi_adv_data_cb->inst_cb[cbindex].mask,
16860d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    &p_multi_adv_data_cb->inst_cb[cbindex].data);
16870d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            }
16880d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            else
16890d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            {
16900d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                BTIF_TRACE_ERROR(
16910d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    "%s:%s: failed to get invalid instance data: inst_id:%d "
16920d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    "cbindex:%d",
16930d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    __func__, "BTIF_GATTC_ADV_INSTANCE_SET_DATA", inst_id, cbindex);
1694eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach            }
1695a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
1696a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1697a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1698a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_DISABLE:
1699a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
170052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param;
1701a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int inst_id = btif_multi_adv_instid_for_clientif(p_inst_cb->client_if);
170216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (inst_id >=0)
1703a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                BTA_BleDisableAdvInstance((UINT8)inst_id);
1704a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            else
1705e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("%s invalid instance ID in BTIF_GATTC_DISABLE_ADV",__FUNCTION__);
17065c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            break;
17075c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        }
1708a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
17099426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        case BTIF_GATTC_CONFIGURE_MTU:
17109426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            BTA_GATTC_ConfigureMTU(p_cb->conn_id, p_cb->len);
17119426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            break;
17125c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
171352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach        case BTIF_GATTC_CONN_PARAM_UPDT:
171452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach        {
171552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_conn_param_cb_t *p_conn_param_cb = (btif_conn_param_cb_t*) p_param;
171652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            if (BTA_DmGetConnectionState(p_conn_param_cb->bd_addr.address))
171752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            {
171852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                BTA_DmBleUpdateConnectionParams(p_conn_param_cb->bd_addr.address,
171952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->min_interval, p_conn_param_cb->max_interval,
172052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->latency, p_conn_param_cb->timeout);
172152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            } else {
172252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                BTA_DmSetBlePrefConnParams(p_conn_param_cb->bd_addr.address,
172352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->min_interval, p_conn_param_cb->max_interval,
172452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->latency, p_conn_param_cb->timeout);
172552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            }
172652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            break;
172752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach        }
172852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach
17297d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham        case BTIF_GATTC_SET_SCAN_PARAMS:
1730979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        {
1731979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            BTA_DmSetBleScanParams(p_cb->client_if, p_cb->scan_interval, p_cb->scan_window,
1732979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                                   BTM_BLE_SCAN_MODE_ACTI, bta_scan_param_setup_cb);
17337d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham            break;
1734979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        }
17357d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham
1736c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_CONFIG_STORAGE_PARAMS:
1737c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
173852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1739c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleSetStorageParams(p_scan_track_cb->batch_scan_full_max,
1740c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               p_scan_track_cb->batch_scan_trunc_max, p_scan_track_cb->batch_scan_notify_threshold,
1741c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               bta_batch_scan_setup_cb, bta_batch_scan_threshold_cb, bta_batch_scan_reports_cb,
174252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach               (tBTA_DM_BLE_REF_VALUE) p_scan_track_cb->client_if);
1743c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1744c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1745c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1746c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_ENABLE_BATCH_SCAN:
1747c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
174852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1749c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleEnableBatchScan(p_scan_track_cb->scan_mode, p_scan_track_cb->scan_interval,
1750c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               p_scan_track_cb->scan_window, p_scan_track_cb->discard_rule,
1751c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               p_scan_track_cb->addr_type, p_scan_track_cb->client_if);
1752c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1753c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1754c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1755c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_DISABLE_BATCH_SCAN:
1756c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
175752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1758c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleDisableBatchScan(p_scan_track_cb->client_if);
1759c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1760c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1761c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1762c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_READ_BATCH_SCAN_REPORTS:
1763c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
176452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1765c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleReadScanReports(p_scan_track_cb->scan_mode, p_scan_track_cb->client_if);
1766c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1767c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1768c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1769ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        default:
1770db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_ERROR(LOG_TAG, "%s: Unknown event (%d)!", __FUNCTION__, event);
1771ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1772ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
17730d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
17740d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    btgattc_free_event_data(event, p_param);
1775ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1776ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1777ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
1778ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Client API Functions
1779ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
1780ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1781ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_register_app(bt_uuid_t *uuid)
1782ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1783ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1784ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1785ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.uuid, uuid, sizeof(bt_uuid_t));
1786ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REGISTER_APP,
1787ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1788ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1789ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1790ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_unregister_app(int client_if )
1791ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1792ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1793ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1794ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1795ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_UNREGISTER_APP,
1796ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1797ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1798ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
17997d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadhamstatic bt_status_t btif_gattc_scan( bool start )
1800ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1801ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1802ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1803ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, start ? BTIF_GATTC_SCAN_START : BTIF_GATTC_SCAN_STOP,
1804ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1805ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1806ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
18077fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battastatic bt_status_t btif_gattc_open(int client_if, const bt_bdaddr_t *bd_addr,
18087fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                        bool is_direct,int transport)
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.is_direct = is_direct ? 1 : 0;
18147fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    btif_cb.transport = (btgatt_transport_t)transport;
1815ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
1816ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_OPEN,
1817ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1818ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1819ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1820ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_close( int client_if, const bt_bdaddr_t *bd_addr, int conn_id)
1821ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1822ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1823ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1824ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1825ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1826ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
1827ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CLOSE,
1828ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1829ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1830ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
18315c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachstatic bt_status_t btif_gattc_listen(int client_if, bool start)
18325c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
18335c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    CHECK_BTGATT_INIT();
18345c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_gattc_cb_t btif_cb;
18355c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_cb.client_if = (uint8_t) client_if;
18365c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_cb.start = start ? 1 : 0;
18375c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_LISTEN,
18385c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
18395c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
18405c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
18410d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidgestatic void btif_gattc_deep_copy(UINT16 event, char *p_dest, char *p_src)
18420d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge{
18430d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    switch (event)
18440d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    {
18450d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        case BTIF_GATTC_ADV_INSTANCE_SET_DATA:
18460d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        case BTIF_GATTC_SET_ADV_DATA:
18470d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        {
18480d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            const btif_adv_data_t *src = (btif_adv_data_t*) p_src;
18490d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            btif_adv_data_t *dst = (btif_adv_data_t*) p_dest;
18503f06e14fddc0e674347ae28ea4a25218d4ce1d2aPavlin Radoslavov            maybe_non_aligned_memcpy(dst, src, sizeof(*src));
18510d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
18520d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            if (src->p_manufacturer_data)
18530d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            {
1854cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov                dst->p_manufacturer_data = osi_malloc(src->manufacturer_len);
18550d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                memcpy(dst->p_manufacturer_data, src->p_manufacturer_data,
18560d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                       src->manufacturer_len);
18570d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            }
18580d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
18590d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            if (src->p_service_data)
18600d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            {
1861cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov                dst->p_service_data = osi_malloc(src->service_data_len);
18620d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                memcpy(dst->p_service_data, src->p_service_data, src->service_data_len);
18630d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            }
18640d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
18650d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            if (src->p_service_uuid)
18660d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            {
1867cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov                dst->p_service_uuid = osi_malloc(src->service_uuid_len);
18680d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                memcpy(dst->p_service_uuid, src->p_service_uuid, src->service_uuid_len);
18690d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            }
18700d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            break;
18710d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        }
18720d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
18730d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        default:
18740d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            ASSERTC(false, "Unhandled deep copy", event);
18750d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            break;
18760d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    }
18770d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge}
18780d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
18795c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachstatic bt_status_t btif_gattc_set_adv_data(int client_if, bool set_scan_rsp, bool include_name,
18805c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                bool include_txpower, int min_interval, int max_interval, int appearance,
1881eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach                uint16_t manufacturer_len, char* manufacturer_data,
1882eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach                uint16_t service_data_len, char* service_data,
1883eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach                uint16_t service_uuid_len, char* service_uuid)
18845c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
18855c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    CHECK_BTGATT_INIT();
1886a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_adv_data_t adv_data;
1887eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
1888a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_adv_data_packager(client_if, set_scan_rsp, include_name,
1889a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        include_txpower, min_interval, max_interval, appearance, manufacturer_len,
1890a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        manufacturer_data, service_data_len, service_data, service_uuid_len, service_uuid,
1891a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        &adv_data);
1892eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
18930d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    bt_status_t status = btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SET_ADV_DATA,
18940d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                       (char*) &adv_data, sizeof(adv_data), btif_gattc_deep_copy);
18950d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    btif_gattc_adv_data_cleanup(&adv_data);
1896a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return status;
18975c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
18985c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
1899ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_refresh( int client_if, const bt_bdaddr_t *bd_addr )
1900ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1901ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1902ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1903ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1904ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
1905ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REFRESH,
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_search_service(int conn_id, bt_uuid_t *filter_uuid )
1910ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1911ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1912ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1913ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1914ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.search_all = filter_uuid ? 0 : 1;
1915ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (filter_uuid)
1916ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memcpy(&btif_cb.uuid, filter_uuid, sizeof(bt_uuid_t));
1917ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SEARCH_SERVICE,
1918ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1919ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1920ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1921ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_get_characteristic( int conn_id
19225f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach        , btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *start_char_id)
1923ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1924ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1925ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1926ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1927ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
1928ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (start_char_id)
1929ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
19305f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach        memcpy(&btif_cb.char_id, start_char_id, sizeof(btgatt_gatt_id_t));
1931ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_NEXT_CHAR,
1932ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1933ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1934ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_FIRST_CHAR,
1935ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1936ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1937ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1938ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_get_descriptor( int conn_id
19395f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach        , btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id
19405f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach        , btgatt_gatt_id_t *start_descr_id)
1941ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1942ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1943ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1944ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1945ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
19465f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t));
1947ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (start_descr_id)
1948ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
19495f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach        memcpy(&btif_cb.descr_id, start_descr_id, sizeof(btgatt_gatt_id_t));
1950ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_NEXT_CHAR_DESCR,
1951ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1952ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1953ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1954ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_FIRST_CHAR_DESCR,
1955ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1956ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1957ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1958ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_get_included_service(int conn_id, btgatt_srvc_id_t *srvc_id,
1959ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                                   btgatt_srvc_id_t *start_incl_srvc_id)
1960ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1961ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1962ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1963ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1964ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
1965ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (start_incl_srvc_id)
1966ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
1967ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memcpy(&btif_cb.incl_srvc_id, start_incl_srvc_id, sizeof(btgatt_srvc_id_t));
1968ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_NEXT_INCL_SERVICE,
1969ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1970ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1971ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_FIRST_INCL_SERVICE,
1972ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1973ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1974ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1975533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowskistatic bt_status_t btif_gattc_get_gatt_db(int conn_id)
1976533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski{
1977533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    CHECK_BTGATT_INIT();
1978533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    btif_gattc_cb_t btif_cb;
1979533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    btif_cb.conn_id = (uint16_t) conn_id;
1980533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
1981533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_GATT_DB,
1982533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1983533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski}
1984533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
1985533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
1986ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_read_char(int conn_id, btgatt_srvc_id_t* srvc_id,
19875f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                                        btgatt_gatt_id_t* char_id, int auth_req )
1988ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1989ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1990ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1991ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1992ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
1993ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
19945f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t));
1995ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_CHAR,
1996ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1997ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1998ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1999ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_read_char_descr(int conn_id, btgatt_srvc_id_t* srvc_id,
20005f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                                              btgatt_gatt_id_t* char_id,
20015f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                                              btgatt_gatt_id_t* descr_id,
2002ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                              int auth_req )
2003ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2004ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
2005ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
2006ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
2007ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
2008ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
20095f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t));
20105f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.descr_id, descr_id, sizeof(btgatt_gatt_id_t));
2011ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_CHAR_DESCR,
2012ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
2013ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2014ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2015ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_write_char(int conn_id, btgatt_srvc_id_t* srvc_id,
20165f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                                         btgatt_gatt_id_t* char_id, int write_type,
2017ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                         int len, int auth_req, char* p_value)
2018ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2019ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
2020ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
2021ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
2022ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
2023ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.write_type = (uint8_t) write_type;
2024ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.len = len > BTGATT_MAX_ATTR_LEN ? BTGATT_MAX_ATTR_LEN : len;
2025ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
20265f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t));
2027ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(btif_cb.value, p_value, btif_cb.len);
2028ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_WRITE_CHAR,
2029ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
2030ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2031ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2032ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_write_char_descr(int conn_id, btgatt_srvc_id_t* srvc_id,
20335f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                                               btgatt_gatt_id_t* char_id,
20345f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                                               btgatt_gatt_id_t* descr_id,
2035ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                               int write_type, int len, int auth_req,
2036ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                               char* p_value)
2037ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2038ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
2039ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
2040ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
2041ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
2042ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.write_type = (uint8_t) write_type;
2043ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.len = len > BTGATT_MAX_ATTR_LEN ? BTGATT_MAX_ATTR_LEN : len;
2044ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
20455f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t));
20465f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.descr_id, descr_id, sizeof(btgatt_gatt_id_t));
2047ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(btif_cb.value, p_value, btif_cb.len);
2048ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_WRITE_CHAR_DESCR,
2049ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
2050ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2051ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2052ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_execute_write(int conn_id, int execute)
2053ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2054ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
2055ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
2056ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
2057ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.action = (uint8_t) execute;
2058ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_EXECUTE_WRITE,
2059ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
2060ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2061ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2062ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_reg_for_notification(int client_if, const bt_bdaddr_t *bd_addr,
2063ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                                   btgatt_srvc_id_t* srvc_id,
20645f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                                                   btgatt_gatt_id_t* char_id)
2065ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2066ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
2067ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
2068ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
2069ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
2070ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
20715f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t));
2072ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REG_FOR_NOTIFICATION,
2073ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
2074ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2075ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2076ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_dereg_for_notification(int client_if, const bt_bdaddr_t *bd_addr,
2077ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                                     btgatt_srvc_id_t* srvc_id,
20785f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach                                                     btgatt_gatt_id_t* char_id)
2079ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2080ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
2081ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
2082ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
2083ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
2084ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t));
20855f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t));
2086ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_DEREG_FOR_NOTIFICATION,
2087ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
2088ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2089ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2090ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_read_remote_rssi(int client_if, const bt_bdaddr_t *bd_addr)
2091ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2092ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
2093ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
2094ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
2095ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
2096ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_RSSI,
2097ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
2098ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2099ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
21009426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbachstatic bt_status_t btif_gattc_configure_mtu(int conn_id, int mtu)
21019426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach{
21029426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    CHECK_BTGATT_INIT();
21039426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_gattc_cb_t btif_cb;
21049426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_cb.conn_id = conn_id;
21059426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_cb.len = mtu; // Re-use len field
21069426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONFIGURE_MTU,
21079426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
21089426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach}
21099426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
211052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbachstatic bt_status_t btif_gattc_conn_parameter_update(const bt_bdaddr_t *bd_addr, int min_interval,
211152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                    int max_interval, int latency, int timeout)
211252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach{
211352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    CHECK_BTGATT_INIT();
211452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_conn_param_cb_t btif_cb;
211552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.min_interval = min_interval;
211652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.max_interval = max_interval;
211752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.latency = latency;
211852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.timeout = timeout;
211952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
212052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONN_PARAM_UPDT,
212152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                                 (char*) &btif_cb, sizeof(btif_conn_param_cb_t), NULL);
212252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach}
212352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach
2124f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Callojistatic bt_status_t btif_gattc_scan_filter_param_setup(btgatt_filt_param_setup_t
2125f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji                                                      filt_param)
2126b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
2127b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    CHECK_BTGATT_INIT();
21281a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
21291a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
21306cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
2131f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.client_if = filt_param.client_if;
2132f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.action = filt_param.action;
2133f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.filt_index = filt_param.filt_index;
2134f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.feat_seln = filt_param.feat_seln;
2135f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.list_logic_type = filt_param.list_logic_type;
2136f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.filt_logic_type = filt_param.filt_logic_type;
2137f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.rssi_high_thres = filt_param.rssi_high_thres;
2138f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.rssi_low_thres = filt_param.rssi_low_thres;
2139f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.dely_mode = filt_param.dely_mode;
2140f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.found_timeout = filt_param.found_timeout;
2141f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.lost_timeout = filt_param.lost_timeout;
2142f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.found_timeout_cnt = filt_param.found_timeout_cnt;
2143f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.num_of_tracking_entries = filt_param.num_of_tracking_entries;
21441a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_PARAM_SETUP,
21451a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
2146b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
2147b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
21481a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_add_remove(int client_if, int action,
21491a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              int filt_type, int filt_index, int company_id,
21501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              int company_id_mask, const bt_uuid_t *p_uuid,
21511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              const bt_uuid_t *p_uuid_mask, const bt_bdaddr_t *bd_addr,
21521a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              char addr_type, int data_len, char* p_data, int mask_len,
21531a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              char* p_mask)
2154b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
2155b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    CHECK_BTGATT_INIT();
21561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
21576cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
21581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s, %d, %d", __FUNCTION__, action, filt_type);
21591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
21601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    /* If data is passed, both mask and data have to be the same length */
216116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (data_len != mask_len && NULL != p_data && NULL != p_mask)
21621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        return BT_STATUS_PARM_INVALID;
21631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
21641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.client_if = client_if;
21651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.action = action;
21661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.filt_index = filt_index;
21671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.filt_type = filt_type;
21681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.conn_id = company_id;
21691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.company_id_mask = company_id_mask ? company_id_mask : 0xFFFF;
217016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (bd_addr)
217116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        bdcpy(btif_filt_cb.bd_addr.address, bd_addr->address);
21721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
21731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.addr_type = addr_type;
21741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.has_mask = (p_uuid_mask != NULL);
2175b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
2176b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    if (p_uuid != NULL)
21771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(&btif_filt_cb.uuid, p_uuid, sizeof(bt_uuid_t));
2178b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    if (p_uuid_mask != NULL)
21791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(&btif_filt_cb.uuid_mask, p_uuid_mask, sizeof(bt_uuid_t));
21801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if (p_data != NULL && data_len != 0)
21811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    {
21821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(btif_filt_cb.value, p_data, data_len);
21831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        btif_filt_cb.value_len = data_len;
21841a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(btif_filt_cb.value_mask, p_mask, mask_len);
21851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        btif_filt_cb.value_mask_len = mask_len;
21861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    }
2187b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_CONFIG,
21881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
2189b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
2190b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
21911a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_clear(int client_if, int filt_index)
2192b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
2193b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    CHECK_BTGATT_INIT();
21941a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s, %d", __FUNCTION__, filt_index);
21951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
21961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
21976cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
21981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.client_if = client_if;
21991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.filt_index = filt_index;
22001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.action = BTA_DM_BLE_SCAN_COND_CLEAR;
22011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_CONFIG,
22021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
22031a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
22041a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
22051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_enable(int client_if, bool enable)
22061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
22071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    int action = 0;
22081a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    CHECK_BTGATT_INIT();
22091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s, %d", __FUNCTION__, enable);
22101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
22111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
22126cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
22131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.client_if = client_if;
221416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (true == enable)
22151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        action = 1;
22161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.action = action;
22171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_ENABLE,
22181a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
2219b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
2220b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
2221979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbachstatic bt_status_t btif_gattc_set_scan_parameters(int client_if, int scan_interval,
2222979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                                                  int scan_window)
22237d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham{
22247d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    CHECK_BTGATT_INIT();
22257d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_gattc_cb_t btif_cb;
2226979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_cb.client_if = client_if;
22277d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_cb.scan_interval = scan_interval;
22287d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_cb.scan_window = scan_window;
22297d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SET_SCAN_PARAMS,
22307d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
22317d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham}
22327d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham
2233ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic int btif_gattc_get_device_type( const bt_bdaddr_t *bd_addr )
2234ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2235ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    int device_type = 0;
2236ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    char bd_addr_str[18] = {0};
2237ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
22388a6a89faa942aed4f176b0c98402d01c8bdd6aa6Sharvil Nanavati    bdaddr_to_string(bd_addr, bd_addr_str, sizeof(bd_addr_str));
22399d52f88bfc07556cb01ab3055f5b1242c9b467aaSharvil Nanavati    if (btif_config_get_int(bd_addr_str, "DevType", &device_type))
2240ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return device_type;
2241ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return 0;
2242ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2243ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2244a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_enable(int client_if, int min_interval, int max_interval,
22459dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                                            int adv_type, int chnl_map, int tx_power, int timeout_s)
2246a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
2247a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
2248a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btgatt_multi_adv_inst_cb adv_cb;
22496cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
2250a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.client_if = (uint8_t) client_if;
2251a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2252a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_min = min_interval;
2253a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_max = max_interval;
2254a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_type = adv_type;
2255a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.channel_map = chnl_map;
2256a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_filter_policy = 0;
2257a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.tx_power = tx_power;
22589dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach    adv_cb.timeout_s = timeout_s;
2259a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_ENABLE,
2260a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                             (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL);
2261a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
2262a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2263a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_update(int client_if, int min_interval, int max_interval,
22649dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                                            int adv_type, int chnl_map,int tx_power, int timeout_s)
2265a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
2266a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
2267a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btgatt_multi_adv_inst_cb adv_cb;
22686cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
2269a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.client_if = (uint8_t) client_if;
2270a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2271a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_min = min_interval;
2272a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_max = max_interval;
2273a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_type = adv_type;
2274a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.channel_map = chnl_map;
2275a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_filter_policy = 0;
2276a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.tx_power = tx_power;
22779dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach    adv_cb.timeout_s = timeout_s;
2278a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_UPDATE,
2279a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                         (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL);
2280a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
2281a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2282a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_setdata(int client_if, bool set_scan_rsp,
22839dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                bool include_name, bool incl_txpower, int appearance,
22849dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                int manufacturer_len, char* manufacturer_data,
22859dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                int service_data_len, char* service_data,
22869dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                int service_uuid_len, char* service_uuid)
2287a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
2288a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
2289a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2290a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_adv_data_t multi_adv_data_inst;
22910d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    memset(&multi_adv_data_inst, 0, sizeof(multi_adv_data_inst));
22920d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
22930d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    const int min_interval = 0;
22940d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    const int max_interval = 0;
2295a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2296a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_adv_data_packager(client_if, set_scan_rsp, include_name, incl_txpower,
2297a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        min_interval, max_interval, appearance, manufacturer_len, manufacturer_data,
2298a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        service_data_len, service_data, service_uuid_len, service_uuid, &multi_adv_data_inst);
2299a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
23000d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    bt_status_t status = btif_transfer_context(
23010d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_SET_DATA,
23020d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        (char *)&multi_adv_data_inst, sizeof(multi_adv_data_inst),
23030d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        btif_gattc_deep_copy);
23040d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    btif_gattc_adv_data_cleanup(&multi_adv_data_inst);
2305a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return status;
2306a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
2307a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2308a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_disable(int client_if)
2309a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
2310a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
2311a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btgatt_multi_adv_inst_cb adv_cb;
23126cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
2313a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.client_if = (uint8_t) client_if;
2314a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2315a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_DISABLE,
2316a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                           (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL);
2317a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
2318a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2319c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_cfg_storage(int client_if,int batch_scan_full_max,
2320c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    int batch_scan_trunc_max, int batch_scan_notify_threshold)
2321c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2322c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2323c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
23246cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2325c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2326c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.batch_scan_full_max = batch_scan_full_max;
2327c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.batch_scan_trunc_max = batch_scan_trunc_max;
2328c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.batch_scan_notify_threshold = batch_scan_notify_threshold;
2329c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONFIG_STORAGE_PARAMS,
2330c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2331c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2332c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2333c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_enb_batch_scan(int client_if,int scan_mode, int scan_interval,
2334c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                int scan_window, int addr_type, int discard_rule)
2335c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2336c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2337c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
23386cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2339c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2340c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_mode = scan_mode;
2341c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_interval = scan_interval;
2342c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_window = scan_window;
2343c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.discard_rule = discard_rule;
2344c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.addr_type = addr_type;
2345c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ENABLE_BATCH_SCAN,
2346c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2347c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2348c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2349c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_dis_batch_scan(int client_if)
2350c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2351c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2352c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
23536cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2354c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2355c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_DISABLE_BATCH_SCAN,
2356c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2357c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2358c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2359c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_read_batch_scan_reports(int client_if, int scan_mode)
2360c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2361c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2362c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
23636cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2364c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2365c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_mode = scan_mode;
2366c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_BATCH_SCAN_REPORTS,
2367c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2368c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2369c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2370ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern bt_status_t btif_gattc_test_command_impl(int command, btgatt_test_params_t* params);
2371ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2372ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_test_command(int command, btgatt_test_params_t* params)
2373ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2374ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_gattc_test_command_impl(command, params);
2375ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2376ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2377ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaconst btgatt_client_interface_t btgattClientInterface = {
2378ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_register_app,
2379ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_unregister_app,
2380ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_scan,
2381ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_open,
2382ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_close,
23835c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_gattc_listen,
2384ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_refresh,
2385ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_search_service,
2386ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_get_included_service,
2387ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_get_characteristic,
2388ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_get_descriptor,
2389ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_read_char,
2390ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_write_char,
2391ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_read_char_descr,
2392ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_write_char_descr,
2393ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_execute_write,
2394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_reg_for_notification,
2395ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_dereg_for_notification,
2396ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_read_remote_rssi,
23971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_gattc_scan_filter_param_setup,
23981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_gattc_scan_filter_add_remove,
2399b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    btif_gattc_scan_filter_clear,
24001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_gattc_scan_filter_enable,
2401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_get_device_type,
24025c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_gattc_set_adv_data,
24039426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_gattc_configure_mtu,
240452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_gattc_conn_parameter_update,
24057d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_gattc_set_scan_parameters,
2406a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_enable,
2407a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_update,
2408a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_setdata,
2409a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_disable,
2410c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_cfg_storage,
2411c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_enb_batch_scan,
2412c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_dis_batch_scan,
2413c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_read_batch_scan_reports,
2414533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    btif_gattc_test_command,
2415533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    btif_gattc_get_gatt_db
2416ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta};
2417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2418ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
2419