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(&param, 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(&param.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, &param);
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