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