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