btif_gatt_client.cc revision 140645f6b8d87464c08f082bd14740eecab23f71
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_READ_CHAR,
90ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_READ_CHAR_DESCR,
91ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_WRITE_CHAR,
92ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_WRITE_CHAR_DESCR,
93ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_EXECUTE_WRITE,
94ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_REG_FOR_NOTIFICATION,
95ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_DEREG_FOR_NOTIFICATION,
965c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    BTIF_GATTC_READ_RSSI,
975c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    BTIF_GATTC_LISTEN,
989426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    BTIF_GATTC_SET_ADV_DATA,
999426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    BTIF_GATTC_CONFIGURE_MTU,
10052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    BTIF_GATTC_CONN_PARAM_UPDT,
1011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_GATTC_SCAN_FILTER_PARAM_SETUP,
102b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    BTIF_GATTC_SCAN_FILTER_CONFIG,
1037d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    BTIF_GATTC_SCAN_FILTER_CLEAR,
1041a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_GATTC_SCAN_FILTER_ENABLE,
1057d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    BTIF_GATTC_SET_SCAN_PARAMS,
106a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    BTIF_GATTC_ADV_INSTANCE_ENABLE,
107a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    BTIF_GATTC_ADV_INSTANCE_UPDATE,
108a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    BTIF_GATTC_ADV_INSTANCE_SET_DATA,
109c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_ADV_INSTANCE_DISABLE,
110c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_CONFIG_STORAGE_PARAMS,
111c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_ENABLE_BATCH_SCAN,
112c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_READ_BATCH_SCAN_REPORTS,
113533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    BTIF_GATTC_DISABLE_BATCH_SCAN,
114533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    BTIF_GATTC_GET_GATT_DB
115ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} btif_gattc_event_t;
116ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
117ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATT_MAX_OBSERVED_DEV 40
118ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
119ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATT_OBSERVE_EVT   0x1000
120ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATTC_RSSI_EVT     0x1001
121979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach#define BTIF_GATTC_SCAN_FILTER_EVT  0x1003
122979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach#define BTIF_GATTC_SCAN_PARAM_EVT   0x1004
123ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
124c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji#define ENABLE_BATCH_SCAN 1
125c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji#define DISABLE_BATCH_SCAN 0
126c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
127ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
128ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Local type definitions
129ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
130c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojitypedef struct
131c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
132c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t report_format;
133c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint16_t data_len;
134c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t num_records;
135c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t *p_rep_data;
136c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} btgatt_batch_reports;
137c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
138c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojitypedef struct
139c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
140c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  status;
141c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  client_if;
1421acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    uint8_t  action;
1431acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    uint8_t  avbl_space;
1441acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    uint8_t  lost_timeout;
145f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    tBLE_ADDR_TYPE addr_type;
146c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  batch_scan_full_max;
147c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  batch_scan_trunc_max;
148c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  batch_scan_notify_threshold;
149979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    tBTA_BLE_BATCH_SCAN_MODE scan_mode;
150c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint32_t scan_interval;
151c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint32_t scan_window;
152c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    tBTA_BLE_DISCARD_RULE discard_rule;
153f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btgatt_batch_reports  read_reports;
154c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} btgatt_batch_track_cb_t;
155ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojitypedef tBTA_DM_BLE_PF_FILT_PARAMS btgatt_adv_filt_param_t;
1571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
1581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojitypedef struct
1591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
1601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     client_if;
1611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     action;
1621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_DM_BLE_PF_COND_TYPE filt_type;
1631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    bt_bdaddr_t bd_addr;
1641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value[BTGATT_MAX_ATTR_LEN];
1651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value_len;
1661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     filt_index;
1671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint16_t    conn_id;
1681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint16_t    company_id_mask;
1691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    bt_uuid_t   uuid;
1701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    bt_uuid_t   uuid_mask;
1711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value_mask[BTGATT_MAX_ATTR_LEN];
1721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value_mask_len;
1731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     has_mask;
1741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     addr_type;
1751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     status;
1761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_DM_BLE_PF_AVBL_SPACE avbl_space;
1771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_DM_BLE_SCAN_COND_OP cond_op;
1781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filt_param_t adv_filt_param;
1791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji} btgatt_adv_filter_cb_t;
1801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
181ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct
182ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
183ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     value[BTGATT_MAX_ATTR_LEN];
184a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    uint8_t     inst_id;
185ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_bdaddr_t bd_addr;
186ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btgatt_srvc_id_t srvc_id;
187ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btgatt_srvc_id_t incl_srvc_id;
1885f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    btgatt_gatt_id_t char_id;
1895f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    btgatt_gatt_id_t descr_id;
1909dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    uint16_t    handle;
191ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_uuid_t   uuid;
192b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    bt_uuid_t   uuid_mask;
193ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint16_t    conn_id;
194ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint16_t    len;
195b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    uint16_t    mask;
196979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    uint32_t    scan_interval;
197979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    uint32_t    scan_window;
198ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     client_if;
199ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     action;
200ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     is_direct;
201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     search_all;
202ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     auth_req;
203ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     write_type;
204ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     status;
205ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     addr_type;
2065c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    uint8_t     start;
207b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    uint8_t     has_mask;
208ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    int8_t      rssi;
2097fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    uint8_t     flag;
210ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBT_DEVICE_TYPE device_type;
2117fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    btgatt_transport_t transport;
212ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} __attribute__((packed)) btif_gattc_cb_t;
213ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
214ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct
215ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
216ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_bdaddr_t bd_addr;
21752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    uint16_t    min_interval;
21852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    uint16_t    max_interval;
21952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    uint16_t    timeout;
22052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    uint16_t    latency;
22152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach} btif_conn_param_cb_t;
22252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach
22352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbachtypedef struct
22452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach{
22552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    bt_bdaddr_t bd_addr;
226ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BOOLEAN     in_use;
227ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}__attribute__((packed)) btif_gattc_dev_t;
228ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
229ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct
230ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
231ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_dev_t remote_dev[BTIF_GATT_MAX_OBSERVED_DEV];
2327fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    uint8_t            addr_type;
2337fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    uint8_t            next_storage_idx;
234ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}__attribute__((packed)) btif_gattc_dev_cb_t;
235ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
236ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
237ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Static variables
238ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
239ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
240ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern const btgatt_callbacks_t *bt_gatt_callbacks;
241ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_gattc_dev_cb_t  btif_gattc_dev_cb;
242ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_gattc_dev_cb_t  *p_dev_cb = &btif_gattc_dev_cb;
243ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic uint8_t rssi_request_client_if;
244ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
245ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
246ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Static functions
247ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
248ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2499dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbachstatic bt_status_t btif_gattc_multi_adv_disable(int client_if);
25078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovstatic void btif_multi_adv_stop_cb(void *data)
2519dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach{
25278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    int client_if = PTR_TO_INT(data);
2539dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach    btif_gattc_multi_adv_disable(client_if); // Does context switch
2549dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach}
2559dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach
256979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbachstatic btgattc_error_t btif_gattc_translate_btm_status(tBTM_STATUS status)
257979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach{
258979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    switch(status)
259979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    {
260979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_SUCCESS:
261979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_SUCCESS_NO_SECURITY:
262979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_COMMAND_SUCCESS;
263979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
264979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_CMD_STARTED:
265979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_COMMAND_STARTED;
266979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
267979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_BUSY:
268979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_COMMAND_BUSY;
269979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
270979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_CMD_STORED:
271979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_COMMAND_STORED;
272979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
273979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_NO_RESOURCES:
274979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_NO_RESOURCES;
275979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
276979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_MODE_UNSUPPORTED:
277979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_WRONG_MODE:
278979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_MODE4_LEVEL4_NOT_SUPPORTED:
279979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_MODE_UNSUPPORTED;
280979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
281979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_ILLEGAL_VALUE:
282979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_SCO_BAD_LENGTH:
283979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_ILLEGAL_VALUE;
284979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
285979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_UNKNOWN_ADDR:
286979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_UNKNOWN_ADDR;
287979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
288979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_DEVICE_TIMEOUT:
289979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_DEVICE_TIMEOUT;
290979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
291979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_FAILED_ON_SECURITY:
292979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_REPEATED_ATTEMPTS:
293979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_NOT_AUTHORIZED:
294979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_SECURITY_ERROR;
295979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
296979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_DEV_RESET:
297979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_ILLEGAL_ACTION:
298979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_INCORRECT_STATE;
299979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
300979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_BAD_VALUE_RET:
301979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_INVALID_CONTROLLER_OUTPUT;
302979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
303979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_DELAY_CHECK:
304979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_DELAYED_ENCRYPTION_CHECK;
305979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
306979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_ERR_PROCESSING:
307979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       default:
308979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach          return BT_GATTC_ERR_PROCESSING;
309979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    }
310979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach}
311979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
3128444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbachstatic void btapp_gattc_req_data(UINT16 event, char *p_dest, char *p_src)
3138444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach{
31452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    tBTA_GATTC *p_dest_data = (tBTA_GATTC*) p_dest;
31552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    tBTA_GATTC *p_src_data = (tBTA_GATTC*) p_src;
3168444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3178444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    if (!p_src_data || !p_dest_data)
3188444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach       return;
3198444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3208444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    // Copy basic structure first
3213f06e14fddc0e674347ae28ea4a25218d4ce1d2aPavlin Radoslavov    maybe_non_aligned_memcpy(p_dest_data, p_src_data, sizeof(*p_src_data));
3228444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3238444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    // Allocate buffer for request data if necessary
3248444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    switch (event)
3258444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    {
3268444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_CHAR_EVT:
3278444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_DESCR_EVT:
3288444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
329e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach            if (p_src_data->read.p_value != NULL)
3308444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            {
331713993d1784ab7c23aee1fa3cf1ab8676cc0aa69Jakub Pawlowski                p_dest_data->read.p_value = (tBTA_GATT_UNFMT *)osi_malloc(sizeof(tBTA_GATT_UNFMT));
3328444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
333717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov                memcpy(p_dest_data->read.p_value, p_src_data->read.p_value,
3349dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                       sizeof(tBTA_GATT_UNFMT));
335717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
336717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov                // Allocate buffer for att value if necessary
3379dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                if (p_src_data->read.p_value->len > 0 &&
3389dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                    p_src_data->read.p_value->p_value != NULL) {
3399dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                    p_dest_data->read.p_value->p_value =
340713993d1784ab7c23aee1fa3cf1ab8676cc0aa69Jakub Pawlowski                        (UINT8 *)osi_malloc(p_src_data->read.p_value->len);
3419dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                    memcpy(p_dest_data->read.p_value->p_value,
3429dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                           p_src_data->read.p_value->p_value,
3439dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                           p_src_data->read.p_value->len);
3448444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                }
345717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov            } else {
346e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_WARNING("%s :Src read.p_value ptr is NULL for event  0x%x",
347e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                                    __FUNCTION__, event);
348e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                p_dest_data->read.p_value = NULL;
349e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach
350e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach            }
3518444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3528444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3538444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        default:
3548444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3558444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    }
3568444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach}
3578444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3588444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbachstatic void btapp_gattc_free_req_data(UINT16 event, tBTA_GATTC *p_data)
3598444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach{
3608444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    switch (event)
3618444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    {
3628444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_CHAR_EVT:
3638444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_DESCR_EVT:
3648444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            if (p_data != NULL && p_data->read.p_value != NULL)
3658444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            {
3669dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                if (p_data->read.p_value->len > 0)
3679dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                    osi_free_and_reset((void **)&p_data->read.p_value->p_value);
3689dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski
369cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov                osi_free_and_reset((void **)&p_data->read.p_value);
3708444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            }
3718444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3728444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3738444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        default:
3748444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3758444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    }
3768444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach}
3778444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
378ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_init_dev_cb(void)
379ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
380ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memset(p_dev_cb, 0, sizeof(btif_gattc_dev_cb_t));
381ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
382c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
383ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_add_remote_bdaddr (BD_ADDR p_bda, uint8_t addr_type)
384ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
385ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t i;
386ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    for (i = 0; i < BTIF_GATT_MAX_OBSERVED_DEV; i++)
387ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
388ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (!p_dev_cb->remote_dev[i].in_use )
389ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
390ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            memcpy(p_dev_cb->remote_dev[i].bd_addr.address, p_bda, BD_ADDR_LEN);
391ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_dev_cb->addr_type = addr_type;
392ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_dev_cb->remote_dev[i].in_use = TRUE;
393db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_VERBOSE(LOG_TAG, "%s device added idx=%d", __FUNCTION__, i  );
394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
395ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
396ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
397ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
398ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if ( i == BTIF_GATT_MAX_OBSERVED_DEV)
399ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
400ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        i= p_dev_cb->next_storage_idx;
401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memcpy(p_dev_cb->remote_dev[i].bd_addr.address, p_bda, BD_ADDR_LEN);
402ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_dev_cb->addr_type = addr_type;
403ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_dev_cb->remote_dev[i].in_use = TRUE;
404db554581079863974af8e1289646f5deea6fc044Marie Janssen        LOG_VERBOSE(LOG_TAG, "%s device overwrite idx=%d", __FUNCTION__, i  );
405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_dev_cb->next_storage_idx++;
40616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        if (p_dev_cb->next_storage_idx >= BTIF_GATT_MAX_OBSERVED_DEV)
407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta               p_dev_cb->next_storage_idx = 0;
408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic BOOLEAN btif_gattc_find_bdaddr (BD_ADDR p_bda)
412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t i;
414ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    for (i = 0; i < BTIF_GATT_MAX_OBSERVED_DEV; i++)
415ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
416ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (p_dev_cb->remote_dev[i].in_use &&
417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            !memcmp(p_dev_cb->remote_dev[i].bd_addr.address, p_bda, BD_ADDR_LEN))
418ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
419ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            return TRUE;
420ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
421ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
422ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return FALSE;
423ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
424ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
425ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_update_properties ( btif_gattc_cb_t *p_btif_cb )
426ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
427ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t remote_name_len;
428ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t *p_eir_remote_name=NULL;
429ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_bdname_t bdname;
430ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
431a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson    p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
432ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                         BTM_EIR_COMPLETE_LOCAL_NAME_TYPE, &remote_name_len);
433ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
43416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (p_eir_remote_name == NULL)
435ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
436a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson        p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
437ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                BT_EIR_SHORTENED_LOCAL_NAME_TYPE, &remote_name_len);
438ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
439ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
44016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (p_eir_remote_name)
441ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
442bcbf9cd0727f6903f9cf6c165453539fc55b6072Mike J. Chen        memcpy(bdname.name, p_eir_remote_name, remote_name_len);
443bcbf9cd0727f6903f9cf6c165453539fc55b6072Mike J. Chen        bdname.name[remote_name_len]='\0';
444ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
445db554581079863974af8e1289646f5deea6fc044Marie Janssen        LOG_DEBUG(LOG_TAG, "%s BLE device name=%s len=%d dev_type=%d", __FUNCTION__, bdname.name,
446ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta              remote_name_len, p_btif_cb->device_type  );
447ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        btif_dm_update_ble_remote_properties( p_btif_cb->bd_addr.address,   bdname.name,
448ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                               p_btif_cb->device_type);
449ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
450ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
451ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
452ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_upstreams_evt(uint16_t event, char* p_param)
453ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
454db554581079863974af8e1289646f5deea6fc044Marie Janssen    LOG_VERBOSE(LOG_TAG, "%s: Event %d", __FUNCTION__, event);
455ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
45652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    tBTA_GATTC *p_data = (tBTA_GATTC*) p_param;
457ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    switch (event)
458ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
459ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_REG_EVT:
460ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
461ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bt_uuid_t app_uuid;
462ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_to_btif_uuid(&app_uuid, &p_data->reg_oper.app_uuid);
463ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->register_client_cb
464ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->reg_oper.status
465ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->reg_oper.client_if
466ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , &app_uuid
467ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            );
468ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
469ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
470ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
471ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_DEREG_EVT:
472ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
473ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
474ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_READ_CHAR_EVT:
475ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
476ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_read_params_t data;
477ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            set_read_value(&data, &p_data->read);
478ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
479ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->read_characteristic_cb
480ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->read.conn_id, p_data->read.status, &data);
481ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
482ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
483ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
484ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_WRITE_CHAR_EVT:
485ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_PREP_WRITE_EVT:
486ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
4879dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            HAL_CBACK(bt_gatt_callbacks, client->write_characteristic_cb,
4889dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                p_data->write.conn_id, p_data->write.status, p_data->write.handle);
489ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
490ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
491ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
492ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_EXEC_EVT:
493ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
494ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->execute_write_cb
495ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->exec_cmpl.conn_id, p_data->exec_cmpl.status
496ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            );
497ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
498ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
499ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
500ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_SEARCH_CMPL_EVT:
501ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
502ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->search_complete_cb
503ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->search_cmpl.conn_id, p_data->search_cmpl.status);
504ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
505ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
506ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
507ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_READ_DESCR_EVT:
508ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
509ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_read_params_t data;
510ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            set_read_value(&data, &p_data->read);
511ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
512ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->read_descriptor_cb
513ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->read.conn_id, p_data->read.status, &data);
514ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
515ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
516ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
517ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_WRITE_DESCR_EVT:
518ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
5199dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            HAL_CBACK(bt_gatt_callbacks, client->write_descriptor_cb,
5209dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                p_data->write.conn_id, p_data->write.status, p_data->write.handle);
521ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
522ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
523ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
524ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_NOTIF_EVT:
525ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
526ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_notify_params_t data;
527ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
528ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(data.bda.address, p_data->notify.bda);
529ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            memcpy(data.value, p_data->notify.value, p_data->notify.len);
530ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
5319dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            data.handle = p_data->notify.handle;
532ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            data.is_notify = p_data->notify.is_notify;
533ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            data.len = p_data->notify.len;
534ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
5359dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            HAL_CBACK(bt_gatt_callbacks, client->notify_cb, p_data->notify.conn_id, &data);
536ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
537ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_data->notify.is_notify == FALSE)
5389dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                BTA_GATTC_SendIndConfirm(p_data->notify.conn_id, p_data->notify.handle);
5399dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski
540ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
541ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
542ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
543ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_OPEN_EVT:
544ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
545ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bt_bdaddr_t bda;
546ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(bda.address, p_data->open.remote_bda);
547ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
548ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->open_cb, p_data->open.conn_id
549ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->open.status, p_data->open.client_if, &bda);
5506975b4d711142b885af479721cada448952c6b41Andre Eisenbach
5519426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            if (GATT_DEF_BLE_MTU_SIZE != p_data->open.mtu && p_data->open.mtu)
5529426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            {
5539426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, p_data->open.conn_id
5549426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                    , p_data->open.status , p_data->open.mtu);
5559426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            }
5569426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
5576975b4d711142b885af479721cada448952c6b41Andre Eisenbach            if (p_data->open.status == BTA_GATT_OK)
5584f6c9b4f68d152baf7aa029cbe9b570994584101Nitin Arora                btif_gatt_check_encrypted_link(p_data->open.remote_bda, p_data->open.transport);
559ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
560ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
561ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
562ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_CLOSE_EVT:
563ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
564ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bt_bdaddr_t bda;
565ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(bda.address, p_data->close.remote_bda);
566ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->close_cb, p_data->close.conn_id
567ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->status, p_data->close.client_if, &bda);
568ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
569ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
570ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
571ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_ACL_EVT:
572db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_DEBUG(LOG_TAG, "BTA_GATTC_ACL_EVT: status = %d", p_data->status);
573ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            /* Ignore for now */
574ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
575ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
576ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_CANCEL_OPEN_EVT:
577ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
578ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
579ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATT_OBSERVE_EVT:
580ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
58152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
582aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            uint8_t remote_name_len;
583aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            uint8_t *p_eir_remote_name=NULL;
5847fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bt_device_type_t dev_type;
5857fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bt_property_t properties;
586aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi
587a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson            p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
588aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                                         BTM_EIR_COMPLETE_LOCAL_NAME_TYPE, &remote_name_len);
589aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi
59016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (p_eir_remote_name == NULL)
591ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
592a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson                p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
593aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                                BT_EIR_SHORTENED_LOCAL_NAME_TYPE, &remote_name_len);
594aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            }
595aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi
596aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            if ((p_btif_cb->addr_type != BLE_ADDR_RANDOM) || (p_eir_remote_name))
597aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            {
598aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi               if (!btif_gattc_find_bdaddr(p_btif_cb->bd_addr.address))
599aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi               {
600aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                  btif_gattc_add_remote_bdaddr(p_btif_cb->bd_addr.address, p_btif_cb->addr_type);
601aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                  btif_gattc_update_properties(p_btif_cb);
602aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi               }
603ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
6047fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
605713993d1784ab7c23aee1fa3cf1ab8676cc0aa69Jakub Pawlowski             dev_type = (bt_device_type_t) p_btif_cb->device_type;
6067fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             BTIF_STORAGE_FILL_PROPERTY(&properties,
6077fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                        BT_PROPERTY_TYPE_OF_DEVICE, sizeof(dev_type), &dev_type);
6087fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             btif_storage_set_remote_device_property(&(p_btif_cb->bd_addr), &properties);
6097fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
6107b9fe757f5df8c529c506b1c41403f2f3f204f9eAndre Eisenbach            btif_storage_set_remote_addr_type( &p_btif_cb->bd_addr, p_btif_cb->addr_type);
6117b9fe757f5df8c529c506b1c41403f2f3f204f9eAndre Eisenbach
612ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->scan_result_cb,
613ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                      &p_btif_cb->bd_addr, p_btif_cb->rssi, p_btif_cb->value);
614ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
615ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
616ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
617ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_RSSI_EVT:
618ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
61952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
620ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->read_remote_rssi_cb, p_btif_cb->client_if,
621ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                      &p_btif_cb->bd_addr, p_btif_cb->rssi, p_btif_cb->status);
622ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
623ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
624ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
6255c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        case BTA_GATTC_LISTEN_EVT:
6265c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        {
6275c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->listen_cb
6285c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                , p_data->reg_oper.status
6295c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                , p_data->reg_oper.client_if
6305c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            );
6315c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            break;
6325c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        }
6339426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
6349426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        case BTA_GATTC_CFG_MTU_EVT:
6359426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        {
6369426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, p_data->cfg_mtu.conn_id
6379426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                , p_data->cfg_mtu.status , p_data->cfg_mtu.mtu);
6389426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            break;
6399426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        }
64017b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach
641a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_ENB_EVT:
642a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
64352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
64416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (0xFF != p_btif_cb->inst_id)
64516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                btif_multi_adv_add_instid_map(p_btif_cb->client_if, p_btif_cb->inst_id, false);
646a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_enable_cb
647a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    , p_btif_cb->client_if
648a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    , p_btif_cb->status
649a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                );
6509dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach            btif_multi_adv_timer_ctrl(p_btif_cb->client_if,
65178bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                      (p_btif_cb->status == BTA_GATT_OK) ?
65278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                      btif_multi_adv_stop_cb : NULL);
653a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
654a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
655a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
656a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_UPD_EVT:
657a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
65852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
659a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_update_cb
660a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->client_if
661a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->status
662a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            );
6639dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach            btif_multi_adv_timer_ctrl(p_btif_cb->client_if,
66478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                      (p_btif_cb->status == BTA_GATT_OK) ?
66578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                      btif_multi_adv_stop_cb : NULL);
666a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
667a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
668a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
669a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_DATA_EVT:
670a6ce7751d84218c193eb90d390aef23217b1737eWei Wang         {
67152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
6723770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_clear_clientif(p_btif_cb->client_if, FALSE);
673a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_data_cb
674a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->client_if
675a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->status
676a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            );
677a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
678a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
679a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
680a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_DIS_EVT:
681a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
68252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
6833770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_clear_clientif(p_btif_cb->client_if, TRUE);
684a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_disable_cb
685a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->client_if
686a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->status
687a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            );
688a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
689a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
690a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
691a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_ADV_DATA_EVT:
692a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
6933770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_cleanup_inst_cb(STD_ADV_INSTID, FALSE);
694a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            /* No HAL callback available */
695a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
696a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
697a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
69817b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach        case BTA_GATTC_CONGEST_EVT:
69917b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->congestion_cb
70017b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach                , p_data->congest.conn_id
70117b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach                , p_data->congest.congested
70217b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach            );
70317b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach            break;
70417b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach
705c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_CFG_EVT:
706c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
70752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
708c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_cfg_storage_cb
709c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                , p_data->client_if
710c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                , p_data->status
711c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            );
712c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
713c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
714c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
715c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_ENB_EVT:
716c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
71752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
718c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_enb_disable_cb
719c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , ENABLE_BATCH_SCAN
720c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->client_if
721c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->status);
722c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
723c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
724c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
725c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_DIS_EVT:
726c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
72752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
728c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_enb_disable_cb
729c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , DISABLE_BATCH_SCAN
730c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->client_if
731c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->status);
732c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
733c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
734c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
735c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_THR_EVT:
736c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
73752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
738c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_threshold_cb
739c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->client_if);
740c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
741c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
742c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
743c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_RD_EVT:
744c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
74552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
746c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            uint8_t *p_rep_data = NULL;
747c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
748adb7bb50469db992969295792a7ba3b73f9e24b3Satya Calloji            if (p_data->read_reports.data_len > 0 && NULL != p_data->read_reports.p_rep_data)
749c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            {
750713993d1784ab7c23aee1fa3cf1ab8676cc0aa69Jakub Pawlowski                p_rep_data = (uint8_t *)osi_malloc(p_data->read_reports.data_len);
751c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                memcpy(p_rep_data, p_data->read_reports.p_rep_data, p_data->read_reports.data_len);
752c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            }
753c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
754c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_reports_cb
755c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->client_if, p_data->status, p_data->read_reports.report_format
756c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->read_reports.num_records, p_data->read_reports.data_len, p_rep_data);
757cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov            osi_free(p_rep_data);
758c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
759c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
760c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
7611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTA_GATTC_SCAN_FLT_CFG_EVT:
7621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
76352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_btif_cb = (btgatt_adv_filter_cb_t*) p_param;
7641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->scan_filter_cfg_cb, p_btif_cb->action,
7651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                      p_btif_cb->client_if, p_btif_cb->status, p_btif_cb->cond_op,
7661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                      p_btif_cb->avbl_space);
7671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
7681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
7691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
7701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTA_GATTC_SCAN_FLT_PARAM_EVT:
7711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
7721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            btgatt_adv_filter_cb_t *p_data = (btgatt_adv_filter_cb_t*) p_param;
7731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTIF_TRACE_DEBUG("BTA_GATTC_SCAN_FLT_PARAM_EVT: %d, %d, %d, %d",p_data->client_if,
7741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                p_data->action, p_data->avbl_space, p_data->status);
7751acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->scan_filter_param_cb
7761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    , p_data->action, p_data->client_if, p_data->status
7771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    , p_data->avbl_space);
7781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
7791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
7801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
7811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTA_GATTC_SCAN_FLT_STATUS_EVT:
7821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
7831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            btgatt_adv_filter_cb_t *p_data = (btgatt_adv_filter_cb_t*) p_param;
7841a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTIF_TRACE_DEBUG("BTA_GATTC_SCAN_FLT_STATUS_EVT: %d, %d, %d",p_data->client_if,
7851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                p_data->action, p_data->status);
7861acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->scan_filter_status_cb
7871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    , p_data->action, p_data->client_if, p_data->status);
7881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
7891a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
7901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
7911acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji        case BTA_GATTC_ADV_VSC_EVT:
7921acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji        {
793f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            btgatt_track_adv_info_t *p_data = (btgatt_track_adv_info_t*)p_param;
794f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            btgatt_track_adv_info_t adv_info_data;
795f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji
796f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            memset(&adv_info_data, 0, sizeof(btgatt_track_adv_info_t));
797f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji
798f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            btif_gatt_move_track_adv_data(&adv_info_data, p_data);
799f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            HAL_CBACK(bt_gatt_callbacks, client->track_adv_event_cb, &adv_info_data);
8001acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji            break;
8011acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji        }
8021acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji
803979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        case BTIF_GATTC_SCAN_PARAM_EVT:
804979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        {
805979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t *)p_param;
806979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->scan_parameter_setup_completed_cb,
807979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                      p_btif_cb->client_if, btif_gattc_translate_btm_status(p_btif_cb->status));
808979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            break;
809979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        }
810979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
811ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        default:
812db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_ERROR(LOG_TAG, "%s: Unhandled event (%d)!", __FUNCTION__, event);
813ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
814ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
8158444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
8168444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    btapp_gattc_free_req_data(event, p_data);
817ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
818ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
8196975b4d711142b885af479721cada448952c6b41Andre Eisenbachstatic void bta_gattc_cback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data)
820ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
821ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_status_t status = btif_transfer_context(btif_gattc_upstreams_evt,
822713993d1784ab7c23aee1fa3cf1ab8676cc0aa69Jakub Pawlowski                    (uint16_t) event, (char*) p_data, sizeof(tBTA_GATTC), btapp_gattc_req_data);
823ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    ASSERTC(status == BT_STATUS_SUCCESS, "Context transfer failed!", status);
824ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
825ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
826a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic void bta_gattc_multi_adv_cback(tBTA_BLE_MULTI_ADV_EVT event, UINT8 inst_id,
827a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                                    void *p_ref, tBTA_STATUS call_status)
828a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
829a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_cb_t btif_cb;
830a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    tBTA_GATTC_EVT upevt;
831a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    uint8_t client_if = 0;
832a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
83316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (NULL == p_ref)
834a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    {
83516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        BTIF_TRACE_WARNING("%s Invalid p_ref received",__FUNCTION__);
83616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
83716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    else
83816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
83916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        client_if = *(UINT8 *) p_ref;
840a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    }
841a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
842e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s -Inst ID %d, Status:%x, client_if:%d",__FUNCTION__,inst_id, call_status,
843a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                       client_if);
844a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.status = call_status;
845a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.client_if = client_if;
846a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.inst_id = inst_id;
847a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
848a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    switch(event)
849a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    {
850a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_ENB_EVT:
851a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_ENB_EVT;
852a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
853a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
854a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_DISABLE_EVT:
855a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_DIS_EVT;
856a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
857a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
858a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_PARAM_EVT:
859a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_UPD_EVT;
860a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
861a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
862a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_DATA_EVT:
863a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_DATA_EVT;
864a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
865a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
866a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        default:
867a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            return;
868a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    }
869a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
870a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    bt_status_t status = btif_transfer_context(btif_gattc_upstreams_evt, (uint16_t) upevt,
871a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
872a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    ASSERTC(status == BT_STATUS_SUCCESS, "Context transfer failed!", status);
873a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
874a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
875a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic void bta_gattc_set_adv_data_cback(tBTA_STATUS call_status)
876a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
877a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    UNUSED(call_status);
878a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_cb_t btif_cb;
879a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.status = call_status;
880a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.action = 0;
881a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_ADV_DATA_EVT,
882a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                          (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
883a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
884a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
885c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_setup_cb (tBTA_BLE_BATCH_SCAN_EVT evt,
886c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                            tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status)
887c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
888c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    UINT8 upevt = 0;
889c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t btif_scan_track_cb;
890c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
891c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.status = status;
892c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.client_if = ref_value;
8931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("bta_batch_scan_setup_cb-Status:%x, client_if:%d, evt=%d",
894c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            status, ref_value, evt);
895c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
896c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    switch(evt)
897c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    {
898c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_ENB_EVT:
899c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
900c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_ENB_EVT;
901c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
902c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
903c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
904c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_DIS_EVT:
905c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
906c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_DIS_EVT;
907c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
908c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
909c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
910c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_CFG_STRG_EVT:
911c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
912c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_CFG_EVT;
913c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
914c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
915c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
916c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_DATA_EVT:
917c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
918c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_RD_EVT;
919c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
920c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
921c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
922c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_THRES_EVT:
923c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
924c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_THR_EVT;
925c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
926c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
927c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
928c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        default:
929c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            return;
930c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    }
931c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
932c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, upevt,(char*) &btif_scan_track_cb,
933c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                          sizeof(btgatt_batch_track_cb_t), NULL);
934c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
935c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
936c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
937c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_threshold_cb(tBTA_DM_BLE_REF_VALUE ref_value)
938c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
939c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t btif_scan_track_cb;
940c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.status = 0;
941c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.client_if = ref_value;
942c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
9431a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s - client_if:%d",__FUNCTION__, ref_value);
944c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
945c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_BTH_SCAN_THR_EVT,
946c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                          (char*) &btif_scan_track_cb, sizeof(btif_gattc_cb_t), NULL);
947c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
948c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
949c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_reports_cb(tBTA_DM_BLE_REF_VALUE ref_value, UINT8 report_format,
950c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                            UINT8 num_records, UINT16 data_len,
951c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                            UINT8* p_rep_data, tBTA_STATUS status)
952c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
953c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t btif_scan_track_cb;
954adb7bb50469db992969295792a7ba3b73f9e24b3Satya Calloji    memset(&btif_scan_track_cb, 0, sizeof(btgatt_batch_track_cb_t));
9551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s - client_if:%d, %d, %d, %d",__FUNCTION__, ref_value, status, num_records,
956c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                    data_len);
957c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
958c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.status = status;
959c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
960c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.client_if = ref_value;
961c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.read_reports.report_format = report_format;
962c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.read_reports.data_len = data_len;
963c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.read_reports.num_records = num_records;
964c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
96516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (data_len > 0)
966c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    {
967713993d1784ab7c23aee1fa3cf1ab8676cc0aa69Jakub Pawlowski        btif_scan_track_cb.read_reports.p_rep_data = (UINT8 *)osi_malloc(data_len);
968c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        memcpy(btif_scan_track_cb.read_reports.p_rep_data, p_rep_data, data_len);
969cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov        osi_free(p_rep_data);
970c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    }
971c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
972c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_BTH_SCAN_RD_EVT,
973c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        (char*) &btif_scan_track_cb, sizeof(btgatt_batch_track_cb_t), NULL);
974c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
97516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (data_len > 0)
976cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov        osi_free_and_reset((void **)&btif_scan_track_cb.read_reports.p_rep_data);
977c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
978c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
9796975b4d711142b885af479721cada448952c6b41Andre Eisenbachstatic void bta_scan_results_cb (tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH *p_data)
980ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
981ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
982ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t len;
983ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
984ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    switch (event)
985ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
986ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_DM_INQ_RES_EVT:
987ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
988ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(btif_cb.bd_addr.address, p_data->inq_res.bd_addr);
989ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_cb.device_type = p_data->inq_res.device_type;
990ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_cb.rssi = p_data->inq_res.rssi;
991ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_cb.addr_type = p_data->inq_res.ble_addr_type;
9927fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            btif_cb.flag = p_data->inq_res.flag;
993ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_data->inq_res.p_eir)
994ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
995ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                memcpy(btif_cb.value, p_data->inq_res.p_eir, 62);
996a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson                if (BTM_CheckEirData(p_data->inq_res.p_eir, BTM_EIR_COMPLETE_LOCAL_NAME_TYPE,
997ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                      &len))
998ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                {
999ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    p_data->inq_res.remt_name_not_required  = TRUE;
1000ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                }
1001ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
1002ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1003ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        break;
1004ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1005ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_DM_INQ_CMPL_EVT:
1006ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
1007e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("%s  BLE observe complete. Num Resp %d",
1008ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                              __FUNCTION__,p_data->inq_cmpl.num_resps);
1009ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            return;
1010ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1011ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1012ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        default:
1013e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_WARNING("%s : Unknown event 0x%x", __FUNCTION__, event);
1014ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return;
1015ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1016ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATT_OBSERVE_EVT,
1017ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1018ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1019ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1020f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Callojistatic void bta_track_adv_event_cb(tBTA_DM_BLE_TRACK_ADV_DATA *p_track_adv_data)
10211acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji{
1022f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btgatt_track_adv_info_t btif_scan_track_cb;
1023f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    BTIF_TRACE_DEBUG("%s",__FUNCTION__);
1024f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_gatt_move_track_adv_data(&btif_scan_track_cb,
1025f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji                (btgatt_track_adv_info_t*)p_track_adv_data);
1026f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji
10271acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_ADV_VSC_EVT,
1028f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji                          (char*) &btif_scan_track_cb, sizeof(btgatt_track_adv_info_t), NULL);
10291acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji}
10301acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji
1031ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btm_read_rssi_cb (tBTM_RSSI_RESULTS *p_result)
1032ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1033ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1034ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1035ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, p_result->rem_bda);
1036ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.rssi = p_result->rssi;
1037ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.status = p_result->status;
1038ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = rssi_request_client_if;
1039ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATTC_RSSI_EVT,
1040ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1041ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1042ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1043979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbachstatic void bta_scan_param_setup_cb(tGATT_IF client_if, tBTM_STATUS status)
1044979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach{
1045979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_gattc_cb_t btif_cb;
1046979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
1047979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_cb.status = status;
1048979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_cb.client_if = client_if;
1049979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATTC_SCAN_PARAM_EVT,
1050979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                          (char *)&btif_cb, sizeof(btif_gattc_cb_t), NULL);
1051979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach}
1052979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
10531a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_cfg_cb(tBTA_DM_BLE_PF_ACTION action, tBTA_DM_BLE_SCAN_COND_OP cfg_op,
10541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, tBTA_STATUS status,
10551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                tBTA_DM_BLE_REF_VALUE ref_value)
1056b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
10571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_cb;
1058b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    btif_cb.status = status;
10591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.action = action;
10601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.cond_op = cfg_op;
10611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.avbl_space = avbl_space;
10621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.client_if = ref_value;
10631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_CFG_EVT,
10641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                          (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
10651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
10661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
10671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_param_setup_cb(UINT8 action_type,
10681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                        tBTA_DM_BLE_PF_AVBL_SPACE avbl_space,
10691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                        tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status)
10701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
10711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_cb;
10721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
10731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.status = status;
10741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.action = action_type;
10751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.client_if = ref_value;
10761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.avbl_space = avbl_space;
10771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_PARAM_EVT,
10781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                          (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
10791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
10801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
10811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_status_cb(UINT8 action, tBTA_STATUS status,
10821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                    tBTA_DM_BLE_REF_VALUE ref_value)
10831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
10841a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_cb;
10851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
10861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.status = status;
10871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.action = action;
10881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.client_if = ref_value;
10891a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_STATUS_EVT,
10901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                          (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
1091b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
1092ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1093ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btgattc_handle_event(uint16_t event, char* p_param)
1094ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1095ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATT_STATUS           status;
1096ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBT_UUID                   uuid;
1097ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATT_UNFMT            descr_val;
1098ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
109952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_gattc_cb_t* p_cb = (btif_gattc_cb_t*) p_param;
110052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    if (!p_cb) return;
1101ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1102db554581079863974af8e1289646f5deea6fc044Marie Janssen    LOG_VERBOSE(LOG_TAG, "%s: Event %d", __FUNCTION__, event);
1103ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1104ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    switch (event)
1105ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
1106ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_REGISTER_APP:
1107ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_uuid(&uuid, &p_cb->uuid);
1108b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji            btif_gattc_incr_app_count();
11096975b4d711142b885af479721cada448952c6b41Andre Eisenbach            BTA_GATTC_AppRegister(&uuid, bta_gattc_cback);
1110ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1111ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1112ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_UNREGISTER_APP:
11133770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_clear_clientif(p_cb->client_if, TRUE);
1114b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji            btif_gattc_decr_app_count();
1115ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_AppDeregister(p_cb->client_if);
1116ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1117ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1118ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_SCAN_START:
1119ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_gattc_init_dev_cb();
11206975b4d711142b885af479721cada448952c6b41Andre Eisenbach            BTA_DmBleObserve(TRUE, 0, bta_scan_results_cb);
1121ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1122ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1123ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_SCAN_STOP:
1124ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_DmBleObserve(FALSE, 0, 0);
1125ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1126ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1127ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_OPEN:
1128306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach        {
1129306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            // Ensure device is in inquiry database
1130306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            int addr_type = 0;
1131306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            int device_type = 0;
11327fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            tBTA_GATT_TRANSPORT transport = BTA_GATT_TRANSPORT_LE;
1133306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach
113486f97eda524568f2d264186844450db5e56dac36Matthew Xie            if (btif_get_address_type(p_cb->bd_addr.address, &addr_type) &&
113586f97eda524568f2d264186844450db5e56dac36Matthew Xie                btif_get_device_type(p_cb->bd_addr.address, &device_type) &&
113686f97eda524568f2d264186844450db5e56dac36Matthew Xie                device_type != BT_DEVICE_TYPE_BREDR)
113786f97eda524568f2d264186844450db5e56dac36Matthew Xie            {
1138306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach                BTA_DmAddBleDevice(p_cb->bd_addr.address, addr_type, device_type);
113986f97eda524568f2d264186844450db5e56dac36Matthew Xie            }
1140306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach
11416ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji            // Check for background connections
1142ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (!p_cb->is_direct)
1143a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach            {
11446ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                // Check for privacy 1.0 and 1.1 controller and do not start background
11456ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                // connection if RPA offloading is not supported, since it will not
11466ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                // connect after change of random address
11476ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                if (!controller_get_interface()->supports_ble_privacy() &&
11486ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                   (p_cb->addr_type == BLE_ADDR_RANDOM) &&
11496ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                   BTM_BLE_IS_RESOLVE_BDA(p_cb->bd_addr.address))
1150a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                {
1151a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    tBTM_BLE_VSC_CB vnd_capabilities;
1152a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    BTM_BleGetVendorCapabilities(&vnd_capabilities);
1153a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    if (!vnd_capabilities.rpa_offloading)
1154a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    {
1155a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                        HAL_CBACK(bt_gatt_callbacks, client->open_cb, 0, BT_STATUS_UNSUPPORTED,
1156a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                                        p_cb->client_if, &p_cb->bd_addr);
1157a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                        return;
1158a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    }
1159a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                }
1160ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_DmBleSetBgConnType(BTM_BLE_CONN_AUTO, NULL);
1161a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach            }
1162ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1163d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan            // Determine transport
1164d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan            if (p_cb->transport != GATT_TRANSPORT_AUTO)
11657fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            {
1166d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                transport = p_cb->transport;
1167d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan            } else {
1168d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                switch(device_type)
1169d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                {
1170d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                    case BT_DEVICE_TYPE_BREDR:
1171d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        transport = BTA_GATT_TRANSPORT_BR_EDR;
1172d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        break;
11737fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
1174d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                    case BT_DEVICE_TYPE_BLE:
11757fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                        transport = BTA_GATT_TRANSPORT_LE;
1176d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        break;
1177d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan
1178d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                    case BT_DEVICE_TYPE_DUMO:
1179d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        if (p_cb->transport == GATT_TRANSPORT_LE)
1180d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                            transport = BTA_GATT_TRANSPORT_LE;
1181d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        else
1182d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                            transport = BTA_GATT_TRANSPORT_BR_EDR;
1183d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        break;
1184d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                }
11857fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            }
11867fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
1187306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            // Connect!
1188d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan            BTIF_TRACE_DEBUG ("%s Transport=%d, device type=%d",
1189d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                                __func__, transport, device_type);
11907fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            BTA_GATTC_Open(p_cb->client_if, p_cb->bd_addr.address, p_cb->is_direct, transport);
1191ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1192306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach        }
1193ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1194ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_CLOSE:
11956975b4d711142b885af479721cada448952c6b41Andre Eisenbach            // Disconnect established connections
1196ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_cb->conn_id != 0)
1197ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_Close(p_cb->conn_id);
1198ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            else
1199ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_CancelOpen(p_cb->client_if, p_cb->bd_addr.address, TRUE);
1200ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            // Cancel pending background connections (remove from whitelist)
1202ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_CancelOpen(p_cb->client_if, p_cb->bd_addr.address, FALSE);
1203ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1204ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1205ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_SEARCH_SERVICE:
1206ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
1207ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_cb->search_all)
1208ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
1209ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_ServiceSearchRequest(p_cb->conn_id, NULL);
1210ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            } else {
1211ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                btif_to_bta_uuid(&uuid, &p_cb->uuid);
1212ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_ServiceSearchRequest(p_cb->conn_id, &uuid);
1213ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
1214ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1215ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1216ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1217533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski        case BTIF_GATTC_GET_GATT_DB:
1218533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski        {
1219533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            btgatt_db_element_t *db = NULL;
1220533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            int count = 0;
12219fd552b1f51c1313e801592f271376c7af62b2f4Jakub Pawlowski            BTA_GATTC_GetGattDb(p_cb->conn_id, 0x0000, 0xFFFF, &db, &count);
1222533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
1223533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            HAL_CBACK(bt_gatt_callbacks, client->get_gatt_db_cb,
1224533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski                p_cb->conn_id, db, count);
1225533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            osi_free(db);
1226533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            break;
1227533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski        }
1228533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
1229ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_READ_CHAR:
12309dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            BTA_GATTC_ReadCharacteristic(p_cb->conn_id, p_cb->handle, p_cb->auth_req);
1231ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1232ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1233ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_READ_CHAR_DESCR:
12349dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            BTA_GATTC_ReadCharDescr(p_cb->conn_id, p_cb->handle, p_cb->auth_req);
1235ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1236ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1237ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_WRITE_CHAR:
12389dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            BTA_GATTC_WriteCharValue(p_cb->conn_id, p_cb->handle, p_cb->write_type,
12399dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                                     p_cb->len, p_cb->value, p_cb->auth_req);
1240ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1241ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1242ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_WRITE_CHAR_DESCR:
1243ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            descr_val.len = p_cb->len;
1244ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            descr_val.p_value = p_cb->value;
1245ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
12469dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            BTA_GATTC_WriteCharDescr(p_cb->conn_id, p_cb->handle,
1247ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->write_type, &descr_val,
1248ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->auth_req);
1249ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1250ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1251ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_EXECUTE_WRITE:
1252ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_ExecuteWrite(p_cb->conn_id, p_cb->action);
1253ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1254ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1255ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_REG_FOR_NOTIFICATION:
1256ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            status = BTA_GATTC_RegisterForNotifications(p_cb->client_if,
12579dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                                    p_cb->bd_addr.address, p_cb->handle);
1258ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1259ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->register_for_notification_cb,
12609dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                p_cb->conn_id, 1, status, p_cb->handle);
1261ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1262ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1263ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_DEREG_FOR_NOTIFICATION:
1264ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            status = BTA_GATTC_DeregisterForNotifications(p_cb->client_if,
12659dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                                        p_cb->bd_addr.address, p_cb->handle);
1266ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1267ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->register_for_notification_cb,
12689dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                p_cb->conn_id, 0, status, p_cb->handle);
1269ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1270ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1271ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_READ_RSSI:
1272ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            rssi_request_client_if = p_cb->client_if;
1273ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTM_ReadRSSI (p_cb->bd_addr.address, (tBTM_CMPL_CB *)btm_read_rssi_cb);
1274ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1275ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
12761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTIF_GATTC_SCAN_FILTER_PARAM_SETUP:
12771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
127852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
127916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (1 == p_adv_filt_cb->adv_filt_param.dely_mode)
12801acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji               BTA_DmBleTrackAdvertiser(p_adv_filt_cb->client_if, bta_track_adv_event_cb);
12811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTA_DmBleScanFilterSetup(p_adv_filt_cb->action, p_adv_filt_cb->filt_index,
12821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                &p_adv_filt_cb->adv_filt_param, NULL, bta_scan_filt_param_setup_cb,
12831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                p_adv_filt_cb->client_if);
1284b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            break;
12851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
1286b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1287b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        case BTIF_GATTC_SCAN_FILTER_CONFIG:
1288b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        {
128952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
1290b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            tBTA_DM_BLE_PF_COND_PARAM cond;
1291b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            memset(&cond, 0, sizeof(cond));
1292b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
12931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            switch (p_adv_filt_cb->filt_type)
1294b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            {
1295b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_ADDR_FILTER: // 0
12961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    bdcpy(cond.target_addr.bda, p_adv_filt_cb->bd_addr.address);
12971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.target_addr.type = p_adv_filt_cb->addr_type;
12981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
12991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
13011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1302b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1303b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1304b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_SRVC_DATA: // 1
13051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                            p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                            NULL, bta_scan_filt_cfg_cb, p_adv_filt_cb->client_if);
1308b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1309b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1310b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_SRVC_UUID: // 2
1311b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
1312b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    tBTA_DM_BLE_PF_COND_MASK uuid_mask;
1313b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1314b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.srvc_uuid.p_target_addr = NULL;
1315b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.srvc_uuid.cond_logic = BTA_DM_BLE_PF_LOGIC_AND;
13161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    btif_to_bta_uuid(&cond.srvc_uuid.uuid, &p_adv_filt_cb->uuid);
1317b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1318b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.srvc_uuid.p_uuid_mask = NULL;
13191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    if (p_adv_filt_cb->has_mask)
1320b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    {
13211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                        btif_to_bta_uuid_mask(&uuid_mask, &p_adv_filt_cb->uuid_mask);
1322b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                        cond.srvc_uuid.p_uuid_mask = &uuid_mask;
1323b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    }
13241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13251a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13261a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
13271a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1328b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1329b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1330b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1331b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_SRVC_SOL_UUID: // 3
1332b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
1333b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.solicitate_uuid.p_target_addr = NULL;
1334b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.solicitate_uuid.cond_logic = BTA_DM_BLE_PF_LOGIC_AND;
13351a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    btif_to_bta_uuid(&cond.solicitate_uuid.uuid, &p_adv_filt_cb->uuid);
13361a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13371a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13381a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
13391a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1340b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1341b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1342b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1343b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_LOCAL_NAME: // 4
1344b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
13451a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.local_name.data_len = p_adv_filt_cb->value_len;
13461a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.local_name.p_data = p_adv_filt_cb->value;
13471a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13481a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13491a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
13501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1351b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1352b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1353b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1354b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_MANU_DATA: // 5
1355b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
13561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.company_id = p_adv_filt_cb->conn_id;
13571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.company_id_mask = p_adv_filt_cb->company_id_mask;
13581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.data_len = p_adv_filt_cb->value_len;
13591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.p_pattern = p_adv_filt_cb->value;
13601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.p_pattern_mask = p_adv_filt_cb->value_mask;
13611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
13641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1365b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1366b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1367b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
13681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                case BTA_DM_BLE_PF_SRVC_DATA_PATTERN: //6
13691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                {
13701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.srvc_data.data_len = p_adv_filt_cb->value_len;
13711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.srvc_data.p_pattern = p_adv_filt_cb->value;
13721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.srvc_data.p_pattern_mask = p_adv_filt_cb->value_mask;
13731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                                p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                                &cond, bta_scan_filt_cfg_cb,
13761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                                p_adv_filt_cb->client_if);
13771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   break;
13781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                }
13791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
1380b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                default:
1381db554581079863974af8e1289646f5deea6fc044Marie Janssen                    LOG_ERROR(LOG_TAG, "%s: Unknown filter type (%d)!", __FUNCTION__, p_cb->action);
1382b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1383b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            }
1384b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            break;
1385b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        }
1386b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1387b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        case BTIF_GATTC_SCAN_FILTER_CLEAR:
1388b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        {
138952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
1390b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            BTA_DmBleCfgFilterCondition(BTA_DM_BLE_SCAN_COND_CLEAR, BTA_DM_BLE_PF_TYPE_ALL,
13916e2d9db5148176d88d7f48c3b2ad5b27c57ca14dSatya Calloji                                        p_adv_filt_cb->filt_index, NULL, bta_scan_filt_cfg_cb,
13926e2d9db5148176d88d7f48c3b2ad5b27c57ca14dSatya Calloji                                        p_adv_filt_cb->client_if);
13931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
13941a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
13951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
13961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTIF_GATTC_SCAN_FILTER_ENABLE:
13971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
139852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
13991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTA_DmEnableScanFilter(p_adv_filt_cb->action, bta_scan_filt_status_cb,
14001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                   p_adv_filt_cb->client_if);
1401b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            break;
1402b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        }
1403b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
14045c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        case BTIF_GATTC_LISTEN:
1405602162a13c6ed8abae53aee6deeda48b79f30911Zhihai Xu#if (defined(BLE_PERIPHERAL_MODE_SUPPORT) && (BLE_PERIPHERAL_MODE_SUPPORT == TRUE))
14065c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            BTA_GATTC_Listen(p_cb->client_if, p_cb->start, NULL);
1407eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach#else
1408a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach            BTA_GATTC_Broadcast(p_cb->client_if, p_cb->start);
1409eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach#endif
14105c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            break;
14115c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
14125c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        case BTIF_GATTC_SET_ADV_DATA:
14135c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        {
14140d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            const btif_adv_data_t *p_adv_data = (btif_adv_data_t*) p_param;
14150d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            const int cbindex = CLNT_IF_IDX;
14160d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            if (cbindex >= 0 && btif_gattc_copy_datacb(cbindex, p_adv_data, false))
1417a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            {
1418a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb();
1419a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                if (!p_adv_data->set_scan_rsp)
1420a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                {
1421a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    BTA_DmBleSetAdvConfig(p_multi_adv_data_cb->inst_cb[cbindex].mask,
1422a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        &p_multi_adv_data_cb->inst_cb[cbindex].data, bta_gattc_set_adv_data_cback);
1423a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                }
1424a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                else
1425a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                {
1426a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    BTA_DmBleSetScanRsp(p_multi_adv_data_cb->inst_cb[cbindex].mask,
1427a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        &p_multi_adv_data_cb->inst_cb[cbindex].data, bta_gattc_set_adv_data_cback);
1428a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                }
1429a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            }
14300d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            else
14310d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            {
14320d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                BTIF_TRACE_ERROR("%s:%s: failed to get instance data cbindex: %d",
14330d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                                 __func__, "BTIF_GATTC_SET_ADV_DATA", cbindex);
14340d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            }
14350d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            break;
1436a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1437a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1438a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_ENABLE:
1439a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
144052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param;
144116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
144216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            int cbindex = -1, arrindex = -1;
144316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
144416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            arrindex = btif_multi_adv_add_instid_map(p_inst_cb->client_if,INVALID_ADV_INST, true);
144516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (arrindex >= 0)
144616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                cbindex = btif_gattc_obtain_idx_for_datacb(p_inst_cb->client_if, CLNT_IF_IDX);
144716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
144816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (cbindex >= 0 && arrindex >= 0)
1449a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            {
1450a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb();
1451a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                memcpy(&p_multi_adv_data_cb->inst_cb[cbindex].param,
1452a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                       &p_inst_cb->param, sizeof(tBTA_BLE_ADV_PARAMS));
1453cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach                p_multi_adv_data_cb->inst_cb[cbindex].timeout_s = p_inst_cb->timeout_s;
145416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                BTIF_TRACE_DEBUG("%s, client_if value: %d", __FUNCTION__,
145516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                            p_multi_adv_data_cb->clntif_map[arrindex + arrindex]);
1456a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                BTA_BleEnableAdvInstance(&(p_multi_adv_data_cb->inst_cb[cbindex].param),
1457a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    bta_gattc_multi_adv_cback,
145816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                    &(p_multi_adv_data_cb->clntif_map[arrindex + arrindex]));
1459a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            }
14605c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            else
146116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            {
146216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                /* let the error propagate up from BTA layer */
1463e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("%s invalid index in BTIF_GATTC_ENABLE_ADV",__FUNCTION__);
146416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                BTA_BleEnableAdvInstance(&p_inst_cb->param, bta_gattc_multi_adv_cback, NULL);
146516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            }
1466a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
1467a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1468eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
1469a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_UPDATE:
1470a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
147152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param;
1472a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int inst_id = btif_multi_adv_instid_for_clientif(p_inst_cb->client_if);
1473a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int cbindex = btif_gattc_obtain_idx_for_datacb(p_inst_cb->client_if, CLNT_IF_IDX);
147416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (inst_id >= 0 && cbindex >= 0 && NULL != p_inst_cb)
1475a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            {
1476a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb();
1477a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                memcpy(&p_multi_adv_data_cb->inst_cb[cbindex].param, &p_inst_cb->param,
1478a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        sizeof(tBTA_BLE_ADV_PARAMS));
1479a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                BTA_BleUpdateAdvInstParam((UINT8)inst_id,
1480a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    &(p_multi_adv_data_cb->inst_cb[cbindex].param));
1481a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            }
1482a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            else
1483e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("%s invalid index in BTIF_GATTC_UPDATE_ADV", __FUNCTION__);
1484a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
1485a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1486a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1487a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_SET_DATA:
1488a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
148952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_adv_data_t *p_adv_data = (btif_adv_data_t*) p_param;
1490a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int cbindex = btif_gattc_obtain_idx_for_datacb(p_adv_data->client_if, CLNT_IF_IDX);
1491a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int inst_id = btif_multi_adv_instid_for_clientif(p_adv_data->client_if);
14920d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            if (inst_id >= 0 && cbindex >= 0 && btif_gattc_copy_datacb(cbindex, p_adv_data, true))
1493eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach            {
14940d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                btgatt_multi_adv_common_data *p_multi_adv_data_cb =
14950d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    btif_obtain_multi_adv_data_cb();
14960d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                BTA_BleCfgAdvInstData(
14970d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    (UINT8)inst_id,
1498d4c103624b3d7672110abeb753ed79113ee48989Ian Coolidge                    p_adv_data->set_scan_rsp,
14990d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    p_multi_adv_data_cb->inst_cb[cbindex].mask,
15000d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    &p_multi_adv_data_cb->inst_cb[cbindex].data);
15010d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            }
15020d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            else
15030d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            {
15040d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                BTIF_TRACE_ERROR(
15050d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    "%s:%s: failed to get invalid instance data: inst_id:%d "
15060d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    "cbindex:%d",
15070d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    __func__, "BTIF_GATTC_ADV_INSTANCE_SET_DATA", inst_id, cbindex);
1508eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach            }
1509a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
1510a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1511a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1512a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_DISABLE:
1513a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
151452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param;
1515a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int inst_id = btif_multi_adv_instid_for_clientif(p_inst_cb->client_if);
151616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (inst_id >=0)
1517a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                BTA_BleDisableAdvInstance((UINT8)inst_id);
1518a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            else
1519e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("%s invalid instance ID in BTIF_GATTC_DISABLE_ADV",__FUNCTION__);
15205c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            break;
15215c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        }
1522a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
15239426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        case BTIF_GATTC_CONFIGURE_MTU:
15249426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            BTA_GATTC_ConfigureMTU(p_cb->conn_id, p_cb->len);
15259426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            break;
15265c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
152752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach        case BTIF_GATTC_CONN_PARAM_UPDT:
152852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach        {
152952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_conn_param_cb_t *p_conn_param_cb = (btif_conn_param_cb_t*) p_param;
153052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            if (BTA_DmGetConnectionState(p_conn_param_cb->bd_addr.address))
153152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            {
153252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                BTA_DmBleUpdateConnectionParams(p_conn_param_cb->bd_addr.address,
153352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->min_interval, p_conn_param_cb->max_interval,
153452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->latency, p_conn_param_cb->timeout);
153552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            } else {
153652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                BTA_DmSetBlePrefConnParams(p_conn_param_cb->bd_addr.address,
153752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->min_interval, p_conn_param_cb->max_interval,
153852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->latency, p_conn_param_cb->timeout);
153952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            }
154052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            break;
154152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach        }
154252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach
15437d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham        case BTIF_GATTC_SET_SCAN_PARAMS:
1544979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        {
1545979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            BTA_DmSetBleScanParams(p_cb->client_if, p_cb->scan_interval, p_cb->scan_window,
1546979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                                   BTM_BLE_SCAN_MODE_ACTI, bta_scan_param_setup_cb);
15477d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham            break;
1548979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        }
15497d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham
1550c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_CONFIG_STORAGE_PARAMS:
1551c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
155252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1553c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleSetStorageParams(p_scan_track_cb->batch_scan_full_max,
1554c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               p_scan_track_cb->batch_scan_trunc_max, p_scan_track_cb->batch_scan_notify_threshold,
1555c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               bta_batch_scan_setup_cb, bta_batch_scan_threshold_cb, bta_batch_scan_reports_cb,
155652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach               (tBTA_DM_BLE_REF_VALUE) p_scan_track_cb->client_if);
1557c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1558c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1559c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1560c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_ENABLE_BATCH_SCAN:
1561c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
156252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1563c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleEnableBatchScan(p_scan_track_cb->scan_mode, p_scan_track_cb->scan_interval,
1564c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               p_scan_track_cb->scan_window, p_scan_track_cb->discard_rule,
1565c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               p_scan_track_cb->addr_type, p_scan_track_cb->client_if);
1566c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1567c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1568c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1569c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_DISABLE_BATCH_SCAN:
1570c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
157152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1572c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleDisableBatchScan(p_scan_track_cb->client_if);
1573c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1574c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1575c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1576c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_READ_BATCH_SCAN_REPORTS:
1577c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
157852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1579c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleReadScanReports(p_scan_track_cb->scan_mode, p_scan_track_cb->client_if);
1580c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1581c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1582c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1583ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        default:
1584db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_ERROR(LOG_TAG, "%s: Unknown event (%d)!", __FUNCTION__, event);
1585ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1586ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1587ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1588ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1589ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
1590ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Client API Functions
1591ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
1592ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1593ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_register_app(bt_uuid_t *uuid)
1594ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1595ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1596ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1597ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.uuid, uuid, sizeof(bt_uuid_t));
1598ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REGISTER_APP,
1599ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1600ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1601ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1602ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_unregister_app(int client_if )
1603ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1604ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1605ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1606ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1607ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_UNREGISTER_APP,
1608ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1609ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1610ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
16117d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadhamstatic bt_status_t btif_gattc_scan( bool start )
1612ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1613ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1614ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1615ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, start ? BTIF_GATTC_SCAN_START : BTIF_GATTC_SCAN_STOP,
1616ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1617ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1618ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
16197fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battastatic bt_status_t btif_gattc_open(int client_if, const bt_bdaddr_t *bd_addr,
16207fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                        bool is_direct,int transport)
1621ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1622ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1623ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1624ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1625ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.is_direct = is_direct ? 1 : 0;
16267fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    btif_cb.transport = (btgatt_transport_t)transport;
1627ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
1628ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_OPEN,
1629ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1630ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1631ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1632ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_close( int client_if, const bt_bdaddr_t *bd_addr, int conn_id)
1633ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1634ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1635ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1636ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1637ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1638ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
1639ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CLOSE,
1640ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1641ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1642ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
16435c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachstatic bt_status_t btif_gattc_listen(int client_if, bool start)
16445c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
16455c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    CHECK_BTGATT_INIT();
16465c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_gattc_cb_t btif_cb;
16475c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_cb.client_if = (uint8_t) client_if;
16485c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_cb.start = start ? 1 : 0;
16495c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_LISTEN,
16505c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
16515c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
16525c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
16535c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachstatic bt_status_t btif_gattc_set_adv_data(int client_if, bool set_scan_rsp, bool include_name,
16545c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                bool include_txpower, int min_interval, int max_interval, int appearance,
1655eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach                uint16_t manufacturer_len, char* manufacturer_data,
1656eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach                uint16_t service_data_len, char* service_data,
1657eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach                uint16_t service_uuid_len, char* service_uuid)
16585c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
16595c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    CHECK_BTGATT_INIT();
1660a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_adv_data_t adv_data;
1661eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
1662a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_adv_data_packager(client_if, set_scan_rsp, include_name,
1663a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        include_txpower, min_interval, max_interval, appearance, manufacturer_len,
1664a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        manufacturer_data, service_data_len, service_data, service_uuid_len, service_uuid,
1665a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        &adv_data);
1666eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
16670d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    bt_status_t status = btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SET_ADV_DATA,
16681668d204a0da63609fa1affcc86de9b76d0a0f48Jakub Pawlowski                       (char*) &adv_data, sizeof(adv_data), NULL);
1669a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return status;
16705c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
16715c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
1672140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowskistatic bt_status_t btif_gattc_refresh(int client_if,
1673140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski                                      const bt_bdaddr_t *bd_addr) {
1674140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski  CHECK_BTGATT_INIT();
1675140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski  // Closure will own this value and free it.
1676140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski  uint8_t *address = new BD_ADDR;
1677140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski  bdcpy(address, bd_addr->address);
1678140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski  return do_in_jni_thread(Bind(&BTA_GATTC_Refresh, base::Owned(address)));
1679ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1680ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1681ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_search_service(int conn_id, bt_uuid_t *filter_uuid )
1682ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1683ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1684ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1685ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1686ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.search_all = filter_uuid ? 0 : 1;
1687ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (filter_uuid)
1688ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memcpy(&btif_cb.uuid, filter_uuid, sizeof(bt_uuid_t));
1689ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SEARCH_SERVICE,
1690ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1691ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1692ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1693533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowskistatic bt_status_t btif_gattc_get_gatt_db(int conn_id)
1694533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski{
1695533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    CHECK_BTGATT_INIT();
1696533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    btif_gattc_cb_t btif_cb;
1697533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    btif_cb.conn_id = (uint16_t) conn_id;
1698533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
1699533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_GATT_DB,
1700533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1701533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski}
1702533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
1703533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
17049dc998503590163068845827d951fc2f05a17bdaJakub Pawlowskistatic bt_status_t btif_gattc_read_char(int conn_id, uint16_t handle, int auth_req)
1705ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1706ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1707ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1708ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
17099dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    btif_cb.handle = (uint16_t) handle;
1710ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
1711ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_CHAR,
1712ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1713ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1714ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
17159dc998503590163068845827d951fc2f05a17bdaJakub Pawlowskistatic bt_status_t btif_gattc_read_char_descr(int conn_id, uint16_t handle, int auth_req)
1716ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1717ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1718ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1719ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
17209dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    btif_cb.handle = (uint16_t) handle;
1721ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
1722ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_CHAR_DESCR,
1723ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1724ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1725ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
17269dc998503590163068845827d951fc2f05a17bdaJakub Pawlowskistatic bt_status_t btif_gattc_write_char(int conn_id, uint16_t handle, int write_type,
1727ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                         int len, int auth_req, char* p_value)
1728ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1729ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1730ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1731ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
17329dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    btif_cb.handle = (uint16_t) handle;
1733ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
1734ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.write_type = (uint8_t) write_type;
1735ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.len = len > BTGATT_MAX_ATTR_LEN ? BTGATT_MAX_ATTR_LEN : len;
1736ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(btif_cb.value, p_value, btif_cb.len);
1737ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_WRITE_CHAR,
1738ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1739ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1740ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
17419dc998503590163068845827d951fc2f05a17bdaJakub Pawlowskistatic bt_status_t btif_gattc_write_char_descr(int conn_id, uint16_t handle,
1742ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                               int write_type, int len, int auth_req,
1743ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                               char* p_value)
1744ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1745ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1746ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1747ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
17489dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    btif_cb.handle = (uint16_t) handle;
1749ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
1750ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.write_type = (uint8_t) write_type;
1751ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.len = len > BTGATT_MAX_ATTR_LEN ? BTGATT_MAX_ATTR_LEN : len;
1752ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(btif_cb.value, p_value, btif_cb.len);
1753ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_WRITE_CHAR_DESCR,
1754ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1755ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1756ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1757ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_execute_write(int conn_id, int execute)
1758ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1759ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1760ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1761ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1762ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.action = (uint8_t) execute;
1763ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_EXECUTE_WRITE,
1764ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1765ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1766ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1767ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_reg_for_notification(int client_if, const bt_bdaddr_t *bd_addr,
17689dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                                                   uint16_t handle)
1769ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1770ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1771ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1772ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1773ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
17749dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    btif_cb.handle = handle;
1775ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REG_FOR_NOTIFICATION,
1776ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1777ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1778ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1779ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_dereg_for_notification(int client_if, const bt_bdaddr_t *bd_addr,
17809dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                                                     uint16_t handle)
1781ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1782ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1783ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1784ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1785ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
17869dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    btif_cb.handle = handle;
1787ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_DEREG_FOR_NOTIFICATION,
1788ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1789ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1790ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1791ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_read_remote_rssi(int client_if, const bt_bdaddr_t *bd_addr)
1792ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1793ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1794ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1795ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1796ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
1797ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_RSSI,
1798ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1799ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1800ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
18019426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbachstatic bt_status_t btif_gattc_configure_mtu(int conn_id, int mtu)
18029426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach{
18039426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    CHECK_BTGATT_INIT();
18049426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_gattc_cb_t btif_cb;
18059426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_cb.conn_id = conn_id;
18069426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_cb.len = mtu; // Re-use len field
18079426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONFIGURE_MTU,
18089426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
18099426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach}
18109426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
181152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbachstatic bt_status_t btif_gattc_conn_parameter_update(const bt_bdaddr_t *bd_addr, int min_interval,
181252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                    int max_interval, int latency, int timeout)
181352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach{
181452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    CHECK_BTGATT_INIT();
181552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_conn_param_cb_t btif_cb;
181652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.min_interval = min_interval;
181752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.max_interval = max_interval;
181852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.latency = latency;
181952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.timeout = timeout;
182052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
182152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONN_PARAM_UPDT,
182252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                                 (char*) &btif_cb, sizeof(btif_conn_param_cb_t), NULL);
182352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach}
182452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach
1825f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Callojistatic bt_status_t btif_gattc_scan_filter_param_setup(btgatt_filt_param_setup_t
1826f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji                                                      filt_param)
1827b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
1828b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    CHECK_BTGATT_INIT();
18291a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
18301a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
18316cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
1832f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.client_if = filt_param.client_if;
1833f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.action = filt_param.action;
1834f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.filt_index = filt_param.filt_index;
1835f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.feat_seln = filt_param.feat_seln;
1836f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.list_logic_type = filt_param.list_logic_type;
1837f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.filt_logic_type = filt_param.filt_logic_type;
1838f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.rssi_high_thres = filt_param.rssi_high_thres;
1839f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.rssi_low_thres = filt_param.rssi_low_thres;
1840f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.dely_mode = filt_param.dely_mode;
1841f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.found_timeout = filt_param.found_timeout;
1842f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.lost_timeout = filt_param.lost_timeout;
1843f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.found_timeout_cnt = filt_param.found_timeout_cnt;
1844f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.num_of_tracking_entries = filt_param.num_of_tracking_entries;
18451a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_PARAM_SETUP,
18461a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
1847b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
1848b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
18491a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_add_remove(int client_if, int action,
18501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              int filt_type, int filt_index, int company_id,
18511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              int company_id_mask, const bt_uuid_t *p_uuid,
18521a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              const bt_uuid_t *p_uuid_mask, const bt_bdaddr_t *bd_addr,
18531a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              char addr_type, int data_len, char* p_data, int mask_len,
18541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              char* p_mask)
1855b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
1856b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    CHECK_BTGATT_INIT();
18571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
18586cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
18591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s, %d, %d", __FUNCTION__, action, filt_type);
18601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
18611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    /* If data is passed, both mask and data have to be the same length */
186216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (data_len != mask_len && NULL != p_data && NULL != p_mask)
18631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        return BT_STATUS_PARM_INVALID;
18641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
18651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.client_if = client_if;
18661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.action = action;
18671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.filt_index = filt_index;
18681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.filt_type = filt_type;
18691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.conn_id = company_id;
18701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.company_id_mask = company_id_mask ? company_id_mask : 0xFFFF;
187116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (bd_addr)
187216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        bdcpy(btif_filt_cb.bd_addr.address, bd_addr->address);
18731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
18741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.addr_type = addr_type;
18751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.has_mask = (p_uuid_mask != NULL);
1876b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1877b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    if (p_uuid != NULL)
18781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(&btif_filt_cb.uuid, p_uuid, sizeof(bt_uuid_t));
1879b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    if (p_uuid_mask != NULL)
18801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(&btif_filt_cb.uuid_mask, p_uuid_mask, sizeof(bt_uuid_t));
18811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if (p_data != NULL && data_len != 0)
18821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    {
18831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(btif_filt_cb.value, p_data, data_len);
18841a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        btif_filt_cb.value_len = data_len;
18851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(btif_filt_cb.value_mask, p_mask, mask_len);
18861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        btif_filt_cb.value_mask_len = mask_len;
18871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    }
1888b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_CONFIG,
18891a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
1890b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
1891b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
18921a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_clear(int client_if, int filt_index)
1893b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
1894b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    CHECK_BTGATT_INIT();
18951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s, %d", __FUNCTION__, filt_index);
18961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
18971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
18986cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
18991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.client_if = client_if;
19001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.filt_index = filt_index;
19011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.action = BTA_DM_BLE_SCAN_COND_CLEAR;
19021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_CONFIG,
19031a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
19041a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
19051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
19061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_enable(int client_if, bool enable)
19071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
19081a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    int action = 0;
19091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    CHECK_BTGATT_INIT();
19101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s, %d", __FUNCTION__, enable);
19111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
19121a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
19136cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
19141a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.client_if = client_if;
191516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (true == enable)
19161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        action = 1;
19171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.action = action;
19181a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_ENABLE,
19191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
1920b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
1921b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1922979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbachstatic bt_status_t btif_gattc_set_scan_parameters(int client_if, int scan_interval,
1923979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                                                  int scan_window)
19247d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham{
19257d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    CHECK_BTGATT_INIT();
19267d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_gattc_cb_t btif_cb;
1927979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_cb.client_if = client_if;
19287d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_cb.scan_interval = scan_interval;
19297d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_cb.scan_window = scan_window;
19307d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SET_SCAN_PARAMS,
19317d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
19327d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham}
19337d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham
1934ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic int btif_gattc_get_device_type( const bt_bdaddr_t *bd_addr )
1935ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1936ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    int device_type = 0;
1937ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    char bd_addr_str[18] = {0};
1938ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
19398a6a89faa942aed4f176b0c98402d01c8bdd6aa6Sharvil Nanavati    bdaddr_to_string(bd_addr, bd_addr_str, sizeof(bd_addr_str));
19409d52f88bfc07556cb01ab3055f5b1242c9b467aaSharvil Nanavati    if (btif_config_get_int(bd_addr_str, "DevType", &device_type))
1941ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return device_type;
1942ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return 0;
1943ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1944ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1945a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_enable(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_ENABLE,
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_update(int client_if, int min_interval, int max_interval,
19659dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                                            int adv_type, int chnl_map,int tx_power, int timeout_s)
1966a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
1967a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
1968a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btgatt_multi_adv_inst_cb adv_cb;
19696cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
1970a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.client_if = (uint8_t) client_if;
1971a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1972a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_min = min_interval;
1973a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_max = max_interval;
1974a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_type = adv_type;
1975a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.channel_map = chnl_map;
1976a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_filter_policy = 0;
1977a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.tx_power = tx_power;
19789dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach    adv_cb.timeout_s = timeout_s;
1979a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_UPDATE,
1980a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                         (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL);
1981a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
1982a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1983a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_setdata(int client_if, bool set_scan_rsp,
19849dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                bool include_name, bool incl_txpower, int appearance,
19859dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                int manufacturer_len, char* manufacturer_data,
19869dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                int service_data_len, char* service_data,
19879dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                int service_uuid_len, char* service_uuid)
1988a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
1989a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
1990a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1991a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_adv_data_t multi_adv_data_inst;
19920d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    memset(&multi_adv_data_inst, 0, sizeof(multi_adv_data_inst));
19930d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
19940d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    const int min_interval = 0;
19950d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    const int max_interval = 0;
1996a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1997a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_adv_data_packager(client_if, set_scan_rsp, include_name, incl_txpower,
1998a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        min_interval, max_interval, appearance, manufacturer_len, manufacturer_data,
1999a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        service_data_len, service_data, service_uuid_len, service_uuid, &multi_adv_data_inst);
2000a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
20010d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    bt_status_t status = btif_transfer_context(
20020d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_SET_DATA,
20031668d204a0da63609fa1affcc86de9b76d0a0f48Jakub Pawlowski        (char *)&multi_adv_data_inst, sizeof(multi_adv_data_inst), NULL);
2004a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return status;
2005a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
2006a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2007a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_disable(int client_if)
2008a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
2009a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
2010a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btgatt_multi_adv_inst_cb adv_cb;
20116cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
2012a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.client_if = (uint8_t) client_if;
2013a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2014a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_DISABLE,
2015a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                           (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL);
2016a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
2017a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2018c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_cfg_storage(int client_if,int batch_scan_full_max,
2019c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    int batch_scan_trunc_max, int batch_scan_notify_threshold)
2020c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2021c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2022c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
20236cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2024c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2025c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.batch_scan_full_max = batch_scan_full_max;
2026c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.batch_scan_trunc_max = batch_scan_trunc_max;
2027c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.batch_scan_notify_threshold = batch_scan_notify_threshold;
2028c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONFIG_STORAGE_PARAMS,
2029c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2030c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2031c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2032c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_enb_batch_scan(int client_if,int scan_mode, int scan_interval,
2033c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                int scan_window, int addr_type, int discard_rule)
2034c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2035c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2036c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
20376cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2038c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2039c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_mode = scan_mode;
2040c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_interval = scan_interval;
2041c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_window = scan_window;
2042c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.discard_rule = discard_rule;
2043c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.addr_type = addr_type;
2044c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ENABLE_BATCH_SCAN,
2045c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2046c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2047c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2048c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_dis_batch_scan(int client_if)
2049c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2050c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2051c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
20526cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2053c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2054c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_DISABLE_BATCH_SCAN,
2055c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2056c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2057c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2058c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_read_batch_scan_reports(int client_if, int scan_mode)
2059c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2060c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2061c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
20626cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2063c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2064c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_mode = scan_mode;
2065c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_BATCH_SCAN_REPORTS,
2066c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2067c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2068c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2069ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern bt_status_t btif_gattc_test_command_impl(int command, btgatt_test_params_t* params);
2070ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2071ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_test_command(int command, btgatt_test_params_t* params)
2072ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2073ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_gattc_test_command_impl(command, params);
2074ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2075ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2076ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaconst btgatt_client_interface_t btgattClientInterface = {
2077ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_register_app,
2078ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_unregister_app,
2079ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_scan,
2080ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_open,
2081ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_close,
20825c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_gattc_listen,
2083ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_refresh,
2084ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_search_service,
2085ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_read_char,
2086ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_write_char,
2087ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_read_char_descr,
2088ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_write_char_descr,
2089ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_execute_write,
2090ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_reg_for_notification,
2091ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_dereg_for_notification,
2092ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_read_remote_rssi,
20931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_gattc_scan_filter_param_setup,
20941a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_gattc_scan_filter_add_remove,
2095b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    btif_gattc_scan_filter_clear,
20961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_gattc_scan_filter_enable,
2097ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_get_device_type,
20985c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_gattc_set_adv_data,
20999426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_gattc_configure_mtu,
210052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_gattc_conn_parameter_update,
21017d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_gattc_set_scan_parameters,
2102a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_enable,
2103a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_update,
2104a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_setdata,
2105a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_disable,
2106c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_cfg_storage,
2107c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_enb_batch_scan,
2108c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_dis_batch_scan,
2109c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_read_batch_scan_reports,
2110533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    btif_gattc_test_command,
2111533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    btif_gattc_get_gatt_db
2112ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta};
2113ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2114ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
2115