btif_gatt_client.cc revision 6ed1548be2295fc1bec14f10cd0fade4f63daa6a
1ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/****************************************************************************** 2ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 3c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji * Copyright (C) 2009-2014 Broadcom Corporation 4ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 5ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Licensed under the Apache License, Version 2.0 (the "License"); 6ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * you may not use this file except in compliance with the License. 7ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * You may obtain a copy of the License at: 8ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 9ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * http://www.apache.org/licenses/LICENSE-2.0 10ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 11ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Unless required by applicable law or agreed to in writing, software 12ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * distributed under the License is distributed on an "AS IS" BASIS, 13ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * See the License for the specific language governing permissions and 15ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * limitations under the License. 16ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 17ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ******************************************************************************/ 18ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 19ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 20ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 21ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Filename: btif_gatt_client.c 22ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 23ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Description: GATT client implementation 24ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 25ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *******************************************************************************/ 26ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2749120dc867c7818511b5afec461dfc97d17eef58Marie Janssen#define LOG_TAG "bt_btif_gattc" 2849120dc867c7818511b5afec461dfc97d17eef58Marie Janssen 2949a86709488e5cfd5e23759da18bf9613e15b04dMarie Janssen#include <errno.h> 30ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <hardware/bluetooth.h> 31ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdio.h> 32ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdlib.h> 33ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <string.h> 346ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji#include "device/include/controller.h" 356ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji 36ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 3795b74f252f534ec757aab1fc08e086e02b2cfe8dSharvil Nanavati#include "btcore/include/bdaddr.h" 38ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_common.h" 39ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_util.h" 40ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 41ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (defined(BLE_INCLUDED) && (BLE_INCLUDED == TRUE)) 42ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 436975b4d711142b885af479721cada448952c6b41Andre Eisenbach#include <hardware/bt_gatt.h> 44db554581079863974af8e1289646f5deea6fc044Marie Janssen 45ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_api.h" 46ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_gatt_api.h" 47ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_config.h" 48db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_dm.h" 49ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_gatt.h" 50db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_gatt_multi_adv_util.h" 51ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_gatt_util.h" 52ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_storage.h" 53db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_storage.h" 5444802768c447ab480d4227b3a852a97d923b816dSharvil Nanavati#include "osi/include/log.h" 55b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach#include "vendor_api.h" 56b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 57ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 58ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Constants & Macros 59ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/ 60ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 61ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define CHECK_BTGATT_INIT() if (bt_gatt_callbacks == NULL)\ 62ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta {\ 63db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_WARN(LOG_TAG, "%s: BTGATT not initialized", __FUNCTION__);\ 64ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return BT_STATUS_NOT_READY;\ 65ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } else {\ 66db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_VERBOSE(LOG_TAG, "%s", __FUNCTION__);\ 67ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 68ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 69a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BLE_RESOLVE_ADDR_MSB 0x40 /* bit7, bit6 is 01 to be resolvable random */ 70a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BLE_RESOLVE_ADDR_MASK 0xc0 /* bit 6, and bit7 */ 71a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach#define BTM_BLE_IS_RESOLVE_BDA(x) ((x[0] & BLE_RESOLVE_ADDR_MASK) == BLE_RESOLVE_ADDR_MSB) 72ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 73ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef enum { 74ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_REGISTER_APP = 1000, 75ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_UNREGISTER_APP, 76ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_SCAN_START, 77ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_SCAN_STOP, 78ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_OPEN, 79ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_CLOSE, 80ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_SEARCH_SERVICE, 81ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_GET_FIRST_CHAR, 82ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_GET_NEXT_CHAR, 83ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_GET_FIRST_CHAR_DESCR, 84ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_GET_NEXT_CHAR_DESCR, 85ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_GET_FIRST_INCL_SERVICE, 86ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_GET_NEXT_INCL_SERVICE, 87ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_READ_CHAR, 88ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_READ_CHAR_DESCR, 89ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_WRITE_CHAR, 90ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_WRITE_CHAR_DESCR, 91ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_EXECUTE_WRITE, 92ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_REG_FOR_NOTIFICATION, 93ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_DEREG_FOR_NOTIFICATION, 94ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTIF_GATTC_REFRESH, 955c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach BTIF_GATTC_READ_RSSI, 965c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach BTIF_GATTC_LISTEN, 979426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach BTIF_GATTC_SET_ADV_DATA, 989426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach BTIF_GATTC_CONFIGURE_MTU, 9952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach BTIF_GATTC_CONN_PARAM_UPDT, 1001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_GATTC_SCAN_FILTER_PARAM_SETUP, 101b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach BTIF_GATTC_SCAN_FILTER_CONFIG, 1027d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham BTIF_GATTC_SCAN_FILTER_CLEAR, 1031a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_GATTC_SCAN_FILTER_ENABLE, 1047d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham BTIF_GATTC_SET_SCAN_PARAMS, 105a6ce7751d84218c193eb90d390aef23217b1737eWei Wang BTIF_GATTC_ADV_INSTANCE_ENABLE, 106a6ce7751d84218c193eb90d390aef23217b1737eWei Wang BTIF_GATTC_ADV_INSTANCE_UPDATE, 107a6ce7751d84218c193eb90d390aef23217b1737eWei Wang BTIF_GATTC_ADV_INSTANCE_SET_DATA, 108c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTIF_GATTC_ADV_INSTANCE_DISABLE, 109c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTIF_GATTC_CONFIG_STORAGE_PARAMS, 110c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTIF_GATTC_ENABLE_BATCH_SCAN, 111c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTIF_GATTC_READ_BATCH_SCAN_REPORTS, 112533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski BTIF_GATTC_DISABLE_BATCH_SCAN, 113533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski BTIF_GATTC_GET_GATT_DB 114ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} btif_gattc_event_t; 115ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 116ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATT_MAX_OBSERVED_DEV 40 117ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 118ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATT_OBSERVE_EVT 0x1000 119ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATTC_RSSI_EVT 0x1001 120979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach#define BTIF_GATTC_SCAN_FILTER_EVT 0x1003 121979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach#define BTIF_GATTC_SCAN_PARAM_EVT 0x1004 122ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 123c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji#define ENABLE_BATCH_SCAN 1 124c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji#define DISABLE_BATCH_SCAN 0 125c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 126ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 127ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Local type definitions 128ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/ 129c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojitypedef struct 130c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 131c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t report_format; 132c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint16_t data_len; 133c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t num_records; 134c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t *p_rep_data; 135c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} btgatt_batch_reports; 136c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 137c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojitypedef struct 138c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 139c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t status; 140c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t client_if; 1411acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji uint8_t action; 1421acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji uint8_t avbl_space; 1431acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji uint8_t lost_timeout; 144f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji tBLE_ADDR_TYPE addr_type; 145c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t batch_scan_full_max; 146c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t batch_scan_trunc_max; 147c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint8_t batch_scan_notify_threshold; 148979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach tBTA_BLE_BATCH_SCAN_MODE scan_mode; 149c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint32_t scan_interval; 150c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji uint32_t scan_window; 151c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji tBTA_BLE_DISCARD_RULE discard_rule; 152f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btgatt_batch_reports read_reports; 153c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} btgatt_batch_track_cb_t; 154ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojitypedef tBTA_DM_BLE_PF_FILT_PARAMS btgatt_adv_filt_param_t; 1561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 1571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojitypedef struct 1581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{ 1591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t client_if; 1601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t action; 1611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji tBTA_DM_BLE_PF_COND_TYPE filt_type; 1621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji bt_bdaddr_t bd_addr; 1631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t value[BTGATT_MAX_ATTR_LEN]; 1641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t value_len; 1651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t filt_index; 1661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint16_t conn_id; 1671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint16_t company_id_mask; 1681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji bt_uuid_t uuid; 1691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji bt_uuid_t uuid_mask; 1701a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t value_mask[BTGATT_MAX_ATTR_LEN]; 1711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t value_mask_len; 1721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t has_mask; 1731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t addr_type; 1741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji uint8_t status; 1751a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji tBTA_DM_BLE_PF_AVBL_SPACE avbl_space; 1761a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji tBTA_DM_BLE_SCAN_COND_OP cond_op; 1771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filt_param_t adv_filt_param; 1781a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji} btgatt_adv_filter_cb_t; 1791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 180ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct 181ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 182ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t value[BTGATT_MAX_ATTR_LEN]; 183a6ce7751d84218c193eb90d390aef23217b1737eWei Wang uint8_t inst_id; 184ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_bdaddr_t bd_addr; 185ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 186ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_srvc_id_t incl_srvc_id; 1875f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t char_id; 1885f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t descr_id; 189ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_uuid_t uuid; 190b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach bt_uuid_t uuid_mask; 191ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint16_t conn_id; 192ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint16_t len; 193b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach uint16_t mask; 194979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach uint32_t scan_interval; 195979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach uint32_t scan_window; 196ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t client_if; 197ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t action; 198ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t is_direct; 199ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t search_all; 200ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t auth_req; 201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t write_type; 202ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t status; 203ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t addr_type; 2045c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach uint8_t start; 205b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach uint8_t has_mask; 206ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int8_t rssi; 2077fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta uint8_t flag; 208ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBT_DEVICE_TYPE device_type; 2097fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta btgatt_transport_t transport; 210ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} __attribute__((packed)) btif_gattc_cb_t; 211ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 212ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct 213ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 214ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_bdaddr_t bd_addr; 21552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach uint16_t min_interval; 21652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach uint16_t max_interval; 21752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach uint16_t timeout; 21852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach uint16_t latency; 21952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach} btif_conn_param_cb_t; 22052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach 22152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbachtypedef struct 22252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach{ 22352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach bt_bdaddr_t bd_addr; 224ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BOOLEAN in_use; 225ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}__attribute__((packed)) btif_gattc_dev_t; 226ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 227ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct 228ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 229ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_dev_t remote_dev[BTIF_GATT_MAX_OBSERVED_DEV]; 2307fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta uint8_t addr_type; 2317fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta uint8_t next_storage_idx; 232ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}__attribute__((packed)) btif_gattc_dev_cb_t; 233ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 234ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 235ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Static variables 236ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/ 237ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 238ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern const btgatt_callbacks_t *bt_gatt_callbacks; 239ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_gattc_dev_cb_t btif_gattc_dev_cb; 240ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_gattc_dev_cb_t *p_dev_cb = &btif_gattc_dev_cb; 241ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic uint8_t rssi_request_client_if; 242ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 243ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 244ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Static functions 245ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/ 246ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2479dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbachstatic bt_status_t btif_gattc_multi_adv_disable(int client_if); 24878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovstatic void btif_multi_adv_stop_cb(void *data) 2499dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach{ 25078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov int client_if = PTR_TO_INT(data); 2519dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach btif_gattc_multi_adv_disable(client_if); // Does context switch 2529dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach} 2539dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach 254979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbachstatic btgattc_error_t btif_gattc_translate_btm_status(tBTM_STATUS status) 255979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach{ 256979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach switch(status) 257979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach { 258979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_SUCCESS: 259979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_SUCCESS_NO_SECURITY: 260979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach return BT_GATTC_COMMAND_SUCCESS; 261979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 262979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_CMD_STARTED: 263979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach return BT_GATTC_COMMAND_STARTED; 264979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 265979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_BUSY: 266979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach return BT_GATTC_COMMAND_BUSY; 267979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 268979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_CMD_STORED: 269979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach return BT_GATTC_COMMAND_STORED; 270979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 271979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_NO_RESOURCES: 272979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach return BT_GATTC_NO_RESOURCES; 273979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 274979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_MODE_UNSUPPORTED: 275979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_WRONG_MODE: 276979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_MODE4_LEVEL4_NOT_SUPPORTED: 277979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach return BT_GATTC_MODE_UNSUPPORTED; 278979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 279979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_ILLEGAL_VALUE: 280979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_SCO_BAD_LENGTH: 281979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach return BT_GATTC_ILLEGAL_VALUE; 282979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 283979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_UNKNOWN_ADDR: 284979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach return BT_GATTC_UNKNOWN_ADDR; 285979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 286979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_DEVICE_TIMEOUT: 287979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach return BT_GATTC_DEVICE_TIMEOUT; 288979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 289979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_FAILED_ON_SECURITY: 290979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_REPEATED_ATTEMPTS: 291979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_NOT_AUTHORIZED: 292979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach return BT_GATTC_SECURITY_ERROR; 293979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 294979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_DEV_RESET: 295979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_ILLEGAL_ACTION: 296979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach return BT_GATTC_INCORRECT_STATE; 297979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 298979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_BAD_VALUE_RET: 299979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach return BT_GATTC_INVALID_CONTROLLER_OUTPUT; 300979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 301979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_DELAY_CHECK: 302979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach return BT_GATTC_DELAYED_ENCRYPTION_CHECK; 303979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 304979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTM_ERR_PROCESSING: 305979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach default: 306979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach return BT_GATTC_ERR_PROCESSING; 307979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach } 308979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach} 309979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 3108444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbachstatic void btapp_gattc_req_data(UINT16 event, char *p_dest, char *p_src) 3118444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach{ 31252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach tBTA_GATTC *p_dest_data = (tBTA_GATTC*) p_dest; 31352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach tBTA_GATTC *p_src_data = (tBTA_GATTC*) p_src; 3148444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 3158444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach if (!p_src_data || !p_dest_data) 3168444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach return; 3178444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 3188444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach // Copy basic structure first 3193f06e14fddc0e674347ae28ea4a25218d4ce1d2aPavlin Radoslavov maybe_non_aligned_memcpy(p_dest_data, p_src_data, sizeof(*p_src_data)); 3208444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 3218444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach // Allocate buffer for request data if necessary 3228444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach switch (event) 3238444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach { 3248444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach case BTA_GATTC_READ_CHAR_EVT: 3258444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach case BTA_GATTC_READ_DESCR_EVT: 3268444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 327e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach if (p_src_data->read.p_value != NULL) 3288444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach { 329cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov p_dest_data->read.p_value = osi_malloc(sizeof(tBTA_GATT_READ_VAL)); 3308444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 331e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach if (p_dest_data->read.p_value != NULL) 3328444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach { 333e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach memcpy(p_dest_data->read.p_value, p_src_data->read.p_value, 334e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach sizeof(tBTA_GATT_READ_VAL)); 335e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach 336e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach // Allocate buffer for att value if necessary 3376975b4d711142b885af479721cada448952c6b41Andre Eisenbach if (get_uuid16(&p_src_data->read.descr_type.uuid) != GATT_UUID_CHAR_AGG_FORMAT 338f052217962d0c06392eb79687820c9469cd6a75aAndre Eisenbach && p_src_data->read.p_value->unformat.len > 0 339e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach && p_src_data->read.p_value->unformat.p_value != NULL) 3408444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach { 341e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach p_dest_data->read.p_value->unformat.p_value = 342cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov osi_malloc(p_src_data->read.p_value->unformat.len); 343e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach if (p_dest_data->read.p_value->unformat.p_value != NULL) 344e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach { 345e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach memcpy(p_dest_data->read.p_value->unformat.p_value, 346e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach p_src_data->read.p_value->unformat.p_value, 347e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach p_src_data->read.p_value->unformat.len); 348e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach } 3498444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach } 3508444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach } 3518444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach } 352e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach else 353e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach { 354e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_WARNING("%s :Src read.p_value ptr is NULL for event 0x%x", 355e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach __FUNCTION__, event); 356e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach p_dest_data->read.p_value = NULL; 357e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach 358e4020c28c8a9dc56f927b03a8ca3a17d9401bc1eAndre Eisenbach } 3598444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach break; 3608444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 3618444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach default: 3628444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach break; 3638444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach } 3648444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach} 3658444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 3668444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbachstatic void btapp_gattc_free_req_data(UINT16 event, tBTA_GATTC *p_data) 3678444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach{ 3688444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach switch (event) 3698444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach { 3708444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach case BTA_GATTC_READ_CHAR_EVT: 3718444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach case BTA_GATTC_READ_DESCR_EVT: 3728444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach if (p_data != NULL && p_data->read.p_value != NULL) 3738444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach { 37420524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavov if ((get_uuid16(&p_data->read.descr_type.uuid) != 37520524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavov GATT_UUID_CHAR_AGG_FORMAT) && 37620524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavov (p_data->read.p_value->unformat.len > 0)) { 377cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov osi_free_and_reset((void **)&p_data->read.p_value->unformat.p_value); 3788444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach } 379cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov osi_free_and_reset((void **)&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 462ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_gattc_upstreams_evt(uint16_t event, char* p_param) 463ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 464db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_VERBOSE(LOG_TAG, "%s: Event %d", __FUNCTION__, event); 465ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 46652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach tBTA_GATTC *p_data = (tBTA_GATTC*) p_param; 467ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta switch (event) 468ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 469ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_REG_EVT: 470ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 471ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_uuid_t app_uuid; 472ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_to_btif_uuid(&app_uuid, &p_data->reg_oper.app_uuid); 473ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->register_client_cb 474ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->reg_oper.status 475ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->reg_oper.client_if 476ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , &app_uuid 477ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ); 478ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 479ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 480ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 481ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_DEREG_EVT: 482ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 483ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 484ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_READ_CHAR_EVT: 485ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 486ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_read_params_t data; 487ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta set_read_value(&data, &p_data->read); 488ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 489ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->read_characteristic_cb 490ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->read.conn_id, p_data->read.status, &data); 491ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 492ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 493ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 494ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_WRITE_CHAR_EVT: 495ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_PREP_WRITE_EVT: 496ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 497ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_write_params_t data; 498ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_to_btif_srvc_id(&data.srvc_id, &p_data->write.srvc_id); 4995f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach bta_to_btif_gatt_id(&data.char_id, &p_data->write.char_id); 500ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 501ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->write_characteristic_cb 502ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->write.conn_id, p_data->write.status, &data 503ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ); 504ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 505ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 506ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 507ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_EXEC_EVT: 508ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 509ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->execute_write_cb 510ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->exec_cmpl.conn_id, p_data->exec_cmpl.status 511ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ); 512ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 513ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 514ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 515ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_SEARCH_CMPL_EVT: 516ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 517ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->search_complete_cb 518ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->search_cmpl.conn_id, p_data->search_cmpl.status); 519ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 520ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 521ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 522ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_SEARCH_RES_EVT: 523ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 524ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_srvc_id_t data; 525ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_to_btif_srvc_id(&data, &(p_data->srvc_res.service_uuid)); 526ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->search_result_cb 527ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->srvc_res.conn_id, &data); 528ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 529ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 530ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 531ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_READ_DESCR_EVT: 532ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 533ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_read_params_t data; 534ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta set_read_value(&data, &p_data->read); 535ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 536ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->read_descriptor_cb 537ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->read.conn_id, p_data->read.status, &data); 538ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 539ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 540ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 541ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_WRITE_DESCR_EVT: 542ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 543ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_write_params_t data; 544ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_to_btif_srvc_id(&data.srvc_id, &p_data->write.srvc_id); 5455f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach bta_to_btif_gatt_id(&data.char_id, &p_data->write.char_id); 5465f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach bta_to_btif_gatt_id(&data.descr_id, &p_data->write.descr_type); 547ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 548ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->write_descriptor_cb 549ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->write.conn_id, p_data->write.status, &data); 550ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 551ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 552ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 553ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_NOTIF_EVT: 554ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 555ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_notify_params_t data; 556ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 557ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(data.bda.address, p_data->notify.bda); 558ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 559ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_to_btif_srvc_id(&data.srvc_id, &p_data->notify.char_id.srvc_id); 5605f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach bta_to_btif_gatt_id(&data.char_id, &p_data->notify.char_id.char_id); 561ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(data.value, p_data->notify.value, p_data->notify.len); 562ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 563ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta data.is_notify = p_data->notify.is_notify; 564ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta data.len = p_data->notify.len; 565ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 566ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->notify_cb 567ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->notify.conn_id, &data); 568ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 569ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_data->notify.is_notify == FALSE) 570ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 571ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_SendIndConfirm(p_data->notify.conn_id, 572ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &p_data->notify.char_id); 573ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 574ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 575ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 576ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 577ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_OPEN_EVT: 578ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 579ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_bdaddr_t bda; 580ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(bda.address, p_data->open.remote_bda); 581ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 582ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->open_cb, p_data->open.conn_id 583ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->open.status, p_data->open.client_if, &bda); 5846975b4d711142b885af479721cada448952c6b41Andre Eisenbach 5859426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach if (GATT_DEF_BLE_MTU_SIZE != p_data->open.mtu && p_data->open.mtu) 5869426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach { 5879426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, p_data->open.conn_id 5889426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach , p_data->open.status , p_data->open.mtu); 5899426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach } 5909426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach 5916975b4d711142b885af479721cada448952c6b41Andre Eisenbach if (p_data->open.status == BTA_GATT_OK) 5924f6c9b4f68d152baf7aa029cbe9b570994584101Nitin Arora btif_gatt_check_encrypted_link(p_data->open.remote_bda, p_data->open.transport); 593ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 594ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 595ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 596ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_CLOSE_EVT: 597ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 598ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_bdaddr_t bda; 599ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(bda.address, p_data->close.remote_bda); 600ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->close_cb, p_data->close.conn_id 601ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta , p_data->status, p_data->close.client_if, &bda); 602ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 603ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 604ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 605ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_ACL_EVT: 606db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, "BTA_GATTC_ACL_EVT: status = %d", p_data->status); 607ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* Ignore for now */ 608ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 609ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 610ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_GATTC_CANCEL_OPEN_EVT: 611ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 612ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 613ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATT_OBSERVE_EVT: 614ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 61552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param; 616aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi uint8_t remote_name_len; 617aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi uint8_t *p_eir_remote_name=NULL; 6187fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta bt_device_type_t dev_type; 6197fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta bt_property_t properties; 620aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi 621a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value, 622aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi BTM_EIR_COMPLETE_LOCAL_NAME_TYPE, &remote_name_len); 623aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi 62416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (p_eir_remote_name == NULL) 625ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 626a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson p_eir_remote_name = BTM_CheckEirData(p_btif_cb->value, 627aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi BT_EIR_SHORTENED_LOCAL_NAME_TYPE, &remote_name_len); 628aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi } 629aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi 630aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi if ((p_btif_cb->addr_type != BLE_ADDR_RANDOM) || (p_eir_remote_name)) 631aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi { 632aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi if (!btif_gattc_find_bdaddr(p_btif_cb->bd_addr.address)) 633aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi { 634aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi btif_gattc_add_remote_bdaddr(p_btif_cb->bd_addr.address, p_btif_cb->addr_type); 635aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi btif_gattc_update_properties(p_btif_cb); 636aefcb184639ff24bf294dfa4f91bd22202d1f93eSunny Kapdi } 637ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 6387fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta 6397fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta dev_type = p_btif_cb->device_type; 6407fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta BTIF_STORAGE_FILL_PROPERTY(&properties, 6417fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta BT_PROPERTY_TYPE_OF_DEVICE, sizeof(dev_type), &dev_type); 6427fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta btif_storage_set_remote_device_property(&(p_btif_cb->bd_addr), &properties); 6437fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta 6447b9fe757f5df8c529c506b1c41403f2f3f204f9eAndre Eisenbach btif_storage_set_remote_addr_type( &p_btif_cb->bd_addr, p_btif_cb->addr_type); 6457b9fe757f5df8c529c506b1c41403f2f3f204f9eAndre Eisenbach 646ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->scan_result_cb, 647ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &p_btif_cb->bd_addr, p_btif_cb->rssi, p_btif_cb->value); 648ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 649ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 650ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 651ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_RSSI_EVT: 652ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 65352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param; 654ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->read_remote_rssi_cb, p_btif_cb->client_if, 655ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &p_btif_cb->bd_addr, p_btif_cb->rssi, p_btif_cb->status); 656ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 657ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 658ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 6595c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach case BTA_GATTC_LISTEN_EVT: 6605c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach { 6615c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach HAL_CBACK(bt_gatt_callbacks, client->listen_cb 6625c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach , p_data->reg_oper.status 6635c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach , p_data->reg_oper.client_if 6645c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach ); 6655c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach break; 6665c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach } 6679426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach 6689426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach case BTA_GATTC_CFG_MTU_EVT: 6699426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach { 6709426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, p_data->cfg_mtu.conn_id 6719426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach , p_data->cfg_mtu.status , p_data->cfg_mtu.mtu); 6729426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach break; 6739426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach } 67417b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach 675a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTA_GATTC_MULT_ADV_ENB_EVT: 676a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 67752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param; 67816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (0xFF != p_btif_cb->inst_id) 67916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham btif_multi_adv_add_instid_map(p_btif_cb->client_if, p_btif_cb->inst_id, false); 680a6ce7751d84218c193eb90d390aef23217b1737eWei Wang HAL_CBACK(bt_gatt_callbacks, client->multi_adv_enable_cb 681a6ce7751d84218c193eb90d390aef23217b1737eWei Wang , p_btif_cb->client_if 682a6ce7751d84218c193eb90d390aef23217b1737eWei Wang , p_btif_cb->status 683a6ce7751d84218c193eb90d390aef23217b1737eWei Wang ); 6849dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach btif_multi_adv_timer_ctrl(p_btif_cb->client_if, 68578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov (p_btif_cb->status == BTA_GATT_OK) ? 68678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btif_multi_adv_stop_cb : NULL); 687a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 688a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 689a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 690a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTA_GATTC_MULT_ADV_UPD_EVT: 691a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 69252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t*) p_param; 693a6ce7751d84218c193eb90d390aef23217b1737eWei Wang HAL_CBACK(bt_gatt_callbacks, client->multi_adv_update_cb 694a6ce7751d84218c193eb90d390aef23217b1737eWei Wang , p_btif_cb->client_if 695a6ce7751d84218c193eb90d390aef23217b1737eWei Wang , p_btif_cb->status 696a6ce7751d84218c193eb90d390aef23217b1737eWei Wang ); 6979dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach btif_multi_adv_timer_ctrl(p_btif_cb->client_if, 69878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov (p_btif_cb->status == BTA_GATT_OK) ? 69978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov 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 { 784cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov p_rep_data = osi_malloc(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); 791cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov osi_free(p_rep_data); 792c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 793c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 794c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 7951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji case BTA_GATTC_SCAN_FLT_CFG_EVT: 7961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji { 79752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_adv_filter_cb_t *p_btif_cb = (btgatt_adv_filter_cb_t*) p_param; 7981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji HAL_CBACK(bt_gatt_callbacks, client->scan_filter_cfg_cb, p_btif_cb->action, 7991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_btif_cb->client_if, p_btif_cb->status, p_btif_cb->cond_op, 8001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_btif_cb->avbl_space); 8011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji break; 8021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji } 8031a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 8041a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji case BTA_GATTC_SCAN_FLT_PARAM_EVT: 8051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji { 8061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t *p_data = (btgatt_adv_filter_cb_t*) p_param; 8071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("BTA_GATTC_SCAN_FLT_PARAM_EVT: %d, %d, %d, %d",p_data->client_if, 8081a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_data->action, p_data->avbl_space, p_data->status); 8091acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji HAL_CBACK(bt_gatt_callbacks, client->scan_filter_param_cb 8101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji , p_data->action, p_data->client_if, p_data->status 8111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji , p_data->avbl_space); 8121a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji break; 8131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji } 8141a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 8151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji case BTA_GATTC_SCAN_FLT_STATUS_EVT: 8161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji { 8171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t *p_data = (btgatt_adv_filter_cb_t*) p_param; 8181a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("BTA_GATTC_SCAN_FLT_STATUS_EVT: %d, %d, %d",p_data->client_if, 8191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_data->action, p_data->status); 8201acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji HAL_CBACK(bt_gatt_callbacks, client->scan_filter_status_cb 8211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji , p_data->action, p_data->client_if, p_data->status); 8221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji break; 8231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji } 8241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 8251acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji case BTA_GATTC_ADV_VSC_EVT: 8261acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji { 827f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btgatt_track_adv_info_t *p_data = (btgatt_track_adv_info_t*)p_param; 828f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btgatt_track_adv_info_t adv_info_data; 829f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji 830f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji memset(&adv_info_data, 0, sizeof(btgatt_track_adv_info_t)); 831f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji 832f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_gatt_move_track_adv_data(&adv_info_data, p_data); 833f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji HAL_CBACK(bt_gatt_callbacks, client->track_adv_event_cb, &adv_info_data); 8341acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji break; 8351acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji } 8361acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji 837979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach case BTIF_GATTC_SCAN_PARAM_EVT: 838979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach { 839979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach btif_gattc_cb_t *p_btif_cb = (btif_gattc_cb_t *)p_param; 840979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach HAL_CBACK(bt_gatt_callbacks, client->scan_parameter_setup_completed_cb, 841979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach p_btif_cb->client_if, btif_gattc_translate_btm_status(p_btif_cb->status)); 842979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach break; 843979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach } 844979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 845ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta default: 846db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_ERROR(LOG_TAG, "%s: Unhandled event (%d)!", __FUNCTION__, event); 847ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 848ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 8498444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 8508444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach btapp_gattc_free_req_data(event, p_data); 851ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 852ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 8536975b4d711142b885af479721cada448952c6b41Andre Eisenbachstatic void bta_gattc_cback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data) 854ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 855ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_status_t status = btif_transfer_context(btif_gattc_upstreams_evt, 85652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach (uint16_t) event, (void*) p_data, sizeof(tBTA_GATTC), btapp_gattc_req_data); 857ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ASSERTC(status == BT_STATUS_SUCCESS, "Context transfer failed!", status); 858ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 859ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 860a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic void bta_gattc_multi_adv_cback(tBTA_BLE_MULTI_ADV_EVT event, UINT8 inst_id, 861a6ce7751d84218c193eb90d390aef23217b1737eWei Wang void *p_ref, tBTA_STATUS call_status) 862a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{ 863a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_gattc_cb_t btif_cb; 864a6ce7751d84218c193eb90d390aef23217b1737eWei Wang tBTA_GATTC_EVT upevt; 865a6ce7751d84218c193eb90d390aef23217b1737eWei Wang uint8_t client_if = 0; 866a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 86716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (NULL == p_ref) 868a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 86916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham BTIF_TRACE_WARNING("%s Invalid p_ref received",__FUNCTION__); 87016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham } 87116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham else 87216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham { 87316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham client_if = *(UINT8 *) p_ref; 874a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 875a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 876e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s -Inst ID %d, Status:%x, client_if:%d",__FUNCTION__,inst_id, call_status, 877a6ce7751d84218c193eb90d390aef23217b1737eWei Wang client_if); 878a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_cb.status = call_status; 879a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_cb.client_if = client_if; 880a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_cb.inst_id = inst_id; 881a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 882a6ce7751d84218c193eb90d390aef23217b1737eWei Wang switch(event) 883a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 884a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTA_BLE_MULTI_ADV_ENB_EVT: 885a6ce7751d84218c193eb90d390aef23217b1737eWei Wang upevt = BTA_GATTC_MULT_ADV_ENB_EVT; 886a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 887a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 888a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTA_BLE_MULTI_ADV_DISABLE_EVT: 889a6ce7751d84218c193eb90d390aef23217b1737eWei Wang upevt = BTA_GATTC_MULT_ADV_DIS_EVT; 890a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 891a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 892a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTA_BLE_MULTI_ADV_PARAM_EVT: 893a6ce7751d84218c193eb90d390aef23217b1737eWei Wang upevt = BTA_GATTC_MULT_ADV_UPD_EVT; 894a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 895a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 896a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTA_BLE_MULTI_ADV_DATA_EVT: 897a6ce7751d84218c193eb90d390aef23217b1737eWei Wang upevt = BTA_GATTC_MULT_ADV_DATA_EVT; 898a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 899a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 900a6ce7751d84218c193eb90d390aef23217b1737eWei Wang default: 901a6ce7751d84218c193eb90d390aef23217b1737eWei Wang return; 902a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 903a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 904a6ce7751d84218c193eb90d390aef23217b1737eWei Wang bt_status_t status = btif_transfer_context(btif_gattc_upstreams_evt, (uint16_t) upevt, 905a6ce7751d84218c193eb90d390aef23217b1737eWei Wang (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 906a6ce7751d84218c193eb90d390aef23217b1737eWei Wang ASSERTC(status == BT_STATUS_SUCCESS, "Context transfer failed!", status); 907a6ce7751d84218c193eb90d390aef23217b1737eWei Wang} 908a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 909a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic void bta_gattc_set_adv_data_cback(tBTA_STATUS call_status) 910a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{ 911a6ce7751d84218c193eb90d390aef23217b1737eWei Wang UNUSED(call_status); 912a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_gattc_cb_t btif_cb; 913a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_cb.status = call_status; 914a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_cb.action = 0; 915a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_ADV_DATA_EVT, 916a6ce7751d84218c193eb90d390aef23217b1737eWei Wang (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 917a6ce7751d84218c193eb90d390aef23217b1737eWei Wang} 918a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 919c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_setup_cb (tBTA_BLE_BATCH_SCAN_EVT evt, 920c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status) 921c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 922c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji UINT8 upevt = 0; 923c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btgatt_batch_track_cb_t btif_scan_track_cb; 924c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 925c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.status = status; 926c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.client_if = ref_value; 9271a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("bta_batch_scan_setup_cb-Status:%x, client_if:%d, evt=%d", 928c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji status, ref_value, evt); 929c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 930c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji switch(evt) 931c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 932c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTA_BLE_BATCH_SCAN_ENB_EVT: 933c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 934c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji upevt = BTA_GATTC_BTH_SCAN_ENB_EVT; 935c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 936c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 937c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 938c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTA_BLE_BATCH_SCAN_DIS_EVT: 939c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 940c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji upevt = BTA_GATTC_BTH_SCAN_DIS_EVT; 941c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 942c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 943c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 944c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTA_BLE_BATCH_SCAN_CFG_STRG_EVT: 945c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 946c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji upevt = BTA_GATTC_BTH_SCAN_CFG_EVT; 947c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 948c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 949c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 950c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTA_BLE_BATCH_SCAN_DATA_EVT: 951c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 952c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji upevt = BTA_GATTC_BTH_SCAN_RD_EVT; 953c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 954c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 955c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 956c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTA_BLE_BATCH_SCAN_THRES_EVT: 957c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 958c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji upevt = BTA_GATTC_BTH_SCAN_THR_EVT; 959c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 960c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 961c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 962c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji default: 963c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji return; 964c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 965c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 966c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_transfer_context(btif_gattc_upstreams_evt, upevt,(char*) &btif_scan_track_cb, 967c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji sizeof(btgatt_batch_track_cb_t), NULL); 968c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 969c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 970c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 971c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_threshold_cb(tBTA_DM_BLE_REF_VALUE ref_value) 972c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 973c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btgatt_batch_track_cb_t btif_scan_track_cb; 974c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.status = 0; 975c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.client_if = ref_value; 976c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 9771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("%s - client_if:%d",__FUNCTION__, ref_value); 978c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 979c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_BTH_SCAN_THR_EVT, 980c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji (char*) &btif_scan_track_cb, sizeof(btif_gattc_cb_t), NULL); 981c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 982c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 983c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic void bta_batch_scan_reports_cb(tBTA_DM_BLE_REF_VALUE ref_value, UINT8 report_format, 984c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji UINT8 num_records, UINT16 data_len, 985c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji UINT8* p_rep_data, tBTA_STATUS status) 986c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 987c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btgatt_batch_track_cb_t btif_scan_track_cb; 988adb7bb50469db992969295792a7ba3b73f9e24b3Satya Calloji memset(&btif_scan_track_cb, 0, sizeof(btgatt_batch_track_cb_t)); 9891a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("%s - client_if:%d, %d, %d, %d",__FUNCTION__, ref_value, status, num_records, 990c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji data_len); 991c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 992c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.status = status; 993c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 994c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.client_if = ref_value; 995c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.read_reports.report_format = report_format; 996c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.read_reports.data_len = data_len; 997c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_scan_track_cb.read_reports.num_records = num_records; 998c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 99916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (data_len > 0) 1000c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 1001cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov btif_scan_track_cb.read_reports.p_rep_data = osi_malloc(data_len); 1002c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji memcpy(btif_scan_track_cb.read_reports.p_rep_data, p_rep_data, data_len); 1003cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov osi_free(p_rep_data); 1004c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 1005c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 1006c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_BTH_SCAN_RD_EVT, 1007c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji (char*) &btif_scan_track_cb, sizeof(btgatt_batch_track_cb_t), NULL); 1008c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 100916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (data_len > 0) 1010cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov osi_free_and_reset((void **)&btif_scan_track_cb.read_reports.p_rep_data); 1011c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 1012c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 10136975b4d711142b885af479721cada448952c6b41Andre Eisenbachstatic void bta_scan_results_cb (tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH *p_data) 1014ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1015ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1016ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta uint8_t len; 1017ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1018ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta switch (event) 1019ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1020ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_DM_INQ_RES_EVT: 1021ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1022ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(btif_cb.bd_addr.address, p_data->inq_res.bd_addr); 1023ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.device_type = p_data->inq_res.device_type; 1024ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.rssi = p_data->inq_res.rssi; 1025ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.addr_type = p_data->inq_res.ble_addr_type; 10267fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta btif_cb.flag = p_data->inq_res.flag; 1027ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_data->inq_res.p_eir) 1028ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1029ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(btif_cb.value, p_data->inq_res.p_eir, 62); 1030a50fc88c9f784a2422ceac014fea47ac1717647bZach Johnson if (BTM_CheckEirData(p_data->inq_res.p_eir, BTM_EIR_COMPLETE_LOCAL_NAME_TYPE, 1031ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &len)) 1032ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1033ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_data->inq_res.remt_name_not_required = TRUE; 1034ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1035ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1036ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1037ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1038ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1039ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTA_DM_INQ_CMPL_EVT: 1040ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1041e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_DEBUG("%s BLE observe complete. Num Resp %d", 1042ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta __FUNCTION__,p_data->inq_cmpl.num_resps); 1043ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return; 1044ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1045ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1046ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta default: 1047e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_WARNING("%s : Unknown event 0x%x", __FUNCTION__, event); 1048ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return; 1049ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1050ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATT_OBSERVE_EVT, 1051ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1052ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1053ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1054f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Callojistatic void bta_track_adv_event_cb(tBTA_DM_BLE_TRACK_ADV_DATA *p_track_adv_data) 10551acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji{ 1056f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btgatt_track_adv_info_t btif_scan_track_cb; 1057f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji BTIF_TRACE_DEBUG("%s",__FUNCTION__); 1058f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_gatt_move_track_adv_data(&btif_scan_track_cb, 1059f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji (btgatt_track_adv_info_t*)p_track_adv_data); 1060f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji 10611acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_ADV_VSC_EVT, 1062f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji (char*) &btif_scan_track_cb, sizeof(btgatt_track_adv_info_t), NULL); 10631acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji} 10641acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji 1065ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btm_read_rssi_cb (tBTM_RSSI_RESULTS *p_result) 1066ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1067ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1068ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1069ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(btif_cb.bd_addr.address, p_result->rem_bda); 1070ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.rssi = p_result->rssi; 1071ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.status = p_result->status; 1072ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.client_if = rssi_request_client_if; 1073ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATTC_RSSI_EVT, 1074ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1075ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1076ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1077979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbachstatic void bta_scan_param_setup_cb(tGATT_IF client_if, tBTM_STATUS status) 1078979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach{ 1079979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach btif_gattc_cb_t btif_cb; 1080979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 1081979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach btif_cb.status = status; 1082979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach btif_cb.client_if = client_if; 1083979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach btif_transfer_context(btif_gattc_upstreams_evt, BTIF_GATTC_SCAN_PARAM_EVT, 1084979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach (char *)&btif_cb, sizeof(btif_gattc_cb_t), NULL); 1085979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach} 1086979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 10871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_cfg_cb(tBTA_DM_BLE_PF_ACTION action, tBTA_DM_BLE_SCAN_COND_OP cfg_op, 10881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, tBTA_STATUS status, 10891a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji tBTA_DM_BLE_REF_VALUE ref_value) 1090b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{ 10911a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t btif_cb; 1092b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach btif_cb.status = status; 10931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.action = action; 10941a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.cond_op = cfg_op; 10951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.avbl_space = avbl_space; 10961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.client_if = ref_value; 10971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_CFG_EVT, 10981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL); 10991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji} 11001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 11011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_param_setup_cb(UINT8 action_type, 11021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, 11031a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status) 11041a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{ 11051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t btif_cb; 11061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 11071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.status = status; 11081a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.action = action_type; 11091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.client_if = ref_value; 11101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.avbl_space = avbl_space; 11111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_PARAM_EVT, 11121a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL); 11131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji} 11141a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 11151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic void bta_scan_filt_status_cb(UINT8 action, tBTA_STATUS status, 11161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji tBTA_DM_BLE_REF_VALUE ref_value) 11171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{ 11181a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t btif_cb; 11191a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 11201a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.status = status; 11211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.action = action; 11221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_cb.client_if = ref_value; 11231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_transfer_context(btif_gattc_upstreams_evt, BTA_GATTC_SCAN_FLT_STATUS_EVT, 11241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji (char*) &btif_cb, sizeof(btgatt_adv_filter_cb_t), NULL); 1125b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach} 1126ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 11270d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidgestatic void btgattc_free_event_data(UINT16 event, char *event_data) 11280d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge{ 11290d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge switch (event) 11300d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge { 11310d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge case BTIF_GATTC_ADV_INSTANCE_SET_DATA: 11320d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge case BTIF_GATTC_SET_ADV_DATA: 11330d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge { 113420524d393e8b3bea4c573f7980cd843500b0e6a4Pavlin Radoslavov btif_adv_data_t *adv_data = (btif_adv_data_t *)event_data; 11350d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge btif_gattc_adv_data_cleanup(adv_data); 11360d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge break; 11370d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge } 11380d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge 11390d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge default: 11400d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge break; 11410d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge } 11420d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge} 11430d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge 1144ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btgattc_handle_event(uint16_t event, char* p_param) 1145ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1146ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATT_STATUS status; 1147ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBT_UUID uuid; 1148ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATT_SRVC_ID srvc_id; 1149ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGATT_CHAR_PROP out_char_prop; 1150ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC_CHAR_ID in_char_id; 1151ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC_CHAR_ID out_char_id; 1152ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC_CHAR_DESCR_ID in_char_descr_id; 1153ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC_CHAR_DESCR_ID out_char_descr_id; 1154ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC_INCL_SVC_ID in_incl_svc_id; 1155ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC_INCL_SVC_ID out_incl_svc_id; 1156ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATT_UNFMT descr_val; 1157ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 115852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_gattc_cb_t* p_cb = (btif_gattc_cb_t*) p_param; 115952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach if (!p_cb) return; 1160ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1161db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_VERBOSE(LOG_TAG, "%s: Event %d", __FUNCTION__, event); 1162ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1163ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta switch (event) 1164ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1165ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_REGISTER_APP: 1166ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_uuid(&uuid, &p_cb->uuid); 1167b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji btif_gattc_incr_app_count(); 11686975b4d711142b885af479721cada448952c6b41Andre Eisenbach BTA_GATTC_AppRegister(&uuid, bta_gattc_cback); 1169ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1170ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1171ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_UNREGISTER_APP: 11723770c47387d3dfc6d2e2d32f4409a82119e726e3Satya Calloji btif_gattc_clear_clientif(p_cb->client_if, TRUE); 1173b407515ffa145b1a2cab01467da03c92aeb0e8ebSatya Calloji btif_gattc_decr_app_count(); 1174ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_AppDeregister(p_cb->client_if); 1175ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1176ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1177ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_SCAN_START: 1178ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_init_dev_cb(); 11796975b4d711142b885af479721cada448952c6b41Andre Eisenbach BTA_DmBleObserve(TRUE, 0, bta_scan_results_cb); 1180ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1181ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1182ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_SCAN_STOP: 1183ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_DmBleObserve(FALSE, 0, 0); 1184ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1185ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1186ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_OPEN: 1187306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach { 1188306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach // Ensure device is in inquiry database 1189306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach int addr_type = 0; 1190306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach int device_type = 0; 11917fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta tBTA_GATT_TRANSPORT transport = BTA_GATT_TRANSPORT_LE; 1192306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach 119386f97eda524568f2d264186844450db5e56dac36Matthew Xie if (btif_get_address_type(p_cb->bd_addr.address, &addr_type) && 119486f97eda524568f2d264186844450db5e56dac36Matthew Xie btif_get_device_type(p_cb->bd_addr.address, &device_type) && 119586f97eda524568f2d264186844450db5e56dac36Matthew Xie device_type != BT_DEVICE_TYPE_BREDR) 119686f97eda524568f2d264186844450db5e56dac36Matthew Xie { 1197306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach BTA_DmAddBleDevice(p_cb->bd_addr.address, addr_type, device_type); 119886f97eda524568f2d264186844450db5e56dac36Matthew Xie } 1199306bddadeec993013cfed6bf0e41a1a47a69367cAndre Eisenbach 12006ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji // Check for background connections 1201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (!p_cb->is_direct) 1202a1e649b2566040d1f9e620753f18ca1fc088c64fAndre Eisenbach { 12036ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji // Check for privacy 1.0 and 1.1 controller and do not start background 12046ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji // connection if RPA offloading is not supported, since it will not 12056ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji // connect after change of random address 12066ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji if (!controller_get_interface()->supports_ble_privacy() && 12076ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji (p_cb->addr_type == BLE_ADDR_RANDOM) && 12086ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji 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: 12337cb76b4277d603e5abfe7f9222a45ebdf7a715e2Satya 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 1374533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski case BTIF_GATTC_GET_GATT_DB: 1375533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski { 1376533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski btgatt_db_element_t *db = NULL; 1377533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski int count = 0; 1378533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski BTA_GATTC_GetGattDb(p_cb->conn_id, &db, &count); 1379533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski 1380533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski HAL_CBACK(bt_gatt_callbacks, client->get_gatt_db_cb, 1381533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski p_cb->conn_id, db, count); 1382533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski osi_free(db); 1383533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski break; 1384533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski } 1385533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski 1386ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_READ_CHAR: 1387ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id); 13885f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id); 1389ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1390ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_ReadCharacteristic(p_cb->conn_id, &in_char_id, p_cb->auth_req); 1391ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1392ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1393ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_READ_CHAR_DESCR: 1394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&in_char_descr_id.char_id.srvc_id, &p_cb->srvc_id); 13955f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_descr_id.char_id.char_id, &p_cb->char_id); 13965f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_descr_id.descr_id, &p_cb->descr_id); 1397ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1398ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_ReadCharDescr(p_cb->conn_id, &in_char_descr_id, p_cb->auth_req); 1399ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1400ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_WRITE_CHAR: 1402ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id); 14035f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id); 1404ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1405ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_WriteCharValue(p_cb->conn_id, &in_char_id, 1406ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->write_type, 1407ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->len, 1408ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->value, 1409ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->auth_req); 1410ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1411ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1412ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_WRITE_CHAR_DESCR: 1413ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&in_char_descr_id.char_id.srvc_id, &p_cb->srvc_id); 14145f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_descr_id.char_id.char_id, &p_cb->char_id); 14155f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_descr_id.descr_id, &p_cb->descr_id); 1416ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta descr_val.len = p_cb->len; 1418ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta descr_val.p_value = p_cb->value; 1419ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1420ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_WriteCharDescr(p_cb->conn_id, &in_char_descr_id, 1421ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->write_type, &descr_val, 1422ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->auth_req); 1423ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1424ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1425ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_EXECUTE_WRITE: 1426ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_ExecuteWrite(p_cb->conn_id, p_cb->action); 1427ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1428ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1429ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_REG_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_RegisterForNotifications(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, 1, 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_DEREG_FOR_NOTIFICATION: 1442ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_srvc_id(&in_char_id.srvc_id, &p_cb->srvc_id); 14435f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btif_to_bta_gatt_id(&in_char_id.char_id, &p_cb->char_id); 1444ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1445ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta status = BTA_GATTC_DeregisterForNotifications(p_cb->client_if, 1446ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->bd_addr.address, &in_char_id); 1447ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1448ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta HAL_CBACK(bt_gatt_callbacks, client->register_for_notification_cb, 1449ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->conn_id, 0, status, &p_cb->srvc_id, 1450ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta &p_cb->char_id); 1451ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1452ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1453ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_REFRESH: 1454ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTA_GATTC_Refresh(p_cb->bd_addr.address); 1455ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1456ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1457ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case BTIF_GATTC_READ_RSSI: 1458ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta rssi_request_client_if = p_cb->client_if; 1459ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BTM_ReadRSSI (p_cb->bd_addr.address, (tBTM_CMPL_CB *)btm_read_rssi_cb); 1460ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1461ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 14621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji case BTIF_GATTC_SCAN_FILTER_PARAM_SETUP: 14631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji { 146452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param; 146516fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (1 == p_adv_filt_cb->adv_filt_param.dely_mode) 14661acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji BTA_DmBleTrackAdvertiser(p_adv_filt_cb->client_if, bta_track_adv_event_cb); 14671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTA_DmBleScanFilterSetup(p_adv_filt_cb->action, p_adv_filt_cb->filt_index, 14681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji &p_adv_filt_cb->adv_filt_param, NULL, bta_scan_filt_param_setup_cb, 14691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->client_if); 1470b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 14711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji } 1472b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1473b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach case BTIF_GATTC_SCAN_FILTER_CONFIG: 1474b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach { 147552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param; 1476b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach tBTA_DM_BLE_PF_COND_PARAM cond; 1477b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach memset(&cond, 0, sizeof(cond)); 1478b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 14791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji switch (p_adv_filt_cb->filt_type) 1480b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach { 1481b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach case BTA_DM_BLE_PF_ADDR_FILTER: // 0 14821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji bdcpy(cond.target_addr.bda, p_adv_filt_cb->bd_addr.address); 14831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.target_addr.type = p_adv_filt_cb->addr_type; 14841a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action, 14851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index, 14861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji &cond, bta_scan_filt_cfg_cb, 14871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->client_if); 1488b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1489b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1490b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach case BTA_DM_BLE_PF_SRVC_DATA: // 1 14911a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action, 14921a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index, 14931a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji NULL, bta_scan_filt_cfg_cb, p_adv_filt_cb->client_if); 1494b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1495b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1496b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach case BTA_DM_BLE_PF_SRVC_UUID: // 2 1497b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach { 1498b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach tBTA_DM_BLE_PF_COND_MASK uuid_mask; 1499b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1500b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach cond.srvc_uuid.p_target_addr = NULL; 1501b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach cond.srvc_uuid.cond_logic = BTA_DM_BLE_PF_LOGIC_AND; 15021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_to_bta_uuid(&cond.srvc_uuid.uuid, &p_adv_filt_cb->uuid); 1503b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1504b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach cond.srvc_uuid.p_uuid_mask = NULL; 15051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji if (p_adv_filt_cb->has_mask) 1506b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach { 15071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_to_bta_uuid_mask(&uuid_mask, &p_adv_filt_cb->uuid_mask); 1508b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach cond.srvc_uuid.p_uuid_mask = &uuid_mask; 1509b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach } 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_SRVC_SOL_UUID: // 3 1518b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach { 1519b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach cond.solicitate_uuid.p_target_addr = NULL; 1520b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach cond.solicitate_uuid.cond_logic = BTA_DM_BLE_PF_LOGIC_AND; 15211a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_to_bta_uuid(&cond.solicitate_uuid.uuid, &p_adv_filt_cb->uuid); 15221a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action, 15231a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index, 15241a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji &cond, bta_scan_filt_cfg_cb, 15251a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->client_if); 1526b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1527b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach } 1528b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1529b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach case BTA_DM_BLE_PF_LOCAL_NAME: // 4 1530b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach { 15311a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.local_name.data_len = p_adv_filt_cb->value_len; 15321a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.local_name.p_data = p_adv_filt_cb->value; 15331a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action, 15341a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index, 15351a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji &cond, bta_scan_filt_cfg_cb, 15361a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->client_if); 1537b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1538b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach } 1539b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1540b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach case BTA_DM_BLE_PF_MANU_DATA: // 5 1541b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach { 15421a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.manu_data.company_id = p_adv_filt_cb->conn_id; 15431a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.manu_data.company_id_mask = p_adv_filt_cb->company_id_mask; 15441a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.manu_data.data_len = p_adv_filt_cb->value_len; 15451a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.manu_data.p_pattern = p_adv_filt_cb->value; 15461a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.manu_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); 1551b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1552b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach } 1553b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 15541a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji case BTA_DM_BLE_PF_SRVC_DATA_PATTERN: //6 15551a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji { 15561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.srvc_data.data_len = p_adv_filt_cb->value_len; 15571a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.srvc_data.p_pattern = p_adv_filt_cb->value; 15581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji cond.srvc_data.p_pattern_mask = p_adv_filt_cb->value_mask; 15591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTA_DmBleCfgFilterCondition(p_adv_filt_cb->action, 15601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->filt_type, p_adv_filt_cb->filt_index, 15611a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji &cond, bta_scan_filt_cfg_cb, 15621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->client_if); 15631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji break; 15641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji } 15651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 1566b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach default: 1567db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_ERROR(LOG_TAG, "%s: Unknown filter type (%d)!", __FUNCTION__, p_cb->action); 1568b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1569b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach } 1570b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1571b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach } 1572b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 1573b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach case BTIF_GATTC_SCAN_FILTER_CLEAR: 1574b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach { 157552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param; 1576b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach BTA_DmBleCfgFilterCondition(BTA_DM_BLE_SCAN_COND_CLEAR, BTA_DM_BLE_PF_TYPE_ALL, 15776e2d9db5148176d88d7f48c3b2ad5b27c57ca14dSatya Calloji p_adv_filt_cb->filt_index, NULL, bta_scan_filt_cfg_cb, 15786e2d9db5148176d88d7f48c3b2ad5b27c57ca14dSatya Calloji p_adv_filt_cb->client_if); 15791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji break; 15801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji } 15811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 15821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji case BTIF_GATTC_SCAN_FILTER_ENABLE: 15831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji { 158452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_adv_filter_cb_t *p_adv_filt_cb = (btgatt_adv_filter_cb_t *) p_param; 15851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTA_DmEnableScanFilter(p_adv_filt_cb->action, bta_scan_filt_status_cb, 15861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji p_adv_filt_cb->client_if); 1587b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach break; 1588b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach } 1589b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 15905c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach case BTIF_GATTC_LISTEN: 1591602162a13c6ed8abae53aee6deeda48b79f30911Zhihai Xu#if (defined(BLE_PERIPHERAL_MODE_SUPPORT) && (BLE_PERIPHERAL_MODE_SUPPORT == TRUE)) 15925c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach BTA_GATTC_Listen(p_cb->client_if, p_cb->start, NULL); 1593eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach#else 1594a4611ac05f07360785adcff8640da01a3894e4c5Andre Eisenbach BTA_GATTC_Broadcast(p_cb->client_if, p_cb->start); 1595eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach#endif 15965c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach break; 15975c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach 15985c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach case BTIF_GATTC_SET_ADV_DATA: 15995c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach { 16000d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge const btif_adv_data_t *p_adv_data = (btif_adv_data_t*) p_param; 16010d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge const int cbindex = CLNT_IF_IDX; 16020d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge if (cbindex >= 0 && btif_gattc_copy_datacb(cbindex, p_adv_data, false)) 1603a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 1604a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 1605a6ce7751d84218c193eb90d390aef23217b1737eWei Wang if (!p_adv_data->set_scan_rsp) 1606a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 1607a6ce7751d84218c193eb90d390aef23217b1737eWei Wang BTA_DmBleSetAdvConfig(p_multi_adv_data_cb->inst_cb[cbindex].mask, 1608a6ce7751d84218c193eb90d390aef23217b1737eWei Wang &p_multi_adv_data_cb->inst_cb[cbindex].data, bta_gattc_set_adv_data_cback); 1609a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 1610a6ce7751d84218c193eb90d390aef23217b1737eWei Wang else 1611a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 1612a6ce7751d84218c193eb90d390aef23217b1737eWei Wang BTA_DmBleSetScanRsp(p_multi_adv_data_cb->inst_cb[cbindex].mask, 1613a6ce7751d84218c193eb90d390aef23217b1737eWei Wang &p_multi_adv_data_cb->inst_cb[cbindex].data, bta_gattc_set_adv_data_cback); 1614a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 1615a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 16160d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge else 16170d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge { 16180d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge BTIF_TRACE_ERROR("%s:%s: failed to get instance data cbindex: %d", 16190d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge __func__, "BTIF_GATTC_SET_ADV_DATA", cbindex); 16200d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge } 16210d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge break; 1622a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 1623a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 1624a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTIF_GATTC_ADV_INSTANCE_ENABLE: 1625a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 162652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param; 162716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 162816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham int cbindex = -1, arrindex = -1; 162916fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 163016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham arrindex = btif_multi_adv_add_instid_map(p_inst_cb->client_if,INVALID_ADV_INST, true); 163116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (arrindex >= 0) 163216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham cbindex = btif_gattc_obtain_idx_for_datacb(p_inst_cb->client_if, CLNT_IF_IDX); 163316fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham 163416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (cbindex >= 0 && arrindex >= 0) 1635a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 1636a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 1637a6ce7751d84218c193eb90d390aef23217b1737eWei Wang memcpy(&p_multi_adv_data_cb->inst_cb[cbindex].param, 1638a6ce7751d84218c193eb90d390aef23217b1737eWei Wang &p_inst_cb->param, sizeof(tBTA_BLE_ADV_PARAMS)); 1639cf32e8d4e0cabac8432a3c6c6d8ece27d6067770Andre Eisenbach p_multi_adv_data_cb->inst_cb[cbindex].timeout_s = p_inst_cb->timeout_s; 164016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham BTIF_TRACE_DEBUG("%s, client_if value: %d", __FUNCTION__, 164116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham p_multi_adv_data_cb->clntif_map[arrindex + arrindex]); 1642a6ce7751d84218c193eb90d390aef23217b1737eWei Wang BTA_BleEnableAdvInstance(&(p_multi_adv_data_cb->inst_cb[cbindex].param), 1643a6ce7751d84218c193eb90d390aef23217b1737eWei Wang bta_gattc_multi_adv_cback, 164416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham &(p_multi_adv_data_cb->clntif_map[arrindex + arrindex])); 1645a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 16465c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach else 164716fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham { 164816fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham /* let the error propagate up from BTA layer */ 1649e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("%s invalid index in BTIF_GATTC_ENABLE_ADV",__FUNCTION__); 165016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham BTA_BleEnableAdvInstance(&p_inst_cb->param, bta_gattc_multi_adv_cback, NULL); 165116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham } 1652a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 1653a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 1654eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach 1655a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTIF_GATTC_ADV_INSTANCE_UPDATE: 1656a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 165752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param; 1658a6ce7751d84218c193eb90d390aef23217b1737eWei Wang int inst_id = btif_multi_adv_instid_for_clientif(p_inst_cb->client_if); 1659a6ce7751d84218c193eb90d390aef23217b1737eWei Wang int cbindex = btif_gattc_obtain_idx_for_datacb(p_inst_cb->client_if, CLNT_IF_IDX); 166016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (inst_id >= 0 && cbindex >= 0 && NULL != p_inst_cb) 1661a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 1662a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btgatt_multi_adv_common_data *p_multi_adv_data_cb = btif_obtain_multi_adv_data_cb(); 1663a6ce7751d84218c193eb90d390aef23217b1737eWei Wang memcpy(&p_multi_adv_data_cb->inst_cb[cbindex].param, &p_inst_cb->param, 1664a6ce7751d84218c193eb90d390aef23217b1737eWei Wang sizeof(tBTA_BLE_ADV_PARAMS)); 1665a6ce7751d84218c193eb90d390aef23217b1737eWei Wang BTA_BleUpdateAdvInstParam((UINT8)inst_id, 1666a6ce7751d84218c193eb90d390aef23217b1737eWei Wang &(p_multi_adv_data_cb->inst_cb[cbindex].param)); 1667a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 1668a6ce7751d84218c193eb90d390aef23217b1737eWei Wang else 1669e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("%s invalid index in BTIF_GATTC_UPDATE_ADV", __FUNCTION__); 1670a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 1671a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 1672a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 1673a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTIF_GATTC_ADV_INSTANCE_SET_DATA: 1674a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 167552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_adv_data_t *p_adv_data = (btif_adv_data_t*) p_param; 1676a6ce7751d84218c193eb90d390aef23217b1737eWei Wang int cbindex = btif_gattc_obtain_idx_for_datacb(p_adv_data->client_if, CLNT_IF_IDX); 1677a6ce7751d84218c193eb90d390aef23217b1737eWei Wang int inst_id = btif_multi_adv_instid_for_clientif(p_adv_data->client_if); 16780d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge if (inst_id >= 0 && cbindex >= 0 && btif_gattc_copy_datacb(cbindex, p_adv_data, true)) 1679eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach { 16800d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge btgatt_multi_adv_common_data *p_multi_adv_data_cb = 16810d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge btif_obtain_multi_adv_data_cb(); 16820d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge BTA_BleCfgAdvInstData( 16830d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge (UINT8)inst_id, 1684d4c103624b3d7672110abeb753ed79113ee48989Ian Coolidge p_adv_data->set_scan_rsp, 16850d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge p_multi_adv_data_cb->inst_cb[cbindex].mask, 16860d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge &p_multi_adv_data_cb->inst_cb[cbindex].data); 16870d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge } 16880d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge else 16890d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge { 16900d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge BTIF_TRACE_ERROR( 16910d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge "%s:%s: failed to get invalid instance data: inst_id:%d " 16920d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge "cbindex:%d", 16930d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge __func__, "BTIF_GATTC_ADV_INSTANCE_SET_DATA", inst_id, cbindex); 1694eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach } 1695a6ce7751d84218c193eb90d390aef23217b1737eWei Wang break; 1696a6ce7751d84218c193eb90d390aef23217b1737eWei Wang } 1697a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 1698a6ce7751d84218c193eb90d390aef23217b1737eWei Wang case BTIF_GATTC_ADV_INSTANCE_DISABLE: 1699a6ce7751d84218c193eb90d390aef23217b1737eWei Wang { 170052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_multi_adv_inst_cb *p_inst_cb = (btgatt_multi_adv_inst_cb*) p_param; 1701a6ce7751d84218c193eb90d390aef23217b1737eWei Wang int inst_id = btif_multi_adv_instid_for_clientif(p_inst_cb->client_if); 170216fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (inst_id >=0) 1703a6ce7751d84218c193eb90d390aef23217b1737eWei Wang BTA_BleDisableAdvInstance((UINT8)inst_id); 1704a6ce7751d84218c193eb90d390aef23217b1737eWei Wang else 1705e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati BTIF_TRACE_ERROR("%s invalid instance ID in BTIF_GATTC_DISABLE_ADV",__FUNCTION__); 17065c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach break; 17075c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach } 1708a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 17099426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach case BTIF_GATTC_CONFIGURE_MTU: 17109426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach BTA_GATTC_ConfigureMTU(p_cb->conn_id, p_cb->len); 17119426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach break; 17125c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach 171352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach case BTIF_GATTC_CONN_PARAM_UPDT: 171452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach { 171552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_conn_param_cb_t *p_conn_param_cb = (btif_conn_param_cb_t*) p_param; 171652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach if (BTA_DmGetConnectionState(p_conn_param_cb->bd_addr.address)) 171752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach { 171852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach BTA_DmBleUpdateConnectionParams(p_conn_param_cb->bd_addr.address, 171952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach p_conn_param_cb->min_interval, p_conn_param_cb->max_interval, 172052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach p_conn_param_cb->latency, p_conn_param_cb->timeout); 172152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach } else { 172252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach BTA_DmSetBlePrefConnParams(p_conn_param_cb->bd_addr.address, 172352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach p_conn_param_cb->min_interval, p_conn_param_cb->max_interval, 172452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach p_conn_param_cb->latency, p_conn_param_cb->timeout); 172552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach } 172652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach break; 172752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach } 172852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach 17297d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham case BTIF_GATTC_SET_SCAN_PARAMS: 1730979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach { 1731979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach BTA_DmSetBleScanParams(p_cb->client_if, p_cb->scan_interval, p_cb->scan_window, 1732979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach BTM_BLE_SCAN_MODE_ACTI, bta_scan_param_setup_cb); 17337d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham break; 1734979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach } 17357d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham 1736c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTIF_GATTC_CONFIG_STORAGE_PARAMS: 1737c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 173852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param; 1739c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTA_DmBleSetStorageParams(p_scan_track_cb->batch_scan_full_max, 1740c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji p_scan_track_cb->batch_scan_trunc_max, p_scan_track_cb->batch_scan_notify_threshold, 1741c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bta_batch_scan_setup_cb, bta_batch_scan_threshold_cb, bta_batch_scan_reports_cb, 174252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach (tBTA_DM_BLE_REF_VALUE) p_scan_track_cb->client_if); 1743c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 1744c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 1745c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 1746c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTIF_GATTC_ENABLE_BATCH_SCAN: 1747c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 174852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param; 1749c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTA_DmBleEnableBatchScan(p_scan_track_cb->scan_mode, p_scan_track_cb->scan_interval, 1750c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji p_scan_track_cb->scan_window, p_scan_track_cb->discard_rule, 1751c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji p_scan_track_cb->addr_type, p_scan_track_cb->client_if); 1752c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 1753c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 1754c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 1755c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTIF_GATTC_DISABLE_BATCH_SCAN: 1756c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 175752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param; 1758c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTA_DmBleDisableBatchScan(p_scan_track_cb->client_if); 1759c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 1760c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 1761c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 1762c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji case BTIF_GATTC_READ_BATCH_SCAN_REPORTS: 1763c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji { 176452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btgatt_batch_track_cb_t *p_scan_track_cb = (btgatt_batch_track_cb_t *) p_param; 1765c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji BTA_DmBleReadScanReports(p_scan_track_cb->scan_mode, p_scan_track_cb->client_if); 1766c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji break; 1767c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 1768c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 1769ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta default: 1770db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_ERROR(LOG_TAG, "%s: Unknown event (%d)!", __FUNCTION__, event); 1771ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1772ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 17730d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge 17740d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge btgattc_free_event_data(event, p_param); 1775ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1776ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1777ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 1778ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Client API Functions 1779ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/ 1780ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1781ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_register_app(bt_uuid_t *uuid) 1782ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1783ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1784ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1785ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.uuid, uuid, sizeof(bt_uuid_t)); 1786ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REGISTER_APP, 1787ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1788ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1789ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1790ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_unregister_app(int client_if ) 1791ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1792ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1793ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1794ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.client_if = (uint8_t) client_if; 1795ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_UNREGISTER_APP, 1796ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1797ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1798ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 17997d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadhamstatic bt_status_t btif_gattc_scan( bool start ) 1800ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1801ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1802ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1803ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, start ? BTIF_GATTC_SCAN_START : BTIF_GATTC_SCAN_STOP, 1804ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1805ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1806ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 18077fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Battastatic bt_status_t btif_gattc_open(int client_if, const bt_bdaddr_t *bd_addr, 18087fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta bool is_direct,int transport) 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.is_direct = is_direct ? 1 : 0; 18147fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta btif_cb.transport = (btgatt_transport_t)transport; 1815ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(btif_cb.bd_addr.address, bd_addr->address); 1816ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_OPEN, 1817ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1818ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1819ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1820ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_close( int client_if, const bt_bdaddr_t *bd_addr, int conn_id) 1821ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1822ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1823ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1824ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.client_if = (uint8_t) client_if; 1825ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 1826ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(btif_cb.bd_addr.address, bd_addr->address); 1827ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CLOSE, 1828ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1829ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1830ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 18315c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachstatic bt_status_t btif_gattc_listen(int client_if, bool start) 18325c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{ 18335c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach CHECK_BTGATT_INIT(); 18345c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach btif_gattc_cb_t btif_cb; 18355c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach btif_cb.client_if = (uint8_t) client_if; 18365c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach btif_cb.start = start ? 1 : 0; 18375c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_LISTEN, 18385c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 18395c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach} 18405c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach 18410d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidgestatic void btif_gattc_deep_copy(UINT16 event, char *p_dest, char *p_src) 18420d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge{ 18430d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge switch (event) 18440d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge { 18450d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge case BTIF_GATTC_ADV_INSTANCE_SET_DATA: 18460d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge case BTIF_GATTC_SET_ADV_DATA: 18470d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge { 18480d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge const btif_adv_data_t *src = (btif_adv_data_t*) p_src; 18490d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge btif_adv_data_t *dst = (btif_adv_data_t*) p_dest; 18503f06e14fddc0e674347ae28ea4a25218d4ce1d2aPavlin Radoslavov maybe_non_aligned_memcpy(dst, src, sizeof(*src)); 18510d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge 18520d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge if (src->p_manufacturer_data) 18530d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge { 1854cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov dst->p_manufacturer_data = osi_malloc(src->manufacturer_len); 18550d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge memcpy(dst->p_manufacturer_data, src->p_manufacturer_data, 18560d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge src->manufacturer_len); 18570d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge } 18580d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge 18590d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge if (src->p_service_data) 18600d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge { 1861cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov dst->p_service_data = osi_malloc(src->service_data_len); 18620d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge memcpy(dst->p_service_data, src->p_service_data, src->service_data_len); 18630d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge } 18640d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge 18650d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge if (src->p_service_uuid) 18660d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge { 1867cceb430489a70add1b996d54289867c17f4ac0fdPavlin Radoslavov dst->p_service_uuid = osi_malloc(src->service_uuid_len); 18680d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge memcpy(dst->p_service_uuid, src->p_service_uuid, src->service_uuid_len); 18690d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge } 18700d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge break; 18710d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge } 18720d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge 18730d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge default: 18740d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge ASSERTC(false, "Unhandled deep copy", event); 18750d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge break; 18760d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge } 18770d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge} 18780d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge 18795c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbachstatic bt_status_t btif_gattc_set_adv_data(int client_if, bool set_scan_rsp, bool include_name, 18805c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach bool include_txpower, int min_interval, int max_interval, int appearance, 1881eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach uint16_t manufacturer_len, char* manufacturer_data, 1882eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach uint16_t service_data_len, char* service_data, 1883eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach uint16_t service_uuid_len, char* service_uuid) 18845c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach{ 18855c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach CHECK_BTGATT_INIT(); 1886a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_adv_data_t adv_data; 1887eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach 1888a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_gattc_adv_data_packager(client_if, set_scan_rsp, include_name, 1889a6ce7751d84218c193eb90d390aef23217b1737eWei Wang include_txpower, min_interval, max_interval, appearance, manufacturer_len, 1890a6ce7751d84218c193eb90d390aef23217b1737eWei Wang manufacturer_data, service_data_len, service_data, service_uuid_len, service_uuid, 1891a6ce7751d84218c193eb90d390aef23217b1737eWei Wang &adv_data); 1892eeeac99328c23304ab24698331b6600f3b545700Andre Eisenbach 18930d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge bt_status_t status = btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SET_ADV_DATA, 18940d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge (char*) &adv_data, sizeof(adv_data), btif_gattc_deep_copy); 18950d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge btif_gattc_adv_data_cleanup(&adv_data); 1896a6ce7751d84218c193eb90d390aef23217b1737eWei Wang return status; 18975c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach} 18985c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach 1899ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_refresh( int client_if, const bt_bdaddr_t *bd_addr ) 1900ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1901ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1902ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1903ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.client_if = (uint8_t) client_if; 1904ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(btif_cb.bd_addr.address, bd_addr->address); 1905ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REFRESH, 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_search_service(int conn_id, bt_uuid_t *filter_uuid ) 1910ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1911ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1912ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1913ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 1914ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.search_all = filter_uuid ? 0 : 1; 1915ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (filter_uuid) 1916ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.uuid, filter_uuid, sizeof(bt_uuid_t)); 1917ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SEARCH_SERVICE, 1918ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1919ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1920ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1921ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_get_characteristic( int conn_id 19225f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach , btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *start_char_id) 1923ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1924ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1925ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1926ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 1927ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 1928ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (start_char_id) 1929ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 19305f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.char_id, start_char_id, sizeof(btgatt_gatt_id_t)); 1931ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_NEXT_CHAR, 1932ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1933ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1934ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_FIRST_CHAR, 1935ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1936ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1937ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1938ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_get_descriptor( int conn_id 19395f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach , btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id 19405f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach , btgatt_gatt_id_t *start_descr_id) 1941ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1942ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1943ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1944ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 1945ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 19465f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t)); 1947ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (start_descr_id) 1948ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 19495f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.descr_id, start_descr_id, sizeof(btgatt_gatt_id_t)); 1950ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_NEXT_CHAR_DESCR, 1951ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1952ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1953ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1954ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_FIRST_CHAR_DESCR, 1955ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1956ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1957ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1958ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_get_included_service(int conn_id, btgatt_srvc_id_t *srvc_id, 1959ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_srvc_id_t *start_incl_srvc_id) 1960ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1961ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1962ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1963ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 1964ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 1965ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (start_incl_srvc_id) 1966ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1967ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.incl_srvc_id, start_incl_srvc_id, sizeof(btgatt_srvc_id_t)); 1968ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_NEXT_INCL_SERVICE, 1969ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1970ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1971ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_FIRST_INCL_SERVICE, 1972ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1973ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1974ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1975533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowskistatic bt_status_t btif_gattc_get_gatt_db(int conn_id) 1976533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski{ 1977533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski CHECK_BTGATT_INIT(); 1978533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski btif_gattc_cb_t btif_cb; 1979533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski btif_cb.conn_id = (uint16_t) conn_id; 1980533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski 1981533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_GET_GATT_DB, 1982533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1983533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski} 1984533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski 1985533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski 1986ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_read_char(int conn_id, btgatt_srvc_id_t* srvc_id, 19875f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t* char_id, int auth_req ) 1988ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1989ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 1990ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 1991ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 1992ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.auth_req = (uint8_t) auth_req; 1993ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 19945f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t)); 1995ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_CHAR, 1996ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 1997ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1998ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1999ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_read_char_descr(int conn_id, btgatt_srvc_id_t* srvc_id, 20005f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t* char_id, 20015f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t* descr_id, 2002ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int auth_req ) 2003ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2004ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 2005ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 2006ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 2007ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.auth_req = (uint8_t) auth_req; 2008ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 20095f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t)); 20105f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.descr_id, descr_id, sizeof(btgatt_gatt_id_t)); 2011ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_CHAR_DESCR, 2012ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 2013ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2014ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2015ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_write_char(int conn_id, btgatt_srvc_id_t* srvc_id, 20165f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t* char_id, int write_type, 2017ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int len, int auth_req, char* p_value) 2018ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2019ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 2020ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 2021ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 2022ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.auth_req = (uint8_t) auth_req; 2023ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.write_type = (uint8_t) write_type; 2024ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.len = len > BTGATT_MAX_ATTR_LEN ? BTGATT_MAX_ATTR_LEN : len; 2025ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 20265f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t)); 2027ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(btif_cb.value, p_value, btif_cb.len); 2028ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_WRITE_CHAR, 2029ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 2030ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2031ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2032ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_write_char_descr(int conn_id, btgatt_srvc_id_t* srvc_id, 20335f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t* char_id, 20345f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t* descr_id, 2035ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int write_type, int len, int auth_req, 2036ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta char* p_value) 2037ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2038ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 2039ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 2040ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 2041ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.auth_req = (uint8_t) auth_req; 2042ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.write_type = (uint8_t) write_type; 2043ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.len = len > BTGATT_MAX_ATTR_LEN ? BTGATT_MAX_ATTR_LEN : len; 2044ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 20455f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t)); 20465f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.descr_id, descr_id, sizeof(btgatt_gatt_id_t)); 2047ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(btif_cb.value, p_value, btif_cb.len); 2048ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_WRITE_CHAR_DESCR, 2049ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 2050ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2051ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2052ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_execute_write(int conn_id, int execute) 2053ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2054ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 2055ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 2056ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.conn_id = (uint16_t) conn_id; 2057ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.action = (uint8_t) execute; 2058ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_EXECUTE_WRITE, 2059ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 2060ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2061ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2062ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_reg_for_notification(int client_if, const bt_bdaddr_t *bd_addr, 2063ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_srvc_id_t* srvc_id, 20645f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t* char_id) 2065ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2066ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 2067ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 2068ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.client_if = (uint8_t) client_if; 2069ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(btif_cb.bd_addr.address, bd_addr->address); 2070ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 20715f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t)); 2072ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_REG_FOR_NOTIFICATION, 2073ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 2074ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2075ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2076ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_dereg_for_notification(int client_if, const bt_bdaddr_t *bd_addr, 2077ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btgatt_srvc_id_t* srvc_id, 20785f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach btgatt_gatt_id_t* char_id) 2079ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2080ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 2081ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 2082ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.client_if = (uint8_t) client_if; 2083ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(btif_cb.bd_addr.address, bd_addr->address); 2084ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(&btif_cb.srvc_id, srvc_id, sizeof(btgatt_srvc_id_t)); 20855f9c140d094ebf4a269cdc6ae083900bf25f7faeAndre Eisenbach memcpy(&btif_cb.char_id, char_id, sizeof(btgatt_gatt_id_t)); 2086ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_DEREG_FOR_NOTIFICATION, 2087ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 2088ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2089ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2090ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_read_remote_rssi(int client_if, const bt_bdaddr_t *bd_addr) 2091ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2092ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta CHECK_BTGATT_INIT(); 2093ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_cb_t btif_cb; 2094ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_cb.client_if = (uint8_t) client_if; 2095ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bdcpy(btif_cb.bd_addr.address, bd_addr->address); 2096ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_RSSI, 2097ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 2098ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2099ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 21009426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbachstatic bt_status_t btif_gattc_configure_mtu(int conn_id, int mtu) 21019426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach{ 21029426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach CHECK_BTGATT_INIT(); 21039426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach btif_gattc_cb_t btif_cb; 21049426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach btif_cb.conn_id = conn_id; 21059426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach btif_cb.len = mtu; // Re-use len field 21069426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONFIGURE_MTU, 21079426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 21089426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach} 21099426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach 211052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbachstatic bt_status_t btif_gattc_conn_parameter_update(const bt_bdaddr_t *bd_addr, int min_interval, 211152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach int max_interval, int latency, int timeout) 211252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach{ 211352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach CHECK_BTGATT_INIT(); 211452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_conn_param_cb_t btif_cb; 211552a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_cb.min_interval = min_interval; 211652a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_cb.max_interval = max_interval; 211752a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_cb.latency = latency; 211852a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_cb.timeout = timeout; 211952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach bdcpy(btif_cb.bd_addr.address, bd_addr->address); 212052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONN_PARAM_UPDT, 212152a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach (char*) &btif_cb, sizeof(btif_conn_param_cb_t), NULL); 212252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach} 212352a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach 2124f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Callojistatic bt_status_t btif_gattc_scan_filter_param_setup(btgatt_filt_param_setup_t 2125f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji filt_param) 2126b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{ 2127b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach CHECK_BTGATT_INIT(); 21281a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("%s", __FUNCTION__); 21291a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t btif_filt_cb; 21306cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t)); 2131f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.client_if = filt_param.client_if; 2132f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.action = filt_param.action; 2133f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.filt_index = filt_param.filt_index; 2134f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.feat_seln = filt_param.feat_seln; 2135f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.list_logic_type = filt_param.list_logic_type; 2136f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.filt_logic_type = filt_param.filt_logic_type; 2137f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.rssi_high_thres = filt_param.rssi_high_thres; 2138f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.rssi_low_thres = filt_param.rssi_low_thres; 2139f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.dely_mode = filt_param.dely_mode; 2140f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.found_timeout = filt_param.found_timeout; 2141f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.lost_timeout = filt_param.lost_timeout; 2142f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.found_timeout_cnt = filt_param.found_timeout_cnt; 2143f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji btif_filt_cb.adv_filt_param.num_of_tracking_entries = filt_param.num_of_tracking_entries; 21441a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_PARAM_SETUP, 21451a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL); 2146b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach} 2147b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 21481a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_add_remove(int client_if, int action, 21491a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji int filt_type, int filt_index, int company_id, 21501a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji int company_id_mask, const bt_uuid_t *p_uuid, 21511a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji const bt_uuid_t *p_uuid_mask, const bt_bdaddr_t *bd_addr, 21521a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji char addr_type, int data_len, char* p_data, int mask_len, 21531a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji char* p_mask) 2154b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{ 2155b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach CHECK_BTGATT_INIT(); 21561a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t btif_filt_cb; 21576cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t)); 21581a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("%s, %d, %d", __FUNCTION__, action, filt_type); 21591a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 21601a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji /* If data is passed, both mask and data have to be the same length */ 216116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (data_len != mask_len && NULL != p_data && NULL != p_mask) 21621a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji return BT_STATUS_PARM_INVALID; 21631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 21641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.client_if = client_if; 21651a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.action = action; 21661a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.filt_index = filt_index; 21671a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.filt_type = filt_type; 21681a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.conn_id = company_id; 21691a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.company_id_mask = company_id_mask ? company_id_mask : 0xFFFF; 217016fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (bd_addr) 217116fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham bdcpy(btif_filt_cb.bd_addr.address, bd_addr->address); 21721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 21731a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.addr_type = addr_type; 21741a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.has_mask = (p_uuid_mask != NULL); 2175b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 2176b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach if (p_uuid != NULL) 21771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji memcpy(&btif_filt_cb.uuid, p_uuid, sizeof(bt_uuid_t)); 2178b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach if (p_uuid_mask != NULL) 21791a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji memcpy(&btif_filt_cb.uuid_mask, p_uuid_mask, sizeof(bt_uuid_t)); 21801a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji if (p_data != NULL && data_len != 0) 21811a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji { 21821a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji memcpy(btif_filt_cb.value, p_data, data_len); 21831a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.value_len = data_len; 21841a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji memcpy(btif_filt_cb.value_mask, p_mask, mask_len); 21851a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.value_mask_len = mask_len; 21861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji } 2187b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_CONFIG, 21881a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL); 2189b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach} 2190b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 21911a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_clear(int client_if, int filt_index) 2192b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach{ 2193b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach CHECK_BTGATT_INIT(); 21941a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("%s, %d", __FUNCTION__, filt_index); 21951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 21961a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t btif_filt_cb; 21976cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t)); 21981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.client_if = client_if; 21991a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.filt_index = filt_index; 22001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.action = BTA_DM_BLE_SCAN_COND_CLEAR; 22011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_CONFIG, 22021a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL); 22031a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji} 22041a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 22051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Callojistatic bt_status_t btif_gattc_scan_filter_enable(int client_if, bool enable) 22061a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji{ 22071a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji int action = 0; 22081a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji CHECK_BTGATT_INIT(); 22091a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji BTIF_TRACE_DEBUG("%s, %d", __FUNCTION__, enable); 22101a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 22111a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btgatt_adv_filter_cb_t btif_filt_cb; 22126cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t)); 22131a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.client_if = client_if; 221416fe0822ccd3eb6f66d3afd9965d25a0a0cb4c30Prerepa Viswanadham if (true == enable) 22151a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji action = 1; 22161a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_filt_cb.action = action; 22171a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SCAN_FILTER_ENABLE, 22181a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji (char*) &btif_filt_cb, sizeof(btgatt_adv_filter_cb_t), NULL); 2219b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach} 2220b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 2221979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbachstatic bt_status_t btif_gattc_set_scan_parameters(int client_if, int scan_interval, 2222979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach int scan_window) 22237d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham{ 22247d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham CHECK_BTGATT_INIT(); 22257d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham btif_gattc_cb_t btif_cb; 2226979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach btif_cb.client_if = client_if; 22277d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham btif_cb.scan_interval = scan_interval; 22287d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham btif_cb.scan_window = scan_window; 22297d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SET_SCAN_PARAMS, 22307d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL); 22317d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham} 22327d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham 2233ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic int btif_gattc_get_device_type( const bt_bdaddr_t *bd_addr ) 2234ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2235ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int device_type = 0; 2236ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta char bd_addr_str[18] = {0}; 2237ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 22388a6a89faa942aed4f176b0c98402d01c8bdd6aa6Sharvil Nanavati bdaddr_to_string(bd_addr, bd_addr_str, sizeof(bd_addr_str)); 22399d52f88bfc07556cb01ab3055f5b1242c9b467aaSharvil Nanavati if (btif_config_get_int(bd_addr_str, "DevType", &device_type)) 2240ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return device_type; 2241ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return 0; 2242ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2243ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2244a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_enable(int client_if, int min_interval, int max_interval, 22459dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int adv_type, int chnl_map, int tx_power, int timeout_s) 2246a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{ 2247a6ce7751d84218c193eb90d390aef23217b1737eWei Wang CHECK_BTGATT_INIT(); 2248a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btgatt_multi_adv_inst_cb adv_cb; 22496cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb)); 2250a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.client_if = (uint8_t) client_if; 2251a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2252a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.adv_int_min = min_interval; 2253a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.adv_int_max = max_interval; 2254a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.adv_type = adv_type; 2255a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.channel_map = chnl_map; 2256a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.adv_filter_policy = 0; 2257a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.tx_power = tx_power; 22589dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach adv_cb.timeout_s = timeout_s; 2259a6ce7751d84218c193eb90d390aef23217b1737eWei Wang return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_ENABLE, 2260a6ce7751d84218c193eb90d390aef23217b1737eWei Wang (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL); 2261a6ce7751d84218c193eb90d390aef23217b1737eWei Wang} 2262a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2263a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_update(int client_if, int min_interval, int max_interval, 22649dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int adv_type, int chnl_map,int tx_power, int timeout_s) 2265a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{ 2266a6ce7751d84218c193eb90d390aef23217b1737eWei Wang CHECK_BTGATT_INIT(); 2267a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btgatt_multi_adv_inst_cb adv_cb; 22686cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb)); 2269a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.client_if = (uint8_t) client_if; 2270a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2271a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.adv_int_min = min_interval; 2272a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.adv_int_max = max_interval; 2273a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.adv_type = adv_type; 2274a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.channel_map = chnl_map; 2275a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.adv_filter_policy = 0; 2276a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.param.tx_power = tx_power; 22779dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach adv_cb.timeout_s = timeout_s; 2278a6ce7751d84218c193eb90d390aef23217b1737eWei Wang return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_UPDATE, 2279a6ce7751d84218c193eb90d390aef23217b1737eWei Wang (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL); 2280a6ce7751d84218c193eb90d390aef23217b1737eWei Wang} 2281a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2282a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_setdata(int client_if, bool set_scan_rsp, 22839dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach bool include_name, bool incl_txpower, int appearance, 22849dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int manufacturer_len, char* manufacturer_data, 22859dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int service_data_len, char* service_data, 22869dd5a9c11f2022fa9709f0c34f04560c21105152Andre Eisenbach int service_uuid_len, char* service_uuid) 2287a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{ 2288a6ce7751d84218c193eb90d390aef23217b1737eWei Wang CHECK_BTGATT_INIT(); 2289a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2290a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_adv_data_t multi_adv_data_inst; 22910d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge memset(&multi_adv_data_inst, 0, sizeof(multi_adv_data_inst)); 22920d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge 22930d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge const int min_interval = 0; 22940d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge const int max_interval = 0; 2295a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2296a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_gattc_adv_data_packager(client_if, set_scan_rsp, include_name, incl_txpower, 2297a6ce7751d84218c193eb90d390aef23217b1737eWei Wang min_interval, max_interval, appearance, manufacturer_len, manufacturer_data, 2298a6ce7751d84218c193eb90d390aef23217b1737eWei Wang service_data_len, service_data, service_uuid_len, service_uuid, &multi_adv_data_inst); 2299a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 23000d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge bt_status_t status = btif_transfer_context( 23010d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_SET_DATA, 23020d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge (char *)&multi_adv_data_inst, sizeof(multi_adv_data_inst), 23030d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge btif_gattc_deep_copy); 23040d45f25e4102b14d942efa530f0e6a1a6c19787aIan Coolidge btif_gattc_adv_data_cleanup(&multi_adv_data_inst); 2305a6ce7751d84218c193eb90d390aef23217b1737eWei Wang return status; 2306a6ce7751d84218c193eb90d390aef23217b1737eWei Wang} 2307a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2308a6ce7751d84218c193eb90d390aef23217b1737eWei Wangstatic bt_status_t btif_gattc_multi_adv_disable(int client_if) 2309a6ce7751d84218c193eb90d390aef23217b1737eWei Wang{ 2310a6ce7751d84218c193eb90d390aef23217b1737eWei Wang CHECK_BTGATT_INIT(); 2311a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btgatt_multi_adv_inst_cb adv_cb; 23126cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb)); 2313a6ce7751d84218c193eb90d390aef23217b1737eWei Wang adv_cb.client_if = (uint8_t) client_if; 2314a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2315a6ce7751d84218c193eb90d390aef23217b1737eWei Wang return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_DISABLE, 2316a6ce7751d84218c193eb90d390aef23217b1737eWei Wang (char*) &adv_cb, sizeof(btgatt_multi_adv_inst_cb), NULL); 2317a6ce7751d84218c193eb90d390aef23217b1737eWei Wang} 2318a6ce7751d84218c193eb90d390aef23217b1737eWei Wang 2319c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_cfg_storage(int client_if,int batch_scan_full_max, 2320c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji int batch_scan_trunc_max, int batch_scan_notify_threshold) 2321c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 2322c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji CHECK_BTGATT_INIT(); 2323c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btgatt_batch_track_cb_t bt_scan_cb; 23246cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t)); 2325c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.client_if = (uint8_t) client_if; 2326c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.batch_scan_full_max = batch_scan_full_max; 2327c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.batch_scan_trunc_max = batch_scan_trunc_max; 2328c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.batch_scan_notify_threshold = batch_scan_notify_threshold; 2329c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONFIG_STORAGE_PARAMS, 2330c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL); 2331c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 2332c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 2333c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_enb_batch_scan(int client_if,int scan_mode, int scan_interval, 2334c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji int scan_window, int addr_type, int discard_rule) 2335c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 2336c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji CHECK_BTGATT_INIT(); 2337c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btgatt_batch_track_cb_t bt_scan_cb; 23386cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t)); 2339c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.client_if = (uint8_t) client_if; 2340c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.scan_mode = scan_mode; 2341c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.scan_interval = scan_interval; 2342c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.scan_window = scan_window; 2343c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.discard_rule = discard_rule; 2344c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.addr_type = addr_type; 2345c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ENABLE_BATCH_SCAN, 2346c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL); 2347c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 2348c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 2349c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_dis_batch_scan(int client_if) 2350c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 2351c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji CHECK_BTGATT_INIT(); 2352c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btgatt_batch_track_cb_t bt_scan_cb; 23536cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t)); 2354c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.client_if = (uint8_t) client_if; 2355c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_DISABLE_BATCH_SCAN, 2356c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL); 2357c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 2358c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 2359c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Callojistatic bt_status_t btif_gattc_read_batch_scan_reports(int client_if, int scan_mode) 2360c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji{ 2361c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji CHECK_BTGATT_INIT(); 2362c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btgatt_batch_track_cb_t bt_scan_cb; 23636cbb113e7863888f62c49b4b7a89f12a04fe07f4Satya Calloji memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t)); 2364c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.client_if = (uint8_t) client_if; 2365c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji bt_scan_cb.scan_mode = scan_mode; 2366c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_BATCH_SCAN_REPORTS, 2367c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL); 2368c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 2369c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 2370ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaextern bt_status_t btif_gattc_test_command_impl(int command, btgatt_test_params_t* params); 2371ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2372ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic bt_status_t btif_gattc_test_command(int command, btgatt_test_params_t* params) 2373ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 2374ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return btif_gattc_test_command_impl(command, params); 2375ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 2376ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2377ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaconst btgatt_client_interface_t btgattClientInterface = { 2378ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_register_app, 2379ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_unregister_app, 2380ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_scan, 2381ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_open, 2382ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_close, 23835c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach btif_gattc_listen, 2384ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_refresh, 2385ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_search_service, 2386ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_get_included_service, 2387ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_get_characteristic, 2388ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_get_descriptor, 2389ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_read_char, 2390ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_write_char, 2391ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_read_char_descr, 2392ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_write_char_descr, 2393ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_execute_write, 2394ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_reg_for_notification, 2395ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_dereg_for_notification, 2396ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_read_remote_rssi, 23971a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_gattc_scan_filter_param_setup, 23981a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_gattc_scan_filter_add_remove, 2399b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach btif_gattc_scan_filter_clear, 24001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_gattc_scan_filter_enable, 2401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_get_device_type, 24025c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach btif_gattc_set_adv_data, 24039426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach btif_gattc_configure_mtu, 240452a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_gattc_conn_parameter_update, 24057d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham btif_gattc_set_scan_parameters, 2406a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_gattc_multi_adv_enable, 2407a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_gattc_multi_adv_update, 2408a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_gattc_multi_adv_setdata, 2409a6ce7751d84218c193eb90d390aef23217b1737eWei Wang btif_gattc_multi_adv_disable, 2410c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_gattc_cfg_storage, 2411c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_gattc_enb_batch_scan, 2412c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_gattc_dis_batch_scan, 2413c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_gattc_read_batch_scan_reports, 2414533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski btif_gattc_test_command, 2415533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski btif_gattc_get_gatt_db 2416ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}; 2417ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2418ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 2419