btif_gatt_test.cc revision 49a86709488e5cfd5e23759da18bf9613e15b04d
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 32ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if (defined(BLE_INCLUDED) && (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 47ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battatypedef struct 48ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 49ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGATT_IF gatt_if; 50ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT16 conn_id; 51ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} btif_test_cb_t; 52ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 53ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 54ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Static variables 55ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *******************************************************************************/ 56ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 57ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic const char * disc_name[GATT_DISC_MAX] = 58ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 59ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta "Unknown", 60ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta "GATT_DISC_SRVC_ALL", 61ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta "GATT_DISC_SRVC_BY_UUID", 62ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta "GATT_DISC_INC_SRVC", 63ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta "GATT_DISC_CHAR", 64ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta "GATT_DISC_CHAR_DSCPT" 65ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}; 66ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 67ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_test_cb_t test_cb; 68ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 69ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 70ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Callback functions 71ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *******************************************************************************/ 72ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 73ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic char * format_uuid(tBT_UUID bt_uuid, char *str_buf) 74ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 75ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta int x = 0; 76ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 77ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (bt_uuid.len == LEN_UUID_16) 78ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 79ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sprintf(str_buf, "0x%04x", bt_uuid.uu.uuid16); 80ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 81ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else if (bt_uuid.len == LEN_UUID_128) 82ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 83ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta x += sprintf(&str_buf[x], "%02x%02x%02x%02x-%02x%02x-%02x%02x", 84ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_uuid.uu.uuid128[15], bt_uuid.uu.uuid128[14], 85ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_uuid.uu.uuid128[13], bt_uuid.uu.uuid128[12], 86ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_uuid.uu.uuid128[11], bt_uuid.uu.uuid128[10], 87ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_uuid.uu.uuid128[9], bt_uuid.uu.uuid128[8]); 88ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sprintf(&str_buf[x], "%02x%02x-%02x%02x%02x%02x%02x%02x", 89ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_uuid.uu.uuid128[7], bt_uuid.uu.uuid128[6], 90ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_uuid.uu.uuid128[5], bt_uuid.uu.uuid128[4], 91ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_uuid.uu.uuid128[3], bt_uuid.uu.uuid128[2], 92ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bt_uuid.uu.uuid128[1], bt_uuid.uu.uuid128[0]); 93ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 94ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 95ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta sprintf(str_buf, "Unknown (len=%d)", bt_uuid.len); 96ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 97ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return str_buf; 98ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 99ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 100ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_test_connect_cback(tGATT_IF gatt_if, BD_ADDR bda, UINT16 conn_id, 1017fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta BOOLEAN connected, tGATT_DISCONN_REASON reason, tBT_TRANSPORT transport) 102ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1035cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(gatt_if); 1045cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(bda); 1055cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(reason); 1067fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta UNUSED (transport); 1075cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen 108db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, "%s: conn_id=%d, connected=%d", __FUNCTION__, conn_id, connected); 109ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta test_cb.conn_id = connected ? conn_id : 0; 110ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 111ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 112ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_test_command_complete_cback(UINT16 conn_id, tGATTC_OPTYPE op, 113ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGATT_STATUS status, tGATT_CL_COMPLETE *p_data) 114ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 115db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, "%s: op_code=0x%02x, conn_id=0x%x. status=0x%x", 116ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta __FUNCTION__, op, conn_id, status); 117ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 118ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta switch (op) 119ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 120ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case GATTC_OPTYPE_READ: 121ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case GATTC_OPTYPE_WRITE: 122ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case GATTC_OPTYPE_CONFIG: 123ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case GATTC_OPTYPE_EXE_WRITE: 124ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case GATTC_OPTYPE_NOTIFICATION: 125ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 126ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 127ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case GATTC_OPTYPE_INDICATION: 128ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GATTC_SendHandleValueConfirm(conn_id, p_data->handle); 129ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 130ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 131ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta default: 132db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, "%s: Unknown op_code (0x%02x)", __FUNCTION__, op); 133ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 134ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 135ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 136ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 137ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_test_discovery_result_cback(UINT16 conn_id, tGATT_DISC_TYPE disc_type, 138ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGATT_DISC_RES *p_data) 139ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 140ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta char str_buf[50]; 1415cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(conn_id); 142ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 143db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, "------ GATT Discovery result %-22s -------", disc_name[disc_type]); 144db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, " Attribute handle: 0x%04x (%d)", p_data->handle, p_data->handle); 145ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 146ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (disc_type != GATT_DISC_CHAR_DSCPT) { 147db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, " Attribute type: %s", format_uuid(p_data->type, str_buf)); 148ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 149ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 150ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta switch (disc_type) 151ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 152ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case GATT_DISC_SRVC_ALL: 153db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, " Handle range: 0x%04x ~ 0x%04x (%d ~ %d)", 154ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_data->handle, p_data->value.group_value.e_handle, 155ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_data->handle, p_data->value.group_value.e_handle); 156db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, " Service UUID: %s", 157ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta format_uuid(p_data->value.group_value.service_type, str_buf)); 158ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 159ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 160ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case GATT_DISC_SRVC_BY_UUID: 161db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, " Handle range: 0x%04x ~ 0x%04x (%d ~ %d)", 162ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_data->handle, p_data->value.handle, 163ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_data->handle, p_data->value.handle); 164ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 165ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 166ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case GATT_DISC_INC_SRVC: 167db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, " Handle range: 0x%04x ~ 0x%04x (%d ~ %d)", 168ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_data->value.incl_service.s_handle, p_data->value.incl_service.e_handle, 169ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_data->value.incl_service.s_handle, p_data->value.incl_service.e_handle); 170db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, " Service UUID: %s", 171ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta format_uuid(p_data->value.incl_service.service_type, str_buf)); 172ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 173ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 174ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case GATT_DISC_CHAR: 175db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, " Properties: 0x%02x", 176ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_data->value.dclr_value.char_prop); 177db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, " Characteristic UUID: %s", 178ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta format_uuid(p_data->value.dclr_value.char_uuid, str_buf)); 179ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 180ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 181ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case GATT_DISC_CHAR_DSCPT: 182db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, " Descriptor UUID: %s", format_uuid(p_data->type, str_buf)); 183ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 184ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 185ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 186db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, "-----------------------------------------------------------"); 187ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 188ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 189ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic void btif_test_discovery_complete_cback(UINT16 conn_id, 190ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGATT_DISC_TYPE disc_type, 191ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGATT_STATUS status) 192ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1935cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(conn_id); 1945cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(disc_type); 195db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, "%s: status=%d", __FUNCTION__, status); 196ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 197ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 198ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic tGATT_CBACK btif_test_callbacks = 199ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 200ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_test_connect_cback , 201ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_test_command_complete_cback, 202ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_test_discovery_result_cback, 203ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_test_discovery_complete_cback, 2047051db3a486aae771d9b5a81c3546790f86ede34Zhihai Xu NULL, 20517b04bd498405f2bb109a85562ebbdcb6bb06e95Andre Eisenbach NULL, 206ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta NULL 207ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta}; 208ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 209ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 210ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta * Implementation 211ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta *******************************************************************************/ 212ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 213ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battabt_status_t btif_gattc_test_command_impl(uint16_t command, btgatt_test_params_t* params) 214ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 215ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta switch(command) { 216ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case 0x01: /* Enable */ 217ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 218db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, "%s: ENABLE - enable=%d", __FUNCTION__, params->u1); 219ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (params->u1) 220ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 221ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBT_UUID app_uuid = {LEN_UUID_128,{0xAE}}; 222ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta test_cb.gatt_if = GATT_Register(&app_uuid, &btif_test_callbacks); 223ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GATT_StartIf(test_cb.gatt_if); 224ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } else { 225ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GATT_Deregister(test_cb.gatt_if); 226ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta test_cb.gatt_if = 0; 227ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 228ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 229ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 230ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 231ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case 0x02: /* Connect */ 232ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 233db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, "%s: CONNECT - device=%02x:%02x:%02x:%02x:%02x:%02x (dev_type=%d, addr_type=%d)", 234ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta __FUNCTION__, 235ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta params->bda1->address[0], params->bda1->address[1], 236ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta params->bda1->address[2], params->bda1->address[3], 237ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta params->bda1->address[4], params->bda1->address[5], 238b804e2114b4e9c2d2481d62538f4d450d7b67128Andre Eisenbach params->u1, params->u2); 239ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 240ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (params->u1 == BT_DEVICE_TYPE_BLE) 241b804e2114b4e9c2d2481d62538f4d450d7b67128Andre Eisenbach BTM_SecAddBleDevice(params->bda1->address, NULL, BT_DEVICE_TYPE_BLE, params->u2); 242ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 2437fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta if ( !GATT_Connect(test_cb.gatt_if, params->bda1->address, TRUE, BT_TRANSPORT_LE) ) 244ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 245db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_ERROR(LOG_TAG, "%s: GATT_Connect failed!", __FUNCTION__); 246ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 247ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 248ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 249ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 250ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case 0x03: /* Disconnect */ 251ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 252db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, "%s: DISCONNECT - conn_id=%d", __FUNCTION__, test_cb.conn_id); 253ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GATT_Disconnect(test_cb.conn_id); 254ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 255ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 256ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 257ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case 0x04: /* Discover */ 258ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 259ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta char buf[50] = {0}; 260ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tGATT_DISC_PARAM param; 261ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memset(¶m, 0, sizeof(tGATT_DISC_PARAM)); 262ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 263ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (params->u1 >= GATT_DISC_MAX) 264ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 265db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_ERROR(LOG_TAG, "%s: DISCOVER - Invalid type (%d)!", __FUNCTION__, params->u1); 266ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return 0; 267ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 268ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 269ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta param.s_handle = params->u2; 270ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta param.e_handle = params->u3; 271ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta btif_to_bta_uuid(¶m.service, params->uuid1); 272ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 273db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, "%s: DISCOVER (%s), conn_id=%d, uuid=%s, handles=0x%04x-0x%04x", 274ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta __FUNCTION__, disc_name[params->u1], test_cb.conn_id, 275ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta format_uuid(param.service, buf), params->u2, params->u3); 276ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GATTC_Discover(test_cb.conn_id, params->u1, ¶m); 277ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 278ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 279ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 280ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta case 0xF0: /* Pairing configuration */ 281db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_DEBUG(LOG_TAG, "%s: Setting pairing config auth=%d, iocaps=%d, keys=%d/%d/%d", 282ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta __FUNCTION__, params->u1, params->u2, params->u3, params->u4, 283ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta params->u5); 284ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 285ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bte_appl_cfg.ble_auth_req = params->u1; 286ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bte_appl_cfg.ble_io_cap = params->u2; 287ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bte_appl_cfg.ble_init_key = params->u3; 288ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bte_appl_cfg.ble_resp_key = params->u4; 289ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bte_appl_cfg.ble_max_key_size = params->u5; 290ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 291ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 292ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta default: 293db554581079863974af8e1289646f5deea6fc044Marie Janssen LOG_ERROR(LOG_TAG, "%s: UNKNOWN TEST COMMAND 0x%02x", __FUNCTION__, command); 294ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 295ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 296ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return 0; 297ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 298ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 299ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 300