btif_gatt_test.c revision b804e2114b4e9c2d2481d62538f4d450d7b67128
1497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker/****************************************************************************** 2497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * 3497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * Copyright (C) 2009-2013 Broadcom Corporation 4497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * 5497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * Licensed under the Apache License, Version 2.0 (the "License"); 6497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * you may not use this file except in compliance with the License. 7497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * You may obtain a copy of the License at: 8497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * 9497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * http://www.apache.org/licenses/LICENSE-2.0 10497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * 11497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * Unless required by applicable law or agreed to in writing, software 12497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * distributed under the License is distributed on an "AS IS" BASIS, 13497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * See the License for the specific language governing permissions and 15497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * limitations under the License. 16497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * 17c7a11b2208aa8f1e6a39eb70a136fbc0dafd3260Marco Nelissen ******************************************************************************/ 18497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 19497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 20497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker#include <hardware/bluetooth.h> 21497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker#include <hardware/bt_gatt.h> 22497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker#include <stdio.h> 23497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker#include <stdlib.h> 24497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker#include <errno.h> 25497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker#include <string.h> 26497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 27497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker#define LOG_TAG "BtGatt.btif_test" 28497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 29497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker#include "btif_common.h" 30497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker#include "btif_util.h" 31497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 32497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker#if (defined(BLE_INCLUDED) && (BLE_INCLUDED == TRUE)) 33497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 34497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker#include "bta_api.h" 35497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker#include "bta_gatt_api.h" 36497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker#include "bd.h" 37497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker#include "btif_storage.h" 383305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker#include "bte_appl.h" 393305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker 403305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker#include "btif_gatt.h" 413305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker#include "btif_gatt_util.h" 423305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker#include "btif_dm.h" 433305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker 443305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker#include "gatt_api.h" 453305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker 463305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker/******************************************************************************* 473305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker * Typedefs & Macros 483305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker *******************************************************************************/ 49497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 50497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinkertypedef struct 51497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker{ 52497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker tGATT_IF gatt_if; 53497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker UINT16 conn_id; 54497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker} btif_test_cb_t; 55497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 56497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker/******************************************************************************* 57497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * Static variables 58497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker *******************************************************************************/ 59497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 603305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinkerstatic const char * disc_name[GATT_DISC_MAX] = 61497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker{ 62497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker "Unknown", 633305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker "GATT_DISC_SRVC_ALL", 643305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker "GATT_DISC_SRVC_BY_UUID", 653305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker "GATT_DISC_INC_SRVC", 663305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker "GATT_DISC_CHAR", 673305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker "GATT_DISC_CHAR_DSCPT" 683305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker}; 693305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker 703305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinkerstatic btif_test_cb_t test_cb; 713305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker 723305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker/******************************************************************************* 733305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker * Callback functions 743305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker *******************************************************************************/ 753305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker 763305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinkerstatic char * format_uuid(tBT_UUID bt_uuid, char *str_buf) 773305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker{ 783305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker int x = 0; 793305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker 803305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker if (bt_uuid.len == LEN_UUID_16) 813305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker { 823305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker sprintf(str_buf, "0x%04x", bt_uuid.uu.uuid16); 833305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker } 843305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker else if (bt_uuid.len == LEN_UUID_128) 853305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker { 863305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker x += sprintf(&str_buf[x], "%02x%02x%02x%02x-%02x%02x-%02x%02x", 873305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker bt_uuid.uu.uuid128[15], bt_uuid.uu.uuid128[14], 883305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker bt_uuid.uu.uuid128[13], bt_uuid.uu.uuid128[12], 893305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker bt_uuid.uu.uuid128[11], bt_uuid.uu.uuid128[10], 903305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker bt_uuid.uu.uuid128[9], bt_uuid.uu.uuid128[8]); 913305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker sprintf(&str_buf[x], "%02x%02x-%02x%02x%02x%02x%02x%02x", 923305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker bt_uuid.uu.uuid128[7], bt_uuid.uu.uuid128[6], 933305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker bt_uuid.uu.uuid128[5], bt_uuid.uu.uuid128[4], 943305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker bt_uuid.uu.uuid128[3], bt_uuid.uu.uuid128[2], 953305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker bt_uuid.uu.uuid128[1], bt_uuid.uu.uuid128[0]); 963305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker } 973305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker else 983305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker sprintf(str_buf, "Unknown (len=%d)", bt_uuid.len); 993305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker 1003305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker return str_buf; 1013305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker} 1023305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker 1033305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinkerstatic void btif_test_connect_cback(tGATT_IF gatt_if, BD_ADDR bda, UINT16 conn_id, 10418a1b5904b352cedef29b95169a1226140d38576Marco Nelissen BOOLEAN connected, tGATT_DISCONN_REASON reason, tBT_TRANSPORT transport) 1053305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker{ 1063305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker UNUSED(gatt_if); 1073305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker UNUSED(bda); 1083305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker UNUSED(reason); 1093305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker UNUSED (transport); 1103305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker 111497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD("%s: conn_id=%d, connected=%d", __FUNCTION__, conn_id, connected); 112497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker test_cb.conn_id = connected ? conn_id : 0; 113e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen} 114e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen 115497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinkerstatic void btif_test_command_complete_cback(UINT16 conn_id, tGATTC_OPTYPE op, 116497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker tGATT_STATUS status, tGATT_CL_COMPLETE *p_data) 117e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen{ 118497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD ("%s: op_code=0x%02x, conn_id=0x%x. status=0x%x", 119497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker __FUNCTION__, op, conn_id, status); 120e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen 121497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker switch (op) 122497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker { 123e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen case GATTC_OPTYPE_READ: 124497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker case GATTC_OPTYPE_WRITE: 125497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker case GATTC_OPTYPE_CONFIG: 126e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen case GATTC_OPTYPE_EXE_WRITE: 127497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker case GATTC_OPTYPE_NOTIFICATION: 128497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker break; 129e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen 130497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker case GATTC_OPTYPE_INDICATION: 131497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker GATTC_SendHandleValueConfirm(conn_id, p_data->handle); 132e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen break; 133497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 134497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker default: 135e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen ALOGD ("%s: Unknown op_code (0x%02x)", __FUNCTION__, op); 136497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker break; 137497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker } 138e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen} 139497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 140497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 141e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissenstatic void btif_test_discovery_result_cback(UINT16 conn_id, tGATT_DISC_TYPE disc_type, 142497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker tGATT_DISC_RES *p_data) 143497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker{ 144497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker char str_buf[50]; 145497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker UNUSED(conn_id); 146497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 147497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD("------ GATT Discovery result %-22s -------", disc_name[disc_type]); 148497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD(" Attribute handle: 0x%04x (%d)", p_data->handle, p_data->handle); 149497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 150497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker if (disc_type != GATT_DISC_CHAR_DSCPT) { 151497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD(" Attribute type: %s", format_uuid(p_data->type, str_buf)); 152497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker } 153497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 154497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker switch (disc_type) 155497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker { 156497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker case GATT_DISC_SRVC_ALL: 157497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD(" Handle range: 0x%04x ~ 0x%04x (%d ~ %d)", 158497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker p_data->handle, p_data->value.group_value.e_handle, 159497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker p_data->handle, p_data->value.group_value.e_handle); 160497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD(" Service UUID: %s", 161497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker format_uuid(p_data->value.group_value.service_type, str_buf)); 162497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker break; 163497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 164497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker case GATT_DISC_SRVC_BY_UUID: 165497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD(" Handle range: 0x%04x ~ 0x%04x (%d ~ %d)", 166497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker p_data->handle, p_data->value.handle, 167497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker p_data->handle, p_data->value.handle); 168497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker break; 169497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 170497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker case GATT_DISC_INC_SRVC: 171497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD(" Handle range: 0x%04x ~ 0x%04x (%d ~ %d)", 172497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker p_data->value.incl_service.s_handle, p_data->value.incl_service.e_handle, 173497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker p_data->value.incl_service.s_handle, p_data->value.incl_service.e_handle); 174497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD(" Service UUID: %s", 175497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker format_uuid(p_data->value.incl_service.service_type, str_buf)); 176497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker break; 177497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 178497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker case GATT_DISC_CHAR: 179497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD(" Properties: 0x%02x", 180497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker p_data->value.dclr_value.char_prop); 181497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD(" Characteristic UUID: %s", 182497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker format_uuid(p_data->value.dclr_value.char_uuid, str_buf)); 183497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker break; 184497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 185497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker case GATT_DISC_CHAR_DSCPT: 186497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD(" Descriptor UUID: %s", format_uuid(p_data->type, str_buf)); 187497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker break; 1883425fd5a55dd31e261d2f2a9590c762d6d0a6b79Marco Nelissen } 189497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 190497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD("-----------------------------------------------------------"); 191497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker} 192497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 193497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinkerstatic void btif_test_discovery_complete_cback(UINT16 conn_id, 194497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker tGATT_DISC_TYPE disc_type, 195497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker tGATT_STATUS status) 196497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker{ 197497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker UNUSED(conn_id); 198497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker UNUSED(disc_type); 199497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD("%s: status=%d", __FUNCTION__, status); 2003425fd5a55dd31e261d2f2a9590c762d6d0a6b79Marco Nelissen} 201497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 202497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinkerstatic tGATT_CBACK btif_test_callbacks = 203497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker{ 204497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker btif_test_connect_cback , 205497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker btif_test_command_complete_cback, 206497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker btif_test_discovery_result_cback, 2073425fd5a55dd31e261d2f2a9590c762d6d0a6b79Marco Nelissen btif_test_discovery_complete_cback, 208497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker NULL, 209497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker NULL 210497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker}; 211497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 212497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker/******************************************************************************* 213497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker * Implementation 214497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker *******************************************************************************/ 215497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 216497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinkerbt_status_t btif_gattc_test_command_impl(uint16_t command, btgatt_test_params_t* params) 2173305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker{ 2187c96d53a65085f42ac2b6d416cbc16fd36ed72ffMarco Nelissen switch(command) { 2193305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker case 0x01: /* Enable */ 2207c96d53a65085f42ac2b6d416cbc16fd36ed72ffMarco Nelissen { 2213305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker ALOGD("%s: ENABLE - enable=%d", __FUNCTION__, params->u1); 2223305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker if (params->u1) 2233305b99ec3804c740aecd2ab6d1edd5c6137b7c6Jeff Tinker { 2247c96d53a65085f42ac2b6d416cbc16fd36ed72ffMarco Nelissen tBT_UUID app_uuid = {LEN_UUID_128,{0xAE}}; 225497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker test_cb.gatt_if = GATT_Register(&app_uuid, &btif_test_callbacks); 226497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker GATT_StartIf(test_cb.gatt_if); 227497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker } else { 228497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker GATT_Deregister(test_cb.gatt_if); 229497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker test_cb.gatt_if = 0; 230497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker } 231497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker break; 232497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker } 233497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 234497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker case 0x02: /* Connect */ 235497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker { 236497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD("%s: CONNECT - device=%02x:%02x:%02x:%02x:%02x:%02x (dev_type=%d, addr_type=%d)", 237497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker __FUNCTION__, 2383425fd5a55dd31e261d2f2a9590c762d6d0a6b79Marco Nelissen params->bda1->address[0], params->bda1->address[1], 23918a1b5904b352cedef29b95169a1226140d38576Marco Nelissen params->bda1->address[2], params->bda1->address[3], 240497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker params->bda1->address[4], params->bda1->address[5], 241e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen params->u1, params->u2); 242497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 24318a1b5904b352cedef29b95169a1226140d38576Marco Nelissen if (params->u1 == BT_DEVICE_TYPE_BLE) 24418a1b5904b352cedef29b95169a1226140d38576Marco Nelissen BTM_SecAddBleDevice(params->bda1->address, NULL, BT_DEVICE_TYPE_BLE, params->u2); 24518a1b5904b352cedef29b95169a1226140d38576Marco Nelissen 246497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker if ( !GATT_Connect(test_cb.gatt_if, params->bda1->address, TRUE, BT_TRANSPORT_LE) ) 247497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker { 248497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGE("%s: GATT_Connect failed!", __FUNCTION__); 249497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker } 250497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker break; 25118a1b5904b352cedef29b95169a1226140d38576Marco Nelissen } 25218a1b5904b352cedef29b95169a1226140d38576Marco Nelissen 253497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker case 0x03: /* Disconnect */ 254e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen { 255497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGD("%s: DISCONNECT - conn_id=%d", __FUNCTION__, test_cb.conn_id); 256497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker GATT_Disconnect(test_cb.conn_id); 2573425fd5a55dd31e261d2f2a9590c762d6d0a6b79Marco Nelissen break; 25818a1b5904b352cedef29b95169a1226140d38576Marco Nelissen } 259497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 260e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen case 0x04: /* Discover */ 261497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker { 26218a1b5904b352cedef29b95169a1226140d38576Marco Nelissen char buf[50] = {0}; 26318a1b5904b352cedef29b95169a1226140d38576Marco Nelissen tGATT_DISC_PARAM param; 26418a1b5904b352cedef29b95169a1226140d38576Marco Nelissen memset(¶m, 0, sizeof(tGATT_DISC_PARAM)); 265497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 266497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker if (params->u1 >= GATT_DISC_MAX) 26718a1b5904b352cedef29b95169a1226140d38576Marco Nelissen { 268e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen ALOGE("%s: DISCOVER - Invalid type (%d)!", __FUNCTION__, params->u1); 269497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker return 0; 270497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker } 271497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 272e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen param.s_handle = params->u2; 273497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker param.e_handle = params->u3; 274497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker btif_to_bta_uuid(¶m.service, params->uuid1); 2753425fd5a55dd31e261d2f2a9590c762d6d0a6b79Marco Nelissen 27618a1b5904b352cedef29b95169a1226140d38576Marco Nelissen ALOGD("%s: DISCOVER (%s), conn_id=%d, uuid=%s, handles=0x%04x-0x%04x", 277497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker __FUNCTION__, disc_name[params->u1], test_cb.conn_id, 278497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker format_uuid(param.service, buf), params->u2, params->u3); 27918a1b5904b352cedef29b95169a1226140d38576Marco Nelissen GATTC_Discover(test_cb.conn_id, params->u1, ¶m); 280497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker break; 281497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker } 282e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen 283497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker case 0xF0: /* Pairing configuration */ 28418a1b5904b352cedef29b95169a1226140d38576Marco Nelissen ALOGD("%s: Setting pairing config auth=%d, iocaps=%d, keys=%d/%d/%d", 285e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen __FUNCTION__, params->u1, params->u2, params->u3, params->u4, 286497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker params->u5); 287497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 288497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker bte_appl_cfg.ble_auth_req = params->u1; 28918a1b5904b352cedef29b95169a1226140d38576Marco Nelissen bte_appl_cfg.ble_io_cap = params->u2; 290e419d7cd5c62b4b5866a45d59c5770bb470193c1Marco Nelissen bte_appl_cfg.ble_init_key = params->u3; 291497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker bte_appl_cfg.ble_resp_key = params->u4; 292497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker bte_appl_cfg.ble_max_key_size = params->u5; 293497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker break; 294497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 295497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker default: 296497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker ALOGE("%s: UNKNOWN TEST COMMAND 0x%02x", __FUNCTION__, command); 297497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker break; 298497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker } 299497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker return 0; 300497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker} 301497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker 302497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker#endif 303497ca097bf373ac69405131bd257915c97b31dc0Jeff Tinker