15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2003-2012 Broadcom Corporation 45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * you may not use this file except in compliance with the License. 75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * You may obtain a copy of the License at: 85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * See the License for the specific language governing permissions and 155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * limitations under the License. 165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * This file contains the GATT client action functions for the state 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * machine. 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h" 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if defined(BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE) 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "utl.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h" 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bd.h" 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_sys.h" 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_gattc_int.h" 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "l2c_api.h" 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Constants 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_gattc_conn_cback(tGATT_IF gattc_if, BD_ADDR bda, UINT16 conn_id, 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN connected, tGATT_DISCONN_REASON reason); 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_gattc_cmpl_cback(UINT16 conn_id, tGATTC_OPTYPE op, tGATT_STATUS status, 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tGATT_CL_COMPLETE *p_data); 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic tGATT_CBACK bta_gattc_cl_cback = 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_conn_cback, 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_cmpl_cback, 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_disc_res_cback, 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_disc_cmpl_cback, 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project NULL 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* opcode(tGATTC_OPTYPE) order has to be comply with internal event order */ 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT16 bta_gattc_opcode_to_int_evt[] = 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_GATTC_API_READ_EVT, 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_GATTC_API_WRITE_EVT, 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_GATTC_API_EXEC_EVT 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE) 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic const char *bta_gattc_op_code_name[] = 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project "Unknown", 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project "Discovery", 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project "Read", 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project "Write", 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project "Exec", 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project "Config", 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project "Notification", 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project "Indication" 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Action Functions 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_register 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Register a GATT client application with BTA. 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_register(tBTA_GATTC_CB *p_cb, tBTA_GATTC_DATA *p_data) 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC cb_data; 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i; 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBT_UUID *p_app_uuid = &p_data->api_reg.app_uuid; 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_INT_START_IF *p_buf; 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* todo need to check duplicate uuid */ 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < BTA_GATTC_CL_MAX; i ++) 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!p_cb->cl_rcb[i].in_use) 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_app_uuid == NULL) || (p_cb->cl_rcb[i].client_if = GATT_Register(p_app_uuid, &bta_gattc_cl_cback)) == 0) 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("Register with GATT stack failed."); 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.reg_oper.status = BTA_GATT_ERROR; 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->cl_rcb[i].in_use = TRUE; 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->cl_rcb[i].p_cback = p_data->api_reg.p_cback; 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&p_cb->cl_rcb[i].app_uuid, p_app_uuid, sizeof(tBT_UUID)); 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* BTA use the same client interface as BTE GATT statck */ 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.reg_oper.client_if = p_cb->cl_rcb[i].client_if; 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// btla-specific ++ 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(&(cb_data.reg_oper.app_uuid),p_app_uuid,sizeof(tBT_UUID)); 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// btla-specific -- 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.reg_oper.status = BTA_GATT_OK; 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_buf = (tBTA_GATTC_INT_START_IF *) GKI_getbuf(sizeof(tBTA_GATTC_INT_START_IF))) != NULL) 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->hdr.event = BTA_GATTC_INT_START_IF_EVT; 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->client_if = p_cb->cl_rcb[i].client_if; 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_buf); 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.reg_oper.status = BTA_GATT_NO_RESOURCES; 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset( &p_cb->cl_rcb[i], 0 , sizeof(tBTA_GATTC_RCB)); 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* callback with register event */ 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->api_reg.p_cback) 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_data->api_reg.p_cback)(BTA_GATTC_REG_EVT, (tBTA_GATTC *)&cb_data); 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_start_if 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description start an application interface. 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns none. 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_start_if(tBTA_GATTC_CB *p_cb, tBTA_GATTC_DATA *p_msg) 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_gattc_cl_get_regcb(p_msg->int_start_if.client_if) !=NULL ) 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GATT_StartIf(p_msg->int_start_if.client_if); 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR1("Unable to start app.: Unknown interface =%d",p_msg->int_start_if.client_if ); 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_deregister_cmpl 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description De-Register a GATT client application with BTA completed. 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_int_deregister_cmpl(tBTA_GATTC_RCB *p_clreg, tBTA_GATTC_IF client_if) 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_CBACK *p_cback = p_clreg->p_cback; 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC cb_data; 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_gattc_int_deregister_cmpl client_if=%d", client_if ); 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GATT_Deregister(p_clreg->client_if); 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(p_clreg, 0, sizeof(tBTA_GATTC_RCB)); 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.reg_oper.client_if = client_if; 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.reg_oper.status = BTA_GATT_OK; 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cback) 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* callback with de-register event */ 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_cback)(BTA_GATTC_DEREG_EVT, (tBTA_GATTC *)&cb_data); 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_deregister_cmpl 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description De-Register a GATT client application with BTA completed. 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_deregister_cmpl(tBTA_GATTC_RCB *p_clreg, tBTA_GATTC_IF client_if) 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_INT_DEREG *p_buf; 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_gattc_deregister_cmpl client_if=%d", client_if ); 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_buf = (tBTA_GATTC_INT_DEREG *) GKI_getbuf(sizeof(tBTA_GATTC_INT_DEREG))) != NULL) 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->hdr.event = BTA_GATTC_INT_DEREG_EVT; 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->client_if = client_if; 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_buf); 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR1("bta_gattc_deregister_cmpl unable to allocate buffer to complete dereg=%d", client_if); 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_deregister 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description De-Register a GATT client application with BTA. 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_int_deregister(tBTA_GATTC_CB *p_cb, tBTA_GATTC_DATA *p_data) 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_IF client_if = p_data->int_dereg.client_if; 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_CBACK *p_cback; 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC cb_data; 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_RCB *p_clreg; 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_gattc_int_deregister_cmpl client_if=%d", client_if ); 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_clreg = bta_gattc_cl_get_regcb(client_if)) != NULL) 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cback = p_clreg->p_cback; 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GATT_Deregister(client_if); 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(p_clreg, 0, sizeof(tBTA_GATTC_RCB)); 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.reg_oper.client_if = client_if; 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.reg_oper.status = BTA_GATT_OK; 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cback) 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* callback with de-register event */ 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_cback)(BTA_GATTC_DEREG_EVT, (tBTA_GATTC *)&cb_data); 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR1("bta_gattc_int_deregister Deregister Failed, unknown client_if: %d", p_data->int_dereg.client_if); 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_deregister 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description De-Register a GATT client application with BTA. 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_deregister(tBTA_GATTC_CB *p_cb, tBTA_GATTC_DATA *p_data) 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_RCB *p_clreg; 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i; 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR buf; 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_clreg = bta_gattc_cl_get_regcb(p_data->api_dereg.client_if)) != NULL) 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clreg->num_clcb > 0) 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* close all CLCB related to this app */ 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i= 0; i < BTA_GATTC_CLCB_MAX; i ++) 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->clcb[i].in_use && (p_cb->clcb[i].p_rcb == p_clreg)) 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clreg->dereg_pending = TRUE; 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project buf.event = BTA_GATTC_API_CLOSE_EVT; 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project buf.layer_specific = p_cb->clcb[i].bta_conn_id; 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_close(&p_cb->clcb[i], (tBTA_GATTC_DATA *)&buf) ; 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_deregister_cmpl(p_clreg, p_clreg->client_if); 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR1("bta_gattc_deregister Deregister Failed, unknown client_if: %d", p_data->api_dereg.client_if); 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_process_api_open 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description process connect API request. 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_process_api_open (tBTA_GATTC_CB *p_cb, tBTA_GATTC_DATA * p_msg) 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 event = ((BT_HDR *)p_msg)->event; 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_CLCB *p_clcb = NULL; 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_RCB *p_clreg = bta_gattc_cl_get_regcb(p_msg->api_conn.client_if); 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clreg != NULL) 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_msg->api_conn.is_direct) 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_clcb = bta_gattc_find_alloc_clcb(p_msg->api_conn.client_if, 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->api_conn.remote_bda)) != NULL) 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_sm_execute(p_clcb, event, p_msg); 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("No resources to open a new connection."); 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_send_open_cback(p_clreg, 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_GATT_NO_RESOURCES, 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->api_conn.remote_bda, 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_GATT_INVALID_CONN_ID); 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_init_bk_conn(&p_msg->api_conn, p_clreg); 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR1("bta_gattc_process_api_open Failed, unknown client_if: %d", 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->api_conn.client_if); 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_process_api_open_cancel 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description process connect API request. 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_process_api_open_cancel (tBTA_GATTC_CB *p_cb, tBTA_GATTC_DATA * p_msg) 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 event = ((BT_HDR *)p_msg)->event; 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_CLCB *p_clcb = NULL; 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_RCB *p_clreg; 361ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC cb_data; 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_msg->api_cancel_conn.is_direct) 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_clcb = bta_gattc_find_clcb_by_cif(p_msg->api_cancel_conn.client_if, 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_msg->api_cancel_conn.remote_bda)) != NULL) 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_sm_execute(p_clcb, event, p_msg); 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("No such connection need to be cancelled"); 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clreg = bta_gattc_cl_get_regcb(p_msg->api_cancel_conn.client_if); 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clreg && p_clreg->p_cback) 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 378ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta cb_data.status = BTA_GATT_ERROR; 379ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (*p_clreg->p_cback)(BTA_GATTC_CANCEL_OPEN_EVT, &cb_data); 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_cancel_bk_conn(&p_msg->api_cancel_conn); 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_cancel_open_error 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_cancel_open_error(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 400ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC cb_data; 401ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta cb_data.status=BTA_GATT_ERROR; 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 403ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ( p_clcb && p_clcb->p_rcb && p_clcb->p_rcb->p_cback ) 404ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (*p_clcb->p_rcb->p_cback)(BTA_GATTC_CANCEL_OPEN_EVT, &cb_data); 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_open_error 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_open_error(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("Connection already opened. wrong state"); 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_send_open_cback(p_clcb->p_rcb, 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_GATT_ALREADY_OPEN, 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->bda, 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->bta_conn_id); 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_open_fail 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_open_fail(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_open_error(p_clcb, p_data); 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* open failure, remove clcb */ 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_clcb_dealloc(p_clcb); 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_open 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Process API connection function. 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_open(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_DATA gattc_data; 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* open/hold a connection */ 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!GATT_Connect(p_clcb->p_rcb->client_if, p_data->api_conn.remote_bda, TRUE)) 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("Connection open failure"); 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_OPEN_FAIL_EVT, p_data); 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* a connected remote device */ 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (GATT_GetConnIdIfConnected(p_clcb->p_rcb->client_if, 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->api_conn.remote_bda, 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_clcb->bta_conn_id)) 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project gattc_data.hdr.layer_specific = p_clcb->bta_conn_id; 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_CONN_EVT, &gattc_data); 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* else wait for the callback event */ 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_init_bk_conn 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Process API Open for a background connection 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_init_bk_conn(tBTA_GATTC_API_OPEN *p_data, tBTA_GATTC_RCB *p_clreg) 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATT_STATUS status = BTA_GATT_NO_RESOURCES; 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 conn_id; 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_CLCB *p_clcb; 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_DATA gattc_data; 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 491ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (bta_gattc_mark_bg_conn(p_data->client_if, p_data->remote_bda, TRUE, FALSE)) 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* alwaya call open to hold a connection */ 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!GATT_Connect(p_data->client_if, p_data->remote_bda, FALSE)) 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTA_GATT_ERROR; 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("bta_gattc_init_bk_conn failed"); 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTA_GATT_OK; 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if is a connected remote device */ 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (GATT_GetConnIdIfConnected(p_data->client_if, 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->remote_bda, 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &conn_id)) 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_clcb = bta_gattc_clcb_alloc(p_data->client_if, p_data->remote_bda)) != NULL) 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project gattc_data.hdr.layer_specific = p_clcb->bta_conn_id = conn_id; 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* open connection */ 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_CONN_EVT, &gattc_data); 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTA_GATT_OK; 5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* open failure, report OPEN_EVT */ 5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status != BTA_GATT_OK) 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_send_open_cback(p_clreg, status, p_data->remote_bda, BTA_GATT_INVALID_CONN_ID); 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_cancel_bk_conn 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Process API Cancel Open for a background connection 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_cancel_bk_conn(tBTA_GATTC_API_CANCEL_OPEN *p_data) 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_RCB *p_clreg; 538ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC cb_data; 539ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta cb_data.status = BTA_GATT_ERROR; 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* remove the device from the bg connection mask */ 542ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (bta_gattc_mark_bg_conn(p_data->client_if, p_data->remote_bda, FALSE, FALSE)) 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (GATT_CancelConnect(p_data->client_if, p_data->remote_bda, FALSE)) 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 546ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta cb_data.status = BTA_GATT_OK; 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("bta_gattc_cancel_bk_conn failed"); 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clreg = bta_gattc_cl_get_regcb(p_data->client_if); 5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clreg && p_clreg->p_cback) 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 557ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (*p_clreg->p_cback)(BTA_GATTC_CANCEL_OPEN_EVT, &cb_data); 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_int_cancel_open_ok 5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description 5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_cancel_open_ok(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 572ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC cb_data; 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( p_clcb->p_rcb->p_cback ) 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 576ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta cb_data.status = BTA_GATT_OK; 577ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (*p_clcb->p_rcb->p_cback)(BTA_GATTC_CANCEL_OPEN_EVT, &cb_data); 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_clcb_dealloc(p_clcb); 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_cancel_open 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_cancel_open(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 593ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC cb_data; 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (GATT_CancelConnect(p_clcb->p_rcb->client_if, p_data->api_cancel_conn.remote_bda, TRUE)) 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_CANCEL_OPEN_OK_EVT, p_data); 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( p_clcb->p_rcb->p_cback ) 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 603ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta cb_data.status = BTA_GATT_ERROR; 604ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta (*p_clcb->p_rcb->p_cback)(BTA_GATTC_CANCEL_OPEN_EVT, &cb_data); 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_conn 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description receive connection callback from stack 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_conn(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_IF gatt_if; 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_gattc_conn server cache state=%d",p_clcb->p_srcb->state); 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data != NULL) 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_gattc_conn conn_id=%d",p_data->hdr.layer_specific); 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->p_srcb->connected = TRUE; 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->bta_conn_id = p_data->hdr.layer_specific; 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GATT_GetConnectionInfor(p_data->hdr.layer_specific, &gatt_if, p_clcb->bda); 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* start database cache if needed */ 631ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_clcb->p_srcb->p_srvc_cache == NULL || 632ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_clcb->p_srcb->state != BTA_GATTC_SERV_IDLE) 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb->p_srcb->state == BTA_GATTC_SERV_IDLE) 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->p_srcb->state = BTA_GATTC_SERV_LOAD; 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_sm_execute(p_clcb, BTA_GATTC_START_CACHE_EVT, p_data); 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* cache is building */ 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->state = BTA_GATTC_DISCOVER_ST; 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* a pending service handle change indication */ 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb->p_srcb->srvc_hdl_chg) 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->p_srcb->srvc_hdl_chg = FALSE; 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* start discovery */ 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_DISCOVER_EVT, NULL); 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb->p_rcb) 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_send_open_cback(p_clcb->p_rcb, 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_GATT_OK, 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->bda, 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->bta_conn_id); 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_close_fail 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description close a connection. 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_close_fail(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC cb_data; 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( p_clcb->p_rcb->p_cback ) 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&cb_data, 0, sizeof(tBTA_GATTC)); 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.close.client_if = p_clcb->p_rcb->client_if; 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.close.conn_id = p_data->hdr.layer_specific; 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(cb_data.close.remote_bda, p_clcb->bda); 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.close.status = BTA_GATT_ERROR; 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.close.reason = BTA_GATT_CONN_NONE; 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_clcb->p_rcb->p_cback)(BTA_GATTC_CLOSE_EVT, &cb_data); 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_api_close 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description close a GATTC connection. 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_close(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_CBACK *p_cback = p_clcb->p_rcb->p_cback; 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_RCB *p_clreg = p_clcb->p_rcb; 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC cb_data; 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_gattc_close conn_id=%d",p_clcb->bta_conn_id); 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->hdr.event == BTA_GATTC_API_CLOSE_EVT) 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->status = GATT_Disconnect(p_clcb->bta_conn_id); 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.close.client_if = p_clcb->p_rcb->client_if; 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.close.conn_id = p_clcb->bta_conn_id; 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.close.status = p_clcb->status; 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.close.reason = p_clcb->reason; 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(cb_data.close.remote_bda, p_clcb->bda); 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 715ca22ac493ab777199084d87b3c7627e7f27555afAndre Eisenbach bta_gattc_clcb_dealloc(p_clcb); 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ( * p_cback)(BTA_GATTC_CLOSE_EVT, (tBTA_GATTC *)&cb_data); 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 719ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_clreg->num_clcb == 0 && p_clreg->dereg_pending) 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_deregister_cmpl(p_clreg, p_clreg->client_if); 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_reset_discover_st 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description when a SRCB finished discovery, tell all related clcb. 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 733ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid bta_gattc_reset_discover_st(tBTA_GATTC_SERV *p_srcb, tBTA_GATT_STATUS status) 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_CB *p_cb = &bta_gattc_cb; 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i; 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < BTA_GATTC_CLCB_MAX; i ++) 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->clcb[i].p_srcb == p_srcb) 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 742ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->clcb[i].status = status; 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_sm_execute(&p_cb->clcb[i], BTA_GATTC_DISCOVER_CMPL_EVT, NULL); 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 749ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function bta_gattc_disc_close 750ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 751ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description close a GATTC connection while in discovery state. 752ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 753ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns void 754ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 755ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 756ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid bta_gattc_disc_close(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 757ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 758ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta APPL_TRACE_DEBUG1("Discovery cancel conn_id=%d",p_clcb->bta_conn_id); 759ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 760ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_gattc_reset_discover_st(p_clcb->p_srcb, BTA_GATT_ERROR); 761ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_gattc_sm_execute(p_clcb, BTA_GATTC_API_CLOSE_EVT, p_data); 762ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 763ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 764ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_set_discover_st 7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description when a SRCB start discovery, tell all related clcb and set 7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** the state. 7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_set_discover_st(tBTA_GATTC_SERV *p_srcb) 7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_CB *p_cb = &bta_gattc_cb; 7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i; 7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project L2CA_EnableUpdateBleConnParams(p_srcb->server_bda, FALSE); 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < BTA_GATTC_CLCB_MAX; i ++) 7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_cb->clcb[i].p_srcb == p_srcb) 7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 785ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_cb->clcb[i].status = BTA_GATT_OK; 7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_cb->clcb[i].state = BTA_GATTC_DISCOVER_ST; 7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 792ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function bta_gattc_restart_discover 793ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 794ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description process service change in discovery state, mark up the auto 795ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** update flag and set status to be discovery cancel for current 796ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** discovery. 797ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 798ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns None. 799ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 800ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 801ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid bta_gattc_restart_discover(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 802ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 803ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_clcb->status = BTA_GATT_CANCEL; 804ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_clcb->auto_update = BTA_GATTC_DISC_WAITING; 805ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 806ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 807ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_start_discover 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Start a discovery on server. 8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_start_discover(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 818ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta APPL_TRACE_DEBUG2("bta_gattc_start_discover conn_id=%d p_clcb->p_srcb->state = %d ", 819ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_clcb->bta_conn_id, p_clcb->p_srcb->state); 820ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 821ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (((p_clcb->p_q_cmd == NULL || p_clcb->auto_update == BTA_GATTC_REQ_WAITING) && 822ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_clcb->p_srcb->state == BTA_GATTC_SERV_IDLE) || 823ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_clcb->p_srcb->state == BTA_GATTC_SERV_DISC) 824ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* no pending operation, start discovery right away */ 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->auto_update = BTA_GATTC_NO_SCHEDULE; 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb->p_srcb != NULL) 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* clear the service change mask */ 8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->p_srcb->srvc_hdl_chg = FALSE; 8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->p_srcb->update_count = 0; 833ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_clcb->p_srcb->state = BTA_GATTC_SERV_DISC_ACT; 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set all srcb related clcb into discovery ST */ 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_set_discover_st(p_clcb->p_srcb); 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 838ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((p_clcb->status = bta_gattc_init_cache(p_clcb->p_srcb)) == BTA_GATT_OK) 839ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 840ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_clcb->status = bta_gattc_discover_pri_service(p_clcb->bta_conn_id, p_clcb->p_srcb, GATT_DISC_SRVC_ALL); 841ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 842ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_clcb->status != BTA_GATT_OK) 8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("discovery on server failed"); 845ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_gattc_reset_discover_st(p_clcb->p_srcb, p_clcb->status); 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("unknown device, can not start discovery"); 8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 853ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* pending operation, wait until it finishes */ 854ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 855ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 856ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_clcb->auto_update = BTA_GATTC_DISC_WAITING; 857ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 858ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_clcb->p_srcb->state == BTA_GATTC_SERV_IDLE) 859ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_clcb->state = BTA_GATTC_CONN_ST; /* set clcb state */ 860ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 861ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_disc_cmpl 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description discovery on server is finished 8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_disc_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_DATA *p_q_cmd = p_clcb->p_q_cmd; 8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_gattc_disc_cmpl conn_id=%d",p_clcb->bta_conn_id); 8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE 8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project L2CA_EnableUpdateBleConnParams(p_clcb->p_srcb->server_bda, TRUE); 8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->p_srcb->state = BTA_GATTC_SERV_IDLE; 8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 882ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_clcb->status != GATT_SUCCESS) 883ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 884ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* clean up cache */ 885ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if(p_clcb->p_srcb && p_clcb->p_srcb->p_srvc_cache) 886ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 887ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta while (p_clcb->p_srcb->cache_buffer.p_first) 888ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 889ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GKI_freebuf (GKI_dequeue (&p_clcb->p_srcb->cache_buffer)); 890ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 891ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_clcb->p_srcb->p_srvc_cache = NULL; 892ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 893ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 894ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* used to reset cache in application */ 895ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_gattc_co_cache_reset(p_clcb->p_srcb->server_bda); 896ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* release pending attribute list buffer */ 8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project utl_freebuf((void **)&p_clcb->p_srcb->p_srvc_list); 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 900ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_clcb->auto_update == BTA_GATTC_DISC_WAITING) 901ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 902ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* start discovery again */ 903ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_DISCOVER_EVT, NULL); 904ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* get any queued command to proceed */ 906ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else if (p_q_cmd != NULL) 9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->p_q_cmd = NULL; 9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_sm_execute(p_clcb, p_q_cmd->hdr.event, p_q_cmd); 9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project utl_freebuf((void **)&p_q_cmd); 9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_read 9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Read an attribute 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_read(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 handle = 0; 9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tGATT_READ_PARAM read_param; 9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_OP_CMPL op_cmpl; 9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset (&read_param, 0 ,sizeof(tGATT_READ_PARAM)); 9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset (&op_cmpl, 0 ,sizeof(tBTA_GATTC_OP_CMPL)); 9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_gattc_enqueue(p_clcb, p_data)) 9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((handle = bta_gattc_id2handle(p_clcb->p_srcb, 9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_data->api_read.srvc_id, 9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_data->api_read.char_id, 9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->api_read.descr_type)) == 0) 9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project op_cmpl.status = BTA_GATT_ERROR; 9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project read_param.by_handle.handle = handle; 9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project read_param.by_handle.auth_req = p_data->api_read.auth_req; 9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project op_cmpl.status = GATTC_Read(p_clcb->bta_conn_id, GATT_READ_BY_HANDLE, &read_param); 9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* read fail */ 9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (op_cmpl.status != BTA_GATT_OK) 9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project op_cmpl.op_code = GATTC_OPTYPE_READ; 9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project op_cmpl.p_cmpl = NULL; 9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_sm_execute(p_clcb, BTA_GATTC_OP_CMPL_EVT, (tBTA_GATTC_DATA *)&op_cmpl); 9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_read_multi 9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description read multiple 9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*********************************************************************************/ 9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_read_multi(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 i, handle; 9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATT_STATUS status = BTA_GATT_OK; 9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tGATT_READ_PARAM read_param; 9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_OP_CMPL op_cmpl; 9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_ATTR_ID *p_id; 9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBT_UUID dummy_uuid; 9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_gattc_enqueue(p_clcb, p_data)) 9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&dummy_uuid, 0, sizeof(tBT_UUID)); 9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&read_param, 0, sizeof(tGATT_READ_PARAM)); 9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_id = p_data->api_read_multi.p_id_list; 9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < p_data->api_read_multi.num_attr && p_id; i ++, p_id ++) 9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handle = 0; 9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_id->id_type == BTA_GATT_TYPE_CHAR) 9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handle = bta_gattc_id2handle(p_clcb->p_srcb, 9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_id->id_value.char_id.srvc_id, 9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_id->id_value.char_id.char_id, 9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dummy_uuid); 9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (p_id->id_type == BTA_GATT_TYPE_CHAR_DESCR) 9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handle = bta_gattc_id2handle(p_clcb->p_srcb, 9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_id->id_value.char_descr_id.char_id.srvc_id, 10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_id->id_value.char_descr_id.char_id.char_id, 10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_id->id_value.char_descr_id.descr_type); 10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR1("invalud ID type: %d", p_id->id_type); 10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (handle == 0) 10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTA_GATT_ERROR; 10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status == BTA_GATT_OK) 10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project read_param.read_multiple.num_handles = p_data->api_read_multi.num_attr; 10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project read_param.read_multiple.auth_req = p_data->api_read_multi.auth_req; 10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = GATTC_Read(p_clcb->bta_conn_id, GATT_READ_MULTIPLE, &read_param); 10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* read fail */ 10235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status != BTA_GATT_OK) 10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&op_cmpl, 0, sizeof(tBTA_GATTC_OP_CMPL)); 10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project op_cmpl.status = status; 10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project op_cmpl.op_code = GATTC_OPTYPE_READ; 10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project op_cmpl.p_cmpl = NULL; 10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_sm_execute(p_clcb, BTA_GATTC_OP_CMPL_EVT, (tBTA_GATTC_DATA *)&op_cmpl); 10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_write 10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Write an attribute 10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 10445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_write(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 handle = 0; 10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tGATT_VALUE attr = {0}; 10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_OP_CMPL op_cmpl; 10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATT_STATUS status = BTA_GATT_OK; 10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_gattc_enqueue(p_clcb, p_data)) 10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((handle = bta_gattc_id2handle(p_clcb->p_srcb, 10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_data->api_write.srvc_id, 10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_data->api_write.char_id, 10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->api_write.descr_type)) == 0) 10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTA_GATT_ERROR; 10595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project attr.handle= handle; 10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project attr.offset = p_data->api_write.offset; 10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project attr.len = p_data->api_write.len; 10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project attr.auth_req = p_data->api_write.auth_req; 10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->api_write.p_value) 10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(attr.value, p_data->api_write.p_value, p_data->api_write.len); 10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = GATTC_Write(p_clcb->bta_conn_id, p_data->api_write.write_type, &attr); 10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* write fail */ 10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status != BTA_GATT_OK) 10755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&op_cmpl, 0, sizeof(tBTA_GATTC_OP_CMPL)); 10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project op_cmpl.status = status; 10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project op_cmpl.op_code = GATTC_OPTYPE_WRITE; 10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project op_cmpl.p_cmpl = NULL; 10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_sm_execute(p_clcb, BTA_GATTC_OP_CMPL_EVT, (tBTA_GATTC_DATA *)&op_cmpl); 10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_execute 10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send execute write 10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*********************************************************************************/ 10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_execute(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_OP_CMPL op_cmpl; 10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATT_STATUS status; 10985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_gattc_enqueue(p_clcb, p_data)) 11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = GATTC_ExecuteWrite(p_clcb->bta_conn_id, p_data->api_exec.is_execute); 11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status != BTA_GATT_OK) 11045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&op_cmpl, 0, sizeof(tBTA_GATTC_OP_CMPL)); 11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project op_cmpl.status = status; 11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project op_cmpl.op_code = GATTC_OPTYPE_EXE_WRITE; 11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project op_cmpl.p_cmpl = NULL; 11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_sm_execute(p_clcb, BTA_GATTC_OP_CMPL_EVT, (tBTA_GATTC_DATA *)&op_cmpl); 11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_confirm 11185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description send handle value confirmation 11205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_confirm(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 handle; 11275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBT_UUID null_uuid = {0}; 11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((handle = bta_gattc_id2handle(p_clcb->p_srcb, 11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_data->api_confirm.srvc_id, 11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_data->api_confirm.char_id, 11325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project null_uuid)) == 0) 11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("Can not map service/char ID into valid handle"); 11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (GATTC_SendHandleValueConfirm(p_data->api_confirm.hdr.layer_specific, handle) 11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project != GATT_SUCCESS) 11405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR1("bta_gattc_confirm to handle [0x%04x] failed", handle); 11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 11465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_read_cmpl 11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description read complete 11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 11525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_read_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_OP_CMPL *p_data) 11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 event; 11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC cb_data; 11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATT_READ_VAL read_value; 11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&cb_data, 0, sizeof(tBTA_GATTC)); 11615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&read_value, 0, sizeof(tBTA_GATT_READ_VAL)); 11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.read.status = p_data->status; 11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->p_cmpl != NULL && p_data->status == BTA_GATT_OK) 11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_gattc_handle2id(p_clcb->p_srcb, 11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->p_cmpl->att_value.handle, 11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &cb_data.read.srvc_id, 11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &cb_data.read.char_id, 11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &cb_data.read.descr_type) == FALSE) 11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.read.status = BTA_GATT_INTERNAL_ERROR; 11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR1("can not map to GATT ID. handle = 0x%04x", p_data->p_cmpl->att_value.handle); 11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 11775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.read.status = bta_gattc_pack_read_cb_data(p_clcb->p_srcb, 11795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.read.descr_type, 11805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &p_data->p_cmpl->att_value, 11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &read_value); 11825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.read.p_value = &read_value; 11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 11875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.read.srvc_id = p_clcb->p_q_cmd->api_read.srvc_id; 11885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.read.char_id = p_clcb->p_q_cmd->api_read.char_id; 11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.read.descr_type = p_clcb->p_q_cmd->api_read.descr_type; 11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event = (p_clcb->p_q_cmd->api_read.descr_type.len == 0) ? BTA_GATTC_READ_CHAR_EVT: BTA_GATTC_READ_DESCR_EVT; 11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.read.conn_id = p_clcb->bta_conn_id; 11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project utl_freebuf((void **)&p_clcb->p_q_cmd); 11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* read complete, callback */ 11975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ( *p_clcb->p_rcb->p_cback)(event, (tBTA_GATTC *)&cb_data); 11985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_write_cmpl 12035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description read complete 12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_write_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_OP_CMPL *p_data) 12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC cb_data = {0}; 12125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 event; 12135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.write.status = p_data->status; 12155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->p_cmpl != NULL) 12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_handle2id(p_clcb->p_srcb, p_data->p_cmpl->handle, 12195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &cb_data.write.srvc_id, &cb_data.write.char_id, 12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project &cb_data.write.descr_type); 12215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.write.srvc_id = p_clcb->p_q_cmd->api_write.srvc_id; 12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.write.char_id = p_clcb->p_q_cmd->api_write.char_id; 12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.write.descr_type = p_clcb->p_q_cmd->api_write.descr_type; 12275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb->p_q_cmd->api_write.hdr.event == BTA_GATTC_API_WRITE_EVT && 12305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->p_q_cmd->api_write.write_type == BTA_GATTC_WRITE_PREPARE) 12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event = BTA_GATTC_PREP_WRITE_EVT; 12335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (p_clcb->p_q_cmd->api_write.descr_type.len == 0) 12355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event = BTA_GATTC_WRITE_CHAR_EVT; 12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event = BTA_GATTC_WRITE_DESCR_EVT; 12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project utl_freebuf((void **)&p_clcb->p_q_cmd); 12425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.write.conn_id = p_clcb->bta_conn_id; 12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* write complete, callback */ 12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ( *p_clcb->p_rcb->p_cback)(event, (tBTA_GATTC *)&cb_data); 12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_exec_cmpl 12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description execute write complete 12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 12545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_exec_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_OP_CMPL *p_data) 12575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC cb_data; 12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project utl_freebuf((void **)&p_clcb->p_q_cmd); 12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->status = BTA_GATT_OK; 12635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* execute complete, callback */ 12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.exec_cmpl.conn_id = p_clcb->bta_conn_id; 12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.exec_cmpl.status = p_data->status; 12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ( *p_clcb->p_rcb->p_cback)(BTA_GATTC_EXEC_EVT, &cb_data); 12695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_op_cmpl 12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description operation completed. 12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 12785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_op_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 op = (UINT8)p_data->op_cmpl.op_code; 12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 mapped_op = 0; 12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_gattc_op_cmpl op = %d", op); 12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 12875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (op == GATTC_OPTYPE_INDICATION || op == GATTC_OPTYPE_NOTIFICATION) 12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("unexpected operation, ignored"); 12905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (op >= GATTC_OPTYPE_READ) 12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb->p_q_cmd == NULL) 12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("No pending command"); 12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb->p_q_cmd->hdr.event != bta_gattc_opcode_to_int_evt[op - GATTC_OPTYPE_READ]) 12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project mapped_op = p_clcb->p_q_cmd->hdr.event - BTA_GATTC_API_READ_EVT + GATTC_OPTYPE_READ; 13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( mapped_op > GATTC_OPTYPE_INDICATION) mapped_op = 0; 13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BT_TRACE_VERBOSE == TRUE) 13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR3("expect op:(%s :0x%04x), receive unexpected operation (%s).", 13055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_op_code_name[mapped_op] , p_clcb->p_q_cmd->hdr.event, 13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_op_code_name[op]); 13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 13085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR3("expect op:(%u :0x%04x), receive unexpected operation (%u).", 13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project mapped_op , p_clcb->p_q_cmd->hdr.event, op); 13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 13115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* service handle change void the response, discard it */ 13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb->auto_update == BTA_GATTC_DISC_WAITING) 13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->auto_update = BTA_GATTC_REQ_WAITING; 13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_DISCOVER_EVT, NULL); 13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (op == GATTC_OPTYPE_READ) 13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_read_cmpl(p_clcb, &p_data->op_cmpl); 13225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (op == GATTC_OPTYPE_WRITE) 13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_write_cmpl(p_clcb, &p_data->op_cmpl); 13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (op == GATTC_OPTYPE_EXE_WRITE) 13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_exec_cmpl(p_clcb, &p_data->op_cmpl); 13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* 13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (op == GATTC_OPTYPE_CONFIG) // API to be added 13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project */ 13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_op_cmpl 13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description operation completed. 13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_ignore_op_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* receive op complete when discovery is started, ignore the response, 13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project and wait for discovery finish and resent */ 13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_gattc_ignore_op_cmpl op = %d", p_data->hdr.layer_specific); 13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_search 13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description start a search in the local server cache 13565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_search(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATT_STATUS status = GATT_INTERNAL_ERROR; 13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC cb_data; 13645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_gattc_search conn_id=%d",p_clcb->bta_conn_id); 13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb->p_srcb && p_clcb->p_srcb->p_srvc_cache) 13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = BTA_GATT_OK; 13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* search the local cache of a server device */ 13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_search_service(p_clcb, p_data->api_search.srvc_uuid); 13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.search_cmpl.status = status; 13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project cb_data.search_cmpl.conn_id = p_clcb->bta_conn_id; 13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* end of search or no server cache available */ 13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ( *p_clcb->p_rcb->p_cback)(BTA_GATTC_SEARCH_CMPL_EVT, &cb_data); 13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_q_cmd 13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description enqueue a command into control block, usually because discovery 13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** operation is busy. 13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 13855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 13875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_q_cmd(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_enqueue(p_clcb, p_data); 13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_cache_open 13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description open a NV cache for loading 13965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_cache_open(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_set_discover_st(p_clcb->p_srcb); 14035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_gattc_cache_open conn_id=%d",p_clcb->bta_conn_id); 14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_co_cache_open(p_clcb->p_srcb->server_bda, BTA_GATTC_CI_CACHE_OPEN_EVT, 14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->bta_conn_id, FALSE); 14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_start_load 14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description start cache loading by sending callout open cache 14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_ci_open(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG2("bta_gattc_ci_open conn_id=%d server state=%d" , 14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->bta_conn_id, p_clcb->p_srcb->state); 14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb->p_srcb->state == BTA_GATTC_SERV_LOAD) 14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->ci_open.status == BTA_GATT_OK) 14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->p_srcb->attr_index = 0; 14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_co_cache_load(p_clcb->p_srcb->server_bda, 14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_GATTC_CI_CACHE_LOAD_EVT, 14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->p_srcb->attr_index, 14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->bta_conn_id); 14305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1433ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_clcb->p_srcb->state = BTA_GATTC_SERV_DISC; 14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* cache open failure, start discovery */ 14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_start_discover(p_clcb, NULL); 14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb->p_srcb->state == BTA_GATTC_SERV_SAVE) 14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->ci_open.status == BTA_GATT_OK) 14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!bta_gattc_cache_save(p_clcb->p_srcb, p_clcb->bta_conn_id)) 14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->ci_open.status = BTA_GATT_ERROR; 14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->ci_open.status != BTA_GATT_OK) 14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->p_srcb->attr_index = 0; 14505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_co_cache_close(p_clcb->p_srcb->server_bda, p_clcb->bta_conn_id); 1451ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_gattc_reset_discover_st(p_clcb->p_srcb, p_clcb->status); 14525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 14575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_ci_load 14595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description cache loading received. 14615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 14645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 14655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_ci_load(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 14665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 14675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG2("bta_gattc_ci_load conn_id=%d load status=%d" , 14695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->bta_conn_id, p_data->ci_load.status ); 14705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_co_cache_close(p_clcb->p_srcb->server_bda, 0); 14715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_data->ci_load.status == BTA_GATT_OK || 14735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->ci_load.status == BTA_GATT_MORE) && 14745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->ci_load.num_attr > 0) 14755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_rebuild_cache(p_clcb->p_srcb, p_data->ci_load.num_attr, p_data->ci_load.attr, p_clcb->p_srcb->attr_index); 14775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->ci_load.status == BTA_GATT_OK) 14795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->p_srcb->attr_index = 0; 1481ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_gattc_reset_discover_st(p_clcb->p_srcb, BTA_GATT_OK); 14825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else /* load more */ 14855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 14865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->p_srcb->attr_index += p_data->ci_load.num_attr; 14875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 14885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_co_cache_load(p_clcb->p_srcb->server_bda, 14895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_GATTC_CI_CACHE_LOAD_EVT, 14905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->p_srcb->attr_index, 14915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->bta_conn_id); 14925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 14945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 14955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1496ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_clcb->p_srcb->state = BTA_GATTC_SERV_DISC; 14975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->p_srcb->attr_index = 0; 14985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* cache open failure, start discovery */ 14995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_start_discover(p_clcb, NULL); 15005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 15035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_ci_load 15055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description cache loading received. 15075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 15095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_ci_save(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 15125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("bta_gattc_ci_save conn_id=%d " , 15145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->bta_conn_id ); 15155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!bta_gattc_cache_save(p_clcb->p_srcb, p_clcb->bta_conn_id)) 15175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->p_srcb->attr_index = 0; 15195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_co_cache_close(p_clcb->p_srcb->server_bda, 0); 1520ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_gattc_reset_discover_st(p_clcb->p_srcb, p_clcb->status); 15215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 15245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_fail 15265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description report API call failure back to apps 15285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 15305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_fail(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) 15335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb->status == BTA_GATT_OK) 15355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR1("operation not supported at current state [%d]", p_clcb->state); 15375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 15395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 15405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_conn_cback 15425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** bta_gattc_cmpl_cback 15435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description callback functions to GATT client stack. 15455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 15475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 15485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 15495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_gattc_conn_cback(tGATT_IF gattc_if, BD_ADDR bda, UINT16 conn_id, 15505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN connected, tGATT_DISCONN_REASON reason) 15515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 15525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BT_HDR *p_buf; 15535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_CLCB *p_clcb = NULL; 1554ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE 1555ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 role ; 1556ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 15575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG4("bta_gattc_conn_cback: cif = %d connected = %d conn_id = %d reaosn = 0x%04x", 15585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project gattc_if, connected, conn_id, reason); 15595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (connected) 15615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1562ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE 1563ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta role = L2CA_GetBleConnRole(bda); 1564ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1565ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (role == HCI_ROLE_SLAVE) 1566ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_gattc_conn_find_alloc(bda); 1567ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 1568ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 15695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* outgoing connection : locate a logic channel */ 15705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_clcb = bta_gattc_find_clcb_by_cif(gattc_if, bda)) == NULL) 15715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BLE_INCLUDED == TRUE 1573ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* for a background connection or listening connection */ 1574ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (/* L2CA_GetBleConnRole(bda)== HCI_ROLE_MASTER && */ 1575ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_gattc_check_bg_conn(gattc_if, bda, role)) 15765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* allocate a new channel */ 15785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb = bta_gattc_clcb_alloc(gattc_if, bda); 15795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 15815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb != NULL) 15835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->bta_conn_id = conn_id; 15855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL) 15875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 15885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->event = BTA_GATTC_INT_CONN_EVT; 15895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->layer_specific = conn_id; 15905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 15915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_buf); 15925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 15955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 15965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1597ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE 1598ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_gattc_conn_dealloc(bda); 1599ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif 16005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* connection attempt timeout, send connection callback event */ 16015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (reason == GATT_CONN_CANCEL ) 16025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1603ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_clcb = bta_gattc_find_alloc_clcb(gattc_if, bda); 16045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->bta_conn_id = conn_id; 16055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id)) != NULL) 16075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL) 16095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->event = BTA_GATTC_INT_DISCONN_EVT; 16115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->layer_specific = conn_id; 16125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->reason = reason; 16135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_buf); 16155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 16185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 16195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1(" connection ID: [%d] not used by BTA", conn_id); 16205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 16225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 16235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 16245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1625ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function bta_gattc_process_api_refresh 1626ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1627ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description process refresh API to delete cache and start a new discovery 1628ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** if currently connected. 1629ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1630ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns None. 1631ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1632ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta*******************************************************************************/ 1633ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid bta_gattc_process_api_refresh(tBTA_GATTC_CB *p_cb, tBTA_GATTC_DATA * p_msg) 1634ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1635ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC_SERV *p_srvc_cb = bta_gattc_find_srvr_cache(p_msg->api_conn.remote_bda); 1636ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC_CLCB *p_clcb = &bta_gattc_cb.clcb[0]; 1637ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta BOOLEAN found = FALSE; 1638ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT8 i; 1639ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1640ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_srvc_cb != NULL) 1641ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1642ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* try to find a CLCB */ 1643ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_srvc_cb->connected && p_srvc_cb->num_clcb != 0) 1644ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1645ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta for (i = 0; i < BTA_GATTC_CLCB_MAX; i ++, p_clcb ++) 1646ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1647ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_clcb->in_use && p_clcb->p_srcb == p_srvc_cb) 1648ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1649ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta found = TRUE; 1650ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta break; 1651ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1652ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1653ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (found) 1654ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1655ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_DISCOVER_EVT, NULL); 1656ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return; 1657ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1658ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1659ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* in all other cases, mark it and delete the cache */ 1660ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (p_srvc_cb->p_srvc_cache != NULL) 1661ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1662ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta while (p_srvc_cb->cache_buffer.p_first) 1663ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta GKI_freebuf (GKI_dequeue (&p_srvc_cb->cache_buffer)); 1664ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1665ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta p_srvc_cb->p_srvc_cache = NULL; 1666ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1667ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1668ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* used to reset cache in application */ 1669ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_gattc_co_cache_reset(p_msg->api_conn.remote_bda); 1670ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1671ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1672ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 1673ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 16745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_process_srvc_chg_ind 16755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description process service change indication. 16775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 16795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 16805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 16815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN bta_gattc_process_srvc_chg_ind(UINT16 conn_id, 16825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_RCB *p_clrcb, 16835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_SERV *p_srcb, 16845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_CLCB *p_clcb, 16855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_NOTIFY *p_notify, 16865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 handle) 16875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 16885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBT_UUID gattp_uuid, srvc_chg_uuid; 16895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN processed = FALSE; 16905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 i; 16915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project gattp_uuid.len = 2; 16935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project gattp_uuid.uu.uuid16 = UUID_SERVCLASS_GATT_SERVER; 16945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project srvc_chg_uuid.len = 2; 16965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project srvc_chg_uuid.uu.uuid16 = GATT_UUID_GATT_SRV_CHGD; 16975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 16985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_gattc_uuid_compare(p_notify->char_id.srvc_id.id.uuid, gattp_uuid, TRUE) && 16995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_uuid_compare(p_notify->char_id.char_id.uuid, srvc_chg_uuid, TRUE)) 17005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project processed = TRUE; 17025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* mark service handle change pending */ 17035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_srcb->srvc_hdl_chg = TRUE; 17045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* clear up all notification/indication registration */ 17055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_clear_notif_registration(conn_id); 17065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* service change indication all received, do discovery update */ 17075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ( ++ p_srcb->update_count == bta_gattc_num_reg_app()) 17085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* not an opened connection; or connection busy */ 17105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* search for first available clcb and start discovery */ 17115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb == NULL || (p_clcb && p_clcb->p_q_cmd != NULL)) 17125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0 ; i < BTA_GATTC_CLCB_MAX; i ++) 17145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_gattc_cb.clcb[i].in_use && 17165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_cb.clcb[i].p_srcb == p_srcb && 17175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_cb.clcb[i].p_q_cmd == NULL) 17185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb = &bta_gattc_cb.clcb[i]; 17205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 17215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send confirmation here if this is an indication, it should always be */ 17255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GATTC_SendHandleValueConfirm(conn_id, handle); 17265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if connection available, refresh cache by doing discovery now */ 17285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb != NULL) 17295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_DISCOVER_EVT, NULL); 17305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* notify applicationf or service change */ 17325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clrcb->p_cback != NULL) 17335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (* p_clrcb->p_cback)(BTA_GATTC_SRVC_CHG_EVT, (tBTA_GATTC *)p_srcb->server_bda); 17355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return processed; 17405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 17435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_proc_other_indication 17455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description process all non-service change indication/notification. 17475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 17495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 17515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_proc_other_indication(tBTA_GATTC_CLCB *p_clcb, UINT8 op, 17525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tGATT_CL_COMPLETE *p_data, 17535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_NOTIFY *p_notify) 17545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 17555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG2("bta_gattc_proc_other_indication check \ 17565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->att_value.handle=%d p_data->handle=%d", 17575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_data->att_value.handle, p_data->handle); 17585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG1("is_notify", p_notify->is_notify); 17595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_notify->is_notify = (op == GATTC_OPTYPE_INDICATION) ? FALSE : TRUE; 17615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_notify->len = p_data->att_value.len; 17625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bdcpy(p_notify->bda, p_clcb->bda); 17635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p_notify->value, p_data->att_value.value, p_data->att_value.len); 17645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_notify->conn_id = p_clcb->bta_conn_id; 17655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb->p_rcb->p_cback) 17675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*p_clcb->p_rcb->p_cback)(BTA_GATTC_NOTIF_EVT, (tBTA_GATTC *)p_notify); 17685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 17705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 17715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_process_indicate 17735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description process indication/notification. 17755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 17775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 17785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 17795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_gattc_process_indicate(UINT16 conn_id, tGATTC_OPTYPE op, tGATT_CL_COMPLETE *p_data) 17805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 17815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 handle = p_data->att_value.handle; 17825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_CLCB *p_clcb ; 17835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_RCB *p_clrcb = NULL; 17845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_SERV *p_srcb = NULL; 17855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_NOTIFY notify; 17865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BD_ADDR remote_bda; 17875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_IF gatt_if; 17885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!GATT_GetConnectionInfor(conn_id, &gatt_if, remote_bda)) 17905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("indication/notif for unknown app"); 17925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 17935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 17945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 17955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_clrcb = bta_gattc_cl_get_regcb(gatt_if)) == NULL) 17965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 17975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("indication/notif for unregistered app"); 17985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 17995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_srcb = bta_gattc_find_srcb(remote_bda)) == NULL) 18025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("indication/notif for unknown device, ignore"); 18045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 18055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id); 18085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_gattc_handle2id(p_srcb, handle, 18105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ¬ify.char_id.srvc_id, 18115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ¬ify.char_id.char_id, 18125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ¬ify.descr_type)) 18135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if non-service change indication/notification, forward to application */ 18155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!bta_gattc_process_srvc_chg_ind(conn_id, p_clrcb, p_srcb, p_clcb, ¬ify, handle)) 18165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* if app registered for the notification */ 18185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_gattc_check_notif_registry(p_clrcb, p_srcb, ¬ify)) 18195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* connection not open yet */ 18215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb == NULL) 18225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_clcb = bta_gattc_clcb_alloc(gatt_if, remote_bda)) != NULL) 18245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_clcb->bta_conn_id = conn_id; 18265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* send connection event */ 18285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_send_open_cback(p_clrcb, 18295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_GATT_OK, 18305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project remote_bda, 18315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project conn_id); 18325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 18345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR0("No resources"); 18365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_clcb != NULL) 18405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_proc_other_indication(p_clcb, op, p_data, ¬ify); 18415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* no one intersted and need ack? */ 18435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (op == GATTC_OPTYPE_INDICATION) 18445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG0("no one interested, ack now"); 18465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GATTC_SendHandleValueConfirm(conn_id, handle); 18475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 18515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR1("Indi/Notif for Unknown handle[0x%04x], can not find in local cache.", handle); 18535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 18555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 18565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_gattc_cmpl_cback 18585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description client operation complete callback register with BTE GATT. 18605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns None. 18625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 18635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 18645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_gattc_cmpl_cback(UINT16 conn_id, tGATTC_OPTYPE op, tGATT_STATUS status, 18655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tGATT_CL_COMPLETE *p_data) 18665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 18675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_CLCB *p_clcb ; 18685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_GATTC_OP_CMPL *p_buf; 18695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 len = sizeof(tBTA_GATTC_OP_CMPL) + sizeof(tGATT_CL_COMPLETE); 18705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_DEBUG3("bta_gattc_cmpl_cback: conn_id = %d op = %d status = %d", 18725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project conn_id, op, status); 18735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* notification and indication processed right away */ 18755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (op == GATTC_OPTYPE_NOTIFICATION || op == GATTC_OPTYPE_INDICATION) 18765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_gattc_process_indicate(conn_id, op, p_data); 18785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 18795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* for all other operation, not expected if w/o connection */ 18815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ((p_clcb = bta_gattc_find_clcb_by_conn_id(conn_id)) == NULL) 18825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project APPL_TRACE_ERROR1("bta_gattc_cmpl_cback unknown conn_id = %d, ignore data", conn_id); 18845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 18855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 18865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_buf = (tBTA_GATTC_OP_CMPL *) GKI_getbuf(len)) != NULL) 18895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(p_buf, 0, len); 18915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->hdr.event = BTA_GATTC_OP_CMPL_EVT; 18925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->hdr.layer_specific = conn_id; 18935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->status = status; 18945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->op_code = op; 18955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 18965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data != NULL) 18975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 18985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->p_cmpl = (tGATT_CL_COMPLETE *)(p_buf + 1); 18995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memcpy(p_buf->p_cmpl, p_data, sizeof(tGATT_CL_COMPLETE)); 19005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_sendmsg(p_buf); 19035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 19045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 19055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 19065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1907ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#if BLE_INCLUDED == TRUE 1908ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 1909ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1910ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Function bta_gattc_init_clcb_conn 1911ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1912ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Description Initaite a BTA CLCB connection 1913ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1914ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** Returns void 1915ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta** 1916ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta********************************************************************************/ 1917ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battavoid bta_gattc_init_clcb_conn(UINT8 cif, BD_ADDR remote_bda) 1918ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta{ 1919ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC_CLCB *p_clcb = NULL; 1920ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta tBTA_GATTC_DATA gattc_data; 1921ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta UINT16 conn_id; 1922ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1923ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* should always get the connection ID */ 1924ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if (GATT_GetConnIdIfConnected(cif, remote_bda,&conn_id) == FALSE) 1925ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1926ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta APPL_TRACE_ERROR0("bta_gattc_init_clcb_conn ERROR: not a connected device"); 1927ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta return; 1928ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1929ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1930ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta /* initaite a new connection here */ 1931ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta if ((p_clcb = bta_gattc_clcb_alloc(cif, remote_bda)) != NULL) 1932ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1933ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta gattc_data.hdr.layer_specific = p_clcb->bta_conn_id = conn_id; 1934ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1935ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta gattc_data.api_conn.client_if = cif; 1936ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta memcpy(gattc_data.api_conn.remote_bda, remote_bda, BD_ADDR_LEN); 1937ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta gattc_data.api_conn.is_direct = TRUE; 1938ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1939ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta bta_gattc_sm_execute(p_clcb, BTA_GATTC_API_OPEN_EVT, &gattc_data); 1940ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1941ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta else 1942ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta { 1943ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta APPL_TRACE_ERROR0("No resources"); 1944ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 1945ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 1946ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 1947ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#endif /* #if BLE_INCLUDED == TRUE */ 19485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTA_GATT_INCLUDED */ 1949