btif_gatt_client.cc revision 9dc998503590163068845827d951fc2f05a17bda
1ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************
2ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
3c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji *  Copyright (C) 2009-2014 Broadcom Corporation
4ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
5ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  Licensed under the Apache License, Version 2.0 (the "License");
6ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  you may not use this file except in compliance with the License.
7ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  You may obtain a copy of the License at:
8ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
9ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  http://www.apache.org/licenses/LICENSE-2.0
10ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
11ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  Unless required by applicable law or agreed to in writing, software
12ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  distributed under the License is distributed on an "AS IS" BASIS,
13ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  See the License for the specific language governing permissions and
15ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  limitations under the License.
16ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
17ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ******************************************************************************/
18ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
19ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
20ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
21ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  Filename:      btif_gatt_client.c
22ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
23ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *  Description:   GATT client implementation
24ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *
25ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *******************************************************************************/
26ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2749120dc867c7818511b5afec461dfc97d17eef58Marie Janssen#define LOG_TAG "bt_btif_gattc"
2849120dc867c7818511b5afec461dfc97d17eef58Marie Janssen
2949a86709488e5cfd5e23759da18bf9613e15b04dMarie Janssen#include <errno.h>
30ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <hardware/bluetooth.h>
31ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdio.h>
32ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdlib.h>
33ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <string.h>
346ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji#include "device/include/controller.h"
356ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji
36ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
3795b74f252f534ec757aab1fc08e086e02b2cfe8dSharvil Nanavati#include "btcore/include/bdaddr.h"
38ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_common.h"
39ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_util.h"
40ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
41ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (defined(BLE_INCLUDED) && (BLE_INCLUDED == TRUE))
42ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
436975b4d711142b885af479721cada448952c6b41Andre Eisenbach#include <hardware/bt_gatt.h>
44db554581079863974af8e1289646f5deea6fc044Marie Janssen
45ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_api.h"
46ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_gatt_api.h"
47ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_config.h"
48db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_dm.h"
49ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_gatt.h"
50db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_gatt_multi_adv_util.h"
51ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_gatt_util.h"
52ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_storage.h"
53db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_storage.h"
5444802768c447ab480d4227b3a852a97d923b816dSharvil Nanavati#include "osi/include/log.h"
55b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach#include "vendor_api.h"
56b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
57ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
58ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Constants & Macros
59ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
60ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
61ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define CHECK_BTGATT_INIT() if (bt_gatt_callbacks == NULL)\
62ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {\
63db554581079863974af8e1289646f5deea6fc044Marie Janssen        LOG_WARN(LOG_TAG, "%s: BTGATT not initialized", __FUNCTION__);\
64ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return BT_STATUS_NOT_READY;\
65ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    } else {\
66db554581079863974af8e1289646f5deea6fc044Marie Janssen        LOG_VERBOSE(LOG_TAG, "%s", __FUNCTION__);\
67ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
68ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
69a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BLE_RESOLVE_ADDR_MSB                 0x40   /* bit7, bit6 is 01 to be resolvable random */
70a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BLE_RESOLVE_ADDR_MASK                0xc0   /* bit 6, and bit7 */
71a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BTM_BLE_IS_RESOLVE_BDA(x)           ((x[0] & BLE_RESOLVE_ADDR_MASK) == BLE_RESOLVE_ADDR_MSB)
72ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
73ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef enum {
74ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_REGISTER_APP = 1000,
75ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_UNREGISTER_APP,
76ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_SCAN_START,
77ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_SCAN_STOP,
78ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_OPEN,
79ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_CLOSE,
80ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_SEARCH_SERVICE,
81ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_READ_CHAR,
82ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_READ_CHAR_DESCR,
83ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_WRITE_CHAR,
84ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_WRITE_CHAR_DESCR,
85ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_EXECUTE_WRITE,
86ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_REG_FOR_NOTIFICATION,
87ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_DEREG_FOR_NOTIFICATION,
88ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BTIF_GATTC_REFRESH,
895c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    BTIF_GATTC_READ_RSSI,
905c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    BTIF_GATTC_LISTEN,
919426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    BTIF_GATTC_SET_ADV_DATA,
929426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    BTIF_GATTC_CONFIGURE_MTU,
9352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    BTIF_GATTC_CONN_PARAM_UPDT,
941a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_GATTC_SCAN_FILTER_PARAM_SETUP,
95b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    BTIF_GATTC_SCAN_FILTER_CONFIG,
967d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    BTIF_GATTC_SCAN_FILTER_CLEAR,
971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_GATTC_SCAN_FILTER_ENABLE,
987d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    BTIF_GATTC_SET_SCAN_PARAMS,
99a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    BTIF_GATTC_ADV_INSTANCE_ENABLE,
100a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    BTIF_GATTC_ADV_INSTANCE_UPDATE,
101a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    BTIF_GATTC_ADV_INSTANCE_SET_DATA,
102c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_ADV_INSTANCE_DISABLE,
103c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_CONFIG_STORAGE_PARAMS,
104c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_ENABLE_BATCH_SCAN,
105c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    BTIF_GATTC_READ_BATCH_SCAN_REPORTS,
106533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    BTIF_GATTC_DISABLE_BATCH_SCAN,
107533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    BTIF_GATTC_GET_GATT_DB
108ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} btif_gattc_event_t;
109ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
110ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATT_MAX_OBSERVED_DEV 40
111ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
112ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATT_OBSERVE_EVT   0x1000
113ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATTC_RSSI_EVT     0x1001
114979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach#define BTIF_GATTC_SCAN_FILTER_EVT  0x1003
115979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach#define BTIF_GATTC_SCAN_PARAM_EVT   0x1004
116ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
117c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji#define ENABLE_BATCH_SCAN 1
118c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji#define DISABLE_BATCH_SCAN 0
119c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
120ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
121ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Local type definitions
122ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
123c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojitypedef struct
124c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
125c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t report_format;
126c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint16_t data_len;
127c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t num_records;
128c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t *p_rep_data;
129c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} btgatt_batch_reports;
130c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
131c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojitypedef struct
132c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
133c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  status;
134c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  client_if;
1351acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    uint8_t  action;
1361acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    uint8_t  avbl_space;
1371acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    uint8_t  lost_timeout;
138f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    tBLE_ADDR_TYPE addr_type;
139c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  batch_scan_full_max;
140c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  batch_scan_trunc_max;
141c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint8_t  batch_scan_notify_threshold;
142979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    tBTA_BLE_BATCH_SCAN_MODE scan_mode;
143c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint32_t scan_interval;
144c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    uint32_t scan_window;
145c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    tBTA_BLE_DISCARD_RULE discard_rule;
146f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btgatt_batch_reports  read_reports;
147c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} btgatt_batch_track_cb_t;
148ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1491a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojitypedef tBTA_DM_BLE_PF_FILT_PARAMS btgatt_adv_filt_param_t;
1501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
1511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojitypedef struct
1521a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
1531a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     client_if;
1541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     action;
1551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_DM_BLE_PF_COND_TYPE filt_type;
1561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    bt_bdaddr_t bd_addr;
1571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value[BTGATT_MAX_ATTR_LEN];
1581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value_len;
1591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     filt_index;
1601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint16_t    conn_id;
1611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint16_t    company_id_mask;
1621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    bt_uuid_t   uuid;
1631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    bt_uuid_t   uuid_mask;
1641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value_mask[BTGATT_MAX_ATTR_LEN];
1651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     value_mask_len;
1661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     has_mask;
1671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     addr_type;
1681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    uint8_t     status;
1691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_DM_BLE_PF_AVBL_SPACE avbl_space;
1701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    tBTA_DM_BLE_SCAN_COND_OP cond_op;
1711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filt_param_t adv_filt_param;
1721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji} btgatt_adv_filter_cb_t;
1731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
174ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct
175ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
176ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     value[BTGATT_MAX_ATTR_LEN];
177a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    uint8_t     inst_id;
178ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_bdaddr_t bd_addr;
179ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btgatt_srvc_id_t srvc_id;
180ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btgatt_srvc_id_t incl_srvc_id;
1815f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    btgatt_gatt_id_t char_id;
1825f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach    btgatt_gatt_id_t descr_id;
1839dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    uint16_t    handle;
184ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_uuid_t   uuid;
185b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    bt_uuid_t   uuid_mask;
186ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint16_t    conn_id;
187ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint16_t    len;
188b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    uint16_t    mask;
189979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    uint32_t    scan_interval;
190979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    uint32_t    scan_window;
191ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     client_if;
192ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     action;
193ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     is_direct;
194ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     search_all;
195ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     auth_req;
196ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     write_type;
197ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     status;
198ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t     addr_type;
1995c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    uint8_t     start;
200b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    uint8_t     has_mask;
201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    int8_t      rssi;
2027fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    uint8_t     flag;
203ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBT_DEVICE_TYPE device_type;
2047fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    btgatt_transport_t transport;
205ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} __attribute__((packed)) btif_gattc_cb_t;
206ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
207ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct
208ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
209ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_bdaddr_t bd_addr;
21052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    uint16_t    min_interval;
21152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    uint16_t    max_interval;
21252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    uint16_t    timeout;
21352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    uint16_t    latency;
21452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach} btif_conn_param_cb_t;
21552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach
21652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbachtypedef struct
21752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach{
21852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    bt_bdaddr_t bd_addr;
219ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    BOOLEAN     in_use;
220ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}__attribute__((packed)) btif_gattc_dev_t;
221ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
222ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct
223ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
224ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_dev_t remote_dev[BTIF_GATT_MAX_OBSERVED_DEV];
2257fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    uint8_t            addr_type;
2267fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    uint8_t            next_storage_idx;
227ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}__attribute__((packed)) btif_gattc_dev_cb_t;
228ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
229ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
230ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Static variables
231ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
232ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
233ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern const btgatt_callbacks_t *bt_gatt_callbacks;
234ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_gattc_dev_cb_t  btif_gattc_dev_cb;
235ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_gattc_dev_cb_t  *p_dev_cb = &btif_gattc_dev_cb;
236ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic uint8_t rssi_request_client_if;
237ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
238ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
239ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Static functions
240ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
241ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2429dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbachstatic bt_status_t btif_gattc_multi_adv_disable(int client_if);
24378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovstatic void btif_multi_adv_stop_cb(void *data)
2449dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach{
24578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov    int client_if = PTR_TO_INT(data);
2469dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach    btif_gattc_multi_adv_disable(client_if); // Does context switch
2479dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach}
2489dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach
249979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbachstatic btgattc_error_t btif_gattc_translate_btm_status(tBTM_STATUS status)
250979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach{
251979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    switch(status)
252979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    {
253979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_SUCCESS:
254979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_SUCCESS_NO_SECURITY:
255979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_COMMAND_SUCCESS;
256979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
257979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_CMD_STARTED:
258979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_COMMAND_STARTED;
259979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
260979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_BUSY:
261979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_COMMAND_BUSY;
262979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
263979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_CMD_STORED:
264979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_COMMAND_STORED;
265979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
266979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_NO_RESOURCES:
267979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_NO_RESOURCES;
268979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
269979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_MODE_UNSUPPORTED:
270979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_WRONG_MODE:
271979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_MODE4_LEVEL4_NOT_SUPPORTED:
272979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_MODE_UNSUPPORTED;
273979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
274979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_ILLEGAL_VALUE:
275979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_SCO_BAD_LENGTH:
276979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_ILLEGAL_VALUE;
277979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
278979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_UNKNOWN_ADDR:
279979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_UNKNOWN_ADDR;
280979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
281979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_DEVICE_TIMEOUT:
282979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_DEVICE_TIMEOUT;
283979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
284979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_FAILED_ON_SECURITY:
285979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_REPEATED_ATTEMPTS:
286979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_NOT_AUTHORIZED:
287979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_SECURITY_ERROR;
288979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
289979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_DEV_RESET:
290979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_ILLEGAL_ACTION:
291979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_INCORRECT_STATE;
292979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
293979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_BAD_VALUE_RET:
294979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_INVALID_CONTROLLER_OUTPUT;
295979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
296979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_DELAY_CHECK:
297979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            return BT_GATTC_DELAYED_ENCRYPTION_CHECK;
298979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
299979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       case BTM_ERR_PROCESSING:
300979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach       default:
301979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach          return BT_GATTC_ERR_PROCESSING;
302979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    }
303979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach}
304979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
3058444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbachstatic void btapp_gattc_req_data(UINT16 event, char *p_dest, char *p_src)
3068444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach{
30752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    tBTA_GATTC *p_dest_data = (tBTA_GATTC*) p_dest;
30852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    tBTA_GATTC *p_src_data = (tBTA_GATTC*) p_src;
3098444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3108444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    if (!p_src_data || !p_dest_data)
3118444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach       return;
3128444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3138444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    // Copy basic structure first
3143f06e14fddc0e674347ae28ea4a25218d4ce1d2aPavlin Radoslavov    maybe_non_aligned_memcpy(p_dest_data, p_src_data, sizeof(*p_src_data));
3158444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3168444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    // Allocate buffer for request data if necessary
3178444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    switch (event)
3188444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    {
3198444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_CHAR_EVT:
3208444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_DESCR_EVT:
3218444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
322e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach            if (p_src_data->read.p_value != NULL)
3238444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            {
3249dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                p_dest_data->read.p_value = osi_malloc(sizeof(tBTA_GATT_UNFMT));
3258444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
326717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov                memcpy(p_dest_data->read.p_value, p_src_data->read.p_value,
3279dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                       sizeof(tBTA_GATT_UNFMT));
328717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov
329717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov                // Allocate buffer for att value if necessary
3309dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                if (p_src_data->read.p_value->len > 0 &&
3319dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                    p_src_data->read.p_value->p_value != NULL) {
3329dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                    p_dest_data->read.p_value->p_value =
3339dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                        osi_malloc(p_src_data->read.p_value->len);
3349dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                    memcpy(p_dest_data->read.p_value->p_value,
3359dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                           p_src_data->read.p_value->p_value,
3369dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                           p_src_data->read.p_value->len);
3378444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach                }
338717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov            } else {
339e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_WARNING("%s :Src read.p_value ptr is NULL for event  0x%x",
340e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                                    __FUNCTION__, event);
341e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach                p_dest_data->read.p_value = NULL;
342e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach
343e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach            }
3448444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3458444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3468444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        default:
3478444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3488444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    }
3498444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach}
3508444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3518444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbachstatic void btapp_gattc_free_req_data(UINT16 event, tBTA_GATTC *p_data)
3528444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach{
3538444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    switch (event)
3548444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    {
3558444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_CHAR_EVT:
3568444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        case BTA_GATTC_READ_DESCR_EVT:
3578444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            if (p_data != NULL && p_data->read.p_value != NULL)
3588444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            {
3599dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                if (p_data->read.p_value->len > 0)
3609dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                    osi_free_and_reset((void **)&p_data->read.p_value->p_value);
3619dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski
362cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov                osi_free_and_reset((void **)&p_data->read.p_value);
3638444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            }
3648444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3658444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
3668444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach        default:
3678444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach            break;
3688444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    }
3698444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach}
3708444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
371ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_init_dev_cb(void)
372ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
373ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memset(p_dev_cb, 0, sizeof(btif_gattc_dev_cb_t));
374ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
375c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
376ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_add_remote_bdaddr (BD_ADDR p_bda, uint8_t addr_type)
377ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
378ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t i;
379ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    for (i = 0; i < BTIF_GATT_MAX_OBSERVED_DEV; i++)
380ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
381ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (!p_dev_cb->remote_dev[i].in_use )
382ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
383ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            memcpy(p_dev_cb->remote_dev[i].bd_addr.address, p_bda, BD_ADDR_LEN);
384ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_dev_cb->addr_type = addr_type;
385ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            p_dev_cb->remote_dev[i].in_use = TRUE;
386db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_VERBOSE(LOG_TAG, "%s device added idx=%d", __FUNCTION__, i  );
387ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
388ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
389ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
390ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
391ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if ( i == BTIF_GATT_MAX_OBSERVED_DEV)
392ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
393ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        i= p_dev_cb->next_storage_idx;
394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memcpy(p_dev_cb->remote_dev[i].bd_addr.address, p_bda, BD_ADDR_LEN);
395ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_dev_cb->addr_type = addr_type;
396ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_dev_cb->remote_dev[i].in_use = TRUE;
397db554581079863974af8e1289646f5deea6fc044Marie Janssen        LOG_VERBOSE(LOG_TAG, "%s device overwrite idx=%d", __FUNCTION__, i  );
398ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        p_dev_cb->next_storage_idx++;
39916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        if (p_dev_cb->next_storage_idx >= BTIF_GATT_MAX_OBSERVED_DEV)
400ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta               p_dev_cb->next_storage_idx = 0;
401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
402ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
403ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
404ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic BOOLEAN btif_gattc_find_bdaddr (BD_ADDR p_bda)
405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t i;
407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    for (i = 0; i < BTIF_GATT_MAX_OBSERVED_DEV; i++)
408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        if (p_dev_cb->remote_dev[i].in_use &&
410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            !memcmp(p_dev_cb->remote_dev[i].bd_addr.address, p_bda, BD_ADDR_LEN))
411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            return TRUE;
413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
414ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
415ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return FALSE;
416ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
418ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_update_properties ( btif_gattc_cb_t *p_btif_cb )
419ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
420ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t remote_name_len;
421ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t *p_eir_remote_name=NULL;
422ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_bdname_t bdname;
423ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
424a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson    p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
425ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                         BTM_EIR_COMPLETE_LOCAL_NAME_TYPE, &remote_name_len);
426ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
42716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (p_eir_remote_name == NULL)
428ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
429a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson        p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
430ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                BT_EIR_SHORTENED_LOCAL_NAME_TYPE, &remote_name_len);
431ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
432ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
43316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (p_eir_remote_name)
434ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
435bcbf9cd0727f6903f9cf6c165453539fc55b6072Mike J. Chen        memcpy(bdname.name, p_eir_remote_name, remote_name_len);
436bcbf9cd0727f6903f9cf6c165453539fc55b6072Mike J. Chen        bdname.name[remote_name_len]='\0';
437ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
438db554581079863974af8e1289646f5deea6fc044Marie Janssen        LOG_DEBUG(LOG_TAG, "%s BLE device name=%s len=%d dev_type=%d", __FUNCTION__, bdname.name,
439ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta              remote_name_len, p_btif_cb->device_type  );
440ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        btif_dm_update_ble_remote_properties( p_btif_cb->bd_addr.address,   bdname.name,
441ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                               p_btif_cb->device_type);
442ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
443ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
444ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
445ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_upstreams_evt(uint16_t event, char* p_param)
446ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
447db554581079863974af8e1289646f5deea6fc044Marie Janssen    LOG_VERBOSE(LOG_TAG, "%s: Event %d", __FUNCTION__, event);
448ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
44952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    tBTA_GATTC *p_data = (tBTA_GATTC*) p_param;
450ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    switch (event)
451ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
452ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_REG_EVT:
453ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
454ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bt_uuid_t app_uuid;
455ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bta_to_btif_uuid(&app_uuid, &p_data->reg_oper.app_uuid);
456ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->register_client_cb
457ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->reg_oper.status
458ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->reg_oper.client_if
459ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , &app_uuid
460ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            );
461ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
462ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
463ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
464ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_DEREG_EVT:
465ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
466ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
467ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_READ_CHAR_EVT:
468ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
469ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_read_params_t data;
470ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            set_read_value(&data, &p_data->read);
471ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
472ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->read_characteristic_cb
473ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->read.conn_id, p_data->read.status, &data);
474ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
475ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
476ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
477ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_WRITE_CHAR_EVT:
478ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_PREP_WRITE_EVT:
479ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
4809dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            HAL_CBACK(bt_gatt_callbacks, client->write_characteristic_cb,
4819dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                p_data->write.conn_id, p_data->write.status, p_data->write.handle);
482ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
483ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
484ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
485ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_EXEC_EVT:
486ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
487ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->execute_write_cb
488ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->exec_cmpl.conn_id, p_data->exec_cmpl.status
489ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            );
490ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
491ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
492ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
493ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_SEARCH_CMPL_EVT:
494ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
495ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->search_complete_cb
496ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->search_cmpl.conn_id, p_data->search_cmpl.status);
497ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
498ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
499ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
500ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_READ_DESCR_EVT:
501ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
502ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_read_params_t data;
503ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            set_read_value(&data, &p_data->read);
504ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
505ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->read_descriptor_cb
506ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->read.conn_id, p_data->read.status, &data);
507ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
508ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
509ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
510ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_WRITE_DESCR_EVT:
511ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
5129dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            HAL_CBACK(bt_gatt_callbacks, client->write_descriptor_cb,
5139dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                p_data->write.conn_id, p_data->write.status, p_data->write.handle);
514ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
515ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
516ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
517ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_NOTIF_EVT:
518ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
519ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btgatt_notify_params_t data;
520ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
521ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(data.bda.address, p_data->notify.bda);
522ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            memcpy(data.value, p_data->notify.value, p_data->notify.len);
523ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
5249dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            data.handle = p_data->notify.handle;
525ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            data.is_notify = p_data->notify.is_notify;
526ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            data.len = p_data->notify.len;
527ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
5289dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            HAL_CBACK(bt_gatt_callbacks, client->notify_cb, p_data->notify.conn_id, &data);
529ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
530ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_data->notify.is_notify == FALSE)
5319dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                BTA_GATTC_SendIndConfirm(p_data->notify.conn_id, p_data->notify.handle);
5329dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski
533ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
534ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
535ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
536ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_OPEN_EVT:
537ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
538ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bt_bdaddr_t bda;
539ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(bda.address, p_data->open.remote_bda);
540ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
541ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->open_cb, p_data->open.conn_id
542ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->open.status, p_data->open.client_if, &bda);
5436975b4d711142b885af479721cada448952c6b41Andre Eisenbach
5449426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            if (GATT_DEF_BLE_MTU_SIZE != p_data->open.mtu && p_data->open.mtu)
5459426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            {
5469426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, p_data->open.conn_id
5479426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                    , p_data->open.status , p_data->open.mtu);
5489426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            }
5499426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
5506975b4d711142b885af479721cada448952c6b41Andre Eisenbach            if (p_data->open.status == BTA_GATT_OK)
5514f6c9b4f68d152baf7aa029cbe9b570994584101Nitin Arora                btif_gatt_check_encrypted_link(p_data->open.remote_bda, p_data->open.transport);
552ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
553ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
554ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
555ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_CLOSE_EVT:
556ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
557ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bt_bdaddr_t bda;
558ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(bda.address, p_data->close.remote_bda);
559ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->close_cb, p_data->close.conn_id
560ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                , p_data->status, p_data->close.client_if, &bda);
561ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
562ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
563ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
564ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_ACL_EVT:
565db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_DEBUG(LOG_TAG, "BTA_GATTC_ACL_EVT: status = %d", p_data->status);
566ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            /* Ignore for now */
567ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
568ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
569ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_GATTC_CANCEL_OPEN_EVT:
570ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
571ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
572ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATT_OBSERVE_EVT:
573ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
57452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
575aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            uint8_t remote_name_len;
576aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            uint8_t *p_eir_remote_name=NULL;
5777fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bt_device_type_t dev_type;
5787fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            bt_property_t properties;
579aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi
580a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson            p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
581aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                                         BTM_EIR_COMPLETE_LOCAL_NAME_TYPE, &remote_name_len);
582aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi
58316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (p_eir_remote_name == NULL)
584ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
585a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson                p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value,
586aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                                BT_EIR_SHORTENED_LOCAL_NAME_TYPE, &remote_name_len);
587aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            }
588aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi
589aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            if ((p_btif_cb->addr_type != BLE_ADDR_RANDOM) || (p_eir_remote_name))
590aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi            {
591aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi               if (!btif_gattc_find_bdaddr(p_btif_cb->bd_addr.address))
592aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi               {
593aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                  btif_gattc_add_remote_bdaddr(p_btif_cb->bd_addr.address, p_btif_cb->addr_type);
594aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi                  btif_gattc_update_properties(p_btif_cb);
595aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi               }
596ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
5977fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
5987fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             dev_type =  p_btif_cb->device_type;
5997fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             BTIF_STORAGE_FILL_PROPERTY(&properties,
6007fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                        BT_PROPERTY_TYPE_OF_DEVICE, sizeof(dev_type), &dev_type);
6017fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta             btif_storage_set_remote_device_property(&(p_btif_cb->bd_addr), &properties);
6027fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
6037b9fe757f5df8c529c506b1c41403f2f3f204f9eAndre Eisenbach            btif_storage_set_remote_addr_type( &p_btif_cb->bd_addr, p_btif_cb->addr_type);
6047b9fe757f5df8c529c506b1c41403f2f3f204f9eAndre Eisenbach
605ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->scan_result_cb,
606ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                      &p_btif_cb->bd_addr, p_btif_cb->rssi, p_btif_cb->value);
607ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
608ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
609ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
610ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_RSSI_EVT:
611ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
61252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
613ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->read_remote_rssi_cb, p_btif_cb->client_if,
614ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                      &p_btif_cb->bd_addr, p_btif_cb->rssi, p_btif_cb->status);
615ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
616ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
617ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
6185c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        case BTA_GATTC_LISTEN_EVT:
6195c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        {
6205c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->listen_cb
6215c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                , p_data->reg_oper.status
6225c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                , p_data->reg_oper.client_if
6235c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            );
6245c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            break;
6255c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        }
6269426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
6279426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        case BTA_GATTC_CFG_MTU_EVT:
6289426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        {
6299426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, p_data->cfg_mtu.conn_id
6309426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                , p_data->cfg_mtu.status , p_data->cfg_mtu.mtu);
6319426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            break;
6329426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        }
63317b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach
634a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_ENB_EVT:
635a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
63652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
63716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (0xFF != p_btif_cb->inst_id)
63816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                btif_multi_adv_add_instid_map(p_btif_cb->client_if, p_btif_cb->inst_id, false);
639a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_enable_cb
640a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    , p_btif_cb->client_if
641a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    , p_btif_cb->status
642a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                );
6439dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach            btif_multi_adv_timer_ctrl(p_btif_cb->client_if,
64478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                      (p_btif_cb->status == BTA_GATT_OK) ?
64578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                      btif_multi_adv_stop_cb : NULL);
646a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
647a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
648a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
649a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_UPD_EVT:
650a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
65152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
652a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_update_cb
653a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->client_if
654a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->status
655a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            );
6569dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach            btif_multi_adv_timer_ctrl(p_btif_cb->client_if,
65778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                      (p_btif_cb->status == BTA_GATT_OK) ?
65878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov                                      btif_multi_adv_stop_cb : NULL);
659a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
660a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
661a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
662a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_DATA_EVT:
663a6ce7751d84218c193eb90d390aef23217b1737eWei Wang         {
66452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
6653770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_clear_clientif(p_btif_cb->client_if, FALSE);
666a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_data_cb
667a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->client_if
668a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->status
669a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            );
670a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
671a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
672a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
673a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_MULT_ADV_DIS_EVT:
674a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
67552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param;
6763770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_clear_clientif(p_btif_cb->client_if, TRUE);
677a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            HAL_CBACK(bt_gatt_callbacks, client->multi_adv_disable_cb
678a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->client_if
679a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                , p_btif_cb->status
680a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            );
681a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
682a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
683a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
684a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_GATTC_ADV_DATA_EVT:
685a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
6863770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_cleanup_inst_cb(STD_ADV_INSTID, FALSE);
687a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            /* No HAL callback available */
688a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
689a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
690a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
69117b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach        case BTA_GATTC_CONGEST_EVT:
69217b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->congestion_cb
69317b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach                , p_data->congest.conn_id
69417b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach                , p_data->congest.congested
69517b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach            );
69617b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach            break;
69717b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach
698c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_CFG_EVT:
699c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
70052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
701c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_cfg_storage_cb
702c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                , p_data->client_if
703c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                , p_data->status
704c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            );
705c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
706c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
707c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
708c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_ENB_EVT:
709c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
71052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
711c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_enb_disable_cb
712c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , ENABLE_BATCH_SCAN
713c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->client_if
714c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->status);
715c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
716c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
717c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
718c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_DIS_EVT:
719c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
72052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
721c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_enb_disable_cb
722c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , DISABLE_BATCH_SCAN
723c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->client_if
724c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->status);
725c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
726c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
727c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
728c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_THR_EVT:
729c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
73052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
731c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_threshold_cb
732c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->client_if);
733c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
734c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
735c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
736c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_GATTC_BTH_SCAN_RD_EVT:
737c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
73852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param;
739c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            uint8_t *p_rep_data = NULL;
740c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
741adb7bb50469db992969295792a7ba3b73f9e24b3Satya Calloji            if (p_data->read_reports.data_len > 0 && NULL != p_data->read_reports.p_rep_data)
742c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            {
743cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov                p_rep_data = osi_malloc(p_data->read_reports.data_len);
744c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                memcpy(p_rep_data, p_data->read_reports.p_rep_data, p_data->read_reports.data_len);
745c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            }
746c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
747c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->batchscan_reports_cb
748c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->client_if, p_data->status, p_data->read_reports.report_format
749c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                    , p_data->read_reports.num_records, p_data->read_reports.data_len, p_rep_data);
750cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov            osi_free(p_rep_data);
751c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
752c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
753c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
7541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTA_GATTC_SCAN_FLT_CFG_EVT:
7551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
75652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_btif_cb = (btgatt_adv_filter_cb_t*) p_param;
7571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->scan_filter_cfg_cb, p_btif_cb->action,
7581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                      p_btif_cb->client_if, p_btif_cb->status, p_btif_cb->cond_op,
7591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                      p_btif_cb->avbl_space);
7601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
7611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
7621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
7631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTA_GATTC_SCAN_FLT_PARAM_EVT:
7641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
7651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            btgatt_adv_filter_cb_t *p_data = (btgatt_adv_filter_cb_t*) p_param;
7661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTIF_TRACE_DEBUG("BTA_GATTC_SCAN_FLT_PARAM_EVT: %d, %d, %d, %d",p_data->client_if,
7671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                p_data->action, p_data->avbl_space, p_data->status);
7681acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->scan_filter_param_cb
7691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    , p_data->action, p_data->client_if, p_data->status
7701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    , p_data->avbl_space);
7711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
7721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
7731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
7741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTA_GATTC_SCAN_FLT_STATUS_EVT:
7751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
7761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            btgatt_adv_filter_cb_t *p_data = (btgatt_adv_filter_cb_t*) p_param;
7771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTIF_TRACE_DEBUG("BTA_GATTC_SCAN_FLT_STATUS_EVT: %d, %d, %d",p_data->client_if,
7781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                p_data->action, p_data->status);
7791acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji            HAL_CBACK(bt_gatt_callbacks, client->scan_filter_status_cb
7801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    , p_data->action, p_data->client_if, p_data->status);
7811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
7821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
7831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
7841acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji        case BTA_GATTC_ADV_VSC_EVT:
7851acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji        {
786f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            btgatt_track_adv_info_t *p_data = (btgatt_track_adv_info_t*)p_param;
787f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            btgatt_track_adv_info_t adv_info_data;
788f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji
789f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            memset(&adv_info_data, 0, sizeof(btgatt_track_adv_info_t));
790f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji
791f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            btif_gatt_move_track_adv_data(&adv_info_data, p_data);
792f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji            HAL_CBACK(bt_gatt_callbacks, client->track_adv_event_cb, &adv_info_data);
7931acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji            break;
7941acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji        }
7951acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji
796979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        case BTIF_GATTC_SCAN_PARAM_EVT:
797979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        {
798979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t *)p_param;
799979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            HAL_CBACK(bt_gatt_callbacks, client->scan_parameter_setup_completed_cb,
800979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                      p_btif_cb->client_if, btif_gattc_translate_btm_status(p_btif_cb->status));
801979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            break;
802979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        }
803979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
804ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        default:
805db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_ERROR(LOG_TAG, "%s: Unhandled event (%d)!", __FUNCTION__, event);
806ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
807ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
8088444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach
8098444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach    btapp_gattc_free_req_data(event, p_data);
810ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
811ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
8126975b4d711142b885af479721cada448952c6b41Andre Eisenbachstatic void bta_gattc_cback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data)
813ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
814ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bt_status_t status = btif_transfer_context(btif_gattc_upstreams_evt,
81552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                    (uint16_t) event, (void*) p_data, sizeof(tBTA_GATTC), btapp_gattc_req_data);
816ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    ASSERTC(status == BT_STATUS_SUCCESS, "Context transfer failed!", status);
817ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
818ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
819a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic void bta_gattc_multi_adv_cback(tBTA_BLE_MULTI_ADV_EVT event, UINT8 inst_id,
820a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                                    void *p_ref, tBTA_STATUS call_status)
821a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
822a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_cb_t btif_cb;
823a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    tBTA_GATTC_EVT upevt;
824a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    uint8_t client_if = 0;
825a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
82616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (NULL == p_ref)
827a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    {
82816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        BTIF_TRACE_WARNING("%s Invalid p_ref received",__FUNCTION__);
82916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    }
83016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    else
83116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    {
83216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        client_if = *(UINT8 *) p_ref;
833a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    }
834a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
835e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati    BTIF_TRACE_DEBUG("%s -Inst ID %d, Status:%x, client_if:%d",__FUNCTION__,inst_id, call_status,
836a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                       client_if);
837a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.status = call_status;
838a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.client_if = client_if;
839a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.inst_id = inst_id;
840a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
841a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    switch(event)
842a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    {
843a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_ENB_EVT:
844a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_ENB_EVT;
845a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
846a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
847a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_DISABLE_EVT:
848a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_DIS_EVT;
849a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
850a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
851a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_PARAM_EVT:
852a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_UPD_EVT;
853a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
854a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
855a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTA_BLE_MULTI_ADV_DATA_EVT:
856a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            upevt = BTA_GATTC_MULT_ADV_DATA_EVT;
857a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
858a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
859a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        default:
860a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            return;
861a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    }
862a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
863a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    bt_status_t status = btif_transfer_context(btif_gattc_upstreams_evt, (uint16_t) upevt,
864a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
865a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    ASSERTC(status == BT_STATUS_SUCCESS, "Context transfer failed!", status);
866a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
867a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
868a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic void bta_gattc_set_adv_data_cback(tBTA_STATUS call_status)
869a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
870a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    UNUSED(call_status);
871a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_cb_t btif_cb;
872a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.status = call_status;
873a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_cb.action = 0;
874a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_ADV_DATA_EVT,
875a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                          (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
876a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
877a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
878c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_setup_cb (tBTA_BLE_BATCH_SCAN_EVT evt,
879c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                            tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status)
880c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
881c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    UINT8 upevt = 0;
882c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t btif_scan_track_cb;
883c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
884c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.status = status;
885c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.client_if = ref_value;
8861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("bta_batch_scan_setup_cb-Status:%x, client_if:%d, evt=%d",
887c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            status, ref_value, evt);
888c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
889c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    switch(evt)
890c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    {
891c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_ENB_EVT:
892c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
893c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_ENB_EVT;
894c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
895c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
896c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
897c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_DIS_EVT:
898c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
899c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_DIS_EVT;
900c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
901c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
902c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
903c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_CFG_STRG_EVT:
904c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
905c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_CFG_EVT;
906c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
907c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
908c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
909c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_DATA_EVT:
910c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
911c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_RD_EVT;
912c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
913c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
914c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
915c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTA_BLE_BATCH_SCAN_THRES_EVT:
916c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
917c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           upevt = BTA_GATTC_BTH_SCAN_THR_EVT;
918c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji           break;
919c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
920c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
921c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        default:
922c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            return;
923c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    }
924c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
925c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, upevt,(char*) &btif_scan_track_cb,
926c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                          sizeof(btgatt_batch_track_cb_t), NULL);
927c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
928c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
929c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
930c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_threshold_cb(tBTA_DM_BLE_REF_VALUE ref_value)
931c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
932c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t btif_scan_track_cb;
933c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.status = 0;
934c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.client_if = ref_value;
935c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
9361a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s - client_if:%d",__FUNCTION__, ref_value);
937c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
938c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_BTH_SCAN_THR_EVT,
939c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                          (char*) &btif_scan_track_cb, sizeof(btif_gattc_cb_t), NULL);
940c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
941c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
942c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_reports_cb(tBTA_DM_BLE_REF_VALUE ref_value, UINT8 report_format,
943c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                            UINT8 num_records, UINT16 data_len,
944c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                            UINT8* p_rep_data, tBTA_STATUS status)
945c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
946c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t btif_scan_track_cb;
947adb7bb50469db992969295792a7ba3b73f9e24b3Satya Calloji    memset(&btif_scan_track_cb, 0, sizeof(btgatt_batch_track_cb_t));
9481a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s - client_if:%d, %d, %d, %d",__FUNCTION__, ref_value, status, num_records,
949c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                    data_len);
950c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
951c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.status = status;
952c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
953c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.client_if = ref_value;
954c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.read_reports.report_format = report_format;
955c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.read_reports.data_len = data_len;
956c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_scan_track_cb.read_reports.num_records = num_records;
957c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
95816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (data_len > 0)
959c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    {
960cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov        btif_scan_track_cb.read_reports.p_rep_data = osi_malloc(data_len);
961c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        memcpy(btif_scan_track_cb.read_reports.p_rep_data, p_rep_data, data_len);
962cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov        osi_free(p_rep_data);
963c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    }
964c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
965c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_BTH_SCAN_RD_EVT,
966c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        (char*) &btif_scan_track_cb, sizeof(btgatt_batch_track_cb_t), NULL);
967c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
96816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (data_len > 0)
969cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov        osi_free_and_reset((void **)&btif_scan_track_cb.read_reports.p_rep_data);
970c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
971c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
9726975b4d711142b885af479721cada448952c6b41Andre Eisenbachstatic void bta_scan_results_cb (tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH *p_data)
973ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
974ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
975ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    uint8_t len;
976ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
977ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    switch (event)
978ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
979ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_DM_INQ_RES_EVT:
980ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
981ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            bdcpy(btif_cb.bd_addr.address, p_data->inq_res.bd_addr);
982ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_cb.device_type = p_data->inq_res.device_type;
983ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_cb.rssi = p_data->inq_res.rssi;
984ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_cb.addr_type = p_data->inq_res.ble_addr_type;
9857fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            btif_cb.flag = p_data->inq_res.flag;
986ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_data->inq_res.p_eir)
987ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
988ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                memcpy(btif_cb.value, p_data->inq_res.p_eir, 62);
989a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson                if (BTM_CheckEirData(p_data->inq_res.p_eir, BTM_EIR_COMPLETE_LOCAL_NAME_TYPE,
990ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                      &len))
991ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                {
992ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                    p_data->inq_res.remt_name_not_required  = TRUE;
993ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                }
994ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
995ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
996ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        break;
997ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
998ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTA_DM_INQ_CMPL_EVT:
999ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
1000e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati            BTIF_TRACE_DEBUG("%s  BLE observe complete. Num Resp %d",
1001ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                              __FUNCTION__,p_data->inq_cmpl.num_resps);
1002ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            return;
1003ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1004ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1005ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        default:
1006e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati        BTIF_TRACE_WARNING("%s : Unknown event 0x%x", __FUNCTION__, event);
1007ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return;
1008ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
1009ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATT_OBSERVE_EVT,
1010ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1011ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1012ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1013f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Callojistatic void bta_track_adv_event_cb(tBTA_DM_BLE_TRACK_ADV_DATA *p_track_adv_data)
10141acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji{
1015f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btgatt_track_adv_info_t btif_scan_track_cb;
1016f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    BTIF_TRACE_DEBUG("%s",__FUNCTION__);
1017f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_gatt_move_track_adv_data(&btif_scan_track_cb,
1018f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji                (btgatt_track_adv_info_t*)p_track_adv_data);
1019f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji
10201acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_ADV_VSC_EVT,
1021f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji                          (char*) &btif_scan_track_cb, sizeof(btgatt_track_adv_info_t), NULL);
10221acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji}
10231acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji
1024ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btm_read_rssi_cb (tBTM_RSSI_RESULTS *p_result)
1025ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1026ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1027ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1028ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, p_result->rem_bda);
1029ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.rssi = p_result->rssi;
1030ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.status = p_result->status;
1031ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = rssi_request_client_if;
1032ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATTC_RSSI_EVT,
1033ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1034ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1035ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1036979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbachstatic void bta_scan_param_setup_cb(tGATT_IF client_if, tBTM_STATUS status)
1037979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach{
1038979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_gattc_cb_t btif_cb;
1039979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
1040979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_cb.status = status;
1041979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_cb.client_if = client_if;
1042979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATTC_SCAN_PARAM_EVT,
1043979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                          (char *)&btif_cb, sizeof(btif_gattc_cb_t), NULL);
1044979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach}
1045979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach
10461a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_cfg_cb(tBTA_DM_BLE_PF_ACTION action, tBTA_DM_BLE_SCAN_COND_OP cfg_op,
10471a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, tBTA_STATUS status,
10481a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                tBTA_DM_BLE_REF_VALUE ref_value)
1049b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
10501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_cb;
1051b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    btif_cb.status = status;
10521a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.action = action;
10531a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.cond_op = cfg_op;
10541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.avbl_space = avbl_space;
10551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.client_if = ref_value;
10561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_CFG_EVT,
10571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                          (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
10581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
10591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
10601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_param_setup_cb(UINT8 action_type,
10611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                        tBTA_DM_BLE_PF_AVBL_SPACE avbl_space,
10621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                        tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status)
10631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
10641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_cb;
10651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
10661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.status = status;
10671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.action = action_type;
10681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.client_if = ref_value;
10691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.avbl_space = avbl_space;
10701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_PARAM_EVT,
10711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                          (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
10721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
10731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
10741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_status_cb(UINT8 action, tBTA_STATUS status,
10751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                    tBTA_DM_BLE_REF_VALUE ref_value)
10761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
10771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_cb;
10781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
10791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.status = status;
10801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.action = action;
10811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_cb.client_if = ref_value;
10821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_STATUS_EVT,
10831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                          (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
1084b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
1085ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
10860d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidgestatic void btgattc_free_event_data(UINT16 event, char *event_data)
10870d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge{
10880d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    switch (event)
10890d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    {
10900d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        case BTIF_GATTC_ADV_INSTANCE_SET_DATA:
10910d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        case BTIF_GATTC_SET_ADV_DATA:
10920d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        {
109320524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavov            btif_adv_data_t *adv_data = (btif_adv_data_t *)event_data;
10940d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            btif_gattc_adv_data_cleanup(adv_data);
10950d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            break;
10960d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        }
10970d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
10980d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        default:
10990d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            break;
11000d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    }
11010d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge}
11020d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
1103ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btgattc_handle_event(uint16_t event, char* p_param)
1104ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1105ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATT_STATUS           status;
1106ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBT_UUID                   uuid;
1107ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    tBTA_GATT_UNFMT            descr_val;
1108ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
110952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_gattc_cb_t* p_cb = (btif_gattc_cb_t*) p_param;
111052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    if (!p_cb) return;
1111ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1112db554581079863974af8e1289646f5deea6fc044Marie Janssen    LOG_VERBOSE(LOG_TAG, "%s: Event %d", __FUNCTION__, event);
1113ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1114ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    switch (event)
1115ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    {
1116ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_REGISTER_APP:
1117ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_to_bta_uuid(&uuid, &p_cb->uuid);
1118b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji            btif_gattc_incr_app_count();
11196975b4d711142b885af479721cada448952c6b41Andre Eisenbach            BTA_GATTC_AppRegister(&uuid, bta_gattc_cback);
1120ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1121ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1122ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_UNREGISTER_APP:
11233770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji            btif_gattc_clear_clientif(p_cb->client_if, TRUE);
1124b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji            btif_gattc_decr_app_count();
1125ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_AppDeregister(p_cb->client_if);
1126ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1127ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1128ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_SCAN_START:
1129ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            btif_gattc_init_dev_cb();
11306975b4d711142b885af479721cada448952c6b41Andre Eisenbach            BTA_DmBleObserve(TRUE, 0, bta_scan_results_cb);
1131ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1132ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1133ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_SCAN_STOP:
1134ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_DmBleObserve(FALSE, 0, 0);
1135ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1136ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1137ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_OPEN:
1138306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach        {
1139306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            // Ensure device is in inquiry database
1140306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            int addr_type = 0;
1141306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            int device_type = 0;
11427fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            tBTA_GATT_TRANSPORT transport = BTA_GATT_TRANSPORT_LE;
1143306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach
114486f97eda524568f2d264186844450db5e56dac36Matthew Xie            if (btif_get_address_type(p_cb->bd_addr.address, &addr_type) &&
114586f97eda524568f2d264186844450db5e56dac36Matthew Xie                btif_get_device_type(p_cb->bd_addr.address, &device_type) &&
114686f97eda524568f2d264186844450db5e56dac36Matthew Xie                device_type != BT_DEVICE_TYPE_BREDR)
114786f97eda524568f2d264186844450db5e56dac36Matthew Xie            {
1148306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach                BTA_DmAddBleDevice(p_cb->bd_addr.address, addr_type, device_type);
114986f97eda524568f2d264186844450db5e56dac36Matthew Xie            }
1150306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach
11516ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji            // Check for background connections
1152ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (!p_cb->is_direct)
1153a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach            {
11546ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                // Check for privacy 1.0 and 1.1 controller and do not start background
11556ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                // connection if RPA offloading is not supported, since it will not
11566ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                // connect after change of random address
11576ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                if (!controller_get_interface()->supports_ble_privacy() &&
11586ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                   (p_cb->addr_type == BLE_ADDR_RANDOM) &&
11596ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji                   BTM_BLE_IS_RESOLVE_BDA(p_cb->bd_addr.address))
1160a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                {
1161a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    tBTM_BLE_VSC_CB vnd_capabilities;
1162a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    BTM_BleGetVendorCapabilities(&vnd_capabilities);
1163a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    if (!vnd_capabilities.rpa_offloading)
1164a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    {
1165a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                        HAL_CBACK(bt_gatt_callbacks, client->open_cb, 0, BT_STATUS_UNSUPPORTED,
1166a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                                        p_cb->client_if, &p_cb->bd_addr);
1167a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                        return;
1168a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                    }
1169a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach                }
1170ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_DmBleSetBgConnType(BTM_BLE_CONN_AUTO, NULL);
1171a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach            }
1172ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1173d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan            // Determine transport
1174d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan            if (p_cb->transport != GATT_TRANSPORT_AUTO)
11757fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            {
1176d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                transport = p_cb->transport;
1177d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan            } else {
1178d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                switch(device_type)
1179d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                {
1180d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                    case BT_DEVICE_TYPE_BREDR:
1181d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        transport = BTA_GATT_TRANSPORT_BR_EDR;
1182d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        break;
11837fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
1184d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                    case BT_DEVICE_TYPE_BLE:
11857fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                        transport = BTA_GATT_TRANSPORT_LE;
1186d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        break;
1187d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan
1188d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                    case BT_DEVICE_TYPE_DUMO:
1189d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        if (p_cb->transport == GATT_TRANSPORT_LE)
1190d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                            transport = BTA_GATT_TRANSPORT_LE;
1191d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        else
1192d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                            transport = BTA_GATT_TRANSPORT_BR_EDR;
1193d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                        break;
1194d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                }
11957fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            }
11967fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta
1197306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach            // Connect!
1198d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan            BTIF_TRACE_DEBUG ("%s Transport=%d, device type=%d",
1199d27af388490dbe194035ad779096f98aef92d1a5Subramanian Srinivasan                                __func__, transport, device_type);
12007fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta            BTA_GATTC_Open(p_cb->client_if, p_cb->bd_addr.address, p_cb->is_direct, transport);
1201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1202306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach        }
1203ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1204ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_CLOSE:
12056975b4d711142b885af479721cada448952c6b41Andre Eisenbach            // Disconnect established connections
1206ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_cb->conn_id != 0)
1207ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_Close(p_cb->conn_id);
1208ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            else
1209ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_CancelOpen(p_cb->client_if, p_cb->bd_addr.address, TRUE);
1210ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1211ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            // Cancel pending background connections (remove from whitelist)
1212ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_CancelOpen(p_cb->client_if, p_cb->bd_addr.address, FALSE);
1213ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1214ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1215ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_SEARCH_SERVICE:
1216ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        {
1217ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            if (p_cb->search_all)
1218ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            {
1219ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_ServiceSearchRequest(p_cb->conn_id, NULL);
1220ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            } else {
1221ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                btif_to_bta_uuid(&uuid, &p_cb->uuid);
1222ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                BTA_GATTC_ServiceSearchRequest(p_cb->conn_id, &uuid);
1223ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            }
1224ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1225ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        }
1226ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1227533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski        case BTIF_GATTC_GET_GATT_DB:
1228533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski        {
1229533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            btgatt_db_element_t *db = NULL;
1230533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            int count = 0;
12319fd552b1f51c1313e801592f271376c7af62b2f4Jakub Pawlowski            BTA_GATTC_GetGattDb(p_cb->conn_id, 0x0000, 0xFFFF, &db, &count);
1232533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
1233533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            HAL_CBACK(bt_gatt_callbacks, client->get_gatt_db_cb,
1234533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski                p_cb->conn_id, db, count);
1235533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            osi_free(db);
1236533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski            break;
1237533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski        }
1238533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
1239ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_READ_CHAR:
12409dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            BTA_GATTC_ReadCharacteristic(p_cb->conn_id, p_cb->handle, p_cb->auth_req);
1241ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1242ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1243ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_READ_CHAR_DESCR:
12449dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            BTA_GATTC_ReadCharDescr(p_cb->conn_id, p_cb->handle, p_cb->auth_req);
1245ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1246ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1247ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_WRITE_CHAR:
12489dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            BTA_GATTC_WriteCharValue(p_cb->conn_id, p_cb->handle, p_cb->write_type,
12499dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                                     p_cb->len, p_cb->value, p_cb->auth_req);
1250ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1251ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1252ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_WRITE_CHAR_DESCR:
1253ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            descr_val.len = p_cb->len;
1254ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            descr_val.p_value = p_cb->value;
1255ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
12569dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski            BTA_GATTC_WriteCharDescr(p_cb->conn_id, p_cb->handle,
1257ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->write_type, &descr_val,
1258ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                     p_cb->auth_req);
1259ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1260ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1261ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_EXECUTE_WRITE:
1262ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_ExecuteWrite(p_cb->conn_id, p_cb->action);
1263ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1264ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1265ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_REG_FOR_NOTIFICATION:
1266ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            status = BTA_GATTC_RegisterForNotifications(p_cb->client_if,
12679dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                                    p_cb->bd_addr.address, p_cb->handle);
1268ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1269ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->register_for_notification_cb,
12709dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                p_cb->conn_id, 1, status, p_cb->handle);
1271ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1272ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1273ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_DEREG_FOR_NOTIFICATION:
1274ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            status = BTA_GATTC_DeregisterForNotifications(p_cb->client_if,
12759dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                                        p_cb->bd_addr.address, p_cb->handle);
1276ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1277ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            HAL_CBACK(bt_gatt_callbacks, client->register_for_notification_cb,
12789dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                p_cb->conn_id, 0, status, p_cb->handle);
1279ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1280ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1281ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_REFRESH:
1282ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTA_GATTC_Refresh(p_cb->bd_addr.address);
1283ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1284ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1285ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        case BTIF_GATTC_READ_RSSI:
1286ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            rssi_request_client_if = p_cb->client_if;
1287ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            BTM_ReadRSSI (p_cb->bd_addr.address, (tBTM_CMPL_CB *)btm_read_rssi_cb);
1288ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1289ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
12901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTIF_GATTC_SCAN_FILTER_PARAM_SETUP:
12911a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
129252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
129316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (1 == p_adv_filt_cb->adv_filt_param.dely_mode)
12941acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji               BTA_DmBleTrackAdvertiser(p_adv_filt_cb->client_if, bta_track_adv_event_cb);
12951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTA_DmBleScanFilterSetup(p_adv_filt_cb->action, p_adv_filt_cb->filt_index,
12961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                &p_adv_filt_cb->adv_filt_param, NULL, bta_scan_filt_param_setup_cb,
12971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                p_adv_filt_cb->client_if);
1298b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            break;
12991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
1300b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1301b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        case BTIF_GATTC_SCAN_FILTER_CONFIG:
1302b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        {
130352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
1304b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            tBTA_DM_BLE_PF_COND_PARAM cond;
1305b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            memset(&cond, 0, sizeof(cond));
1306b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
13071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            switch (p_adv_filt_cb->filt_type)
1308b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            {
1309b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_ADDR_FILTER: // 0
13101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    bdcpy(cond.target_addr.bda, p_adv_filt_cb->bd_addr.address);
13111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.target_addr.type = p_adv_filt_cb->addr_type;
13121a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13141a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
13151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1316b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1317b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1318b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_SRVC_DATA: // 1
13191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13201a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                            p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                            NULL, bta_scan_filt_cfg_cb, p_adv_filt_cb->client_if);
1322b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1323b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1324b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_SRVC_UUID: // 2
1325b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
1326b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    tBTA_DM_BLE_PF_COND_MASK uuid_mask;
1327b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1328b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.srvc_uuid.p_target_addr = NULL;
1329b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.srvc_uuid.cond_logic = BTA_DM_BLE_PF_LOGIC_AND;
13301a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    btif_to_bta_uuid(&cond.srvc_uuid.uuid, &p_adv_filt_cb->uuid);
1331b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1332b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.srvc_uuid.p_uuid_mask = NULL;
13331a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    if (p_adv_filt_cb->has_mask)
1334b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    {
13351a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                        btif_to_bta_uuid_mask(&uuid_mask, &p_adv_filt_cb->uuid_mask);
1336b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                        cond.srvc_uuid.p_uuid_mask = &uuid_mask;
1337b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    }
13381a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13391a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13401a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
13411a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1342b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1343b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1344b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1345b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_SRVC_SOL_UUID: // 3
1346b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
1347b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.solicitate_uuid.p_target_addr = NULL;
1348b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    cond.solicitate_uuid.cond_logic = BTA_DM_BLE_PF_LOGIC_AND;
13491a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    btif_to_bta_uuid(&cond.solicitate_uuid.uuid, &p_adv_filt_cb->uuid);
13501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13521a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
13531a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1354b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1355b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1356b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1357b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_LOCAL_NAME: // 4
1358b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
13591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.local_name.data_len = p_adv_filt_cb->value_len;
13601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.local_name.p_data = p_adv_filt_cb->value;
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
1368b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                case BTA_DM_BLE_PF_MANU_DATA: // 5
1369b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                {
13701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.company_id = p_adv_filt_cb->conn_id;
13711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.company_id_mask = p_adv_filt_cb->company_id_mask;
13721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.data_len = p_adv_filt_cb->value_len;
13731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.p_pattern = p_adv_filt_cb->value;
13741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.manu_data.p_pattern_mask = p_adv_filt_cb->value_mask;
13751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              &cond, bta_scan_filt_cfg_cb,
13781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                              p_adv_filt_cb->client_if);
1379b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1380b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                }
1381b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
13821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                case BTA_DM_BLE_PF_SRVC_DATA_PATTERN: //6
13831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                {
13841a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.srvc_data.data_len = p_adv_filt_cb->value_len;
13851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.srvc_data.p_pattern = p_adv_filt_cb->value;
13861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    cond.srvc_data.p_pattern_mask = p_adv_filt_cb->value_mask;
13871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                    BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action,
13881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                                p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index,
13891a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                                &cond, bta_scan_filt_cfg_cb,
13901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                                p_adv_filt_cb->client_if);
13911a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                   break;
13921a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                }
13931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
1394b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                default:
1395db554581079863974af8e1289646f5deea6fc044Marie Janssen                    LOG_ERROR(LOG_TAG, "%s: Unknown filter type (%d)!", __FUNCTION__, p_cb->action);
1396b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach                    break;
1397b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            }
1398b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            break;
1399b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        }
1400b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1401b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        case BTIF_GATTC_SCAN_FILTER_CLEAR:
1402b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        {
140352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
1404b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            BTA_DmBleCfgFilterCondition(BTA_DM_BLE_SCAN_COND_CLEAR, BTA_DM_BLE_PF_TYPE_ALL,
14056e2d9db5148176d88d7f48c3b2ad5b27c57ca14dSatya Calloji                                        p_adv_filt_cb->filt_index, NULL, bta_scan_filt_cfg_cb,
14066e2d9db5148176d88d7f48c3b2ad5b27c57ca14dSatya Calloji                                        p_adv_filt_cb->client_if);
14071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            break;
14081a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        }
14091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
14101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        case BTIF_GATTC_SCAN_FILTER_ENABLE:
14111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        {
141252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param;
14131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji            BTA_DmEnableScanFilter(p_adv_filt_cb->action, bta_scan_filt_status_cb,
14141a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                   p_adv_filt_cb->client_if);
1415b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach            break;
1416b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach        }
1417b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
14185c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        case BTIF_GATTC_LISTEN:
1419602162a13c6ed8abae53aee6deeda48b79f30911Zhihai Xu#if (defined(BLE_PERIPHERAL_MODE_SUPPORT) && (BLE_PERIPHERAL_MODE_SUPPORT == TRUE))
14205c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            BTA_GATTC_Listen(p_cb->client_if, p_cb->start, NULL);
1421eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach#else
1422a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach            BTA_GATTC_Broadcast(p_cb->client_if, p_cb->start);
1423eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach#endif
14245c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            break;
14255c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
14265c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        case BTIF_GATTC_SET_ADV_DATA:
14275c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        {
14280d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            const btif_adv_data_t *p_adv_data = (btif_adv_data_t*) p_param;
14290d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            const int cbindex = CLNT_IF_IDX;
14300d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            if (cbindex >= 0 && btif_gattc_copy_datacb(cbindex, p_adv_data, false))
1431a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            {
1432a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb();
1433a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                if (!p_adv_data->set_scan_rsp)
1434a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                {
1435a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    BTA_DmBleSetAdvConfig(p_multi_adv_data_cb->inst_cb[cbindex].mask,
1436a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        &p_multi_adv_data_cb->inst_cb[cbindex].data, bta_gattc_set_adv_data_cback);
1437a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                }
1438a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                else
1439a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                {
1440a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    BTA_DmBleSetScanRsp(p_multi_adv_data_cb->inst_cb[cbindex].mask,
1441a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        &p_multi_adv_data_cb->inst_cb[cbindex].data, bta_gattc_set_adv_data_cback);
1442a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                }
1443a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            }
14440d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            else
14450d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            {
14460d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                BTIF_TRACE_ERROR("%s:%s: failed to get instance data cbindex: %d",
14470d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                                 __func__, "BTIF_GATTC_SET_ADV_DATA", cbindex);
14480d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            }
14490d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            break;
1450a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1451a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1452a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_ENABLE:
1453a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
145452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param;
145516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
145616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            int cbindex = -1, arrindex = -1;
145716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
145816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            arrindex = btif_multi_adv_add_instid_map(p_inst_cb->client_if,INVALID_ADV_INST, true);
145916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (arrindex >= 0)
146016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                cbindex = btif_gattc_obtain_idx_for_datacb(p_inst_cb->client_if, CLNT_IF_IDX);
146116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham
146216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (cbindex >= 0 && arrindex >= 0)
1463a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            {
1464a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb();
1465a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                memcpy(&p_multi_adv_data_cb->inst_cb[cbindex].param,
1466a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                       &p_inst_cb->param, sizeof(tBTA_BLE_ADV_PARAMS));
1467cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach                p_multi_adv_data_cb->inst_cb[cbindex].timeout_s = p_inst_cb->timeout_s;
146816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                BTIF_TRACE_DEBUG("%s, client_if value: %d", __FUNCTION__,
146916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                            p_multi_adv_data_cb->clntif_map[arrindex + arrindex]);
1470a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                BTA_BleEnableAdvInstance(&(p_multi_adv_data_cb->inst_cb[cbindex].param),
1471a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    bta_gattc_multi_adv_cback,
147216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                    &(p_multi_adv_data_cb->clntif_map[arrindex + arrindex]));
1473a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            }
14745c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            else
147516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            {
147616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                /* let the error propagate up from BTA layer */
1477e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("%s invalid index in BTIF_GATTC_ENABLE_ADV",__FUNCTION__);
147816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham                BTA_BleEnableAdvInstance(&p_inst_cb->param, bta_gattc_multi_adv_cback, NULL);
147916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            }
1480a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
1481a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1482eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
1483a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_UPDATE:
1484a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
148552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param;
1486a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int inst_id = btif_multi_adv_instid_for_clientif(p_inst_cb->client_if);
1487a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int cbindex = btif_gattc_obtain_idx_for_datacb(p_inst_cb->client_if, CLNT_IF_IDX);
148816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (inst_id >= 0 && cbindex >= 0 && NULL != p_inst_cb)
1489a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            {
1490a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb();
1491a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                memcpy(&p_multi_adv_data_cb->inst_cb[cbindex].param, &p_inst_cb->param,
1492a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                        sizeof(tBTA_BLE_ADV_PARAMS));
1493a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                BTA_BleUpdateAdvInstParam((UINT8)inst_id,
1494a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                    &(p_multi_adv_data_cb->inst_cb[cbindex].param));
1495a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            }
1496a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            else
1497e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("%s invalid index in BTIF_GATTC_UPDATE_ADV", __FUNCTION__);
1498a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
1499a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1500a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1501a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_SET_DATA:
1502a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
150352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_adv_data_t *p_adv_data = (btif_adv_data_t*) p_param;
1504a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int cbindex = btif_gattc_obtain_idx_for_datacb(p_adv_data->client_if, CLNT_IF_IDX);
1505a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int inst_id = btif_multi_adv_instid_for_clientif(p_adv_data->client_if);
15060d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            if (inst_id >= 0 && cbindex >= 0 && btif_gattc_copy_datacb(cbindex, p_adv_data, true))
1507eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach            {
15080d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                btgatt_multi_adv_common_data *p_multi_adv_data_cb =
15090d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    btif_obtain_multi_adv_data_cb();
15100d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                BTA_BleCfgAdvInstData(
15110d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    (UINT8)inst_id,
1512d4c103624b3d7672110abeb753ed79113ee48989Ian Coolidge                    p_adv_data->set_scan_rsp,
15130d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    p_multi_adv_data_cb->inst_cb[cbindex].mask,
15140d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    &p_multi_adv_data_cb->inst_cb[cbindex].data);
15150d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            }
15160d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            else
15170d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            {
15180d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                BTIF_TRACE_ERROR(
15190d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    "%s:%s: failed to get invalid instance data: inst_id:%d "
15200d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    "cbindex:%d",
15210d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                    __func__, "BTIF_GATTC_ADV_INSTANCE_SET_DATA", inst_id, cbindex);
1522eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach            }
1523a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            break;
1524a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        }
1525a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
1526a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        case BTIF_GATTC_ADV_INSTANCE_DISABLE:
1527a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        {
152852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param;
1529a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            int inst_id = btif_multi_adv_instid_for_clientif(p_inst_cb->client_if);
153016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham            if (inst_id >=0)
1531a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                BTA_BleDisableAdvInstance((UINT8)inst_id);
1532a6ce7751d84218c193eb90d390aef23217b1737eWei Wang            else
1533e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati                BTIF_TRACE_ERROR("%s invalid instance ID in BTIF_GATTC_DISABLE_ADV",__FUNCTION__);
15345c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach            break;
15355c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach        }
1536a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
15379426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach        case BTIF_GATTC_CONFIGURE_MTU:
15389426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            BTA_GATTC_ConfigureMTU(p_cb->conn_id, p_cb->len);
15399426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach            break;
15405c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
154152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach        case BTIF_GATTC_CONN_PARAM_UPDT:
154252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach        {
154352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btif_conn_param_cb_t *p_conn_param_cb = (btif_conn_param_cb_t*) p_param;
154452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            if (BTA_DmGetConnectionState(p_conn_param_cb->bd_addr.address))
154552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            {
154652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                BTA_DmBleUpdateConnectionParams(p_conn_param_cb->bd_addr.address,
154752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->min_interval, p_conn_param_cb->max_interval,
154852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->latency, p_conn_param_cb->timeout);
154952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            } else {
155052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                BTA_DmSetBlePrefConnParams(p_conn_param_cb->bd_addr.address,
155152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->min_interval, p_conn_param_cb->max_interval,
155252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                               p_conn_param_cb->latency, p_conn_param_cb->timeout);
155352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            }
155452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            break;
155552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach        }
155652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach
15577d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham        case BTIF_GATTC_SET_SCAN_PARAMS:
1558979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        {
1559979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach            BTA_DmSetBleScanParams(p_cb->client_if, p_cb->scan_interval, p_cb->scan_window,
1560979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                                   BTM_BLE_SCAN_MODE_ACTI, bta_scan_param_setup_cb);
15617d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham            break;
1562979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach        }
15637d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham
1564c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_CONFIG_STORAGE_PARAMS:
1565c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
156652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1567c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleSetStorageParams(p_scan_track_cb->batch_scan_full_max,
1568c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               p_scan_track_cb->batch_scan_trunc_max, p_scan_track_cb->batch_scan_notify_threshold,
1569c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               bta_batch_scan_setup_cb, bta_batch_scan_threshold_cb, bta_batch_scan_reports_cb,
157052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach               (tBTA_DM_BLE_REF_VALUE) p_scan_track_cb->client_if);
1571c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1572c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1573c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1574c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_ENABLE_BATCH_SCAN:
1575c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
157652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1577c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleEnableBatchScan(p_scan_track_cb->scan_mode, p_scan_track_cb->scan_interval,
1578c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               p_scan_track_cb->scan_window, p_scan_track_cb->discard_rule,
1579c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji               p_scan_track_cb->addr_type, p_scan_track_cb->client_if);
1580c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1581c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1582c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1583c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_DISABLE_BATCH_SCAN:
1584c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
158552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1586c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleDisableBatchScan(p_scan_track_cb->client_if);
1587c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1588c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1589c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1590c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        case BTIF_GATTC_READ_BATCH_SCAN_REPORTS:
1591c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        {
159252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach            btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param;
1593c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            BTA_DmBleReadScanReports(p_scan_track_cb->scan_mode, p_scan_track_cb->client_if);
1594c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji            break;
1595c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji        }
1596c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
1597ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        default:
1598db554581079863974af8e1289646f5deea6fc044Marie Janssen            LOG_ERROR(LOG_TAG, "%s: Unknown event (%d)!", __FUNCTION__, event);
1599ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta            break;
1600ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    }
16010d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
16020d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    btgattc_free_event_data(event, p_param);
1603ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1604ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1605ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/*******************************************************************************
1606ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta**  Client API Functions
1607ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/
1608ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1609ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_register_app(bt_uuid_t *uuid)
1610ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1611ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1612ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1613ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(&btif_cb.uuid, uuid, sizeof(bt_uuid_t));
1614ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REGISTER_APP,
1615ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1616ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1617ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1618ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_unregister_app(int client_if )
1619ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1620ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1621ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1622ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1623ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_UNREGISTER_APP,
1624ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1625ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1626ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
16277d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadhamstatic bt_status_t btif_gattc_scan( bool start )
1628ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1629ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1630ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1631ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, start ? BTIF_GATTC_SCAN_START : BTIF_GATTC_SCAN_STOP,
1632ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1633ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1634ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
16357fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battastatic bt_status_t btif_gattc_open(int client_if, const bt_bdaddr_t *bd_addr,
16367fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta                                        bool is_direct,int transport)
1637ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1638ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1639ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1640ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1641ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.is_direct = is_direct ? 1 : 0;
16427fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    btif_cb.transport = (btgatt_transport_t)transport;
1643ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
1644ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_OPEN,
1645ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1646ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1647ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1648ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_close( int client_if, const bt_bdaddr_t *bd_addr, int conn_id)
1649ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1650ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1651ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1652ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1653ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1654ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
1655ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CLOSE,
1656ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1657ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1658ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
16595c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachstatic bt_status_t btif_gattc_listen(int client_if, bool start)
16605c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
16615c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    CHECK_BTGATT_INIT();
16625c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_gattc_cb_t btif_cb;
16635c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_cb.client_if = (uint8_t) client_if;
16645c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_cb.start = start ? 1 : 0;
16655c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_LISTEN,
16665c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
16675c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
16685c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
16690d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidgestatic void btif_gattc_deep_copy(UINT16 event, char *p_dest, char *p_src)
16700d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge{
16710d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    switch (event)
16720d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    {
16730d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        case BTIF_GATTC_ADV_INSTANCE_SET_DATA:
16740d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        case BTIF_GATTC_SET_ADV_DATA:
16750d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        {
16760d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            const btif_adv_data_t *src = (btif_adv_data_t*) p_src;
16770d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            btif_adv_data_t *dst = (btif_adv_data_t*) p_dest;
16783f06e14fddc0e674347ae28ea4a25218d4ce1d2aPavlin Radoslavov            maybe_non_aligned_memcpy(dst, src, sizeof(*src));
16790d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
16800d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            if (src->p_manufacturer_data)
16810d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            {
1682cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov                dst->p_manufacturer_data = osi_malloc(src->manufacturer_len);
16830d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                memcpy(dst->p_manufacturer_data, src->p_manufacturer_data,
16840d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                       src->manufacturer_len);
16850d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            }
16860d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
16870d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            if (src->p_service_data)
16880d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            {
1689cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov                dst->p_service_data = osi_malloc(src->service_data_len);
16900d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                memcpy(dst->p_service_data, src->p_service_data, src->service_data_len);
16910d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            }
16920d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
16930d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            if (src->p_service_uuid)
16940d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            {
1695cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov                dst->p_service_uuid = osi_malloc(src->service_uuid_len);
16960d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                memcpy(dst->p_service_uuid, src->p_service_uuid, src->service_uuid_len);
16970d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            }
16980d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            break;
16990d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        }
17000d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
17010d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        default:
17020d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            ASSERTC(false, "Unhandled deep copy", event);
17030d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge            break;
17040d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    }
17050d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge}
17060d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
17075c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachstatic bt_status_t btif_gattc_set_adv_data(int client_if, bool set_scan_rsp, bool include_name,
17085c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach                bool include_txpower, int min_interval, int max_interval, int appearance,
1709eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach                uint16_t manufacturer_len, char* manufacturer_data,
1710eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach                uint16_t service_data_len, char* service_data,
1711eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach                uint16_t service_uuid_len, char* service_uuid)
17125c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{
17135c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    CHECK_BTGATT_INIT();
1714a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_adv_data_t adv_data;
1715eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
1716a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_adv_data_packager(client_if, set_scan_rsp, include_name,
1717a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        include_txpower, min_interval, max_interval, appearance, manufacturer_len,
1718a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        manufacturer_data, service_data_len, service_data, service_uuid_len, service_uuid,
1719a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        &adv_data);
1720eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach
17210d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    bt_status_t status = btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SET_ADV_DATA,
17220d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge                       (char*) &adv_data, sizeof(adv_data), btif_gattc_deep_copy);
17230d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    btif_gattc_adv_data_cleanup(&adv_data);
1724a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return status;
17255c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach}
17265c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach
1727ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_refresh( int client_if, const bt_bdaddr_t *bd_addr )
1728ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1729ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1730ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1731ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1732ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
1733ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REFRESH,
1734ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1735ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1736ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1737ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_search_service(int conn_id, bt_uuid_t *filter_uuid )
1738ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1739ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1740ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1741ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1742ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.search_all = filter_uuid ? 0 : 1;
1743ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    if (filter_uuid)
1744ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        memcpy(&btif_cb.uuid, filter_uuid, sizeof(bt_uuid_t));
1745ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SEARCH_SERVICE,
1746ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1747ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1748ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1749533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowskistatic bt_status_t btif_gattc_get_gatt_db(int conn_id)
1750533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski{
1751533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    CHECK_BTGATT_INIT();
1752533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    btif_gattc_cb_t btif_cb;
1753533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    btif_cb.conn_id = (uint16_t) conn_id;
1754533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
1755533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_GATT_DB,
1756533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1757533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski}
1758533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
1759533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski
17609dc998503590163068845827d951fc2f05a17bdaJakub Pawlowskistatic bt_status_t btif_gattc_read_char(int conn_id, uint16_t handle, int auth_req)
1761ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1762ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1763ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1764ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
17659dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    btif_cb.handle = (uint16_t) handle;
1766ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
1767ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_CHAR,
1768ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1769ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1770ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
17719dc998503590163068845827d951fc2f05a17bdaJakub Pawlowskistatic bt_status_t btif_gattc_read_char_descr(int conn_id, uint16_t handle, int auth_req)
1772ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1773ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1774ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1775ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
17769dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    btif_cb.handle = (uint16_t) handle;
1777ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
1778ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_CHAR_DESCR,
1779ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1780ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1781ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
17829dc998503590163068845827d951fc2f05a17bdaJakub Pawlowskistatic bt_status_t btif_gattc_write_char(int conn_id, uint16_t handle, int write_type,
1783ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                         int len, int auth_req, char* p_value)
1784ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1785ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1786ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1787ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
17889dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    btif_cb.handle = (uint16_t) handle;
1789ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
1790ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.write_type = (uint8_t) write_type;
1791ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.len = len > BTGATT_MAX_ATTR_LEN ? BTGATT_MAX_ATTR_LEN : len;
1792ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(btif_cb.value, p_value, btif_cb.len);
1793ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_WRITE_CHAR,
1794ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1795ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1796ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
17979dc998503590163068845827d951fc2f05a17bdaJakub Pawlowskistatic bt_status_t btif_gattc_write_char_descr(int conn_id, uint16_t handle,
1798ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                               int write_type, int len, int auth_req,
1799ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                               char* p_value)
1800ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1801ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1802ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1803ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
18049dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    btif_cb.handle = (uint16_t) handle;
1805ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.auth_req = (uint8_t) auth_req;
1806ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.write_type = (uint8_t) write_type;
1807ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.len = len > BTGATT_MAX_ATTR_LEN ? BTGATT_MAX_ATTR_LEN : len;
1808ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    memcpy(btif_cb.value, p_value, btif_cb.len);
1809ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_WRITE_CHAR_DESCR,
1810ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1811ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1812ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1813ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_execute_write(int conn_id, int execute)
1814ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1815ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1816ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1817ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.conn_id = (uint16_t) conn_id;
1818ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.action = (uint8_t) execute;
1819ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_EXECUTE_WRITE,
1820ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1821ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1822ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1823ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_reg_for_notification(int client_if, const bt_bdaddr_t *bd_addr,
18249dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                                                   uint16_t handle)
1825ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1826ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1827ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1828ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1829ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
18309dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    btif_cb.handle = handle;
1831ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REG_FOR_NOTIFICATION,
1832ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1833ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1834ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1835ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_dereg_for_notification(int client_if, const bt_bdaddr_t *bd_addr,
18369dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski                                                     uint16_t handle)
1837ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1838ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1839ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1840ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1841ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
18429dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski    btif_cb.handle = handle;
1843ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_DEREG_FOR_NOTIFICATION,
1844ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1845ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1846ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
1847ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_read_remote_rssi(int client_if, const bt_bdaddr_t *bd_addr)
1848ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1849ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    CHECK_BTGATT_INIT();
1850ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_cb_t btif_cb;
1851ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_cb.client_if = (uint8_t) client_if;
1852ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
1853ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_RSSI,
1854ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
1855ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
1856ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
18579426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbachstatic bt_status_t btif_gattc_configure_mtu(int conn_id, int mtu)
18589426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach{
18599426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    CHECK_BTGATT_INIT();
18609426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_gattc_cb_t btif_cb;
18619426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_cb.conn_id = conn_id;
18629426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_cb.len = mtu; // Re-use len field
18639426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONFIGURE_MTU,
18649426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
18659426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach}
18669426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach
186752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbachstatic bt_status_t btif_gattc_conn_parameter_update(const bt_bdaddr_t *bd_addr, int min_interval,
186852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                    int max_interval, int latency, int timeout)
186952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach{
187052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    CHECK_BTGATT_INIT();
187152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_conn_param_cb_t btif_cb;
187252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.min_interval = min_interval;
187352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.max_interval = max_interval;
187452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.latency = latency;
187552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_cb.timeout = timeout;
187652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    bdcpy(btif_cb.bd_addr.address, bd_addr->address);
187752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONN_PARAM_UPDT,
187852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach                                 (char*) &btif_cb, sizeof(btif_conn_param_cb_t), NULL);
187952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach}
188052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach
1881f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Callojistatic bt_status_t btif_gattc_scan_filter_param_setup(btgatt_filt_param_setup_t
1882f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji                                                      filt_param)
1883b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
1884b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    CHECK_BTGATT_INIT();
18851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
18861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
18876cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
1888f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.client_if = filt_param.client_if;
1889f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.action = filt_param.action;
1890f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.filt_index = filt_param.filt_index;
1891f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.feat_seln = filt_param.feat_seln;
1892f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.list_logic_type = filt_param.list_logic_type;
1893f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.filt_logic_type = filt_param.filt_logic_type;
1894f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.rssi_high_thres = filt_param.rssi_high_thres;
1895f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.rssi_low_thres = filt_param.rssi_low_thres;
1896f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.dely_mode = filt_param.dely_mode;
1897f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.found_timeout = filt_param.found_timeout;
1898f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.lost_timeout = filt_param.lost_timeout;
1899f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.found_timeout_cnt = filt_param.found_timeout_cnt;
1900f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji    btif_filt_cb.adv_filt_param.num_of_tracking_entries = filt_param.num_of_tracking_entries;
19011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_PARAM_SETUP,
19021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
1903b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
1904b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
19051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_add_remove(int client_if, int action,
19061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              int filt_type, int filt_index, int company_id,
19071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              int company_id_mask, const bt_uuid_t *p_uuid,
19081a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              const bt_uuid_t *p_uuid_mask, const bt_bdaddr_t *bd_addr,
19091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              char addr_type, int data_len, char* p_data, int mask_len,
19101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                              char* p_mask)
1911b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
1912b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    CHECK_BTGATT_INIT();
19131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
19146cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
19151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s, %d, %d", __FUNCTION__, action, filt_type);
19161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
19171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    /* If data is passed, both mask and data have to be the same length */
191816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (data_len != mask_len && NULL != p_data && NULL != p_mask)
19191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        return BT_STATUS_PARM_INVALID;
19201a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
19211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.client_if = client_if;
19221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.action = action;
19231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.filt_index = filt_index;
19241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.filt_type = filt_type;
19251a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.conn_id = company_id;
19261a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.company_id_mask = company_id_mask ? company_id_mask : 0xFFFF;
192716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (bd_addr)
192816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham        bdcpy(btif_filt_cb.bd_addr.address, bd_addr->address);
19291a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
19301a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.addr_type = addr_type;
19311a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.has_mask = (p_uuid_mask != NULL);
1932b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1933b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    if (p_uuid != NULL)
19341a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(&btif_filt_cb.uuid, p_uuid, sizeof(bt_uuid_t));
1935b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    if (p_uuid_mask != NULL)
19361a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(&btif_filt_cb.uuid_mask, p_uuid_mask, sizeof(bt_uuid_t));
19371a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    if (p_data != NULL && data_len != 0)
19381a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    {
19391a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(btif_filt_cb.value, p_data, data_len);
19401a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        btif_filt_cb.value_len = data_len;
19411a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        memcpy(btif_filt_cb.value_mask, p_mask, mask_len);
19421a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        btif_filt_cb.value_mask_len = mask_len;
19431a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    }
1944b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_CONFIG,
19451a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
1946b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
1947b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
19481a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_clear(int client_if, int filt_index)
1949b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{
1950b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    CHECK_BTGATT_INIT();
19511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s, %d", __FUNCTION__, filt_index);
19521a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
19531a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
19546cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
19551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.client_if = client_if;
19561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.filt_index = filt_index;
19571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.action = BTA_DM_BLE_SCAN_COND_CLEAR;
19581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_CONFIG,
19591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
19601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji}
19611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
19621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_enable(int client_if, bool enable)
19631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{
19641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    int action = 0;
19651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    CHECK_BTGATT_INIT();
19661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    BTIF_TRACE_DEBUG("%s, %d", __FUNCTION__, enable);
19671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji
19681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btgatt_adv_filter_cb_t btif_filt_cb;
19696cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
19701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.client_if = client_if;
197116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham    if (true == enable)
19721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji        action = 1;
19731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_filt_cb.action = action;
19741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_ENABLE,
19751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji                                 (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL);
1976b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach}
1977b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach
1978979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbachstatic bt_status_t btif_gattc_set_scan_parameters(int client_if, int scan_interval,
1979979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach                                                  int scan_window)
19807d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham{
19817d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    CHECK_BTGATT_INIT();
19827d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_gattc_cb_t btif_cb;
1983979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach    btif_cb.client_if = client_if;
19847d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_cb.scan_interval = scan_interval;
19857d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_cb.scan_window = scan_window;
19867d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SET_SCAN_PARAMS,
19877d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham                                 (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
19887d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham}
19897d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham
1990ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic int btif_gattc_get_device_type( const bt_bdaddr_t *bd_addr )
1991ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
1992ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    int device_type = 0;
1993ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    char bd_addr_str[18] = {0};
1994ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
19958a6a89faa942aed4f176b0c98402d01c8bdd6aa6Sharvil Nanavati    bdaddr_to_string(bd_addr, bd_addr_str, sizeof(bd_addr_str));
19969d52f88bfc07556cb01ab3055f5b1242c9b467aaSharvil Nanavati    if (btif_config_get_int(bd_addr_str, "DevType", &device_type))
1997ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta        return device_type;
1998ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return 0;
1999ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2000ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2001a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_enable(int client_if, int min_interval, int max_interval,
20029dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                                            int adv_type, int chnl_map, int tx_power, int timeout_s)
2003a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
2004a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
2005a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btgatt_multi_adv_inst_cb adv_cb;
20066cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
2007a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.client_if = (uint8_t) client_if;
2008a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2009a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_min = min_interval;
2010a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_max = max_interval;
2011a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_type = adv_type;
2012a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.channel_map = chnl_map;
2013a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_filter_policy = 0;
2014a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.tx_power = tx_power;
20159dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach    adv_cb.timeout_s = timeout_s;
2016a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_ENABLE,
2017a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                             (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL);
2018a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
2019a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2020a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_update(int client_if, int min_interval, int max_interval,
20219dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                                            int adv_type, int chnl_map,int tx_power, int timeout_s)
2022a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
2023a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
2024a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btgatt_multi_adv_inst_cb adv_cb;
20256cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
2026a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.client_if = (uint8_t) client_if;
2027a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2028a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_min = min_interval;
2029a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_int_max = max_interval;
2030a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_type = adv_type;
2031a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.channel_map = chnl_map;
2032a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.adv_filter_policy = 0;
2033a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.param.tx_power = tx_power;
20349dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach    adv_cb.timeout_s = timeout_s;
2035a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_UPDATE,
2036a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                         (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL);
2037a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
2038a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2039a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_setdata(int client_if, bool set_scan_rsp,
20409dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                bool include_name, bool incl_txpower, int appearance,
20419dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                int manufacturer_len, char* manufacturer_data,
20429dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                int service_data_len, char* service_data,
20439dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach                int service_uuid_len, char* service_uuid)
2044a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
2045a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
2046a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2047a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_adv_data_t multi_adv_data_inst;
20480d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    memset(&multi_adv_data_inst, 0, sizeof(multi_adv_data_inst));
20490d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge
20500d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    const int min_interval = 0;
20510d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    const int max_interval = 0;
2052a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2053a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_adv_data_packager(client_if, set_scan_rsp, include_name, incl_txpower,
2054a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        min_interval, max_interval, appearance, manufacturer_len, manufacturer_data,
2055a6ce7751d84218c193eb90d390aef23217b1737eWei Wang        service_data_len, service_data, service_uuid_len, service_uuid, &multi_adv_data_inst);
2056a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
20570d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    bt_status_t status = btif_transfer_context(
20580d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_SET_DATA,
20590d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        (char *)&multi_adv_data_inst, sizeof(multi_adv_data_inst),
20600d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge        btif_gattc_deep_copy);
20610d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge    btif_gattc_adv_data_cleanup(&multi_adv_data_inst);
2062a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return status;
2063a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
2064a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2065a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_disable(int client_if)
2066a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{
2067a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    CHECK_BTGATT_INIT();
2068a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btgatt_multi_adv_inst_cb adv_cb;
20696cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
2070a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    adv_cb.client_if = (uint8_t) client_if;
2071a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2072a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_DISABLE,
2073a6ce7751d84218c193eb90d390aef23217b1737eWei Wang                           (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL);
2074a6ce7751d84218c193eb90d390aef23217b1737eWei Wang}
2075a6ce7751d84218c193eb90d390aef23217b1737eWei Wang
2076c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_cfg_storage(int client_if,int batch_scan_full_max,
2077c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    int batch_scan_trunc_max, int batch_scan_notify_threshold)
2078c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2079c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2080c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
20816cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2082c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2083c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.batch_scan_full_max = batch_scan_full_max;
2084c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.batch_scan_trunc_max = batch_scan_trunc_max;
2085c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.batch_scan_notify_threshold = batch_scan_notify_threshold;
2086c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONFIG_STORAGE_PARAMS,
2087c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2088c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2089c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2090c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_enb_batch_scan(int client_if,int scan_mode, int scan_interval,
2091c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                int scan_window, int addr_type, int discard_rule)
2092c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2093c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2094c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
20956cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2096c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2097c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_mode = scan_mode;
2098c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_interval = scan_interval;
2099c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_window = scan_window;
2100c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.discard_rule = discard_rule;
2101c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.addr_type = addr_type;
2102c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ENABLE_BATCH_SCAN,
2103c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2104c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2105c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2106c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_dis_batch_scan(int client_if)
2107c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2108c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2109c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
21106cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2111c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2112c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_DISABLE_BATCH_SCAN,
2113c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2114c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2115c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2116c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_read_batch_scan_reports(int client_if, int scan_mode)
2117c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{
2118c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    CHECK_BTGATT_INIT();
2119c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btgatt_batch_track_cb_t bt_scan_cb;
21206cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
2121c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.client_if = (uint8_t) client_if;
2122c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    bt_scan_cb.scan_mode = scan_mode;
2123c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_BATCH_SCAN_REPORTS,
2124c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
2125c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji}
2126c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji
2127ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern bt_status_t btif_gattc_test_command_impl(int command, btgatt_test_params_t* params);
2128ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2129ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_test_command(int command, btgatt_test_params_t* params)
2130ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{
2131ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    return btif_gattc_test_command_impl(command, params);
2132ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}
2133ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2134ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaconst btgatt_client_interface_t btgattClientInterface = {
2135ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_register_app,
2136ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_unregister_app,
2137ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_scan,
2138ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_open,
2139ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_close,
21405c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_gattc_listen,
2141ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_refresh,
2142ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_search_service,
2143ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_read_char,
2144ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_write_char,
2145ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_read_char_descr,
2146ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_write_char_descr,
2147ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_execute_write,
2148ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_reg_for_notification,
2149ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_dereg_for_notification,
2150ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_read_remote_rssi,
21511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_gattc_scan_filter_param_setup,
21521a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_gattc_scan_filter_add_remove,
2153b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach    btif_gattc_scan_filter_clear,
21541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji    btif_gattc_scan_filter_enable,
2155ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta    btif_gattc_get_device_type,
21565c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach    btif_gattc_set_adv_data,
21579426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach    btif_gattc_configure_mtu,
215852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach    btif_gattc_conn_parameter_update,
21597d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham    btif_gattc_set_scan_parameters,
2160a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_enable,
2161a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_update,
2162a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_setdata,
2163a6ce7751d84218c193eb90d390aef23217b1737eWei Wang    btif_gattc_multi_adv_disable,
2164c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_cfg_storage,
2165c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_enb_batch_scan,
2166c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_dis_batch_scan,
2167c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji    btif_gattc_read_batch_scan_reports,
2168533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    btif_gattc_test_command,
2169533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski    btif_gattc_get_gatt_db
2170ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta};
2171ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta
2172ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif
2173