btif_gatt_test.cc revision 6bd442f543972b072ef2cbbcf2f7c91202de1045
1ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/****************************************************************************** 2ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * 3ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Copyright (C) 2009-2013 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 1949a86709488e5cfd5e23759da18bf9613e15b04dMarie Janssen#define LOG_TAG "bt_btif_gatt" 20ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2149a86709488e5cfd5e23759da18bf9613e15b04dMarie Janssen#include <errno.h> 22ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdio.h> 23ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdlib.h> 24ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <string.h> 25ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 26db554581079863974af8e1289646f5deea6fc044Marie Janssen#include <hardware/bluetooth.h> 27db554581079863974af8e1289646f5deea6fc044Marie Janssen#include <hardware/bt_gatt.h> 28ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 29ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_common.h" 30ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_util.h" 31ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 32b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssen#if (BLE_INCLUDED == TRUE) 33ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 34ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_gatt_api.h" 35ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bte_appl.h" 36db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_dm.h" 37ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_gatt.h" 38ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "btif_gatt_util.h" 39db554581079863974af8e1289646f5deea6fc044Marie Janssen#include "btif_storage.h" 40ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "gatt_api.h" 4144802768c447ab480d4227b3a852a97d923b816dSharvil Nanavati#include "osi/include/log.h" 42ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 43ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 44ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Typedefs & Macros 45ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *******************************************************************************/ 46ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 476bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct { 486bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tGATT_IF gatt_if; 496bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint16_t conn_id; 50ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} btif_test_cb_t; 51ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 52ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 53ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Static variables 54ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *******************************************************************************/ 55ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 566bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonstatic const char* disc_name[GATT_DISC_MAX] = {"Unknown", 576bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson "GATT_DISC_SRVC_ALL", 586bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson "GATT_DISC_SRVC_BY_UUID", 596bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson "GATT_DISC_INC_SRVC", 606bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson "GATT_DISC_CHAR", 616bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson "GATT_DISC_CHAR_DSCPT"}; 62ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 63ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_test_cb_t test_cb; 64ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 65ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 66ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Callback functions 67ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *******************************************************************************/ 68ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 696bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonstatic char* format_uuid(tBT_UUID bt_uuid, char* str_buf, size_t buf_size) { 706bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson if (bt_uuid.len == LEN_UUID_16) { 716bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson snprintf(str_buf, buf_size, "0x%04x", bt_uuid.uu.uuid16); 726bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } else if (bt_uuid.len == LEN_UUID_128) { 736bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int x = snprintf(str_buf, buf_size, "%02x%02x%02x%02x-%02x%02x-%02x%02x", 746bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bt_uuid.uu.uuid128[15], bt_uuid.uu.uuid128[14], 756bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bt_uuid.uu.uuid128[13], bt_uuid.uu.uuid128[12], 766bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bt_uuid.uu.uuid128[11], bt_uuid.uu.uuid128[10], 776bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bt_uuid.uu.uuid128[9], bt_uuid.uu.uuid128[8]); 786bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson snprintf(&str_buf[x], buf_size - x, "%02x%02x-%02x%02x%02x%02x%02x%02x", 796bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bt_uuid.uu.uuid128[7], bt_uuid.uu.uuid128[6], 806bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bt_uuid.uu.uuid128[5], bt_uuid.uu.uuid128[4], 816bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bt_uuid.uu.uuid128[3], bt_uuid.uu.uuid128[2], 826bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bt_uuid.uu.uuid128[1], bt_uuid.uu.uuid128[0]); 836bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } else { 846bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson snprintf(str_buf, buf_size, "Unknown (len=%d)", bt_uuid.len); 856bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } 866bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 876bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson return str_buf; 88ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 89ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 906bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonstatic void btif_test_connect_cback(tGATT_IF gatt_if, BD_ADDR bda, 916bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint16_t conn_id, bool connected, 926bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tGATT_DISCONN_REASON reason, 936bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tBT_TRANSPORT transport) { 946bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson UNUSED(gatt_if); 956bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson UNUSED(bda); 966bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson UNUSED(reason); 976bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson UNUSED(transport); 986bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 996bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, "%s: conn_id=%d, connected=%d", __func__, conn_id, 1006bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson connected); 1016bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson test_cb.conn_id = connected ? conn_id : 0; 102ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 103ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 104b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssenstatic void btif_test_command_complete_cback(uint16_t conn_id, tGATTC_OPTYPE op, 1056bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tGATT_STATUS status, 1066bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tGATT_CL_COMPLETE* p_data) { 1076bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, "%s: op_code=0x%02x, conn_id=0x%x. status=0x%x", __func__, 1086bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson op, conn_id, status); 1096bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 1106bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson switch (op) { 1116bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson case GATTC_OPTYPE_READ: 1126bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson case GATTC_OPTYPE_WRITE: 1136bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson case GATTC_OPTYPE_CONFIG: 1146bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson case GATTC_OPTYPE_EXE_WRITE: 1156bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson case GATTC_OPTYPE_NOTIFICATION: 1166bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson break; 1176bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 1186bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson case GATTC_OPTYPE_INDICATION: 1196bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson GATTC_SendHandleValueConfirm(conn_id, p_data->handle); 1206bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson break; 1216bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 1226bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson default: 1236bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, "%s: Unknown op_code (0x%02x)", __func__, op); 1246bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson break; 1256bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } 126ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 127ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1286bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonstatic void btif_test_discovery_result_cback(uint16_t conn_id, 1296bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tGATT_DISC_TYPE disc_type, 1306bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tGATT_DISC_RES* p_data) { 1316bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson char str_buf[50]; 1326bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson UNUSED(conn_id); 1336bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 1346bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, "------ GATT Discovery result %-22s -------", 1356bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson disc_name[disc_type]); 1366bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, " Attribute handle: 0x%04x (%d)", p_data->handle, 1376bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson p_data->handle); 1386bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 1396bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson if (disc_type != GATT_DISC_CHAR_DSCPT) { 1406bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, " Attribute type: %s", 1416bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson format_uuid(p_data->type, str_buf, sizeof(str_buf))); 1426bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } 1436bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 1446bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson switch (disc_type) { 1456bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson case GATT_DISC_SRVC_ALL: 1466bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, " Handle range: 0x%04x ~ 0x%04x (%d ~ %d)", 1476bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson p_data->handle, p_data->value.group_value.e_handle, 1486bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson p_data->handle, p_data->value.group_value.e_handle); 1496bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, " Service UUID: %s", 1506bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson format_uuid(p_data->value.group_value.service_type, str_buf, 1516bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson sizeof(str_buf))); 1526bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson break; 1536bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 1546bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson case GATT_DISC_SRVC_BY_UUID: 1556bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, " Handle range: 0x%04x ~ 0x%04x (%d ~ %d)", 1566bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson p_data->handle, p_data->value.handle, p_data->handle, 1576bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson p_data->value.handle); 1586bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson break; 1596bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 1606bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson case GATT_DISC_INC_SRVC: 1616bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, " Handle range: 0x%04x ~ 0x%04x (%d ~ %d)", 1626bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson p_data->value.incl_service.s_handle, 1636bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson p_data->value.incl_service.e_handle, 1646bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson p_data->value.incl_service.s_handle, 1656bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson p_data->value.incl_service.e_handle); 1666bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, " Service UUID: %s", 1676bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson format_uuid(p_data->value.incl_service.service_type, str_buf, 1686bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson sizeof(str_buf))); 1696bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson break; 1706bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 1716bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson case GATT_DISC_CHAR: 1726bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, " Properties: 0x%02x", 1736bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson p_data->value.dclr_value.char_prop); 1746bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, " Characteristic UUID: %s", 1756bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson format_uuid(p_data->value.dclr_value.char_uuid, str_buf, 1766bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson sizeof(str_buf))); 1776bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson break; 1786bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 1796bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson case GATT_DISC_CHAR_DSCPT: 1806bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, " Descriptor UUID: %s", 1816bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson format_uuid(p_data->type, str_buf, sizeof(str_buf))); 1826bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson break; 1836bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } 1846bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 1856bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, 1866bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson "-----------------------------------------------------------"); 187ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 188ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 189b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssenstatic void btif_test_discovery_complete_cback(uint16_t conn_id, 190ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGATT_DISC_TYPE disc_type, 1916bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tGATT_STATUS status) { 1926bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson UNUSED(conn_id); 1936bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson UNUSED(disc_type); 1946bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, "%s: status=%d", __func__, status); 195ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 196ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1976bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonstatic tGATT_CBACK btif_test_callbacks = {btif_test_connect_cback, 1986bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btif_test_command_complete_cback, 1996bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btif_test_discovery_result_cback, 2006bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btif_test_discovery_complete_cback, 2016bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson NULL, 2026bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson NULL, 2036bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson NULL}; 204ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 205ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 206ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Implementation 207ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *******************************************************************************/ 208ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2096bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonbt_status_t btif_gattc_test_command_impl(int command, 2106bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btgatt_test_params_t* params) { 2116bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson switch (command) { 2126bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson case 0x01: /* Enable */ 2136bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson { 2146bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, "%s: ENABLE - enable=%d", __func__, params->u1); 2156bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson if (params->u1) { 2166bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tBT_UUID app_uuid = {LEN_UUID_128, {0xAE}}; 2176bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson test_cb.gatt_if = GATT_Register(&app_uuid, &btif_test_callbacks); 2186bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson GATT_StartIf(test_cb.gatt_if); 2196bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } else { 2206bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson GATT_Deregister(test_cb.gatt_if); 2216bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson test_cb.gatt_if = 0; 2226bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } 2236bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson break; 2246bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } 2256bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 2266bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson case 0x02: /* Connect */ 2276bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson { 2286bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, 2296bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson "%s: CONNECT - device=%02x:%02x:%02x:%02x:%02x:%02x " 2306bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson "(dev_type=%d, addr_type=%d)", 2316bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson __func__, params->bda1->address[0], params->bda1->address[1], 232ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta params->bda1->address[2], params->bda1->address[3], 2336bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson params->bda1->address[4], params->bda1->address[5], params->u1, 2346bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson params->u2); 2356bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 2366bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson if (params->u1 == BT_DEVICE_TYPE_BLE) 2376bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson BTM_SecAddBleDevice(params->bda1->address, NULL, BT_DEVICE_TYPE_BLE, 2386bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson params->u2); 2396bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 2406bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson if (!GATT_Connect(test_cb.gatt_if, params->bda1->address, true, 2416bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson BT_TRANSPORT_LE, false)) { 2426bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_ERROR(LOG_TAG, "%s: GATT_Connect failed!", __func__); 2436bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } 2446bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson break; 245ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 2466bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 2476bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson case 0x03: /* Disconnect */ 2486bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson { 2496bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, "%s: DISCONNECT - conn_id=%d", __func__, 2506bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson test_cb.conn_id); 2516bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson GATT_Disconnect(test_cb.conn_id); 2526bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson break; 2536bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } 2546bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 2556bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson case 0x04: /* Discover */ 2566bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson { 2576bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson char buf[50] = {0}; 2586bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tGATT_DISC_PARAM param; 2596bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson memset(¶m, 0, sizeof(tGATT_DISC_PARAM)); 2606bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 2616bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson if (params->u1 >= GATT_DISC_MAX) { 2626bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_ERROR(LOG_TAG, "%s: DISCOVER - Invalid type (%d)!", __func__, 2636bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson params->u1); 2646bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson return (bt_status_t)0; 2656bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } 2666bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 2676bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson param.s_handle = params->u2; 2686bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson param.e_handle = params->u3; 2696bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btif_to_bta_uuid(¶m.service, params->uuid1); 2706bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 2716bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, 2726bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson "%s: DISCOVER (%s), conn_id=%d, uuid=%s, handles=0x%04x-0x%04x", 2736bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson __func__, disc_name[params->u1], test_cb.conn_id, 2746bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson format_uuid(param.service, buf, sizeof(buf)), params->u2, 2756bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson params->u3); 2766bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson GATTC_Discover(test_cb.conn_id, params->u1, ¶m); 2776bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson break; 2786bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } 2796bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 2806bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson case 0xF0: /* Pairing configuration */ 2816bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_DEBUG(LOG_TAG, 2826bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson "%s: Setting pairing config auth=%d, iocaps=%d, keys=%d/%d/%d", 2836bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson __func__, params->u1, params->u2, params->u3, params->u4, 2846bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson params->u5); 2856bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 2866bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bte_appl_cfg.ble_auth_req = params->u1; 2876bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bte_appl_cfg.ble_io_cap = params->u2; 2886bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bte_appl_cfg.ble_init_key = params->u3; 2896bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bte_appl_cfg.ble_resp_key = params->u4; 2906bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bte_appl_cfg.ble_max_key_size = params->u5; 2916bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson break; 2926bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 2936bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson default: 2946bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson LOG_ERROR(LOG_TAG, "%s: UNKNOWN TEST COMMAND 0x%02x", __func__, command); 2956bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson break; 2966bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } 2976bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson return (bt_status_t)0; 298ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 299ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 300ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 301