btif_gatt_client.cc revision 6bd442f543972b072ef2cbbcf2f7c91202de1045
1ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/****************************************************************************** 2ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 3c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji * Copyright (C) 2009-2014 Broadcom Corporation 4ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 5ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Licensed under the Apache License, Version 2.0 (the "License"); 6ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * you may not use this file except in compliance with the License. 7ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * You may obtain a copy of the License at: 8ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 9ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * http://www.apache.org/licenses/LICENSE-2.0 10ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 11ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Unless required by applicable law or agreed to in writing, software 12ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * distributed under the License is distributed on an "AS IS" BASIS, 13ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * See the License for the specific language governing permissions and 15ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * limitations under the License. 16ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 17ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta ******************************************************************************/ 18ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 19ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 20ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 21ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Filename: btif_gatt_client.c 22ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 23ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Description: GATT client implementation 24ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 25ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *******************************************************************************/ 26ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2749120dc867c7818511b5afec461dfc97d17eef58Marie Janssen#define LOG_TAG "bt_btif_gattc" 2849120dc867c7818511b5afec461dfc97d17eef58Marie Janssen 29140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski#include <base/at_exit.h> 30140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski#include <base/bind.h> 31140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski#include <base/threading/thread.h> 3249a86709488e5cfd5e23759da18bf9613e15b04dMarie Janssen#include <errno.h> 33ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <hardware/bluetooth.h> 34ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdio.h> 35ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdlib.h> 36ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <string.h> 37ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowski#include <unordered_set> 386ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji#include "device/include/controller.h" 396ed1548be2295fc1bec14f10cd0fade4f63daa6aSatya Calloji 4095b74f252f534ec757aab1fc08e086e02b2cfe8dSharvil Nanavati#include "btcore/include/bdaddr.h" 41ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_common.h" 42ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_util.h" 43ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 44b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen#if (BLE_INCLUDED == TRUE) 45ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 466975b4d711142b885af479721cada448952c6b41Andre Eisenbach#include <hardware/bt_gatt.h> 47db554581079863974af8e1289646f5deea6fc044Marie Janssen 48ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_api.h" 49ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_gatt_api.h" 50ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_config.h" 51db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_dm.h" 52ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_gatt.h" 53ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_gatt_util.h" 54ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_storage.h" 5544802768c447ab480d4227b3a852a97d923b816dSharvil Nanavati#include "osi/include/log.h" 56b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach#include "vendor_api.h" 57b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 58140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowskiusing base::Bind; 59140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowskiusing base::Owned; 6026ecec06be48502eba1c24a6b1fdbb66eafa8032Jakub Pawlowskiusing std::vector; 61140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski 626bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonextern bt_status_t do_in_jni_thread(const base::Closure& task); 6344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskiextern bt_status_t btif_gattc_test_command_impl(int command, 646bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btgatt_test_params_t* params); 656bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonextern const btgatt_callbacks_t* bt_gatt_callbacks; 66140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski 67ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 686bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Constants & Macros 696bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *******************************************************************************/ 70ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 71da5b59b5bf9cb34574c16ba784c1484055fcb1e3Jakub Pawlowski#define CLI_CBACK_IN_JNI(P_CBACK, ...) \ 72da5b59b5bf9cb34574c16ba784c1484055fcb1e3Jakub Pawlowski if (bt_gatt_callbacks && bt_gatt_callbacks->client->P_CBACK) { \ 73da5b59b5bf9cb34574c16ba784c1484055fcb1e3Jakub Pawlowski BTIF_TRACE_API("HAL bt_gatt_callbacks->client->%s", #P_CBACK); \ 74da5b59b5bf9cb34574c16ba784c1484055fcb1e3Jakub Pawlowski do_in_jni_thread(Bind(bt_gatt_callbacks->client->P_CBACK, __VA_ARGS__)); \ 75da5b59b5bf9cb34574c16ba784c1484055fcb1e3Jakub Pawlowski } else { \ 76da5b59b5bf9cb34574c16ba784c1484055fcb1e3Jakub Pawlowski ASSERTC(0, "Callback is NULL", 0); \ 77da5b59b5bf9cb34574c16ba784c1484055fcb1e3Jakub Pawlowski } 78da5b59b5bf9cb34574c16ba784c1484055fcb1e3Jakub Pawlowski 796bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define CHECK_BTGATT_INIT() \ 806bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson if (bt_gatt_callbacks == NULL) { \ 81b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen LOG_WARN(LOG_TAG, "%s: BTGATT not initialized", __func__); \ 826bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson return BT_STATUS_NOT_READY; \ 836bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } else { \ 84b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen LOG_VERBOSE(LOG_TAG, "%s", __func__); \ 8544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski } 86ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 876bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define BLE_RESOLVE_ADDR_MSB \ 886bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 0x40 /* bit7, bit6 is 01 to be resolvable random \ 8944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski */ 9044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski#define BLE_RESOLVE_ADDR_MASK 0xc0 /* bit 6, and bit7 */ 9144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski#define BTM_BLE_IS_RESOLVE_BDA(x) \ 9263b0519c3f0d1c0cc523e0e9553c60fc68651accChih-Hung Hsieh (((x)[0] & BLE_RESOLVE_ADDR_MASK) == BLE_RESOLVE_ADDR_MSB) 93ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 94ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowskinamespace std { 95ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowskitemplate <> 96ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowskistruct hash<bt_bdaddr_t> { 976bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson size_t operator()(const bt_bdaddr_t& f) const { 98ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowski return f.address[0] + f.address[1] + f.address[2] + f.address[3] + 99ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowski f.address[4] + f.address[5]; 100ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowski } 101ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowski}; 102ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 10344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskitemplate <> 104ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowskistruct equal_to<bt_bdaddr_t> { 1056bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson size_t operator()(const bt_bdaddr_t& x, const bt_bdaddr_t& y) const { 106ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowski return memcmp(x.address, y.address, BD_ADDR_LEN); 107ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowski } 108ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowski}; 109ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowski} 110ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 11144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskinamespace { 112ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 11344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskistd::unordered_set<bt_bdaddr_t> p_dev_cb; 11444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskiuint8_t rssi_request_client_if; 115ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 11644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibtgattc_error_t btif_gattc_translate_btm_status(tBTM_STATUS status) { 11744be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski switch (status) { 11844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_SUCCESS: 11944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_SUCCESS_NO_SECURITY: 12044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return BT_GATTC_COMMAND_SUCCESS; 121979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 12244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_CMD_STARTED: 12344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return BT_GATTC_COMMAND_STARTED; 124979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 12544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_BUSY: 12644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return BT_GATTC_COMMAND_BUSY; 127979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 12844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_CMD_STORED: 12944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return BT_GATTC_COMMAND_STORED; 130979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 13144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_NO_RESOURCES: 13244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return BT_GATTC_NO_RESOURCES; 133979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 13444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_MODE_UNSUPPORTED: 13544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_WRONG_MODE: 13644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_MODE4_LEVEL4_NOT_SUPPORTED: 13744be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return BT_GATTC_MODE_UNSUPPORTED; 138979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 13944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_ILLEGAL_VALUE: 14044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_SCO_BAD_LENGTH: 14144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return BT_GATTC_ILLEGAL_VALUE; 142979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 14344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_UNKNOWN_ADDR: 14444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return BT_GATTC_UNKNOWN_ADDR; 145979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 14644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_DEVICE_TIMEOUT: 14744be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return BT_GATTC_DEVICE_TIMEOUT; 148979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 14944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_FAILED_ON_SECURITY: 15044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_REPEATED_ATTEMPTS: 15144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_NOT_AUTHORIZED: 15244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return BT_GATTC_SECURITY_ERROR; 153979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 15444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_DEV_RESET: 15544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_ILLEGAL_ACTION: 15644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return BT_GATTC_INCORRECT_STATE; 157979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 15844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_BAD_VALUE_RET: 15944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return BT_GATTC_INVALID_CONTROLLER_OUTPUT; 160979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 16144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_DELAY_CHECK: 16244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return BT_GATTC_DELAYED_ENCRYPTION_CHECK; 163979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 16444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTM_ERR_PROCESSING: 16544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski default: 16644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return BT_GATTC_ERR_PROCESSING; 16744be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski } 168979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach} 169979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 17044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskivoid btif_gattc_init_dev_cb(void) { p_dev_cb.clear(); } 171c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 17244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskivoid btif_gattc_add_remote_bdaddr(BD_ADDR p_bda, uint8_t addr_type) { 173ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowski bt_bdaddr_t bd_addr; 174ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowski memcpy(bd_addr.address, p_bda, BD_ADDR_LEN); 175ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowski p_dev_cb.insert(bd_addr); 176ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 177ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 178b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssenbool btif_gattc_find_bdaddr(BD_ADDR p_bda) { 179ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowski bt_bdaddr_t bd_addr; 180ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowski memcpy(bd_addr.address, p_bda, BD_ADDR_LEN); 181ce7d46a263d8e0e7877b62b99b046c7e08ee75f8Jakub Pawlowski return (p_dev_cb.count(bd_addr) != 0); 182ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 183ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1846bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonvoid btif_gattc_upstreams_evt(uint16_t event, char* p_param) { 185b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen LOG_VERBOSE(LOG_TAG, "%s: Event %d", __func__, event); 186ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1876bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tBTA_GATTC* p_data = (tBTA_GATTC*)p_param; 18844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski switch (event) { 18944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTA_GATTC_REG_EVT: { 19044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski bt_uuid_t app_uuid; 19144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski bta_to_btif_uuid(&app_uuid, &p_data->reg_oper.app_uuid); 19244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski HAL_CBACK(bt_gatt_callbacks, client->register_client_cb, 19344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski p_data->reg_oper.status, p_data->reg_oper.client_if, &app_uuid); 19444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski break; 19544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski } 196ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 19744be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTA_GATTC_DEREG_EVT: 19844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski break; 199ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 20044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTA_GATTC_EXEC_EVT: { 20144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski HAL_CBACK(bt_gatt_callbacks, client->execute_write_cb, 20244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski p_data->exec_cmpl.conn_id, p_data->exec_cmpl.status); 20344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski break; 20444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski } 205ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 20644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTA_GATTC_SEARCH_CMPL_EVT: { 20744be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski HAL_CBACK(bt_gatt_callbacks, client->search_complete_cb, 20844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski p_data->search_cmpl.conn_id, p_data->search_cmpl.status); 20944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski break; 21044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski } 211ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 21244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTA_GATTC_NOTIF_EVT: { 21344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski btgatt_notify_params_t data; 214ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 21544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski bdcpy(data.bda.address, p_data->notify.bda); 21644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski memcpy(data.value, p_data->notify.value, p_data->notify.len); 217ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 21844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski data.handle = p_data->notify.handle; 21944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski data.is_notify = p_data->notify.is_notify; 22044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski data.len = p_data->notify.len; 221ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 22244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski HAL_CBACK(bt_gatt_callbacks, client->notify_cb, p_data->notify.conn_id, 22344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski &data); 224ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 225b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen if (p_data->notify.is_notify == false) 22644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski BTA_GATTC_SendIndConfirm(p_data->notify.conn_id, p_data->notify.handle); 2279dc998503590163068845827d951fc2f05a17bdaJakub Pawlowski 22844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski break; 22944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski } 230ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 23144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTA_GATTC_OPEN_EVT: { 23244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski bt_bdaddr_t bda; 23344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski bdcpy(bda.address, p_data->open.remote_bda); 234ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 23544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski HAL_CBACK(bt_gatt_callbacks, client->open_cb, p_data->open.conn_id, 23644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski p_data->open.status, p_data->open.client_if, &bda); 2376975b4d711142b885af479721cada448952c6b41Andre Eisenbach 23844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski if (GATT_DEF_BLE_MTU_SIZE != p_data->open.mtu && p_data->open.mtu) { 23944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, 24044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski p_data->open.conn_id, p_data->open.status, p_data->open.mtu); 24144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski } 2429426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach 24344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski if (p_data->open.status == BTA_GATT_OK) 24444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski btif_gatt_check_encrypted_link(p_data->open.remote_bda, 24544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski p_data->open.transport); 24644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski break; 24744be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski } 248ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 24944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTA_GATTC_CLOSE_EVT: { 25044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski bt_bdaddr_t bda; 25144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski bdcpy(bda.address, p_data->close.remote_bda); 25244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski HAL_CBACK(bt_gatt_callbacks, client->close_cb, p_data->close.conn_id, 25344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski p_data->status, p_data->close.client_if, &bda); 25444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski break; 25544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski } 256ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 25744be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTA_GATTC_ACL_EVT: 25844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski LOG_DEBUG(LOG_TAG, "BTA_GATTC_ACL_EVT: status = %d", p_data->status); 25944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski /* Ignore for now */ 26044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski break; 2619426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach 26244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTA_GATTC_CANCEL_OPEN_EVT: 26344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski break; 26417b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach 26544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTA_GATTC_LISTEN_EVT: { 26644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski HAL_CBACK(bt_gatt_callbacks, client->listen_cb, p_data->reg_oper.status, 26744be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski p_data->reg_oper.client_if); 26844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski break; 26944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski } 27017b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach 27144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTA_GATTC_CFG_MTU_EVT: { 27244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, 27344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski p_data->cfg_mtu.conn_id, p_data->cfg_mtu.status, 27444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski p_data->cfg_mtu.mtu); 27544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski break; 276ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 2778444d1e649864c28b0c124bc2d16f7c153f01f14Andre Eisenbach 27844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski case BTA_GATTC_CONGEST_EVT: 27944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski HAL_CBACK(bt_gatt_callbacks, client->congestion_cb, 28044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski p_data->congest.conn_id, p_data->congest.congested); 28144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski break; 28244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski 28344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski default: 284b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen LOG_ERROR(LOG_TAG, "%s: Unhandled event (%d)!", __func__, event); 28544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski break; 28644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski } 287ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 288ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2896bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonvoid bta_gattc_cback(tBTA_GATTC_EVT event, tBTA_GATTC* p_data) { 29024ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski bt_status_t status = 29124ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski btif_transfer_context(btif_gattc_upstreams_evt, (uint16_t)event, 2926bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson (char*)p_data, sizeof(tBTA_GATTC), NULL); 29344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski ASSERTC(status == BT_STATUS_SUCCESS, "Context transfer failed!", status); 294ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 295ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 29644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskivoid bta_batch_scan_setup_cb(tBTA_BLE_BATCH_SCAN_EVT evt, 29744be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski tBTA_DM_BLE_REF_VALUE ref_value, 29844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski tBTA_STATUS status) { 2995f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski BTIF_TRACE_DEBUG("bta_batch_scan_setup_cb-Status:%x, client_if:%d, evt=%d", 3005f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski status, ref_value, evt); 301c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 3025f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski switch (evt) { 3035f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski case BTA_BLE_BATCH_SCAN_ENB_EVT: { 3045f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski CLI_CBACK_IN_JNI(batchscan_enb_disable_cb, 1, ref_value, status); 3055f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski return; 3065f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski } 307c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 3085f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski case BTA_BLE_BATCH_SCAN_DIS_EVT: { 3095f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski CLI_CBACK_IN_JNI(batchscan_enb_disable_cb, 0, ref_value, status); 3105f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski return; 3115f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski } 312c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 3135f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski case BTA_BLE_BATCH_SCAN_CFG_STRG_EVT: { 3145f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski CLI_CBACK_IN_JNI(batchscan_cfg_storage_cb, ref_value, status); 3155f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski return; 3165f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski } 317c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 3185f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski case BTA_BLE_BATCH_SCAN_DATA_EVT: { 3196bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson CLI_CBACK_IN_JNI(batchscan_reports_cb, ref_value, status, 0, 0, 3206bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson vector<uint8_t>()); 3215f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski return; 322c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji } 323c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 3245f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski case BTA_BLE_BATCH_SCAN_THRES_EVT: { 3255f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski CLI_CBACK_IN_JNI(batchscan_threshold_cb, ref_value); 3265f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski return; 3275f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski } 328c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 3295f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski default: 3305f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski return; 3315f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski } 332c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 333c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 33444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskivoid bta_batch_scan_threshold_cb(tBTA_DM_BLE_REF_VALUE ref_value) { 33544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski CLI_CBACK_IN_JNI(batchscan_threshold_cb, ref_value); 336c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 337c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 33844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskivoid bta_batch_scan_reports_cb(tBTA_DM_BLE_REF_VALUE ref_value, 339b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen uint8_t report_format, uint8_t num_records, 3406bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint16_t data_len, uint8_t* p_rep_data, 34144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski tBTA_STATUS status) { 3426bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson BTIF_TRACE_DEBUG("%s - client_if:%d, %d, %d, %d", __func__, ref_value, status, 3436bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson num_records, data_len); 3445f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski 3455f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski if (data_len > 0) { 34616102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski vector<uint8_t> data(p_rep_data, p_rep_data + data_len); 3475f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski osi_free(p_rep_data); 3485f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski 3495f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski CLI_CBACK_IN_JNI(batchscan_reports_cb, ref_value, status, report_format, 35016102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski num_records, std::move(data)); 3515f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski } else { 3525f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski CLI_CBACK_IN_JNI(batchscan_reports_cb, ref_value, status, report_format, 35316102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski num_records, vector<uint8_t>()); 3545f848b4d24f596d56da335ee07dd976b3101cfd2Jakub Pawlowski } 355c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 356c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 35744be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskivoid bta_scan_results_cb_impl(bt_bdaddr_t bd_addr, tBT_DEVICE_TYPE device_type, 35816102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski int8_t rssi, uint8_t addr_type, 35916102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski vector<uint8_t> value) { 36092519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski uint8_t remote_name_len; 3616bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson const uint8_t* p_eir_remote_name = NULL; 36292519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski bt_device_type_t dev_type; 36392519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski bt_property_t properties; 364ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 3656bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson p_eir_remote_name = BTM_CheckEirData( 3666bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson value.data(), BTM_EIR_COMPLETE_LOCAL_NAME_TYPE, &remote_name_len); 367ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 36892519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski if (p_eir_remote_name == NULL) { 3696bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson p_eir_remote_name = BTM_CheckEirData( 3706bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson value.data(), BT_EIR_SHORTENED_LOCAL_NAME_TYPE, &remote_name_len); 37192519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski } 372ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 37392519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski if ((addr_type != BLE_ADDR_RANDOM) || (p_eir_remote_name)) { 37492519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski if (!btif_gattc_find_bdaddr(bd_addr.address)) { 37592519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski btif_gattc_add_remote_bdaddr(bd_addr.address, addr_type); 37692519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski 37792519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski if (p_eir_remote_name) { 37892519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski bt_bdname_t bdname; 37992519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski memcpy(bdname.name, p_eir_remote_name, remote_name_len); 38092519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski bdname.name[remote_name_len] = '\0'; 38192519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski 3826bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_VERBOSE(LOG_TAG, "%s BLE device name=%s len=%d dev_type=%d", 3836bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson __func__, bdname.name, remote_name_len, device_type); 38492519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski btif_dm_update_ble_remote_properties(bd_addr.address, bdname.name, 38592519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski device_type); 38692519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski } 38792519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski } 38892519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski } 38992519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski 39092519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski dev_type = (bt_device_type_t)device_type; 39192519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski BTIF_STORAGE_FILL_PROPERTY(&properties, BT_PROPERTY_TYPE_OF_DEVICE, 39292519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski sizeof(dev_type), &dev_type); 39392519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski btif_storage_set_remote_device_property(&(bd_addr), &properties); 39492519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski 39592519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski btif_storage_set_remote_addr_type(&bd_addr, addr_type); 39692519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski 3976bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson HAL_CBACK(bt_gatt_callbacks, client->scan_result_cb, &bd_addr, rssi, 3986bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson std::move(value)); 39992519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski} 40092519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski 4016bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonvoid bta_scan_results_cb(tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) { 40292519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski uint8_t len; 40392519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski 40492519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski if (event == BTA_DM_INQ_CMPL_EVT) { 40592519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski BTIF_TRACE_DEBUG("%s BLE observe complete. Num Resp %d", __func__, 40692519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski p_data->inq_cmpl.num_resps); 40792519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski return; 40892519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski } 40992519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski 41092519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski if (event != BTA_DM_INQ_RES_EVT) { 411b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen BTIF_TRACE_WARNING("%s : Unknown event 0x%x", __func__, event); 41292519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski return; 41392519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski } 41492519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski 41516102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski vector<uint8_t> value(BTGATT_MAX_ATTR_LEN); 41692519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski if (p_data->inq_res.p_eir) { 4176bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson value.insert(value.begin(), p_data->inq_res.p_eir, 4186bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson p_data->inq_res.p_eir + 62); 41992519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski 42092519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski if (BTM_CheckEirData(p_data->inq_res.p_eir, 42192519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski BTM_EIR_COMPLETE_LOCAL_NAME_TYPE, &len)) { 422b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen p_data->inq_res.remt_name_not_required = true; 423ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 42492519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski } 42592519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski 42692519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski bt_bdaddr_t bdaddr; 42792519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski bdcpy(bdaddr.address, p_data->inq_res.bd_addr); 42892519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski do_in_jni_thread(Bind(bta_scan_results_cb_impl, bdaddr, 42992519cc7f18867e9e1897f63f212c8e0a221bdf7Jakub Pawlowski p_data->inq_res.device_type, p_data->inq_res.rssi, 43016102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski p_data->inq_res.ble_addr_type, std::move(value))); 431ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 432ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 4336bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonvoid bta_track_adv_event_cb(tBTA_DM_BLE_TRACK_ADV_DATA* p_track_adv_data) { 4346bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btgatt_track_adv_info_t* btif_scan_track_cb = new btgatt_track_adv_info_t; 4354ed8924e9d820df37f03230dece6fd68eb1fc4dfJakub Pawlowski 436b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen BTIF_TRACE_DEBUG("%s", __func__); 4374ed8924e9d820df37f03230dece6fd68eb1fc4dfJakub Pawlowski btif_gatt_move_track_adv_data(btif_scan_track_cb, 4386bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson (btgatt_track_adv_info_t*)p_track_adv_data); 439f538707fe64c62b1dbb8e4210e4a1bfa0bab2b56Satya Calloji 4404ed8924e9d820df37f03230dece6fd68eb1fc4dfJakub Pawlowski CLI_CBACK_IN_JNI(track_adv_event_cb, Owned(btif_scan_track_cb)); 4411acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji} 4421acb61ce065053f91a0f8d43e8328c9eeec4b5edSatya Calloji 4436bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonvoid btm_read_rssi_cb(tBTM_RSSI_RESULTS* p_result) { 4446bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson if (!p_result) return; 4457294d958dcb610d7828f06c3a1cde933127694d3Jakub Pawlowski 4466bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bt_bdaddr_t* addr = new bt_bdaddr_t; 447c171ac407cfc6d30a11af6b12ead39688eb897f7Jakub Pawlowski bdcpy(addr->address, p_result->rem_bda); 448c171ac407cfc6d30a11af6b12ead39688eb897f7Jakub Pawlowski CLI_CBACK_IN_JNI(read_remote_rssi_cb, rssi_request_client_if, 449c171ac407cfc6d30a11af6b12ead39688eb897f7Jakub Pawlowski base::Owned(addr), p_result->rssi, p_result->status); 450ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 451ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 45244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskivoid bta_scan_param_setup_cb(tGATT_IF client_if, tBTM_STATUS status) { 453da5b59b5bf9cb34574c16ba784c1484055fcb1e3Jakub Pawlowski CLI_CBACK_IN_JNI(scan_parameter_setup_completed_cb, client_if, 454da5b59b5bf9cb34574c16ba784c1484055fcb1e3Jakub Pawlowski btif_gattc_translate_btm_status(status)); 455979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach} 456979e3421c8111a56ebfcf176f6383df58eed52eaAndre Eisenbach 45744be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskivoid bta_scan_filt_cfg_cb(tBTA_DM_BLE_PF_ACTION action, 45844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski tBTA_DM_BLE_SCAN_COND_OP cfg_op, 45944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, 46044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski tBTA_STATUS status, tBTA_DM_BLE_REF_VALUE ref_value) { 461da5b59b5bf9cb34574c16ba784c1484055fcb1e3Jakub Pawlowski CLI_CBACK_IN_JNI(scan_filter_cfg_cb, action, ref_value, status, cfg_op, 462da5b59b5bf9cb34574c16ba784c1484055fcb1e3Jakub Pawlowski avbl_space); 4631a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji} 4641a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 465b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssenvoid bta_scan_filt_param_setup_cb(uint8_t action_type, 46644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, 46744be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski tBTA_DM_BLE_REF_VALUE ref_value, 46844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski tBTA_STATUS status) { 469da5b59b5bf9cb34574c16ba784c1484055fcb1e3Jakub Pawlowski CLI_CBACK_IN_JNI(scan_filter_param_cb, action_type, ref_value, status, 470da5b59b5bf9cb34574c16ba784c1484055fcb1e3Jakub Pawlowski avbl_space); 4711a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji} 4721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 473b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssenvoid bta_scan_filt_status_cb(uint8_t action, tBTA_STATUS status, 47444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski tBTA_DM_BLE_REF_VALUE ref_value) { 475da5b59b5bf9cb34574c16ba784c1484055fcb1e3Jakub Pawlowski CLI_CBACK_IN_JNI(scan_filter_status_cb, action, ref_value, status); 476b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach} 477ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 478ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 4796bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Client API Functions 4806bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson *******************************************************************************/ 481ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 48244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskivoid btif_gattc_register_app_impl(tBT_UUID uuid) { 483c8b5185a5d4c4c9c15f3ec5df4acd37c1d46f1f1Jakub Pawlowski BTA_GATTC_AppRegister(&uuid, bta_gattc_cback); 484ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 485ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 4866bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonbt_status_t btif_gattc_register_app(bt_uuid_t* uuid) { 487c8b5185a5d4c4c9c15f3ec5df4acd37c1d46f1f1Jakub Pawlowski CHECK_BTGATT_INIT(); 488c8b5185a5d4c4c9c15f3ec5df4acd37c1d46f1f1Jakub Pawlowski 489c8b5185a5d4c4c9c15f3ec5df4acd37c1d46f1f1Jakub Pawlowski tBT_UUID bt_uuid; 490c8b5185a5d4c4c9c15f3ec5df4acd37c1d46f1f1Jakub Pawlowski btif_to_bta_uuid(&bt_uuid, uuid); 491c8b5185a5d4c4c9c15f3ec5df4acd37c1d46f1f1Jakub Pawlowski return do_in_jni_thread(Bind(&btif_gattc_register_app_impl, bt_uuid)); 492c8b5185a5d4c4c9c15f3ec5df4acd37c1d46f1f1Jakub Pawlowski} 493c8b5185a5d4c4c9c15f3ec5df4acd37c1d46f1f1Jakub Pawlowski 49444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskivoid btif_gattc_unregister_app_impl(int client_if) { 495c8b5185a5d4c4c9c15f3ec5df4acd37c1d46f1f1Jakub Pawlowski BTA_GATTC_AppDeregister(client_if); 496c8b5185a5d4c4c9c15f3ec5df4acd37c1d46f1f1Jakub Pawlowski} 497c8b5185a5d4c4c9c15f3ec5df4acd37c1d46f1f1Jakub Pawlowski 49844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_unregister_app(int client_if) { 499c8b5185a5d4c4c9c15f3ec5df4acd37c1d46f1f1Jakub Pawlowski CHECK_BTGATT_INIT(); 500c8b5185a5d4c4c9c15f3ec5df4acd37c1d46f1f1Jakub Pawlowski return do_in_jni_thread(Bind(&btif_gattc_unregister_app_impl, client_if)); 501ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 502ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 50344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_scan(bool start) { 504955ff4e88ef7391632e19d1b0234cae40b6f42c1Jakub Pawlowski CHECK_BTGATT_INIT(); 505955ff4e88ef7391632e19d1b0234cae40b6f42c1Jakub Pawlowski if (start) { 506955ff4e88ef7391632e19d1b0234cae40b6f42c1Jakub Pawlowski btif_gattc_init_dev_cb(); 507b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen return do_in_jni_thread(Bind(&BTA_DmBleObserve, true, 0, 5086bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson (tBTA_DM_SEARCH_CBACK*)bta_scan_results_cb)); 509955ff4e88ef7391632e19d1b0234cae40b6f42c1Jakub Pawlowski } else { 510b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen return do_in_jni_thread(Bind(&BTA_DmBleObserve, false, 0, nullptr)); 511955ff4e88ef7391632e19d1b0234cae40b6f42c1Jakub Pawlowski } 512ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 513ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 51444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskivoid btif_gattc_open_impl(int client_if, BD_ADDR address, bool is_direct, 51544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski int transport_p) { 51626e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski // Ensure device is in inquiry database 51726e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski int addr_type = 0; 51826e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski int device_type = 0; 51926e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski tBTA_GATT_TRANSPORT transport = (tBTA_GATT_TRANSPORT)BTA_GATT_TRANSPORT_LE; 52026e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski 52126e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski if (btif_get_address_type(address, &addr_type) && 52226e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski btif_get_device_type(address, &device_type) && 52326e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski device_type != BT_DEVICE_TYPE_BREDR) { 52426e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski BTA_DmAddBleDevice(address, addr_type, device_type); 52526e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski } 52626e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski 52726e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski // Check for background connections 52826e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski if (!is_direct) { 52926e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski // Check for privacy 1.0 and 1.1 controller and do not start background 53026e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski // connection if RPA offloading is not supported, since it will not 53126e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski // connect after change of random address 53226e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski if (!controller_get_interface()->supports_ble_privacy() && 53344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski (addr_type == BLE_ADDR_RANDOM) && BTM_BLE_IS_RESOLVE_BDA(address)) { 53426e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski tBTM_BLE_VSC_CB vnd_capabilities; 53526e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski BTM_BleGetVendorCapabilities(&vnd_capabilities); 53626e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski if (!vnd_capabilities.rpa_offloading) { 53726e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski HAL_CBACK(bt_gatt_callbacks, client->open_cb, 0, BT_STATUS_UNSUPPORTED, 5386bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson client_if, (bt_bdaddr_t*)&address); 53926e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski return; 54026e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski } 54126e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski } 54226e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski BTA_DmBleSetBgConnType(BTM_BLE_CONN_AUTO, NULL); 54326e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski } 54426e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski 54526e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski // Determine transport 54626e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski if (transport_p != GATT_TRANSPORT_AUTO) { 54726e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski transport = transport_p; 54826e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski } else { 54926e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski switch (device_type) { 55026e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski case BT_DEVICE_TYPE_BREDR: 55126e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski transport = BTA_GATT_TRANSPORT_BR_EDR; 55226e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski break; 55326e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski 55426e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski case BT_DEVICE_TYPE_BLE: 55526e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski transport = BTA_GATT_TRANSPORT_LE; 55626e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski break; 55726e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski 55826e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski case BT_DEVICE_TYPE_DUMO: 55926e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski if (transport == GATT_TRANSPORT_LE) 56026e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski transport = BTA_GATT_TRANSPORT_LE; 56126e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski else 56226e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski transport = BTA_GATT_TRANSPORT_BR_EDR; 56326e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski break; 56426e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski } 56526e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski } 56626e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski 56726e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski // Connect! 56826e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski BTIF_TRACE_DEBUG("%s Transport=%d, device type=%d", __func__, transport, 56926e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski device_type); 57026e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski BTA_GATTC_Open(client_if, address, is_direct, transport); 57126e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski} 57226e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski 5736bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonbt_status_t btif_gattc_open(int client_if, const bt_bdaddr_t* bd_addr, 57444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski bool is_direct, int transport) { 57526e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski CHECK_BTGATT_INIT(); 57626e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski // Closure will own this value and free it. 5776bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint8_t* address = new BD_ADDR; 57826e51cb18509e7e04755b4fa4250c60f105ab9d2Jakub Pawlowski bdcpy(address, bd_addr->address); 57944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return do_in_jni_thread(Bind(&btif_gattc_open_impl, client_if, 58044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski base::Owned(address), is_direct, transport)); 581ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 582ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 58344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskivoid btif_gattc_close_impl(int client_if, BD_ADDR address, int conn_id) { 584b454953bb6620cbafba86351b91d58b47dda107dJakub Pawlowski // Disconnect established connections 585b454953bb6620cbafba86351b91d58b47dda107dJakub Pawlowski if (conn_id != 0) 586b454953bb6620cbafba86351b91d58b47dda107dJakub Pawlowski BTA_GATTC_Close(conn_id); 587b454953bb6620cbafba86351b91d58b47dda107dJakub Pawlowski else 588b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen BTA_GATTC_CancelOpen(client_if, address, true); 589b454953bb6620cbafba86351b91d58b47dda107dJakub Pawlowski 590b454953bb6620cbafba86351b91d58b47dda107dJakub Pawlowski // Cancel pending background connections (remove from whitelist) 591b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen BTA_GATTC_CancelOpen(client_if, address, false); 592b454953bb6620cbafba86351b91d58b47dda107dJakub Pawlowski} 593b454953bb6620cbafba86351b91d58b47dda107dJakub Pawlowski 5946bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonbt_status_t btif_gattc_close(int client_if, const bt_bdaddr_t* bd_addr, 59544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski int conn_id) { 596b454953bb6620cbafba86351b91d58b47dda107dJakub Pawlowski CHECK_BTGATT_INIT(); 597b454953bb6620cbafba86351b91d58b47dda107dJakub Pawlowski // Closure will own this value and free it. 5986bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint8_t* address = new BD_ADDR; 599b454953bb6620cbafba86351b91d58b47dda107dJakub Pawlowski bdcpy(address, bd_addr->address); 600b454953bb6620cbafba86351b91d58b47dda107dJakub Pawlowski return do_in_jni_thread( 601b454953bb6620cbafba86351b91d58b47dda107dJakub Pawlowski Bind(&btif_gattc_close_impl, client_if, base::Owned(address), conn_id)); 602ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 603ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 60444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_listen(int client_if, bool start) { 605144998f68990205ba711e701be6be8325dd6e820Jakub Pawlowski CHECK_BTGATT_INIT(); 606144998f68990205ba711e701be6be8325dd6e820Jakub Pawlowski#if (defined(BLE_PERIPHERAL_MODE_SUPPORT) && \ 607b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen (BLE_PERIPHERAL_MODE_SUPPORT == true)) 608144998f68990205ba711e701be6be8325dd6e820Jakub Pawlowski return do_in_jni_thread(Bind(&BTA_GATTC_Listen, client_if, start, nullptr)); 609144998f68990205ba711e701be6be8325dd6e820Jakub Pawlowski#else 610144998f68990205ba711e701be6be8325dd6e820Jakub Pawlowski return do_in_jni_thread(Bind(&BTA_GATTC_Broadcast, client_if, start)); 611144998f68990205ba711e701be6be8325dd6e820Jakub Pawlowski#endif 6125c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach} 6135c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach 6146bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonbt_status_t btif_gattc_refresh(int client_if, const bt_bdaddr_t* bd_addr) { 615140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski CHECK_BTGATT_INIT(); 616140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski // Closure will own this value and free it. 6176bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint8_t* address = new BD_ADDR; 618140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski bdcpy(address, bd_addr->address); 619140645f6b8d87464c08f082bd14740eecab23f71Jakub Pawlowski return do_in_jni_thread(Bind(&BTA_GATTC_Refresh, base::Owned(address))); 620ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 621ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 6226bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonbt_status_t btif_gattc_search_service(int conn_id, bt_uuid_t* filter_uuid) { 623d05e50e7df462c928041bf565821d77fb493bc28Jakub Pawlowski CHECK_BTGATT_INIT(); 624d05e50e7df462c928041bf565821d77fb493bc28Jakub Pawlowski 625d05e50e7df462c928041bf565821d77fb493bc28Jakub Pawlowski if (filter_uuid) { 6266bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tBT_UUID* uuid = new tBT_UUID; 627d05e50e7df462c928041bf565821d77fb493bc28Jakub Pawlowski btif_to_bta_uuid(uuid, filter_uuid); 628d05e50e7df462c928041bf565821d77fb493bc28Jakub Pawlowski return do_in_jni_thread( 629d05e50e7df462c928041bf565821d77fb493bc28Jakub Pawlowski Bind(&BTA_GATTC_ServiceSearchRequest, conn_id, base::Owned(uuid))); 630d05e50e7df462c928041bf565821d77fb493bc28Jakub Pawlowski } else { 631d05e50e7df462c928041bf565821d77fb493bc28Jakub Pawlowski return do_in_jni_thread( 632d05e50e7df462c928041bf565821d77fb493bc28Jakub Pawlowski Bind(&BTA_GATTC_ServiceSearchRequest, conn_id, nullptr)); 633d05e50e7df462c928041bf565821d77fb493bc28Jakub Pawlowski } 634ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 635ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 63661a98132c39d3181a0ea23988ac36fbfef8194b4Jakub Pawlowskivoid btif_gattc_get_gatt_db_impl(int conn_id) { 6376bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btgatt_db_element_t* db = NULL; 63861a98132c39d3181a0ea23988ac36fbfef8194b4Jakub Pawlowski int count = 0; 63961a98132c39d3181a0ea23988ac36fbfef8194b4Jakub Pawlowski BTA_GATTC_GetGattDb(conn_id, 0x0000, 0xFFFF, &db, &count); 640533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski 64161a98132c39d3181a0ea23988ac36fbfef8194b4Jakub Pawlowski HAL_CBACK(bt_gatt_callbacks, client->get_gatt_db_cb, conn_id, db, count); 64261a98132c39d3181a0ea23988ac36fbfef8194b4Jakub Pawlowski osi_free(db); 64361a98132c39d3181a0ea23988ac36fbfef8194b4Jakub Pawlowski} 64461a98132c39d3181a0ea23988ac36fbfef8194b4Jakub Pawlowski 64544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_get_gatt_db(int conn_id) { 64661a98132c39d3181a0ea23988ac36fbfef8194b4Jakub Pawlowski CHECK_BTGATT_INIT(); 64761a98132c39d3181a0ea23988ac36fbfef8194b4Jakub Pawlowski return do_in_jni_thread(Bind(&btif_gattc_get_gatt_db_impl, conn_id)); 648533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski} 649533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski 65024ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowskivoid read_char_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, 6516bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint16_t len, uint8_t* value, void* data) { 6526bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btgatt_read_params_t* params = new btgatt_read_params_t; 65324ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski params->value_type = 0x00 /* GATTC_READ_VALUE_TYPE_VALUE */; 65424ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski params->status = status; 65524ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski params->handle = handle; 65624ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski params->value.len = len; 65724ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski assert(len <= BTGATT_MAX_ATTR_LEN); 65824ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski if (len > 0) memcpy(params->value.value, value, len); 65924ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski 66024ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski CLI_CBACK_IN_JNI(read_characteristic_cb, conn_id, status, 66124ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski base::Owned(params)); 66224ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski} 66324ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski 66444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_read_char(int conn_id, uint16_t handle, int auth_req) { 66561a112e488a7686e5cc9680434c42895ef9db878Jakub Pawlowski CHECK_BTGATT_INIT(); 66624ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski return do_in_jni_thread(Bind(&BTA_GATTC_ReadCharacteristic, conn_id, handle, 66724ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski auth_req, read_char_cb, nullptr)); 66824ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski} 66924ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski 67024ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowskivoid read_desc_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, 6716bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint16_t len, uint8_t* value, void* data) { 6726bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btgatt_read_params_t* params = new btgatt_read_params_t; 67324ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski params->value_type = 0x00 /* GATTC_READ_VALUE_TYPE_VALUE */; 67424ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski params->status = status; 67524ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski params->handle = handle; 67624ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski params->value.len = len; 67724ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski assert(len <= BTGATT_MAX_ATTR_LEN); 67824ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski if (len > 0) memcpy(params->value.value, value, len); 67924ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski 68024ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski CLI_CBACK_IN_JNI(read_descriptor_cb, conn_id, status, base::Owned(params)); 681ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 682ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 68344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_read_char_descr(int conn_id, uint16_t handle, 68444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski int auth_req) { 68561a112e488a7686e5cc9680434c42895ef9db878Jakub Pawlowski CHECK_BTGATT_INIT(); 68624ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski return do_in_jni_thread(Bind(&BTA_GATTC_ReadCharDescr, conn_id, handle, 68724ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski auth_req, read_desc_cb, nullptr)); 68824ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski} 68924ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski 69024ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowskivoid write_char_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, 6916bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson void* data) { 69224ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski CLI_CBACK_IN_JNI(write_characteristic_cb, conn_id, status, handle); 693ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 694ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 69544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_write_char(int conn_id, uint16_t handle, int write_type, 696ec79baaaed83529dae14d492ea2f73aedee9e4d0Jakub Pawlowski int auth_req, vector<uint8_t> value) { 69739a33612889a562da5c919f14df24707ba3e6007Jakub Pawlowski CHECK_BTGATT_INIT(); 69839a33612889a562da5c919f14df24707ba3e6007Jakub Pawlowski 6996bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson if (value.size() > BTGATT_MAX_ATTR_LEN) value.resize(BTGATT_MAX_ATTR_LEN); 70039a33612889a562da5c919f14df24707ba3e6007Jakub Pawlowski 70139a33612889a562da5c919f14df24707ba3e6007Jakub Pawlowski return do_in_jni_thread(Bind(&BTA_GATTC_WriteCharValue, conn_id, handle, 70224ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski write_type, std::move(value), auth_req, 70324ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski write_char_cb, nullptr)); 70424ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski} 70524ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski 70624ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowskivoid write_descr_cb(uint16_t conn_id, tGATT_STATUS status, uint16_t handle, 7076bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson void* data) { 70824ea892320ca85c7f6cdd77343da50818fe29002Jakub Pawlowski CLI_CBACK_IN_JNI(write_descriptor_cb, conn_id, status, handle); 709ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 710ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 71144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_write_char_descr(int conn_id, uint16_t handle, 712bb920a65b959fbb593403587f89bc3fc7e831732Jakub Pawlowski int auth_req, vector<uint8_t> value) { 713ec79baaaed83529dae14d492ea2f73aedee9e4d0Jakub Pawlowski CHECK_BTGATT_INIT(); 714ec79baaaed83529dae14d492ea2f73aedee9e4d0Jakub Pawlowski 7156bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson if (value.size() > BTGATT_MAX_ATTR_LEN) value.resize(BTGATT_MAX_ATTR_LEN); 71639a33612889a562da5c919f14df24707ba3e6007Jakub Pawlowski 71739a33612889a562da5c919f14df24707ba3e6007Jakub Pawlowski return do_in_jni_thread(Bind(&BTA_GATTC_WriteCharDescr, conn_id, handle, 7186bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson std::move(value), auth_req, write_descr_cb, 7196bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson nullptr)); 720ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 721ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 72244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_execute_write(int conn_id, int execute) { 723a684a52231bf0422d991fb16e4dcfc88e4584680Jakub Pawlowski CHECK_BTGATT_INIT(); 724a684a52231bf0422d991fb16e4dcfc88e4584680Jakub Pawlowski return do_in_jni_thread( 725a684a52231bf0422d991fb16e4dcfc88e4584680Jakub Pawlowski Bind(&BTA_GATTC_ExecuteWrite, conn_id, (uint8_t)execute)); 726ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 727ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 72844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskivoid btif_gattc_reg_for_notification_impl(tBTA_GATTC_IF client_if, 729b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen const BD_ADDR bda, uint16_t handle) { 730ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski tBTA_GATT_STATUS status = BTA_GATTC_RegisterForNotifications( 7316bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson client_if, const_cast<uint8_t*>(bda), handle); 732ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski 73344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski // TODO(jpawlowski): conn_id is currently unused 734ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski HAL_CBACK(bt_gatt_callbacks, client->register_for_notification_cb, 735ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski /* conn_id */ 0, 1, status, handle); 736ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 737ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 73844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_reg_for_notification(int client_if, 7396bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson const bt_bdaddr_t* bd_addr, 74044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski uint16_t handle) { 741ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski CHECK_BTGATT_INIT(); 742ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski 7436bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint8_t* address = new BD_ADDR; 744ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski bdcpy(address, bd_addr->address); 745ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski return do_in_jni_thread( 746ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski Bind(base::IgnoreResult(&btif_gattc_reg_for_notification_impl), client_if, 747ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski base::Owned(address), handle)); 748ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski} 749ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski 75044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskivoid btif_gattc_dereg_for_notification_impl(tBTA_GATTC_IF client_if, 7516bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson const BD_ADDR bda, 7526bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint16_t handle) { 753ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski tBTA_GATT_STATUS status = BTA_GATTC_DeregisterForNotifications( 7546bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson client_if, const_cast<uint8_t*>(bda), handle); 755ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski 75644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski // TODO(jpawlowski): conn_id is currently unused 757ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski HAL_CBACK(bt_gatt_callbacks, client->register_for_notification_cb, 758ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski /* conn_id */ 0, 0, status, handle); 759ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski} 760ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski 76144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_dereg_for_notification(int client_if, 7626bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson const bt_bdaddr_t* bd_addr, 76344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski uint16_t handle) { 764ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski CHECK_BTGATT_INIT(); 765ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski 7666bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint8_t* address = new BD_ADDR; 767ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski bdcpy(address, bd_addr->address); 768ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski return do_in_jni_thread( 769ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski Bind(base::IgnoreResult(&btif_gattc_dereg_for_notification_impl), 770ca9d889000b087ddb9bedaa716176be986be158fJakub Pawlowski client_if, base::Owned(address), handle)); 771ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 772ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 77344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_read_remote_rssi(int client_if, 7746bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson const bt_bdaddr_t* bd_addr) { 775c9fe4b6f62c95b195fa99c4fbb75863e547929bfJakub Pawlowski CHECK_BTGATT_INIT(); 776c9fe4b6f62c95b195fa99c4fbb75863e547929bfJakub Pawlowski rssi_request_client_if = client_if; 777c9fe4b6f62c95b195fa99c4fbb75863e547929bfJakub Pawlowski // Closure will own this value and free it. 7786bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint8_t* address = new BD_ADDR; 779c9fe4b6f62c95b195fa99c4fbb75863e547929bfJakub Pawlowski bdcpy(address, bd_addr->address); 780c9fe4b6f62c95b195fa99c4fbb75863e547929bfJakub Pawlowski return do_in_jni_thread(Bind(base::IgnoreResult(&BTM_ReadRSSI), 781c9fe4b6f62c95b195fa99c4fbb75863e547929bfJakub Pawlowski base::Owned(address), 7826bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson (tBTM_CMPL_CB*)btm_read_rssi_cb)); 783ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 784ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 78544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_configure_mtu(int conn_id, int mtu) { 786c9fe4b6f62c95b195fa99c4fbb75863e547929bfJakub Pawlowski CHECK_BTGATT_INIT(); 787c9fe4b6f62c95b195fa99c4fbb75863e547929bfJakub Pawlowski return do_in_jni_thread( 788c9fe4b6f62c95b195fa99c4fbb75863e547929bfJakub Pawlowski Bind(base::IgnoreResult(&BTA_GATTC_ConfigureMTU), conn_id, mtu)); 7899426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach} 7909426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach 7913021c5a5aac9760e8c4885cbf9c220d1b04dbdb3Jakub Pawlowskivoid btif_gattc_conn_parameter_update_impl(bt_bdaddr_t addr, int min_interval, 7927cb29a38027f9cb24fc30eefb389f848cfc17082Jakub Pawlowski int max_interval, int latency, 7937cb29a38027f9cb24fc30eefb389f848cfc17082Jakub Pawlowski int timeout) { 7943021c5a5aac9760e8c4885cbf9c220d1b04dbdb3Jakub Pawlowski if (BTA_DmGetConnectionState(addr.address)) 7956bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson BTA_DmBleUpdateConnectionParams(addr.address, min_interval, max_interval, 7966bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson latency, timeout); 7977cb29a38027f9cb24fc30eefb389f848cfc17082Jakub Pawlowski else 7986bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson BTA_DmSetBlePrefConnParams(addr.address, min_interval, max_interval, 7996bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson latency, timeout); 8007cb29a38027f9cb24fc30eefb389f848cfc17082Jakub Pawlowski} 8017cb29a38027f9cb24fc30eefb389f848cfc17082Jakub Pawlowski 8026bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonbt_status_t btif_gattc_conn_parameter_update(const bt_bdaddr_t* bd_addr, 80344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski int min_interval, int max_interval, 80444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski int latency, int timeout) { 8057cb29a38027f9cb24fc30eefb389f848cfc17082Jakub Pawlowski CHECK_BTGATT_INIT(); 8067cb29a38027f9cb24fc30eefb389f848cfc17082Jakub Pawlowski return do_in_jni_thread( 8076bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson Bind(base::IgnoreResult(&btif_gattc_conn_parameter_update_impl), *bd_addr, 8086bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson min_interval, max_interval, latency, timeout)); 80952a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach} 81052a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach 81144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskivoid btif_gattc_scan_filter_param_setup_impl( 8121a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski int client_if, uint8_t action, int filt_index, 8136bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tBTA_DM_BLE_PF_FILT_PARAMS* adv_filt_param) { 8141a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski if (1 == adv_filt_param->dely_mode) 8151a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski BTA_DmBleTrackAdvertiser(client_if, bta_track_adv_event_cb); 8161a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski BTA_DmBleScanFilterSetup(action, filt_index, adv_filt_param, NULL, 8171a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski bta_scan_filt_param_setup_cb, client_if); 8181a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski} 8191a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski 82044be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_scan_filter_param_setup( 8211a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski btgatt_filt_param_setup_t filt_param) { 8221a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski CHECK_BTGATT_INIT(); 823b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen BTIF_TRACE_DEBUG("%s", __func__); 8241a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski 8256bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tBTA_DM_BLE_PF_FILT_PARAMS* adv_filt_param = new tBTA_DM_BLE_PF_FILT_PARAMS; 8261a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski adv_filt_param->feat_seln = filt_param.feat_seln; 8271a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski adv_filt_param->list_logic_type = filt_param.list_logic_type; 8281a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski adv_filt_param->filt_logic_type = filt_param.filt_logic_type; 8291a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski adv_filt_param->rssi_high_thres = filt_param.rssi_high_thres; 8301a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski adv_filt_param->rssi_low_thres = filt_param.rssi_low_thres; 8311a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski adv_filt_param->dely_mode = filt_param.dely_mode; 8321a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski adv_filt_param->found_timeout = filt_param.found_timeout; 8331a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski adv_filt_param->lost_timeout = filt_param.lost_timeout; 8341a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski adv_filt_param->found_timeout_cnt = filt_param.found_timeout_cnt; 8351a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski adv_filt_param->num_of_tracking_entries = filt_param.num_of_tracking_entries; 8361a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski 8371a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski return do_in_jni_thread( 8381a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski Bind(base::IgnoreResult(&btif_gattc_scan_filter_param_setup_impl), 8391a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski filt_param.client_if, filt_param.action, filt_param.filt_index, 8401a9e2ac4dab5a74139613f4ff5dde1b979522f0eJakub Pawlowski base::Owned(adv_filt_param))); 841b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach} 842b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 843904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowskivoid btif_gattc_scan_filter_add_srvc_uuid(tBT_UUID uuid, 8446bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tBTA_DM_BLE_PF_COND_MASK* p_uuid_mask, 845904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski int action, int filt_type, 846904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski int filt_index, int client_if) { 847904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski tBTA_DM_BLE_PF_COND_PARAM cond; 848904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski memset(&cond, 0, sizeof(tBTA_DM_BLE_PF_COND_PARAM)); 849904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 850904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski cond.srvc_uuid.p_target_addr = NULL; 851904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski cond.srvc_uuid.cond_logic = BTA_DM_BLE_PF_LOGIC_AND; 852904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski cond.srvc_uuid.uuid = uuid; 853904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski cond.srvc_uuid.p_uuid_mask = p_uuid_mask; 854904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 855904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski BTA_DmBleCfgFilterCondition(action, filt_type, filt_index, &cond, 856904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski &bta_scan_filt_cfg_cb, client_if); 857904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski} 858904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 8596bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonvoid btif_gattc_scan_filter_add_local_name(vector<uint8_t> data, int action, 8606bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int filt_type, int filt_index, 8616bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int client_if) { 862904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski tBTA_DM_BLE_PF_COND_PARAM cond; 863904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski memset(&cond, 0, sizeof(tBTA_DM_BLE_PF_COND_PARAM)); 864904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 86516102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski cond.local_name.data_len = data.size(); 86616102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski cond.local_name.p_data = const_cast<uint8_t*>(data.data()); 867904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski BTA_DmBleCfgFilterCondition(action, filt_type, filt_index, &cond, 868904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski &bta_scan_filt_cfg_cb, client_if); 869904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski} 870904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 871904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowskivoid btif_gattc_scan_filter_add_manu_data(int company_id, int company_id_mask, 87216102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski vector<uint8_t> pattern, 87316102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski vector<uint8_t> pattern_mask, 87416102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski int action, int filt_type, 87516102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski int filt_index, int client_if) { 876904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski tBTA_DM_BLE_PF_COND_PARAM cond; 877904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski memset(&cond, 0, sizeof(tBTA_DM_BLE_PF_COND_PARAM)); 878904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 879904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski cond.manu_data.company_id = company_id; 880904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski cond.manu_data.company_id_mask = company_id_mask ? company_id_mask : 0xFFFF; 88116102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski cond.manu_data.data_len = pattern.size(); 88216102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski cond.manu_data.p_pattern = const_cast<uint8_t*>(pattern.data()); 88316102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski cond.manu_data.p_pattern_mask = const_cast<uint8_t*>(pattern_mask.data()); 884904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski BTA_DmBleCfgFilterCondition(action, filt_type, filt_index, &cond, 885904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski &bta_scan_filt_cfg_cb, client_if); 886904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski} 887904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 88816102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowskivoid btif_gattc_scan_filter_add_data_pattern(vector<uint8_t> pattern, 88916102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski vector<uint8_t> pattern_mask, 89016102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski int action, int filt_type, 89116102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski int filt_index, int client_if) { 892904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski tBTA_DM_BLE_PF_COND_PARAM cond; 893904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski memset(&cond, 0, sizeof(tBTA_DM_BLE_PF_COND_PARAM)); 894904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 89516102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski cond.srvc_data.data_len = pattern.size(); 89616102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski cond.srvc_data.p_pattern = const_cast<uint8_t*>(pattern.data()); 89716102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski cond.srvc_data.p_pattern_mask = const_cast<uint8_t*>(pattern_mask.data()); 898904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski BTA_DmBleCfgFilterCondition(action, filt_type, filt_index, &cond, 899904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski &bta_scan_filt_cfg_cb, client_if); 900904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski} 901904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 90244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_scan_filter_add_remove( 903904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski int client_if, int action, int filt_type, int filt_index, int company_id, 9046bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int company_id_mask, const bt_uuid_t* p_uuid, const bt_uuid_t* p_uuid_mask, 9056bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson const bt_bdaddr_t* bd_addr, char addr_type, vector<uint8_t> data, 90616102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski vector<uint8_t> mask) { 907904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski CHECK_BTGATT_INIT(); 908b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen BTIF_TRACE_DEBUG("%s, %d, %d", __func__, action, filt_type); 909904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 910904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski /* If data is passed, both mask and data have to be the same length */ 91116102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski if (data.size() != mask.size() && data.size() != 0 && mask.size() != 0) 912904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski return BT_STATUS_PARM_INVALID; 913904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 914904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski switch (filt_type) { 915904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski case BTA_DM_BLE_PF_ADDR_FILTER: // 0 916904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski { 9176bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tBTA_DM_BLE_PF_COND_PARAM* cond = new tBTA_DM_BLE_PF_COND_PARAM; 918904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski memset(cond, 0, sizeof(tBTA_DM_BLE_PF_COND_PARAM)); 919904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 920904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski bdcpy(cond->target_addr.bda, bd_addr->address); 921904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski cond->target_addr.type = addr_type; 922904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski return do_in_jni_thread(Bind(&BTA_DmBleCfgFilterCondition, action, 923904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski filt_type, filt_index, base::Owned(cond), 924904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski &bta_scan_filt_cfg_cb, client_if)); 925904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski } 926904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 927904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski case BTA_DM_BLE_PF_SRVC_DATA: // 1 928904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski return do_in_jni_thread(Bind(&BTA_DmBleCfgFilterCondition, action, 929904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski filt_type, filt_index, nullptr, 930904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski &bta_scan_filt_cfg_cb, client_if)); 931904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 932904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski case BTA_DM_BLE_PF_SRVC_UUID: // 2 933904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski { 934904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski tBT_UUID bt_uuid; 935904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski btif_to_bta_uuid(&bt_uuid, p_uuid); 936904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 937904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski if (p_uuid_mask != NULL) { 9386bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tBTA_DM_BLE_PF_COND_MASK* uuid_mask = new tBTA_DM_BLE_PF_COND_MASK; 93996d078b59d2df937caad491a234fab7b1a414546Subramanian Srinivasan btif_to_bta_uuid_mask(uuid_mask, p_uuid_mask, p_uuid); 940904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski return do_in_jni_thread(Bind(&btif_gattc_scan_filter_add_srvc_uuid, 941904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski bt_uuid, base::Owned(uuid_mask), action, 942904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski filt_type, filt_index, client_if)); 943904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski } 944904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 945904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski return do_in_jni_thread(Bind(&btif_gattc_scan_filter_add_srvc_uuid, 946904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski bt_uuid, nullptr, action, filt_type, 947904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski filt_index, client_if)); 948904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski } 949904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 950904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski case BTA_DM_BLE_PF_SRVC_SOL_UUID: // 3 951904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski { 9526bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tBTA_DM_BLE_PF_COND_PARAM* cond = new tBTA_DM_BLE_PF_COND_PARAM; 953904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski memset(cond, 0, sizeof(tBTA_DM_BLE_PF_COND_PARAM)); 954904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 955904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski cond->solicitate_uuid.p_target_addr = NULL; 956904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski cond->solicitate_uuid.cond_logic = BTA_DM_BLE_PF_LOGIC_AND; 957904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski btif_to_bta_uuid(&cond->solicitate_uuid.uuid, p_uuid); 958904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 959904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski return do_in_jni_thread(Bind(&BTA_DmBleCfgFilterCondition, action, 960904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski filt_type, filt_index, base::Owned(cond), 961904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski &bta_scan_filt_cfg_cb, client_if)); 962904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski } 963904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 964904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski case BTA_DM_BLE_PF_LOCAL_NAME: // 4 965904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski { 966904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski return do_in_jni_thread(Bind(&btif_gattc_scan_filter_add_local_name, 96716102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski std::move(data), action, filt_type, 96816102de0866a51b523143b681e72db8e0ff441c4Jakub Pawlowski filt_index, client_if)); 969904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski } 970904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 971904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski case BTA_DM_BLE_PF_MANU_DATA: // 5 9721a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji { 9736bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson return do_in_jni_thread(Bind(&btif_gattc_scan_filter_add_manu_data, 9746bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson company_id, company_id_mask, std::move(data), 9756bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson std::move(mask), action, filt_type, 9766bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson filt_index, client_if)); 9771a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji } 978904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 979904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski case BTA_DM_BLE_PF_SRVC_DATA_PATTERN: // 6 980904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski { 9816bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson return do_in_jni_thread(Bind(&btif_gattc_scan_filter_add_data_pattern, 9826bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson std::move(data), std::move(mask), action, 9836bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson filt_type, filt_index, client_if)); 984904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski } 985904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski 986904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski default: 987904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski LOG_ERROR(LOG_TAG, "%s: Unknown filter type (%d)!", __func__, action); 988904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski return (bt_status_t)BTA_GATT_OK; 989904aefe1a9c2808a7460ebb9896391acdaa39f4eJakub Pawlowski } 990b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach} 991b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 99244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_scan_filter_clear(int client_if, int filter_index) { 99371d4e33a08a5eaf458c4cd3de1ca65a542be81e3Jakub Pawlowski CHECK_BTGATT_INIT(); 994b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen BTIF_TRACE_DEBUG("%s: filter_index: %d", __func__, filter_index); 9951a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 99671d4e33a08a5eaf458c4cd3de1ca65a542be81e3Jakub Pawlowski return do_in_jni_thread(Bind(&BTA_DmBleCfgFilterCondition, 99771d4e33a08a5eaf458c4cd3de1ca65a542be81e3Jakub Pawlowski BTA_DM_BLE_SCAN_COND_CLEAR, 99871d4e33a08a5eaf458c4cd3de1ca65a542be81e3Jakub Pawlowski BTA_DM_BLE_PF_TYPE_ALL, filter_index, nullptr, 99971d4e33a08a5eaf458c4cd3de1ca65a542be81e3Jakub Pawlowski &bta_scan_filt_cfg_cb, client_if)); 10001a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji} 10011a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 100244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_scan_filter_enable(int client_if, bool enable) { 100371d4e33a08a5eaf458c4cd3de1ca65a542be81e3Jakub Pawlowski CHECK_BTGATT_INIT(); 1004b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen BTIF_TRACE_DEBUG("%s: enable: %d", __func__, enable); 10051a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji 10066bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint8_t action = enable ? 1 : 0; 100771d4e33a08a5eaf458c4cd3de1ca65a542be81e3Jakub Pawlowski 100871d4e33a08a5eaf458c4cd3de1ca65a542be81e3Jakub Pawlowski return do_in_jni_thread(Bind(&BTA_DmEnableScanFilter, action, 100971d4e33a08a5eaf458c4cd3de1ca65a542be81e3Jakub Pawlowski &bta_scan_filt_status_cb, client_if)); 1010b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach} 1011b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach 101244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_set_scan_parameters(int client_if, int scan_interval, 101344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski int scan_window) { 10144c634eeafc79e68b40ff1ade0d96ba7b1c34f85fJakub Pawlowski CHECK_BTGATT_INIT(); 10154c634eeafc79e68b40ff1ade0d96ba7b1c34f85fJakub Pawlowski return do_in_jni_thread( 10164c634eeafc79e68b40ff1ade0d96ba7b1c34f85fJakub Pawlowski Bind(BTA_DmSetBleScanParams, client_if, scan_interval, scan_window, 10174c634eeafc79e68b40ff1ade0d96ba7b1c34f85fJakub Pawlowski BTM_BLE_SCAN_MODE_ACTI, 10184c634eeafc79e68b40ff1ade0d96ba7b1c34f85fJakub Pawlowski (tBLE_SCAN_PARAM_SETUP_CBACK)bta_scan_param_setup_cb)); 10197d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham} 10207d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham 10216bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonint btif_gattc_get_device_type(const bt_bdaddr_t* bd_addr) { 102244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski int device_type = 0; 102344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski char bd_addr_str[18] = {0}; 1024ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 102544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski bdaddr_to_string(bd_addr, bd_addr_str, sizeof(bd_addr_str)); 102644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski if (btif_config_get_int(bd_addr_str, "DevType", &device_type)) 102744be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return device_type; 102844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return 0; 1029ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1030ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 103144be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_cfg_storage(int client_if, int batch_scan_full_max, 103244be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski int batch_scan_trunc_max, 103344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski int batch_scan_notify_threshold) { 10342af2129df720baee246d4ff9a0f1a02884da856eJakub Pawlowski CHECK_BTGATT_INIT(); 10352af2129df720baee246d4ff9a0f1a02884da856eJakub Pawlowski return do_in_jni_thread( 10362af2129df720baee246d4ff9a0f1a02884da856eJakub Pawlowski Bind(BTA_DmBleSetStorageParams, batch_scan_full_max, batch_scan_trunc_max, 10372af2129df720baee246d4ff9a0f1a02884da856eJakub Pawlowski batch_scan_notify_threshold, 10386bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson (tBTA_BLE_SCAN_SETUP_CBACK*)bta_batch_scan_setup_cb, 10396bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson (tBTA_BLE_SCAN_THRESHOLD_CBACK*)bta_batch_scan_threshold_cb, 10406bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson (tBTA_BLE_SCAN_REP_CBACK*)bta_batch_scan_reports_cb, 10412af2129df720baee246d4ff9a0f1a02884da856eJakub Pawlowski (tBTA_DM_BLE_REF_VALUE)client_if)); 1042c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 1043c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 104444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_enb_batch_scan(int client_if, int scan_mode, 104544be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski int scan_interval, int scan_window, 104644be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski int addr_type, int discard_rule) { 10472af2129df720baee246d4ff9a0f1a02884da856eJakub Pawlowski CHECK_BTGATT_INIT(); 10482af2129df720baee246d4ff9a0f1a02884da856eJakub Pawlowski return do_in_jni_thread(Bind(BTA_DmBleEnableBatchScan, scan_mode, 10492af2129df720baee246d4ff9a0f1a02884da856eJakub Pawlowski scan_interval, scan_window, discard_rule, 10502af2129df720baee246d4ff9a0f1a02884da856eJakub Pawlowski addr_type, client_if)); 1051c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 1052c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 105344be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_dis_batch_scan(int client_if) { 10542af2129df720baee246d4ff9a0f1a02884da856eJakub Pawlowski CHECK_BTGATT_INIT(); 10552af2129df720baee246d4ff9a0f1a02884da856eJakub Pawlowski return do_in_jni_thread(Bind(BTA_DmBleDisableBatchScan, client_if)); 1056c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 1057c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 105844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowskibt_status_t btif_gattc_read_batch_scan_reports(int client_if, int scan_mode) { 10592af2129df720baee246d4ff9a0f1a02884da856eJakub Pawlowski CHECK_BTGATT_INIT(); 10602af2129df720baee246d4ff9a0f1a02884da856eJakub Pawlowski return do_in_jni_thread(Bind(BTA_DmBleReadScanReports, scan_mode, client_if)); 1061c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji} 1062c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji 10636bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonbt_status_t btif_gattc_test_command(int command, btgatt_test_params_t* params) { 106444be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski return btif_gattc_test_command_impl(command, params); 1065ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1066ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 106744be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski} // namespace 106844be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski 1069ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battaconst btgatt_client_interface_t btgattClientInterface = { 1070ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_register_app, 1071ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_unregister_app, 1072ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_scan, 1073ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_open, 1074ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_close, 10755c44e45473e5fc2fa89411ab1add7dbfc979f1f8Andre Eisenbach btif_gattc_listen, 1076ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_refresh, 1077ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_search_service, 1078ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_read_char, 1079ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_write_char, 1080ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_read_char_descr, 1081ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_write_char_descr, 1082ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_execute_write, 1083ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_reg_for_notification, 1084ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_dereg_for_notification, 1085ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_read_remote_rssi, 10861a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_gattc_scan_filter_param_setup, 10871a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_gattc_scan_filter_add_remove, 1088b203d478f4835f5e35217874a1787e1914328f7cAndre Eisenbach btif_gattc_scan_filter_clear, 10891a9247a1229aa65b3d1dce16426177bc5828e54dSatya Calloji btif_gattc_scan_filter_enable, 1090ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_gattc_get_device_type, 10919426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach btif_gattc_configure_mtu, 109252a2cd609897c04bb6440e14ef2ec8871143d028Andre Eisenbach btif_gattc_conn_parameter_update, 10937d208f286865ff58ba5e79299c42b9686cca25cbPrerepa Viswanadham btif_gattc_set_scan_parameters, 1094c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_gattc_cfg_storage, 1095c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_gattc_enb_batch_scan, 1096c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_gattc_dis_batch_scan, 1097c4e2596a112a0dd63ac681b1226548c0f95e828cSatya Calloji btif_gattc_read_batch_scan_reports, 1098533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski btif_gattc_test_command, 109944be0690a1d15d1ffc97e4c7560d8aee5bb86062Jakub Pawlowski btif_gattc_get_gatt_db}; 1100ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1101ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 1102