btif_gatt_client.cc revision 61a112e488a7686e5cc9680434c42895ef9db878
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
29140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski#include <base/at_exit.h>
30140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski#include <base/bind.h>
31140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski#include <base/threading/thread.h>
3249a86709488e5cfd5e23759da18bf9613e15b04dMarie Janssen#include <errno.h>
33ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <hardware/bluetooth.h>
34ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdio.h>
35ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdlib.h>
36ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <string.h>
376ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji#include "device/include/controller.h"
386ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji
39ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
4095b74f252f534ec757aab1fc08e086e02b2cfe8dSharvil Nanavati#include "btcore/include/bdaddr.h"
41ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_common.h"
42ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_util.h"
43ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
44ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (defined(BLE_INCLUDED) && (BLE_INCLUDED == TRUE))
45ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
466975b4d711142b885af479721cada448952c6b41Andre Eisenbach#include <hardware/bt_gatt.h>
47db554581079863974af8e1289646f5deea6fc044Marie Janssen
48ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_api.h"
49ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_gatt_api.h"
50ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_config.h"
51db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_dm.h"
52ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_gatt.h"
53db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_gatt_multi_adv_util.h"
54ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_gatt_util.h"
55ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_storage.h"
56db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_storage.h"
5744802768c447ab480d4227b3a852a97d923b816dSharvil Nanavati#include "osi/include/log.h"
58b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach#include "vendor_api.h"
59b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
60140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowskiusing base::Bind;
61140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowskiusing base::Owned;
62140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski
63140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowskiextern bt_status_t do_in_jni_thread(const base::Closure& task);
64140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski
65ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
66ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Constants & Macros
67ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
68ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
69ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define CHECK_BTGATT_INIT() if (bt_gatt_callbacks == NULL)\
70ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {\
71db554581079863974af8e1289646f5deea6fc044Marie Janssen        LOG_WARN(LOG_TAG, "%s: BTGATT not initialized", __FUNCTION__);\
72ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return BT_STATUS_NOT_READY;\
73ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    } else {\
74db554581079863974af8e1289646f5deea6fc044Marie Janssen        LOG_VERBOSE(LOG_TAG, "%s", __FUNCTION__);\
75ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
76ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
77a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BLE_RESOLVE_ADDR_MSB                 0x40   /* bit7, bit6 is 01 to be resolvable random */
78a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BLE_RESOLVE_ADDR_MASK                0xc0   /* bit 6, and bit7 */
79a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BTM_BLE_IS_RESOLVE_BDA(x)           ((x[0] & BLE_RESOLVE_ADDR_MASK) == BLE_RESOLVE_ADDR_MSB)
80ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
81ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef enum {
82ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_REGISTER_APP = 1000,
83ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_UNREGISTER_APP,
84ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_SCAN_START,
85ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_SCAN_STOP,
86ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_OPEN,
87ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_CLOSE,
88ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_SEARCH_SERVICE,
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,
945c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    BTIF_GATTC_READ_RSSI,
955c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    BTIF_GATTC_LISTEN,
969426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    BTIF_GATTC_SET_ADV_DATA,
979426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    BTIF_GATTC_CONFIGURE_MTU,
9852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    BTIF_GATTC_CONN_PARAM_UPDT,
991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_GATTC_SCAN_FILTER_PARAM_SETUP,
100b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    BTIF_GATTC_SCAN_FILTER_CONFIG,
1017d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    BTIF_GATTC_SCAN_FILTER_CLEAR,
1021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_GATTC_SCAN_FILTER_ENABLE,
1037d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    BTIF_GATTC_SET_SCAN_PARAMS,
104a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    BTIF_GATTC_ADV_INSTANCE_ENABLE,
105a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    BTIF_GATTC_ADV_INSTANCE_UPDATE,
106a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    BTIF_GATTC_ADV_INSTANCE_SET_DATA,
107c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_ADV_INSTANCE_DISABLE,
108c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_CONFIG_STORAGE_PARAMS,
109c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_ENABLE_BATCH_SCAN,
110c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_READ_BATCH_SCAN_REPORTS,
111533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    BTIF_GATTC_DISABLE_BATCH_SCAN,
112533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    BTIF_GATTC_GET_GATT_DB
113ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} btif_gattc_event_t;
114ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
115ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATT_MAX_OBSERVED_DEV 40
116ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
117ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATT_OBSERVE_EVT   0x1000
118ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATTC_RSSI_EVT     0x1001
119979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach#define BTIF_GATTC_SCAN_FILTER_EVT  0x1003
120979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach#define BTIF_GATTC_SCAN_PARAM_EVT   0x1004
121ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
122c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji#define ENABLE_BATCH_SCAN 1
123c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji#define DISABLE_BATCH_SCAN 0
124c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
125ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
126ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Local type definitions
127ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
128c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojitypedef struct
129c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
130c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t report_format;
131c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint16_t data_len;
132c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t num_records;
133c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t *p_rep_data;
134c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} btgatt_batch_reports;
135c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
136c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojitypedef struct
137c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
138c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  status;
139c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  client_if;
1401acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    uint8_t  action;
1411acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    uint8_t  avbl_space;
1421acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    uint8_t  lost_timeout;
143f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    tBLE_ADDR_TYPE addr_type;
144c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  batch_scan_full_max;
145c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  batch_scan_trunc_max;
146c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  batch_scan_notify_threshold;
147979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    tBTA_BLE_BATCH_SCAN_MODE scan_mode;
148c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint32_t scan_interval;
149c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint32_t scan_window;
150c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    tBTA_BLE_DISCARD_RULE discard_rule;
151f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btgatt_batch_reports  read_reports;
152c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} btgatt_batch_track_cb_t;
153ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojitypedef tBTA_DM_BLE_PF_FILT_PARAMS btgatt_adv_filt_param_t;
1551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
1561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojitypedef struct
1571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
1581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     client_if;
1591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     action;
1601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_DM_BLE_PF_COND_TYPE filt_type;
1611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    bt_bdaddr_t bd_addr;
1621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value[BTGATT_MAX_ATTR_LEN];
1631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value_len;
1641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     filt_index;
1651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint16_t    conn_id;
1661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint16_t    company_id_mask;
1671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    bt_uuid_t   uuid;
1681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    bt_uuid_t   uuid_mask;
1691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value_mask[BTGATT_MAX_ATTR_LEN];
1701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value_mask_len;
1711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     has_mask;
1721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     addr_type;
1731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     status;
1741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_DM_BLE_PF_AVBL_SPACE avbl_space;
1751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_DM_BLE_SCAN_COND_OP cond_op;
1761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filt_param_t adv_filt_param;
1771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji} btgatt_adv_filter_cb_t;
1781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
179ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct
180ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
181ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     value[BTGATT_MAX_ATTR_LEN];
182a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    uint8_t     inst_id;
183ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_bdaddr_t bd_addr;
184ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btgatt_srvc_id_t srvc_id;
185ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btgatt_srvc_id_t incl_srvc_id;
1865f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    btgatt_gatt_id_t char_id;
1875f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    btgatt_gatt_id_t descr_id;
1889dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    uint16_t    handle;
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            {
329713993d1784ab7c23aee1fa3cf1ab8676cc0aa69Jakub Pawlowski                p_dest_data->read.p_value = (tBTA_GATT_UNFMT *)osi_malloc(sizeof(tBTA_GATT_UNFMT));
3308444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
331717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov                memcpy(p_dest_data->read.p_value, p_src_data->read.p_value,
3329dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                       sizeof(tBTA_GATT_UNFMT));
333717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
334717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov                // Allocate buffer for att value if necessary
3359dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                if (p_src_data->read.p_value->len > 0 &&
3369dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                    p_src_data->read.p_value->p_value != NULL) {
3379dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                    p_dest_data->read.p_value->p_value =
338713993d1784ab7c23aee1fa3cf1ab8676cc0aa69Jakub Pawlowski                        (UINT8 *)osi_malloc(p_src_data->read.p_value->len);
3399dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                    memcpy(p_dest_data->read.p_value->p_value,
3409dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                           p_src_data->read.p_value->p_value,
3419dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                           p_src_data->read.p_value->len);
3428444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                }
343717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov            } else {
344e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_WARNING("%s :Src read.p_value ptr is NULL for event  0x%x",
345e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                                    __FUNCTION__, event);
346e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                p_dest_data->read.p_value = NULL;
347e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach
348e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach            }
3498444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3508444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3518444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        default:
3528444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3538444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    }
3548444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach}
3558444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3568444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbachstatic void btapp_gattc_free_req_data(UINT16 event, tBTA_GATTC *p_data)
3578444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach{
3588444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    switch (event)
3598444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    {
3608444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_CHAR_EVT:
3618444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_DESCR_EVT:
3628444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            if (p_data != NULL && p_data->read.p_value != NULL)
3638444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            {
3649dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                if (p_data->read.p_value->len > 0)
3659dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                    osi_free_and_reset((void **)&p_data->read.p_value->p_value);
3669dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski
367cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov                osi_free_and_reset((void **)&p_data->read.p_value);
3688444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            }
3698444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3708444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3718444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        default:
3728444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3738444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    }
3748444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach}
3758444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
376ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_init_dev_cb(void)
377ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
378ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memset(p_dev_cb, 0, sizeof(btif_gattc_dev_cb_t));
379ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
380c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
381ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_add_remote_bdaddr (BD_ADDR p_bda, uint8_t addr_type)
382ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
383ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t i;
384ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    for (i = 0; i < BTIF_GATT_MAX_OBSERVED_DEV; i++)
385ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
386ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (!p_dev_cb->remote_dev[i].in_use )
387ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
388ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            memcpy(p_dev_cb->remote_dev[i].bd_addr.address, p_bda, BD_ADDR_LEN);
389ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_dev_cb->addr_type = addr_type;
390ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_dev_cb->remote_dev[i].in_use = TRUE;
391db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_VERBOSE(LOG_TAG, "%s device added idx=%d", __FUNCTION__, i  );
392ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
393ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
395ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
396ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if ( i == BTIF_GATT_MAX_OBSERVED_DEV)
397ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
398ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        i= p_dev_cb->next_storage_idx;
399ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memcpy(p_dev_cb->remote_dev[i].bd_addr.address, p_bda, BD_ADDR_LEN);
400ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_dev_cb->addr_type = addr_type;
401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_dev_cb->remote_dev[i].in_use = TRUE;
402db554581079863974af8e1289646f5deea6fc044Marie Janssen        LOG_VERBOSE(LOG_TAG, "%s device overwrite idx=%d", __FUNCTION__, i  );
403ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_dev_cb->next_storage_idx++;
40416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        if (p_dev_cb->next_storage_idx >= BTIF_GATT_MAX_OBSERVED_DEV)
405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta               p_dev_cb->next_storage_idx = 0;
406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic BOOLEAN btif_gattc_find_bdaddr (BD_ADDR p_bda)
410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t i;
412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    for (i = 0; i < BTIF_GATT_MAX_OBSERVED_DEV; i++)
413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
414ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (p_dev_cb->remote_dev[i].in_use &&
415ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            !memcmp(p_dev_cb->remote_dev[i].bd_addr.address, p_bda, BD_ADDR_LEN))
416ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            return TRUE;
418ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
419ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
420ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return FALSE;
421ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
422ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
423ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_update_properties ( btif_gattc_cb_t *p_btif_cb )
424ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
425ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t remote_name_len;
426ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t *p_eir_remote_name=NULL;
427ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_bdname_t bdname;
428ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
429a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson    p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
430ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                         BTM_EIR_COMPLETE_LOCAL_NAME_TYPE, &remote_name_len);
431ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
43216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (p_eir_remote_name == NULL)
433ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
434a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson        p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
435ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                BT_EIR_SHORTENED_LOCAL_NAME_TYPE, &remote_name_len);
436ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
437ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
43816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (p_eir_remote_name)
439ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
440bcbf9cd0727f6903f9cf6c165453539fc55b6072Mike J. Chen        memcpy(bdname.name, p_eir_remote_name, remote_name_len);
441bcbf9cd0727f6903f9cf6c165453539fc55b6072Mike J. Chen        bdname.name[remote_name_len]='\0';
442ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
443db554581079863974af8e1289646f5deea6fc044Marie Janssen        LOG_DEBUG(LOG_TAG, "%s BLE device name=%s len=%d dev_type=%d", __FUNCTION__, bdname.name,
444ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta              remote_name_len, p_btif_cb->device_type  );
445ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        btif_dm_update_ble_remote_properties( p_btif_cb->bd_addr.address,   bdname.name,
446ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                               p_btif_cb->device_type);
447ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
448ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
449ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
450ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_upstreams_evt(uint16_t event, char* p_param)
451ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
452db554581079863974af8e1289646f5deea6fc044Marie Janssen    LOG_VERBOSE(LOG_TAG, "%s: Event %d", __FUNCTION__, event);
453ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
45452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    tBTA_GATTC *p_data = (tBTA_GATTC*) p_param;
455ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    switch (event)
456ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
457ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_REG_EVT:
458ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
459ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bt_uuid_t app_uuid;
460ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_to_btif_uuid(&app_uuid, &p_data->reg_oper.app_uuid);
461ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->register_client_cb
462ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->reg_oper.status
463ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->reg_oper.client_if
464ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , &app_uuid
465ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            );
466ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
467ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
468ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
469ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_DEREG_EVT:
470ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
471ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
472ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_READ_CHAR_EVT:
473ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
474ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_read_params_t data;
475ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            set_read_value(&data, &p_data->read);
476ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
477ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->read_characteristic_cb
478ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->read.conn_id, p_data->read.status, &data);
479ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
480ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
481ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
482ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_WRITE_CHAR_EVT:
483ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_PREP_WRITE_EVT:
484ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
4859dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            HAL_CBACK(bt_gatt_callbacks, client->write_characteristic_cb,
4869dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                p_data->write.conn_id, p_data->write.status, p_data->write.handle);
487ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
488ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
489ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
490ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_EXEC_EVT:
491ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
492ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->execute_write_cb
493ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->exec_cmpl.conn_id, p_data->exec_cmpl.status
494ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            );
495ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
496ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
497ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
498ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_SEARCH_CMPL_EVT:
499ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
500ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->search_complete_cb
501ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->search_cmpl.conn_id, p_data->search_cmpl.status);
502ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
503ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
504ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
505ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_READ_DESCR_EVT:
506ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
507ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_read_params_t data;
508ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            set_read_value(&data, &p_data->read);
509ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
510ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->read_descriptor_cb
511ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->read.conn_id, p_data->read.status, &data);
512ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
513ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
514ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
515ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_WRITE_DESCR_EVT:
516ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
5179dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            HAL_CBACK(bt_gatt_callbacks, client->write_descriptor_cb,
5189dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                p_data->write.conn_id, p_data->write.status, p_data->write.handle);
519ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
520ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
521ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
522ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_NOTIF_EVT:
523ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
524ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_notify_params_t data;
525ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
526ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(data.bda.address, p_data->notify.bda);
527ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            memcpy(data.value, p_data->notify.value, p_data->notify.len);
528ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
5299dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            data.handle = p_data->notify.handle;
530ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            data.is_notify = p_data->notify.is_notify;
531ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            data.len = p_data->notify.len;
532ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
5339dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            HAL_CBACK(bt_gatt_callbacks, client->notify_cb, p_data->notify.conn_id, &data);
534ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
535ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_data->notify.is_notify == FALSE)
5369dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                BTA_GATTC_SendIndConfirm(p_data->notify.conn_id, p_data->notify.handle);
5379dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski
538ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
539ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
540ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
541ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_OPEN_EVT:
542ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
543ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bt_bdaddr_t bda;
544ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(bda.address, p_data->open.remote_bda);
545ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
546ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->open_cb, p_data->open.conn_id
547ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->open.status, p_data->open.client_if, &bda);
5486975b4d711142b885af479721cada448952c6b41Andre Eisenbach
5499426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            if (GATT_DEF_BLE_MTU_SIZE != p_data->open.mtu && p_data->open.mtu)
5509426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            {
5519426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, p_data->open.conn_id
5529426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                    , p_data->open.status , p_data->open.mtu);
5539426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            }
5549426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
5556975b4d711142b885af479721cada448952c6b41Andre Eisenbach            if (p_data->open.status == BTA_GATT_OK)
5564f6c9b4f68d152baf7aa029cbe9b570994584101Nitin Arora                btif_gatt_check_encrypted_link(p_data->open.remote_bda, p_data->open.transport);
557ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
558ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
559ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
560ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_CLOSE_EVT:
561ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
562ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bt_bdaddr_t bda;
563ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(bda.address, p_data->close.remote_bda);
564ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->close_cb, p_data->close.conn_id
565ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->status, p_data->close.client_if, &bda);
566ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
567ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
568ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
569ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_ACL_EVT:
570db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_DEBUG(LOG_TAG, "BTA_GATTC_ACL_EVT: status = %d", p_data->status);
571ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            /* Ignore for now */
572ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
573ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
574ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_CANCEL_OPEN_EVT:
575ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
576ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
577ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATT_OBSERVE_EVT:
578ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
57952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
580aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            uint8_t remote_name_len;
581aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            uint8_t *p_eir_remote_name=NULL;
5827fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bt_device_type_t dev_type;
5837fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bt_property_t properties;
584aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi
585a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson            p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
586aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                                         BTM_EIR_COMPLETE_LOCAL_NAME_TYPE, &remote_name_len);
587aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi
58816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (p_eir_remote_name == NULL)
589ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
590a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson                p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
591aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                                BT_EIR_SHORTENED_LOCAL_NAME_TYPE, &remote_name_len);
592aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            }
593aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi
594aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            if ((p_btif_cb->addr_type != BLE_ADDR_RANDOM) || (p_eir_remote_name))
595aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            {
596aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi               if (!btif_gattc_find_bdaddr(p_btif_cb->bd_addr.address))
597aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi               {
598aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                  btif_gattc_add_remote_bdaddr(p_btif_cb->bd_addr.address, p_btif_cb->addr_type);
599aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                  btif_gattc_update_properties(p_btif_cb);
600aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi               }
601ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
6027fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
603713993d1784ab7c23aee1fa3cf1ab8676cc0aa69Jakub Pawlowski             dev_type = (bt_device_type_t) p_btif_cb->device_type;
6047fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             BTIF_STORAGE_FILL_PROPERTY(&properties,
6057fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                        BT_PROPERTY_TYPE_OF_DEVICE, sizeof(dev_type), &dev_type);
6067fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             btif_storage_set_remote_device_property(&(p_btif_cb->bd_addr), &properties);
6077fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
6087b9fe757f5df8c529c506b1c41403f2f3f204f9eAndre Eisenbach            btif_storage_set_remote_addr_type( &p_btif_cb->bd_addr, p_btif_cb->addr_type);
6097b9fe757f5df8c529c506b1c41403f2f3f204f9eAndre Eisenbach
610ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->scan_result_cb,
611ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                      &p_btif_cb->bd_addr, p_btif_cb->rssi, p_btif_cb->value);
612ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
613ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
614ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
615ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_RSSI_EVT:
616ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
61752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
618ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->read_remote_rssi_cb, p_btif_cb->client_if,
619ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                      &p_btif_cb->bd_addr, p_btif_cb->rssi, p_btif_cb->status);
620ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
621ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
622ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
6235c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        case BTA_GATTC_LISTEN_EVT:
6245c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        {
6255c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->listen_cb
6265c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                , p_data->reg_oper.status
6275c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                , p_data->reg_oper.client_if
6285c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            );
6295c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            break;
6305c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        }
6319426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
6329426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        case BTA_GATTC_CFG_MTU_EVT:
6339426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        {
6349426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, p_data->cfg_mtu.conn_id
6359426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                , p_data->cfg_mtu.status , p_data->cfg_mtu.mtu);
6369426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            break;
6379426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        }
63817b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach
639a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_ENB_EVT:
640a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
64152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
64216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (0xFF != p_btif_cb->inst_id)
64316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                btif_multi_adv_add_instid_map(p_btif_cb->client_if, p_btif_cb->inst_id, false);
644a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_enable_cb
645a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    , p_btif_cb->client_if
646a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    , p_btif_cb->status
647a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                );
6489dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach            btif_multi_adv_timer_ctrl(p_btif_cb->client_if,
64978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                      (p_btif_cb->status == BTA_GATT_OK) ?
65078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                      btif_multi_adv_stop_cb : NULL);
651a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
652a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
653a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
654a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_UPD_EVT:
655a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
65652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
657a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_update_cb
658a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->client_if
659a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->status
660a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            );
6619dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach            btif_multi_adv_timer_ctrl(p_btif_cb->client_if,
66278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                      (p_btif_cb->status == BTA_GATT_OK) ?
66378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                      btif_multi_adv_stop_cb : NULL);
664a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
665a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
666a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
667a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_DATA_EVT:
668a6ce7751d84218c193eb90d390aef23217b1737eWei Wang         {
66952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
6703770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_clear_clientif(p_btif_cb->client_if, FALSE);
671a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_data_cb
672a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->client_if
673a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->status
674a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            );
675a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
676a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
677a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
678a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_DIS_EVT:
679a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
68052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
6813770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_clear_clientif(p_btif_cb->client_if, TRUE);
682a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_disable_cb
683a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->client_if
684a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->status
685a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            );
686a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
687a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
688a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
689a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_ADV_DATA_EVT:
690a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
6913770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_cleanup_inst_cb(STD_ADV_INSTID, FALSE);
692a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            /* No HAL callback available */
693a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
694a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
695a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
69617b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach        case BTA_GATTC_CONGEST_EVT:
69717b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->congestion_cb
69817b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach                , p_data->congest.conn_id
69917b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach                , p_data->congest.congested
70017b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach            );
70117b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach            break;
70217b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach
703c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_CFG_EVT:
704c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
70552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
706c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_cfg_storage_cb
707c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                , p_data->client_if
708c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                , p_data->status
709c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            );
710c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
711c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
712c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
713c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_ENB_EVT:
714c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
71552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
716c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_enb_disable_cb
717c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , ENABLE_BATCH_SCAN
718c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->client_if
719c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->status);
720c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
721c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
722c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
723c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_DIS_EVT:
724c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
72552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
726c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_enb_disable_cb
727c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , DISABLE_BATCH_SCAN
728c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->client_if
729c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->status);
730c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
731c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
732c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
733c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_THR_EVT:
734c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
73552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
736c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_threshold_cb
737c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->client_if);
738c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
739c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
740c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
741c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_RD_EVT:
742c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
74352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
744c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            uint8_t *p_rep_data = NULL;
745c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
746adb7bb50469db992969295792a7ba3b73f9e24b3Satya Calloji            if (p_data->read_reports.data_len > 0 && NULL != p_data->read_reports.p_rep_data)
747c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            {
748713993d1784ab7c23aee1fa3cf1ab8676cc0aa69Jakub Pawlowski                p_rep_data = (uint8_t *)osi_malloc(p_data->read_reports.data_len);
749c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                memcpy(p_rep_data, p_data->read_reports.p_rep_data, p_data->read_reports.data_len);
750c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            }
751c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
752c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_reports_cb
753c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->client_if, p_data->status, p_data->read_reports.report_format
754c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->read_reports.num_records, p_data->read_reports.data_len, p_rep_data);
755cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov            osi_free(p_rep_data);
756c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
757c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
758c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
7591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTA_GATTC_SCAN_FLT_CFG_EVT:
7601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
76152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_btif_cb = (btgatt_adv_filter_cb_t*) p_param;
7621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->scan_filter_cfg_cb, p_btif_cb->action,
7631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                      p_btif_cb->client_if, p_btif_cb->status, p_btif_cb->cond_op,
7641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                      p_btif_cb->avbl_space);
7651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
7661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
7671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
7681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTA_GATTC_SCAN_FLT_PARAM_EVT:
7691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
7701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            btgatt_adv_filter_cb_t *p_data = (btgatt_adv_filter_cb_t*) p_param;
7711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTIF_TRACE_DEBUG("BTA_GATTC_SCAN_FLT_PARAM_EVT: %d, %d, %d, %d",p_data->client_if,
7721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                p_data->action, p_data->avbl_space, p_data->status);
7731acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->scan_filter_param_cb
7741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    , p_data->action, p_data->client_if, p_data->status
7751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    , p_data->avbl_space);
7761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
7771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
7781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
7791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTA_GATTC_SCAN_FLT_STATUS_EVT:
7801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
7811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            btgatt_adv_filter_cb_t *p_data = (btgatt_adv_filter_cb_t*) p_param;
7821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTIF_TRACE_DEBUG("BTA_GATTC_SCAN_FLT_STATUS_EVT: %d, %d, %d",p_data->client_if,
7831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                p_data->action, p_data->status);
7841acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->scan_filter_status_cb
7851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    , p_data->action, p_data->client_if, p_data->status);
7861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
7871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
7881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
7891acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji        case BTA_GATTC_ADV_VSC_EVT:
7901acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji        {
791f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            btgatt_track_adv_info_t *p_data = (btgatt_track_adv_info_t*)p_param;
792f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            btgatt_track_adv_info_t adv_info_data;
793f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji
794f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            memset(&adv_info_data, 0, sizeof(btgatt_track_adv_info_t));
795f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji
796f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            btif_gatt_move_track_adv_data(&adv_info_data, p_data);
797f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            HAL_CBACK(bt_gatt_callbacks, client->track_adv_event_cb, &adv_info_data);
7981acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji            break;
7991acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji        }
8001acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji
801979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        case BTIF_GATTC_SCAN_PARAM_EVT:
802979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        {
803979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t *)p_param;
804979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->scan_parameter_setup_completed_cb,
805979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                      p_btif_cb->client_if, btif_gattc_translate_btm_status(p_btif_cb->status));
806979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            break;
807979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        }
808979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
809ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        default:
810db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_ERROR(LOG_TAG, "%s: Unhandled event (%d)!", __FUNCTION__, event);
811ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
812ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
8138444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
8148444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    btapp_gattc_free_req_data(event, p_data);
815ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
816ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
8176975b4d711142b885af479721cada448952c6b41Andre Eisenbachstatic void bta_gattc_cback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data)
818ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
819ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_status_t status = btif_transfer_context(btif_gattc_upstreams_evt,
820713993d1784ab7c23aee1fa3cf1ab8676cc0aa69Jakub Pawlowski                    (uint16_t) event, (char*) p_data, sizeof(tBTA_GATTC), btapp_gattc_req_data);
821ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    ASSERTC(status == BT_STATUS_SUCCESS, "Context transfer failed!", status);
822ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
823ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
824a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic void bta_gattc_multi_adv_cback(tBTA_BLE_MULTI_ADV_EVT event, UINT8 inst_id,
825a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                                    void *p_ref, tBTA_STATUS call_status)
826a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
827a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_cb_t btif_cb;
828a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    tBTA_GATTC_EVT upevt;
829a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    uint8_t client_if = 0;
830a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
83116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (NULL == p_ref)
832a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    {
83316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        BTIF_TRACE_WARNING("%s Invalid p_ref received",__FUNCTION__);
83416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
83516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    else
83616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
83716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        client_if = *(UINT8 *) p_ref;
838a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    }
839a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
840e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s -Inst ID %d, Status:%x, client_if:%d",__FUNCTION__,inst_id, call_status,
841a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                       client_if);
842a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.status = call_status;
843a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.client_if = client_if;
844a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.inst_id = inst_id;
845a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
846a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    switch(event)
847a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    {
848a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_ENB_EVT:
849a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_ENB_EVT;
850a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
851a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
852a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_DISABLE_EVT:
853a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_DIS_EVT;
854a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
855a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
856a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_PARAM_EVT:
857a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_UPD_EVT;
858a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
859a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
860a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_DATA_EVT:
861a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_DATA_EVT;
862a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
863a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
864a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        default:
865a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            return;
866a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    }
867a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
868a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    bt_status_t status = btif_transfer_context(btif_gattc_upstreams_evt, (uint16_t) upevt,
869a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
870a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    ASSERTC(status == BT_STATUS_SUCCESS, "Context transfer failed!", status);
871a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
872a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
873a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic void bta_gattc_set_adv_data_cback(tBTA_STATUS call_status)
874a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
875a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    UNUSED(call_status);
876a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_cb_t btif_cb;
877a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.status = call_status;
878a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.action = 0;
879a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_ADV_DATA_EVT,
880a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                          (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
881a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
882a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
883c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_setup_cb (tBTA_BLE_BATCH_SCAN_EVT evt,
884c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                            tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status)
885c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
886c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    UINT8 upevt = 0;
887c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t btif_scan_track_cb;
888c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
889c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.status = status;
890c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.client_if = ref_value;
8911a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("bta_batch_scan_setup_cb-Status:%x, client_if:%d, evt=%d",
892c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            status, ref_value, evt);
893c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
894c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    switch(evt)
895c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    {
896c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_ENB_EVT:
897c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
898c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_ENB_EVT;
899c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
900c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
901c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
902c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_DIS_EVT:
903c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
904c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_DIS_EVT;
905c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
906c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
907c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
908c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_CFG_STRG_EVT:
909c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
910c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_CFG_EVT;
911c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
912c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
913c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
914c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_DATA_EVT:
915c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
916c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_RD_EVT;
917c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
918c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
919c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
920c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_THRES_EVT:
921c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
922c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_THR_EVT;
923c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
924c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
925c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
926c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        default:
927c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            return;
928c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    }
929c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
930c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, upevt,(char*) &btif_scan_track_cb,
931c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                          sizeof(btgatt_batch_track_cb_t), NULL);
932c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
933c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
934c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
935c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_threshold_cb(tBTA_DM_BLE_REF_VALUE ref_value)
936c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
937c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t btif_scan_track_cb;
938c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.status = 0;
939c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.client_if = ref_value;
940c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
9411a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s - client_if:%d",__FUNCTION__, ref_value);
942c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
943c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_BTH_SCAN_THR_EVT,
944c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                          (char*) &btif_scan_track_cb, sizeof(btif_gattc_cb_t), NULL);
945c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
946c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
947c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_reports_cb(tBTA_DM_BLE_REF_VALUE ref_value, UINT8 report_format,
948c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                            UINT8 num_records, UINT16 data_len,
949c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                            UINT8* p_rep_data, tBTA_STATUS status)
950c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
951c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t btif_scan_track_cb;
952adb7bb50469db992969295792a7ba3b73f9e24b3Satya Calloji    memset(&btif_scan_track_cb, 0, sizeof(btgatt_batch_track_cb_t));
9531a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s - client_if:%d, %d, %d, %d",__FUNCTION__, ref_value, status, num_records,
954c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                    data_len);
955c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
956c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.status = status;
957c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
958c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.client_if = ref_value;
959c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.read_reports.report_format = report_format;
960c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.read_reports.data_len = data_len;
961c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.read_reports.num_records = num_records;
962c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
96316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (data_len > 0)
964c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    {
965713993d1784ab7c23aee1fa3cf1ab8676cc0aa69Jakub Pawlowski        btif_scan_track_cb.read_reports.p_rep_data = (UINT8 *)osi_malloc(data_len);
966c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        memcpy(btif_scan_track_cb.read_reports.p_rep_data, p_rep_data, data_len);
967cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov        osi_free(p_rep_data);
968c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    }
969c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
970c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_BTH_SCAN_RD_EVT,
971c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        (char*) &btif_scan_track_cb, sizeof(btgatt_batch_track_cb_t), NULL);
972c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
97316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (data_len > 0)
974cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov        osi_free_and_reset((void **)&btif_scan_track_cb.read_reports.p_rep_data);
975c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
976c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
9776975b4d711142b885af479721cada448952c6b41Andre Eisenbachstatic void bta_scan_results_cb (tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH *p_data)
978ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
979ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
980ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t len;
981ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
982ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    switch (event)
983ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
984ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_DM_INQ_RES_EVT:
985ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
986ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(btif_cb.bd_addr.address, p_data->inq_res.bd_addr);
987ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_cb.device_type = p_data->inq_res.device_type;
988ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_cb.rssi = p_data->inq_res.rssi;
989ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_cb.addr_type = p_data->inq_res.ble_addr_type;
9907fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            btif_cb.flag = p_data->inq_res.flag;
991ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_data->inq_res.p_eir)
992ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
993ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                memcpy(btif_cb.value, p_data->inq_res.p_eir, 62);
994a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson                if (BTM_CheckEirData(p_data->inq_res.p_eir, BTM_EIR_COMPLETE_LOCAL_NAME_TYPE,
995ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                      &len))
996ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                {
997ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    p_data->inq_res.remt_name_not_required  = TRUE;
998ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                }
999ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
1000ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1001ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        break;
1002ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1003ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_DM_INQ_CMPL_EVT:
1004ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
1005e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("%s  BLE observe complete. Num Resp %d",
1006ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                              __FUNCTION__,p_data->inq_cmpl.num_resps);
1007ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            return;
1008ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1009ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1010ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        default:
1011e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_WARNING("%s : Unknown event 0x%x", __FUNCTION__, event);
1012ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return;
1013ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1014ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATT_OBSERVE_EVT,
1015ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1016ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1017ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1018f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Callojistatic void bta_track_adv_event_cb(tBTA_DM_BLE_TRACK_ADV_DATA *p_track_adv_data)
10191acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji{
1020f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btgatt_track_adv_info_t btif_scan_track_cb;
1021f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    BTIF_TRACE_DEBUG("%s",__FUNCTION__);
1022f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_gatt_move_track_adv_data(&btif_scan_track_cb,
1023f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji                (btgatt_track_adv_info_t*)p_track_adv_data);
1024f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji
10251acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_ADV_VSC_EVT,
1026f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji                          (char*) &btif_scan_track_cb, sizeof(btgatt_track_adv_info_t), NULL);
10271acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji}
10281acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji
1029ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btm_read_rssi_cb (tBTM_RSSI_RESULTS *p_result)
1030ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1031ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1032ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1033ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, p_result->rem_bda);
1034ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.rssi = p_result->rssi;
1035ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.status = p_result->status;
1036ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = rssi_request_client_if;
1037ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATTC_RSSI_EVT,
1038ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1039ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1040ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1041979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbachstatic void bta_scan_param_setup_cb(tGATT_IF client_if, tBTM_STATUS status)
1042979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach{
1043979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_gattc_cb_t btif_cb;
1044979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
1045979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_cb.status = status;
1046979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_cb.client_if = client_if;
1047979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATTC_SCAN_PARAM_EVT,
1048979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                          (char *)&btif_cb, sizeof(btif_gattc_cb_t), NULL);
1049979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach}
1050979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
10511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_cfg_cb(tBTA_DM_BLE_PF_ACTION action, tBTA_DM_BLE_SCAN_COND_OP cfg_op,
10521a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, tBTA_STATUS status,
10531a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                tBTA_DM_BLE_REF_VALUE ref_value)
1054b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
10551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_cb;
1056b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    btif_cb.status = status;
10571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.action = action;
10581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.cond_op = cfg_op;
10591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.avbl_space = avbl_space;
10601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.client_if = ref_value;
10611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_CFG_EVT,
10621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                          (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
10631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
10641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
10651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_param_setup_cb(UINT8 action_type,
10661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                        tBTA_DM_BLE_PF_AVBL_SPACE avbl_space,
10671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                        tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status)
10681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
10691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_cb;
10701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
10711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.status = status;
10721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.action = action_type;
10731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.client_if = ref_value;
10741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.avbl_space = avbl_space;
10751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_PARAM_EVT,
10761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                          (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
10771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
10781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
10791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_status_cb(UINT8 action, tBTA_STATUS status,
10801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                    tBTA_DM_BLE_REF_VALUE ref_value)
10811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
10821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_cb;
10831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
10841a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.status = status;
10851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.action = action;
10861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.client_if = ref_value;
10871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_STATUS_EVT,
10881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                          (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
1089b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
1090ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1091ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btgattc_handle_event(uint16_t event, char* p_param)
1092ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1093ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATT_STATUS           status;
1094ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBT_UUID                   uuid;
1095ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATT_UNFMT            descr_val;
1096ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
109752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_gattc_cb_t* p_cb = (btif_gattc_cb_t*) p_param;
109852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    if (!p_cb) return;
1099ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1100db554581079863974af8e1289646f5deea6fc044Marie Janssen    LOG_VERBOSE(LOG_TAG, "%s: Event %d", __FUNCTION__, event);
1101ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1102ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    switch (event)
1103ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
1104ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_REGISTER_APP:
1105ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_uuid(&uuid, &p_cb->uuid);
1106b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji            btif_gattc_incr_app_count();
11076975b4d711142b885af479721cada448952c6b41Andre Eisenbach            BTA_GATTC_AppRegister(&uuid, bta_gattc_cback);
1108ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1109ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1110ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_UNREGISTER_APP:
11113770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_clear_clientif(p_cb->client_if, TRUE);
1112b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji            btif_gattc_decr_app_count();
1113ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_AppDeregister(p_cb->client_if);
1114ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1115ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1116ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_SCAN_START:
1117ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_gattc_init_dev_cb();
11186975b4d711142b885af479721cada448952c6b41Andre Eisenbach            BTA_DmBleObserve(TRUE, 0, bta_scan_results_cb);
1119ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1120ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1121ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_SCAN_STOP:
1122ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_DmBleObserve(FALSE, 0, 0);
1123ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1124ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1125ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_OPEN:
1126306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach        {
1127306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            // Ensure device is in inquiry database
1128306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            int addr_type = 0;
1129306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            int device_type = 0;
11307fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            tBTA_GATT_TRANSPORT transport = BTA_GATT_TRANSPORT_LE;
1131306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach
113286f97eda524568f2d264186844450db5e56dac36Matthew Xie            if (btif_get_address_type(p_cb->bd_addr.address, &addr_type) &&
113386f97eda524568f2d264186844450db5e56dac36Matthew Xie                btif_get_device_type(p_cb->bd_addr.address, &device_type) &&
113486f97eda524568f2d264186844450db5e56dac36Matthew Xie                device_type != BT_DEVICE_TYPE_BREDR)
113586f97eda524568f2d264186844450db5e56dac36Matthew Xie            {
1136306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach                BTA_DmAddBleDevice(p_cb->bd_addr.address, addr_type, device_type);
113786f97eda524568f2d264186844450db5e56dac36Matthew Xie            }
1138306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach
11396ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji            // Check for background connections
1140ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (!p_cb->is_direct)
1141a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach            {
11426ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                // Check for privacy 1.0 and 1.1 controller and do not start background
11436ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                // connection if RPA offloading is not supported, since it will not
11446ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                // connect after change of random address
11456ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                if (!controller_get_interface()->supports_ble_privacy() &&
11466ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                   (p_cb->addr_type == BLE_ADDR_RANDOM) &&
11476ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                   BTM_BLE_IS_RESOLVE_BDA(p_cb->bd_addr.address))
1148a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                {
1149a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    tBTM_BLE_VSC_CB vnd_capabilities;
1150a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    BTM_BleGetVendorCapabilities(&vnd_capabilities);
1151a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    if (!vnd_capabilities.rpa_offloading)
1152a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    {
1153a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                        HAL_CBACK(bt_gatt_callbacks, client->open_cb, 0, BT_STATUS_UNSUPPORTED,
1154a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                                        p_cb->client_if, &p_cb->bd_addr);
1155a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                        return;
1156a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    }
1157a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                }
1158ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_DmBleSetBgConnType(BTM_BLE_CONN_AUTO, NULL);
1159a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach            }
1160ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1161d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan            // Determine transport
1162d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan            if (p_cb->transport != GATT_TRANSPORT_AUTO)
11637fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            {
1164d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                transport = p_cb->transport;
1165d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan            } else {
1166d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                switch(device_type)
1167d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                {
1168d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                    case BT_DEVICE_TYPE_BREDR:
1169d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        transport = BTA_GATT_TRANSPORT_BR_EDR;
1170d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        break;
11717fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
1172d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                    case BT_DEVICE_TYPE_BLE:
11737fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                        transport = BTA_GATT_TRANSPORT_LE;
1174d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        break;
1175d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan
1176d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                    case BT_DEVICE_TYPE_DUMO:
1177d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        if (p_cb->transport == GATT_TRANSPORT_LE)
1178d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                            transport = BTA_GATT_TRANSPORT_LE;
1179d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        else
1180d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                            transport = BTA_GATT_TRANSPORT_BR_EDR;
1181d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        break;
1182d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                }
11837fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            }
11847fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
1185306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            // Connect!
1186d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan            BTIF_TRACE_DEBUG ("%s Transport=%d, device type=%d",
1187d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                                __func__, transport, device_type);
11887fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            BTA_GATTC_Open(p_cb->client_if, p_cb->bd_addr.address, p_cb->is_direct, transport);
1189ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1190306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach        }
1191ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1192ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_CLOSE:
11936975b4d711142b885af479721cada448952c6b41Andre Eisenbach            // Disconnect established connections
1194ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_cb->conn_id != 0)
1195ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_Close(p_cb->conn_id);
1196ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            else
1197ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_CancelOpen(p_cb->client_if, p_cb->bd_addr.address, TRUE);
1198ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1199ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            // Cancel pending background connections (remove from whitelist)
1200ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_CancelOpen(p_cb->client_if, p_cb->bd_addr.address, FALSE);
1201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1202ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1203ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_SEARCH_SERVICE:
1204ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
1205ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_cb->search_all)
1206ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
1207ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_ServiceSearchRequest(p_cb->conn_id, NULL);
1208ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            } else {
1209ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                btif_to_bta_uuid(&uuid, &p_cb->uuid);
1210ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_ServiceSearchRequest(p_cb->conn_id, &uuid);
1211ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
1212ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1213ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1214ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1215533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski        case BTIF_GATTC_GET_GATT_DB:
1216533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski        {
1217533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            btgatt_db_element_t *db = NULL;
1218533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            int count = 0;
12199fd552b1f51c1313e801592f271376c7af62b2f4Jakub Pawlowski            BTA_GATTC_GetGattDb(p_cb->conn_id, 0x0000, 0xFFFF, &db, &count);
1220533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
1221533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            HAL_CBACK(bt_gatt_callbacks, client->get_gatt_db_cb,
1222533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski                p_cb->conn_id, db, count);
1223533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            osi_free(db);
1224533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            break;
1225533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski        }
1226533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
1227ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_WRITE_CHAR:
12289dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            BTA_GATTC_WriteCharValue(p_cb->conn_id, p_cb->handle, p_cb->write_type,
12299dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                                     p_cb->len, p_cb->value, p_cb->auth_req);
1230ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1231ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1232ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_WRITE_CHAR_DESCR:
1233ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            descr_val.len = p_cb->len;
1234ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            descr_val.p_value = p_cb->value;
1235ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
12369dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            BTA_GATTC_WriteCharDescr(p_cb->conn_id, p_cb->handle,
1237ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->write_type, &descr_val,
1238ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->auth_req);
1239ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1240ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1241ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_EXECUTE_WRITE:
1242ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_ExecuteWrite(p_cb->conn_id, p_cb->action);
1243ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1244ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1245ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_REG_FOR_NOTIFICATION:
1246ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            status = BTA_GATTC_RegisterForNotifications(p_cb->client_if,
12479dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                                    p_cb->bd_addr.address, p_cb->handle);
1248ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1249ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->register_for_notification_cb,
12509dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                p_cb->conn_id, 1, status, p_cb->handle);
1251ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1252ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1253ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_DEREG_FOR_NOTIFICATION:
1254ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            status = BTA_GATTC_DeregisterForNotifications(p_cb->client_if,
12559dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                                        p_cb->bd_addr.address, p_cb->handle);
1256ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1257ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->register_for_notification_cb,
12589dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                p_cb->conn_id, 0, status, p_cb->handle);
1259ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1260ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1261ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_READ_RSSI:
1262ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            rssi_request_client_if = p_cb->client_if;
1263ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTM_ReadRSSI (p_cb->bd_addr.address, (tBTM_CMPL_CB *)btm_read_rssi_cb);
1264ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1265ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
12661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTIF_GATTC_SCAN_FILTER_PARAM_SETUP:
12671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
126852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
126916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (1 == p_adv_filt_cb->adv_filt_param.dely_mode)
12701acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji               BTA_DmBleTrackAdvertiser(p_adv_filt_cb->client_if, bta_track_adv_event_cb);
12711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTA_DmBleScanFilterSetup(p_adv_filt_cb->action, p_adv_filt_cb->filt_index,
12721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                &p_adv_filt_cb->adv_filt_param, NULL, bta_scan_filt_param_setup_cb,
12731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                p_adv_filt_cb->client_if);
1274b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            break;
12751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
1276b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1277b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        case BTIF_GATTC_SCAN_FILTER_CONFIG:
1278b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        {
127952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
1280b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            tBTA_DM_BLE_PF_COND_PARAM cond;
1281b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            memset(&cond, 0, sizeof(cond));
1282b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
12831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            switch (p_adv_filt_cb->filt_type)
1284b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            {
1285b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_ADDR_FILTER: // 0
12861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    bdcpy(cond.target_addr.bda, p_adv_filt_cb->bd_addr.address);
12871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.target_addr.type = p_adv_filt_cb->addr_type;
12881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
12891a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
12901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
12911a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1292b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1293b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1294b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_SRVC_DATA: // 1
12951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
12961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                            p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
12971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                            NULL, bta_scan_filt_cfg_cb, p_adv_filt_cb->client_if);
1298b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1299b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1300b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_SRVC_UUID: // 2
1301b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
1302b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    tBTA_DM_BLE_PF_COND_MASK uuid_mask;
1303b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1304b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.srvc_uuid.p_target_addr = NULL;
1305b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.srvc_uuid.cond_logic = BTA_DM_BLE_PF_LOGIC_AND;
13061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    btif_to_bta_uuid(&cond.srvc_uuid.uuid, &p_adv_filt_cb->uuid);
1307b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1308b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.srvc_uuid.p_uuid_mask = NULL;
13091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    if (p_adv_filt_cb->has_mask)
1310b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    {
13111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                        btif_to_bta_uuid_mask(&uuid_mask, &p_adv_filt_cb->uuid_mask);
1312b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                        cond.srvc_uuid.p_uuid_mask = &uuid_mask;
1313b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    }
13141a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
13171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1318b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1319b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1320b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1321b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_SRVC_SOL_UUID: // 3
1322b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
1323b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.solicitate_uuid.p_target_addr = NULL;
1324b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.solicitate_uuid.cond_logic = BTA_DM_BLE_PF_LOGIC_AND;
13251a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    btif_to_bta_uuid(&cond.solicitate_uuid.uuid, &p_adv_filt_cb->uuid);
13261a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13271a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13281a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
13291a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1330b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1331b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1332b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1333b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_LOCAL_NAME: // 4
1334b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
13351a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.local_name.data_len = p_adv_filt_cb->value_len;
13361a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.local_name.p_data = p_adv_filt_cb->value;
13371a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13381a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13391a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
13401a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1341b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1342b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1343b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1344b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_MANU_DATA: // 5
1345b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
13461a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.company_id = p_adv_filt_cb->conn_id;
13471a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.company_id_mask = p_adv_filt_cb->company_id_mask;
13481a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.data_len = p_adv_filt_cb->value_len;
13491a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.p_pattern = p_adv_filt_cb->value;
13501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.p_pattern_mask = p_adv_filt_cb->value_mask;
13511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13521a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13531a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
13541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1355b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1356b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1357b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
13581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                case BTA_DM_BLE_PF_SRVC_DATA_PATTERN: //6
13591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                {
13601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.srvc_data.data_len = p_adv_filt_cb->value_len;
13611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.srvc_data.p_pattern = p_adv_filt_cb->value;
13621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.srvc_data.p_pattern_mask = p_adv_filt_cb->value_mask;
13631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                                p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                                &cond, bta_scan_filt_cfg_cb,
13661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                                p_adv_filt_cb->client_if);
13671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   break;
13681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                }
13691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
1370b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                default:
1371db554581079863974af8e1289646f5deea6fc044Marie Janssen                    LOG_ERROR(LOG_TAG, "%s: Unknown filter type (%d)!", __FUNCTION__, p_cb->action);
1372b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1373b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            }
1374b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            break;
1375b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        }
1376b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1377b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        case BTIF_GATTC_SCAN_FILTER_CLEAR:
1378b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        {
137952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
1380b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            BTA_DmBleCfgFilterCondition(BTA_DM_BLE_SCAN_COND_CLEAR, BTA_DM_BLE_PF_TYPE_ALL,
13816e2d9db5148176d88d7f48c3b2ad5b27c57ca14dSatya Calloji                                        p_adv_filt_cb->filt_index, NULL, bta_scan_filt_cfg_cb,
13826e2d9db5148176d88d7f48c3b2ad5b27c57ca14dSatya Calloji                                        p_adv_filt_cb->client_if);
13831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
13841a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
13851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
13861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTIF_GATTC_SCAN_FILTER_ENABLE:
13871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
138852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
13891a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTA_DmEnableScanFilter(p_adv_filt_cb->action, bta_scan_filt_status_cb,
13901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                   p_adv_filt_cb->client_if);
1391b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            break;
1392b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        }
1393b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
13945c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        case BTIF_GATTC_LISTEN:
1395602162a13c6ed8abae53aee6deeda48b79f30911Zhihai Xu#if (defined(BLE_PERIPHERAL_MODE_SUPPORT) && (BLE_PERIPHERAL_MODE_SUPPORT == TRUE))
13965c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            BTA_GATTC_Listen(p_cb->client_if, p_cb->start, NULL);
1397eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach#else
1398a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach            BTA_GATTC_Broadcast(p_cb->client_if, p_cb->start);
1399eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach#endif
14005c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            break;
14015c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
14025c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        case BTIF_GATTC_SET_ADV_DATA:
14035c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        {
14040d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            const btif_adv_data_t *p_adv_data = (btif_adv_data_t*) p_param;
14050d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            const int cbindex = CLNT_IF_IDX;
14060d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            if (cbindex >= 0 && btif_gattc_copy_datacb(cbindex, p_adv_data, false))
1407a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            {
1408a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb();
1409a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                if (!p_adv_data->set_scan_rsp)
1410a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                {
1411a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    BTA_DmBleSetAdvConfig(p_multi_adv_data_cb->inst_cb[cbindex].mask,
1412a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        &p_multi_adv_data_cb->inst_cb[cbindex].data, bta_gattc_set_adv_data_cback);
1413a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                }
1414a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                else
1415a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                {
1416a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    BTA_DmBleSetScanRsp(p_multi_adv_data_cb->inst_cb[cbindex].mask,
1417a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        &p_multi_adv_data_cb->inst_cb[cbindex].data, bta_gattc_set_adv_data_cback);
1418a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                }
1419a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            }
14200d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            else
14210d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            {
14220d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                BTIF_TRACE_ERROR("%s:%s: failed to get instance data cbindex: %d",
14230d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                                 __func__, "BTIF_GATTC_SET_ADV_DATA", cbindex);
14240d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            }
14250d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            break;
1426a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1427a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1428a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_ENABLE:
1429a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
143052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param;
143116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
143216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            int cbindex = -1, arrindex = -1;
143316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
143416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            arrindex = btif_multi_adv_add_instid_map(p_inst_cb->client_if,INVALID_ADV_INST, true);
143516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (arrindex >= 0)
143616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                cbindex = btif_gattc_obtain_idx_for_datacb(p_inst_cb->client_if, CLNT_IF_IDX);
143716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
143816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (cbindex >= 0 && arrindex >= 0)
1439a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            {
1440a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb();
1441a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                memcpy(&p_multi_adv_data_cb->inst_cb[cbindex].param,
1442a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                       &p_inst_cb->param, sizeof(tBTA_BLE_ADV_PARAMS));
1443cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach                p_multi_adv_data_cb->inst_cb[cbindex].timeout_s = p_inst_cb->timeout_s;
144416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                BTIF_TRACE_DEBUG("%s, client_if value: %d", __FUNCTION__,
144516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                            p_multi_adv_data_cb->clntif_map[arrindex + arrindex]);
1446a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                BTA_BleEnableAdvInstance(&(p_multi_adv_data_cb->inst_cb[cbindex].param),
1447a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    bta_gattc_multi_adv_cback,
144816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                    &(p_multi_adv_data_cb->clntif_map[arrindex + arrindex]));
1449a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            }
14505c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            else
145116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            {
145216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                /* let the error propagate up from BTA layer */
1453e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("%s invalid index in BTIF_GATTC_ENABLE_ADV",__FUNCTION__);
145416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                BTA_BleEnableAdvInstance(&p_inst_cb->param, bta_gattc_multi_adv_cback, NULL);
145516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            }
1456a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
1457a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1458eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
1459a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_UPDATE:
1460a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
146152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param;
1462a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int inst_id = btif_multi_adv_instid_for_clientif(p_inst_cb->client_if);
1463a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int cbindex = btif_gattc_obtain_idx_for_datacb(p_inst_cb->client_if, CLNT_IF_IDX);
146416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (inst_id >= 0 && cbindex >= 0 && NULL != p_inst_cb)
1465a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            {
1466a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb();
1467a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                memcpy(&p_multi_adv_data_cb->inst_cb[cbindex].param, &p_inst_cb->param,
1468a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        sizeof(tBTA_BLE_ADV_PARAMS));
1469a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                BTA_BleUpdateAdvInstParam((UINT8)inst_id,
1470a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    &(p_multi_adv_data_cb->inst_cb[cbindex].param));
1471a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            }
1472a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            else
1473e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("%s invalid index in BTIF_GATTC_UPDATE_ADV", __FUNCTION__);
1474a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
1475a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1476a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1477a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_SET_DATA:
1478a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
147952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_adv_data_t *p_adv_data = (btif_adv_data_t*) p_param;
1480a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int cbindex = btif_gattc_obtain_idx_for_datacb(p_adv_data->client_if, CLNT_IF_IDX);
1481a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int inst_id = btif_multi_adv_instid_for_clientif(p_adv_data->client_if);
14820d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            if (inst_id >= 0 && cbindex >= 0 && btif_gattc_copy_datacb(cbindex, p_adv_data, true))
1483eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach            {
14840d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                btgatt_multi_adv_common_data *p_multi_adv_data_cb =
14850d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    btif_obtain_multi_adv_data_cb();
14860d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                BTA_BleCfgAdvInstData(
14870d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    (UINT8)inst_id,
1488d4c103624b3d7672110abeb753ed79113ee48989Ian Coolidge                    p_adv_data->set_scan_rsp,
14890d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    p_multi_adv_data_cb->inst_cb[cbindex].mask,
14900d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    &p_multi_adv_data_cb->inst_cb[cbindex].data);
14910d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            }
14920d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            else
14930d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            {
14940d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                BTIF_TRACE_ERROR(
14950d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    "%s:%s: failed to get invalid instance data: inst_id:%d "
14960d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    "cbindex:%d",
14970d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    __func__, "BTIF_GATTC_ADV_INSTANCE_SET_DATA", inst_id, cbindex);
1498eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach            }
1499a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
1500a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1501a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1502a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_DISABLE:
1503a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
150452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param;
1505a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int inst_id = btif_multi_adv_instid_for_clientif(p_inst_cb->client_if);
150616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (inst_id >=0)
1507a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                BTA_BleDisableAdvInstance((UINT8)inst_id);
1508a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            else
1509e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("%s invalid instance ID in BTIF_GATTC_DISABLE_ADV",__FUNCTION__);
15105c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            break;
15115c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        }
1512a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
15139426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        case BTIF_GATTC_CONFIGURE_MTU:
15149426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            BTA_GATTC_ConfigureMTU(p_cb->conn_id, p_cb->len);
15159426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            break;
15165c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
151752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach        case BTIF_GATTC_CONN_PARAM_UPDT:
151852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach        {
151952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_conn_param_cb_t *p_conn_param_cb = (btif_conn_param_cb_t*) p_param;
152052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            if (BTA_DmGetConnectionState(p_conn_param_cb->bd_addr.address))
152152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            {
152252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                BTA_DmBleUpdateConnectionParams(p_conn_param_cb->bd_addr.address,
152352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->min_interval, p_conn_param_cb->max_interval,
152452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->latency, p_conn_param_cb->timeout);
152552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            } else {
152652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                BTA_DmSetBlePrefConnParams(p_conn_param_cb->bd_addr.address,
152752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->min_interval, p_conn_param_cb->max_interval,
152852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->latency, p_conn_param_cb->timeout);
152952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            }
153052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            break;
153152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach        }
153252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach
15337d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham        case BTIF_GATTC_SET_SCAN_PARAMS:
1534979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        {
1535979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            BTA_DmSetBleScanParams(p_cb->client_if, p_cb->scan_interval, p_cb->scan_window,
1536979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                                   BTM_BLE_SCAN_MODE_ACTI, bta_scan_param_setup_cb);
15377d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham            break;
1538979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        }
15397d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham
1540c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_CONFIG_STORAGE_PARAMS:
1541c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
154252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1543c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleSetStorageParams(p_scan_track_cb->batch_scan_full_max,
1544c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               p_scan_track_cb->batch_scan_trunc_max, p_scan_track_cb->batch_scan_notify_threshold,
1545c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               bta_batch_scan_setup_cb, bta_batch_scan_threshold_cb, bta_batch_scan_reports_cb,
154652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach               (tBTA_DM_BLE_REF_VALUE) p_scan_track_cb->client_if);
1547c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1548c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1549c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1550c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_ENABLE_BATCH_SCAN:
1551c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
155252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1553c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleEnableBatchScan(p_scan_track_cb->scan_mode, p_scan_track_cb->scan_interval,
1554c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               p_scan_track_cb->scan_window, p_scan_track_cb->discard_rule,
1555c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               p_scan_track_cb->addr_type, p_scan_track_cb->client_if);
1556c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1557c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1558c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1559c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_DISABLE_BATCH_SCAN:
1560c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
156152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1562c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleDisableBatchScan(p_scan_track_cb->client_if);
1563c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1564c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1565c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1566c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_READ_BATCH_SCAN_REPORTS:
1567c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
156852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1569c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleReadScanReports(p_scan_track_cb->scan_mode, p_scan_track_cb->client_if);
1570c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1571c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1572c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1573ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        default:
1574db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_ERROR(LOG_TAG, "%s: Unknown event (%d)!", __FUNCTION__, event);
1575ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1576ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1577ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1578ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1579ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
1580ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Client API Functions
1581ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
1582ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1583ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_register_app(bt_uuid_t *uuid)
1584ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1585ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1586ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1587ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.uuid, uuid, sizeof(bt_uuid_t));
1588ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REGISTER_APP,
1589ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1590ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1591ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1592ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_unregister_app(int client_if )
1593ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1594ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1595ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1596ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1597ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_UNREGISTER_APP,
1598ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1599ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1600ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
16017d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadhamstatic bt_status_t btif_gattc_scan( bool start )
1602ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1603ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1604ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1605ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, start ? BTIF_GATTC_SCAN_START : BTIF_GATTC_SCAN_STOP,
1606ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1607ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1608ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
16097fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battastatic bt_status_t btif_gattc_open(int client_if, const bt_bdaddr_t *bd_addr,
16107fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                        bool is_direct,int transport)
1611ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1612ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1613ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1614ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1615ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.is_direct = is_direct ? 1 : 0;
16167fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    btif_cb.transport = (btgatt_transport_t)transport;
1617ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
1618ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_OPEN,
1619ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1620ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1621ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1622ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_close( int client_if, const bt_bdaddr_t *bd_addr, int conn_id)
1623ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1624ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1625ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1626ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1627ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1628ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
1629ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CLOSE,
1630ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1631ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1632ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
16335c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachstatic bt_status_t btif_gattc_listen(int client_if, bool start)
16345c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
16355c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    CHECK_BTGATT_INIT();
16365c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_gattc_cb_t btif_cb;
16375c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_cb.client_if = (uint8_t) client_if;
16385c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_cb.start = start ? 1 : 0;
16395c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_LISTEN,
16405c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
16415c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
16425c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
16435c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachstatic bt_status_t btif_gattc_set_adv_data(int client_if, bool set_scan_rsp, bool include_name,
16445c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                bool include_txpower, int min_interval, int max_interval, int appearance,
1645eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach                uint16_t manufacturer_len, char* manufacturer_data,
1646eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach                uint16_t service_data_len, char* service_data,
1647eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach                uint16_t service_uuid_len, char* service_uuid)
16485c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
16495c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    CHECK_BTGATT_INIT();
1650a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_adv_data_t adv_data;
1651eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
1652a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_adv_data_packager(client_if, set_scan_rsp, include_name,
1653a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        include_txpower, min_interval, max_interval, appearance, manufacturer_len,
1654a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        manufacturer_data, service_data_len, service_data, service_uuid_len, service_uuid,
1655a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        &adv_data);
1656eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
16570d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    bt_status_t status = btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SET_ADV_DATA,
16581668d204a0da63609fa1affcc86de9b76d0a0f48Jakub Pawlowski                       (char*) &adv_data, sizeof(adv_data), NULL);
1659a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return status;
16605c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
16615c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
1662140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowskistatic bt_status_t btif_gattc_refresh(int client_if,
1663140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski                                      const bt_bdaddr_t *bd_addr) {
1664140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski  CHECK_BTGATT_INIT();
1665140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski  // Closure will own this value and free it.
1666140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski  uint8_t *address = new BD_ADDR;
1667140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski  bdcpy(address, bd_addr->address);
1668140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski  return do_in_jni_thread(Bind(&BTA_GATTC_Refresh, base::Owned(address)));
1669ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1670ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1671ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_search_service(int conn_id, bt_uuid_t *filter_uuid )
1672ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1673ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1674ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1675ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1676ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.search_all = filter_uuid ? 0 : 1;
1677ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (filter_uuid)
1678ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memcpy(&btif_cb.uuid, filter_uuid, sizeof(bt_uuid_t));
1679ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SEARCH_SERVICE,
1680ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1681ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1682ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1683533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowskistatic bt_status_t btif_gattc_get_gatt_db(int conn_id)
1684533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski{
1685533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    CHECK_BTGATT_INIT();
1686533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    btif_gattc_cb_t btif_cb;
1687533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    btif_cb.conn_id = (uint16_t) conn_id;
1688533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
1689533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_GATT_DB,
1690533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1691533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski}
1692533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
169361a112e488a7686e5cc9680434c42895ef9db878Jakub Pawlowskistatic bt_status_t btif_gattc_read_char(int conn_id, uint16_t handle,
169461a112e488a7686e5cc9680434c42895ef9db878Jakub Pawlowski                                        int auth_req) {
169561a112e488a7686e5cc9680434c42895ef9db878Jakub Pawlowski  CHECK_BTGATT_INIT();
169661a112e488a7686e5cc9680434c42895ef9db878Jakub Pawlowski  return do_in_jni_thread(
169761a112e488a7686e5cc9680434c42895ef9db878Jakub Pawlowski      Bind(&BTA_GATTC_ReadCharacteristic, conn_id, handle, auth_req));
1698ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1699ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
170061a112e488a7686e5cc9680434c42895ef9db878Jakub Pawlowskistatic bt_status_t btif_gattc_read_char_descr(int conn_id, uint16_t handle,
170161a112e488a7686e5cc9680434c42895ef9db878Jakub Pawlowski                                              int auth_req) {
170261a112e488a7686e5cc9680434c42895ef9db878Jakub Pawlowski  CHECK_BTGATT_INIT();
170361a112e488a7686e5cc9680434c42895ef9db878Jakub Pawlowski  return do_in_jni_thread(
170461a112e488a7686e5cc9680434c42895ef9db878Jakub Pawlowski      Bind(&BTA_GATTC_ReadCharDescr, conn_id, handle, auth_req));
1705ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1706ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
17079dc998503590163068845827d951fc2f05a17bdaJakub Pawlowskistatic bt_status_t btif_gattc_write_char(int conn_id, uint16_t handle, int write_type,
1708ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                         int len, int auth_req, char* p_value)
1709ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1710ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1711ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1712ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
17139dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    btif_cb.handle = (uint16_t) handle;
1714ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
1715ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.write_type = (uint8_t) write_type;
1716ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.len = len > BTGATT_MAX_ATTR_LEN ? BTGATT_MAX_ATTR_LEN : len;
1717ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(btif_cb.value, p_value, btif_cb.len);
1718ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_WRITE_CHAR,
1719ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1720ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1721ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
17229dc998503590163068845827d951fc2f05a17bdaJakub Pawlowskistatic bt_status_t btif_gattc_write_char_descr(int conn_id, uint16_t handle,
1723ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                               int write_type, int len, int auth_req,
1724ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                               char* p_value)
1725ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1726ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1727ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1728ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
17299dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    btif_cb.handle = (uint16_t) handle;
1730ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
1731ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.write_type = (uint8_t) write_type;
1732ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.len = len > BTGATT_MAX_ATTR_LEN ? BTGATT_MAX_ATTR_LEN : len;
1733ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(btif_cb.value, p_value, btif_cb.len);
1734ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_WRITE_CHAR_DESCR,
1735ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1736ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1737ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1738ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_execute_write(int conn_id, int execute)
1739ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1740ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1741ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1742ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1743ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.action = (uint8_t) execute;
1744ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_EXECUTE_WRITE,
1745ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1746ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1747ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1748ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_reg_for_notification(int client_if, const bt_bdaddr_t *bd_addr,
17499dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                                                   uint16_t handle)
1750ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1751ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1752ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1753ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1754ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
17559dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    btif_cb.handle = handle;
1756ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REG_FOR_NOTIFICATION,
1757ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1758ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1759ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1760ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_dereg_for_notification(int client_if, const bt_bdaddr_t *bd_addr,
17619dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                                                     uint16_t handle)
1762ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1763ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1764ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1765ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1766ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
17679dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    btif_cb.handle = handle;
1768ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_DEREG_FOR_NOTIFICATION,
1769ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1770ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1771ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1772ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_read_remote_rssi(int client_if, const bt_bdaddr_t *bd_addr)
1773ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1774ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1775ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1776ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1777ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
1778ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_RSSI,
1779ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1780ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1781ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
17829426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbachstatic bt_status_t btif_gattc_configure_mtu(int conn_id, int mtu)
17839426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach{
17849426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    CHECK_BTGATT_INIT();
17859426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_gattc_cb_t btif_cb;
17869426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_cb.conn_id = conn_id;
17879426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_cb.len = mtu; // Re-use len field
17889426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONFIGURE_MTU,
17899426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
17909426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach}
17919426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
179252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbachstatic bt_status_t btif_gattc_conn_parameter_update(const bt_bdaddr_t *bd_addr, int min_interval,
179352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                    int max_interval, int latency, int timeout)
179452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach{
179552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    CHECK_BTGATT_INIT();
179652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_conn_param_cb_t btif_cb;
179752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.min_interval = min_interval;
179852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.max_interval = max_interval;
179952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.latency = latency;
180052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.timeout = timeout;
180152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
180252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONN_PARAM_UPDT,
180352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                                 (char*) &btif_cb, sizeof(btif_conn_param_cb_t), NULL);
180452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach}
180552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach
1806f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Callojistatic bt_status_t btif_gattc_scan_filter_param_setup(btgatt_filt_param_setup_t
1807f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji                                                      filt_param)
1808b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
1809b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    CHECK_BTGATT_INIT();
18101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
18111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
18126cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
1813f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.client_if = filt_param.client_if;
1814f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.action = filt_param.action;
1815f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.filt_index = filt_param.filt_index;
1816f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.feat_seln = filt_param.feat_seln;
1817f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.list_logic_type = filt_param.list_logic_type;
1818f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.filt_logic_type = filt_param.filt_logic_type;
1819f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.rssi_high_thres = filt_param.rssi_high_thres;
1820f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.rssi_low_thres = filt_param.rssi_low_thres;
1821f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.dely_mode = filt_param.dely_mode;
1822f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.found_timeout = filt_param.found_timeout;
1823f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.lost_timeout = filt_param.lost_timeout;
1824f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.found_timeout_cnt = filt_param.found_timeout_cnt;
1825f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.num_of_tracking_entries = filt_param.num_of_tracking_entries;
18261a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_PARAM_SETUP,
18271a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
1828b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
1829b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
18301a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_add_remove(int client_if, int action,
18311a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              int filt_type, int filt_index, int company_id,
18321a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              int company_id_mask, const bt_uuid_t *p_uuid,
18331a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              const bt_uuid_t *p_uuid_mask, const bt_bdaddr_t *bd_addr,
18341a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              char addr_type, int data_len, char* p_data, int mask_len,
18351a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              char* p_mask)
1836b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
1837b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    CHECK_BTGATT_INIT();
18381a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
18396cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
18401a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s, %d, %d", __FUNCTION__, action, filt_type);
18411a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
18421a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    /* If data is passed, both mask and data have to be the same length */
184316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (data_len != mask_len && NULL != p_data && NULL != p_mask)
18441a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        return BT_STATUS_PARM_INVALID;
18451a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
18461a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.client_if = client_if;
18471a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.action = action;
18481a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.filt_index = filt_index;
18491a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.filt_type = filt_type;
18501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.conn_id = company_id;
18511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.company_id_mask = company_id_mask ? company_id_mask : 0xFFFF;
185216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (bd_addr)
185316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        bdcpy(btif_filt_cb.bd_addr.address, bd_addr->address);
18541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
18551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.addr_type = addr_type;
18561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.has_mask = (p_uuid_mask != NULL);
1857b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1858b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    if (p_uuid != NULL)
18591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(&btif_filt_cb.uuid, p_uuid, sizeof(bt_uuid_t));
1860b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    if (p_uuid_mask != NULL)
18611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(&btif_filt_cb.uuid_mask, p_uuid_mask, sizeof(bt_uuid_t));
18621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if (p_data != NULL && data_len != 0)
18631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    {
18641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(btif_filt_cb.value, p_data, data_len);
18651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        btif_filt_cb.value_len = data_len;
18661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(btif_filt_cb.value_mask, p_mask, mask_len);
18671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        btif_filt_cb.value_mask_len = mask_len;
18681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    }
1869b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_CONFIG,
18701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
1871b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
1872b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
18731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_clear(int client_if, int filt_index)
1874b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
1875b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    CHECK_BTGATT_INIT();
18761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s, %d", __FUNCTION__, filt_index);
18771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
18781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
18796cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
18801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.client_if = client_if;
18811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.filt_index = filt_index;
18821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.action = BTA_DM_BLE_SCAN_COND_CLEAR;
18831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_CONFIG,
18841a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
18851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
18861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
18871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_enable(int client_if, bool enable)
18881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
18891a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    int action = 0;
18901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    CHECK_BTGATT_INIT();
18911a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s, %d", __FUNCTION__, enable);
18921a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
18931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
18946cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
18951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.client_if = client_if;
189616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (true == enable)
18971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        action = 1;
18981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.action = action;
18991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_ENABLE,
19001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
1901b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
1902b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1903979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbachstatic bt_status_t btif_gattc_set_scan_parameters(int client_if, int scan_interval,
1904979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                                                  int scan_window)
19057d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham{
19067d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    CHECK_BTGATT_INIT();
19077d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_gattc_cb_t btif_cb;
1908979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_cb.client_if = client_if;
19097d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_cb.scan_interval = scan_interval;
19107d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_cb.scan_window = scan_window;
19117d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SET_SCAN_PARAMS,
19127d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
19137d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham}
19147d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham
1915ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic int btif_gattc_get_device_type( const bt_bdaddr_t *bd_addr )
1916ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1917ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    int device_type = 0;
1918ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    char bd_addr_str[18] = {0};
1919ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
19208a6a89faa942aed4f176b0c98402d01c8bdd6aa6Sharvil Nanavati    bdaddr_to_string(bd_addr, bd_addr_str, sizeof(bd_addr_str));
19219d52f88bfc07556cb01ab3055f5b1242c9b467aaSharvil Nanavati    if (btif_config_get_int(bd_addr_str, "DevType", &device_type))
1922ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return device_type;
1923ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return 0;
1924ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1925ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1926a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_enable(int client_if, int min_interval, int max_interval,
19279dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                                            int adv_type, int chnl_map, int tx_power, int timeout_s)
1928a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
1929a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
1930a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btgatt_multi_adv_inst_cb adv_cb;
19316cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
1932a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.client_if = (uint8_t) client_if;
1933a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1934a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_min = min_interval;
1935a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_max = max_interval;
1936a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_type = adv_type;
1937a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.channel_map = chnl_map;
1938a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_filter_policy = 0;
1939a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.tx_power = tx_power;
19409dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach    adv_cb.timeout_s = timeout_s;
1941a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_ENABLE,
1942a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                             (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL);
1943a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
1944a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1945a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_update(int client_if, int min_interval, int max_interval,
19469dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                                            int adv_type, int chnl_map,int tx_power, int timeout_s)
1947a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
1948a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
1949a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btgatt_multi_adv_inst_cb adv_cb;
19506cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
1951a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.client_if = (uint8_t) client_if;
1952a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1953a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_min = min_interval;
1954a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_max = max_interval;
1955a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_type = adv_type;
1956a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.channel_map = chnl_map;
1957a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_filter_policy = 0;
1958a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.tx_power = tx_power;
19599dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach    adv_cb.timeout_s = timeout_s;
1960a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_UPDATE,
1961a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                         (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL);
1962a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
1963a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1964a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_setdata(int client_if, bool set_scan_rsp,
19659dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                bool include_name, bool incl_txpower, int appearance,
19669dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                int manufacturer_len, char* manufacturer_data,
19679dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                int service_data_len, char* service_data,
19689dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                int service_uuid_len, char* service_uuid)
1969a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
1970a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
1971a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1972a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_adv_data_t multi_adv_data_inst;
19730d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    memset(&multi_adv_data_inst, 0, sizeof(multi_adv_data_inst));
19740d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
19750d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    const int min_interval = 0;
19760d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    const int max_interval = 0;
1977a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1978a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_adv_data_packager(client_if, set_scan_rsp, include_name, incl_txpower,
1979a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        min_interval, max_interval, appearance, manufacturer_len, manufacturer_data,
1980a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        service_data_len, service_data, service_uuid_len, service_uuid, &multi_adv_data_inst);
1981a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
19820d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    bt_status_t status = btif_transfer_context(
19830d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_SET_DATA,
19841668d204a0da63609fa1affcc86de9b76d0a0f48Jakub Pawlowski        (char *)&multi_adv_data_inst, sizeof(multi_adv_data_inst), NULL);
1985a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return status;
1986a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
1987a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1988a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_disable(int client_if)
1989a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
1990a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
1991a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btgatt_multi_adv_inst_cb adv_cb;
19926cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
1993a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.client_if = (uint8_t) client_if;
1994a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1995a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_DISABLE,
1996a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                           (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL);
1997a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
1998a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1999c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_cfg_storage(int client_if,int batch_scan_full_max,
2000c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    int batch_scan_trunc_max, int batch_scan_notify_threshold)
2001c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2002c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2003c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
20046cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2005c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2006c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.batch_scan_full_max = batch_scan_full_max;
2007c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.batch_scan_trunc_max = batch_scan_trunc_max;
2008c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.batch_scan_notify_threshold = batch_scan_notify_threshold;
2009c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONFIG_STORAGE_PARAMS,
2010c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2011c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2012c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2013c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_enb_batch_scan(int client_if,int scan_mode, int scan_interval,
2014c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                int scan_window, int addr_type, int discard_rule)
2015c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2016c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2017c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
20186cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2019c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2020c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_mode = scan_mode;
2021c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_interval = scan_interval;
2022c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_window = scan_window;
2023c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.discard_rule = discard_rule;
2024c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.addr_type = addr_type;
2025c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ENABLE_BATCH_SCAN,
2026c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2027c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2028c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2029c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_dis_batch_scan(int client_if)
2030c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2031c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2032c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
20336cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2034c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2035c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_DISABLE_BATCH_SCAN,
2036c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2037c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2038c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2039c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_read_batch_scan_reports(int client_if, int scan_mode)
2040c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2041c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2042c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
20436cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2044c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2045c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_mode = scan_mode;
2046c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_BATCH_SCAN_REPORTS,
2047c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2048c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2049c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2050ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern bt_status_t btif_gattc_test_command_impl(int command, btgatt_test_params_t* params);
2051ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2052ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_test_command(int command, btgatt_test_params_t* params)
2053ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2054ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_gattc_test_command_impl(command, params);
2055ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2056ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2057ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaconst btgatt_client_interface_t btgattClientInterface = {
2058ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_register_app,
2059ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_unregister_app,
2060ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_scan,
2061ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_open,
2062ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_close,
20635c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_gattc_listen,
2064ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_refresh,
2065ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_search_service,
2066ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_read_char,
2067ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_write_char,
2068ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_read_char_descr,
2069ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_write_char_descr,
2070ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_execute_write,
2071ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_reg_for_notification,
2072ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_dereg_for_notification,
2073ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_read_remote_rssi,
20741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_gattc_scan_filter_param_setup,
20751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_gattc_scan_filter_add_remove,
2076b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    btif_gattc_scan_filter_clear,
20771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_gattc_scan_filter_enable,
2078ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_get_device_type,
20795c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_gattc_set_adv_data,
20809426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_gattc_configure_mtu,
208152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_gattc_conn_parameter_update,
20827d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_gattc_set_scan_parameters,
2083a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_enable,
2084a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_update,
2085a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_setdata,
2086a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_disable,
2087c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_cfg_storage,
2088c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_enb_batch_scan,
2089c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_dis_batch_scan,
2090c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_read_batch_scan_reports,
2091533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    btif_gattc_test_command,
2092533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    btif_gattc_get_gatt_db
2093ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta};
2094ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2095ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
2096