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