btif_gatt_client.cc revision db554581079863974af8e1289646f5deea6fc044
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 * 22ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Filename: btif_gatt_client.c 23ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 24ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Description: GATT client implementation 25ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 26ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *******************************************************************************/ 27ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 28ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <hardware/bluetooth.h> 29ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdio.h> 30ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdlib.h> 31ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <errno.h> 32ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <string.h> 33ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 3495b74f252f534ec757aab1fc08e086e02b2cfe8dSharvil Nanavati#include "btcore/include/bdaddr.h" 35ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_common.h" 36ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_util.h" 37ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 38ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (defined(BLE_INCLUDED) && (BLE_INCLUDED == TRUE)) 39ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 406975b4d711142b885af479721cada448952c6b41Andre Eisenbach#include <hardware/bt_gatt.h> 41db554581079863974af8e1289646f5deea6fc044Marie Janssen 42ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_api.h" 43ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_gatt_api.h" 44ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_config.h" 45db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_dm.h" 46ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_gatt.h" 47db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_gatt_multi_adv_util.h" 48ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_gatt_util.h" 49ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_storage.h" 50db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_storage.h" 5144802768c447ab480d4227b3a852a97d923b816dSharvil Nanavati#include "osi/include/log.h" 52b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach#include "vendor_api.h" 53b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 54ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 55ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Constants & Macros 56ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/ 57ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 58db554581079863974af8e1289646f5deea6fc044Marie Janssen#define LOG_TAG "bt_btif_gattc" 59db554581079863974af8e1289646f5deea6fc044Marie Janssen 60ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define CHECK_BTGATT_INIT() if (bt_gatt_callbacks == NULL)\ 61ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta {\ 62db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_WARN(LOG_TAG, "%s: BTGATT not initialized", __FUNCTION__);\ 63ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return BT_STATUS_NOT_READY;\ 64ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } else {\ 65db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_VERBOSE(LOG_TAG, "%s", __FUNCTION__);\ 66ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 67ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 68a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BLE_RESOLVE_ADDR_MSB 0x40 /* bit7, bit6 is 01 to be resolvable random */ 69a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BLE_RESOLVE_ADDR_MASK 0xc0 /* bit 6, and bit7 */ 70a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BTM_BLE_IS_RESOLVE_BDA(x) ((x[0] & BLE_RESOLVE_ADDR_MASK) == BLE_RESOLVE_ADDR_MSB) 71ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 72ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef enum { 73ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_REGISTER_APP = 1000, 74ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_UNREGISTER_APP, 75ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_SCAN_START, 76ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_SCAN_STOP, 77ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_OPEN, 78ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_CLOSE, 79ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_SEARCH_SERVICE, 80ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_GET_FIRST_CHAR, 81ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_GET_NEXT_CHAR, 82ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_GET_FIRST_CHAR_DESCR, 83ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_GET_NEXT_CHAR_DESCR, 84ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_GET_FIRST_INCL_SERVICE, 85ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_GET_NEXT_INCL_SERVICE, 86ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_READ_CHAR, 87ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_READ_CHAR_DESCR, 88ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_WRITE_CHAR, 89ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_WRITE_CHAR_DESCR, 90ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_EXECUTE_WRITE, 91ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_REG_FOR_NOTIFICATION, 92ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_DEREG_FOR_NOTIFICATION, 93ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_REFRESH, 945c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach BTIF_GATTC_READ_RSSI, 955c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach BTIF_GATTC_LISTEN, 969426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach BTIF_GATTC_SET_ADV_DATA, 979426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach BTIF_GATTC_CONFIGURE_MTU, 9852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach BTIF_GATTC_CONN_PARAM_UPDT, 991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_GATTC_SCAN_FILTER_PARAM_SETUP, 100b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach BTIF_GATTC_SCAN_FILTER_CONFIG, 1017d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham BTIF_GATTC_SCAN_FILTER_CLEAR, 1021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_GATTC_SCAN_FILTER_ENABLE, 1037d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham BTIF_GATTC_SET_SCAN_PARAMS, 104a6ce7751d84218c193eb90d390aef23217b1737eWei Wang BTIF_GATTC_ADV_INSTANCE_ENABLE, 105a6ce7751d84218c193eb90d390aef23217b1737eWei Wang BTIF_GATTC_ADV_INSTANCE_UPDATE, 106a6ce7751d84218c193eb90d390aef23217b1737eWei Wang BTIF_GATTC_ADV_INSTANCE_SET_DATA, 107c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTIF_GATTC_ADV_INSTANCE_DISABLE, 108c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTIF_GATTC_CONFIG_STORAGE_PARAMS, 109c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTIF_GATTC_ENABLE_BATCH_SCAN, 110c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTIF_GATTC_READ_BATCH_SCAN_REPORTS, 111c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTIF_GATTC_DISABLE_BATCH_SCAN 112ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} btif_gattc_event_t; 113ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 114ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATT_MAX_OBSERVED_DEV 40 115ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 116ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATT_OBSERVE_EVT 0x1000 117ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATTC_RSSI_EVT 0x1001 118935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji#define BTIF_GATTC_SCAN_FILTER_EVT 0x1003 119935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji#define BTIF_GATTC_SCAN_PARAM_EVT 0x1004 120ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 121c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji#define ENABLE_BATCH_SCAN 1 122c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji#define DISABLE_BATCH_SCAN 0 123c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 124ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 125ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Local type definitions 126ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/ 127c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojitypedef struct 128c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 129c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t report_format; 130c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint16_t data_len; 131c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t num_records; 132c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t *p_rep_data; 133c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} btgatt_batch_reports; 134c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 135c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojitypedef struct 136c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 137c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t status; 138c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t client_if; 1391acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji uint8_t action; 1401acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji uint8_t avbl_space; 1411acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji uint8_t lost_timeout; 142f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji tBLE_ADDR_TYPE addr_type; 143c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t batch_scan_full_max; 144c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t batch_scan_trunc_max; 145c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t batch_scan_notify_threshold; 146935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji tBTA_BLE_BATCH_SCAN_MODE scan_mode; 147c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint32_t scan_interval; 148c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint32_t scan_window; 149c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji tBTA_BLE_DISCARD_RULE discard_rule; 150f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btgatt_batch_reports read_reports; 151c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} btgatt_batch_track_cb_t; 152ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 153f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji 1541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojitypedef tBTA_DM_BLE_PF_FILT_PARAMS btgatt_adv_filt_param_t; 1551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 1561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojitypedef struct 1571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{ 1581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t client_if; 1591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t action; 1601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji tBTA_DM_BLE_PF_COND_TYPE filt_type; 1611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji bt_bdaddr_t bd_addr; 1621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t value[BTGATT_MAX_ATTR_LEN]; 1631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t value_len; 1641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t filt_index; 1651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint16_t conn_id; 1661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint16_t company_id_mask; 1671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji bt_uuid_t uuid; 1681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji bt_uuid_t uuid_mask; 1691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t value_mask[BTGATT_MAX_ATTR_LEN]; 1701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t value_mask_len; 1711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t has_mask; 1721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t addr_type; 1731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t status; 1741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji tBTA_DM_BLE_PF_AVBL_SPACE avbl_space; 1751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji tBTA_DM_BLE_SCAN_COND_OP cond_op; 1761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filt_param_t adv_filt_param; 1771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji} btgatt_adv_filter_cb_t; 1781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 179ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct 180ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 181ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t value[BTGATT_MAX_ATTR_LEN]; 182a6ce7751d84218c193eb90d390aef23217b1737eWei Wang uint8_t inst_id; 183ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_bdaddr_t bd_addr; 184ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 185ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_srvc_id_t incl_srvc_id; 1865f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t char_id; 1875f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t descr_id; 188ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_uuid_t uuid; 189b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach bt_uuid_t uuid_mask; 190ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint16_t conn_id; 191ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint16_t len; 192b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach uint16_t mask; 193935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji uint32_t scan_interval; 194935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji uint32_t scan_window; 195ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t client_if; 196ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t action; 197ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t is_direct; 198ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t search_all; 199ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t auth_req; 200ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t write_type; 201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t status; 202ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t addr_type; 2035c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach uint8_t start; 204b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach uint8_t has_mask; 205ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int8_t rssi; 2067fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta uint8_t flag; 207ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBT_DEVICE_TYPE device_type; 2087fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta btgatt_transport_t transport; 209ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} __attribute__((packed)) btif_gattc_cb_t; 210ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 211ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct 212ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 213ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_bdaddr_t bd_addr; 21452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach uint16_t min_interval; 21552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach uint16_t max_interval; 21652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach uint16_t timeout; 21752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach uint16_t latency; 21852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach} btif_conn_param_cb_t; 21952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach 22052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbachtypedef struct 22152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach{ 22252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach bt_bdaddr_t bd_addr; 223ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BOOLEAN in_use; 224ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}__attribute__((packed)) btif_gattc_dev_t; 225ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 226ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct 227ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 228ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_dev_t remote_dev[BTIF_GATT_MAX_OBSERVED_DEV]; 2297fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta uint8_t addr_type; 2307fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta uint8_t next_storage_idx; 231ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}__attribute__((packed)) btif_gattc_dev_cb_t; 232ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 233ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 234ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Static variables 235ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/ 236ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 237ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern const btgatt_callbacks_t *bt_gatt_callbacks; 238ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_gattc_dev_cb_t btif_gattc_dev_cb; 239ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_gattc_dev_cb_t *p_dev_cb = &btif_gattc_dev_cb; 240ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic uint8_t rssi_request_client_if; 241ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 242ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 243ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Static functions 244ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/ 245ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2469dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbachstatic bt_status_t btif_gattc_multi_adv_disable(int client_if); 247cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbachstatic void btif_multi_adv_stop_cb(void *p_tle) 2489dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach{ 249bb95452741bfd65723ea417c25dbd326c7568ab7Arman Uguray int client_if = PTR_TO_INT(((TIMER_LIST_ENT*)p_tle)->data); 2509dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach btif_gattc_multi_adv_disable(client_if); // Does context switch 2519dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach} 2529dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach 253935324abbe8706307297f09cf79bbcd4efb73367Satya Callojistatic btgattc_error_t btif_gattc_translate_btm_status(tBTM_STATUS status) 254935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji{ 255935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji switch(status) 256935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji { 257935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_SUCCESS: 258935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_SUCCESS_NO_SECURITY: 259935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji return BT_GATTC_COMMAND_SUCCESS; 260935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 261935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_CMD_STARTED: 262935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji return BT_GATTC_COMMAND_STARTED; 263935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 264935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_BUSY: 265935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji return BT_GATTC_COMMAND_BUSY; 266935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 267935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_CMD_STORED: 268935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji return BT_GATTC_COMMAND_STORED; 269935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 270935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_NO_RESOURCES: 271935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji return BT_GATTC_NO_RESOURCES; 272935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 273935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_MODE_UNSUPPORTED: 274935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_WRONG_MODE: 275935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_MODE4_LEVEL4_NOT_SUPPORTED: 276935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji return BT_GATTC_MODE_UNSUPPORTED; 277935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 278935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_ILLEGAL_VALUE: 279935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_SCO_BAD_LENGTH: 280935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji return BT_GATTC_ILLEGAL_VALUE; 281935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 282935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_UNKNOWN_ADDR: 283935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji return BT_GATTC_UNKNOWN_ADDR; 284935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 285935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_DEVICE_TIMEOUT: 286935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji return BT_GATTC_DEVICE_TIMEOUT; 287935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 288935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_FAILED_ON_SECURITY: 289935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_REPEATED_ATTEMPTS: 290935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_NOT_AUTHORIZED: 291935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji return BT_GATTC_SECURITY_ERROR; 292935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 293935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_DEV_RESET: 294935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_ILLEGAL_ACTION: 295935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji return BT_GATTC_INCORRECT_STATE; 296935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 297935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_BAD_VALUE_RET: 298935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji return BT_GATTC_INVALID_CONTROLLER_OUTPUT; 299935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 300935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_DELAY_CHECK: 301935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji return BT_GATTC_DELAYED_ENCRYPTION_CHECK; 302935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 303935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTM_ERR_PROCESSING: 304935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji default: 305935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji return BT_GATTC_ERR_PROCESSING; 306935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji } 307935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji} 308935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 3098444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbachstatic void btapp_gattc_req_data(UINT16 event, char *p_dest, char *p_src) 3108444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach{ 31152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach tBTA_GATTC *p_dest_data = (tBTA_GATTC*) p_dest; 31252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach tBTA_GATTC *p_src_data = (tBTA_GATTC*) p_src; 3138444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 3148444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach if (!p_src_data || !p_dest_data) 3158444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach return; 3168444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 3178444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach // Copy basic structure first 3188444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach memcpy(p_dest_data, p_src_data, sizeof(tBTA_GATTC)); 3198444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 3208444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach // Allocate buffer for request data if necessary 3218444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach switch (event) 3228444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach { 3238444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach case BTA_GATTC_READ_CHAR_EVT: 3248444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach case BTA_GATTC_READ_DESCR_EVT: 3258444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 326e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach if (p_src_data->read.p_value != NULL) 3278444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach { 328e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach p_dest_data->read.p_value = GKI_getbuf(sizeof(tBTA_GATT_READ_VAL)); 3298444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 330e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach if (p_dest_data->read.p_value != NULL) 3318444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach { 332e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach memcpy(p_dest_data->read.p_value, p_src_data->read.p_value, 333e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach sizeof(tBTA_GATT_READ_VAL)); 334e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach 335e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach // Allocate buffer for att value if necessary 3366975b4d711142b885af479721cada448952c6b41Andre Eisenbach if (get_uuid16(&p_src_data->read.descr_type.uuid) != GATT_UUID_CHAR_AGG_FORMAT 337f052217962d0c06392eb79687820c9469cd6a75aAndre Eisenbach && p_src_data->read.p_value->unformat.len > 0 338e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach && p_src_data->read.p_value->unformat.p_value != NULL) 3398444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach { 340e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach p_dest_data->read.p_value->unformat.p_value = 341e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach GKI_getbuf(p_src_data->read.p_value->unformat.len); 342e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach if (p_dest_data->read.p_value->unformat.p_value != NULL) 343e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach { 344e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach memcpy(p_dest_data->read.p_value->unformat.p_value, 345e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach p_src_data->read.p_value->unformat.p_value, 346e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach p_src_data->read.p_value->unformat.len); 347e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach } 3488444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach } 3498444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach } 3508444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach } 351e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach else 352e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach { 353e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_WARNING("%s :Src read.p_value ptr is NULL for event 0x%x", 354e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach __FUNCTION__, event); 355e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach p_dest_data->read.p_value = NULL; 356e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach 357e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach } 3588444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach break; 3598444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 3608444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach default: 3618444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach break; 3628444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach } 3638444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach} 3648444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 3658444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbachstatic void btapp_gattc_free_req_data(UINT16 event, tBTA_GATTC *p_data) 3668444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach{ 3678444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach switch (event) 3688444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach { 3698444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach case BTA_GATTC_READ_CHAR_EVT: 3708444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach case BTA_GATTC_READ_DESCR_EVT: 3718444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach if (p_data != NULL && p_data->read.p_value != NULL) 3728444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach { 3736975b4d711142b885af479721cada448952c6b41Andre Eisenbach if (get_uuid16 (&p_data->read.descr_type.uuid) != GATT_UUID_CHAR_AGG_FORMAT 374f052217962d0c06392eb79687820c9469cd6a75aAndre Eisenbach && p_data->read.p_value->unformat.len > 0 3758444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach && p_data->read.p_value->unformat.p_value != NULL) 3768444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach { 3778444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach GKI_freebuf(p_data->read.p_value->unformat.p_value); 3788444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach } 3798444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach GKI_freebuf(p_data->read.p_value); 3808444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach } 3818444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach break; 3828444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 3838444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach default: 3848444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach break; 3858444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach } 3868444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach} 3878444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 388ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_init_dev_cb(void) 389ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 390ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memset(p_dev_cb, 0, sizeof(btif_gattc_dev_cb_t)); 391ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 392c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 393ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_add_remote_bdaddr (BD_ADDR p_bda, uint8_t addr_type) 394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 395ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t i; 396ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (i = 0; i < BTIF_GATT_MAX_OBSERVED_DEV; i++) 397ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 398ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!p_dev_cb->remote_dev[i].in_use ) 399ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 400ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(p_dev_cb->remote_dev[i].bd_addr.address, p_bda, BD_ADDR_LEN); 401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_dev_cb->addr_type = addr_type; 402ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_dev_cb->remote_dev[i].in_use = TRUE; 403db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_VERBOSE(LOG_TAG, "%s device added idx=%d", __FUNCTION__, i ); 404ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ( i == BTIF_GATT_MAX_OBSERVED_DEV) 409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta i= p_dev_cb->next_storage_idx; 411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(p_dev_cb->remote_dev[i].bd_addr.address, p_bda, BD_ADDR_LEN); 412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_dev_cb->addr_type = addr_type; 413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_dev_cb->remote_dev[i].in_use = TRUE; 414db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_VERBOSE(LOG_TAG, "%s device overwrite idx=%d", __FUNCTION__, i ); 415ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_dev_cb->next_storage_idx++; 41616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (p_dev_cb->next_storage_idx >= BTIF_GATT_MAX_OBSERVED_DEV) 417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_dev_cb->next_storage_idx = 0; 418ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 419ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 420ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 421ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic BOOLEAN btif_gattc_find_bdaddr (BD_ADDR p_bda) 422ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 423ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t i; 424ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (i = 0; i < BTIF_GATT_MAX_OBSERVED_DEV; i++) 425ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 426ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_dev_cb->remote_dev[i].in_use && 427ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta !memcmp(p_dev_cb->remote_dev[i].bd_addr.address, p_bda, BD_ADDR_LEN)) 428ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 429ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return TRUE; 430ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 431ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 432ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return FALSE; 433ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 434ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 435ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_update_properties ( btif_gattc_cb_t *p_btif_cb ) 436ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 437ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t remote_name_len; 438ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t *p_eir_remote_name=NULL; 439ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_bdname_t bdname; 440ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 441a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value, 442ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_EIR_COMPLETE_LOCAL_NAME_TYPE, &remote_name_len); 443ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 44416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (p_eir_remote_name == NULL) 445ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 446a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value, 447ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BT_EIR_SHORTENED_LOCAL_NAME_TYPE, &remote_name_len); 448ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 449ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 45016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (p_eir_remote_name) 451ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 452bcbf9cd0727f6903f9cf6c165453539fc55b6072Mike J. Chen memcpy(bdname.name, p_eir_remote_name, remote_name_len); 453bcbf9cd0727f6903f9cf6c165453539fc55b6072Mike J. Chen bdname.name[remote_name_len]='\0'; 454ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 455db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, "%s BLE device name=%s len=%d dev_type=%d", __FUNCTION__, bdname.name, 456ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta remote_name_len, p_btif_cb->device_type ); 457ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_dm_update_ble_remote_properties( p_btif_cb->bd_addr.address, bdname.name, 458ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_btif_cb->device_type); 459ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 460ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 461ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_storage_set_remote_addr_type( &p_btif_cb->bd_addr, p_btif_cb->addr_type); 462ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 463ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 464ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_upstreams_evt(uint16_t event, char* p_param) 465ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 466db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_VERBOSE(LOG_TAG, "%s: Event %d", __FUNCTION__, event); 467ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 46852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach tBTA_GATTC *p_data = (tBTA_GATTC*) p_param; 469ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta switch (event) 470ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 471ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_REG_EVT: 472ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 473ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_uuid_t app_uuid; 474ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_to_btif_uuid(&app_uuid, &p_data->reg_oper.app_uuid); 475ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->register_client_cb 476ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->reg_oper.status 477ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->reg_oper.client_if 478ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , &app_uuid 479ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ); 480ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 481ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 482ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 483ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_DEREG_EVT: 484ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 485ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 486ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_READ_CHAR_EVT: 487ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 488ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_read_params_t data; 489ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta set_read_value(&data, &p_data->read); 490ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 491ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->read_characteristic_cb 492ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->read.conn_id, p_data->read.status, &data); 493ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 494ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 495ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 496ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_WRITE_CHAR_EVT: 497ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_PREP_WRITE_EVT: 498ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 499ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_write_params_t data; 500ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_to_btif_srvc_id(&data.srvc_id, &p_data->write.srvc_id); 5015f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach bta_to_btif_gatt_id(&data.char_id, &p_data->write.char_id); 502ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 503ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->write_characteristic_cb 504ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->write.conn_id, p_data->write.status, &data 505ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ); 506ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 507ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 508ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 509ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_EXEC_EVT: 510ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 511ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->execute_write_cb 512ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->exec_cmpl.conn_id, p_data->exec_cmpl.status 513ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ); 514ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 515ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 516ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 517ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_SEARCH_CMPL_EVT: 518ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 519ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->search_complete_cb 520ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->search_cmpl.conn_id, p_data->search_cmpl.status); 521ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 522ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 523ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 524ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_SEARCH_RES_EVT: 525ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 526ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_srvc_id_t data; 527ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_to_btif_srvc_id(&data, &(p_data->srvc_res.service_uuid)); 528ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->search_result_cb 529ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->srvc_res.conn_id, &data); 530ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 531ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 532ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 533ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_READ_DESCR_EVT: 534ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 535ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_read_params_t data; 536ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta set_read_value(&data, &p_data->read); 537ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 538ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->read_descriptor_cb 539ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->read.conn_id, p_data->read.status, &data); 540ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 541ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 542ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 543ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_WRITE_DESCR_EVT: 544ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 545ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_write_params_t data; 546ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_to_btif_srvc_id(&data.srvc_id, &p_data->write.srvc_id); 5475f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach bta_to_btif_gatt_id(&data.char_id, &p_data->write.char_id); 5485f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach bta_to_btif_gatt_id(&data.descr_id, &p_data->write.descr_type); 549ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 550ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->write_descriptor_cb 551ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->write.conn_id, p_data->write.status, &data); 552ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 553ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 554ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 555ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_NOTIF_EVT: 556ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 557ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_notify_params_t data; 558ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 559ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(data.bda.address, p_data->notify.bda); 560ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 561ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_to_btif_srvc_id(&data.srvc_id, &p_data->notify.char_id.srvc_id); 5625f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach bta_to_btif_gatt_id(&data.char_id, &p_data->notify.char_id.char_id); 563ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(data.value, p_data->notify.value, p_data->notify.len); 564ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 565ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta data.is_notify = p_data->notify.is_notify; 566ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta data.len = p_data->notify.len; 567ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 568ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->notify_cb 569ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->notify.conn_id, &data); 570ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 571ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_data->notify.is_notify == FALSE) 572ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 573ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_SendIndConfirm(p_data->notify.conn_id, 574ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &p_data->notify.char_id); 575ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 576ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 577ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 578ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 579ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_OPEN_EVT: 580ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 581ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_bdaddr_t bda; 582ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(bda.address, p_data->open.remote_bda); 583ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 584ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->open_cb, p_data->open.conn_id 585ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->open.status, p_data->open.client_if, &bda); 5866975b4d711142b885af479721cada448952c6b41Andre Eisenbach 5879426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach if (GATT_DEF_BLE_MTU_SIZE != p_data->open.mtu && p_data->open.mtu) 5889426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach { 5899426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, p_data->open.conn_id 5909426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach , p_data->open.status , p_data->open.mtu); 5919426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach } 5929426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach 5936975b4d711142b885af479721cada448952c6b41Andre Eisenbach if (p_data->open.status == BTA_GATT_OK) 5946975b4d711142b885af479721cada448952c6b41Andre Eisenbach btif_gatt_check_encrypted_link(p_data->open.remote_bda); 595ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 596ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 597ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 598ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_CLOSE_EVT: 599ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 600ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_bdaddr_t bda; 601ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(bda.address, p_data->close.remote_bda); 602ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->close_cb, p_data->close.conn_id 603ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->status, p_data->close.client_if, &bda); 604ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 605ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 606ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 607ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_ACL_EVT: 608db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, "BTA_GATTC_ACL_EVT: status = %d", p_data->status); 609ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* Ignore for now */ 610ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 611ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 612ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_CANCEL_OPEN_EVT: 613ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 614ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 615ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATT_OBSERVE_EVT: 616ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 61752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param; 618aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi uint8_t remote_name_len; 619aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi uint8_t *p_eir_remote_name=NULL; 6207fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta bt_device_type_t dev_type; 6217fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta bt_property_t properties; 622aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi 623a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value, 624aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi BTM_EIR_COMPLETE_LOCAL_NAME_TYPE, &remote_name_len); 625aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi 62616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (p_eir_remote_name == NULL) 627ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 628a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value, 629aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi BT_EIR_SHORTENED_LOCAL_NAME_TYPE, &remote_name_len); 630aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi } 631aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi 632aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi if ((p_btif_cb->addr_type != BLE_ADDR_RANDOM) || (p_eir_remote_name)) 633aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi { 634aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi if (!btif_gattc_find_bdaddr(p_btif_cb->bd_addr.address)) 635aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi { 636aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi btif_gattc_add_remote_bdaddr(p_btif_cb->bd_addr.address, p_btif_cb->addr_type); 637aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi btif_gattc_update_properties(p_btif_cb); 638f6c48a09e398de804f7d563a44904e917afd2c32Brian Carlstrom 639aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi } 640f6c48a09e398de804f7d563a44904e917afd2c32Brian Carlstrom 641ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 6427fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta 6437fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta dev_type = p_btif_cb->device_type; 6447fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta BTIF_STORAGE_FILL_PROPERTY(&properties, 6457fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta BT_PROPERTY_TYPE_OF_DEVICE, sizeof(dev_type), &dev_type); 6467fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta btif_storage_set_remote_device_property(&(p_btif_cb->bd_addr), &properties); 6477fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta 648ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->scan_result_cb, 649ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &p_btif_cb->bd_addr, p_btif_cb->rssi, p_btif_cb->value); 650ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 651ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 652ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 653ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_RSSI_EVT: 654ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 65552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param; 656ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->read_remote_rssi_cb, p_btif_cb->client_if, 657ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &p_btif_cb->bd_addr, p_btif_cb->rssi, p_btif_cb->status); 658ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 659ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 660ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 6615c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach case BTA_GATTC_LISTEN_EVT: 6625c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach { 6635c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach HAL_CBACK(bt_gatt_callbacks, client->listen_cb 6645c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach , p_data->reg_oper.status 6655c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach , p_data->reg_oper.client_if 6665c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach ); 6675c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach break; 6685c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach } 6699426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach 6709426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach case BTA_GATTC_CFG_MTU_EVT: 6719426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach { 6729426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, p_data->cfg_mtu.conn_id 6739426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach , p_data->cfg_mtu.status , p_data->cfg_mtu.mtu); 6749426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach break; 6759426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach } 67617b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach 677a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTA_GATTC_MULT_ADV_ENB_EVT: 678a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 67952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param; 68016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (0xFF != p_btif_cb->inst_id) 68116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham btif_multi_adv_add_instid_map(p_btif_cb->client_if, p_btif_cb->inst_id, false); 682a6ce7751d84218c193eb90d390aef23217b1737eWei Wang HAL_CBACK(bt_gatt_callbacks, client->multi_adv_enable_cb 683a6ce7751d84218c193eb90d390aef23217b1737eWei Wang , p_btif_cb->client_if 684a6ce7751d84218c193eb90d390aef23217b1737eWei Wang , p_btif_cb->status 685a6ce7751d84218c193eb90d390aef23217b1737eWei Wang ); 6869dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach btif_multi_adv_timer_ctrl(p_btif_cb->client_if, 6879dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach (p_btif_cb->status==0 ? btif_multi_adv_stop_cb : NULL)); 688a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 689a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 690a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 691a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTA_GATTC_MULT_ADV_UPD_EVT: 692a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 69352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param; 694a6ce7751d84218c193eb90d390aef23217b1737eWei Wang HAL_CBACK(bt_gatt_callbacks, client->multi_adv_update_cb 695a6ce7751d84218c193eb90d390aef23217b1737eWei Wang , p_btif_cb->client_if 696a6ce7751d84218c193eb90d390aef23217b1737eWei Wang , p_btif_cb->status 697a6ce7751d84218c193eb90d390aef23217b1737eWei Wang ); 6989dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach btif_multi_adv_timer_ctrl(p_btif_cb->client_if, 6999dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach (p_btif_cb->status==0 ? btif_multi_adv_stop_cb : NULL)); 700a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 701a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 702a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 703a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTA_GATTC_MULT_ADV_DATA_EVT: 704a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 70552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param; 7063770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_clear_clientif(p_btif_cb->client_if, FALSE); 707a6ce7751d84218c193eb90d390aef23217b1737eWei Wang HAL_CBACK(bt_gatt_callbacks, client->multi_adv_data_cb 708a6ce7751d84218c193eb90d390aef23217b1737eWei Wang , p_btif_cb->client_if 709a6ce7751d84218c193eb90d390aef23217b1737eWei Wang , p_btif_cb->status 710a6ce7751d84218c193eb90d390aef23217b1737eWei Wang ); 711a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 712a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 713a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 714a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTA_GATTC_MULT_ADV_DIS_EVT: 715a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 71652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param; 7173770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_clear_clientif(p_btif_cb->client_if, TRUE); 718a6ce7751d84218c193eb90d390aef23217b1737eWei Wang HAL_CBACK(bt_gatt_callbacks, client->multi_adv_disable_cb 719a6ce7751d84218c193eb90d390aef23217b1737eWei Wang , p_btif_cb->client_if 720a6ce7751d84218c193eb90d390aef23217b1737eWei Wang , p_btif_cb->status 721a6ce7751d84218c193eb90d390aef23217b1737eWei Wang ); 722a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 723a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 724a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 725a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTA_GATTC_ADV_DATA_EVT: 726a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 7273770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_cleanup_inst_cb(STD_ADV_INSTID, FALSE); 728a6ce7751d84218c193eb90d390aef23217b1737eWei Wang /* No HAL callback available */ 729a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 730a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 731a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 73217b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach case BTA_GATTC_CONGEST_EVT: 73317b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach HAL_CBACK(bt_gatt_callbacks, client->congestion_cb 73417b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach , p_data->congest.conn_id 73517b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach , p_data->congest.congested 73617b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach ); 73717b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach break; 73817b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach 739c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTA_GATTC_BTH_SCAN_CFG_EVT: 740c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 74152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param; 742c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji HAL_CBACK(bt_gatt_callbacks, client->batchscan_cfg_storage_cb 743c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji , p_data->client_if 744c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji , p_data->status 745c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji ); 746c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 747c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 748c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 749c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTA_GATTC_BTH_SCAN_ENB_EVT: 750c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 75152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param; 752c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji HAL_CBACK(bt_gatt_callbacks, client->batchscan_enb_disable_cb 753c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji , ENABLE_BATCH_SCAN 754c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji , p_data->client_if 755c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji , p_data->status); 756c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 757c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 758c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 759c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTA_GATTC_BTH_SCAN_DIS_EVT: 760c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 76152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param; 762c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji HAL_CBACK(bt_gatt_callbacks, client->batchscan_enb_disable_cb 763c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji , DISABLE_BATCH_SCAN 764c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji , p_data->client_if 765c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji , p_data->status); 766c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 767c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 768c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 769c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTA_GATTC_BTH_SCAN_THR_EVT: 770c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 77152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param; 772c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji HAL_CBACK(bt_gatt_callbacks, client->batchscan_threshold_cb 773c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji , p_data->client_if); 774c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 775c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 776c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 777c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTA_GATTC_BTH_SCAN_RD_EVT: 778c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 77952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_batch_track_cb_t *p_data = (btgatt_batch_track_cb_t*) p_param; 780c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t *p_rep_data = NULL; 781c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 782adb7bb50469db992969295792a7ba3b73f9e24b3Satya Calloji if (p_data->read_reports.data_len > 0 && NULL != p_data->read_reports.p_rep_data) 783c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 784c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji p_rep_data = GKI_getbuf(p_data->read_reports.data_len); 785c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji memcpy(p_rep_data, p_data->read_reports.p_rep_data, p_data->read_reports.data_len); 786c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 787c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 788c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji HAL_CBACK(bt_gatt_callbacks, client->batchscan_reports_cb 789c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji , p_data->client_if, p_data->status, p_data->read_reports.report_format 790c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji , p_data->read_reports.num_records, p_data->read_reports.data_len, p_rep_data); 791adb7bb50469db992969295792a7ba3b73f9e24b3Satya Calloji if (NULL != p_rep_data) 792adb7bb50469db992969295792a7ba3b73f9e24b3Satya Calloji GKI_freebuf(p_rep_data); 793c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 794c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 795c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 7961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji case BTA_GATTC_SCAN_FLT_CFG_EVT: 7971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji { 79852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_adv_filter_cb_t *p_btif_cb = (btgatt_adv_filter_cb_t*) p_param; 7991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji HAL_CBACK(bt_gatt_callbacks, client->scan_filter_cfg_cb, p_btif_cb->action, 8001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_btif_cb->client_if, p_btif_cb->status, p_btif_cb->cond_op, 8011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_btif_cb->avbl_space); 8021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji break; 8031a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji } 8041a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 8051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji case BTA_GATTC_SCAN_FLT_PARAM_EVT: 8061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji { 8071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t *p_data = (btgatt_adv_filter_cb_t*) p_param; 8081a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("BTA_GATTC_SCAN_FLT_PARAM_EVT: %d, %d, %d, %d",p_data->client_if, 8091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_data->action, p_data->avbl_space, p_data->status); 8101acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji HAL_CBACK(bt_gatt_callbacks, client->scan_filter_param_cb 8111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji , p_data->action, p_data->client_if, p_data->status 8121a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji , p_data->avbl_space); 8131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji break; 8141a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji } 8151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 8161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji case BTA_GATTC_SCAN_FLT_STATUS_EVT: 8171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji { 8181a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t *p_data = (btgatt_adv_filter_cb_t*) p_param; 8191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("BTA_GATTC_SCAN_FLT_STATUS_EVT: %d, %d, %d",p_data->client_if, 8201a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_data->action, p_data->status); 8211acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji HAL_CBACK(bt_gatt_callbacks, client->scan_filter_status_cb 8221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji , p_data->action, p_data->client_if, p_data->status); 8231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji break; 8241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji } 8251a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 8261acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji case BTA_GATTC_ADV_VSC_EVT: 8271acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji { 828f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btgatt_track_adv_info_t *p_data = (btgatt_track_adv_info_t*)p_param; 829f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btgatt_track_adv_info_t adv_info_data; 830f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji 831f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji memset(&adv_info_data, 0, sizeof(btgatt_track_adv_info_t)); 832f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji 833f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_gatt_move_track_adv_data(&adv_info_data, p_data); 834f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji HAL_CBACK(bt_gatt_callbacks, client->track_adv_event_cb, &adv_info_data); 8351acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji break; 8361acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji } 8371acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji 838935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji case BTIF_GATTC_SCAN_PARAM_EVT: 839935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji { 840935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t *)p_param; 841935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji HAL_CBACK(bt_gatt_callbacks, client->scan_parameter_setup_completed_cb, 842935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji p_btif_cb->client_if, btif_gattc_translate_btm_status(p_btif_cb->status)); 843935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji break; 844935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji } 845935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 846ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta default: 847db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_ERROR(LOG_TAG, "%s: Unhandled event (%d)!", __FUNCTION__, event); 848ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 849ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 8508444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 8518444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach btapp_gattc_free_req_data(event, p_data); 852ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 853ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 8546975b4d711142b885af479721cada448952c6b41Andre Eisenbachstatic void bta_gattc_cback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data) 855ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 856ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_status_t status = btif_transfer_context(btif_gattc_upstreams_evt, 85752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach (uint16_t) event, (void*) p_data, sizeof(tBTA_GATTC), btapp_gattc_req_data); 858ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ASSERTC(status == BT_STATUS_SUCCESS, "Context transfer failed!", status); 859ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 860ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 861a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic void bta_gattc_multi_adv_cback(tBTA_BLE_MULTI_ADV_EVT event, UINT8 inst_id, 862a6ce7751d84218c193eb90d390aef23217b1737eWei Wang void *p_ref, tBTA_STATUS call_status) 863a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{ 864a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_gattc_cb_t btif_cb; 865a6ce7751d84218c193eb90d390aef23217b1737eWei Wang tBTA_GATTC_EVT upevt; 866a6ce7751d84218c193eb90d390aef23217b1737eWei Wang uint8_t client_if = 0; 867a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 86816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL == p_ref) 869a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 87016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham BTIF_TRACE_WARNING("%s Invalid p_ref received",__FUNCTION__); 87116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham } 87216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham else 87316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham { 87416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham client_if = *(UINT8 *) p_ref; 875a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 876a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 877e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s -Inst ID %d, Status:%x, client_if:%d",__FUNCTION__,inst_id, call_status, 878a6ce7751d84218c193eb90d390aef23217b1737eWei Wang client_if); 879a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_cb.status = call_status; 880a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_cb.client_if = client_if; 881a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_cb.inst_id = inst_id; 882a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 883a6ce7751d84218c193eb90d390aef23217b1737eWei Wang switch(event) 884a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 885a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTA_BLE_MULTI_ADV_ENB_EVT: 886a6ce7751d84218c193eb90d390aef23217b1737eWei Wang upevt = BTA_GATTC_MULT_ADV_ENB_EVT; 887a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 888a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 889a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTA_BLE_MULTI_ADV_DISABLE_EVT: 890a6ce7751d84218c193eb90d390aef23217b1737eWei Wang upevt = BTA_GATTC_MULT_ADV_DIS_EVT; 891a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 892a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 893a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTA_BLE_MULTI_ADV_PARAM_EVT: 894a6ce7751d84218c193eb90d390aef23217b1737eWei Wang upevt = BTA_GATTC_MULT_ADV_UPD_EVT; 895a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 896a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 897a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTA_BLE_MULTI_ADV_DATA_EVT: 898a6ce7751d84218c193eb90d390aef23217b1737eWei Wang upevt = BTA_GATTC_MULT_ADV_DATA_EVT; 899a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 900a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 901a6ce7751d84218c193eb90d390aef23217b1737eWei Wang default: 902a6ce7751d84218c193eb90d390aef23217b1737eWei Wang return; 903a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 904a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 905a6ce7751d84218c193eb90d390aef23217b1737eWei Wang bt_status_t status = btif_transfer_context(btif_gattc_upstreams_evt, (uint16_t) upevt, 906a6ce7751d84218c193eb90d390aef23217b1737eWei Wang (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 907a6ce7751d84218c193eb90d390aef23217b1737eWei Wang ASSERTC(status == BT_STATUS_SUCCESS, "Context transfer failed!", status); 908a6ce7751d84218c193eb90d390aef23217b1737eWei Wang} 909a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 910a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic void bta_gattc_set_adv_data_cback(tBTA_STATUS call_status) 911a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{ 912a6ce7751d84218c193eb90d390aef23217b1737eWei Wang UNUSED(call_status); 913a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_gattc_cb_t btif_cb; 914a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_cb.status = call_status; 915a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_cb.action = 0; 916a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_ADV_DATA_EVT, 917a6ce7751d84218c193eb90d390aef23217b1737eWei Wang (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 918a6ce7751d84218c193eb90d390aef23217b1737eWei Wang} 919a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 920c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_setup_cb (tBTA_BLE_BATCH_SCAN_EVT evt, 921c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status) 922c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 923c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji UINT8 upevt = 0; 924c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btgatt_batch_track_cb_t btif_scan_track_cb; 925c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 926c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.status = status; 927c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.client_if = ref_value; 9281a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("bta_batch_scan_setup_cb-Status:%x, client_if:%d, evt=%d", 929c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji status, ref_value, evt); 930c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 931c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji switch(evt) 932c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 933c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTA_BLE_BATCH_SCAN_ENB_EVT: 934c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 935c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji upevt = BTA_GATTC_BTH_SCAN_ENB_EVT; 936c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 937c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 938c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 939c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTA_BLE_BATCH_SCAN_DIS_EVT: 940c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 941c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji upevt = BTA_GATTC_BTH_SCAN_DIS_EVT; 942c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 943c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 944c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 945c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTA_BLE_BATCH_SCAN_CFG_STRG_EVT: 946c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 947c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji upevt = BTA_GATTC_BTH_SCAN_CFG_EVT; 948c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 949c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 950c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 951c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTA_BLE_BATCH_SCAN_DATA_EVT: 952c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 953c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji upevt = BTA_GATTC_BTH_SCAN_RD_EVT; 954c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 955c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 956c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 957c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTA_BLE_BATCH_SCAN_THRES_EVT: 958c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 959c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji upevt = BTA_GATTC_BTH_SCAN_THR_EVT; 960c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 961c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 962c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 963c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji default: 964c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji return; 965c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 966c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 967c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_transfer_context(btif_gattc_upstreams_evt, upevt,(char*) &btif_scan_track_cb, 968c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji sizeof(btgatt_batch_track_cb_t), NULL); 969c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 970c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 971c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 972c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_threshold_cb(tBTA_DM_BLE_REF_VALUE ref_value) 973c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 974c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btgatt_batch_track_cb_t btif_scan_track_cb; 975c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.status = 0; 976c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.client_if = ref_value; 977c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 9781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("%s - client_if:%d",__FUNCTION__, ref_value); 979c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 980c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_BTH_SCAN_THR_EVT, 981c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji (char*) &btif_scan_track_cb, sizeof(btif_gattc_cb_t), NULL); 982c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 983c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 984c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_reports_cb(tBTA_DM_BLE_REF_VALUE ref_value, UINT8 report_format, 985c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji UINT8 num_records, UINT16 data_len, 986c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji UINT8* p_rep_data, tBTA_STATUS status) 987c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 988c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btgatt_batch_track_cb_t btif_scan_track_cb; 989adb7bb50469db992969295792a7ba3b73f9e24b3Satya Calloji memset(&btif_scan_track_cb, 0, sizeof(btgatt_batch_track_cb_t)); 9901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("%s - client_if:%d, %d, %d, %d",__FUNCTION__, ref_value, status, num_records, 991c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji data_len); 992c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 993c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.status = status; 994c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 995c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.client_if = ref_value; 996c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.read_reports.report_format = report_format; 997c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.read_reports.data_len = data_len; 998c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.read_reports.num_records = num_records; 999c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 100016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (data_len > 0) 1001c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 1002c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.read_reports.p_rep_data = GKI_getbuf(data_len); 1003c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji memcpy(btif_scan_track_cb.read_reports.p_rep_data, p_rep_data, data_len); 1004f1dba910daa5f0ce9ca89f840bb7e6269f07af1dSatya Calloji GKI_freebuf(p_rep_data); 1005c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 1006c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 1007c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_BTH_SCAN_RD_EVT, 1008c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji (char*) &btif_scan_track_cb, sizeof(btgatt_batch_track_cb_t), NULL); 1009c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 101016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (data_len > 0) 1011c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji GKI_freebuf(btif_scan_track_cb.read_reports.p_rep_data); 1012c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 1013c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 10146975b4d711142b885af479721cada448952c6b41Andre Eisenbachstatic void bta_scan_results_cb (tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH *p_data) 1015ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1016ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1017ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t len; 1018ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1019ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta switch (event) 1020ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1021ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_DM_INQ_RES_EVT: 1022ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1023ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(btif_cb.bd_addr.address, p_data->inq_res.bd_addr); 1024ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.device_type = p_data->inq_res.device_type; 1025ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.rssi = p_data->inq_res.rssi; 1026ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.addr_type = p_data->inq_res.ble_addr_type; 10277fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta btif_cb.flag = p_data->inq_res.flag; 1028ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_data->inq_res.p_eir) 1029ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1030ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(btif_cb.value, p_data->inq_res.p_eir, 62); 1031a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson if (BTM_CheckEirData(p_data->inq_res.p_eir, BTM_EIR_COMPLETE_LOCAL_NAME_TYPE, 1032ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &len)) 1033ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1034ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_data->inq_res.remt_name_not_required = TRUE; 1035ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1036ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1037ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1038ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1039ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1040ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_DM_INQ_CMPL_EVT: 1041ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1042e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s BLE observe complete. Num Resp %d", 1043ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta __FUNCTION__,p_data->inq_cmpl.num_resps); 1044ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return; 1045ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1046ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1047ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta default: 1048e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_WARNING("%s : Unknown event 0x%x", __FUNCTION__, event); 1049ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return; 1050ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1051ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATT_OBSERVE_EVT, 1052ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1053ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1054ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1055f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Callojistatic void bta_track_adv_event_cb(tBTA_DM_BLE_TRACK_ADV_DATA *p_track_adv_data) 10561acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji{ 1057f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btgatt_track_adv_info_t btif_scan_track_cb; 1058f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji BTIF_TRACE_DEBUG("%s",__FUNCTION__); 1059f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_gatt_move_track_adv_data(&btif_scan_track_cb, 1060f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji (btgatt_track_adv_info_t*)p_track_adv_data); 1061f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji 10621acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_ADV_VSC_EVT, 1063f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji (char*) &btif_scan_track_cb, sizeof(btgatt_track_adv_info_t), NULL); 10641acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji} 10651acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji 1066ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btm_read_rssi_cb (tBTM_RSSI_RESULTS *p_result) 1067ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1068ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1069ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1070ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(btif_cb.bd_addr.address, p_result->rem_bda); 1071ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.rssi = p_result->rssi; 1072ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.status = p_result->status; 1073ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.client_if = rssi_request_client_if; 1074ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATTC_RSSI_EVT, 1075ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1076ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1077ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1078935324abbe8706307297f09cf79bbcd4efb73367Satya Callojistatic void bta_scan_param_setup_cb(tGATT_IF client_if, tBTM_STATUS status) 1079935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji{ 1080935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji btif_gattc_cb_t btif_cb; 1081935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 1082935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji btif_cb.status = status; 1083935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji btif_cb.client_if = client_if; 1084935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATTC_SCAN_PARAM_EVT, 1085935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji (char *)&btif_cb, sizeof(btif_gattc_cb_t), NULL); 1086935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji} 1087935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji 10881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_cfg_cb(tBTA_DM_BLE_PF_ACTION action, tBTA_DM_BLE_SCAN_COND_OP cfg_op, 10891a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, tBTA_STATUS status, 10901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji tBTA_DM_BLE_REF_VALUE ref_value) 1091b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{ 10921a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t btif_cb; 1093b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach btif_cb.status = status; 10941a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.action = action; 10951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.cond_op = cfg_op; 10961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.avbl_space = avbl_space; 10971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.client_if = ref_value; 10981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_CFG_EVT, 10991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL); 11001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji} 11011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 11021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_param_setup_cb(UINT8 action_type, 11031a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, 11041a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status) 11051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{ 11061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t btif_cb; 11071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 11081a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.status = status; 11091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.action = action_type; 11101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.client_if = ref_value; 11111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.avbl_space = avbl_space; 11121a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_PARAM_EVT, 11131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL); 11141a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji} 11151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 11161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_status_cb(UINT8 action, tBTA_STATUS status, 11171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji tBTA_DM_BLE_REF_VALUE ref_value) 11181a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{ 11191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t btif_cb; 11201a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 11211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.status = status; 11221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.action = action; 11231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.client_if = ref_value; 11241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_STATUS_EVT, 11251a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL); 1126b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach} 1127ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1128484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidgestatic void btgattc_free_event_data(UINT16 event, char *event_data) 1129484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge{ 1130484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge switch (event) 1131484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge { 1132484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge case BTIF_GATTC_ADV_INSTANCE_SET_DATA: 1133484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge case BTIF_GATTC_SET_ADV_DATA: 1134484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge { 1135484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge const btif_adv_data_t *adv_data = (btif_adv_data_t*) event_data; 1136484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge btif_gattc_adv_data_cleanup(adv_data); 1137484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge break; 1138484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge } 1139484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge 1140484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge default: 1141484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge break; 1142484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge } 1143484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge} 1144484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge 1145ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btgattc_handle_event(uint16_t event, char* p_param) 1146ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1147ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATT_STATUS status; 1148ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBT_UUID uuid; 1149ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATT_SRVC_ID srvc_id; 1150ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGATT_CHAR_PROP out_char_prop; 1151ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC_CHAR_ID in_char_id; 1152ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC_CHAR_ID out_char_id; 1153ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC_CHAR_DESCR_ID in_char_descr_id; 1154ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC_CHAR_DESCR_ID out_char_descr_id; 1155ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC_INCL_SVC_ID in_incl_svc_id; 1156ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC_INCL_SVC_ID out_incl_svc_id; 1157ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATT_UNFMT descr_val; 1158ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 115952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_gattc_cb_t* p_cb = (btif_gattc_cb_t*) p_param; 116052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach if (!p_cb) return; 1161ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1162db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_VERBOSE(LOG_TAG, "%s: Event %d", __FUNCTION__, event); 1163ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1164ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta switch (event) 1165ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1166ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_REGISTER_APP: 1167ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_uuid(&uuid, &p_cb->uuid); 1168b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji btif_gattc_incr_app_count(); 11696975b4d711142b885af479721cada448952c6b41Andre Eisenbach BTA_GATTC_AppRegister(&uuid, bta_gattc_cback); 1170ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1171ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1172ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_UNREGISTER_APP: 11733770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_clear_clientif(p_cb->client_if, TRUE); 1174b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji btif_gattc_decr_app_count(); 1175ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_AppDeregister(p_cb->client_if); 1176ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1177ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1178ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_SCAN_START: 1179ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_init_dev_cb(); 11806975b4d711142b885af479721cada448952c6b41Andre Eisenbach BTA_DmBleObserve(TRUE, 0, bta_scan_results_cb); 1181ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1182ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1183ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_SCAN_STOP: 1184ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_DmBleObserve(FALSE, 0, 0); 1185ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1186ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1187ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_OPEN: 1188306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach { 1189306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach // Ensure device is in inquiry database 1190306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach int addr_type = 0; 1191306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach int device_type = 0; 11927fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta tBTA_GATT_TRANSPORT transport = BTA_GATT_TRANSPORT_LE; 1193306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach 119486f97eda524568f2d264186844450db5e56dac36Matthew Xie if (btif_get_address_type(p_cb->bd_addr.address, &addr_type) && 119586f97eda524568f2d264186844450db5e56dac36Matthew Xie btif_get_device_type(p_cb->bd_addr.address, &device_type) && 119686f97eda524568f2d264186844450db5e56dac36Matthew Xie device_type != BT_DEVICE_TYPE_BREDR) 119786f97eda524568f2d264186844450db5e56dac36Matthew Xie { 1198306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach BTA_DmAddBleDevice(p_cb->bd_addr.address, addr_type, device_type); 119986f97eda524568f2d264186844450db5e56dac36Matthew Xie } 1200306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach 1201306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach // Mark background connections 1202ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!p_cb->is_direct) 1203a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach { 1204a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach // Check if RPA offloading is supported, otherwise, do not start 1205a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach // background connection, since it will not connect after address 1206a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach // changes 12072cfcf51ea3447f2b5cf95dbe7515d230de1e7df7Tobias Melin if ((p_cb->addr_type == BLE_ADDR_RANDOM) 12082cfcf51ea3447f2b5cf95dbe7515d230de1e7df7Tobias Melin && BTM_BLE_IS_RESOLVE_BDA(p_cb->bd_addr.address)) 1209a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach { 1210a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach tBTM_BLE_VSC_CB vnd_capabilities; 1211a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach BTM_BleGetVendorCapabilities(&vnd_capabilities); 1212a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach if (!vnd_capabilities.rpa_offloading) 1213a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach { 1214a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach HAL_CBACK(bt_gatt_callbacks, client->open_cb, 0, BT_STATUS_UNSUPPORTED, 1215a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach p_cb->client_if, &p_cb->bd_addr); 1216a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach return; 1217a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach } 1218a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach } 1219ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_DmBleSetBgConnType(BTM_BLE_CONN_AUTO, NULL); 1220a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach } 1221ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 12227fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta switch(device_type) 12237fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta { 12247fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta case BT_DEVICE_TYPE_BREDR: 12257fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta transport = BTA_GATT_TRANSPORT_BR_EDR; 12267fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta break; 12277fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta 12287fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta case BT_DEVICE_TYPE_BLE: 12297fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta transport = BTA_GATT_TRANSPORT_LE; 12307fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta break; 12317fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta 12327fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta case BT_DEVICE_TYPE_DUMO: 1233033edab9780481ca743d1f14cc893dc533c3c3f2Satya Calloji if (p_cb->transport == GATT_TRANSPORT_LE) 12347fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta transport = BTA_GATT_TRANSPORT_LE; 12357fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta else 12367fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta transport = BTA_GATT_TRANSPORT_BR_EDR; 12377fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta break; 12387fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta } 12397fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta 1240306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach // Connect! 1241e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG ("BTA_GATTC_Open Transport = %d, dev type = %d", 12427fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta transport, device_type); 12437fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta BTA_GATTC_Open(p_cb->client_if, p_cb->bd_addr.address, p_cb->is_direct, transport); 1244ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1245306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach } 1246ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1247ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_CLOSE: 12486975b4d711142b885af479721cada448952c6b41Andre Eisenbach // Disconnect established connections 1249ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->conn_id != 0) 1250ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_Close(p_cb->conn_id); 1251ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 1252ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_CancelOpen(p_cb->client_if, p_cb->bd_addr.address, TRUE); 1253ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1254ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta // Cancel pending background connections (remove from whitelist) 1255ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_CancelOpen(p_cb->client_if, p_cb->bd_addr.address, FALSE); 1256ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1257ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1258ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_SEARCH_SERVICE: 1259ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1260ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_cb->search_all) 1261ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1262ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_ServiceSearchRequest(p_cb->conn_id, NULL); 1263ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } else { 1264ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_uuid(&uuid, &p_cb->uuid); 1265ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_ServiceSearchRequest(p_cb->conn_id, &uuid); 1266ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1267ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1268ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1269ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1270ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_GET_FIRST_CHAR: 1271ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 12725f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t char_id; 1273ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&srvc_id, &p_cb->srvc_id); 1274ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta status = BTA_GATTC_GetFirstChar(p_cb->conn_id, &srvc_id, NULL, 1275ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &out_char_id, &out_char_prop); 1276ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1277ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (status == 0) 12785f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach bta_to_btif_gatt_id(&char_id, &out_char_id.char_id); 1279ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1280ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->get_characteristic_cb, 1281ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->conn_id, status, &p_cb->srvc_id, 1282ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &char_id, out_char_prop); 1283ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1284ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1285ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1286ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_GET_NEXT_CHAR: 1287ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 12885f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t char_id; 1289ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id); 12905f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id); 1291ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1292ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta status = BTA_GATTC_GetNextChar(p_cb->conn_id, &in_char_id, NULL, 1293ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &out_char_id, &out_char_prop); 1294ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1295ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (status == 0) 12965f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach bta_to_btif_gatt_id(&char_id, &out_char_id.char_id); 1297ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1298ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->get_characteristic_cb, 1299ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->conn_id, status, &p_cb->srvc_id, 1300ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &char_id, out_char_prop); 1301ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1302ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1303ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1304ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_GET_FIRST_CHAR_DESCR: 1305ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 13065f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t descr_id; 1307ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id); 13085f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id); 1309ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1310ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta status = BTA_GATTC_GetFirstCharDescr(p_cb->conn_id, &in_char_id, NULL, 1311ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &out_char_descr_id); 1312ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1313ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (status == 0) 13145f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach bta_to_btif_gatt_id(&descr_id, &out_char_descr_id.descr_id); 1315ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1316ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->get_descriptor_cb, 1317ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->conn_id, status, &p_cb->srvc_id, 1318ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &p_cb->char_id, &descr_id); 1319ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1320ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1321ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1322ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_GET_NEXT_CHAR_DESCR: 1323ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 13245f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t descr_id; 1325ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&in_char_descr_id.char_id.srvc_id, &p_cb->srvc_id); 13265f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_descr_id.char_id.char_id, &p_cb->char_id); 13275f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_descr_id.descr_id, &p_cb->descr_id); 1328ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1329ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta status = BTA_GATTC_GetNextCharDescr(p_cb->conn_id, &in_char_descr_id 1330ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , NULL, &out_char_descr_id); 1331ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1332ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (status == 0) 13335f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach bta_to_btif_gatt_id(&descr_id, &out_char_descr_id.descr_id); 1334ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1335ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->get_descriptor_cb, 1336ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->conn_id, status, &p_cb->srvc_id, 1337ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &p_cb->char_id, &descr_id); 1338ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1339ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1340ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1341ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_GET_FIRST_INCL_SERVICE: 1342ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1343ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_srvc_id_t incl_srvc_id; 1344ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&srvc_id, &p_cb->srvc_id); 1345ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1346ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta status = BTA_GATTC_GetFirstIncludedService(p_cb->conn_id, 1347ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &srvc_id, NULL, &out_incl_svc_id); 1348ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1349ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_to_btif_srvc_id(&incl_srvc_id, &out_incl_svc_id.incl_svc_id); 1350ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1351ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->get_included_service_cb, 1352ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->conn_id, status, &p_cb->srvc_id, 1353ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &incl_srvc_id); 1354ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1355ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1356ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1357ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_GET_NEXT_INCL_SERVICE: 1358ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1359ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_srvc_id_t incl_srvc_id; 1360ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&in_incl_svc_id.srvc_id, &p_cb->srvc_id); 1361ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&in_incl_svc_id.incl_svc_id, &p_cb->incl_srvc_id); 1362ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1363ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta status = BTA_GATTC_GetNextIncludedService(p_cb->conn_id, 1364ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &in_incl_svc_id, NULL, &out_incl_svc_id); 1365ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1366ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_to_btif_srvc_id(&incl_srvc_id, &out_incl_svc_id.incl_svc_id); 1367ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1368ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->get_included_service_cb, 1369ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->conn_id, status, &p_cb->srvc_id, 1370ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &incl_srvc_id); 1371ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1372ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1373ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1374ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_READ_CHAR: 1375ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id); 13765f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id); 1377ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1378ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_ReadCharacteristic(p_cb->conn_id, &in_char_id, p_cb->auth_req); 1379ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1380ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1381ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_READ_CHAR_DESCR: 1382ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&in_char_descr_id.char_id.srvc_id, &p_cb->srvc_id); 13835f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_descr_id.char_id.char_id, &p_cb->char_id); 13845f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_descr_id.descr_id, &p_cb->descr_id); 1385ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1386ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_ReadCharDescr(p_cb->conn_id, &in_char_descr_id, p_cb->auth_req); 1387ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1388ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1389ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_WRITE_CHAR: 1390ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id); 13915f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id); 1392ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1393ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_WriteCharValue(p_cb->conn_id, &in_char_id, 1394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->write_type, 1395ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->len, 1396ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->value, 1397ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->auth_req); 1398ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1399ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1400ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_WRITE_CHAR_DESCR: 1401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&in_char_descr_id.char_id.srvc_id, &p_cb->srvc_id); 14025f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_descr_id.char_id.char_id, &p_cb->char_id); 14035f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_descr_id.descr_id, &p_cb->descr_id); 1404ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta descr_val.len = p_cb->len; 1406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta descr_val.p_value = p_cb->value; 1407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_WriteCharDescr(p_cb->conn_id, &in_char_descr_id, 1409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->write_type, &descr_val, 1410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->auth_req); 1411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_EXECUTE_WRITE: 1414ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_ExecuteWrite(p_cb->conn_id, p_cb->action); 1415ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1416ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_REG_FOR_NOTIFICATION: 1418ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id); 14195f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id); 1420ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1421ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta status = BTA_GATTC_RegisterForNotifications(p_cb->client_if, 1422ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->bd_addr.address, &in_char_id); 1423ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1424ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->register_for_notification_cb, 1425ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->conn_id, 1, status, &p_cb->srvc_id, 1426ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &p_cb->char_id); 1427ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1428ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1429ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_DEREG_FOR_NOTIFICATION: 1430ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id); 14315f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id); 1432ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1433ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta status = BTA_GATTC_DeregisterForNotifications(p_cb->client_if, 1434ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->bd_addr.address, &in_char_id); 1435ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1436ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->register_for_notification_cb, 1437ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->conn_id, 0, status, &p_cb->srvc_id, 1438ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &p_cb->char_id); 1439ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1440ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1441ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_REFRESH: 1442ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_Refresh(p_cb->bd_addr.address); 1443ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1444ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1445ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_READ_RSSI: 1446ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta rssi_request_client_if = p_cb->client_if; 1447ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_ReadRSSI (p_cb->bd_addr.address, (tBTM_CMPL_CB *)btm_read_rssi_cb); 1448ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1449ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 14501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji case BTIF_GATTC_SCAN_FILTER_PARAM_SETUP: 14511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji { 145252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param; 145316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (1 == p_adv_filt_cb->adv_filt_param.dely_mode) 14541acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji BTA_DmBleTrackAdvertiser(p_adv_filt_cb->client_if, bta_track_adv_event_cb); 14551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTA_DmBleScanFilterSetup(p_adv_filt_cb->action, p_adv_filt_cb->filt_index, 14561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji &p_adv_filt_cb->adv_filt_param, NULL, bta_scan_filt_param_setup_cb, 14571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->client_if); 1458b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 14591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji } 1460b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1461b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach case BTIF_GATTC_SCAN_FILTER_CONFIG: 1462b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach { 146352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param; 1464b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach tBTA_DM_BLE_PF_COND_PARAM cond; 1465b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach memset(&cond, 0, sizeof(cond)); 1466b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 14671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji switch (p_adv_filt_cb->filt_type) 1468b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach { 1469b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach case BTA_DM_BLE_PF_ADDR_FILTER: // 0 14701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji bdcpy(cond.target_addr.bda, p_adv_filt_cb->bd_addr.address); 14711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.target_addr.type = p_adv_filt_cb->addr_type; 14721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action, 14731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index, 14741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji &cond, bta_scan_filt_cfg_cb, 14751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->client_if); 1476b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1477b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1478b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach case BTA_DM_BLE_PF_SRVC_DATA: // 1 14791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action, 14801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index, 14811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji NULL, bta_scan_filt_cfg_cb, p_adv_filt_cb->client_if); 1482b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1483b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1484b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach case BTA_DM_BLE_PF_SRVC_UUID: // 2 1485b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach { 1486b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach tBTA_DM_BLE_PF_COND_MASK uuid_mask; 1487b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1488b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach cond.srvc_uuid.p_target_addr = NULL; 1489b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach cond.srvc_uuid.cond_logic = BTA_DM_BLE_PF_LOGIC_AND; 14901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_to_bta_uuid(&cond.srvc_uuid.uuid, &p_adv_filt_cb->uuid); 1491b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1492b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach cond.srvc_uuid.p_uuid_mask = NULL; 14931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji if (p_adv_filt_cb->has_mask) 1494b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach { 14951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_to_bta_uuid_mask(&uuid_mask, &p_adv_filt_cb->uuid_mask); 1496b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach cond.srvc_uuid.p_uuid_mask = &uuid_mask; 1497b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach } 14981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action, 14991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index, 15001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji &cond, bta_scan_filt_cfg_cb, 15011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->client_if); 1502b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1503b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach } 1504b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1505b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach case BTA_DM_BLE_PF_SRVC_SOL_UUID: // 3 1506b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach { 1507b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach cond.solicitate_uuid.p_target_addr = NULL; 1508b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach cond.solicitate_uuid.cond_logic = BTA_DM_BLE_PF_LOGIC_AND; 15091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_to_bta_uuid(&cond.solicitate_uuid.uuid, &p_adv_filt_cb->uuid); 15101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action, 15111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index, 15121a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji &cond, bta_scan_filt_cfg_cb, 15131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->client_if); 1514b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1515b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach } 1516b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1517b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach case BTA_DM_BLE_PF_LOCAL_NAME: // 4 1518b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach { 15191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.local_name.data_len = p_adv_filt_cb->value_len; 15201a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.local_name.p_data = p_adv_filt_cb->value; 15211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action, 15221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index, 15231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji &cond, bta_scan_filt_cfg_cb, 15241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->client_if); 1525b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1526b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach } 1527b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1528b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach case BTA_DM_BLE_PF_MANU_DATA: // 5 1529b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach { 15301a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.manu_data.company_id = p_adv_filt_cb->conn_id; 15311a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.manu_data.company_id_mask = p_adv_filt_cb->company_id_mask; 15321a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.manu_data.data_len = p_adv_filt_cb->value_len; 15331a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.manu_data.p_pattern = p_adv_filt_cb->value; 15341a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.manu_data.p_pattern_mask = p_adv_filt_cb->value_mask; 15351a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action, 15361a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index, 15371a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji &cond, bta_scan_filt_cfg_cb, 15381a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->client_if); 1539b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1540b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach } 1541b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 15421a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji case BTA_DM_BLE_PF_SRVC_DATA_PATTERN: //6 15431a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji { 15441a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.srvc_data.data_len = p_adv_filt_cb->value_len; 15451a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.srvc_data.p_pattern = p_adv_filt_cb->value; 15461a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.srvc_data.p_pattern_mask = p_adv_filt_cb->value_mask; 15471a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action, 15481a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index, 15491a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji &cond, bta_scan_filt_cfg_cb, 15501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->client_if); 15511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji break; 15521a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji } 15531a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 1554b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach default: 1555db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_ERROR(LOG_TAG, "%s: Unknown filter type (%d)!", __FUNCTION__, p_cb->action); 1556b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1557b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach } 1558b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1559b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach } 1560b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1561b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach case BTIF_GATTC_SCAN_FILTER_CLEAR: 1562b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach { 156352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param; 1564b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach BTA_DmBleCfgFilterCondition(BTA_DM_BLE_SCAN_COND_CLEAR, BTA_DM_BLE_PF_TYPE_ALL, 15656e2d9db5148176d88d7f48c3b2ad5b27c57ca14dSatya Calloji p_adv_filt_cb->filt_index, NULL, bta_scan_filt_cfg_cb, 15666e2d9db5148176d88d7f48c3b2ad5b27c57ca14dSatya Calloji p_adv_filt_cb->client_if); 15671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji break; 15681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji } 15691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 15701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji case BTIF_GATTC_SCAN_FILTER_ENABLE: 15711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji { 157252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param; 15731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTA_DmEnableScanFilter(p_adv_filt_cb->action, bta_scan_filt_status_cb, 15741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->client_if); 1575b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1576b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach } 1577b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 15785c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach case BTIF_GATTC_LISTEN: 1579602162a13c6ed8abae53aee6deeda48b79f30911Zhihai Xu#if (defined(BLE_PERIPHERAL_MODE_SUPPORT) && (BLE_PERIPHERAL_MODE_SUPPORT == TRUE)) 15805c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach BTA_GATTC_Listen(p_cb->client_if, p_cb->start, NULL); 1581eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach#else 1582a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach BTA_GATTC_Broadcast(p_cb->client_if, p_cb->start); 1583eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach#endif 15845c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach break; 15855c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach 15865c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach case BTIF_GATTC_SET_ADV_DATA: 15875c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach { 1588484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge const btif_adv_data_t *p_adv_data = (btif_adv_data_t*) p_param; 1589484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge const int cbindex = CLNT_IF_IDX; 1590484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge if (cbindex >= 0 && btif_gattc_copy_datacb(cbindex, p_adv_data, false)) 1591a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 1592a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 1593a6ce7751d84218c193eb90d390aef23217b1737eWei Wang if (!p_adv_data->set_scan_rsp) 1594a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 1595a6ce7751d84218c193eb90d390aef23217b1737eWei Wang BTA_DmBleSetAdvConfig(p_multi_adv_data_cb->inst_cb[cbindex].mask, 1596a6ce7751d84218c193eb90d390aef23217b1737eWei Wang &p_multi_adv_data_cb->inst_cb[cbindex].data, bta_gattc_set_adv_data_cback); 1597a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 1598a6ce7751d84218c193eb90d390aef23217b1737eWei Wang else 1599a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 1600a6ce7751d84218c193eb90d390aef23217b1737eWei Wang BTA_DmBleSetScanRsp(p_multi_adv_data_cb->inst_cb[cbindex].mask, 1601a6ce7751d84218c193eb90d390aef23217b1737eWei Wang &p_multi_adv_data_cb->inst_cb[cbindex].data, bta_gattc_set_adv_data_cback); 1602a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 1603a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 1604484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge else 1605484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge { 1606484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge BTIF_TRACE_ERROR("%s:%s: failed to get instance data cbindex: %d", 1607484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge __func__, "BTIF_GATTC_SET_ADV_DATA", cbindex); 1608484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge } 1609484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge break; 1610a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 1611a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 1612a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTIF_GATTC_ADV_INSTANCE_ENABLE: 1613a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 161452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param; 161516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 161616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham int cbindex = -1, arrindex = -1; 161716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 161816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham arrindex = btif_multi_adv_add_instid_map(p_inst_cb->client_if,INVALID_ADV_INST, true); 161916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (arrindex >= 0) 162016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham cbindex = btif_gattc_obtain_idx_for_datacb(p_inst_cb->client_if, CLNT_IF_IDX); 162116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 162216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (cbindex >= 0 && arrindex >= 0) 1623a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 1624a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 1625a6ce7751d84218c193eb90d390aef23217b1737eWei Wang memcpy(&p_multi_adv_data_cb->inst_cb[cbindex].param, 1626a6ce7751d84218c193eb90d390aef23217b1737eWei Wang &p_inst_cb->param, sizeof(tBTA_BLE_ADV_PARAMS)); 1627cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach p_multi_adv_data_cb->inst_cb[cbindex].timeout_s = p_inst_cb->timeout_s; 162816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham BTIF_TRACE_DEBUG("%s, client_if value: %d", __FUNCTION__, 162916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[arrindex + arrindex]); 1630a6ce7751d84218c193eb90d390aef23217b1737eWei Wang BTA_BleEnableAdvInstance(&(p_multi_adv_data_cb->inst_cb[cbindex].param), 1631a6ce7751d84218c193eb90d390aef23217b1737eWei Wang bta_gattc_multi_adv_cback, 163216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham &(p_multi_adv_data_cb->clntif_map[arrindex + arrindex])); 1633a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 16345c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach else 163516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham { 163616fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham /* let the error propagate up from BTA layer */ 1637e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("%s invalid index in BTIF_GATTC_ENABLE_ADV",__FUNCTION__); 163816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham BTA_BleEnableAdvInstance(&p_inst_cb->param, bta_gattc_multi_adv_cback, NULL); 163916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham } 1640a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 1641a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 1642eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach 1643a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTIF_GATTC_ADV_INSTANCE_UPDATE: 1644a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 164552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param; 1646a6ce7751d84218c193eb90d390aef23217b1737eWei Wang int inst_id = btif_multi_adv_instid_for_clientif(p_inst_cb->client_if); 1647a6ce7751d84218c193eb90d390aef23217b1737eWei Wang int cbindex = btif_gattc_obtain_idx_for_datacb(p_inst_cb->client_if, CLNT_IF_IDX); 164816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (inst_id >= 0 && cbindex >= 0 && NULL != p_inst_cb) 1649a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 1650a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 1651a6ce7751d84218c193eb90d390aef23217b1737eWei Wang memcpy(&p_multi_adv_data_cb->inst_cb[cbindex].param, &p_inst_cb->param, 1652a6ce7751d84218c193eb90d390aef23217b1737eWei Wang sizeof(tBTA_BLE_ADV_PARAMS)); 1653a6ce7751d84218c193eb90d390aef23217b1737eWei Wang BTA_BleUpdateAdvInstParam((UINT8)inst_id, 1654a6ce7751d84218c193eb90d390aef23217b1737eWei Wang &(p_multi_adv_data_cb->inst_cb[cbindex].param)); 1655a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 1656a6ce7751d84218c193eb90d390aef23217b1737eWei Wang else 1657e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("%s invalid index in BTIF_GATTC_UPDATE_ADV", __FUNCTION__); 1658a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 1659a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 1660a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 1661a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTIF_GATTC_ADV_INSTANCE_SET_DATA: 1662a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 166352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_adv_data_t *p_adv_data = (btif_adv_data_t*) p_param; 1664a6ce7751d84218c193eb90d390aef23217b1737eWei Wang int cbindex = btif_gattc_obtain_idx_for_datacb(p_adv_data->client_if, CLNT_IF_IDX); 1665a6ce7751d84218c193eb90d390aef23217b1737eWei Wang int inst_id = btif_multi_adv_instid_for_clientif(p_adv_data->client_if); 1666484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge if (inst_id >= 0 && cbindex >= 0 && btif_gattc_copy_datacb(cbindex, p_adv_data, true)) 1667eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach { 1668484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge btgatt_multi_adv_common_data *p_multi_adv_data_cb = 1669484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge btif_obtain_multi_adv_data_cb(); 1670484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge BTA_BleCfgAdvInstData( 1671484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge (UINT8)inst_id, 1672484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge p_multi_adv_data_cb->inst_cb[cbindex].is_scan_rsp, 1673484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge p_multi_adv_data_cb->inst_cb[cbindex].mask, 1674484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge &p_multi_adv_data_cb->inst_cb[cbindex].data); 1675484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge } 1676484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge else 1677484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge { 1678484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge BTIF_TRACE_ERROR( 1679484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge "%s:%s: failed to get invalid instance data: inst_id:%d " 1680484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge "cbindex:%d", 1681484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge __func__, "BTIF_GATTC_ADV_INSTANCE_SET_DATA", inst_id, cbindex); 1682eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach } 1683a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 1684a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 1685a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 1686a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTIF_GATTC_ADV_INSTANCE_DISABLE: 1687a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 168852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param; 1689a6ce7751d84218c193eb90d390aef23217b1737eWei Wang int inst_id = btif_multi_adv_instid_for_clientif(p_inst_cb->client_if); 169016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (inst_id >=0) 1691a6ce7751d84218c193eb90d390aef23217b1737eWei Wang BTA_BleDisableAdvInstance((UINT8)inst_id); 1692a6ce7751d84218c193eb90d390aef23217b1737eWei Wang else 1693e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("%s invalid instance ID in BTIF_GATTC_DISABLE_ADV",__FUNCTION__); 16945c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach break; 16955c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach } 1696a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 16979426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach case BTIF_GATTC_CONFIGURE_MTU: 16989426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach BTA_GATTC_ConfigureMTU(p_cb->conn_id, p_cb->len); 16999426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach break; 17005c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach 170152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach case BTIF_GATTC_CONN_PARAM_UPDT: 170252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach { 170352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_conn_param_cb_t *p_conn_param_cb = (btif_conn_param_cb_t*) p_param; 170452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach if (BTA_DmGetConnectionState(p_conn_param_cb->bd_addr.address)) 170552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach { 170652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach BTA_DmBleUpdateConnectionParams(p_conn_param_cb->bd_addr.address, 170752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach p_conn_param_cb->min_interval, p_conn_param_cb->max_interval, 170852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach p_conn_param_cb->latency, p_conn_param_cb->timeout); 170952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach } else { 171052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach BTA_DmSetBlePrefConnParams(p_conn_param_cb->bd_addr.address, 171152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach p_conn_param_cb->min_interval, p_conn_param_cb->max_interval, 171252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach p_conn_param_cb->latency, p_conn_param_cb->timeout); 171352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach } 171452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach break; 171552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach } 171652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach 17177d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham case BTIF_GATTC_SET_SCAN_PARAMS: 1718935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji { 1719935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji BTA_DmSetBleScanParams(p_cb->client_if, p_cb->scan_interval, p_cb->scan_window, 1720935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji BTM_BLE_SCAN_MODE_ACTI, bta_scan_param_setup_cb); 17217d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham break; 1722935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji } 17237d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham 1724c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTIF_GATTC_CONFIG_STORAGE_PARAMS: 1725c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 172652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param; 1727c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTA_DmBleSetStorageParams(p_scan_track_cb->batch_scan_full_max, 1728c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji p_scan_track_cb->batch_scan_trunc_max, p_scan_track_cb->batch_scan_notify_threshold, 1729c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bta_batch_scan_setup_cb, bta_batch_scan_threshold_cb, bta_batch_scan_reports_cb, 173052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach (tBTA_DM_BLE_REF_VALUE) p_scan_track_cb->client_if); 1731c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 1732c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 1733c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 1734c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTIF_GATTC_ENABLE_BATCH_SCAN: 1735c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 173652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param; 1737c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTA_DmBleEnableBatchScan(p_scan_track_cb->scan_mode, p_scan_track_cb->scan_interval, 1738c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji p_scan_track_cb->scan_window, p_scan_track_cb->discard_rule, 1739c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji p_scan_track_cb->addr_type, p_scan_track_cb->client_if); 1740c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 1741c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 1742c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 1743c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTIF_GATTC_DISABLE_BATCH_SCAN: 1744c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 174552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param; 1746c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTA_DmBleDisableBatchScan(p_scan_track_cb->client_if); 1747c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 1748c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 1749c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 1750c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTIF_GATTC_READ_BATCH_SCAN_REPORTS: 1751c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 175252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param; 1753c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTA_DmBleReadScanReports(p_scan_track_cb->scan_mode, p_scan_track_cb->client_if); 1754c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 1755c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 1756c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 1757ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta default: 1758db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_ERROR(LOG_TAG, "%s: Unknown event (%d)!", __FUNCTION__, event); 1759ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1760ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1761484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge 1762484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge btgattc_free_event_data(event, p_param); 1763ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1764ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1765ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 1766ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Client API Functions 1767ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/ 1768ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1769ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_register_app(bt_uuid_t *uuid) 1770ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1771ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1772ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1773ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.uuid, uuid, sizeof(bt_uuid_t)); 1774ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REGISTER_APP, 1775ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1776ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1777ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1778ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_unregister_app(int client_if ) 1779ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1780ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1781ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1782ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.client_if = (uint8_t) client_if; 1783ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_UNREGISTER_APP, 1784ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1785ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1786ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 17877d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadhamstatic bt_status_t btif_gattc_scan( bool start ) 1788ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1789ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1790ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1791ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, start ? BTIF_GATTC_SCAN_START : BTIF_GATTC_SCAN_STOP, 1792ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1793ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1794ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 17957fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battastatic bt_status_t btif_gattc_open(int client_if, const bt_bdaddr_t *bd_addr, 17967fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta bool is_direct,int transport) 1797ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1798ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1799ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1800ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.client_if = (uint8_t) client_if; 1801ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.is_direct = is_direct ? 1 : 0; 18027fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta btif_cb.transport = (btgatt_transport_t)transport; 1803ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(btif_cb.bd_addr.address, bd_addr->address); 1804ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_OPEN, 1805ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1806ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1807ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1808ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_close( int client_if, const bt_bdaddr_t *bd_addr, int conn_id) 1809ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1810ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1811ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1812ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.client_if = (uint8_t) client_if; 1813ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 1814ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(btif_cb.bd_addr.address, bd_addr->address); 1815ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CLOSE, 1816ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1817ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1818ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 18195c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachstatic bt_status_t btif_gattc_listen(int client_if, bool start) 18205c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{ 18215c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach CHECK_BTGATT_INIT(); 18225c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach btif_gattc_cb_t btif_cb; 18235c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach btif_cb.client_if = (uint8_t) client_if; 18245c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach btif_cb.start = start ? 1 : 0; 18255c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_LISTEN, 18265c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 18275c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach} 18285c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach 1829484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidgestatic void btif_gattc_deep_copy(UINT16 event, char *p_dest, char *p_src) 1830484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge{ 1831484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge switch (event) 1832484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge { 1833484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge case BTIF_GATTC_ADV_INSTANCE_SET_DATA: 1834484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge case BTIF_GATTC_SET_ADV_DATA: 1835484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge { 1836484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge const btif_adv_data_t *src = (btif_adv_data_t*) p_src; 1837484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge btif_adv_data_t *dst = (btif_adv_data_t*) p_dest; 1838484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge memcpy(dst, src, sizeof(*src)); 1839484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge 1840484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge if (src->p_manufacturer_data) 1841484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge { 1842484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge dst->p_manufacturer_data = GKI_getbuf(src->manufacturer_len); 1843484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge memcpy(dst->p_manufacturer_data, src->p_manufacturer_data, 1844484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge src->manufacturer_len); 1845484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge } 1846484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge 1847484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge if (src->p_service_data) 1848484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge { 1849484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge dst->p_service_data = GKI_getbuf(src->service_data_len); 1850484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge memcpy(dst->p_service_data, src->p_service_data, src->service_data_len); 1851484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge } 1852484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge 1853484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge if (src->p_service_uuid) 1854484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge { 1855484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge dst->p_service_uuid = GKI_getbuf(src->service_uuid_len); 1856484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge memcpy(dst->p_service_uuid, src->p_service_uuid, src->service_uuid_len); 1857484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge } 1858484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge break; 1859484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge } 1860484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge 1861484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge default: 1862484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge ASSERTC(false, "Unhandled deep copy", event); 1863484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge break; 1864484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge } 1865484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge} 1866484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge 18675c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachstatic bt_status_t btif_gattc_set_adv_data(int client_if, bool set_scan_rsp, bool include_name, 18685c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach bool include_txpower, int min_interval, int max_interval, int appearance, 1869eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach uint16_t manufacturer_len, char* manufacturer_data, 1870eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach uint16_t service_data_len, char* service_data, 1871eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach uint16_t service_uuid_len, char* service_uuid) 18725c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{ 18735c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach CHECK_BTGATT_INIT(); 1874a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_adv_data_t adv_data; 1875eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach 1876a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_gattc_adv_data_packager(client_if, set_scan_rsp, include_name, 1877a6ce7751d84218c193eb90d390aef23217b1737eWei Wang include_txpower, min_interval, max_interval, appearance, manufacturer_len, 1878a6ce7751d84218c193eb90d390aef23217b1737eWei Wang manufacturer_data, service_data_len, service_data, service_uuid_len, service_uuid, 1879a6ce7751d84218c193eb90d390aef23217b1737eWei Wang &adv_data); 1880eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach 1881484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge bt_status_t status = btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SET_ADV_DATA, 1882484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge (char*) &adv_data, sizeof(adv_data), btif_gattc_deep_copy); 1883484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge btif_gattc_adv_data_cleanup(&adv_data); 1884a6ce7751d84218c193eb90d390aef23217b1737eWei Wang return status; 18855c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach} 18865c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach 1887ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_refresh( int client_if, const bt_bdaddr_t *bd_addr ) 1888ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1889ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1890ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1891ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.client_if = (uint8_t) client_if; 1892ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(btif_cb.bd_addr.address, bd_addr->address); 1893ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REFRESH, 1894ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1895ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1896ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1897ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_search_service(int conn_id, bt_uuid_t *filter_uuid ) 1898ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1899ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1900ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1901ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 1902ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.search_all = filter_uuid ? 0 : 1; 1903ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (filter_uuid) 1904ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.uuid, filter_uuid, sizeof(bt_uuid_t)); 1905ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SEARCH_SERVICE, 1906ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1907ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1908ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1909ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_get_characteristic( int conn_id 19105f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach , btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *start_char_id) 1911ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1912ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1913ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1914ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 1915ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 1916ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (start_char_id) 1917ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 19185f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.char_id, start_char_id, sizeof(btgatt_gatt_id_t)); 1919ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_NEXT_CHAR, 1920ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1921ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1922ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_FIRST_CHAR, 1923ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1924ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1925ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1926ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_get_descriptor( int conn_id 19275f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach , btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id 19285f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach , btgatt_gatt_id_t *start_descr_id) 1929ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1930ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1931ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1932ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 1933ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 19345f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t)); 1935ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (start_descr_id) 1936ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 19375f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.descr_id, start_descr_id, sizeof(btgatt_gatt_id_t)); 1938ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_NEXT_CHAR_DESCR, 1939ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1940ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1941ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1942ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_FIRST_CHAR_DESCR, 1943ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1944ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1945ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1946ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_get_included_service(int conn_id, btgatt_srvc_id_t *srvc_id, 1947ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_srvc_id_t *start_incl_srvc_id) 1948ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1949ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1950ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1951ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 1952ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 1953ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (start_incl_srvc_id) 1954ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1955ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.incl_srvc_id, start_incl_srvc_id, sizeof(btgatt_srvc_id_t)); 1956ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_NEXT_INCL_SERVICE, 1957ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1958ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1959ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_FIRST_INCL_SERVICE, 1960ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1961ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1962ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1963ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_read_char(int conn_id, btgatt_srvc_id_t* srvc_id, 19645f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t* char_id, int auth_req ) 1965ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1966ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1967ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1968ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 1969ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.auth_req = (uint8_t) auth_req; 1970ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 19715f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t)); 1972ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_CHAR, 1973ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1974ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1975ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1976ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_read_char_descr(int conn_id, btgatt_srvc_id_t* srvc_id, 19775f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t* char_id, 19785f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t* descr_id, 1979ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int auth_req ) 1980ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1981ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1982ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1983ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 1984ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.auth_req = (uint8_t) auth_req; 1985ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 19865f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t)); 19875f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.descr_id, descr_id, sizeof(btgatt_gatt_id_t)); 1988ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_CHAR_DESCR, 1989ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1990ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1991ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1992ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_write_char(int conn_id, btgatt_srvc_id_t* srvc_id, 19935f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t* char_id, int write_type, 1994ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int len, int auth_req, char* p_value) 1995ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1996ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1997ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1998ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 1999ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.auth_req = (uint8_t) auth_req; 2000ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.write_type = (uint8_t) write_type; 2001ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.len = len > BTGATT_MAX_ATTR_LEN ? BTGATT_MAX_ATTR_LEN : len; 2002ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 20035f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t)); 2004ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(btif_cb.value, p_value, btif_cb.len); 2005ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_WRITE_CHAR, 2006ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 2007ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2008ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2009ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_write_char_descr(int conn_id, btgatt_srvc_id_t* srvc_id, 20105f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t* char_id, 20115f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t* descr_id, 2012ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int write_type, int len, int auth_req, 2013ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta char* p_value) 2014ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2015ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 2016ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 2017ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 2018ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.auth_req = (uint8_t) auth_req; 2019ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.write_type = (uint8_t) write_type; 2020ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.len = len > BTGATT_MAX_ATTR_LEN ? BTGATT_MAX_ATTR_LEN : len; 2021ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 20225f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t)); 20235f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.descr_id, descr_id, sizeof(btgatt_gatt_id_t)); 2024ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(btif_cb.value, p_value, btif_cb.len); 2025ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_WRITE_CHAR_DESCR, 2026ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 2027ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2028ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2029ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_execute_write(int conn_id, int execute) 2030ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2031ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 2032ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 2033ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 2034ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.action = (uint8_t) execute; 2035ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_EXECUTE_WRITE, 2036ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 2037ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2038ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2039ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_reg_for_notification(int client_if, const bt_bdaddr_t *bd_addr, 2040ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_srvc_id_t* srvc_id, 20415f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t* char_id) 2042ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2043ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 2044ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 2045ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.client_if = (uint8_t) client_if; 2046ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(btif_cb.bd_addr.address, bd_addr->address); 2047ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 20485f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t)); 2049ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REG_FOR_NOTIFICATION, 2050ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 2051ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2052ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2053ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_dereg_for_notification(int client_if, const bt_bdaddr_t *bd_addr, 2054ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_srvc_id_t* srvc_id, 20555f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t* char_id) 2056ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2057ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 2058ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 2059ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.client_if = (uint8_t) client_if; 2060ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(btif_cb.bd_addr.address, bd_addr->address); 2061ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 20625f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t)); 2063ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_DEREG_FOR_NOTIFICATION, 2064ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 2065ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2066ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2067ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_read_remote_rssi(int client_if, const bt_bdaddr_t *bd_addr) 2068ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2069ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 2070ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 2071ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.client_if = (uint8_t) client_if; 2072ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(btif_cb.bd_addr.address, bd_addr->address); 2073ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_RSSI, 2074ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 2075ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2076ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 20779426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbachstatic bt_status_t btif_gattc_configure_mtu(int conn_id, int mtu) 20789426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach{ 20799426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach CHECK_BTGATT_INIT(); 20809426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach btif_gattc_cb_t btif_cb; 20819426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach btif_cb.conn_id = conn_id; 20829426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach btif_cb.len = mtu; // Re-use len field 20839426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONFIGURE_MTU, 20849426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 20859426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach} 20869426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach 208752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbachstatic bt_status_t btif_gattc_conn_parameter_update(const bt_bdaddr_t *bd_addr, int min_interval, 208852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach int max_interval, int latency, int timeout) 208952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach{ 209052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach CHECK_BTGATT_INIT(); 209152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_conn_param_cb_t btif_cb; 209252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_cb.min_interval = min_interval; 209352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_cb.max_interval = max_interval; 209452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_cb.latency = latency; 209552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_cb.timeout = timeout; 209652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach bdcpy(btif_cb.bd_addr.address, bd_addr->address); 209752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONN_PARAM_UPDT, 209852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach (char*) &btif_cb, sizeof(btif_conn_param_cb_t), NULL); 209952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach} 210052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach 2101f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Callojistatic bt_status_t btif_gattc_scan_filter_param_setup(btgatt_filt_param_setup_t 2102f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji filt_param) 2103b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{ 2104b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach CHECK_BTGATT_INIT(); 21051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("%s", __FUNCTION__); 21061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t btif_filt_cb; 21076cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t)); 2108f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.client_if = filt_param.client_if; 2109f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.action = filt_param.action; 2110f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.filt_index = filt_param.filt_index; 2111f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.feat_seln = filt_param.feat_seln; 2112f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.list_logic_type = filt_param.list_logic_type; 2113f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.filt_logic_type = filt_param.filt_logic_type; 2114f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.rssi_high_thres = filt_param.rssi_high_thres; 2115f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.rssi_low_thres = filt_param.rssi_low_thres; 2116f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.dely_mode = filt_param.dely_mode; 2117f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.found_timeout = filt_param.found_timeout; 2118f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.lost_timeout = filt_param.lost_timeout; 2119f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.found_timeout_cnt = filt_param.found_timeout_cnt; 2120f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.num_of_tracking_entries = filt_param.num_of_tracking_entries; 21211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_PARAM_SETUP, 21221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL); 2123b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach} 2124b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 21251a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_add_remove(int client_if, int action, 21261a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji int filt_type, int filt_index, int company_id, 21271a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji int company_id_mask, const bt_uuid_t *p_uuid, 21281a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji const bt_uuid_t *p_uuid_mask, const bt_bdaddr_t *bd_addr, 21291a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji char addr_type, int data_len, char* p_data, int mask_len, 21301a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji char* p_mask) 2131b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{ 2132b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach CHECK_BTGATT_INIT(); 21331a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t btif_filt_cb; 21346cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t)); 21351a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("%s, %d, %d", __FUNCTION__, action, filt_type); 21361a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 21371a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji /* If data is passed, both mask and data have to be the same length */ 213816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (data_len != mask_len && NULL != p_data && NULL != p_mask) 21391a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji return BT_STATUS_PARM_INVALID; 21401a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 21411a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.client_if = client_if; 21421a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.action = action; 21431a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.filt_index = filt_index; 21441a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.filt_type = filt_type; 21451a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.conn_id = company_id; 21461a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.company_id_mask = company_id_mask ? company_id_mask : 0xFFFF; 214716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (bd_addr) 214816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham bdcpy(btif_filt_cb.bd_addr.address, bd_addr->address); 21491a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 21501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.addr_type = addr_type; 21511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.has_mask = (p_uuid_mask != NULL); 2152b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 2153b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach if (p_uuid != NULL) 21541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji memcpy(&btif_filt_cb.uuid, p_uuid, sizeof(bt_uuid_t)); 2155b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach if (p_uuid_mask != NULL) 21561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji memcpy(&btif_filt_cb.uuid_mask, p_uuid_mask, sizeof(bt_uuid_t)); 21571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji if (p_data != NULL && data_len != 0) 21581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji { 21591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji memcpy(btif_filt_cb.value, p_data, data_len); 21601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.value_len = data_len; 21611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji memcpy(btif_filt_cb.value_mask, p_mask, mask_len); 21621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.value_mask_len = mask_len; 21631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji } 2164b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_CONFIG, 21651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL); 2166b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach} 2167b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 21681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_clear(int client_if, int filt_index) 2169b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{ 2170b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach CHECK_BTGATT_INIT(); 21711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("%s, %d", __FUNCTION__, filt_index); 21721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 21731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t btif_filt_cb; 21746cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t)); 21751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.client_if = client_if; 21761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.filt_index = filt_index; 21771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.action = BTA_DM_BLE_SCAN_COND_CLEAR; 21781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_CONFIG, 21791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL); 21801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji} 21811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 21821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_enable(int client_if, bool enable) 21831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{ 21841a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji int action = 0; 21851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji CHECK_BTGATT_INIT(); 21861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("%s, %d", __FUNCTION__, enable); 21871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 21881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t btif_filt_cb; 21896cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t)); 21901a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.client_if = client_if; 219116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (true == enable) 21921a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji action = 1; 21931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.action = action; 21941a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_ENABLE, 21951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL); 2196b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach} 2197b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 2198935324abbe8706307297f09cf79bbcd4efb73367Satya Callojistatic bt_status_t btif_gattc_set_scan_parameters(int client_if, int scan_interval, 2199935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji int scan_window) 22007d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham{ 22017d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham CHECK_BTGATT_INIT(); 22027d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham btif_gattc_cb_t btif_cb; 2203935324abbe8706307297f09cf79bbcd4efb73367Satya Calloji btif_cb.client_if = client_if; 22047d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham btif_cb.scan_interval = scan_interval; 22057d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham btif_cb.scan_window = scan_window; 22067d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SET_SCAN_PARAMS, 22077d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 22087d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham} 22097d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham 2210ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic int btif_gattc_get_device_type( const bt_bdaddr_t *bd_addr ) 2211ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2212ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int device_type = 0; 2213ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta char bd_addr_str[18] = {0}; 2214ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 22158a6a89faa942aed4f176b0c98402d01c8bdd6aa6Sharvil Nanavati bdaddr_to_string(bd_addr, bd_addr_str, sizeof(bd_addr_str)); 22169d52f88bfc07556cb01ab3055f5b1242c9b467aaSharvil Nanavati if (btif_config_get_int(bd_addr_str, "DevType", &device_type)) 2217ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return device_type; 2218ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return 0; 2219ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2220ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2221a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_enable(int client_if, int min_interval, int max_interval, 22229dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int adv_type, int chnl_map, int tx_power, int timeout_s) 2223a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{ 2224a6ce7751d84218c193eb90d390aef23217b1737eWei Wang CHECK_BTGATT_INIT(); 2225a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btgatt_multi_adv_inst_cb adv_cb; 22266cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb)); 2227a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.client_if = (uint8_t) client_if; 2228a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2229a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.adv_int_min = min_interval; 2230a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.adv_int_max = max_interval; 2231a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.adv_type = adv_type; 2232a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.channel_map = chnl_map; 2233a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.adv_filter_policy = 0; 2234a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.tx_power = tx_power; 22359dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach adv_cb.timeout_s = timeout_s; 2236a6ce7751d84218c193eb90d390aef23217b1737eWei Wang return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_ENABLE, 2237a6ce7751d84218c193eb90d390aef23217b1737eWei Wang (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL); 2238a6ce7751d84218c193eb90d390aef23217b1737eWei Wang} 2239a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2240a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_update(int client_if, int min_interval, int max_interval, 22419dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int adv_type, int chnl_map,int tx_power, int timeout_s) 2242a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{ 2243a6ce7751d84218c193eb90d390aef23217b1737eWei Wang CHECK_BTGATT_INIT(); 2244a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btgatt_multi_adv_inst_cb adv_cb; 22456cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb)); 2246a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.client_if = (uint8_t) client_if; 2247a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2248a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.adv_int_min = min_interval; 2249a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.adv_int_max = max_interval; 2250a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.adv_type = adv_type; 2251a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.channel_map = chnl_map; 2252a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.adv_filter_policy = 0; 2253a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.tx_power = tx_power; 22549dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach adv_cb.timeout_s = timeout_s; 2255a6ce7751d84218c193eb90d390aef23217b1737eWei Wang return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_UPDATE, 2256a6ce7751d84218c193eb90d390aef23217b1737eWei Wang (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL); 2257a6ce7751d84218c193eb90d390aef23217b1737eWei Wang} 2258a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2259a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_setdata(int client_if, bool set_scan_rsp, 22609dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach bool include_name, bool incl_txpower, int appearance, 22619dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int manufacturer_len, char* manufacturer_data, 22629dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int service_data_len, char* service_data, 22639dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int service_uuid_len, char* service_uuid) 2264a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{ 2265a6ce7751d84218c193eb90d390aef23217b1737eWei Wang CHECK_BTGATT_INIT(); 2266a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2267a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_adv_data_t multi_adv_data_inst; 2268484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge memset(&multi_adv_data_inst, 0, sizeof(multi_adv_data_inst)); 2269484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge 2270484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge const int min_interval = 0; 2271484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge const int max_interval = 0; 2272a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2273a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_gattc_adv_data_packager(client_if, set_scan_rsp, include_name, incl_txpower, 2274a6ce7751d84218c193eb90d390aef23217b1737eWei Wang min_interval, max_interval, appearance, manufacturer_len, manufacturer_data, 2275a6ce7751d84218c193eb90d390aef23217b1737eWei Wang service_data_len, service_data, service_uuid_len, service_uuid, &multi_adv_data_inst); 2276a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2277484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge bt_status_t status = btif_transfer_context( 2278484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_SET_DATA, 2279484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge (char *)&multi_adv_data_inst, sizeof(multi_adv_data_inst), 2280484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge btif_gattc_deep_copy); 2281484dc303627eb82e7c5edf4f03e542fec2d3f4eaIan Coolidge btif_gattc_adv_data_cleanup(&multi_adv_data_inst); 2282a6ce7751d84218c193eb90d390aef23217b1737eWei Wang return status; 2283a6ce7751d84218c193eb90d390aef23217b1737eWei Wang} 2284a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2285a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_disable(int client_if) 2286a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{ 2287a6ce7751d84218c193eb90d390aef23217b1737eWei Wang CHECK_BTGATT_INIT(); 2288a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btgatt_multi_adv_inst_cb adv_cb; 22896cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb)); 2290a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.client_if = (uint8_t) client_if; 2291a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2292a6ce7751d84218c193eb90d390aef23217b1737eWei Wang return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_DISABLE, 2293a6ce7751d84218c193eb90d390aef23217b1737eWei Wang (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL); 2294a6ce7751d84218c193eb90d390aef23217b1737eWei Wang} 2295a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2296c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_cfg_storage(int client_if,int batch_scan_full_max, 2297c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji int batch_scan_trunc_max, int batch_scan_notify_threshold) 2298c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 2299c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji CHECK_BTGATT_INIT(); 2300c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btgatt_batch_track_cb_t bt_scan_cb; 23016cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t)); 2302c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.client_if = (uint8_t) client_if; 2303c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.batch_scan_full_max = batch_scan_full_max; 2304c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.batch_scan_trunc_max = batch_scan_trunc_max; 2305c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.batch_scan_notify_threshold = batch_scan_notify_threshold; 2306c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONFIG_STORAGE_PARAMS, 2307c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL); 2308c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 2309c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 2310c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_enb_batch_scan(int client_if,int scan_mode, int scan_interval, 2311c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji int scan_window, int addr_type, int discard_rule) 2312c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 2313c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji CHECK_BTGATT_INIT(); 2314c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btgatt_batch_track_cb_t bt_scan_cb; 23156cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t)); 2316c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.client_if = (uint8_t) client_if; 2317c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.scan_mode = scan_mode; 2318c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.scan_interval = scan_interval; 2319c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.scan_window = scan_window; 2320c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.discard_rule = discard_rule; 2321c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.addr_type = addr_type; 2322c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ENABLE_BATCH_SCAN, 2323c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL); 2324c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 2325c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 2326c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_dis_batch_scan(int client_if) 2327c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 2328c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji CHECK_BTGATT_INIT(); 2329c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btgatt_batch_track_cb_t bt_scan_cb; 23306cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t)); 2331c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.client_if = (uint8_t) client_if; 2332c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_DISABLE_BATCH_SCAN, 2333c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL); 2334c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 2335c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 2336c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_read_batch_scan_reports(int client_if, int scan_mode) 2337c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 2338c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji CHECK_BTGATT_INIT(); 2339c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btgatt_batch_track_cb_t bt_scan_cb; 23406cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t)); 2341c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.client_if = (uint8_t) client_if; 2342c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.scan_mode = scan_mode; 2343c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_BATCH_SCAN_REPORTS, 2344c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL); 2345c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 2346c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 2347ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern bt_status_t btif_gattc_test_command_impl(int command, btgatt_test_params_t* params); 2348ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2349ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_test_command(int command, btgatt_test_params_t* params) 2350ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2351ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_gattc_test_command_impl(command, params); 2352ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2353ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2354ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2355ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaconst btgatt_client_interface_t btgattClientInterface = { 2356ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_register_app, 2357ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_unregister_app, 2358ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_scan, 2359ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_open, 2360ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_close, 23615c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach btif_gattc_listen, 2362ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_refresh, 2363ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_search_service, 2364ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_get_included_service, 2365ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_get_characteristic, 2366ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_get_descriptor, 2367ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_read_char, 2368ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_write_char, 2369ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_read_char_descr, 2370ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_write_char_descr, 2371ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_execute_write, 2372ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_reg_for_notification, 2373ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_dereg_for_notification, 2374ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_read_remote_rssi, 23751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_gattc_scan_filter_param_setup, 23761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_gattc_scan_filter_add_remove, 2377b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach btif_gattc_scan_filter_clear, 23781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_gattc_scan_filter_enable, 2379ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_get_device_type, 23805c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach btif_gattc_set_adv_data, 23819426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach btif_gattc_configure_mtu, 238252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_gattc_conn_parameter_update, 23837d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham btif_gattc_set_scan_parameters, 2384a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_gattc_multi_adv_enable, 2385a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_gattc_multi_adv_update, 2386a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_gattc_multi_adv_setdata, 2387a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_gattc_multi_adv_disable, 2388c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_gattc_cfg_storage, 2389c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_gattc_enb_batch_scan, 2390c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_gattc_dis_batch_scan, 2391c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_gattc_read_batch_scan_reports, 2392ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_test_command 2393ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}; 2394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2395ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 2396